객체지향 프로그래밍의 핵심개념
상속
상속
상속이란?
💡기존 클래스로 생성된 클래스를 하위 클래스, 기존의 클래스를 상위 클래스라고 하며 하위 클래스는 상위 클래스로 부터 확장된 클래스라고 표현한다.
상속의 특징
- 하위 클래스는 상위 클래스의 모든 멤버를 상속받는다(💡생성자, 초기화블럭은 제외)
- 하위 클래스의 멤버 개수 >= 상위 클래스의 멤버 개수
- 코드의 재사용성으로 중복을 줄일 수 있다.
- 다형적 표현이 가능
- 단일 상속만 가능하다.
💡 다중상속의 효과를 누리고 싶다면?
비중이 높은 클래스만 상속관계로 처리하고 나머지는 포함관계로 처리한다.
예제 코드
class Parent {}
class Child extends Parent {}
extends를 사용하여 상속관계를 표현 한다.
포함관계
포함관계란?
- 클래스의 멤버로 다른 클래스 타입의 참조변수를 선언하는 것.
class Circle {
int x;
int y;
int r;
}
class Point {
int x;
int y;
}
int x와 int y 코드가 중복되어 사용된다. 이러한 중복을 줄이기 위해 포함관계를 이용한다.
class Circle {
Point c = new Point();
int r;
}
class Point {
int x;
int y;
}
class Point를 class Circle안에 선언함으로서 코드의 중복을 줄일 수 있다.
이때, Circle이 Point를 포함하고 있다고 표현한다.
💡 상속관계와 포함관계
상속관계 : A는 B이다.
포함관계 : A는 B를 가지고 있다.
매서드 오버라이딩
오버라이딩이란?
- 상위 클래스로부터 상속받은 메서드와 동일한 이름의 메서드를 자신에게 맞게 재정의하는 것.
- override : ~위에 덮어쓰다.
- 메서드의 이름은 동일! 내용은 변경!!
오버라이딩이 성립하기 위한 조건
- 선언부(반환타입, 메서드 이름, 매개변수 목록)가 상위 클래스의 메서드와 일치 해야 한다.
- 접근 제어자를 상위 클래스의 메서드보다 좁은 범위로 변경할 수 없다.
- 상위 클래스의 메서드보다 많은 수의 예외를 선언할 수 없다.
오버라이딩과 오버로딩
- 오버로딩 : 기존에 없는 새로운 메서드를 정의하는 것(new, 이름만 같은거임) -> 상속과 무관
- 오버라이딩 : 상속 받은 메서드의 내용을 변경하는 것(change)
참조변수 super와 생성자 super()
참조변수 super는 참조변수 this와, 생성자 super()는 생성자 this()와 비슷한 역할을 한다.
참조변수 super
- 상위클래스의 멤버와 자신의 멤버를 구별할 때 사용.
- 인스턴스 메서드 내에서만 존재.
생성자 super()
- 상위 클래스의 생성자를 호출할 때 사용.
- 상위 클래스의 멤버는 상위 클래스의 생성자를 호출해서 초기화.
- 생성자 안에서만 사용가능하며 반드시 첫 줄에 와야 한다.
- 첫 줄에 super()가 없는 경우, 컴파일러가 자동으로 super()를 추가해준다. 이때 상위 클래스에 기본 생성자가 없으면 에러가 발생한다.
Object 클래스
Object 클래스란?
- 최상위에 위치한 상위 클래스
- 자바의 모든 클래스는 Object클래스로부터 확장된다.
- 표현하지 않아도 컴파일러가 자동적으로 extends Object를 추가한다.
대표적인 메서드