Swift Object-Oriented Programming

클래스와 객체 (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의 다섯 가지 접근 제어 수준을 제공합니다.

openpublic (Open and Public)

openpublic은 모듈 외부에서 접근할 수 있으며, 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의 클래스와 객체, 상속과 다형성, 접근 제어 지시자에 대해 상세하게 설명하고 다양한 예제를 제공했습니다. 추가적인 질문이나 더 많은 예제가 필요하면 언제든지 알려주세요!

Leave a Reply

Your email address will not be published. Required fields are marked *