ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 리팩터링 2판 - 12. 상속 다루기
    Books/리팩터링 2판 2022. 6. 20. 16:07

    12-1. 챕터 소개 & 포인트 정리

    상속다루기 ( Dealing with Inheritance )

    - 기능 확장 ( A의 기능을 확장한다! )

    - 상속은 왜 하는걸까? 

        → 코드의 재사용을 위해서 

    - 상속을 올바르게 사용해서 재활용성을 높이자! 

     

    - 상속의 문제점 ( 단점 )

        ㆍ딱 하나만 상속이 가능함

        ㆍ불필요한 기능이 상속됨

        ㆍ족보가 꼬일 수 있음

        ㆍ수정이 어려움

    - 상속은 상속의 의미( 확장 )가 적합한 곳에서 사용하는게 좋다.

     

    - 상속보다는 컴포지션( 위임/가지다 )을 더 선호하라!

     

    12-2. 메서드 올리기 ( 책12.1 )

    12-3. 필드 올리기 ( 책12.2 )

    - 상속을 사용할 때는 어떤 클래스들이 필요로 한지, 공통적인 부모클래스, 규격사항, 속성들이 있을까?

    - 공통적으로 필요한 필드와 메서드를 정의해두자

     

    12-4. 생성자 본문 올리기 ( 책12.3 )

    - super : 상위 클래스 접근, super키워드를 이용하여 상위 클래스의 변수나 메서드에 접근 가능

    - 공통적으로 쓰이는 속성과 설정이 있다면 항상 super클래스에서 공통적인 일을 수행하도록 만든다.
        ㆍ상속을 쓰는 큰 시너지 효과

     

    12-5. 메서드 내리기 ( 책12.4 )

    - 특정한 서브클래스에 해당하는 행동이라면 해당 서브클래스에만 정의하는 것이 더 명확하게 상속도를 이해가능

     

    12-6. 필드 내리기 ( 책12.5 )

    - 서브클래스에만 해당되면 필드를 내리고 공통적인 속성이라면 필드를 올린다.

    - extends VS interface VS abstract VS composition

    12-7. 타입 코드를 서브클래스로 바꾸기 ( 책12.6 ) 

    - 생성자에서 에러를 던지는 것은 좋지 않다.

     

    12-8. 서브클래스 제거하기 ( 책12.7 )

    - 각각의 서브클래스별로 이용할만한 다형성이나 유스케이스가 없다면 클래스 하나로 남겨두는게 더 맞을 수도 있다.

    - 각각의 서브클래스마다 가지고 있는 개별적인 특징이나 행동이 없었기에 제거

    - 불필요한 서브클래스 제거 → 외부에서 알필요없는 내부로직들을 캡슐화

                                                 → 외부에서 사용하기 쉽게 팩토리 메서드 제공, 필요한 메서드 제공

     

    12-9. 슈퍼클래스 추출하기 ( 책12.8 )

    12-10. 계층 합치기 ( 책12.9 )

    - 미래 지향적으로 서브 클래스를 만들기 보다는 처음에 간편하게 시작해서 필요할 때 파생시키는 것이 더 효율적

    12-11. 위임 포인트 정리

    -  다중 상속 허용 X

    - 상속을 썼을때 수정과 확장이 어렵다

     

    - 위임을 이용하면 동일한 클래스를 이용해서 전달된 위임자에 따라 다른 행동을 하도록 만들 수 있다.

    - 상속은 나중에 꼭 필요한 경우를 대비해서 남겨둘 수 있다.

    - composition을 이용하면 레고를 조립하듯이 필요한 기능들을 하나하나씩 묶어서 조립 가능

     

    - 상속 : 수직적인 관계를 이용해서 코드를 재사용, 확장

        ㆍ한계 : 딱 하나만 상속가능, 수정이 어렵고, 유지보수가 어려워지는 문제점

    -  위임 : 레고를 조립하는 것처럼 필요한 부품을 외부로 부터 주입받아 주입받은 부품을 활용하는 것으로 생각할 것

     

    12-12. 타입스크립트 버전

    12-13. 서브클래스를 위임으로 바꾸기 ( 책12.10 )

    - 위임( composition )을 사용할 때는 외부로부터 주입을 받기 위해서 사용

    - constructor 내부에서 위임을하지말고 외부로부터 주입받는게 좋다

     

    12-14. 슈퍼클래스를 위임으로 바꾸기 ( 책12.11 )

     

     

     

    댓글

Designed by Tistory.