본문 바로가기
프로그래밍/Java

상속

by 3.14pie 2023. 1. 17.

상속(Inheritance) - 이미 존재하는 클래스를 기반으로 새 클래스를 만드는 것이다. 기존 클래스의 동작과 상태를 그대로 물려 받는다. 새 클래스만의 동작과 상태를 추가할 수 있다. 거의 모든 사람들이 OOP의 핵심이라 여기는 특성이다. 현재도 상속을 지원하지 않으면 OO 언어라고 보지 않기도 한다. 다형성의 기반이 되는 특성이다.

 

부모 클래스 - 이미 존재하는 클래스를 말한다. parent class, base class

자식 클래스 - 새 클래스를 말한다. child class, derived class

 

자식 클래스 이름 extends 부모 클래스 이름

 

부모 클래스 먼저 초기화 한 후에 자식 클래스의 초기화가 이뤄져야 한다.

super - 부모 클래스의 생성자를 호출하는 방법이다. this는 자신의 개체를 의미하지만 super는 자신의 부모 부분을 가르킨다. 매개 변수, 멤버 변수, 메서드를 호출할 수도 있다.

 

* 부모 클래스에서는 자식 클래스를 호출할 수 없다.

 

protected - 클래스 내부, 같은 패키지에 속한 클래스, 자식 클래스만 접근 가능한 접근 제어자이다. 외부에서는 접근할 수 없다.

 

부모 클래스에 올라갈수록 일반적인(general) 개념, 자식 클래스로 내려갈수록 특정적인(specific) 개념이다.

 

is-a 관계 - 상속 관계, 부분 집합 관계이다. The panda is a animal, 자식을 부모에 대입할 수 있다. (암시적 캐스팅) 부모를 자식으로 캐스팅할 때는 명시적으로 해야한다.

has-a 관계 - 컴포지션 관계, 어떤 클래스가 다른 클래스를 가지고 있을 경우

 

상속과 컴포지션 모두 재사용성을 위한 방법이다. 상속으로 해결할 수 있는 문제가 컴포지션으로 해결 가능한 경우도 많다. 반대로 컴포지션으로 해결할 수 있는 문제를 상속으로도 해결할 수 있다. 둘 중 적합한 방법으로 코드를 작성하는 것이 좋다.

 

RTTI (Run Time Type Identification) - 부모형 변수에 저장된 개체가 실제 어떤 자식형인지 알 수 있게 해주는 기능이다.

instanceof 연산자 - 개체가 특정 클래스의 인스턴스인지 판단하는 연산자이다. 특정 클래스의 인스턴스인지를 판단하는 것은 아니다.

getClass() - 실행 중에 개체의 클래스 정보를 확인할 수 있다. getName은 패키지 경로를 포함한 클래스명을 반환한다.

'프로그래밍 > Java' 카테고리의 다른 글

다형성  (0) 2023.02.02
상속, 컴포지션  (0) 2023.01.29
Static, 디자인 패턴, 내포 클래스  (0) 2023.01.13
Static  (0) 2023.01.11
접근 제어자  (0) 2023.01.08