본문 바로가기
도서

파이브 라인스 오브 코드

by HwanChang 2023. 7. 26.

이번에 파이브 라인스 오브 코드 라는 책을 읽었다.

나온지는 몇 달 지났지만 요즘들어 여기저기서 많이 읽기도 하고 스터디도 한다는 걸 들어서 괜찮은 책인가 싶어서 읽기 시작했다.

책은 1부와 2부로 구성되어있다.

1부에서는 실제 코드에서 사용할 수 있는 다양한 규칙들에 대한 설명과 예시를 통해서 사용법을 보여주고, 2부에서는 보다 좀 더 이론적인 내용과 몇몇 코드 예시들이 주로 나온다. (예시는 TypeScript 로 작성되어있다 🤮)

읽으면서 1부는 예시로 만들어져있는 게임 코드 기반으로 객체지향적인 코드 작성 방법을 설명해주다보니 꽤나 재밌게 읽었는데 2부에서는 아무래도 살짝 지루했었다.

내용이 별로다 라기보다는 1부에서는 규칙을 알려주고 그 규칙을 적용하면 이런 코드들이 어떻게 정리가 되는지를 직접 보여주다보니 읽으면서 자연스럽게 업무 코드도 떠올리게 해줘서 더 신나서 읽었다.

아래는 읽으면서 기억에 남았던 규칙들을 정리한 내용이다.

무조건 읽어야 한다 는 아니지만 객체지향을 적용한다는게 어떤 방향을 말하는건지 이해가 어려운 개발자, 객체지향이 뭔지는 이론으로는 이해하나 실제로 코드에 어떻게 적용하라는건지 몰라서 답답한 개발자 들은 이 책을 통해 다양한 관점을 접할 수 있어서 기회가 된다면 읽어보는 걸 추천한다.


이 책은 기본적으로 리팩터링 관점에서 다양한 규칙을 설명해준다.

리팩터링을 이야기 할 때 자주 나오는 코드 스멜을 잘 맡기 위해 몇몇 규칙들로 훈련한다고 생각하면서 읽으면 좋을 것 같다.

긴 코드 조각내기


 

  1. 다섯 줄 제한
  2. 호출 또는 전달, 한 가지만 할 것
  3. if 문은 함수의 시작에만 배치

첫 장에서 위 3가지 규칙들이 나온다. (리팩터링 패턴이나 다른 내용들도 함께 나온다)

처음 나오는 규칙은 이 책의 제목과도 같은 내용인데 어떠한 메서드도 5줄 이상을 가질 수 없다 라는 규칙이다.

별도의 규칙으로 나와있지만 뒤에 나오는 모든 규칙들은 결국 이 5줄 제한 규칙을 지키기 위해서 여러가지 방법들을 적용한다고 느꼈다.

한 줄 이라고 하는 것은 공백라인과 { } 들을 제외한 if, for, while 또는 ; 으로 끝나는 모든 라인을 말하는데, 이 규칙을 적용하여 하나의 메서드에서 한 가지 역할만을 하도록 하기 위한 여러가지 리팩터링 방법들을 알려준다.

마틴 파울러의 리팩터링을 통해서도 많이들 알고있는 메서드 추출을 사용한 방법이 먼저 소개된다.

한 메서드에서 추상화 레벨을 맞추는 규칙과 if 문의 위치를 함수의 시작에만 적용하는 규칙 등 여러 규칙을 적용하여 예시코드를 깔끔하게 수정하는 방법들을 배울 수 있다.

타입 코드 처리하기


이 장에서는 분기문을 깔끔하게 처리하는 방법을 소개한다.

보는 내내 떠올랐던 건 객체지향 생활체조 에서의 else 키워드를 쓰지 않는다 라는 규칙이였다.

else if 혹은 switch 등을 사용해서 특정 타입에 대한 분기처리들을 많이들 하는데 어떻게 하면 이렇게 분기처리를 하지않고 코드를 작성할 수 있는지 좋은 아이디어들을 볼 수 있었다.

책을 읽으면서 가장 현실적인 도움을 받았던 장이라서 기억에 많이 남는다.

유사한 코드 융합하기


이 장에서는 다양한 리팩터링 패턴을 보여준다.

전체적인 내용은 전략패턴에 대해 잘 알고 있다면 이해하기도 쉽고 실제로 업무에서도 많이 사용하는 내용들이 나와서 업무에 이런 내용도 적용해볼까 하는 생각도 많이 들었다.

데이터 보호


 여기선 객체지향 하면 항상 이야기 하는 캡슐화가 주된 내용이다.

getter, setter 를 쓰지 않는다 라는 규칙을 적용하여 어떻게 객체 내부의 데이터를 외부로부터 안전하게 지킬 수 있는지를 보여준다.

또, 자주 보던 getter, setter 이야기와 더불어 공통 접사를 사용하지 말 것 이라는 규칙이 있다.

공통 접사가 붙는다는건 같이 묶일 수 있는 내용이니 한 단계 더 클래스화 하여 더 깔끔하게 정리하는 내용인데, 생각해보면 당연하게 적용 해왔던 규칙이지만 하나의 클래스로 묶은 후에 getter, setter 까지 없애기 위해 외부 메서드들을 내부로 이전하는 부분에서는 아차싶었다.

그동안 객체지향을 최대한 적용해보려고 했지만 한 단계씩 부족했던 부분을 여기서 한 번 더 배웠다.

마무리


이 책의 가장 좋았던 점은 규칙을 적용하세요 하고 변경 전/후 를 비교하는게 아니라 변경해나가는 과정을 구분해서 단계별로 변경되는 모습을 보여준다는 것이다.

저자가 어떤 생각의 흐름으로 리팩터링에 접근해야 하는지를 이 단계들을 통해서 잘 알려주는 것 같아 이해가 쉬웠다.

또, 그동안 객체지향 생활체조를 통해 이런저런 규칙들을 잘 적용해왔다고 생각했는데 새로운 관점과 조금씩 부족했던 부분을 많이 알게된 점도 좋았다.

한 가지 아쉬운 점이 있다면 TypeScript 로 작성된 예시라는거..

다른 언어는 다 아무렇지 않은데 왜 JS 계열은 이렇게 정이 안가는지 모르겠다.

어쨌든 책을 읽고 느낀 점!

세상에 완벽하게 좋은 코드는 없다. 그렇지만 나쁜 코드도 없다. 나아지고 있는 코드만 있을 뿐.

댓글