language:objc:quick-summary
차이
문서의 선택한 두 판 사이의 차이를 보여줍니다.
양쪽 이전 판이전 판 | |||
language:objc:quick-summary [2020/02/22 11:56] – kieuns | language:objc:quick-summary [2024/04/23 22:44] (현재) – 바깥 편집 127.0.0.1 | ||
---|---|---|---|
줄 1: | 줄 1: | ||
+ | {{htmlmetatags> | ||
+ | metatag-keywords=(코코아, | ||
+ | metatag-description=(오브젝트 C 언어 설명) | ||
+ | }} | ||
+ | |||
+ | ====== 코코아 ====== | ||
+ | |||
+ | * OSX 에서의 프로그램 기본 구동환경. | ||
+ | * 자바의 가상머신, | ||
+ | * {{: | ||
+ | |||
+ | ====== Objective C ====== | ||
+ | |||
+ | * C 언어 기반의 확장판 언어. 즉, C 언어의 기본 라이브러리와 문법을 그대로 사용 가능하다는 의미. | ||
+ | * SmallTalk 가 기원이라고 하는데 | ||
+ | |||
+ | ======= Xcode ====== | ||
+ | |||
+ | * 무료로 제공 되는 OSX의 기본 개발 환경. | ||
+ | * GCC를 기본 컴파일러로 사용하는데, | ||
+ | * GCC를 기본 컴파일러로 사용하기 때문에 ObjC / Java / Ruby / Python 등 컴파일이 가능하고 최신버젼에서는 이 언어들에 대한 프로젝트 위저드도 있는데, 이건 따로 설치해야 하는 것 같다. | ||
+ | |||
+ | ======= Objective C 시작 ====== | ||
+ | |||
+ | ObjC 에서는 함수 호출이라고 부르지 않고, 메시지 전송이라고 부름. | ||
+ | |||
+ | <code objc> | ||
+ | [오브젝트 메소드] // 한칸 띄어쓴 것은 문법 | ||
+ | </ | ||
+ | |||
+ | 정식용어로는 | ||
+ | <code objc> | ||
+ | [receiver selector] | ||
+ | // 이렇게 | ||
+ | [PersonInstance doYourWorkMan] | ||
+ | </ | ||
+ | |||
+ | 메시지를 받을 객체와 호출할 메시지를 기록하는 형태의 문법을 가짐. | ||
+ | |||
+ | 낮설지만, | ||
+ | |||
+ | 여기에 알려진 배경으로는, | ||
+ | * 메시지가 불려지는 순간, 어느 객체를 사용할지 동적으로 결정된다고 함. | ||
+ | * 애플리케이션간에도 메시지를 받을 수 있다고 함 | ||
+ | |||
+ | ======== 헤더 ====== | ||
+ | |||
+ | <code objc> | ||
+ | #import < | ||
+ | #import “person.h” | ||
+ | </ | ||
+ | |||
+ | C 와 달리 중복포함 처리를 컴파일러가 해주므로 , 사소한 삽질은 안해도 됨 | ||
+ | |||
+ | ======== The id type ======== | ||
+ | |||
+ | <code objc> | ||
+ | id anObject; | ||
+ | </ | ||
+ | |||
+ | id 라는 키워드가 존재하고, | ||
+ | |||
+ | C 에서의 Void* 나 VB에서 Dim 같은 타입. | ||
+ | |||
+ | ======= Static typing ====== | ||
+ | |||
+ | <code objc> | ||
+ | NSString *theString; | ||
+ | </ | ||
+ | |||
+ | 과 같은 오브젝트를 선언했을 경우 import로 헤더파일을 포함하지 않았다면 NSString이 클래스라는 것을 코드상에서 알려줘야 함. NSString 클래스를 선언하는 부분에 | ||
+ | |||
+ | <code objc> | ||
+ | @class NSString | ||
+ | </ | ||
+ | |||
+ | 한줄을 추가하면 이후에는 컴파일러가 알아서 찾아서 컴파일 함. | ||
+ | |||
+ | C++에서는 Forward Declare 라는 개념으로 익숙한 개념. | ||
+ | |||
+ | ====== 클래스 정의 ====== | ||
+ | |||
+ | ===== 선언부 – 헤더 ===== | ||
+ | |||
+ | |||
+ | <code objc> | ||
+ | @interface MyClassObject : NSObject | ||
+ | { | ||
+ | float floatValue; | ||
+ | } | ||
+ | - (void)calculateWith: | ||
+ | + (void)addAllValue; | ||
+ | @end | ||
+ | </ | ||
+ | |||
+ | @interface 가 클래스의 시작 @end로 클래스 종결을 알리는 매우 직선적인 구조. | ||
+ | |||
+ | * - 로 시작하면 인스턴스의 메시지 함수 | ||
+ | * + 로 시작하면 클래스의 메시지 함수 | ||
+ | |||
+ | ===== 메소드의 선언에 대해서 ===== | ||
+ | |||
+ | 가장 이상하게 보이는 부분인데, | ||
+ | |||
+ | 각 함수의 파라미터에도 부연 설명이 달려 있다. | ||
+ | |||
+ | <code c> | ||
+ | // C나 자바 | ||
+ | void calculateWith( float newValue, float anotherOne ); | ||
+ | // 이걸 사용할 때 | ||
+ | calculateWith( 0.2f, 0.5f ); | ||
+ | </ | ||
+ | |||
+ | <code objc> | ||
+ | // Objective-C | ||
+ | - (void) calculateWith: | ||
+ | // 이걸 사용할 때 | ||
+ | [someObject calculateWith: | ||
+ | </ | ||
+ | |||
+ | 파라미터에 부연설명이 붙는 방식인데, | ||
+ | |||
+ | XCode에서는 이 부연설명에 신경쓰지 않고 코딩할 수 있는 보완장치가 있음. | ||
+ | |||
+ | ====== 인스턴스 생성 ====== | ||
+ | |||
+ | C의 계승자임에도 불구하고 자바나 C#처럼 오브젝트들은 메모리를 할당해서 사용해야함. | ||
+ | |||
+ | ===== 메모리 할당이 필요없는 것 ===== | ||
+ | |||
+ | |||
+ | 기본 타입들은 할당이 없이 사용가능 | ||
+ | |||
+ | int / char / float / void | ||
+ | |||
+ | ===== 오브젝트들 ===== | ||
+ | |||
+ | 메모리 할당을 한 뒤에 사용이 가능함. 이것은 코코아 기반의 구동환경 ( 자바와 같은 가상머신의 환경 )이기에 메모리를 할당하고 그 뒤에 사용하는 것이 기본 룰이라고 함. | ||
+ | |||
+ | 가비지콜렉션 기능은 원래 없었으나, | ||
+ | |||
+ | 가비지콜레션이 늦게 추가된 배경, | ||
+ | |||
+ | 원래 코코아에는 가비지콜랙션이 아닌 메모리 관리 모듈이 따로 있어서 ( 할당된 메모리를 자동으로 해제해 주는 메모리 관리 오브젝트 ) 그동안 필요가 없었으니 기능 개선을 하면서 새로 추가되었다고 함. | ||
+ | |||
+ | 현재 코코아에는 예전 버전의 메모리 관리 방식을 쓸 것이냐, | ||
+ | 가비지콜렉션 기능을 사용할 것이냐 하는 선택권이 있음. | ||
+ | |||
+ | 클래스 Person 이라는 오브젝트가 있다고 하면 | ||
+ | |||
+ | <code objc> | ||
+ | Person *newPerson = [[Person alloc] init]; | ||
+ | </ | ||
+ | |||
+ | 이 구분이 기본 | ||
+ | |||
+ | 메모리 할당과 해제는 alloc / release 로 호출 하여 사용하나 alloc을 한 뒤에는 실제로 release를 하지 않아도 크게 상관없음. | ||
+ | |||
+ | 메모리 관리 모듈에 등록해 놓으면 나중에 종료될 때 알아서 삭제됨. | ||
language/objc/quick-summary.txt · 마지막으로 수정됨: 2024/04/23 22:44 저자 127.0.0.1