Starbucks Caramel Frappuccino
본문 바로가기
  • 그래 그렇게 조금씩
iOS Developer/Objective-C

13. Objective-C Structure 구조체

by Toughie 2024. 5. 16.

KAKAO-Choonsik

 Objective-C에서 배열에는 '같은 타입'의 요소들을 담을 수 있다.

 Stucture은 '다양한 타입의 요소'를 담을 수 있는 유저 커스텀 타입이다.

 구조체는 주로 특정한 관련 데이터를 묶어서 관리하기 위해 사용된다.

 

 구조체는 클래스와 달리 힙이 아닌, 스택 영역에 할당되고 해제된다.

 구조체는 일반적으로 정적으로 크기가 정해져 있기 때문이다.

 즉 Object타입이 아니라는 뜻이다. 메세지를 보낼 수 없고, 상속을 지원하지 않으며 다형성을 가지지 않는다.

 

 구조체의 인스턴스는 함수의 콜스택 프레임 내에서 생성되며, 함수가 종료되면

 스택 프레임이 제거되면서 구조체 인스턴스도 함께 제거된다. (자동 해제)

 따라서 구조체는 명시적으로 메모리 해제를 해줄 필요가 없다.


아래 예시 코드를 통해 구조체를 활용하는 방법에 대해 간단히 알아보자.

 

#import <Foundation/Foundation.h>

//구조체 정의
struct Dramas {
    NSString *title;
    NSString *actor;
    NSString *subject;
    int id;
};

@interface MyClass : NSObject
-(void) printDramaInfo: (struct Dramas) drama;
-(void) printDramaInfoPtr: (struct Dramas *) drama;
@end

@implementation MyClass

-(void) printDramaInfo:(struct Dramas)drama {
    NSLog(@"title: %@",drama.title);
    NSLog(@"actor: %@",drama.actor);
    NSLog(@"subject: %@",drama.subject);
    NSLog(@"id: %d",drama.id);
}

-(void) printDramaInfoPtr:(struct Dramas *)drama {
    NSLog(@"title: %@",drama ->title);
    NSLog(@"actor: %@",drama ->actor);
    NSLog(@"subject: %@",drama->subject);
    NSLog(@"id: %d",drama->id);
}

@end

int main(void) {
    //declare
    struct Dramas favorite;
    //specification
    favorite.title = @"Queen of Tears";
    favorite.actor = @"Jiwon, Kim";
    favorite.subject = @"love";
    favorite.id = 240428;
    NSLog(@"favorite drama's title: %@, actor: %@, subject: %@, id: %d",favorite.title, favorite.actor, favorite.subject,favorite.id);

    //함수로 구조체 전달
    MyClass *myClass = [[MyClass alloc] init];
    [myClass printDramaInfo:favorite];
    
    //구조체 포인터 설정
    struct Dramas *structPtr;
    structPtr = &favorite;
    
    //구조체 멤버 연산자 ->사용
    [myClass printDramaInfoPtr:structPtr];
    
    return 0;
}

 

SwiftUI에서는 뷰를 구조체를 통해 구현함으로써 가볍고 빠른 장점이 있었듯,

무작정 클래스만 사용하기 보다는 상황에 따라 구조체를 적절히 사용하는 것이 중요하다고 생각한다.

(자바는 클래스 뿐이지만, C계열에는 구조체가 존재하니)