-
리팩터링 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 )
'Books > 리팩터링 2판' 카테고리의 다른 글
리팩터링 2판 - 9. 데이터 조직화 (0) 2022.06.17 리팩터링 2판 - 8. 기능이동 (0) 2022.06.17 리팩터링 2판 - 6. 기본적인 리팩터링 (0) 2022.06.15 리팩터링 2판 - 3. 코드에서 나는 악취 (0) 2022.06.15 리팩터링 2판 - 2. 리팩토링 원칙 (0) 2022.06.15