CS/Refactoring
리팩토링을 읽고 알게된 것들
드디어 리팩토링 책을 다 읽었습니다!!! 일하면서 경험적으로 느꼈던 것들을 카탈로그 식으로 정리해볼 수 있어서 좋았습니다. 챕터 별로 알게된 것들은 정리해뒀지만, 책 전체를 읽고나서 느낀 점들도 정리해두면 좋을 것 같아서 글로 남겨봅니다. 리팩터링 개발자가 선택한 프로그램 가치를 높이는 최고의 코드 관리 기술마틴 파울러의 『리팩터링』이 새롭게 돌아왔다.지난 20년간 전 세계 프로그래머에게 리팩터링의 교본이었던 이 책의 1판은, 기 book.naver.com 느낀점 작은 단계로 나눠서 한 걸음씩 진행하자 계단도 한꺼번에 오르려고 하면 숨이찹니다. 코드 변경을 한꺼번에 하면 버그를 놓치기 쉽고 원래 코드로 돌아가기 어렵습니다. 솔직히 저자가 너무 잘게 코드를 나눠서 리팩토링을 진행하는걸 보고 놀랬습니다. 이..
[Refactoring] Chapter 11: API 리팩터링
안녕하세요 개발자 홍성호입니다. 오늘은 리팩토링 챕터 11 API 리팩터링을 정리해보겠습니다. 11.1 질의 함수와 변경 함수 분리하기 우리는 외부에서 관찰할 수 있는 겉보기 부수효과(observerable side effect)가 전혀 없이 값을 반환해주는 함수를 추구해야 한다. (...중략...) 겉보기 부수효과가 있는 함수와 없는 함수는 명확히 구분하는 것이 좋다. (...중략...) 이를 명령-질의 분리(command-query sepration)라 하는데 p.413 bliki: CommandQuerySeparation a bliki entry for CommandQuerySeparation martinfowler.com 명령 - 질의 분리는 꽤나 유용한 행동지침입니다. 결과 값을 가져오는 것과 ..
[Refactoring] Chapter 10: 조건부 로직 간소화
조건문이 복잡해지는 경우 다루기가 굉장히 까다로워지는데 이것을 해결하기 위한 다양한 방법들을 제안합니다. 10.3 중첩 조건문을 보호 구문으로 바꾸기 함수 중간에 guard 로 로직을 중단하는 게 의도를 더 드러낼 수 있는 경우가 있습니다. Swift에서는 명시적으로 guard라는 구문이 있어서 편리하게 사용할 수 있는데, 언어 레벨에서 구문을 지원하기 때문에 많은 개발자들이 더 활발하게 사용하게 되는 것 같습니다. 중첩 조건문을 보호 구문으로 바꾸기 리팩터링의 핵심은 의도를 부각하는데 있다. 나는 if-then-else 구조를 사용할 때 if절과 else절에 똑같은 무게를 두어, 코드를 읽는 이에게 양 갈래가 똑같이 중요하다는 뜻을 전달한다. 이와 달리, 보호 구문은 "이건 이 함수의 핵심이 아니다. ..
[Refactoring] Chapter 9: 테이터 조직화
이번에는 데이터 구조에 집중한 리팩토링을 다룹니다. 9.2 필드 이름 바꾸기 데이터 구조는 무슨 일이 벌어지는지를 이해하는 열쇠다. p.334 데이터 구조는 단순히 값을 담아두는 공간이 아니라 프로그램을 더 잘 이해할 수 있도록 유도하는 역할을 해줍니다. 데이터 구조를 잘 선택하는 것만으로도 프로그램의 이해도를 높일 수 있다고 합니다. 알고리즘 문제를 풀다 보면 큐나 스택을 적절히 고르는 것만으로 문제가 쉽게 해결되는 것을 경험한 적이 있는데 실무에서도 동일하게 적용될 수 있을 것으로 기대됩니다. 데이터 구조가 중요한 만큼 반드시 깔끔하게 관리해야 한다. 다른 요소와 마찬가지로 개발을 진행할수록 데이터를 더 잘 이해하게 된다. 따라서 그 깊어진 이해를 프로그램에 반드시 반영해야 한다. p.334 앞선 챕..
[Refactoring] Chapter 8: 기능이동
https://youtu.be/blXUsTjVs58 안녕하세요! 오늘도 리팩토링 책 읽고 정리하는 시간을 가져보겠습니다. 이번 챕터는 기능 이동에 대한 내용입니다. 지금까지는 프로그램 요소를 생성 혹은 제거하거나 이름을 변경하는 리팩터링을 다뤘다. 여기에 더해 요소를 다른 컨텍스트(클래스나 모듈 등)로 옮기는 일 역시 리팩터링의 중요한 축이다. p.277 적절한 위치에 기능이 있는 것도 가독성을 증가시키고 이해를 잘 할 수 있도록 도와준다는 내용입니다. 좋은 소프트웨어 설계의 핵심은 모듈화가 얼마나 잘 되어 있느냐를 뜻하는 모듈성(modularity)이다. 모듈성이란 프로그램의 어딘가를 수정하려 할 때 해당 기능과 깊이 관련된 작은 부분만 이해해도 가능하게 해주는 능력이다. p.278 모듈성이 중요하다는..
[Refactoring] Chapter 7: 캡슐화
모듈을 분리하는 가장 중요한 기준은 아마도 시스템에서 각 모듈이 자신을 제외한 다른 부분에 드러내지 않아야 할 비밀을 얼마나 잘 숨기느냐에 있을 것이다. p.235 클래스는 본래 정보를 숨기는 용도로 설계되었다. p.235 7.1 레코드 캡슐화하기 저장하는 용도로는 레코드보다 객체를 선호하는 편이다. p.236 객체를 사용하면 어떻게 저장했는지를 숨긴 채 세 가지 값을 각각의 메서드로 제공할 수 있다. 사용자는 무엇이 저장된 값이고 무엇이 계산된 값인지 알 필요가 없다. p.237 덩치 큰 데이터 구조를 다룰수록 쓰기 부분에 집중한다. p.243 setter 부분에서 데이터의 변화가 일어나기 때문에 가변 데이터라면 쓰기 부분에 집중해야 한다. 데이터 구조의 읽기 전용 프락시를 반환하는 방법도 있다. 클라..
[Refactoring] Chapter 6: 기본적인 리팩터링
드디어 리팩토링 기법들이 소개됩니다. 기본적인 리팩토링 챕터는 생각보다 길어서 다 읽는데 시간이 꽤 들었습니다. 글이 아니라 영상으로 마틴 파울러의 리팩토링 과정을 볼 수 있었다면 보다 흥미롭게 배울 수 있었을 것 같습니다. (반대로 생각해보면 내가 이 과정을 영상으로 재구성해보는 것도 재밌겠다...) 이번에는 요약보다 궁금증, 기억할 부분 위주로 기록해보겠습니다. 6.1 함수 추출하기 함수 추출하기는 내가 가장 만힝 사용하는 리팩터링 중 하나다 (여기서 '함수function'라고 표현했는데 객체 지향 언어의 메서드method나 절차형 언어의 프로시저procedure/서브루틴subroutine에도 똑같이 적용된다.) p.159 솔직히 function/method 개념 정의를 못하겠습니다... 그래서 개념..
[Refactoring] Chapter 3, 4 과제
과제가 지겨운 감이 있는데... 다음주 부터는 실습을 통한 과제가 나온다고 하니 일단 참고 해보겠습니다ㅜ 1. 함수의 이름을 짓는 방법과 관련하여 책에 서술된 조언을 쓰시오 (500자 이상) 함수의 이름만 보고도 무슨 일을 하고 어떻게 사용해야 하는지 명확히 알 수 있도록 엄청나게 신경써서 이름을 지어야 한다고 저자는 말합니다. 이름은 코드를 명료하게 표현하는데 가장 중요한 요소 입니다. 이름을 짓는데 마땅한 것이 떠오르지 않는다면 설계에 더 근본적인 문제가 있을 수 있다고 합니다. 그래서 혼란스러운 이름을 잘 정리하면 코드가 훨씬 간결해질 때가 많습니다. 단순히 이름을 짓는 행위 뿐 아니라 설계를 다시 돌아볼 필요가 있습니다. 기이한 이름을 만나면 함수 선언 바꾸기, 변수 이름 바꾸기, 필드 이름 바꾸..