Objective-C를 공부하기 전에
edwith에서 설명해준 영상을 보고 정리했습니다.
2. 최소한의 개념
2.1 오브젝티브-C, OOP를 위한 언어
2.1.1 역사
- C 기반 문법을 확장한 것
- smalltalk에 뿌리를 두고있고 java와 형제 지간
- C, C++과 혼용 가능
- 아이폰에서는 가비지 컬렉션 지원 안함
2.1.2 클래스와 인스턴스
- 클래스는 설계도와 같다. 인스턴스는 설계도를 따라 만든 실제 건물이다.
- 메모리에 자리잡은 오브젝트를 인스턴스(실체) 오브젝트라고 한다.
- NSString class의 nameString 인스턴스 만들기
NSString *nameString = [[NSString alloc] initWithString:@”Winter”];
2.1.3 메시징
- C방식 :
DrawGradient(myView,aquaGradient, 0.0, 1.0, YES);
- Obj-C 방식 :
- (void) drawGradient:(CGGradientRdf)gradient fromValue:(float)start toValue:(float)end opaque:(BOOL)opaque; //메소드 선언
[myView drawGradient:aquaGradient fromValue:0.0 toValue:1.0 opaque:YES]; //호출
2.1.4 인스턴스 변수와 엑세서 메소드
- 클래스는 내부적으로 사용할 인스턴스 변수를 가지며 외부에서 직접 접근할 수 없다.
- 외부에서 인스턴스 변수 접근을 가능하게 하는 메소드를 엑세서 메소드라고 한다.
2.1.5 코코아 클래스 만들기
- 코코아 클래스는 헤더(.h) 파일과 임프리먼트(.m) 파일로 구성된다.
- 헤더는 @interface와 @end 로 구성된다.
- 중괄호 {} 사이에는 인스턴스 변수를 선언하고 블럭 밖에서는 메소드를 선언한다.
- 소괄호 <>가 뒤따르는 경우 클래스가 준수하는 프로토콜의 이름이 들어간다.
- 임플리먼트는 @implement 와 @end 로 이루어진다.
- 그 사이에 필요한 메소드들을 구현한다.
- @implement 뒤에 인스턴스 이름이 따른다.
2.1.6 헤더 포함
- #import 는 다른 클래스의 헤더를 불러오는 역할이다.
- 표준 C의 전처리기 #include 와 동일하지만 중복포함 에러 예방을 한다.
- 교차 포함을 막기 위해 헤더에 @class 로 클래스의 존재만 알리고 임플리먼트 파일에서 실제 #import 하는게 좋다.
2.2 메모리 관리
- Obj-C 2.0부터 가비지 콜렉터 추가 됐지만 아이폰은 애플리케이션 개발자가 직접 메모리를 관리해줘야 한다.
2.2.1 원칙
- 가장 중요한 원칙은, “만든 곳에서 릴리즈 한다”이다.
2.2.2 alloc, retain, release
- +alloc, -retain, -release 는 NSObject에 선언된 메소드
- +alloc : 인스턴스 오브젝트가 생성되면 리테인 카운트가 1이 된다.
- -retain : 인스턴스 오브젝트가 생성되면 리테인 카운트가 1 증가 한다.
- -release : 오브젝트 참조 카운트를 1 감소한다.
2.2.3 +메소드와 -메소드
- +가 붙은 메소드는 클래스 메소드
- +메소드는 오브젝트의 라이프 사이클을 관리할 필요가 없다. 해당 메소드 실행이 끝나면 사라징 예정인 오브젝트이기 때문이다.
- -가 붙은 메소드는 인스턴스 메소드
2.2.4 addObject, addSubview
NSString *stringObject = [[NSString alloc] initWithString@"Winter"];
[mutableArray addObject:stringObject];
[stringObject release];
//stringObject's retain count is 1
2.2.5 Autorelease Pool
2.3 Delegate와 Subclass
2.3.1 Delegate
- 누가? 주로 View 의 섭클래스들 이나 Controller 오브젝트들.
- 무엇을? 이벤트에 대한 처리 권한을 위임하는 것.
- 누구에게? 위임을 받아 처리할 임의의 오브젝트. 위임을 맡은 오브젝트는 프로토콜에 정해진 메소드를 구현해주면 된다.
2.3.2 Subclass
- 서브클래스는 클래스를 상속받아 기능을 확장하거나 원래의 기능을 변경하는 것을 말한다.
2.3.3 Subclass? Delegate?
- 동일한 목적에 대해 다른 구현을 보여준다.
- 서브클래스는 상위클래스에 대한 자세한 이해가 요구된다.
- 델리게이트 메소드들은 대부분 선택적인(optional) 프로토콜 메소드이다.
2.3.4 프로토콜
- 코코아에서 프로토콜은 “구현하기로 약속한 메소드”이다.
- 메소드를 전부 또는 일부 구현함으로써 프로토콜의 기능을 구현하게 된다.
2.4 용어 정리
2.4.1 IBOutlet & IBAction
- IBOutlet과 IBAction은 인터페이스 빌더 파일과 연결되는 인스턴스 변수와 액션 메소드이다.
2.4.2 id
- Obj-C 유연성을 대표하는 키워드 id 타입의 변수 형.
컴파일 시가 아닌 런타임시 결정됨.
2.4.3 SEL, @selector()
- SEL은 함수 포인터다.
컴파일된 셀렉터의 타입이 SEL이며, SEL을 얻어내는 지시어가 @selector()이다.
출처
https://www.edwith.org/isobaric_obj_c