Class(클래스)

이창형·2022년 5월 15일
0

Class(클래스)

class Name {
    // 클래스 안의 변수: 속성(property)
    var name = "changBro"
    
    // 클래스 안의 함수: 메소드(method)
    func my_name() {
        print("my name is \(name)")
    }
}

// 클래스를 실제로 쓸 수 있도록 인스턴스를 만들어 주는 작업
// 상수 changBro는 Name이라는 클래스 데이터 타입을 가지게 된다
let changBro : Name = Name()

// .name으로 name속성에 접근
print(changBro.name)

// .my_name()으로 my_name()메소드에 접근
changBro.my_name()

changBro.name = "Lee"
changBro.my_name()

클래스를 만들어 보았습니다. 클래스를 선언하기 위해서는 위 코드 처럼

class 클래스 이름 {
       코드
}

이렇게 코드를 작성하면 작성이 됩니다. Name이라는 클래스 안에서 name이라는 프로퍼티와 my_name이라는 메소드를 선언해 주었습니다. '.'을 이용하면 위 코드 주석 처럼 속성이나 메소드에 접근을 할 수 있습니다. 위 코드를 실행시켜 보겠습니다.


Class Inheritance (클래스 상속)

클래스는 "프로그램 재사용을 쉽게 할 수 있다"라는 장점이 있습니다. 이것을 응용한 것이 상속(Inheritance) 입니다. 상속이란 쉽게 말하면 기존 클래스의 모든 기능을 이어받아 새로운 클래스를 정의합니다.

// 슈퍼 클래스
class Name {
    var name = "changBro"
    
    func my_name() {
        print("my name is \(name)")
    }
}

// YourName이 Name을 상속
class YourName : Name {  
    var yourName = "Lee"
    
    func ourName() {
        print("my name is \(name) and your name is \(yourName)")
    }
}

let changBro : YourName = YourName()


print(changBro.name)
print(changBro.yourName)

// 클래스 상속으로 YourName에는 my_name()메소드가 없지만 사용 가능하다
changBro.my_name()

changBro.ourName()

위 코드를 실행해 보겠습니다.

YourName이라는 클래스에는 my_name()이라는 메소드는 없지만 Name이라는 클래스를 상속받았기 때문에 메소드를 사용하여 출력하는 것을 볼 수 있다.


Class Initialization(클래스 초기화)

class Name {
    var name : String
    var age : Int
    
    // 초기화
    init(name:String, age:Int) { 
        self.name = name
        self.age = age
    }
    
    func my_name() {
        print("my name is \(name) and \(age) year's old")
    }
}

let name1 : Name = Name(name: "changBro", age: 26)
let name2 : Name = Name(name: "Lee", age: 27)

// name과 age값이 따로 따로 다르게 저장된다
name1.my_name()
name2.my_name()

클래스안 속성들에게 값을 지정해 주지 않고 init()메소드를 이용하여 초기화를 해보았습니다. init() 메소드 안의 self는 자기 자신을 가르키는 것 값입니다. 즉 self.가 붙은 변수들은 클래스 내의 변수라는 것이 됩니다. 이제 위 코드를 실행해 보겠습니다.

인수를 다르게 지정해두었기 때문에 결과가 각각 다르게 나오는 것을 알 수 있습니다.

profile
iOS Developer

0개의 댓글