Java | 상속

바다·2023년 5월 16일
1

Java

목록 보기
3/18
post-thumbnail

상속

상속이란?

  • 부모 클래스가 가지는 멤버(필드, 메소드)를 자식 클래스가물려 받아 자신의 멤버인 것처럼 사용할 수 있도록 - 만든 기술 (단, 생성자는 물려 받지 않음)
  • 멤버 외에도 부모 클래스의 타입 또한 상속이 된다. (다형성의 토대)
  • 자바는 단일상속(자식 클래스는 하나의 부모 클래스만 가지는)만 지원한다.

상속의 문법

class B extends A {
}

extends 뒤에는 단 하나의 클래스만 올 수 있음
"단일 상속"만을 지원하기 때문

상속을 사용하는 이유?

  • 기존에 작성된 클래스의 멤버를 재사용할 수 있다.
  • 클래스간 계층 관계를 형성하여 다형성 문법의 토대가 된다.
  • 이미 구현된 클래스보다 더 구체적인 기능을 가진 클래스를 구현해야 할 때 기존 클래스를 상속함

상속을 필요한 순간에 잘 사용하면 유지보수에 도움이 되지만, 무분별하게 사용하면 되려 계층 구조 파악 및 정상 동작을 예측하기 힘들어 유지보수에 되려 어려움을 초래할 수 있다.

상속을 구현하는 경우

  • 상위 클래스는 하위 클래스보다 더 일반적인 개념과 기능을 가짐
  • 하위 클래스는 상위 클래스보다 더 구체적인 개념과 기능을 가짐
  • 하위 클래스가 상위 클래스의 속성과 기능을 확장(extends)한다는 의미

IS-A

"자식 클래스는 (하나의)부모 클래스이다."라는 말을 만족하는 관계를 뜻하며
클래스 간 상속 관계를 파악하기 위한 키워드이다.

  • Heesue is a girl
  • Circle is a shape

suepr와 super()

인스턴스 생성 시 부모 생성자를 호출하여 부모 클래스의 인스턴스도 함께 생성하게 되는데, 이 때 생성한 부모 인스턴스의 주소를 보관하는 레퍼런스 변수로 자식 클래스 내의 모든 생성자와 메소드 내에서 묵시적으로 사용할 수 있는 레퍼런스 변수이다.

  • 하위 클래스에서 가지는 상위 클래스에 대한 참조값
  • super()는 상위 클래스의 기본 생성자를 호출함
  • 하위 클래스에서 명시적으로 상위 클래스의 생성자를 호출하지 않으면 super()가 호출됨 (이때 반드시 상위 클래스의 기본 생성자가 존재해야 함)
  • 상위 클래스의 기본 생성자가 없는 경우 (다른 생성자가 있는 경우) 하위 클래스에서는 생성자에서는 super를 이용하여 명시적으로 상위 클래스의 생성자를 호출함
  • super는 생성된 상위 클래스 인스턴스의 참조값을 가지므로 super를 이용하여 상위 클래스의 메서드나 멤버 변수에 접근할 수 있음

Overriding

  • 부모 클래스에서 상속받은 메소드를 자식 클래스가 재정의하여 사용하기 위한 기술
  • 상위 클래스에 정의된 메소드의 구현 내용이 하위 클래스에서 구현할 내용과 맞지 않는 경우 동일한 이름의 메서드를 재정의할 수 있음

오버라이딩 성립 조건
1. 메소드명 동일
2. 메소드 리턴타입 동일
3. 매개변수의 타입, 개수, 순서가 동일
4. 부모 클래스의 private 메소드는 오버라이딩 불가능
5. 부모 클래스의 final 키워드가 사용된 메소드는 오버라이딩 불가능
6. 접근제어자는 부모 메소드와 같거나 더 넓은 범위여야 함
(부모가 protected일 때, 자식은 public이 될 수 없다)
7. 예외처리는 같은 예외이거나 더 구체적(하위)인 예외를 처리해야 함

@override 애노테이션

  • 애노테이션은 원래 주석이라는 의미
  • 컴파일러에게 특별한 정보를 제공해주는 역할
  • @override 애노테이션은 재정의 된 메소드라는 의미로 선언부가 기존의 메소드와 다른 경우 에러가 남
profile
ᴘʜɪʟɪᴘᴘɪᴀɴs 3:14

0개의 댓글