[3일차]Dynamic Binding(3-1) Objective-C2010. 5. 10. 19:48
음.. 2일차 정리되지 않은 관계로 3일차 먼저 정리하고.. 2일차는 다음에 다시 정리하도록 하겠습니다.
Dynamic Binding
1. Objective-C 에서는 모든 참조형 변수는 Dynamic Binding (실행시 타입을 결정)을 수행합니다.
2. 컴파일시에는 어떠한 타입체크도 수행하지 않습니다.
3. 단, 상위클래서 타입의 변수에 하위타입의 클래스로 메모리를 할당하는 경우 메모리 할당도 가능하고
하위 클래스 타입의 메서드도 호출가능하지만 하위클래스 타입의 메서드를 호출하면 Warning이 발생한다.
이때는 가급적 형변환을 해주는것이 좋다.
상위 클래스의 변수는 하위 클래스타입의 변수 대입가능
Test *obj = [Test alloc];
SubTest *obj = [SubTest alloc];
Test *obj = [SubTest alloc]; ==> Warning 발생 : 형변환을 하면 Warning가 발생하지 않음
[(Subtest*)obj b] ==> (변경하고자하는자료형)데이터
SubTest *obj = [Test alloc]; (X) ==> 일반적으로는 불가능하나 Objective-C는 가능
----------------------------------------------------
#import <Foundation/Foundation.h>
@interface Test : NSObject
-(void)Disp;
@end
@implementation Test
-(void)Disp;
{
NSLog(@"상위 클래스의 메서드입니다"); }
@end
@interface SubTest : Test
-(void)Print;
@end
@implementation SubTest
-(void)Print;
{
NSLog(@"하위 클래스의 메서드입니다");
}
@end
int main(void)
{
Test * obj;
obj = [[SubTest alloc] init];
[obj Disp];
[(SubTest*)obj Print]; => (SubTest*) 는 생략가능
system("pause");
return 0;
}