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

2. Objective-C / 기본 구문 및 구조

by Toughie 2024. 5. 5.

KAKAO-Choonsik

Objective-C 프로그램의 기본 구성 요소

 

- 전처리 명령

- 인터페이스

- 구현

- 메서드

- 변수

- 클로저 등 표현식(코드블럭)

- 주석

 

// 컴파일러가 실제 컴파일을 시작하기 전에 헤더파일을 포함하도록 지시하는 전처리기 명령어
#import <Foundation/Foundation.h>

// 모든 객체의 부모 클래스인 NSObject를 상속하는 클래스 인터페이스를 선언한다.
@interface SampleClass: NSObject
// 부호 (반환타입)메서드명(파라미터타입)파라미터명 으로 메서드를 선언한다.
// - 는 인스턴스 메서드를, +는 클래스 메서드를 의미한다.(static)
- (void)sampleMethod;
//중괄호 대신 인터페이스 선언부가 끝났음을 @end로 표기한다. 
//빼먹기 좋을 거 같으니까 시작하면 그냥 @end 같이 치고 시작하면 좋을듯
@end

//선언한 인터페이스 구현
@implementation SampleClass
- (void)sampleMethod {
    NSLog(@"Hello, World! \n");
}
@end

//프로그램 엔트리 포인트 main 함수 하나만 있어야됨! 중복되면 링커 오류 발생
int main(void) {
    /* this is comment */
    SampleClass *sampleClass = [[SampleClass alloc]init];
    [sampleClass sampleMethod];
    [sampleClass release];
    return 0;
}

 

객체 초기화 부분만 조금 더 살펴보자.

SampleClass *sampleClass = [[SampleClass alloc]init];
[sampleClass sampleMethod];
[sampleClass release];

 

alloc

- 해당 클래스의 인스턴스를 위한 메모리 할당. 모든 클래스 메서드에 상속됨.

- 클래스 인스턴스의 사이즈에 맞게 동적 할당(c에서 malloc) 런타임에 힙에 할당됨.

 

init

- 인스턴스 초기화 후 메모리에 할당된 객체의 포인터 반환.

 

[메서드 호출]

이후 포인터를 통해 메서드 콜을 하는데, 위와 같이 대괄호로 감싸준다.

점문법도 못쓰고 대괄호로 감싸주는게 배열도 아닌 것이 참으로 특이하다..

 

release

최근 xcode 설정으로는 ARC 사용 설정이 default값이라서, 직접적으로 release를 해주는 것이 금지되어 있지만

옵젝씨로 개발하는 환경이라면 ARC를 사용하지 않을 가능성이 높다고 생각해서 직접 reference count를 감소시켜줬다.

프로젝트 설정 - TARGETS - Objective-C Automatic Reference Counting에서 No로 바꿔주면 된다. 


Objective C의 토큰

토큰은 키워드, 식별자, 상수, 문자열 리터럴, 심볼 등을 의미한다. 

그냥 이것도 기본 문법으로 생각하면 된다.

 

1. Semicolons ;

문장의 끝을 나타내며 각각의 문장은 반드시 세미콜론을 붙여야 한다. (아니면 에러남)

 

2. Comments

컴파일러는 주석을 무시한다.

근데 배포파일에 주석을 남기거나 지우거나는 상황에 따라 다르다. (정해진 규칙 따라 하자)

 

3. Identifiers(네이밍)

변수나 함수 등을 구분하는 이름.

_(언더바), A~Z, a~z, 0~9 숫자로 이루어져 있다.

대소문자 구분한다.

@,$,% 같은건 사용할 수 없다.

 

4.Keywords

예약어이다. 변수명으로 사용하지 않도록 하자.

5. Whitespace

공백은 요소와 요소 사이의 위치를 식별하는데 필요하다.

그냥 다른 언어와 같이 적당히 띄어쓰면 된다.

int age;