티스토리 뷰

[시작]


- 구조체와 클래스는 프로그래머가 데이터를 용도에 맞게 묶어 표현하고자 할 때 사용함

- Swift에서 구조체의 인스턴스는 값 타입, 클래스의 인스턴스는 참조 타입

- 소스 파일 하나에 여러 개의 구조체와 여러 개의 클래스를 정의하고 구현 가능

- 중첩 타입의 정의 및 선언 가능



[구조체]


1
2
3
4
5
6
7
8
9
10
11
12
struct MyInfo{
    let name: String
    let age: Int
    let city: String
    func printInfo(){
        print(name, age, city)
    }
    //구조체에 메서드 정의 가능
}
 
let myInfo: MyInfo = MyInfo(name: "Name", age: 13, city: "What")
myInfo.printInfo()
cs




[클래스]


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class MyInfo{
    let name: String
    let height: Double
    let favorite: String
    init() {
        name = "HIHI"
        height = 1234
        favorite = "AJVJ"
    }
    deinit {
        print("MyInfo 인스턴스 소멸")
    }
    //소멸자 : 인스턴스가 메모리에서 해제되기 직전 호출
}
 
var myInfo: MyInfo? = MyInfo()
myInfo = nil
//MyInfo 인스턴스 소멸 출력
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
29
struct MyInfoStruct{
    var name: String
    var age: Int
    var city: String
}
 
class MyInfoClass{
    var name: String
    var age: Int
    var city: String
    init() {
        name = "Swift"
        age = 4
        city = "Earth"
    }
}
 
var myInfoStruct = MyInfoStruct(name: "Swift", age: 4, city: "Earth")
var myInfoClass = MyInfoClass()
 
print(myInfoStruct.age, myInfoClass.age)
 
let copyStruct = myInfoStruct
let copyClass = myInfoClass
 
myInfoStruct.age = 10000
myInfoClass.age = 10000
 
print(copyStruct.age, copyClass.age)
cs

 

위의 코드에서 구조체는 값 타입이므로 값 자체가 복사되어 copyStruct.age의 값이 변하지 않음

하지만 클래스는 참조 타입이므로 copyClass.age의 값이 10000으로 변함


- === 연산자를 사용하여 인스턴스끼리 참조가 같은지 확인 가능



[구조체와 클래스 선택해서 사용하기]


- 다음과 같은 경우를 제외하면 일반적으로 클래스를 정의하여 사용

 : 연관된 간단한 값의 집합을 캡슐화하는 것만이 목적일 때

 : 캡슐화한 값을 참조하는 것보다 복사하는 것이 합당할 때

 : 구조체에 저장된 프로퍼티가 값 타입이며 참조하는 것보다 복사하는 것이 합당할 때

 : 다른 타입으로부터 상속받거나 자신을 상속할 필요가 없을 때

 : 예) 좌표계

'Swift > 야곰의 스위프트' 카테고리의 다른 글

11장 인스턴스 생성 및 소멸  (0) 2018.02.05
10장 프로퍼티와 메서드  (0) 2018.02.03
8장 옵셔널  (0) 2018.02.03
7장 함수  (0) 2018.01.29
6장 흐름 제어  (0) 2018.01.29
댓글
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2025/02   »
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
글 보관함