클래스와 객체 (Classes and Objects)
클래스 정의 (Defining a Class)
클래스는 객체 지향 프로그래밍의 기본 단위로, 속성과 메서드를 포함할 수 있습니다. class 키워드를 사용하여 클래스를 정의합니다.
class Person {
var name: String
var age: Int
init(name: String, age: Int) {
self.name = name
self.age = age
}
func greet() {
print("Hello, my name is \(name) and I am \(age) years old.")
}
}
객체 생성 (Creating an Object)
클래스의 인스턴스를 생성하여 객체를 만듭니다.
let person = Person(name: "Alice", age: 30) person.greet() // "Hello, my name is Alice and I am 30 years old."
클래스의 속성과 메서드 (Properties and Methods of a Class)
클래스는 저장 속성, 계산 속성, 인스턴스 메서드를 가질 수 있습니다.
class Rectangle {
var width: Double
var height: Double
init(width: Double, height: Double) {
self.width = width
self.height = height
}
var area: Double {
return width * height
}
func description() -> String {
return "Rectangle: \(width) x \(height), Area: \(area)"
}
}
let rect = Rectangle(width: 5, height: 10)
print(rect.description()) // "Rectangle: 5.0 x 10.0, Area: 50.0"
상속과 다형성 (Inheritance and Polymorphism)
상속 (Inheritance)
상속을 통해 클래스는 다른 클래스의 속성과 메서드를 물려받을 수 있습니다. 상속을 통해 코드를 재사용하고 확장할 수 있습니다.
class Animal {
var name: String
init(name: String) {
self.name = name
}
func sound() {
print("Animal sound")
}
}
class Dog: Animal {
override func sound() {
print("Woof! Woof!")
}
}
let dog = Dog(name: "Buddy")
dog.sound() // "Woof! Woof!"
다형성 (Polymorphism)
다형성을 통해 동일한 메서드가 다양한 클래스에서 다르게 구현될 수 있습니다. 이를 통해 유연한 코드를 작성할 수 있습니다.
class Cat: Animal {
override func sound() {
print("Meow! Meow!")
}
}
let animals: [Animal] = [Dog(name: "Buddy"), Cat(name: "Whiskers")]
for animal in animals {
animal.sound()
}
// "Woof! Woof!"
// "Meow! Meow!"
접근 제어 지시자 (Access Control Modifiers)
접근 제어의 개념 (Concept of Access Control)
접근 제어를 통해 클래스, 구조체, 열거형, 프로토콜의 멤버에 대한 접근을 제어할 수 있습니다. Swift는 open, public, internal, fileprivate, private의 다섯 가지 접근 제어 수준을 제공합니다.
open과 public (Open and Public)
open과 public은 모듈 외부에서 접근할 수 있으며, open은 클래스의 서브클래싱과 메서드 재정의를 허용합니다.
open class OpenClass {
open func openMethod() {
print("Open Method")
}
public func publicMethod() {
print("Public Method")
}
}
public class PublicClass {
public var publicProperty = "Public Property"
public func publicMethod() {
print(publicProperty)
}
}
internal (Internal)
internal은 기본 접근 수준으로, 같은 모듈 내에서 접근할 수 있습니다.
class InternalClass {
var internalProperty = "Internal Property"
func internalMethod() {
print(internalProperty)
}
}
fileprivate (Fileprivate)
fileprivate는 같은 파일 내에서만 접근할 수 있습니다.
class FilePrivateClass {
fileprivate var fileprivateProperty = "Fileprivate Property"
fileprivate func fileprivateMethod() {
print(fileprivateProperty)
}
}
let fpClass = FilePrivateClass()
fpClass.fileprivateMethod() // "Fileprivate Property"
private (Private)
private는 같은 정의 내에서만 접근할 수 있습니다.
class PrivateClass {
private var privateProperty = "Private Property"
private func privateMethod() {
print(privateProperty)
}
func publicMethod() {
privateMethod()
}
}
let pClass = PrivateClass()
pClass.publicMethod() // "Private Property"
이와 같이 Swift의 클래스와 객체, 상속과 다형성, 접근 제어 지시자에 대해 상세하게 설명하고 다양한 예제를 제공했습니다. 추가적인 질문이나 더 많은 예제가 필요하면 언제든지 알려주세요!
