[JAVA] 상속과 다형성 / quiz

개발log·2024년 1월 13일

JAVA

목록 보기
5/8
post-thumbnail

클래스의 계층화

  • 코드의 중복을 최소화
  • 새로운 요구사항 발생 시 반영이 쉽다.
  • 확장성이 좋아진다.

상속

하위클래스가 상위클래스를 재활용 가능하다.
하위클래스가 상위클래스를 접근하여 사용 가능하다.

※ super() : 상위클래스의 생성자를 호출

  • 생성자 메서드에서 가장 첫 문장에 위치해야 한다.(부모클래스가 먼저 로딩되어야 하기 때문)

🔍 quiz

  • 클래스를 수직적 구조로 계층화 하여 설계하는 방법
    → 상속
  • 자바의 상속에서 사용하는 키워드를 쓰세요.
    → extends
  • 상속 관계에 있는 클래스에서 객체생성 할 때 상위클래스의 생성자를 호출하는 메서드
    → super();
  • 상속관계에서 하위클래스가 상위클래스를 접근하기 위한 접근제한자
    → protected
  • 클래스를 수직적 구조로(상속) 설계하면 장점이 무엇인지 쓰시오.
    → 유지보수의 용이성, 코드 중복 최소화, 확장성이 좋다.

다형성

상위클래스가 동일한 메세지로 하위클래스를 서로 다르게 동작 시키는 객체지향 이론

다형성의 전제조건

  • 상속관계
  • Override(재정의)
  • Upcasting(업캐스팅)
  • 동적 바인딩

Override(재정의)

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

동적바인딩

실행시점에서 사용될 메서드가 결정되는 바이딩

Animal ani = new Dog();
ani.eat(); // 실행시점에서 사용될(호출될)메서드가 결정되는 바인딩(동적바인딩)

ani = new Cat();
ani.eat(); // 업캐스팅

((Cat)ani).night(); // 다운캐스팅

🔖 Override(재정의)와 Overloading(오버로딩)

Override(재정의) : 부모 클래스에서 이미 정의된 메서드를 자식 클래스에서 재정의 하는 것, 실행시점 에서 사용될(호출될)메서드가 결정되는 바인딩(동적바인딩)
Overloading(오버로딩) : 같은 이름의 메서드나 생성자를 여러 개 정의하는 것, 컴파일 시점 에서 사용될 메서드가 결정되는 바인딩(정적바인딩)

🔍 quiz

  • 상속관계에 있는 클래스를 객체 생성할 때 하위클래스에서 상위클래스의 갤체를 생성할 때 사용하는 메서드
    → super()
  • 부모클래스의 타입으로 하위클래스의 객체를 생성하는 방법
    → 업캐스팅(Upcasting)
  • 상속관계에서 객체가 생성될 때 맨 위 부모클래스 부터 객체가 생성되어 자식까지 연결되는 구조
    → 상속 체이닝
  • 실행시점에서 사용될 메서드가 결정되는 바인딩을 무엇이라고 하는가?
    → 동적바인딩
  • 상속관계에서 하위클래스가 상위클래스의 동작을 변경하거나 추가하는 것을 무엇이라고 하는가?
    → 재정의(Override)

다형성 활용

다형성 인수

하나의 타입으로 여러가지 타입을 받을 수 있다.(부모이기 때문)

public static void display(Animal ani) {
    ani.eat(); // 결과: 먹다.
    if (ani instanceof Cat) { // Cat이 ani의 인스턴스인지를 확인
        ((Cat)ani).night();
    }
}

다형성 배열

하나의 배열에 서로 다른 타입을 저장 가능하다. (부모타입의 배열 자식타입 저장 가능)

Animal[] ani = {new Dog(), new Cat()};
Animal[] ani = new Animal[2];

🔍 quiz

  • 업매스팅으로 객체를 생성한 후 상위클래스의 타입을 하위클래스의 타입으로 바꾸는 형변환
    → 다운캐스팅(Downcasting)
  • 상위클래스가 동일한 메세지로 하위클래스를 서로 다르게 동작시키는 객체지향 이론
    → 다형성
  • 다형성의 전제조건 4가지
    → 상속, 재정의, 업캐스팅, 동적바인딩
  • 특정 타입이 어떤 타입으로부터 생성이 되었는지 타입을 알아보는 연산자
    → instanceof
  • 상속관계에서 하위클래스들을 배열에 저장하기 위해서는 어떤 배열을 생성하면 가능한가?
    → 다형성배열, 상위타입배열
profile
나의 개발 저장소

0개의 댓글