상속

1. 정의: 부모클래스의 프로퍼티와 메서드를 물려 받는것.

2. 장/단점

  • 장점: 올바른 일반화 관계(is-a)에서 사용될 시 확장의 목적에서 확장과 유지보수에서 매우 유리함.
  • 단점
    • 부모가 가진 불필요한 기능도 모두 물려받음.
    • 캡슐화 원칙을 위반할 확률이 높음.
      • 자식 클래스가 부모 클래스의 구현체를 사용할 경우 강하게 결합함.
    • 부모 클래스의 기능의 변경/확장이나 버그가 발생할시 상속받는 모든 하위 클래스에 대해서 디버깅해야함.
    • 올바르게 상속하는 것이 어려움.

3. 대안점

  • composition: 코드의 재사용을 원하지만 상속이 부적합할 경우

4. 자바의 상속

  • 단일 상속만 가능
  • In Java, all non-static methods are by default "virtual functions." Only methods marked with the keyword final, which cannot be overridden, along with private methods, which are not inherited, are non-virtual.
  • 모든 non-private non-static 메서드가 디폴트로 가상함수이고 final 키워드를 붙이면 가상함수가 아니게 됨.

리스코프 치환 원칙

  • 상위 타입의 객체를 하위 타입의 객체로 치환해도 동작에 문제가 없어야함.
  • 상위 타입의 명세를 하위타입에서 그대로 지켜야함.
  • 직사각형, 정사각형 문제

가상함수(virtual)

  • dynamic binding:runtime에 어떤 메서드를 호출할지 결정하는것
  • 오버라이딩을 할 메서드는 가상함수여야함.
  • vtable

오버라이딩, 오버 로딩

  • 오버라이딩은 runtime에 vtable 통해 메서드 결정
  • 오버로딩은 함수이름과 매개변수 형태로 컴파일러가 메서드 결정

Abstract class vs Interface

  • 근본 적인 차이

    • class 인지 아닌지
      • class는 구현이 있을 수 있음.
      • class는 프로퍼티의 모든 접근지정자와 keyword가 사용 가능함.
      • class는 단일 상속만 가능.
  • 언제 사용할지

    • 객체의 행위만을 정의 할때에는 interface를 사용 ex)마지막 문제는 인터페이스가 더 적합함.

    • 추상클래스는 IS - A "~이다".

    • 인터페이스는 HAS - A "~을 할 수 있는"

    • 구현을 주고 싶을때는 추상클래스 사용

    • 기본적으로 추상화 관계에서 인터페이스 사용을 고려하고 구현이 필요하면서 명확한 IS-A관계일 경우 abstract class상속을 고려한다.

      Oracle 웹 사이트 는 클래스 interface와 abstract클래스의 주요 차이점을 제공합니다 .

      인터페이스 : 여러 관련되지 않은 객체로 계약을 구현합니다. “ HAS A “기능을 제공합니다.

      추상 클래스 : 여러 관련 개체간에 동일하거나 다른 동작을 구현합니다. “ IS A “관계를 설정합니다.

      다음과 같은 경우 추상 클래스 사용을 고려하십시오 .

      밀접하게 관련된 여러 클래스간에 코드를 공유하려고합니다.
      추상 클래스를 확장하는 클래스에는 많은 공통 메소드 또는 필드가 있거나 public 이외의 액세스 수정 자 (예 : 보호 및 개인)가 필요합니다.
      비 정적 또는 최종이 아닌 필드를 선언하려고합니다.
      다음과 같은 경우 인터페이스 사용을 고려하십시오 .

      관련없는 클래스가 인터페이스를 구현할 것으로 기대합니다. 예를 들어, 많은 관련이없는 객체가 Serializable인터페이스 를 구현할 수 있습니다.
      특정 데이터 유형의 동작을 지정하려고하지만 누가 해당 동작을 구현하는지는 신경 쓰지 않습니다.
      여러 유형의 상속을 활용하려고합니다.

strategy pattern

  • 각각의 알고리즘을 교환이 가능하도록 정의, 캡슐화 한다음 서로 교환해서 사용

  • OCP, DIP 만족시킬 수 있다.
profile
Fail Fast

0개의 댓글