170 likes | 450 Views
CHAPTER2 오브ì 트 C 프로그램. ì˜¤ì •ë¯¼ 5 ì›” 6 ì¼. 매뉴. 0. Object C - 왜 오브ì 트 C ì¼ê¹Œ ? 1. ê°ì²´ì™€ 메시지 - NSObject - ID - 메시지 í‘œí˜„ì‹ - 메시지 ì…€ë ‰í„° - ì¸ìŠ¤í„´ìŠ¤ ì˜ ìƒì„±ê³¼ 초기화 2. í´ëž˜ìŠ¤ì •ì˜ - í´ëž˜ìФì¸í„°íŽ˜ì´ìФ - í´ëž˜ìŠ¤ì˜ êµ¬í˜„ & ì •ì˜ 3. ì»´íŒŒì¼ - 간단한 컴파ì¼ë°©ë²• - ë¶„í• ì»´íŒŒì¼ 4. 프로그램 개발 방법 - C 언어 í•¨ìˆ˜ì˜ ì´ìš© 방법 - í—¤ë” íŒŒì¼ì˜ ìž„í¬íЏ.
E N D
CHAPTER2오브젝트C 프로그램 오정민 5월 6일
매뉴 • 0. Object C • - 왜 오브젝트C일까? • 1. 객체와 메시지 • - NSObject • - ID • - 메시지 표현식 • - 메시지 셀렉터 • - 인스턴스 의 생성과 초기화 • 2. 클래스정의 • - 클래스인터페이스 • - 클래스의 구현 & 정의 • 3. 컴파일 • - 간단한 컴파일방법 • - 분할 컴파일 • 4. 프로그램 개발 방법 • - C언어 함수의 이용 방법 • - 헤더 파일의 임포트
- 오브젝트 C-왜 오브젝트C일까? • 맥에서 사용하는 기본 라이브러리들이 오브젝트C 로 이루어져있다. • 오브젝트 C 는 자바와 같은 매니지드 언어가 아니고 네이티브 언어기 때문에 가볍고 빠르다. • C++보다 객체지향 개념이 직관적이고 유연성도 좋다. • 코드의 가독성이 상당히 우수하다. • 이러한 이유들로 요즘은 C를 배운뒤C++이 아닌 오브젝트C를 배우는 사람들이 늘고 있다.
-객체와 메시지-1. NS오브젝트 Alloc(인스턴스생성) 이외에도 여러 가지 있음. NSObjec -> • 오브젝트 C는 이것을 상속받거나 #import 한다. • 이것은 객체를 인스턴스화해주거나 소멸해주고 객체관리를 위한 자료형 이나 메서드를 지원해준다. • 이것은 오브젝트 C의 문법을 활용할 수 있는 기본적인 클래스이며 상속이나 임포트를 하지 않을 경우엔 C나 C++의 문법을 써야 한다. id
-객체와 메시지- 2. ID CMap (class) • NSObject(클래스)가 지원 하는 특수한 type이다. • 인스턴스화 되어진 객체를 가리킬 수 있으며가리켜진 객체는 RunTime시에 암묵적으로 존재하는 isa란 메서드를통해 접근을 한다. • C++의 void*와 유사하다.(다른점도 있다) instance Object C id c_pPoint; C++ Void* c_pPoint; CEnemy (class) instance
-객체와 메시지- 3. 메시지 표현식 오브젝트 C의 예 C++ 의 예 • 메시지 명을 통해 메서드를 호출하라는 호출하는 메시지를 보낸다. • 메시지 명은 메서드의 호출과 인자의 설명을 위한 일종의 detail한 변수다. • 인자가 두개 이상 이라도 하나의 메서드 에선 하나의 메시지 명으로 구분된다. • 인자의 갯수는: 의 수와 일치하며 : 앞에 메시지키워드는 생략 할 수 있다. • 인자를 사용할 경우 메시지 명 뒤에 : 를 붙여 준다. [map randermap]; = map->randermap(); 메시지명 = 매개변수 = 매개변수의 타입 = 호출할 때 쓰이는 함수 명/메시지 명 //메서드선언부(class CMap) (int) setmapx : (int)asetmapy : (int)b; //메서드호출부 [map setmapx : 10setmapy : 30]; //메서드선언부(class CMap) intSetPos(intsetmapx, intsetmapy); //메서드호출부 Map->SetPos(10, 30); =
-객체와 메시지- 4. 메시지 셀렉터 • 메시지 셀렉터는 메시지 명을 비교하여 구분해주는 일종의 관리자 이다. • 메시지 셀렉터는 메시지명의 철자가 하나라도 틀리면 서로 구분을 해준다. • : 도 비교대상의 일부로 간주한다. 메시지 셀렉터(비교작업) 메시지명 Setmapsize: setmapsize: setmapposx: setmapposy:
-객체와 메시지- 5. 클래스의 생성과 초기화 • alloc라는 메시지를 보내서 인스턴스를 만든다. • 만들어진 인스턴스를id형 타입의 변수가 가리킨다. • init이라는 메서드는 C++의 초기화 함수다. • 이것은 이니셜라이져 나 초기화 메서드 라고 부른다. • 초기화 메서드 이름은 init이나 init뒤에 추가적으로 더 붙일 수 있다. C++ 클래스명인스턴스; 인스턴스= new 클래스명; 인스턴스->init(); 오브젝트C [[id형변수alloc]init] =
-클래스의 정의-1. 클래스 인터페이스 • @interface 클래스명: 상속받는 부모 클래스명{ • //인스턴스 변수 선언; • intval; • } • //메서드 선언; • - (int) value : (int)a; • @end • //구현부 • @implementation 클래스명 • - (int) value : (int)a { • return val+a; • } • @end • @interface 는 정의 하는 헤더 파일의 시작을 의미하며 인스턴스 변수의 선언과 메서드의 선언을 정의하는 부문이다. • @implementation 는 구현하는 .m파일 (C++에선 .cpp) 의 시작을 의미하며 메서드의 기능을 구현하는 부문이다. • @end는 컴파일러 지시자로 끝을 의미한다.
-클래스의 정의-2. 클래스의 구현 & 정의(1) Map • - (void) init; • 메서드 앞에는 -나 +란 기호를 기입하게된다. • id map = [[Map alloc] init]; • 메서드alloc은 클래스 Map가 상속받은 NSObject의 메서드이며 동적 할당을 받지 않은 상태에서 바로 호출을 하고 있다. NSObject - ? + ? - ? + ? alloc init
-클래스의 정의-2. 클래스의 구현 & 정의(2) • + 메서드는 객체를 생성(인스턴스화)하지 않아도 사용이 가능한 메서드 이고 - 메서드는인스턴스화한 후에 사용 가능한 메서드가 된다. • 이것을 보통 클래스 메서드(+) 인스턴스메서드(-)라 부른다. • NSObject도 객체들과마찬가지로 초기화 메서드가 있다. • self = [super init]; 이것을 풀이하자면 이렇다. • 지금 나의 위치에서 상속받은 부모객체의 init을 호출한다. Map NSObject - + alloc init
-컴파일-1. 간단한 컴파일방법 • 오브젝트C에서는 #include 가아닌 #import를 쓰게 된다. 기본적으로 같은 역할을 한다. • 오브젝트 C의 소스파일 확장자는 .m이다여기서 .m은 모듈을 뜻하며 C언어로 비교하면 .c나 .cpp를 뜻한다. • 프로젝트를 저장 할때는All Files를 선택하여 저장하면 된다. #import == #include !=
Class -컴파일-2. 분리 컴파일 클래스명 . c C 문법 • 분리컴파일은 C++과 거의 비슷하다. • C언어의 문법이 포함될경우.C, C++언어의 문법이 포함될경우.mm, 오브젝트C의 문법이 포함될경우 .m로 #import하면 된다. Class Class 클래스명 . m 클래스명 . mm NSObject C++ 문법
-프로그램 개발 방법-1. C언어 함수의 이용 방법(1) • 오브젝트C는 메서드정의 안에서도 C언어의 함수를 호출할 수 있다. • C언어의 함수를 쓰는 이유는 오브젝트의 메서드 보다 호출이 빠르기 때문이다. 이것은 절차지향과 객체지향적인 부분을 잘 조합해서 구현한다는 것에 의미가 있다. • 오브젝트C의 메서드와 C언어의 함수를 적절히 조합하여 쓰는 것이 최선이라 생각된다.
-프로그램 개발 방법-1. C언어 함수의 이용 방법(2) #import “map.h” • static id size(int p) • { • val += a; • Return self; • } • @implementation 클래스명 • static int value(int a) • { • return val + a; • } • - (int) value : (int) a { • return val + a; • } • @end • @implementation 와 @end 사이에 함수나 메서드가 있는 경우에는 현재(this)클래스 안에 종속 되어있는 것이지만. 그 범주 밖에 위치한다면(void size(int p)) 전역으로 처리해버린다. 즉 저 클래스의 인스턴스가 만들어지는 시점으로 프로그램이 종료되거나 인스턴스의 소거되기 전까지는 어디서든 접근이 가능하다는 것이다. 이것의 위험성은 알 것이다.
-프로그램 개발 방법- 2. 헤더 파일의 임포트 • 오브젝트C에서는 #import를 사용한다. • 같은 헤더 파일이 여러 번 읽히더라도 한번만 포함되도록 하기 위해 #import를 사용한다.