Java - 상속 2

Dev_eun·2024년 1월 11일

Java

목록 보기
16/16

동작 측면에서 클래스 설계하기

  • 상속 구조를 왜 사용해야 되는지 생각해 보자 (동작 측면에서)

  • 설계자와 사용자가 다를 때 : (소스코드는 숨기고 중간에 인터페이스를 사용해서 코드를 사용할 수 있게) 상속을 사용해 설계를 해서 배포해야 한다.
    (소스코드가 없고 실행코드(.class 파일)만 있으면 코드를 사용하기가 너무 어렵기 때문)

  • 사람 - 리모콘 - TV 처럼 -> TV의 구조를 몰라도 리모콘으로 TV를 구동시킬 수 있다. (리모콘 : 부모, TV : 자식)
    -> 자식의 동작 방식을 몰라도 부모를 이용해 자식을 구동할 수 있다.


상속 관계에서 객체 생성 방법

  • 상속에서는 부모 클래스를 어떻게 잘 활용하느냐가 중요하다. -> 하나를 통해 여러 자식을 컨트롤 할 수 있기 때문

  • Upcasting(업캐스팅) : 부모가 자식을 가리키는 객체생성 방법

// Upcasting
Animal x = new Dog();
x.eat();
Animal y = new Cat();
y.eat();
// 이대로라면 원하는 결과를 얻을 수는 없다.

상속 체이닝과 super

  • 상속 체이닝

    • 나보다 부모가 먼저야
    • 맨 위 부모 클래스부터 객체가 생성되어 자식까지 연결되는 구조
  • super()

    • 상위 클래스의 생성자를 호출하는메서드
    • 생성자 메서드에서 첫 문장에 사용해야 한다. (first statement)
    • 상위 클래스의 기본생성자를 호출하는 super()는 생략되어 있다.
  • 재정의(override) : 동적 바인딩 - 런타임 (실행할 때), (컴파일 시점에서는 모른다.)

메서드의 재정의(Override)란

  • 메서드의 재정의(Override)가 필요한 이유? 원하는 결과를 얻을 수 있다.

  • Override (재정의)

    • 상속 관계에서 하위 클래스가 상위 클래스의 동작을 재정의하는 행위 (기능 추가, 변경)
  • 동적 바인딩

    • 실행 시점에서 사용될 메서드가 결정되는 바인딩
  • 메서드가 재정의되면 부모의 메서드는 그림자로 취급된다. (무시됨)


객체 형 변환(Object Casting)

부모와 자식 간에 형 변환이 된다.

  • 부모는 여러 명의 자식을 가리킬 수 있다.
  • 부모를 알면 자식들을 관리하기 쉽다.
  • Upcasting(업캐스팅, 자동형변환)

    • 자식 -> 부모
  • Downcasting(다운캐스팅, 강제형변환)

    • 부모 -> 자식
    • Upcasting이 되어야 Downcasting이 된다.

Upcasting과 Downcasting

  • Animal은 Dog, Cat에게 동일한 메시지를 보낸다. (메서드를 호출한다.)
    -> 반응이 다르다 (다형성)

  • 먹어라. -> Dog은 개처럼 먹고 Cat은 고양이처럼 먹는다.

  • Downcasting(다운캐스팅)

    • 상위 클래스의 타입을 하위 클래스의 타입으로 바꾸는 행위
profile
차근차근

0개의 댓글