Swift/기초

Swift 기초 다지기 - 클래스 (Class)

박신혁 2024. 10. 7. 19:29

클래스 (Class)

연관된 데이터(프로퍼티)와 기능(메서드)을 하나의 구조로 묶어 관리할 수 있는 참조 타입

 

class Person {
    
    //프로퍼티
    var name: String
    var age: Int
    
    // 초기화 init
    init(name: String, age: Int) {
        self.name = name
        self.age = age
    }
    
    // 메서드
    func introduce(){
        print("안녕하세요, 제 이름은 \(name) 이고, \(age)살 입니다.")
    }
}

// 인스턴스 생성 (철수 17세 라는 인스턴스)
let person1 = Person(name: "철수", age: 17)
person1.introduce() // 안녕하세요, 제 이름은 철수 이고, 17살 입니다.

 

class 키워드로 선언, init으로 기본값을 설정 할 수 있다.

프로퍼티 - 클래스 내에서 정의된 변수나 상수

메서드 - 클래스 내에서 정의된 함수


참조 타입

같은 인스턴스를 여러 변수 또는 상수가 참조 할 수 있으며, 한 곳에서 값을 변경하면 그 변경 사항이 다른 곳에서도 반영

 

// 인스턴스 생성
let person1 = Person(name: "철수", age: 17)
person1.introduce() // 안녕하세요, 제 이름은 철수 이고, 17살 입니다.

let person2 = person1
person2.name = "영희"

person2.introduce() // 안녕하세요, 제 이름은 영희 이고, 17살 입니다.
person1.introduce() // 안녕하세요, 제 이름은 영희 이고, 17살 입니다.

 

person1 과 person2가 같은 인스턴스를 참조 하고 있어

person2의 name을 "영희" 로 변경하니 person1의 name도 "영희"로 반영된걸 확인 할 수 있다.

 

값타입인 구조체 와의 가장 큰 차이


상속

부모 클래스의 프로퍼티, 메서드 등을 몰려 받아 사용 할 수 있다, (코드 재사용)

 

// Person을 상속 받은 Job 클래스
class Job: Person {
    var job: String
    
    init(name: String, age: Int, job: String){
        self.job = job
        super.init(name: name, age: age)
    }
    
    override func introduce() {
        print("제 이름은 \(name) 이고, \(age)살 입니다, 직업은 \(job)입니다.")
    }
}

let newPerson = Job(name: "길동", age: 15, job: "도둑")
newPerson.introduce() // 제 이름은 길동 이고, 15살 입니다, 직업은 도둑입니다.

 

super 부모 클래스 프로퍼티, 메서드 접근할때 사용

override 부모 클래스 프로퍼티, 메서드 재정의 할때 사용

728x90