본문 바로가기

전체 글156

10. 조건문 로직 간소화 10.1 조건문 분해하기 배경 복잡한 조건부 로직은 프로그램을 복잡하게 만드는 원흉이다. 조건을 검사하고 그 결과에 따른 동작을 표현한 코드는 모슨 일이 일어나는지는 이야기해주지만 ‘왜'일어나는지는 제대로 말해주지 않을 때가 많은 것이 문제다. 거대한 코드 블록이 주어지면 코드를 부위별로 분해한 다음 해체된 코드 덩어리들을 각 덩어리의 의도를 살린 이름의 함수 호출로 바꿔준다. 절차 조건식과 그 조건식에 딸린 조건절 각각을 함수로 추출한다. 예시 if (!aDate.isBefore(plan.summerStart) && !aDate.isAfter(plan.summerEnd)) { charge = quantity * plan.summerRate; } else { charge = quantity * plan... 2022. 4. 28.
9. 데이터 조직화 9. 데이터 조직화 9.1 변수 쪼개기 배경 역할이 둘 이상인 변수가 있다면 쪼개야 한다. 여러 용도로 쓰인 변수는 코드를 읽는 이에게 커다란 혼란을 주기 때문이다. 절차, 예시 let temp = 2 * (height + width); console.log(temp) temp = height * width; console.log(temp) 변수를 선언한 곳과 값을 처음 대입하는 곳에서 변수 이름을 바꾼다. let **perimeter** = 2 * (height + width); console.log(temp) temp = height * width; console.log(temp) 가능하면 이때 불변으로 선언한다. **const** perimeter = 2 * (height + width); cons.. 2022. 4. 28.
8. 기능 이동 8. 기능 이동 8.1 함수 옮기기 배경 좋은 소프트웨어 설계의 핵심은 모듈화가 얼마나 잘 되어 있느냐를 뜻하는 모듈성 이다 모듈성을 높이려면 서로 연관된 요소들을 함께 묶고, 요소 사이의 연결 관계를 쉽게 찾고 이해할 수 있도록 해야 한다. 어떤 함수가 자신이 속한 모듈 A의 요소들보다 다른 모듈 B의 요소들을 더 많이 참조한다면 모듈 B로 옮겨줘야 마땅하다 (캡슐화 측면에서, 의존성을 최대한 제거) 절차 선택한 함수가 현재 컨텍스트에서 사용 중인 모든 프로그램 요소를 살펴본다. 이 요소들 중에도 함께 옮겨야 할 게 있는지 고민해본다. 얽혀 있는 함수가 여러 개라면 다른 곳에 미치는 영향이 적은 함수부터 옮기자 선택한 함수가 다형 메서드인지 확인한다. 선택한 함수를 타깃 컨텍스트로 복사한다. 타깃 함수.. 2022. 4. 27.
7. 캡슐화 7. 캡슐화 모듈을 분리하는 가장 중요한 기준은 아마도 시스템에서 각 모듈이 자신을 제외한 다른 부분에 드러내지 않아야 할 비밀을 얼마나 잘 숨기느냐에 있다. 클래스는 내부 정보뿐 아니라 클래스 사이의 연결 관계를 숨기는 데도 유용하다. 가장 큰 캡슐화 단위는 클래스와 모듈이지만 함수도 구현을 캡슐화한다. 7.1 레코드 캡슐화하기 배경 레코드는 연관된 여러 데이터를 직관적인 방식으로 묶을 수 있어서 각각을 따로 취급할 때보다 훨씬 의미 있는 단위로 전달할 수 있게 해준다. 단점으로는 계산해서 얻을 수 있는 값과 그렇지 않은 값을 명확히 구분해 저장해야 하는 점이 번거롭다. 가변 데이터를 저장하는 용도로는 레코드보다 객체를 선호한다. 객체를 사용하면 어떻게 저장했는지를 숨긴 채 세 가지 값을 각각의 메서드.. 2022. 4. 27.