안녕하세요.
맥파이입니다.
전 아직 실무에서 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를 썼을때와 안썼을때의 차이점이 보이시나요?
오늘은 여기까지!!!
또 만나요!!