IOS/swift

Swift class, instance, 상속, 다형성

뚜루뚜룽 2019. 10. 16. 00:01

1. Class, 객체, 인스턴스

클래스로부터 만들어진 객체를 인스턴스라고 한다.

객체지향 용어 비교

Property : 스위프트에서 변수가 클래스 안으로 들어가면 Property라고 한다.

Method : 스위프트에서 함수가 클래스 안에 있으면 Method라고 한다

2. Property 생성하기

1
2
3
class Man{
    var age : Int
}
cs

Man이라는 클래스를 생성하고 Int형 프로퍼티 age를 생성한 모습이다.

생성과 동시에 스위프트에서 에러를 확인할 수 있다.

"Stored property 'age' without initial value prevents synthesized initializers"

2행에 선언된 age는 Stored porperty로 저장공간이 있는 프로퍼티이다. 때문에 Swift는 age의 값을 초기화 또는 initalizer(생성자)를 통해 오류를 해결할 수 있다.

 

방안1. age 값을 초기화 하기

1
2
3
4
5
class Man{
    var age : Int = 0 //age = stored property
    var age1 : Int?
    var age2 : Int!
}
cs

 

방안2. 는 인스턴스 이후 나옴니다.

 

3. Instance 변수 생성하기

인스턴스 변수를 생성하기 전에 맨의 프로퍼티와 메소드를 다음과 같이 정의합니다.

1
2
3
4
5
6
7
8
9
10
11
class Man{
    var age : Int = 2    //Stored Property
    var weight : Double = 3.5    //Stored Property
    func display(){  //instance method
        print("나이 \(age), 몸무게 =\(weight)")
    }
    class func cM(){  //클래스 메소드, class를 지우고 static을 사용가능
        print("클래스 메서드입니다.")
    }
}
 
cs

2~3행 : age와 weight는 Int형과 Double형을 가졌고 2와 ,3.5로 초기화된 Stored Porperty입니다.

4행 : instance가 사용하는 method입니다.

7행 : class가 사용하는 method입니다.
1
2
3
4
5
6
7
var kim : Man = Man()   //인스턴스, ()는 initializer
 
kim.display()   //인스턴스가 display를 호출
                //.display는 인스턴스 메소드 이다
kim.cM() //--> Static member 'cM' cannot be used on instance of type 'Man'
Man.cM()    //클래스 메소드는 클래스가 호출한다.
}
cs

1행 : kim이라는 이름을 가진 Man Class를 사용하는 인스턴스 변수를 만듭니다. 우측에 괄호는 initializer라고 합니다.

3행 : class안에 display()메소드를 사용하는 행으로 kim이라는 인스턴스가 display()를 호출합니다.

5행 : Man class안에 cM()메서드를 사용하려 했지만 에러가 발생합니다.

    Static member인 cM은 인스턴스 변수에서 사용하지 못한다는 얘기입니다. 

    class  메서드는 static메서드와 사용 방법이 같은것을 유추할 수 있습니다.

    하지만 static메서드는 나중에 나올 상속 과정에서 상속을 받지 않고 class메서드만 상속을 할 수 있습니다.

6행: 5행을 주석처리 하여 에러를 없앤다음 클래스 메서드를 호출하는 행 입니다.

인스턴스를 변수를 만들때 var/let 이름 : 클래스 = 클래스(이니셜라이저)와 같은 형식으로 만들수 있습니다

 

4. Initializer(생성자)

추후 추가 예정