본문 바로가기
Object-C

3장 클래스, 객체, 메서드

by 풍야 2010. 3. 12.

1. 일반적인 개념 설명

객체지향 프로그래밍란
 
"어떤 것이 있고 당신이 그것에 취하고 싶은 행동을 정하는 활동"이다.


클래스는 특정 행동 및 집합 또는 객체 등의 집합체를 의미한다.

클래스로 부터 나온 것을 인스턴스라고 부르며 인스턴스가 수행하는 행동을

메서드라고 한다. 그리고 객체는 클래스(집합) 안의 원소이며 객체에 메서드를 적용하면

객체의 상태에 영향을 미치게 된다.


위 영향이나 관계적인 측면을 아래의 문법을 통해 표현하게 된다.

예를 들어 당신이 소유한 차에 대해서 설명해보자

당신 집에 있는 자동차는 분명히 객체가 되는 것이고 동시에

차(포괄적 개념을 의미한다)의 '
인스턴스'이다.

차로 운전을 하거나 기름을 채우거나 세차 또는 수리를 하는 행위를 메서드라고 한다.

기름을 가득 채우는 행위나 차가 더러워 지고 타이어가 닳는 행위는

클래스 객체의 동적상태라고 할 수 있다.

클래스 : 차, 클래스 메서드 : 새차를 만드는 것을 의미한다.

ex.

//
yourCar = [Car new];  //  새 차를 얻는다
               [yourCar prep];  //  자동차를 처음으로 사용 할 준비를 한다.
               [yourCar drive];  //  운전을 한다.
               [yourCar wash];  //  새차를 한다.
               [yourCar getGas];  //  가스를 넣는다

[myWindow erase];  // 창을 정리한다.
[myRect getArea];  // 사각형 영역을 계산한다.
[userText spellCheck];  // 텍스트의 철자를 검사한다.
[deskCalculator clearEntry];  // 마지막 입력을 정리한다.
[favoritePlayist showSongs];  // 선호하는 곡 목록에서 곡을 보여준다.

--------------------------------------------------------------------------------------------------

<예제 #1> 

#import <Foundation/Foudation.h>   // 위 해더 파일을 참조한다는 뜻이다.

int main(int argc, cont char * argv[])   // 맨 왼쪽 int는 반환형 변수 타입, 괄호안의 변수들은
                                                            //  메인함수안에 있는 선언된 변수들이다.
{
NSAutoreleasePool * pool = [[NsAutoreleasePool alloc] init]; 
// 메모리 공간 할당 및 초기화

int numerator = 1;
int denominator = 3;
NSLog(@"The fraction is %i /%i \n", numerator, denominator); 

[pool drain];   // 메모리 할당을 해제한다.
return 0;  // 메세지를 출력하고 함수를 종료한다는 의미다.---정상종료 한다는 의미
}


**** 출력결과 The fraction is 1/3 ****



p.s  --- 오브젝트 C 기본예제이다 --- gcc 컴파일로 출력상태를 알 수 있다.
           gcc -v -o (생성하고자 하는 EXE파일이름) (파일이름).m -lobjc
           (맥에서는 터미널에서 수행)



--------------------------------------------------------------------------------------------------


<예제 #2>  ---Xcode를 통해 프로그래밍 할때 테스트 해볼 예제

#import <Foundation/Foudation.h>   // 위 해더 파일을 참조한다는 뜻이다.


//--------------------------@interface부분--------------------------// (선언코드)

@interface Fraction : NSobject   //@interface NewClassName ParentClassName
                                                     // 자세한 내용은 8장 상속 참조
{
   int numerator;       // Member Declaration, 위 두개 변수를 인스턴스 변수하고 한다.
   int denominator;
}

- (void) print;  // 맨 앞에 있는 - 부호는 컴파일러에게 인스턴스 메서드임을 알려주는 기호
                      // (+)기호는 클래스 메서드를 나타낸다.
- (void) setNumerator : (int) n;     // 보통 클래스 이름은 대문자로 시작하며 인스턴스 변수,
                                                    //  객체 ,메서드 이
름은 보통 소문자로 시작한다.또한 이름
                                                    //  중간에 새로운 단어가 시작될 경우 첫 자도 대문자로
                                                    //  표시한다.

- (void) setDenominator : (int) d;  // (int)d 는 인스턴트 메서드 d 값이 int 형 값으로 반환한
                                                         다는 지시이다.

@end



// =====정리===== //


//      -             (void)     setNumerator                  :                             (int )          n
// 메서드형    반환 형     메서드 이름        인수를 받는 메서드        인수형   인수이름



//--------------------------@implementation부분--------------------------// (구현코드)
 
@implementation Fraction  //  Fraction 뒤에  : NSObject 는 보통 생략된다.

- (void) print
{
   NSLog (@"%i / %i", numerator, denumerator);
}

- (void)setNumerator : (int) n;
{
   numerator = n;
}

- (void)setDenumerator : (int) n;  // setDenumerator : 메서드
{
   denominator = d;  //  denominator : 인스턴트 변수
}

@end


//--------------------------@program부분--------------------------//

int main(int argc, cont char * argv[])   // 맨 왼쪽 int는 반환형 변수 타입, 괄호안의 변수들은
                                                               메인함수안에 있는 선언된 변수들이다.
{
NSAutoreleasePool * pool = [[NsAutoreleasePool alloc] init]; 
// 메모리 공간 할당 및 초기화

Fraction  *myFraction; 

myFraction = [Fraction alloc];  // myFraction 은 Fraction형의 객체라는 의미임
                                                     // (변수 메모리 생성 및 할당)
myFraction = [myFraction init];  // Fraction의 인스턴스를 선언한다.(변수 초기화)

// myFraction = [[Fraction alloc] init];   --- 보통 다음과 같이 한줄로 요약해서 쓴다.
// Fraction  *myFraction = [[Fraction alloc] init];  ---또는 위와 같이 요약한다.

[myFraction setNumerator : 1];
[myFraction setDenumerator : 3];  // 분수를 1/3으로 설정한다.

NSLog(@"The fraction is : \n");
[myFraction print]; 
[myFraction release];

[pool drain];   // 메모리 할당을 해제한다.
return 0;  // 메세지를 출력하고 함수를 종료한다는 의미다.---정상종료 한다는 의미
}


**** 출력결과 The fraction is 1/3 ****


--------------------------------------------------------------------------------------------------

<예제 #3>

#import <Foundation/Foudation.h>


//--------------------------@interface부분--------------------------//

@interface Fraction : NSobject  
{
   int numerator;       
   int denominator;
}

- (void) print; 
- (void) setNumerator : (int) n;
- (void) setDenominator : (int) d;
- (int) numerator;
- (int) denominator;

@end

//--------------------------@implementation부분--------------------------// 
 
@implementation Fraction 

- (void) print
{
   NSLog (@"%i / %i", numerator, denumerator);
}

- (void)setNumerator : (int) n;
{
   numerator = n;
}

- (void)setDenominator : (int) n; 
{
   denominator = d;
}

- (int) numerator
{
   return numerator;
}

- (int) denominator
{
   return denominator;
}

@end


//--------------------------@program부분--------------------------//

int main(int argc, cont char * argv[])  
{
NSAutoreleasePool * pool = [[NsAutoreleasePool alloc] init];
Fraction  *myFraction = [[Fraction alloc] init]; 
// Fraction  *myFraction = [Fraction new]; 로
요약가능

[myFraction setNumerator : 1];
[myFraction setDenominator : 3];  // 분수를 1/3으로 설정한다.

NSLog(@"The fraction is %i / %i ", [myFraction numerator], [myFraction denominator]\n");
[myFraction release];
[pool drain];

return 0;
}


-------->> 위와 같이 코딩할 수 있다.



출처 : Programming in Object-C 2.0 / 스티븐 코찬 지음, 박세헌 옮김 / 인사이트 출판