Part 9. 상속

Hyunsu·2023년 2월 21일
0

국비 교육

목록 보기
14/36
post-thumbnail

📝 목차

  1. 상속
  2. 단일 상속과 다중 상속
  3. super ( ) 와 super
  4. 오버라이딩 (Overriding)
  5. 오버로딩 (Overloading)
  6. final 예약어
  7. 대상에 따른 제어자와 예약어

1. 상속

부모 클래스가 가지고 있는 필드나 메서드를 자식 클래스가 물려 받아 자신의 것처럼
사용하는 것이다.

목적

클래스의 재사용 및 연관된 일련의 클래스들에 대한 공통적인 규약 정의

장점

  • 보다 적은 양의 코드로 새로운 클래스 작성 가능
  • 코드를 공통적으로 관리하기 때문에 코드의 추가 및 변경 용이
  • 코드의 중복을 제거하여 프로그램의 생산성과 유지보수에 크게 기여

표현식

public class Academy extends Company { }

특징

  • 모든 클래스는 Object 클래스의 후손이다. 따라서 Object 가 제공하는 메소드를 오버라이딩하여 메소드 재구현이 가능하다.

  • 부모 클래스의 생성자와 초기화 블록은 상속이 안 된다. 자식 클래스 생성자 안에서 부모 클래스 생성자 호출을 명시하려면 super ( ) 을 활용한다.

  • 부모의 private 멤버는 상속은 되지만 직접 접근이 불가하다. setter 및 getter 를 이용해 접근하거나 전달받은 부모 필드 값을 super ( ) 을 통해 부모 생성자 쪽으로 넘겨 생성한다.


2. 단일 상속과 다중 상속

  • 단일 상속
    클래스간의 관계가 다중 상속보다 명확하고 신뢰성 있는 코드 작성
    자바에서는 다중 상속을 미지원하고 단일상속만 지원한다.

  • 다중 상속
    C++ 에서 가능한 기능으로 여러 클래스로부터 상속을 받으며 복합적인 기능을 가진 클래스를 쉽게 작성 가능하다. 서로 다른 클래스로부터 상속 받은 멤버 간의 이름이 같은 경우 문제가 발생한다.


3. super ( ) 와 super

super ()

부모 객체의 생성자를 호출하는 메소드로 기본적으로 후손 생성자에 부모 생성자가 포함된다. 후손 객체 생성 시 부모부터 생성 되므로 후손 클래스 생성자 안에는 부모 생성자를 호출하는 super ( ) 가 첫 줄에 존재하며 명시적 작성 시에도 반드시 첫 줄에만 작성한다.

// 매개변수가 있는 부모 생성자 호출
super (매개변수, 매개변수)

super

상속을 통한 자식 클래스 정의 시 해당 자식 클래스의 부모 객체를 가리키는 참조변수이다. 자식 클래스 내에서 부모 클래스 객체에 접근하여 필드나 메소드 호출 시 사용한다.


4. 오버라이딩 (Overriding)

🎈 아주 중요한 개념으로 기술 면접 단골 질문

자식 클래스가 상속 받은 부모 메소드를 재작성 하는 것으로 부모가 제공하는 기능을 후손이 일부 고쳐 사용하겠다는 의미이다. 자식 객체를 통한 실행 시 후손 것이 우선권을 가진다.

특징

메소드 헤드라인 위에 컴퓨터를 위한 주석인 Annotation 중 @Override 를 표시하여
검사를 진행할 수 있고 접근 제어자를 부모 것보다 같거나 넓은 범위로 변경 가능하다.
부모 메소드의 예외처리 클래스 처리범위보다 좁은 범위로 예외처리 클래스 수정이 가능하다.

성립 조건

부모 클래스의 메소드와 자식 클래스의 메소드 비교

  • 메소드 이름 동일
  • 매개변수의 개수 및 타입 및 순서 동일
  • 리턴 타입 동일
  • private 메소드 오버라이딩 불가
  • 접근 제어자는 부모와 같거나 넓은 범위로 변경 가능
  • 에외처리는 부모와 같거나 좁은 범위로 예외처리 변경 가능
    부모 : 어린이는 제외
    자식 : 11세 이하는 제외

5. 오버로딩 (Overloading)

한 클래스 내에서 같은 이름의 메소드를 여러 개 정의하는 것이다.

성립 조건

  • 메소드 이름 동일
  • 매개변수의 개수 및 타입 및 순서 다름

주의 사항

메소드의 리턴타입은 오버로딩 조건과 관계 없음

오버라이딩오버로딩
하위 클래스에서 메소드 정의같은 클래스에서 메소드 정의
메소드 이름 동일
매개변수 개수 및 타입 및 순서 동일
리턴 타입 동일
메소드 이름 동일
매개변수 개수 및 타입 및 순서 다름
리턴 타입 상관 없음
자식 메소드의 접근 범위가
부모 메소드의 접근 범위보다 넓거나 같아야함
접근 제어자와 상관 없음
자식 메소드의 예외 수가
부모 메소드의 예외 수보다 적거나
범위가 좁아야함
예외처리와 상관 없음

6. final 예약어

  • final 클래스 : 상속이 불가능한 클래스
public final class finalClass { }
  • final 메소드 : 상속 시 오버라이딩이 불가능한 메소드
public final void method() { }

7. 대상에 따른 제어자와 예약어

대상사용 가능한 제어자와 예약어
클래스public
(default)
final
abstract
메소드모든 접근 제어자
final
abstract
static
변수모든 접근 제어자
final
static
지역변수final

유의 사항은 클래스에 abstract 과 final 을 동시에 사용이 불가능하다. 또 메소드에 static 과 abstract 을 동시에 사용이 불가능하며 abstract 메소드의 접근제어자로 private 사용이 불가능하다.
  • 클래스 abstract 과 final : abstract 는 무조건 상속을 받아야하는데 final 은 상속이 불가능
  • 메소드 static 과 abstract : static 은 어디서든 사용 가능하다는 예약어지만 abstract 는 아직 미완성이라는 뜻
  • abstract 메소드의 접근제어자로 private 불가능 : abstract 은 미완성이라는 뜻이므로 재정의가 필요한데 private 이면 재정의 불가능
profile
현수의 개발 저장소

0개의 댓글