새소식

iOS/Swift

[Swift] 구조체와 클래스

  • -
참조 :  Swift 스위프트 프로그래밍 3판 Swift 5, 저자 야곰 (한빛미디어) , The Swift Programming Language Swift 5.6 Edition (iBooks)(https://books.apple.com/kr/book/the-swift-programming-language-swift-5-6/id881256329)

 

구조체(Struct)


- struct 키워드로 정의

- 구조체의 인스턴스는 값 타입

- 구조체를 정의하고 인스턴스를 생성하고 초기화하고자 할떄는 기본적으로 생성되는 멤버 와이즈 이니셜라이즈를 사용

- 구조체를 상수 let으로 선언하면 인스턴스 내부의 프로퍼티 값을 변경 불가, 변수 var로 선언하면
내부의 프로퍼티가 var로 선언된 경우에 값을 변경 가능

- 사용자 정의 이니셜라이저도 구현이 가능

 

struct BasicInformation{
	var name: String
    var age: Int
}

var kimInfo: BasicInformation = BasicInformation(name: "kim", age: 15)
kimInfo.age = 100
kimInfo.age = "park"

print(kimInfo.age) // 100
print(kimInfo.name) // park

let leeInfo: BasicInformation = BasicInformation(name: "lee", age: 55)

print(leeInfo.name) // lee
print(leeInfo.age) // 55

 

 

클래스(Class)


- 스위프트의 클래스는 부모클래스가 없더라도 상속 없이 단독으로 정의가 가능

- class 키워드 사용

- 클래스의 인스턴스는 참조타입

- 클래스 이름 뒤에 콜론(:)을 써주고 부모클래스를 명시

- 클래스를 정의한 후, 인스턴스를 생성하고 초기화하고자 할 대는 기본적인 이니셜라이저를 사용

- 인스턴스가 생성되고 초기화된 후 (이니셜라이즈) 프로퍼티 값에 접근하고 싶다면 마침표(,)를 사용

 

class Person{
	var height: Float = 0.0
    var weight: Float = 0.0
}

var kim: Person = Person()
kim.height = 169.9
kim.weight = 75.3

print(kim.height, ", " , kim.weight) // 169.9, 75.3

 

 

클래스 인스턴스의 소멸


- 클래스의 인스턴스는 참조 타입이므로 더는 참조할 필요가 없을 때 메모리에서 해제됨

- 소멸 직전에 deinit 메서드 호출됨

- deinit 메서드는 디이니셜라이저라고 하며, 클래스당 하나만 구현할 수 있으며, 매개변수의 변환 값을 가질 수 없음

- deinit 메서드에서는 인스턴스가 메모리에서 해체되기 직전에 처리할 코드를 삽입

 

구조체 vs 클래스


  구조체(Struct) 클래스(Class)
공통점 - 값을 저장하기 위해 프로퍼티를 정의 가능
- 기능 실행을 위해 메서드 정의 가능
- 서브스크립트 문법을 통해 구조체 또는 클래스가 갖는 값(프로퍼티)에 접근하도록
서브스크립트를 정의 가능
- 초기화될 때의 상태를 지정하기 위해 이니셜라이저를 정의 가능
- 초기구현과 더불어 새로운 기능 추가를 위해 익스텐션을 통해 확장 가능
- 특정 기능을 실행하기 위해 특정 프로트콜을 준수
차이점 - 값 타입(전달될 값이 복사되어 전달)
- 상속 불가

- 참조 타입
(참조(주소)가 전달됨, 포인터와 유사)

- 타입캐스팅 허용
- deinit 활용 가능
- 참조 횟수 계산(Refernce Counting) 가능

 

※ 스위프트의 기본 타입(Bool, Int, Array, Dictionary, Set 등)도 String 타입과 마찬가지로 모두 구조체로 구현되어 있음

 

728x90

'iOS > Swift' 카테고리의 다른 글

[Swift] print(_:separator:terminator:)  (0) 2022.09.21
[Swift] 프로퍼티와 메서드  (0) 2022.09.20
[Swift] 모나드  (0) 2022.09.16
[Swift] 옵셔널(Optional)  (0) 2022.09.15
[Swift] 함수  (0) 2022.09.14
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.