[Java/복습] 객체지향 프로그래밍 1
1. 상속
기존의 클래스를 재 사용하여 새로운 클래스를 작성하는 것 (코드의 재사용)
① 두 클래스를 부모와 자식으로 관계를 맺어주는 것.
② 자손 클래스는 조상 클래스의 모든 멤버를 상속받기 때문에, 자손 클래스는 부모 클래스의 멤버들을 포함한다.
(생성자와 초기화 블럭은 상속되지 않음. 멤버만 상속됨. 명시적 초기화와 초기화 블럭 , 멤버변수 초기화 시기와 순서 )
→ 보다 적은 양의 코드로 새로운 클래스를 작성할 수 있고, 코드를 공통적으로 관리할 수 있음.
③ 자손 멤버의 개수는 조상보다 적을 수 없다. (같거나 많다)
④ 자식 클래스 extends 부모 클래스.
⑤ 자손 클래스가 변경되는 것은 조상 클래스에 아무런 영향을 주지 못한다.
- 조상 클래스 : Parent Class, Super Class, Base Class
- 자손 클래스 : Child Class, Sub Class, Derived Class
- 예르미의 코딩노트 블로그 (상속 관련 내용이 잘 정리되어 있어서 추가로 참고 👍)
2. 포함
한 클래스의 멤버변수로 다른 클래스 타입의 참조변수를 선언하는 것
① 상속 이외에 클래스를 재 사용하는 또 다른 방법으로, 한 클래스의 멤버변수로 다른 클래스 타입의 참조변수를 선언하는 것이다.
② 하나의 거대한 클래스를 작성하는 것 보다 단위별로 여러 개의 클래스를 작성한 다음, 이 단위 클래스들을 포함관계로 재사용하면 보다 간결하고 손쉽게 클래스를 작성할 수 있다.
Class Point {
int x;
int y;
}
Class Circle {
int x; // 원점의 x좌표
int y; // 원점의 y좌표
int r; // 반지름(radius)
}
// 클래스 포함 관계로 재 작성
Class Circle {
Point p = new Point(); // Point 클래스를 멤버변수로 선언
int r;
}
3. 클래스간의 관계 구분
상속관계: '~은 ~이다' / 포함관계: '~은 ~을 가지고 있다'
Circle과 Point의 경우, Circle은 Point이다 보다 Circle은 Point를 가지고 있다라는 문장이 더 자연스럽기 때문에, 상속관계가 아닌 포함 관계를 맺어주는 것이 옳다.
4. 단일 상속
자바에서는 오직 단일 상속만을 허용한다
- 자바에서는 단일 상속만을 허용하기 때문에, 비중이 높은 클래스 하나만 상속받고 나머지는 포함관계로 처리한다.
- 다중상속을 허용하게 될 경우, 여러 클래스로부터 상속을 받을 수 있기 때문에 복합적인 기능을 가진 클래스를 작성할 수 있지만, 클래스간의 관계가 매우 복잡해진다. (서로 다른 클래스로부터 상속받은 멤버간의 이름이 같은 경우 구별할 방법이 없다.)
5. Object Class
모든 클래스 상속계층도의 최상위에 있는 조상클래스
- 다른 클래스로부터 상속 받지 않는 모든 클래스들은 자동적으로 Object 클래스로부터 상속받게 됨.
- toString()이나 equals(Object o)와 같은 메서드들은 Object 클래스에 정의되어 있는 메서드이기 때문에 별도로 정의하지 않고 사용할 수 있음.
참고 😎
1. 자바의 정석