[Java] 상속(Inheritance)
by Choi HyeSun
상속(Inheritance) - 정의
- 
    기존의 클래스를 재사용하여 새로운 클래스를 작성하는 것 
- 
    보다 적은 양의 코드로 새로운 클래스를 작성할 수 있음 
- 
    코드를 공통적으로 관리할 수 있기 때문에 코드의 추가 및 변경이 매우 용이 
- 
    장점 - 
        코드의 재사용성을 높임 
- 
        코드의 중복 제거 
 
- 
        
상속 - 구현
- 
    새로 작성하고자 하는 클래스 이름 뒤에 키워드 ‘extends’와 함께 상속받고자 하는 클래스 이름 명시 
- 
    클래스의 관계는 상속(Inheritance) 관계 
- 
    예시) class KoreanWeather extends Weather { } - 
        KoreanWeather클래스와 Weather 클래스는 서로 상속 관계에 있음 
- 
        KoreanWeather - 자식 클래스(Child Class) 
- 
        Weather - 부모 클래스(Parent Class) 
 
- 
        
상속 - 부모클래스와 자식클래스
- 
    부모클래스(Parent Class) - 
        상속해주는 클래스 
- 
        super class, base class라고도 함 
 
- 
        
- 
    자식클래스(Child Class) - 
        상속 받는 클래스 
- 
        부모클래스의 멤버(변수+메소드)를 모두 상속받음 
- 
        sub class, derived class라고도 함 
 
- 
        
상속 - 특징
- 
    생성자와 초기화 블럭은 상속되지 않음 
- 
    멤버(전체)만 상속됨 → 자식클래스의 멤버 수는 부모클래스의 멤버 수 보다 항상 많거나 같음 
- 
    자식 클래스의 인스턴스를 생성하면 부모 클래스의 멤버도 같이 생성되기 때문에 따로 부모 클래스의 인스턴스를 생성하지 않아도 됨 
- 
    공통된 부분을 부모클래스로 정의하면, 해당 부분 수정시 부모클래스만 수정해주면 되기때문에 관리가 용이 
클래스간의 관계 - 포함(Composite) 관계
- 
    상속이외에 클래스를 재사용하는 또 다른 방법 
- 
    클래스의 멤버변수로 다른 클래스 타입의 참조변수를 선언하는 것 - 클래스명 참조변수명 = new 클래스명(매개변수);
 
- 
    매개변수로 중첩도 가능함 - 
        클래스명A 참조변수명A = new 클래스명A(new 클래스명B(매개변수B), 매개변수A); 
- 
        클래스명B 참조변수명B = new 클래스명B(매개변수B); 
- 
        클래스명A 참조변수명A = new 클래스명A(참조변수명B, 매개변수); 
 
- 
        
- 
    한 클래스를 작성하는데 다른 클래스를 멤버변수로 선언하여 포함시키는 것은 좋은 생각 - 
        단위별로 클래스를 작성한 후, 단위 클래스들을 포함관계로 재사용 
- 
        보다 간결하고 손쉽게 클래스 작성 
- 
        다른 클래스를 사용하는데도 재사용할 수 있음 
- 
        코드가 나누어져 있기 때문에 코드 관리가 수월 
 
- 
        
클래스간의 관계 결정하는 법
- 
    상속관계(has -a) - 
        ~은(는) ~(의 요소)을(를) 가지고 있음 
- 
        슈크림붕어빵은 붕어빵(의 요소)를 가지고 있음 
 
- 
        
- 
    포함관계(is-a) - 
        ~은(는) ~(의 요소)임 
- 
        슈크림붕어빵은 붕어빵(의 요소)임 
 
- 
        
- 
    나름의 이해(?) - 
        상속관계는 상속받을 클래스꺼를 내가 다 포함할 때(?) 
- 
        포함관계는 포함한 클래스꺼를 내가 일부나 전부를 사용할 때(?) 
 
- 
        
단일 상속(Single Inheritance)
- 
    자바에서는 단일 상속만을 허용 - 
        다른 객체지향언어인 C++은 다중 상속(Multiple Inheritance)을 허용 
- 
        둘 이상의 클래스로부터 상속은 불가능 
 
- 
        
- 
    다중 상속의 특징 - 
        여러 클래스로부터 상속받을 수 있기 때문에 복합적인 기능을 가진 클래스를 쉽게 만들 수 있음 
- 
        클래스간의 관계가 매우 복잡함 
- 
        서로 다른 클래스로부터 상속받은 멤버간의 이름이 같은 경우 구별하기가 어려움 → 자바에선 비허용 
 
- 
        
- 
    단일 상속의 특징 - 
        하나의 조상 클래스만 가질 수 있기 때문에 다중 상속보다 불편한 점이 있음 
- 
        클래스 간의 관계가 보다 명확해지고 코드를 다중 상속보다 신뢰할 수 있음 
- 
        포함관계를 적절히 이용할 것 
 
- 
        
Object 클래스 - 모든 클래스의 부모(를 넘어선 조상? 시조!) 클래스
- 
    모든 클래스 상속계층도의 최상위에 있는 부모(조상)클래스 
- 
    컴파일러 : 다른 클래스로부터 상속을 받지 않는 모든 클래스들은 자동적으로 Object 클래스로부터 상속받게 함 - extends Object;
 
- 
    다른 클래스로부터 상속을 받더라도, 그 상속해주는 클래스의 부모클래스, 또는 그 위의 클래스의 부모 클래스는 Object 
- 
    자바의 모든 클래스들은 Object 클래스의 멤버들을 상속받기 때문에 Object 클래스에 정의된 멤버들을 사용할 수 있음 - 예) toString(), equals() 등
 
Subscribe via RSS
