클래스 상속 (inheritance)
상속을 통해 부모의 특성을 그대로 자식 클래스에서 사용할 수 있도록 함.
==> 자식 클래스에서는 부모 클래스의 멤버 변수, 메소드 등을 사용할 수 있음.
그래서 어떻게 사용되느냐?
==> 여러 클래스들의 공통적인 부분을 부모 클래스로 묶어놓고, 부모 클래스를 상속 받아서 필요한 부분만 재정의, 추가해서 사용.
예를 들면)
고양이, 오리, 염소 클래스를 만들고 각각의 울음소리를 출력하고자 할 때, 소리만 다를 뿐 '울음소리를 출력한다'라는 기본 틀은 동일함에도, 상속이라는 개념을 사용하지 않는다면 똑같은 함수를 각각의 클래스에 개별적으로 다 만들어야함.
==> '동물'이라는 부모 클래스를 만들고 '울음소리'라는 메소드를 정의하고,
==> 자식 클래스에서는 부모를 상속받아 필요한 부분만 재정의, 추가 하여 사용.
[ 동물 ]
동물 -- 부모 클래스가 될 놈
울음소리("동물의 울음소리를 출력합니다");
몸_길이
서식지
먹이
천적
클래스 선언부 ( Animal.h )
#import <Foundation/Foundation.h>
@interface Animal : NSObject
-(void)울음소리; //인스턴스 메소드 선언
@property int bodyLength;
@property NSString *habitat;
@property NSString *feed;
@property NSString *naturalEnemy;
@end
클래스 구현부 ( Animal.m )
#import "Animal.h"
@implementation Animal
-(void)울음소리{ //인스턴스 메소드 구현
NSLog(@"동물의 울음소리를 출력합니다.");
}
@end
[ 고양이 ]
고양이 : 동물 - 상속
울음소리("야옹"); - 재정의
클래스 선언부 ( Cat.h )
#import "Animal.h"
@interface Cat : Animal //Animal 클래스를 상속받습니다! 라는 뜻.
@end
클래스 구현부 ( Cat.m )
#import "Cat.h"
@implementation Cat
-(void)울음소리{
NSLog(@"야옹~!");
}
@end
[ 양 ]
양 : 동물 - 상속
울음소리("메에에"); - 재정의
클래스 선언부 ( Sheep.h )
#import "Animal.h"
@interface Sheep : Animal //Animal 클래스를 상속받습니다! 라는 뜻.
@end
클래스 구현부 ( Sheep.m )
#import "Sheep.h"
@implementation Sheep
-(void)울음소리{
NSLog(@"메에에~");
}
@end
실행코드 ( main.m )
#import <Foundation/Foundation.h>
//#import "Animal.h"
#import "Cat.h"
#import "Sheep.h"
int main(int argc, const char * argv[]) {
@autoreleasepool {
//객체 생성
Cat *my_cat = [[Cat alloc] init];
//멤버 변수 값 삽입
my_cat.bodyLength = 130;
my_cat.habitat = @"어디에나";
my_cat.feed = @"캔";
my_cat.naturalEnemy = @"친척동생";
//인스턴스 메소드 호출
[my_cat 울음소리];
//객체 생성
Sheep *your_sheep = [[Sheep alloc] init ];
//멤버 변수 값 삽입
your_sheep.bodyLength = 90;
your_sheep.habitat = @"highland";
your_sheep.feed = @"풀";
your_sheep.naturalEnemy = @"늑대";
//인스턴스 메소드 호출
[your_sheep 울음소리];
}
return 0;
}
==> 결과 :
2019-02-19 16:41:36.094045+0900 learn[3057:977837] 야옹~!
2019-02-19 16:41:36.094363+0900 learn[3057:977837] 메에에~
Program ended with exit code: 0
==> 부모 클래스에서 그대로 써도 되는 변수(신장 길이, 서식지, 먹이, 천적)은 그대로 사용하고 /
==> 울음소리를 출력하는 메소드는 재정의 하여 사용.
장점 : 어떠한 부모 클래스를 상속받아 사용하는 객체 하나를 알면, 그 부모 클래스를 상속받는 다른 클래스들의 구조도 어느정도 파악이 되고 어떤 메소드를 호출했을 때 어떤 행위를 할 지도 쉽게 추측 가능하다. 또한 코드의 간결성과 가독성도 좋아짐.
정리 : 부모 클래스로 갈 수록 큰 틀만 잡고, 자식 클래스로 갈 수록 점점 내용이 구체화됨.
'Objective-C 기초' 카테고리의 다른 글
URL Encoding (0) | 2019.02.14 |
---|---|
== (0) | 2019.02.09 |
인스턴스 메소드 & 클래스 메소드 (0) | 2019.02.09 |
클래스 작성 (0) | 2019.02.08 |
nil 포인터 (0) | 2019.02.08 |