Chapter06 기본적인 리팩터링 함수 추출하기 함수 추출하기는 코드 조각을 찾아 무슨 일을 하는지 파악한 다음 독립된 함수로 추출하고 목적에 맞는 이름을 붙이는 리팩터링이다. 독립된 함수로 묶는 기준은 여러가지가 있을 수 있는데 '목적과 구현을 분리'하는 방식이 가장 합리적인 기준이 될 수 있다. 코드를 보고 무슨 일을 하는지 파악하는 데 한참이 걸린다면 그 부분을 함수로 추출한 뒤 '무슨 일'에 걸맞는 이름을 붙이자. 이렇게 해두면 나중에 코드를 다시 읽을 때 함수의 목적을 더 쉽게 알 수 있고, 본문 코드에 대해서 신경쓰지 않아도 된다. 절차 함수를 새로 만들고 목적을 잘 드러내는 이름을 붙인다.('어떻게'가 아닌 '무엇을' 하는지가 드러나도록) 대상 코드가 매우 간단하더라도 함수로 뽑아서 목적이..
리팩터링
Chapter05 리팩터링 카탈로그 보는 법 리팩터링 설명 형식 이름 이름은 리팩터링 용어를 구축하는 데 중요하다. 책 전반에서 해당 리팩터링을 이 이름으로 지칭한다. 같은 기법을 다르게 부르는 경우도 있기 때문에 그중 흔한 이름도 함께 소개한다. 개요 리팩터링의 핵심 개념을 간략히 표현(개념도 + 코드 예시) 절차 리팩터링하는 과정을 단계별로 제시 예시 해당 리팩터링 기법을 실제로 적용하는 간단한 예와 그 효과를 보여줌 리팩터링을 안전하게 수행하려면 단계를 최대한 잘게 나누고 각 단계마다 테스트해야 한다. 상황이 난해할수록 단계를 잘게 나누자.
Chapter04 테스트 구축하기 리팩터링을 제대로 하려면 불가피하게 저지르는 실수를 잡아주는 견고한 테스트 스위트가 필요하다. 리팩터링을 하지 않더라도 좋은 테스트를 작성하는 일은 개발 효율을 높여준다. 자가 테스트 코드의 가치 모든 테스트를 완전히 자동화하고 그 결과까지 스스로 검사하게 만들자. 자가 테스트를 만들면 테스트가 컴파일만큼 쉬워진다. 컴파일할 때마다 테스트를 함께 실행하면 디버깅 시간을 크게 줄여줘서 생산성이 상승한다. 자가 테스트 코드 자체뿐 아니라 테스트를 자주 수행하는 습관도 버그를 찾는 강력한 도구가 된다. 테스트 스위트는 강력한 버그 검출 도구로, 버그를 찾는데 걸리는 시간을 대폭 줄여준다. 테스트를 작성하기 가장 좋은 시점은 프로그래밍을 시작하기 전이다. 기능을 추가해야 할 때..
Chapter3 코드에서 나는 악취 기이한 이름 코드는 단순하고 명료하게 작성해야 한다. 코드를 명료하게 표현하는데 가장 중요한 요소 하나는 바로 '이름'이다. 함수, 모듈, 변수, 클래스 등은 그 이름만 보고도 각각이 무슨 일을 하고 어떻게 사용해야 하는지 명확히 알 수 있도록 엄청나게 신경 써서 이름을 지어야 한다. 함수 선언 바꾸기 변수 이름 바꾸기 필드 이름 바꾸기 세가지 작업을 통해 기이한 이름을 명료한 이름으로 바꾸어보자. 이름만 잘 지어도 나중에 문맥을 파악하느라 헤매는 시간을 크게 절약할 수 있다. 마땅한 이름이 떠오르지 않는다면 설계에 더 근본적인 문제가 숨어 있을 가능성이 높다. 그래서 혼란스러운 이름을 잘 정리하다 보면 코드가 훨씬 간결해질 때가 많다. 중복 코드 똑같은 코드 구조가 ..
Chapter 2 리팩터링 원칙 리팩터링: [명사] 소프트웨어의 겉보기 동작은 그대로 유지한 채, 코드를 이해하고 수정하기 쉽도록 내부 구조를 변경하는 기법 리팩터링: [동사] 소프트웨어의 겉보기 동작은 그대로 유지한 채, 여러가지 리팩터링 기법을 적용해서 소프트웨어를 재구성하다. 특정한 방식에 따라 코드를 정리하는 것만이 리팩터링이다. 리팩터링은 결국 동작을 보존하는 작은 단계들을 거쳐 코드를 수정하고, 이러한 단계들을순차적으로 연결하여 큰 변화를 만들어내는 일이다. 개별 리팩터링은 아주 작을 수도 있고, 작은 단계 여러 개가 합쳐진 모습일 수도 있다. 따라서 리팩터링하는 동안에는 코드가 항상 정상 작동하기 때문에 전체 작업이 끝나지 않았더라도 언제든 멈출 수 있다. 누군가 "리팩터링하다가 코드가 깨져..
Chapter 1 리팩터링: 첫 번째 예시 프로그램이 새로운 기능을 추가하기에 편한 구조가 아니라면, 먼저 기능을 추가하기 쉬운 형태로 리팩터링하고 나서 원하는 기능을 추가한다. 리팩터링이 필요한 이유는 변경 때문이다. 잘 작동하고 나중에 변경할 일이 절대 없다면 코드를 현재 상태로 나둬도 아무런 문제가 없다. 하지만 다른 사람이 읽고 이해해야 할 일이 생겼는데 로직을 파악하기 어렵다면 뭔가 대책을 마련해야 한다. 리팩터링의 첫 단계 리팩터링의 첫 단계는 테스트 코드를 작성하는 것이다. 우리 예제의 statement() 함수의 테스트 코드는 공연 종류에 따라 다른 문자열을 반환하므로 다양한 장르의 공연들로 구성된 공연료 청구서 몇 개를 문자열 형태로 준비해두고, statement() 함수가 반환한 문자열..
24장 리팩터링 목차 24.1 소프트웨어 진화의 종류 24.2 리팩터링 소개 24.3 구체적인 리팩터링 24.4 안전한 리팩터링 24.5 리팩터링 전략 이번 장은 프로그래밍의 꽃(?)이라 할 수 있는 리팩터링에 대해 다룬다. 그동안 나는 기존 코드를 변경하고, 이를 리팩터링 했다고 생각해왔는데 해킹을 해왔었다는 것을 오늘 알았다... 24.1 소프트웨어 진화의 종류 코드 변경을 통해 소프트웨어는 진화할 수도 있고, 퇴보할 수도 있다. 어떻게 코드를 변경하는지가 소프트웨어의 품질을 크게 좌우한다. 코드를 작성할 때, 이후에 이를 쉽게 변경할 수 있도록 작성해야 한다. 일단 지금 동작하는 코드를 작성한 것이 아닌지 의심을 하는 습관을 갖고, 추후에 이 기능을 수정해야 할 때 이 부분만 수정하면 되는지에 대해..