Objective-C 동적 바인딩
동적 바인딩은 컴파일 타임이 아닌 런타임에 호출 할 메서드를 결정합니다. 동적 바인딩은 후기 바인딩이라고도합니다. Objective-C에서 모든 메서드는 런타임에 동적으로 해결됩니다. 실행되는 정확한 코드는 메서드 이름 (선택자)과 수신 객체 모두에 의해 결정됩니다.
동적 바인딩은 다형성을 가능하게합니다. 예를 들어 Rectangle 및 Square를 포함한 개체 모음을 고려하십시오. 각 개체에는 고유 한 printArea 메서드 구현이 있습니다.
다음 코드 조각에서 [anObject printArea] 표현식에 의해 실행되어야하는 실제 코드는 런타임에 결정됩니다. 런타임 시스템은 실행되는 메서드에 대한 선택기를 사용하여 anObject의 어떤 클래스에서든 적절한 메서드를 식별합니다.
동적 바인딩을 설명하는 간단한 코드를 살펴 보겠습니다.
#import <Foundation/Foundation.h>
@interface Square:NSObject {
float area;
}
- (void)calculateAreaOfSide:(CGFloat)side;
- (void)printArea;
@end
@implementation Square
- (void)calculateAreaOfSide:(CGFloat)side {
area = side * side;
}
- (void)printArea {
NSLog(@"The area of square is %f",area);
}
@end
@interface Rectangle:NSObject {
float area;
}
- (void)calculateAreaOfLength:(CGFloat)length andBreadth:(CGFloat)breadth;
- (void)printArea;
@end
@implementation Rectangle
- (void)calculateAreaOfLength:(CGFloat)length andBreadth:(CGFloat)breadth {
area = length * breadth;
}
- (void)printArea {
NSLog(@"The area of Rectangle is %f",area);
}
@end
int main() {
Square *square = [[Square alloc]init];
[square calculateAreaOfSide:10.0];
Rectangle *rectangle = [[Rectangle alloc]init];
[rectangle calculateAreaOfLength:10.0 andBreadth:5.0];
NSArray *shapes = [[NSArray alloc]initWithObjects: square, rectangle,nil];
id object1 = [shapes objectAtIndex:0];
[object1 printArea];
id object2 = [shapes objectAtIndex:1];
[object2 printArea];
return 0;
}
이제 프로그램을 컴파일하고 실행하면 다음과 같은 결과를 얻을 수 있습니다.
2013-09-28 07:42:29.821 demo[4916] The area of square is 100.000000
2013-09-28 07:42:29.821 demo[4916] The area of Rectangle is 50.000000
위의 예에서 볼 수 있듯이 printArea 메서드는 런타임에 동적으로 선택됩니다. 동적 바인딩의 예이며 유사한 종류의 개체를 다룰 때 많은 상황에서 매우 유용합니다.