-
리팩터링 2판 - 6. 기본적인 리팩터링Books/리팩터링 2판 2022. 6. 15. 15:23
6-1. 챕터 소개
Low-level
- 변수 : 어떤 데이터가 ?
- 함수 : 어떤 일을?
High-level
- 모듈 : 어떤 책임을?
6-2. 함수 포인트 정리
- 코드를 작성하는 건, 사람, 개발자 - 사람이 이해하기 쉽도록 작성!
- 함수
ㆍ특정한 일을 수행하는 코드의 집합
ㆍ프로그램을 이루는 가장 기본적인 단위
ㆍ프로그램을 작은 단위로 나누는 주된 수단
ㆍ재사용 가능 / 유지보수성 / 의미있는이름을 부여함으로써 높은 가독성
ㆍ주석을 달지 않아도, 함수 이름만으로 코드의 목적이 파악 가능
6-3. 함수 추출하기 ( 책 6.1 )
- 지역변수는 사용한 곳과 최대한 가까이 정의하는 것이 좋다.
- 함수에서 리턴값의 변수는 result 라는 이름을 쓸 것
- 긴 코드가 있다면 의미있는 단위로 나누어서 함수로 만들고 의미있는 이름을 부여하고 가독성, 재사용성, 유지보수성을 높여보자!
6-4. 함수 인라인하기 ( 책 6.2 )
- 이미 함수이름 그대로 코드가 작성되어 있다면 굳이 함수로 만들 필요없다. 재사용하지 않는다면..
- 너무 작게 나누면 다시 inline 해준다.
6-5. 변수의 포인트 정리
- 변수 ( Variable ) : 값을 저장하는 공간, 자료를저장할 수 있는 이름이 주어진 기억장소
ㆍ저장된 값을 잘 나타낼 수 있는 (구체적으로) 의미있는 이름
ㆍ변수가 있으면 디버깅이 편해짐
6-6. 변수 추출하기( 책6.3 )
- 주석을 삭제할 방법이 있다면 삭제하는게 좋다.
- 변수명을 짧게해도 이해가 되고 문맥상 맞으면 변수명은 짧게
6-8. 이름짓기 포인트 정리
- 요즘에는 카멜케이스를 많이 사용하고 있다.
- 변수는 명사, 함수는 동사
- 클래스안에서 getter를 가지고 있거나 속성에 관련된 함수는 get을 생략가능
( getTotalPrice → totalPrice )
- 함수 인자는 어떤 데이터가 필요한지 잘 나타낼 수 있어야 한다.
6-9. 변수 이름 바꾸기 ( 책 6.7 )
- 너무 축약 X, 차라리 구체적으로 적는게 좋다.
6-10. 함수 선언 바꾸기 ( 책 6.5 )
- VScode F2 ( rename symbol ) : 모든 해당 함수의 이름을 바꿔준다.
- Flag : boolean으로 동작을 다르게 하는 함수, 추가적인 불리언 타입
→ 좋지 않음
- 함수안에서 정말 필요한 데이터만 받아올 것!
6-11. 함수의 매개변수 포인트 정리
- 매개변수의 갯수는 최대 3개를 넘지 않는게 좋다.
- 매개변수가 많다면 연관있는 데이터 구조 하나로 묶어주는게 좋다. - 자료구조나 클래스 등
6-12. 매개변수 객체 만들기( 책 6.8 )
- 함수에 여러가지 데이터를 전달한다면 하나의 객체로 묶을 수 있는 것을 생각
- 더나아가 그 객체안에 더 유용한 함수를 만들 수 있는지 생각
6-13. 캡슐화 포인트 정리
- 캡슐화 ( Encapsulation ) : 내부 구현 사항을 숨기고, 외부에서 필요한 사항들만 공개
- 아무나 손쉽게 잘못된 값으로 변수 변경을 막음
→ 모듈, 클래스와 같은 형태로 캡슐화 해두자!
→ 데이터를 변경하고, 사용하는 코드를 감시할 수 있는 유일한 통로
6-14. 변수 캡슐화하기 ( 책 6.6 )
- 객체를 담고 있는 변수는 객체를 가르키고 있는 메모리 주소를 담고 있다. 즉 참조값, 레퍼런스를 담고 있다.
ㆍ객체 변경가능
해결방안
1. 객체 복사
export function getDefaultOwner() { return { ...defaultOwner }; //or Object.assign }
- 일반적인 스프레드 연산자를 사용하면 얉은 복사가 이루어짐
- 중첩된 오브젝트가 있다면 그대로 참조값으로 씀 → 객체의 불변성
2. 클래스
- 한번 설정 시 get만 제공 시 읽기만 가능
6-15. 여러 함수를 클래스로 묶기 ( 책 6.9 )
- 클래스 데이터와 밀접하게 관련된 계산은 클래스안으로 넣기
6-16. 여러 함수를 변환 함수로 묶기 ( 책 6.10 )
- 클래스로 묶는 방법을 더 선호
- 클래스로 묶는 방법은 get하는 시점에 함수 실행 반환
- 변환함수는 변환함수를 호출하는 시점의 데이터를 가지고 함수 실행 반환,
ㆍ나중에 데이터가 업데이트 되어도 변경 X
ㆍ내가 원하는 시점의 데이터가 있다면 enrich를 호출해야함
6-17. 함수 쪼개기 포인트 정리
- 긴 함수
ㆍ함수의 목적을 이해하기 어려움 → 유지보수성 X
ㆍ이해를 위한 주석이 필요 → 가독성 X
ㆍ재사용 불가 → 재사용 X
ㆍ긴 함수는 작은 단위의 함수로 목적에 맞게 나누자!
- 단계별로 쪼개기
ㆍ단계별로 나누니 가독성도 좋아지고 재사용성도 높아짐
ㆍ불필요한 주석도 제거할 수 있고 코드가 깔끔
ㆍ주석을 달지 않아도, 함수 이름만으로 코드의 목적 파악
ㆍ함수 내부 구현 사항에 대해서는 매번 신경 X
'Books > 리팩터링 2판' 카테고리의 다른 글
리팩터링 2판 - 9. 데이터 조직화 (0) 2022.06.17 리팩터링 2판 - 8. 기능이동 (0) 2022.06.17 리팩터링 2판 - 7. 캡슐화 (0) 2022.06.16 리팩터링 2판 - 3. 코드에서 나는 악취 (0) 2022.06.15 리팩터링 2판 - 2. 리팩토링 원칙 (0) 2022.06.15