[Swift] 값 타입과 참조타입

선주·2022년 3월 31일
0

Swift

목록 보기
4/20
post-thumbnail

Class, Struct, Enum을 비교해보면 Class만 유일하게 참조타입이고 상속이 가능하다.


구조체

구조체는 언제 사용할까?

  • 다른 객체 또는 함수 등으로 전달될 때 참조가 아닌 복사를 원할 때
  • 자신을 상속할 필요가 없거나, 자신이 다른 타입을 상속받을 필요가 없을 때
  • Apple 프레임워크에서 프로그래밍을 할 때에는 주로 클래스를 많이 사용

Swift의 많은 기본 데이터 타입들이 구조체로 이루어져 있고, 보다시피 Swift는 구조체와 열거형을 클래스형보다 선호한다. 하지만 Apple 프레임워크는 대부분 클래스를 사용하기 때문에, Apple 프레임워크 사용시 구조체/클래스 선택은 우리의 몫이다. 상황에 따라 적절히 사용하기!

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

📌 값 타입과 참조 타입

Value | 데이터를 전달할 때 값을 복사하여 전달
Reference | 데이터를 전달할 때 값의 메모리 위치를 전달

아래의 예제를 보자.

struct ValueType {
    var property = 1
}

class ReferenceType {
    var property = 1
}

struct는 Value 타입이므로 값을 복사하여 전달한다. 따라서 ②는 ①을 똑같이 복사한 별도의 인스턴스가 된다. 때문에, ②의 프로퍼티 값을 변경해도 ①의 프로퍼티 값에는 영향이 없다.

var first = ValueType() // 첫번째 구조체 인스턴스 (①)
var second = first // 두번째 구조체 인스턴스 (②)
second.property = 2

print(first.property)
print(second.property)

class는 Reference 타입이므로 값의 메모리 위치를 전달한다. 따라서 ④의 프로퍼티 값을 변경하면 ③과 ④가 같은 위치를 가리키고 있기 때문에 ③의 프로퍼티를 출력해보면 변경된 값이 출력된다.

var third = ReferenceType() // 첫번째 클래스 인스턴스 (③)
var fourth = third // 두번째 클래스 인스턴스 (④)
fourth.property = 2

print(third.property)
print(fourth.property)


야곰의 스위프트 기본 문법 강좌를 수강하며 작성한 내용입니다.

profile
기록하는 개발자 👀

0개의 댓글