보초의 코딩일기장

[Swift 입문] 구조체, 클래스 본문

낙서장/edwith : swift 입문

[Swift 입문] 구조체, 클래스

장보비 2018. 7. 2. 14:53

구조체

스위프트의 대부분은 구조체로 이루어져 있다.

구조체는 값(value)타입이다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
/* 구조체 */
struct 이름 {
    //...
}
//구조체를 정의할 땐 struct 키워드를 사용한다.
 
struct Sample {
    // 가변 프로퍼티(값 변경 가능)
    var mutableProperty: Int = 100 
    
    // 불변 프로퍼티(값 변경 불가능)
    let immutableProperty: Int = 100 
    
    // 타입 프로퍼티(static 키워드 사용 : 타입 자체가 사용하는 프로퍼티)
    static var typeProperty: Int = 100 
    
    // 인스턴스 메서드(인스턴스가 사용하는 메서드)
    func instanceMethod() {
        print("instance method")
    }
    
    // 타입 메서드(static 키워드 사용 : 타입 자체가 사용하는 메서드)
    static func typeMethod() {
        print("type method")
    }
}
 
cs


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
// 가변 인스턴스 생성
var mutable: Sample = Sample()
 
mutable.mutableProperty = 200
 
// 불변 프로퍼티는 인스턴스 생성 후 수정할 수 없습니다
// 컴파일 오류 발생
//mutable.immutableProperty = 200
 
// 불변 인스턴스
let immutable: Sample = Sample()
 
// 불변 인스턴스는 아무리 가변 프로퍼티라도
// 인스턴스 생성 후에 수정할 수 없습니다
// 컴파일 오류 발생
//immutable.mutableProperty = 200
//immutable.immutableProperty = 200
 
 
// 타입 프로퍼티 및 메서드
Sample.typeProperty = 300
Sample.typeMethod() // type method
 
// 인스턴스에서는 타입 프로퍼티나 타입 메서드를
// 사용할 수 없습니다
// 컴파일 오류 발생
//mutable.typeProperty = 400
//mutable.typeMethod()
cs

var과 let을 구별하여 사용해야 한다.


클래스

클래스는 참조타입이다.

스위프트의 클래스는 다중상속이 되지 않는다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
/*클래스*/
class 이름 {
     //..
}
 
var mutableReference: Sample = Sample()
 
mutableReference.mutableProperty = 200
 
// 불변 프로퍼티는 인스턴스 생성 후 수정할 수 없습니다
// 컴파일 오류 발생
//mutableReference.immutableProperty = 200
 
 
// 인스턴스 생성 - 참조정보 수정 불가
let immutableReference: Sample = Sample()
 
// 클래스의 인스턴스는 참조 타입이므로 let으로 선언되었더라도 인스턴스 프로퍼티의 값 변경이 가능합니다
immutableReference.mutableProperty = 200
cs


구조체와 클래스는 매우 비슷한데 차이점이 몇개 존재한다.

그 중에 하나는 불변 인스턴스로 선언했을 때인데, 구조체로 선언한 Sample은 불변 인스턴스를 만들었을 때 가변 프로퍼티조차 변경할 수 없었지만 클래스로 선언한 Sample은 불변 인스턴스를 만들었을지라도 참조타입이므로 프로퍼티의 값 변경이 가능하다.

Buy me a coffeeBuy me a coffee
Comments