상세 컨텐츠

본문 제목

[Objective-C] main 함수

헉!!/Objective C

by 권태성 2012. 1. 4. 20:39

본문




최초로 호출되는 main함수

─────────────────────
함수란 일련의 처리를 모아서 '함수명'으로 호출할 수 있도록 한 것입니다. 이 때 함수에 넘겨주는 값을 인수라고 합니다. 그리고 함수가 처리한 결과를 호출한 쪽으로 되돌려주는 값을 반환값이라고 합니다.

함수는 다음과 같은 형식으로 정의합니다.

반환값의 타입  함수명(인수 리스트){
함수의 내용
return 반환값;
}

 즉, 함수의 내용은 '{'와 '}' 사이에 기술하는 것입니다.
C언어에서는 프로그램을 실행하면 제일 먼저 main이라는 이름의 함수가 호출된다는 규칙이 있습니다. Objective-C에서도 마찬가지 입니다. Sample.m을 살펴보면 다음과 같이 main 함수가 기술되어 있습니다.

int main (int argc, const char * argv[]){
//여기서 int는 반환값의 형식이고 int argc, const char * argv[]는 인수의 리스트 입니다.
...
 
반환값의 형식이 int로 되어 있는데, 이것은 정수를 나타내는 자료형입니다. 즉, main 함수는 어떤 정수값을 반환한다는 뜻입니다. 함수명 뒤 '()'안에는 인수들을 기술합니다. 인수가 여러개인 경우에는 콤마로 구분합니다. main 함수에는 커맨드 라인으로부터 인수를 전달할 수 있습니다. 'int argc, const char * argv[]'가 바로 그 부분인데, 이것을 커맨드 라인 인수라고 부릅니다. 커맨드 라인 인수의 모양이 조금 복잡해 보이지만 Xcode가 자동으로 생성해주는 부분이므로 지금은 그 내용에 크게 신경 쓰지 않아도 됩니다.

main 함수의 반환값
함수의 반환값을 호출한 쪽으로 되돌려 주기 위해서 return 문을 사용합니다. main함수의 마지막에는 다음과 같이 '0'이라는 값을 반환하고 있습니다.

return 0; //0이라는 값을 반환한다.
 
반환값의 형식이 정수를 나타내는 int이므로 '0'이라는 정수값을 반환하고 있는 것입니다. 그런데 왜 '0'을 반환하는 것일까요? 실은 main 함수의 반환값은 프로그램의 종료상황을 판단하는데 사용됩니다. main 함수는 OS에서 호출하는 것이기 때문에 그 반환값은 OS로 반환됩니다. OS는 '0'이 반환되면 프로그램이 정상종료 되었다고 판단하고, '0 이외의 값'은 뭔가 문제가 발생했다고 판단합니다.


main 함수의 분석
──────────────

NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; //1. 메모리 관리


// insert code here... //2. 코멘트

NSLog(@"Hello, World!"); //3. 문자열 출력

[pool drain]; //4. 메모리 관리


우선 1과 4는 일시적으로 이용되는 오브젝트를 모아두고 프로그램 내에서 그 메모리 영역을 해제하기 위한 자동해제 풀이라는 기능의 명령입니다. 가비지 컬렉션을 유효하게 해 놓은 경우에는 필요 없지만 그대로 두어도 문제없습니다.
2는 프로그램에 대한 코멘트입니다. 코멘트 즉, 주석은 컴파일 시에는 무시됩니다. 3은 인수로 주어진 문자열을 출력하는 NSLog 함수입니다.
'Hello, World!'라는 문자열이 출력됩니다.

문장의 끝은 세미콜론 ';'
프로그램에 있어서 하나의 명령은 문장 혹은 문(statement)이라고 하고, 문장의 끝은 세미콜론으로 표시합니다. 가독성을 고려해 중간에 빈 줄을 넣거나 탭 또는 스페이스로 들여쓰기를 하고 메소드와 변수, 괄호 앞뒤로 스페이스를 넣을 수도 있습니다.
하나의 문장을 한 행으로만 기술할 필요는 없으며, 여러 행에 걸치더라도 상관없습니다. 1의 문장은 다음과 같이 기술해도 좋습니다.

NSAutoreleasePool * pool

= [[NSAutoreleasePool alloc]

   init]  ;


 반대로 한 줄에 여러 개의 문장을 기술하는 것도 가능합니다.

NSLog(@"Hello, World!"); NSLog(@"Hello, Korea!"); //한 줄에 2개의 문장을 기술

 
2종류의 코멘트
프로그램을 읽기 쉽게 만드는데 있어서 적절한 코멘트를 빼놓을 수 없습니다. Objective-C에서는 다음과 같은 2종류의 코멘트 양식을 제공하고 있습니다. 

(1)한 줄 코멘트
'//'에서부터 행의 끝까지 코멘트(주석)가 됩니다. 

NSLog(@"Hello, World!"); //문자열을 출력


(2)여러 줄 코멘트
'/*'부터 '*/'까지의 범위가 코멘트가 됩니다. 여러 줄에 걸쳐 코멘트를 기술할 수 있습니다.
/*
코멘트 1행
코멘트 2행
*/ 




   

관련글 더보기