ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 리팩터링 2판 - 7. 캡슐화
    Books/리팩터링 2판 2022. 6. 16. 13:55

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

    - 모듈 : 좋은 아키텍처 설계의 시작

    - 캡슐화 : 내부 구현 사항을 숨기고, 외부에서 필요한 사항들만 공개

    - 모듈, 클래스와 같은 형태로 캡슐화 해두자!

        ㆍ데이터를 변경하고, 사용하는 코드를 감시할 수 있는 유일한 통로

     

    - 함수 하나당, 한가지의 일을 수행하도록 만들어 두자

    - 모듈 / 클래스 하나당, 한가지의 책임( 하나의 도메인 ) 을 가지도록 하자

        ㆍ밀접하게 연관된 데이터와 함수들

     

    7-2. 불변성 포인트 정리

    - 불변성( Immutability ) 

        ㆍ변할 수 없는 전역변수, 레코드, 컬렉션 만들기

    - Mutable ( 변할 수 있는 ) : 오류의 상징!?

     

    7-3. 레코드 캡슐화하기 ( 책7.1 )

    - 컬렉션 : 복합적인 데이터를 가지고 있는 것

        ㆍ배열, 리스트, set

        ㆍ외부로 제공하는 인터페이스로만 접근 가능

    - 레코드 : key와 value로 이루어진 것

        ㆍObject, map, dictionary

        ㆍ모듈이나 캡슐화로 해두고 필요한 API제공

        ㆍ외부로 제공하는 인터페이스로만 접근 가능

     

    - { ...data } : 얉은 복사, 중복제거

    - cloneDeep : 완전한 새로운 객체 반환, 불변성 유지

     

    - 기존의 오브젝트를 캡슐화 함으로서 어떤 데이터가 읽기 전용인지, 어떤 데이터가 set할 수 있는지 확인가능

    - 의도가 명확해짐

     

    7-4. 컬렉션 캡슐화하기 ( 책7.2 )

      removeCourse(course, runIfAbsent){
        const index = this.#courses.indexOf(course);
        if(index===-1) {
          runIfAbsent();
          return;
        }
        this.#courses.splice(index, 1);
      }

    - runIfAbsent : 콜백함수

     

    - 내부 컬렉션을 외부에 노출하지 않는지 점검

    - 인터페이스를 통해서 클래스의 함수를 통해서 노출

     

    7-5. 기본형을 객체로 바꾸기 ( 책7.3 )

    - 생성자 안에서 에러를 던지는 것은 보안에 취약하다

     

    7-6. 임시 변수를 질의 함수로 바꾸기 ( 책7.4 )

    7-7. 클래스 추출하기 ( 책7.5 )

    - 클래스 하나당 하나의 역할, 하나의 책임, 하나의 도메인을 가지는 것이 좋다.

    - 어떤 것이 효율적이고 유지보수성이 높을까? 너무 미래지향적으로 가는 것은 좋지 않다.

    7-8. 클래스 인라인하기 ( 책7.6 )

    - 관련된 정보를 하나의 클래스로 묶어주면 좀 더 명확해지고 한 곳에서만 담당

    - 클래스를 만들때는 밀접하게 관련된 데이터를 하나로 묶어나가는게 중요 ( 응집도 )

    - 너무 많은 역할일때는 별도의 클래스로 역할 분리

     

    7-9. 위임 숨기기 ( 책7.7 )

    - 위임을 숨겨서 외부에서 내부상황을 신경 쓰지 않고 바로 필요한 정보에 접근

     

    7-10. 중개자 제거하기 ( 책7.8 )

    - 중개자, 위임 : Composition

     

    7-11. 알고리즘 교체하기 ( 책7.9 )

     

    댓글

Designed by Tistory.