본문 바로가기

앱 개발/IOS

[IOS 프로그래밍을 위한 스위프트 기초] 2단원 16. 클래스 vs 구조체 / 열거형

16. 클래스 vs 구조체 / 열거형

값 타입과 참조 타입 비교

클래스

- 전통적인 OOP 관점에서의 클래스

- 단일상속

- (인스턴스/타입) 메서드

- (인스턴스/타입) 프로퍼티

참조 타입

- Apple 프레임워크의 대부분의 큰 뼈대는 모두 클래스로 구성되어 있다.

구조체

- C언어 등의 구조체보다 다양한 기능을 가진다.

- 상속 불가

- (인스턴스/타입) 메서드

- (인스턴스/타입) 프로퍼티

값 타입

- Swift 대부분의 큰 뼈대는 모두 구조체로 구성되어 있다.

열거형(Enum)

- 다른 언어의 열거형과는 많이 다른 존재이다.

- 상속 불가

- (인스턴스/타입) 메서드

- (인스턴스/타입) 연산 프로퍼티

값 타입

- Enumeration

- 유사한 종류의 여러 값을 유의미한 이름으로 한 곳에 모어 정의

예) 요일, 상태값, 월(Month) 등

열거형 자체가 하나의 데이터 타입이고 열거형의 case 하나하나 전부 하나의 유의미한 값으로 취급한다.

- 선언 키워드 - enum

 

구조체는 언제 사용하나?

- 연관된 몇몇의 값들을 모아서 하나의 데이터타입으로 표현하고 싶을 때

- 다른 객체 또는 함수 등으로 전달될 때 참조가 아닌 복사를 원할 때

- 자신을 상속할 필요가 없거나 자신이 다른 타입을 상속받을 필요가 없을 때

- Apple 프레임워크에서 프로그래밍할 때에는 주로 클래스를 많이 사용한다.

값 vs 참조

- 데이터를 전달할 때 값을 복사하여 전달한다.

참조

- 데이터를 전달할 때 값이 메모리 위치를 전달한다.

struct ValueType {
	var property = 1
}

class ReferenceType {
	var property = 1
}

let firstStructInstance = ValueType()
var secondStructInstance = firstStructInstance
secondStructInstance.property = 2

print("first struct instance property: \(firstStructInstance.property)") // 1
print("second struct instance property: \(secondStructInstance.property)") // 2

구조체는 값이 변한다.

let firstClassReference = ReferenceType()
var secondClassReference = firstClassReference
secondClassReference.property = 2

print("first class reference property: \(firstClassReference.property)")	// 2
print("second class reference property: \(secondClassReference.property)")	// 2

반면, 클래스는 하나의 인스턴스 변화로 모두 new_instance를 가리키게 된다.

즉, 참조 값이 복사됨을 유념해야 한다.

 

스위프트에서의 자료형

public struct Int
public struct Double
public struct String
public struct Dictionary<Key : Hashable, Value>
public struct Array<Element>
public struct Set<Element: Hashable>

- 스위프트는 구조체, 열거형 사용을 선호한다.

- Apple 프레임워크는 대부분 클래스를 사용한다.

- Apple 프레임워크 사용시 구조체/클래스 선택은 우리의 몫이다.

 

 

 

 

©️NAVER Boostcourse.  All Rights Reserved.