반응형
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;
}
클레스(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
반응형
댓글