본문 바로가기
카테고리 없음

3장 : 클레스, 객체, 메서드

by 멍멍돌이야 2010. 8. 2.
반응형
3장  : 클레스, 객체, 메서드  
 
클레스(Class) : 인스턴스변수와 이 변수에 접근할 수 있는 메서드의 모음이다.  
                               클레스가 정의된 후 프로그래머가 그 클레스의 인스턴스(객체)를 생성할 수 있다.  
객체(Object) : 배열과 관련된 메서드의 모음이다. 객체에 메시지를 보네 그 메서드중 하나를 실행할 수 있다.  
메서드(Method) : 클레스 객체나 그 클레스의 인스턴스에 메시지를 보내 실행 시킬 수 있다.  
   - 클레스 메서드(Class method) : 클레스 객체에 호출되는 메서드이며, 메서드 이름 앞에 +부호가 붙는다.  
   - 인스턴스 메서드(Instance method) : 클레스의 인스턴스에 호출되는 메서드이다. 일므 앞에 -부호가 붙는다.  
인스턴스(Instance) : 클레스의 실제표현이다. 보통 인스턴스는 클레스 객체에  allc 이나 new 메시지를 보내는 것으로  
                                         생성된다.  
                                         클레스로부터 나온 것을 인스턴스라 부르고, 이 인스턴스가 수행하는 행동을 메서드라고 부른다.  
   - 인스턴스 변수  : 인터페이스 부분에서 선언(혹은 부보에게 상속받은)된 변수이며, 객체의 모든 인스턴스에 포함되어  
                                       있다.  
                                       인스턴스 메서드는 자신의 변수에 직접 접근할 수 있다.  
메시지(Meassge) : 객체(수신자)에 보내지는 메서드와 그에 해당하는 인수이다.  
 
Object-C 프로그램의 프로젝트 형식  
1) 인터페이스(Interface) : 클레스, 테이터 요소(변수), 메서드를 선언.  
2) 임플리먼테이션(Implementation) : 메서드들을 구현하는 실제 코드가 있다.  
3) 프로그램(Program) : 이 프로그램이 달성하려는 목적을 실행하는 프로그램 코드가 들어있다.  
- 위의 각 부분은 다른파일로 따로 저장된다.  
1) 인터페이스 형식      @interface NewClass : parent ClassName  
        {  
             인스턴스 변수 선언  
        }  
             메서드 선언  
   @end  
   - 클레스의 이름은 대문자로 시작.  
   - 변수는 소문자로 시작, 중간에 새로운 문자가 나오면 첫 자는 대문자로 표시.  
   - 변수에 $, 숫자, 예약어(int, double 등)는 사용할 수 없다.  
   - 두단어 사용시 단어와 단어 사이에 공백을 줄 수 없다.  
   - 메서드가 아무값도 반환하지 않으면  void 를 사용하고, return명령문을 실행할 필요가 없거나  return 에 아무것도  
         붙이지 않는다.  
          (ex) (void) 메서드  
                    return;  
   - 메서드 선언 형식  
           -(+)            (void)         dosometing                :                                  (int)           n              ;  
         메서드형       반환형         메서드 이름           인수를 받는 메서드   인수형   인수이름 메서드끝 명령어  
 
 
 
2) implementation 형식  
   @ implementation NewClassName  
               메서드 정의      @end  
- NewClassName은 인터페이스 부분에서 사용한 클레스 이름과 동일하다.  
- 클레스이름 뒤에 콜론을 붙이고 부모클레스의 이름을 적어도 되고 생략해도 된다.  
        ex)   @ implementation NewClassName : NSObject  
- 인터페이스 브분에서 지정한 각 메서드의 코드를 담고 있다.  
- 메서드의 정의는 메서드 종류(클레스 메서드인지 인스턴스 메서드인지)를 나타내는 것에서 시작하여 반환형, 인수형과  
       인수까지 이어진다.  
- 그러나 세미콜론(;)으로 끝나는 것이 아니라  { }안에 적어야 한다.  
 
3) 프로그램  
   - main 이 있어야 한다.  
   - 메인내부에서 변수를 정의한다.  
            ex) A *a;  
   - a 가 A형의 객체라는 의미이다. 즉  a가 세 클레스인 A의 값을 저장하는데 사용된다는 뜻이다.  
   - a 앞에있는  * 는 필수인데  a가 A의 참조(레퍼런스 또는 포인터)라는 의미이다.  
   - alloc는  allocate(할당하다)의 줄인 말이다.  
   - 클레스에  allic 메시지를 보내 그 클레스의 새로운 인스턴스를 받는다. 프로그램에서 반환된 값은 변수  a에 저장된다.  
   - alloc 메서드는 객체의 모든 인스턴스변수를  0으로 초기화 한다.  
   - 그러나 이것만으로는 객체가 사용하기에 충분히 초기화 되었다고 볼 수 없다, 따라서 객체를 생성한 후 초기화  
        (initialze)해 주어야 한다.  
   - 프로그램내에서 사용한 객체는 메모리를 해제 해 주어야 한다.  
 
*** 예제  ***(분수를 다루는 프로그램)   #import<Foundation/Foundation.h>  
 
// @interface 부분--------------  
@interface   Fraction : NSObject        // 크레스의 새 이름은 Fraction 이고, 부모크레스는 NSObject이다.  
    {  
        int numerator;  
        int denominator;  
    }                                          // 인스턴스 변수 선언(두개의 변수를 갖고 있다)  
- (void) print;                  // 내부변수에 직접 접근할 수 없어 분바와 분모를 설정해줄 프린터라는 메서드를 선언 했다.  
- (void) setNumerator : (int) n;  
- (void) setDenominator : (int) d;    // 두 메서드는 반환 값은 없고 인수를(int형으로) 받는다. 인수 이름을 n 과d 라고  
@end                                                                 정했다(사정명)  
                                                                        // 메서드 뒤에  : 으로 끝나는 것은 컴파일러에게 메서드가 인수값을 받는다는  
                                                                             것을 알려준다.  
 
 
// @implementation 부분------------  
@implementation Fraction  
- (void) print  
        {  
           NSLog (@"%i/%i", numerator, denominator);  
          }  
- (void) setNumerator : (int) n             {  
             numerator = n;  
            }  
- (void) setDenominator : (int) d  
            {  
               denominator = d;  
            }  
@end  
 
// setNumerator 메서드는 n 이라는 정수인수를 인스턴스 변수 numerator에 저장하다.  
// setDenominator 메서드는 d 이라는 정수인수를 인스턴스 변수 denominator에 저장하다.  
 
 
 
// program 부분--------------  
@ int main(int argc, char *argv[ ])  
     {  
         NSAutoreleasePool *pool = [ [NSAutoreleasePool alloc] init];  
         Fraction    *myFraction;  
 
        //Fraction 의 인스턴스를 생성한다.  
         myFraction = [Fraction alloc];  
         myFraction = [myFraction init];        // 두 줄을 줄여 myFraction = [[Fraction alloc]init]; 으로 쓸 수 있다  
         // 분수를 설정  
          [myFraction setNumerator : 1];      // myFraction 에  setNumerator 메세지를 보낸다. 인수로 넘어가는 값은1이다.  
                                                                              // setNumerator 로 넘긴 값은 변수 n 에 저장되고 이 값은 numerator에 저장.  
          [myFraction setDenominator : 3];  
 
        // 프린트 메서드를 호출한다,  
         NSLog (@ "The value of myFraction is:"];  
          [myFraction print];  
          [myFraction release];                            // Fraction 객체가 사용했던 메모리를 해제해 준다.  
 
          [Pool drain];  
          return 0;  
 
     }  
 
 
728x90
반응형

댓글