[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