Swift의 Class 사용 방법 총정리

Swift에서 Class의 정의, 문법, 사용 방법을 알아보세요


Swift의 Class 사용 방법 총정리

Swift에서 Class 란?

Swift에서 Class는 객체 지향 프로그래밍(OOP)의 핵심 요소로, 데이터와 기능을 하나의 단위로 묶어 재사용성과 코드의 가독성을 높이는 데 사용된다. 클래스는 참조 타입(reference type)이며, 상속과 같은 객체 지향적 개념을 지원한다.

Class의 기본구조

Swift에서 클래스는 class 키워드를 사용해 정의한다. 클래스는 프로퍼티와 메서드를 포함할 수 있으며, 초기화 메서드(init)를 통해 초기값을 설정할 수 있다.

class Person {
    var name: String
    var age: Int
 
    // 초기화 메서드
    init(name: String, age: Int) {
        self.name = name
        self.age = age
    }
 
    // 메서드
    func introduce() {
        print("안녕하세요. 저는 \(name)이고, 나이는 \(age)살입니다.")
    }
}
 
// 클래스 인스턴스 생성
let person = Person(name: "지수", age: 28)
person.introduce()
 
// 안녕하세요. 저는 지수이고, 나이는 28살입니다.

클래스(Class)의 상속(Inheritance)

클래스는 상속을 통해 기존 클래스를 확장할 수 있다. super 키워드를 사용해 Parent 클래스의 메서드(method)나 프로퍼티(property)에 접근할 수 있다.

override 키워드를 사용해 부모 클래스의 메서드를 재정의할 수 있다.

class Animal {
    var species: String
 
    init(species: String) {
        self.species = species
    }
 
    func sound() {
        print("\(species)가 소리를 냅니다.")
    }
}
 
class Dog: Animal {
    var name: String
 
    init(name: String, species: String = "강아지") {
        self.name = name
        super.init(species: species)
    }
 
    override func sound() {
        print("\(name)가 멍멍 짖습니다!")
    }
}
 
let dog = Dog(name: "바둑이")
dog.sound()
// 출력: 바둑이가 멍멍 짖습니다!
 

클래스(Class)는 참조 타입의 특성을 가진다.

클래스는 참조 타입이기 때문에 동일한 객체를 여러 변수에서 참조할 수 있다.

class Person {
    var name: String
    var age: Int
}
 
let person1 = Person()
let person2 = person1
person1.name = "지수"
person2.name = "준호"
 
print(person1.name) // 출력: 준호
print(person2.name) // 출력: 준호

클래스(Class)에서 Static과 Class 키워드로 타입 프로퍼티(Type Property) 정의

클래스에서는 static 키워드를 사용해 타입 프로퍼티(Type Property)를 정의할 수 있다. 이때 타입 프로퍼티는 모든 인스턴스에 공유되며, 클래스 자체에 속한다.

class Math {
    static let pi = 3.14159 // 타입 프로퍼티
 
    static func square(_ value: Double) -> Double { // 타입 메서드
        return value * value
    }
}
 
// 외부에서 접근
print(Math.pi) // 출력: 3.14159
print(Math.square(5)) // 출력: 25.0

클래스에서 class 키워드를 사용해 오버라이드 가능한 타입 메서드를 정의할 수 있다. 이때 오버라이드 가능한 타입 메서드는 클래스 인스턴스에서 재정의할 수 있다. 반면 static 키워드를 사용해 정의한 타입 메서드는 오버라이드할 수 없다.

class Animal {
    class func sound() {
        print("동물이 소리를 냅니다.")
    }
}
 
class Dog: Animal {
    override class func sound() {
        print("강아지가 멍멍 짖습니다.")
    }
}