객체지향 프로그래밍(25강 - 32강)

상속

  • 새로운 클래스를 정의할 때 이미 구현된 클래스를 상속(inheritance) 받아서 속성이나 기능이 확장되는 클래스 구현

    class A {
        ...
    }
      
    class B extends A {
        ...
    }
    
  • 상위 클래스는 하위 클래스보다 일반적인 개념과 기능을 가짐
  • 하위 클래스는 보다 구체적인 개념과 기능을 가짐
  • 자바는 single inheritance만 지원하여 extends 뒤에는 하나의 class만 사용 가능

protected 예약어

  • 외부 클래스에는 private으로, 하위 클래스에는 public의 기능을 구현한 키워드
  • 상위 클래스에 protected로 선언된 변수나 메서드는 다른 외부 클래스에서는 사용할 수 없으나, 하위 클래스에서는 사용 가능

접근 제한자의 가시성

접근 제한자 외부 클래스 하위 클래스 동일 패키지 내부 클래스
public O O O O
protected X O O O
선언되지 않음
(default)
X X O O
private X X X O

상속에서의 메모리 상태

  • 상위 클래스의 인스턴스가 먼저 생성
  • 그 후, 하위 클래스의 인스턴스가 생성

상위 클래스로의 묵시적 형 변환(upcasting)

  • 상위 클래스 형으로 변수를 선언하고 하위 클래스 인스턴스를 생성할 수 있음
  • 하위 클래스는 상위 클래스의 타입을 내포하고 있으므로 상위 클래스로 묵시적 형 변환 가능
  • 상속 관계에서 모든 하위 클래스는 상위 클래스로 묵시적 형 변환이 되지만 그 역은 성립하지 않음

Method overriding

오버라이딩(Overriding)

  • 상위 클래스에 정의된 메서드의 구현 내용이 하위 클래스에서 구현할 내용과 맞지 않는 경우 하위 클래스에서 동일한 이름의 메서드를 재정의 할 수 있음

가상 메서드(Virtual method)

  • 메서드의 이름과 메서드 주소를 가진 가상 메서드 테이블에서 호출될 메서드의 주소 참조

다형성(Polymorphism)

  • 하나의 코드가 여러 자료형으로 구현되어 실행되는 것
  • 같은 코드에서 여러 실행 결과가 나옴
  • 정보 은닉, 상속과 더불어 객체 지향 프로그래밍의 특징 중 하나
  • 객체 지향 프로그래밍의 유연성, 재활용성, 유지보수성에 기본이 되는 특징
  • 장점
    • 다양한 여러 클래스를 하나의 자료형(상위 클래스)으로 선언하거나 형 변환하여 각 클래스가 동일한 메서드를 오버라이딩한 경우, 하나의 코드가 다양한 구현을 실행할 수 있음
    • 유사한 클래스가 추가되는 경우 유지보수에 용이
    • 각 자료형마다 다른 메서드를 호출하지 않으므로 코드에서 많은 if문이 사라짐

상속은 언제 사용하는가

IS-A 관계(is a relationship: inheritance)
  • 일반적인 개념과 구체적인 개념과의 관계
  • 단순히 코드를 재사용하는 목적으로 사용하지 않음
HAS-A 관계(composition)
  • 한 클래스가 다른 클래스를 소유한 관계
  • 코드 재사용의 한 방법

다운캐스팅(Downcasting)

  • 묵시적으로 상위 클래스 형 변환 된 인스턴스가 원래 자료형(하위 클래스)으로 변환되어야 할 때
  • 하위 클래스로의 형 변환은 명시적으로 되어야 함