- 상속이란?
자바에는 '상속'의 개념이 있다. 말 그대로, 상속을 통해 클래스 간 자원(필드, 메서드 등)이 전달될 수 있는 속성이다. 프로그램에서는 상속이 이루어졌을 때, 상속해준 클래스를 부모 클래스 혹은 상위 클래스, 상속을 받은 클래스를 자식 클래스 혹은 하위 클래스로 지칭한다.
- 상속의 이점
상속이 자바에서 핵심적이며 중요한 하나의 기능으로 자리잡은 데에는 상속이 갖는 이점들에 그 이유가 있다. 상속은 이미 잘 개발된 클래스를 다시 재사용하여 새로운 클래스를 만드는 것이다. 따라서 다음과 같은 이점들을 가진다.
1) 코드의 중복을 줄여준다.
2) 수정을 최소화시킬 수 있어 유지 보수 시간을 줄여준다.
다만, 상속에서 주의할 점은 모든 필드와 메서드를 상속받을 수 있는 것은 아니라는 것이다. 부모 클래스에서 접근 제한자가 어떤 것인지에 따라 상속의 대상에서 제외될 수 있으니 유의가 필요하다.
ex. private 접근 제한을 갖는 필드와 메서드, 서로 다른 패키지에 존재하며 default 접근 제한을 갖는 필드와 메서드
- 상속 사용법
프로그램에서는 상속을 할 때에 자식 클래스가 부모 클래스를 선택한다. 자식클래스명 뒤에 extends와 함께 부모클래스 명을 붙이면 되는데, 다음과 같다.
class 자식클래스 extends 부모클래스 {
//필드
//생성자
//메서드
}
- 상속 시 주의할 점
상속 이후 자식 클래스에서 객체를 생성하면, 부모 클래스의 객체도 자동 생성된다. 상속의 관계이기 때문이다. 이 때에 객체는 부모 클래스의 객체가 먼저 생성이 된 후 자식 클래스의 객체도 생성이 되는 순서로 진행되는데, 객체 생성 시 우선적으로 이루어져야 할 생성자 호출에서 주의할 점이 있다.
부모 클래스의 생성자가 만약 아무런 매개 변수도 갖지 않는 기본 생성자라면, 자식 클래스에서도 부모 클래스의 생성자를 코드로 작성하지 않아도 자동 호출이 된다.
public 자식클래스() {
super(); //부모 클래스의 객체를 생성하는 기본 생성자
}
하지만 만약 부모 클래스에 있는 생성자가 매개 변수를 갖는 생성자라면, 이 때에는 자식 클래스에서도 이 생성자를 분명히 명시해주어야 한다.
//부모 클래스
public 부모클래스() {
super(매개값, ...);
}
//자식 클래스
public 자식클래스() {
super(매개값, ...) // -> 이 생성자를 명시하지 않으면 컴파일 오류가 발생한다.
}
- 메소드 오버라이딩(Overriding)
자바에서 상속을 하는 이유는 앞에서 언급한 상속의 이점 때문이다. 재사용하여 중복을 줄이고, 유지 보수 시간을 최소화하기 위함인 것이다. 그런데 만약 부모 클래스의 메서드를 자식 클래스에서 상속받아 사용하려는데, 해당 메서드가 자식 클래스에서 사용하기에 적합하지 않다면? 이 경우에 사용하는 것이 바로 메소드 오버라이딩이다. 한 마디로, 자식 클래스에서 부모 클래스의 메서드를 상속받되 재정의해서 사용하는 것이다.
오버라이딩 시 주의해야 할 규칙은 다음과 같다.
1) 부모의 메서드와 동일한 리턴 타입, 메소드 이름, 매개 변수 리스트를 가져야 한다.
2) 접근 제한을 더 강하게 오버라이딩은 불가능하다.
3) 새로운 예외를 만들 수 없다.
또한, 오버라이딩을 하게 되면 이후 재정의한 메소드를 호출할 때에 부모 클래스의 메소드는 숨겨지고 재정의가 된 자식 클래스의 메소드만 사용된다. 그렇지만 부모 클래스의 메소드를 super 키워드를 통해 호출도 가능하다.
참고 : 도서 <이것이 자바다>
'TIL' 카테고리의 다른 글
<CSS> 레이아웃 (2) - 박스 구성 요소 (0) | 2021.11.21 |
---|---|
<자바 Java> 컬렉션 프레임워크(Collection Framework) (2) - Set (0) | 2021.11.20 |
<CSS> 레이아웃 (1) - 박스 모델 (0) | 2021.11.18 |
<CSS> 기초 개념 (0) | 2021.11.17 |
<HTML> 기본 태그들 (2) (0) | 2021.11.16 |