카테고리 없음

[Swift] Swift와 Objective-C에서 Struct의 차이점

magpiebros 2023. 4. 7. 17:03
반응형

안녕하세요.

맥파이입니다.

전 아직 실무에서 Objective-C를 사용하고 있습니다.

환경적 제약으로 Objective-C와 Swift를 오가다 보니 개념이 헷갈리기 시작해서 

Swift와 Objective-C에서 Struct의 차이점을 정리해보려고 합니다.

 

Swift와 Objective-C에서 Struct의 차이점Swift와 Objective-C에서 struct는 다음과 같은 차이점이 있습니다.


상속

Objective-C에서는 struct는 상속을 지원하지 않습니다.

Swift에서는 struct도 class와 마찬가지로 상속을 지원합니다.


값 타입 vs 참조 타입

Swift에서는 struct는 값 타입(Value Type)입니다. 

변수나 상수에 struct를 할당하면, 해당 변수나 상수에는 struct의 값이 복사됩니다.

Objective-C에서는 struct는 기본적으로 참조 타입(Reference Type)입니다. 변수나 상수에 struct를 할당하면, 해당 변수나 상수에는 struct의 주소값이 저장됩니다.

 

메소드

Swift에서는 struct도 class와 마찬가지로 메소드(Method)를 가질 수 있습니다.

Objective-C에서는 struct는 메소드를 가질 수 없습니다.


초기화

Swift에서는 struct는 자동으로 멤버 와이즈(initialize) 초기화를 제공합니다.

이것은 모든 멤버에 기본값을 할당하며, struct를 초기화할 때 값을 지정하지 않은 멤버는 자동으로 기본값이 할당됩니다. Objective-C에서는 struct를 초기화할 때 모든 멤버에 값을 지정해야 합니다.

멤버의 접근 제어

Swift에서는 struct 내부의 멤버에 대해 접근 제어(Access Control)를 지원합니다.

멤버를 private, internal, public 등으로 선언하여 다른 모듈에서의 접근을 제한할 수 있습니다.

Objective-C에서는 struct 내부의 멤버에 대해 접근 제어를 지원하지 않습니다.

 

보너스 : 리턴값으로 사용하는 struct

사실은 리턴값으로 struct를 사용하기 위해서 만지작 거리다가 글을 작성하게 되었습니다.

typedef와도 관련이 되어있는 글이니... typedef를 한번 읽어보시길 권해드립니다.

 

2023.04.07 - [분류 전체보기] - [Objective-C] typedef란 무엇인가?

 

 

typedef struct {
    BOOL result;
    NSString* money;
} Result;

struct Result2 {
    BOOL result;
    NSString* money;
} ;


struct Result2 b;
b.result = false;

Result a;
a.result = false;


ResultOfInquiryMoney를 리턴값으로 보낼때 어떻게 사용해야 할까요?

@implementation TestViewModel
+ (Result)sampleFunctionㅕ {
    Result a;
    a.result = false;
    return a;
}

+ (struct Result2)sampleFunction2 {
    struct Result2 b;
    b.result = false;
    return b;
}


typedef를 썼을때와 안썼을때의 차이점이 보이시나요?
오늘은 여기까지!!!

 

또 만나요!!

 

반응형