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