본문 바로가기

핌팩토링11

8. 기능 이동 8. 기능 이동 8.1 함수 옮기기 배경 좋은 소프트웨어 설계의 핵심은 모듈화가 얼마나 잘 되어 있느냐를 뜻하는 모듈성 이다 모듈성을 높이려면 서로 연관된 요소들을 함께 묶고, 요소 사이의 연결 관계를 쉽게 찾고 이해할 수 있도록 해야 한다. 어떤 함수가 자신이 속한 모듈 A의 요소들보다 다른 모듈 B의 요소들을 더 많이 참조한다면 모듈 B로 옮겨줘야 마땅하다 (캡슐화 측면에서, 의존성을 최대한 제거) 절차 선택한 함수가 현재 컨텍스트에서 사용 중인 모든 프로그램 요소를 살펴본다. 이 요소들 중에도 함께 옮겨야 할 게 있는지 고민해본다. 얽혀 있는 함수가 여러 개라면 다른 곳에 미치는 영향이 적은 함수부터 옮기자 선택한 함수가 다형 메서드인지 확인한다. 선택한 함수를 타깃 컨텍스트로 복사한다. 타깃 함수.. 2022. 4. 27.
7. 캡슐화 7. 캡슐화 모듈을 분리하는 가장 중요한 기준은 아마도 시스템에서 각 모듈이 자신을 제외한 다른 부분에 드러내지 않아야 할 비밀을 얼마나 잘 숨기느냐에 있다. 클래스는 내부 정보뿐 아니라 클래스 사이의 연결 관계를 숨기는 데도 유용하다. 가장 큰 캡슐화 단위는 클래스와 모듈이지만 함수도 구현을 캡슐화한다. 7.1 레코드 캡슐화하기 배경 레코드는 연관된 여러 데이터를 직관적인 방식으로 묶을 수 있어서 각각을 따로 취급할 때보다 훨씬 의미 있는 단위로 전달할 수 있게 해준다. 단점으로는 계산해서 얻을 수 있는 값과 그렇지 않은 값을 명확히 구분해 저장해야 하는 점이 번거롭다. 가변 데이터를 저장하는 용도로는 레코드보다 객체를 선호한다. 객체를 사용하면 어떻게 저장했는지를 숨긴 채 세 가지 값을 각각의 메서드.. 2022. 4. 27.
6. 기본적인 리팩터링 6. 기본적인 리팩터링 6.1 함수 추출하기 배경 코드를 독립된 함수로 묶을때의 기준은 코드의 목적과 구현을 분리하는 방식이 가장 합리적인 기준으로 보인다. 코드를 보고 무슨 일을 하는지 파악하는데 시간이 걸린다면 그 부분을 함수로 추출한 뒤 ‘무슨 일'에 걸맞는 이름을 짓는다. 이렇게 해두면 나중에 코드를 다시 읽을 때 함수의 목적이 눈에 확 들어오고, 본문 코드에 대해서는 신경 쓸 일이 현저히 줄어들기 때문이다. 짧은 함수의 이점은 이름을 잘 지어야만 발휘되므로 이름 짓기에 신경을 써야한다. 절차 함수를 새로 만들고 목적을 잘 드러내는 이름을 붙인다(어떻게 X, 무엇을 하는지 O) 함수로 뽑아서 목적이 더 잘 드러나는 이름을 붙일 수 있다면 추출한다. 추출할 코드를 원본 함수에서 복사하여 새 함수에 .. 2022. 3. 26.
4. 테스트 구축하기 4. 테스트 구축하기 리팩터링을 제대로 하려면 불가피하게 저지르는 실수를 잡아주는 견고한 테스트 스위트가 있어야한다. 4.1 자가 테스트 코드의 가치 진짜 끔찍한 건 버그를 찾는 여정이다. 모든 테스트를 완전히 자동화하고 그 결과까지 스스로 검사하게 만들자. 테스트를 자주 수행하는 습관도 버그를 찾는 강력한 도구가 된다. 테스트 스위트는 강력한 버그 검출 도구로, 버그를 찾는 데 걸리는 시간을 줄여준다. 테스트를 작성하기 가장 좋은 시점은 프로그래밍을 시작하기 전이다. 테스트를 작성하다 보면 원하는 기능을 추가하기 위해 무엇이 필요한지 고민하게 된다 구현보다 인터페이스에 집중하게 된다는 장점도 있다. 코딩이 완료되는 시점을 정확하게 판단할 수 있다.(테스트를 모두 통과한 시점) 4.3 첫 번째 테스트 실.. 2022. 3. 12.