본문 바로가기

Programming

Program language 의 기본 구조

Objective - C 의 기본 구조


모든 언어의 기본 구조는 대부분 비슷합니다.

그 구조를 조금만 살펴 보고자 합니다.

이 구조는 거의 변하지 않습니다.

Objective-c의 구조는 아래와 같습니다.



1.

#import <Foundation/Foundation.h>


이 내용은 Foundation 프레임워크 를 추가 한다는 의미 입니다.

뜻대로 Objective - c의 기초기반이 되는 자료를 추가한다는 의미 입니다.

추후에 자세히 다룰 내가 생성한 클래스를 추가 할때는 #import "ClassName.h" 와 같이 추가 합니다.

위 내용은 무조건 들어간다고 보시면됩니다.



2.

int main(int argc, const char* argv[]){

return 0;

}

이 내용은 프로그램의 main() 함수를 나타냅니다.

프로그램에서는 반드시 하나의 main() 함수가 들어가게 되며, 해당 main()를 시작으로 프로그램이 실행이 되게 됩니다.

그램 main() 함수를 자세히 따져 보도록 하겠습니다.

계속해서 함수라는 이름을 사용했습니다. 프로그램은 함수의 집합이라고 칭하기도 합니다.(C와 같은 언어)

함수의 구조를 보개되면, 아래와 같습니다.

반환형 함수명(입력형 입력인수, 입력형1 입력인수1,....n){

return 반환인수; //이 라인은 없을수도 있습니다.

}

알아보기 어려울 수 도 있습니다.

1) 반환형은 이후에 자세히 배우게 될 변수 자료형을 나타냅니다.

반환이란 뜻에서 알수 있듯이 값을 돌려주는 형(형태, 모양, 그릇)등으로 나타낼수 있습니다.

본 프로그램의 main() 함수는 int 자료형의 값을 반환 한다고 보시면 됩니다.

int 자료형은 일반 10진수 숫자를 나타낸다고 우선은 생각하시기 바랍니다.

결론은 main() 함수를 실행한 결과값은 어떠한 숫자 하나를 반환할 것을 예상합니다.

2) 함수명은 말그대로 함수이름 입니다. 일반적으로 main() 함수를 제외한 모든 다른 함수명은 내가 원하는 함수명을 지정할수 있습니다. 함수명은 일반적으로 소문자 영문자로 시작하며, 숫자나 특수문자등은 지원하지 않습니다.

위 코드의 함수명은 main 이라는 함수명을 가집니다.

3) ()괄호 안의 내용은 입력값이 들어가게 됩니다. 입력값도 입력될 값의 자료형이 있습니다. 여기서는 입력형 이라고 나타냈습니다. main() 함수에서 입력은 두개의 입력값이 있음을 나타냅니다. int 형을 가진 argc라는 변수명을 가진 값과, const는 지금은 알 필요가 없으므로 pass 하시고, char* argv[] 는 char도 문자 자료형 입니다. 그리고 *(asterisk)일명 별표(프로그래밍에서는 아스테리스크 라고 부릅니다.)는 일반적으로 포인터 라는것에서 나오는 아주 복잡한 내용입니다. 지금은 이렇다라고 알기만 하셔도 됩니다. argv[] 는 변수명이 argv 이고뒤의 [] 는 배열이라는것을 나타냅니다. 배열도 나중에 자세히 다룰 시간이 있을것입니다.

main() 함수이어서 조금 복잡하게 보일뿐입니다. 지금은 이 부분은 무조건 이렇게 입력한다라고 정도만 알고 넘어가시기 바랍니다. 여기서 복잡하다고 포기하지 마시기 바랍니다. 지금은 전혀 중요하지도 않고 몰라도 아무 상관이 없는 부분입니다.

4) {} 실제로 main() 함수의 동작을 작성하는 부분입니다.

이 함수는 이러이러하게 동작한다 라고 나타내는 부분입니다.

5) return 0;

위에서 설명한 4)번의 실제 프로그램 내부의 동작중에 return 반환 인수; 라는 부분을 적었습니다. 이 부분은 return 즉 돌려준다입니다. 이 main() 함수를 실행한 결과 값을 돌려준다. 즉 결과값입니다. 해당 main() 함수에서의 결과값은 0 값을 돌려준다고 한것입니다. 여기서 같이 나오는것이 반환형입니다. 0은 10진수의 한 숫자이므로 int를 돌려준다는 반환형을 적용한것입니다. 만약에 반환하는것이 없다면, 이 return 부분이 없습니다. 물론 돌려주는것이 없으므로 반환형은 int가 아닌 다른것으로 적어야 합니다.

숫자 0 뒤에 ;(세미콜론)을 적었습니다. 아주 중요하지만 자주 빼먹기도 하는 부분입니다. 프로그램의 동작을 입력할때 한 동작 한동작의 끝에는 반드시 ;(세미콜론)을 입력해 주어야 합니다. 이 라인의 끝이다 라고 생각하시면 됩니다.


위와 같으 프로그래밍의 구조는 대부분 비슷합니다. main()함수와 같은 함수를 그림으로 나타내면 아래와 같습니다.



예를 들어 두 수의 입력을 받아서 두값을 더한 값을 출력하는 함수를 생성한다고 가정해 보도록 하겠습니다.

입력값이 1과 2 이고 함수의 동작은 이 입력을 서로 더하는 기능을 하고 출력값은 그 더한 값을 출력한다고 보시면 됩니다.

아직도 이해가 어려우신가요? 좌절하지 마세요.... 그냥 꾸준히 보시면 이해되실것입니다.

C와 같은 절차적언어를 도전하였다가 포인터 등에서 좌절하였던 분들도 이와 같은 Objective-C나 JAVA같은 것은 이러한것을 최대한 쉽게 구현해 놓아서 조금은 쉬울것입니다.


3. 

@autoreleasepool{}

위에서도 언급했듯이 Objective-C와 JAVA등은 C언어에서 다들 어렵다고 하는 포인터에 대한 부분이 많이 쉽게 구현되었습니다.

Garbage Collector 을 통해서 메모리 관리를 조금 더 쉽게 해줍니다. Objective-C의 main() 함수에는 autoreleasepool 이라고 하는 메모리를 관리해 주는 명령어를 불러오게 하는것입니다.

위 내용은 일부 예제에서는 아래와 같이 표현이 되기도 합니다.

NSAutoreleasePool *pool = [NSAutoreleasePool alloc]init];

[pool drain];

각 줄 사이에 코드가 들어가는 부분이 예제에서는 {}(중괄호)안에 들어간다고 보시면됩니다.

해당 내용을 자세히 알려고 하면 머리 아픕니다.

Objective-C의 메모리 관리는 @autoreleasepool 의 {} 중괄호 안의 입력하는것은 알아서 메모리 관리를 해준다고만 생각하시면됩니다.


4. //insert code here

주석이라고 합니다. 주석은 한줄 주석과 여러줄 주석이 있습니다.

주석은 코드에는 영향을 주지 않는 설명 부분이라고 보시면됩니다.


5. NSLog(@"Hello World!");

터미널에서 어떠한 글자를 표시하고 싶을때는 NSLog() 를 사용합니다.

괄호안의 ""(큰따옴표)안의 내용이 추후 해당 프로그램을 실행할때 표시가 됩니다.