1. Objective-C
구성(Composition)
By Changhoon Park
Objective-C
http://www.wawworld.me
Last Update : 2011. 08. 28
11년 9월 28일 수요일
2. 두 클래스 사이에 관계를 설정하는 방법
상속 구성
(Inheritance) (Composition)
2
구성 의미
외발자전거
Objective-C 자동차
접근자
By Changhoon Park
실습 http://www.wawworld.me
11년 9월 28일 수요일
3. 구성(Composition) 이란?
여러 객체가 함께 작업할 수 있도록 만듦
각 컴포넌트를 모아서 더 큰 것을 만드는 작업
3
구성 의미
외발자전거
Objective-C 자동차
접근자
By Changhoon Park
실습 http://www.wawworld.me
11년 9월 28일 수요일
4. Composition Aggregation
UML
전체에 대해 부분이 강한 여러개의 전체에 의해
소속감
소속감 공유 가능
전체와 부분이 동일한 전체가 부분보다 먼저
life cycle
생명기간 소멸 가능
예제 사람 - ( 눈, 팔, 다리 ) 사람 - ( 안경, 모자 )
4
구성 의미
외발자전거
Objective-C 자동차
접근자
By Changhoon Park
실습 http://www.wawworld.me
11년 9월 28일 수요일
5. 외발 자전거 (unicycle)
NSObject
Unicycle
Padal Tire
Composition을 통해 Unicycle은 Pedal과 Tire로 구성
5
구성 의미
외발자전거
Objective-C 자동차
접근자
By Changhoon Park
실습 http://www.wawworld.me
11년 9월 28일 수요일
6. 외발 자전거 (unicycle)
@interface Unicycle: NSObject
{
! Padal *padal;
! Tire *tire;
}
@end// Unicycle
인스턴스 변수로
객체를 가르키는 포인터를 포함하는 것으로 구성
6
구성 의미
외발자전거
Objective-C 자동차
접근자
By Changhoon Park
실습 http://www.wawworld.me
11년 9월 28일 수요일
7. Tire, Engine 클래스
NSObject NSObject
Tire Engine
- description - description
7
구성 의미
외발자전거
Objective-C 자동차
접근자
By Changhoon Park
실습 http://www.wawworld.me
11년 9월 28일 수요일
8. Tire 클래스
@interface Tire : NSObject
@end // Tire
이 메소드는
어디에서??
@implementation Tire
- (NSString *) description
{
return (@"I am a tire. I last a while");
} // description
@end // Tire
8
구성 의미
외발자전거
Objective-C 자동차
접근자
By Changhoon Park
실습 http://www.wawworld.me
11년 9월 28일 수요일
9. Engine 클래스
@interface Engine : NSObject
@end // Engine
@implementation Engine
- (NSString *) description
{
! return (@"I am an engine. Vrooom!");
} // description
@end // Engine
9
구성 의미
외발자전거
Objective-C 자동차
접근자
By Changhoon Park
실습 http://www.wawworld.me
11년 9월 28일 수요일
10. Car 클래스
Tire Engine
NSObject
- description - description
Car
4
Engine *engine
Tire *tires[4]
- description
10
구성 의미
외발자전거
Objective-C 자동차
접근자
By Changhoon Park
실습 http://www.wawworld.me
11년 9월 28일 수요일
11. Car 클래스
객체의
@interface Car : NSObject
포인터를 참조
{
! Engine *engine;
! Tire *tires[4];
}
- (void) print;
@end // Car
11
구성 의미
외발자전거
Objective-C 자동차
접근자
By Changhoon Park
실습 http://www.wawworld.me
11년 9월 28일 수요일
12. Car 클래스
- (id) init 인스턴스 변수 초기화
{
! if (self = [super init]) {
! ! engine = [Engine new];
! !
! ! tires[0] = [Tire new];
! ! tires[1] = [Tire new];
! ! tires[2] = [Tire new];
! ! tires[3] = [Tire new];
! }!
! return (self);!
} // init
12
구성 의미
외발자전거
Objective-C 자동차
접근자
By Changhoon Park
실습 http://www.wawworld.me
11년 9월 28일 수요일
13. Car 클래스
- (void) print
{
! NSLog (@"%@", engine);
!
! NSLog (@"%@", tires[0]);
! NSLog (@"%@", tires[1]);
! NSLog (@"%@", tires[2]);
! NSLog (@"%@", tires[3]);
!
} // print
%@ - 각 객체의
description 메소드를 호출
13
구성 의미
외발자전거
Objective-C 자동차
접근자
By Changhoon Park
실습 http://www.wawworld.me
11년 9월 28일 수요일
14. main
int main (int argc, const char * argv[])
{
! Car *car; new 메소드
! = 메모리 할당 + init 호출
! car = [Car new];
! [car print];
!
! return (0);
!
} // main
14
구성 의미
외발자전거
Objective-C 자동차
접근자
By Changhoon Park
실습 http://www.wawworld.me
11년 9월 28일 수요일
15. 결과 화면
CarParts[28628:a0f] I am an engine. Vrooom!
CarParts[28628:a0f] I am a tire. I last a while
CarParts[28628:a0f] I am a tire. I last a while
CarParts[28628:a0f] I am a tire. I last a while
CarParts[28628:a0f] I am a tire. I last a while
15
구성 의미
외발자전거
Objective-C 자동차
접근자
By Changhoon Park
실습 http://www.wawworld.me
11년 9월 28일 수요일
16. 접근자(Accessor) 메소드
코드를 유연하게 만듦
특정한 속성을 읽거나 변경
16
구성 의미
외발자전거
Objective-C 자동차
접근자
By Changhoon Park
실습 http://www.wawworld.me
11년 9월 28일 수요일
17. 접근자(Accessor) 메소드
Getter
객체의 특정한 속성을 읽는 메소드
Setter / Mutator
객체에 값을 설정하는 메소드
17
구성 의미
외발자전거
Objective-C 자동차
접근자
By Changhoon Park
실습 http://www.wawworld.me
11년 9월 28일 수요일
18. Car 클래스
@interface Car : NSObject
{
! Engine *engine;
! Tire *tires[4];
}
- (Engine *) engine;
- (void) setEngine: (Engine *) newEngine;
- (Tire *) tireAtIndex: (int) index;
- (void) setTire: (Tire *) tire
! ! atIndex: (int) index;
- (void) print;
@end // Car
18
구성 의미
외발자전거
Objective-C 자동차
접근자
By Changhoon Park
실습 http://www.wawworld.me
11년 9월 28일 수요일
19. 접근자(Accessor) 메소드의 이름 규칙
Getter
set 다음에 속성 이름
예 : setEngine, setFillColor, setFont ...
Setter / Mutator
get을 사용하지 않는 것에 주의
예 : engine, stringValue, font, fillColor ...
19
구성 의미
외발자전거
Objective-C 자동차
접근자
By Changhoon Park
실습 http://www.wawworld.me
11년 9월 28일 수요일
20. Car 구현부
- (Engine *) engine
{
! return (engine);
} // engine
- (void) setEngine: (Engine *) newEngine
{
! engine = newEngine;
} // setEngine
20
구성 의미
외발자전거
Objective-C 자동차
접근자
By Changhoon Park
실습 http://www.wawworld.me
11년 9월 28일 수요일
21. main 함수
! Engine *engine = [Engine new];
! [car setEngine: engine];
! NSLog (@"the car’s engine is %@", [car engine]);
21
구성 의미
외발자전거
Objective-C 자동차
접근자
By Changhoon Park
실습 http://www.wawworld.me
11년 9월 28일 수요일
22. Tire 구현부
- (Tire *) tireAtIndex: (int) index
{
! if (index < 0 || index > 3) {
! ! NSLog (@"bad index (%d) in
tireAtIndex:",index);
! exit (1);
! }
!
! return (tires[index]);
!
} // tireAtIndex:
22
구성 의미
외발자전거
Objective-C 자동차
접근자
By Changhoon Park
실습 http://www.wawworld.me
11년 9월 28일 수요일
23. Tire 구현부
- (void) setTire: (Tire *) tire
! ! atIndex: (int) index 방어적 프로그래밍
{
! if (index < 0 || index > 3) {
! ! NSLog (@"bad index (%d) in setTire:atIndex:",index);
! ! ! ! ! exit (1);
! }
!
! tires[index] = tire;
!
} // setTire:atIndex:
23
구성 의미
외발자전거
Objective-C 자동차
접근자
By Changhoon Park
실습 http://www.wawworld.me
11년 9월 28일 수요일
24. main 함수
! int i;
! for (i = 0; i < 4; i++) {
! ! Tire *tire = [Tire new];
! !
! ! [car setTire: tire
! ! ! atIndex: i];
! }
24
구성 의미
외발자전거
Objective-C 자동차
접근자
By Changhoon Park
실습 http://www.wawworld.me
11년 9월 28일 수요일
25. main 함수 비교
int main (int argc, const char * argv[])
{
Car *car = [Car new];
int main (int argc, const char * argv[])
Engine *engine = [Engine new]; {
[car setEngine: engine]; Car *car;
int i;
car = [Car new];
for (i = 0; i < 4; i++) {
[car print];
Tire *tire = [Tire new];
[car setTire: tire atIndex: i];
return (0);
}
[car print]; } // main
return (0);
} // main
25
구성 의미
외발자전거
Objective-C 자동차
접근자
By Changhoon Park
실습 http://www.wawworld.me
11년 9월 28일 수요일
26. 실습
NSObject NSObject
Engine Tire
- description - description
Slant6 AllWeatherRadial
- description - description
26
구성 의미
외발자전거
Objective-C 자동차
접근자
By Changhoon Park
실습 http://www.wawworld.me
11년 9월 28일 수요일
27. 실습
1. 확장하여 Engine과 Tire를 각각
05.02-CarParts-Accessors.zip을
상속받아 Slant6와 AllWeatherRadial 클래스 추가하기
(p103, 104 참조)
2. main 함수를 p104와 같이 수정하여 결과화면 출력하
기
3. 수정한 .m과 .h 그리고 결과화면 스샷을 아지트에 올
리기
27
구성 의미
외발자전거
Objective-C 자동차
접근자
By Changhoon Park
실습 http://www.wawworld.me
11년 9월 28일 수요일
28. 실습
NSObject NSObject
Engine Tire
- description - description
Slant6 AllWeatherRadial
- description - description
28
구성 의미
외발자전거
Objective-C 자동차
접근자
By Changhoon Park
실습 http://www.wawworld.me
11년 9월 28일 수요일