SlideShare a Scribd company logo
1 of 28
Objective-C




                  구성(Composition)
                  By Changhoon Park
    Objective-C
                  http://www.wawworld.me
                                           Last Update : 2011. 08. 28

11년 9월 28일 수요일
두 클래스 사이에 관계를 설정하는 방법




                           상속               구성
                       (Inheritance)    (Composition)




             2

                  구성   의미
                       외발자전거
    Objective-C        자동차
                       접근자
                                                        By Changhoon Park
                       실습                                  http://www.wawworld.me



11년 9월 28일 수요일
구성(Composition) 이란?



                       여러 객체가 함께 작업할 수 있도록 만듦

                  각 컴포넌트를 모아서 더 큰 것을 만드는 작업




             3

                  구성    의미
                        외발자전거
    Objective-C         자동차
                        접근자
                                                      By Changhoon Park
                        실습                               http://www.wawworld.me



11년 9월 28일 수요일
Composition     Aggregation


                   UML

                              전체에 대해 부분이 강한         여러개의 전체에 의해
                 소속감
                                   소속감                 공유 가능

                               전체와 부분이 동일한          전체가 부분보다 먼저
                 life cycle
                                  생명기간                 소멸 가능

                   예제           사람 - ( 눈, 팔, 다리 )   사람 - ( 안경, 모자 )



             4

                        구성    의미
                              외발자전거
    Objective-C               자동차
                              접근자
                                                                    By Changhoon Park
                              실습                                       http://www.wawworld.me



11년 9월 28일 수요일
외발 자전거 (unicycle)


                                          NSObject



                                          Unicycle




                                  Padal              Tire


                       Composition을 통해 Unicycle은 Pedal과 Tire로 구성



             5

                  구성     의미
                         외발자전거
    Objective-C          자동차
                         접근자
                                                                   By Changhoon Park
                         실습                                           http://www.wawworld.me



11년 9월 28일 수요일
외발 자전거 (unicycle)


                       @interface Unicycle: NSObject
                       {
                       ! Padal *padal;
                       ! Tire *tire;
                       }
                       @end// Unicycle



                               인스턴스 변수로
                       객체를 가르키는 포인터를 포함하는 것으로 구성



             6

                  구성   의미
                       외발자전거
    Objective-C        자동차
                       접근자
                                                       By Changhoon Park
                       실습                                 http://www.wawworld.me



11년 9월 28일 수요일
Tire, Engine 클래스


                          NSObject             NSObject


                               Tire             Engine

                         - description        - description




             7

                  구성   의미
                       외발자전거
    Objective-C        자동차
                       접근자
                                                              By Changhoon Park
                       실습                                        http://www.wawworld.me



11년 9월 28일 수요일
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일 수요일
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일 수요일
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일 수요일
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일 수요일
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일 수요일
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일 수요일
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일 수요일
결과 화면



                  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일 수요일
접근자(Accessor) 메소드


                               코드를 유연하게 만듦

                           특정한 속성을 읽거나 변경




            16

                  구성   의미
                       외발자전거
    Objective-C        자동차
                       접근자
                                                   By Changhoon Park
                       실습                             http://www.wawworld.me



11년 9월 28일 수요일
접근자(Accessor) 메소드



                               Getter
                        객체의 특정한 속성을 읽는 메소드



                            Setter / Mutator
                         객체에 값을 설정하는 메소드




            17

                  구성   의미
                       외발자전거
    Objective-C        자동차
                       접근자
                                                   By Changhoon Park
                       실습                             http://www.wawworld.me



11년 9월 28일 수요일
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일 수요일
접근자(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일 수요일
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일 수요일
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일 수요일
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일 수요일
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일 수요일
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일 수요일
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일 수요일
실습


                        NSObject             NSObject



                         Engine                  Tire

                       - description        - description


                          Slant6            AllWeatherRadial
                       - description        - description



            26

                  구성   의미
                       외발자전거
    Objective-C        자동차
                       접근자
                                                               By Changhoon Park
                       실습                                         http://www.wawworld.me



11년 9월 28일 수요일
실습



                       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일 수요일
실습



                               NSObject          NSObject



                                Engine               Tire

                           - description        - description


                              Slant6            AllWeatherRadial
                           - description        - description




            28

                  구성   의미
                       외발자전거
    Objective-C        자동차
                       접근자
                                                                   By Changhoon Park
                       실습                                             http://www.wawworld.me



11년 9월 28일 수요일

More Related Content

More from Hoseo University

More from Hoseo University (7)

실질적인 길 계획하기
실질적인 길 계획하기실질적인 길 계획하기
실질적인 길 계획하기
 
FoundationKit
FoundationKitFoundationKit
FoundationKit
 
Raven
RavenRaven
Raven
 
프로젝트 구성
프로젝트 구성프로젝트 구성
프로젝트 구성
 
Objective-C에서의 OOP
Objective-C에서의 OOPObjective-C에서의 OOP
Objective-C에서의 OOP
 
Dt2210.01.syllabus
Dt2210.01.syllabusDt2210.01.syllabus
Dt2210.01.syllabus
 
Dt3160.01
Dt3160.01Dt3160.01
Dt3160.01
 

구성(Composition)

  • 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일 수요일