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> // 위 해더 파일을 참조한다는 뜻이다.
#import <Foundation/Foudation.h> // 위 해더 파일을 참조한다는 뜻이다.
//--------------------------@interface부분--------------------------// (선언코드)
@interface Fraction : NSobject //@interface NewClassName ParentClassName
// 자세한 내용은 8장 상속 참조
{
int numerator; // Member Declaration, 위 두개 변수를 인스턴스 변수하고 한다.
int denominator;
}
- (void) print; // 맨 앞에 있는 - 부호는 컴파일러에게 인스턴스 메서드임을 알려주는 기호
// (+)기호는 클래스 메서드를 나타낸다.
@end
//--------------------------@program부분--------------------------//
int main(int argc, cont char * argv[])
{
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; // 메세지를 출력하고 함수를 종료한다는 의미다.---정상종료 한다는 의미
// 메모리 공간 할당 및 초기화
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를 통해 프로그래밍 할때 테스트 해볼 예제
**** 출력결과 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부분--------------------------// (구현코드)
// 객체 ,메서드 이름은 보통 소문자로 시작한다.또한 이름
// 중간에 새로운 단어가 시작될 경우 첫 자도 대문자로
// 표시한다.
- (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는 반환형 변수 타입, 괄호안의 변수들은
메인함수안에 있는 선언된 변수들이다.
- (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; // 메세지를 출력하고 함수를 종료한다는 의미다.---정상종료 한다는 의미
// 메모리 공간 할당 및 초기화
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;
**** 출력결과 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부분--------------------------//
- (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;
}
- (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;
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 / 스티븐 코찬 지음, 박세헌 옮김 / 인사이트 출판
-------->> 위와 같이 코딩할 수 있다.
출처 : Programming in Object-C 2.0 / 스티븐 코찬 지음, 박세헌 옮김 / 인사이트 출판