본문 바로가기

리팩터링

[리팩터링 2판 - 실전편] 11장 API 리팩터링 마틴파울러 리팩터링 2판 정주행 스터디 - 실전편 모듈과 함수는 소프트웨어를 구성하는 빌딩 블록이며, API는 이 블록들을 끼워 맞추는 연결부다. 이런 API를 이해하기 쉽고 사용하기 쉽게 만드는 일은 중요한 동시에 어렵기도 하다. 그래서 API를 개선하는 방법을 새로 깨달을 때마다 그에 맞게 리팩터링해야 한다. 11.01 질의함수와 변경함수 분리하기 Separate Query from Modifier 우리는 사이드이펙트가 전혀 없이 값을 반환해주는 함수를 추구해야 한다. 사이드이펙트가 있는 함수와 없는 함수는 명확히 구분하는 것이 좋다. '질의함수(읽기함수)는 모두 사이드이펙트가 없어야 한다.'라는 규칙을 따르자. 이를 명령-질의 분리(command-query separation)이라고 한다. http.. 더보기
[리팩터링 2판 - 실전편] 10장 조건부 로직 간소화 마틴파울러 리팩터링 2판 정주행 스터디 - 실전편 10.1 조건문 분해하기 Decompose Conditional 복잡한 조건부 로직은 프로그램을 복잡하게 만드는 가장 흔한 원흉에 속한다. 긴 함수는 그 자체로 읽기가 어렵지만, 조건문은 그 어려움을 한층 가중시킨다. 조건을 검사하고 그 결과에 따른 동작을 표현한 코드는 무슨 일이 일어나는지는 이야기해주지만 '왜'일어나는지는 제대로 말해주지 않을 때가 많은 것이 문제다. 거대한 코드 블록이 주어지면 코드를 부위별로 분해한 다음 해체된 코드 덩어리들을 각 덩어리의 의도를 살린 이름의 함수 호출로 바꿔주자. 그러면 전체적인 의도가 더 확실히 드러난다. 10.2 조건식 통합하기 Consolidate Conditional Expression 비교하는 조건은 다르.. 더보기
[리팩터링 2판 - 실전편] 09장 데이터 조직화 마틴파울러 리팩터링 2판 정주행 스터디 - 실전편 9.1 변수 쪼개기 Split Variable 변수에 대입이 두 번 이상 이뤄진다면 여러 가지 역할을 수행한다는 신호다. 역할이 둘 이상인 변수가 있다면 쪼개야 한다. 예외는 없다. 역할 하나당 변수 하나다. 여러 용도로 쓰인 변수는 코드를 읽는 이에게 커다란 혼란을 주기 때문이다. 9.2 필드 이름 바꾸기 Rename Field 데이터 구조가 중요한 만큼 반드시 깔끔하게 관리해야 한다. 개발을 진행할수록 데이터를 더 잘 이해하게 된다. 따라서 그 깊어진 이해를 프로그램에 반드시 반영해야 한다. 한 함수 안에서만 쓰였다면 캡슐화할 필요없이 그저 원하는 속성들의 이름을 바꿔주는 것으로 끝이다. 9.3 파생 변수를 질의 함수로 바꾸기 Replace Deriv.. 더보기
[리팩터링 2판 - 실전편] 08장 기능이동 마틴파울러 리팩터링 2판 정주행 스터디 - 실전편 8.1 함수 옮기기 Move Function 좋은 소프트웨어 설계의 핵심은 모듈화가 얼마나 잘 되어있느냐를 뜻하는 modularity이다. 모듈성이란 프로그램의 어딘가를 수정하려 할 때 해당 기능과 깊이 관련된 작은 일부만 이해해도 가능하게 해주는 능력이다. 모듈성을 높이려면 서로 연관도니 요소들을 함께 묶고, 요소 사이의 연결 관계를 쉽게 찾고 이해할 수 있도록 해야한다. 이해도가 높아질수록 소프트웨어 요소들을 더 잘 묶는 새로운 방법을 깨우치게 된다. 그래서 높아진 이해를 반영하려면 요소들을 이리저리 옮겨야 할 수 있다. 어떤 함수가 자신이 속한 모듈 A의 요소들보다 다른 모듈 B의 요소를 더 많이 참조한다면 모듈 B로 옮겨줘야 마땅하다. 이렇게하면 .. 더보기
[리팩터링 2판 - 실전편] 06장 기본적인 리팩터링 마틴파울러 리팩터링 2판 정주행 스터디 - 실전편 6.1 함수 추출하기 Extract Function 추출은 결국 이름짓기이며, 코드 이해도가 높아지다보면 이름을 바꿔야할 때가 많다. 코드를 보고 무슨 일을 하는지 파악하는 데 한참이 걸린다면 그 부분을 함수로 추출한 뒤 '무슨 일'에 걸맞는 이름을 짓는다. 이렇게 해두면 나중에 코드를 다시 읽을 때 함수의 목적이 눈에 확 들어오고, 본문 코드에 대해서는 더 이상 신경 쓸 일이 거의 없다. 내 경험상 함수 안에 들어가 ㄹ코드가 대여섯 줄을 넘어갈 때부터 슬슬 냄새를 풍기기 시작했고, 단 한 줄짜리 함수를 만드는 일도 적지 않았다. 함수가 짧으면 캐싱하기가 더 쉽기 때문에 컴파일러가 최적화하는데 유리할 때가 많다. highlight() 메서드가 있었는데 구.. 더보기
[리팩터링 2판 - 기초편] 01장 ~ 04장 몰아보기 마틴파울러 리팩터링 2판 정주행 스터디 - 기초편 서론 처음부터 완벽한 설계를 갖추기보다는 개발을 진행하면서 지속적으로 설계한다. 시스템을 구축하는 과정에서 더 나은 설계가 무엇인지 배우게 된다. 1장은 설계가 조금 아쉬운 작은 프로그램을 리팩터링해서 더 나은 객체지향 프로그램으로 만드는 과정을 보여준다. 2장은 리팩터링의 일반 원칙, 정의, 당위성을 설명한다. 3장은 코드에서 나는 악취를 찾아내는 방법과 리팩터링을 통해 문제의 부분을 말끔히 제거하는 방법을 설명한다. 4장에는 테스트를 작성하는 방법을 수록했다. 특수한 예시 몇 개를 제외하고는 이 책에 등장하는 '클래스', '모듈', '함수' 등의 용어는 (자바스크립트 언어 모델이 아닌) 일반적인 프로그래밍 언어에서의 의미로 사용했다. + 마틴 파울러와.. 더보기