본문 바로가기

독서에서 한걸음52

긴 매개변수 목록 이전 시간 긴 함수를 리팩터링 하면서 매개변수를 추출하는 방법을 배웠다. 매개변수 객체를 만들거나, 임시 변수를 질의 함수로 변경하고 내부적으로 사용하여 매개변수를 줄이거나, 객체를 통째로 넘겨 매개변수를 줄이는 과정이다. 각 과정에 대해 리팩토링을 하다 보면 동일 매개변수들이 여러 메서드에서 사용된다면 동일 관심사로 판단하여 별도의 클래스로 분리하여 사용할 수도 있고, 매개변수 대신 필드로 리팩터링 하여 줄일 수도 있었다. 이렇게 긴 매개변수를 보았을 때 매개변수를 제거하거하는 방법 외에 고민해보아야 할 것이 있다. 매개변수를 질의 함수로 변경하기 ( Replace Parameter with Query) 기존 긴 함수를 리팩토링할 때 우리는 임시 변수를 질의 함수로 변경하여 함수의 매개변수의 개수를 줄.. 2022. 12. 4.
긴 함수 (2) 긴 함수 (1) 긴 함수 (1) 함수의 길이에 관한 이야기로 함수의 코드의 길이는 어느 정도가 좋은가에 대해 다루는 것이 아니다. 대신 나는 코드를 보는 관점에서 의도를 아는 것보다 구현을 이해하려고 애쓰는 자신을 발 chinggin.tistory.com 함수에 대해 리팩터링 하는 방법에 대해 (1)에서 소개와 몇 가지 방법을 소개하는데 추가적인 방법에 대해 적어보자. 커맨드 패턴은 함수를 독립적인 객체로 만드는 패턴이다. 이를 통해 undo 기능도 추가적으로 만들 수 도 있었다. 함수를 명령으로 바꾸기 ( Replace Function with Command ) 이 방법도 커맨드 패턴과 비슷하게 독립적인 객체로 만드는 방법이다. 커맨드 역할을 하는 함수를 독립적인 객체로 만들면 클래스 필드를 활용하거나.. 2022. 12. 2.
긴 함수 (1) 함수의 길이에 관한 이야기로 함수의 코드의 길이는 어느 정도가 좋은가에 대해 다루는 것이 아니다. 대신 나는 코드를 보는 관점에서 의도를 아는 것보다 구현을 이해하려고 애쓰는 자신을 발견하게 되면 이는 긴 함수로 판단하여 의도를 표현할 수 있는 이름을 갖는 짧은 함수들로 구성하는 것이 맞다고 생각한다. 과거의 언어가 아닌 이상 짧은 함수들로 이루어져 있어 많은 문맥 전환에 대해 콜 스택까지 신경 써야 하는 경우가 아니라면 짧은 함수들로 분리하는 것도 나쁘지 않을 것이라고 생각한다. 이러한 리팩토링에는 거창한 기술은 필요 없다. 단지 함수를 추출하면 될 뿐이다. 이 과정에서 만약 매개변수가 많아진다면 선택할 수 있는 리팩터링 기술은 존재한다. 1. 임시 변수를 질의 함수로 변경하기 2. 매개변수 객체 만들.. 2022. 12. 2.
Refactoring_2 중복 코드 현재 나에게는 중복 코드가 발생하는 일이 많다. 많은 경험이 쌓이지 않아서라고 위안을 삼고 중복 코드를 분리하고 재활용하는 방안으로 여러 디자인 패턴도 공부하고 적용해본다. 그렇지만 설계하는 방향에서는 항상 중복 코드가 보이긴 했다. 책에선 다음과 같이 한 클래스에 딸린 두 메서드가 같은 표현식을 사용한다면 함수를 추출하여 양쪽 모두 추출된 메서드를 호출하게 바꾸라 한다. 나도 이를 보고 재활용 가능하게 함수를 추출하여 리팩터링을 진행한 적이 있다. 이 과정에서 미묘한 차이에 대해 처리하는 부분이 가장 힘들었다. 미묘한 차이에 대한 처리에 대한 팁은 다음과 같은데 비슷한 부분을 한 곳에 모아 함수를 쉽게 추출할 수 있는지 살펴보자. 또한 서브 클래스에 코드가 중복된다면 상위 클래스로 옮겨 중복을 제거할 .. 2022. 11. 27.
Refactoring_2 이해하기 힘든 이름 최근 사내 프로젝트를 진행하면서 리팩터링 할 때마다 변수의 이름을 변경했다. 여러 자료를 보고 이게 최선의 이름이라고 작명한 이후 다음 날 다시 보면 또 뭔가 아닌 것 같아서 변경하고.. 변수명, 클래스명, 인터페이스명을 짓는 것은 상당히 고된 일 중 하나이다. 이번에는 한 챕터를 공부하고 예제 + 실무에 적용하는 과정을 반복하여 습관을 만들려고 한다. 하루에 한 챕터에 대해 예제와 이론을 책과 강의로 읽어보고 그 지식 그대로 다음날 실무에 가서 적용할 수 있는 부분을 찾아 적용하려고 한다. 함수 선언 변경 책에서도 말하지만 중점은 함수 이름을 잘 지어두면 본문 코드를 볼 이유가 사라진다. 코드를 내포할 수 있는 이름을 지으려면 어떻게 해야 할까? 단순히 생각하면 전제조건이 있다. 함수가 단 하나의 일을.. 2022. 11. 27.
Clean Code .Part14 (1) 보호되어 있는 글 입니다. 2022. 8. 15.
Refactoring .Chapter 02 리팩터링 전반에 적용되는 원칙 몇 가지를 알아보자. 소프트웨어 개발 용어에 대해 이야기할 때 개발자마다 약간의 차이점이 존재한다. 이와 마찬가지로 리팩터링이라는 용어도 다소 두리뭉실한 의미로 통용된다. 하지만 저자는 좀 더 엄격하게 정의해야 유용하다고 생각한다. 저자는 리팩터링의 명사적 의미와 동사적 의미를 세분화한다. 명사적으로 소프트웨어의 겉보기 동작은 유지한 채, 코드를 이해하고 수정하기 쉽게 내부 구조를 변경하는 기법이라고 한다. 저자가 생각하는 좋은 코드는 수정하기 쉬워야 한다라는 저자의 생각이 잘 드러나는 정의라 볼 수 있다. 동사적으로는 겉은 유지한 채, 여러 가지 리팩터링 기법을 적용해 소프트웨어를 재구성한다 예시를 들은 문장은 다음과 같다. " 앞으로 몇 시간은 리팩터링 할 것 같은데 그.. 2022. 8. 15.
Refactoring .Chapter 01 클린 코드를 읽으면서 리팩터링에 대한 배경지식을 알고 읽으면 더 좋은 시너지를 낼 것 같아 동시에 읽기 시작하였다. 이 책은 리팩터링 원리와 좋은 리팩터링 습관을 설명하며, 언제 어떤 상황에 코드를 분석해서 개선해야 하는지 알려준다. 지식을 얻으러 출발해보자. 1장은 리팩터링 예제를 보며 책의 전반적인 내용을 훑어보는 느낌이 강했다. 리팩터링은 겉으로 드러나는 코드의 기능은 바꾸지 않으면서 내부 구조를 개선하는 방식으로 소프트웨어 시스템을 수정하는 과정이다. 프로그램이 잘 작동하는 상황에서 그저 코드가 지저분하다는 이유로 불평하는 것은 잘못된 것인가? 잘 돌아가면 되는 것아닌가? 설계가 나쁜 시스템을 수정하기 어려운 이유는 명확하다. 원하는 동작을 수행하도록 하기 위해 수정해야 할 부분을 찾고, 기존 코.. 2022. 8. 6.
Clean Code .Part13 . Part12에서도 해당 글을 여러 번 보면서 힘들게 한 장 한 장을 넘겼다. 그런데 Part12는 동시성에 대해 노하우를 전수해준다고 한다. 내가 아는 세상은 매우 좁지만 좁은 현실에서 조심스레 동시성에 대해 말해보자면, 매우 방대한 양의 지식을 필요로 한다. 어떤 강사님은 동시성을 처리하는 일은 많이 없어서.. 프로그래밍 기본서에는 동시성 이야기 자체가 단순 메서드와 설명만으로 끝난다. 이 책의 제목은 클린 코드이다. 깨끗한 코드를 작성하기 위해서 동시성을 어떻게 처리해야 할지 고민한 흔적을 살펴보자. 여러 스레드를 동시에 돌리는 이유, 여러 스레드를 동시에 돌리는 어려움, 대처하고 깨끗한 코드를 작성하는 몇 가지 방법의 제안과 동시성 테스트를 하는 방법과 문제점 이번 글에서 다루게 될 이 야이다... 2022. 8. 5.
Clean Code .Part12 이번 주제는 창발성으로 시작한다. 창발성은 단순한 법칙과 반복적인 행위만으로 랜덤 현상에서 벗어나 규칙을 만들어낸다는 현상이다. 창발적 설계를 통해 클린 코드에 다가갈 수 있다고 한다. 켄트 백이 제시한 단순한 설계 규칙 4가지가 소프트웨어 설계 품질을 크게 높여줄 수 있다고 한다. 모든 테스트를 실행한다. 중복을 없앤다. 프로그래머 의도를 표현한다. 클래스와 메서드 수를 최소로 줄인다. 모든 테스트를 실행하는 규칙에 대해 알아보자. 테스트가 가능한 시스템을 만들려고 애쓰면 설계 품질이 더불어 놓아진다. 테스트를 하기 위해서 결합도를 낮추기 위해 SRP를 준수하는 클래스를 만들기 시작하고 DIP 같은 원칙을 적용하고, DI, 인터페이스, 추상화 등과 같은 도구를 사용한다. 따라서 슬슬 설계 품질은 더욱 .. 2022. 8. 4.