본문 바로가기

book

좋은 코드, 나쁜 코드(Good code, Bad Code)

 

개발자의 숙명이죠.

일정, 기존의 개발된 래거시코드, 조직문화 등등 여러 이해관계자가 함께 개발하는 Code에 대해서

개발자, 엔지니어의 입장에서는 언제나 좋은코드, 성능이 나오는 코드, 오류 없는 코드, 가독성 좋은 코드를 작성하고 싶습니다.

이책은 무엇을 어떻게 설명을 하고 있을지 궁금했습니다.

 

책의 저자분은 구글에서 근무하시고, 구글에서도 단순 엔지니어의 역활도 있지만,

회사 차원에서 코드에 대한 가이드를 제공하는 분이라고 합니다!!

빅테크의 대표주자인 구글에서는 어떻게 좋은 SW를 만들기 위해서 노력하는지,

책을 통해서 우리도 동일한 가이드를 받을 수 있다고 생각하니 업무에서도 도움이 많이 되는 책이라고 생각이 들었습니다.

 

 

책을 읽기 전에 궁금했던 사항

  • 개발자의 숙명인 네이밍룰에 대해서 언급이 있을까?
    L 5장에서 언급
  • 구글에서는 다양한 언어가 사용되는데, 책의 예제는 어떠한 언어를 이용해서 예시가 있을까?
    L java코드가 많고, javascript등 필요시 다른 언어를 사용합니다.
  • 테스트코드에 대한 가이드가 있을까?
    L 3부(10장, 11장)으로 별도 구성되어 있습니다.
  • 실무에서 바로 적용가능한 내용일까? 너무 추상적인 이론적인 내용일까?
    L 개인적인 편차가 어느정도 있을것 같다는 생각이 들었습니다.
    L 내용을 이해하고, 받아들이는 정도의 차이가 분명 있을 것 같았습니다.

 

 

책의 목차 & 살펴보기

목차가 장표별로 요점이 정리되어 있어서 첨부합니다.

책에서 어떠한 내용이 언급되어 있는지 파악하기 쉬울것입니다.

 

책의 내용은 처음에 가볍게 생각했는데, 초급자나 가볍게 접근하면 매우 무겁게 느껴질 것 같은 느낌이 들었습니다.

단순히 코드 레벨로 접근해서 책의 내용이 구성되어 있지 않습니다.

장표별로 설명되어 지는 내용은, 항목 마다 스터디에서 같이 이야기를 나눌 정도로 많은 생각을 해야 내것이 될것 같은

난이도가 느껴졌습니다. (좋은 코드는 쉽게 만들어 지는것이 아닌것 같습니다)

 

SW공학책에 나오는 내용이 정리된 현대적인 실무 관점으로 정리된 느낌입니다.

왜 코드가 중요하고, 개념을 정립할수 있습니다.

조금 원론적인 기본 다지기 입니다.

 


추상화를 통해서 프로그램 구조를 상위레벨로 구성하려고 노력합니다.

언어별로 추상화를 제공하는 클래스를 제공하기도 합니다.

결국 간결화를 위한 방법중에 하나입니다.

 

2.1절에서 우리를 가장 괴롭히는 null에 대한 설명이 나옵니다.

java의 경우 컴파일시에 오류가 발생하지 않고, Runtime에 시에 오류가 검출되어서 null안정성을 잘 확보해야 한다.

요즘 kotlin의 경우 이러한 안정성을 컴파일시 확보하며, 다양한 언어에서 비슷한 방법으로 안정성을 제공한다.

 

우리가 많이 작성하는 REST-API를 통해서 상위레벨로 추상화 관점에 대한 이야기가 있다.

기능적으로 단순히 request / response개념으로만 생각했었는데, 코드적으로 예시를 통해서 

조금 다른 관점을 학습할 수 있습니다.

 


오류에 대해서 컴파일시 제공하는 오류도 있고, 사용자가 정의하여서 발생시키는 오류도 있습니다. 프로그램 코드적으로 발생하는 오류의 정의 및 타입에 대해서

샘플코드를 통해서 다양하게 제공합니다.

특히 요즘 비동기 처리를 많이 하면서 프로미스를 많이 사용하는데, 비동기 프로그램에 대한 오류처리에 대한 부분이 있는 사항이 좋았습니다. 비동기 수행 후, Callback호출시 등등 오류케이스에 대한 시점등에 대한 내용이 있습니다.

 


처음 책에서 원했던 내용이 이런 코드적인 기법이 아닐까 싶습니다.

언급되는 Agent는 아래와 같습니다.

해당 Agent에 대해서 문제점 및 방법을 코드적으로 설명합니다.

 

 

· 서술형 명칭 사용

· 주석문의 적절한 사용

· 코드 줄 수를 고정하지 말라

· 일관딘 코딩 스타일을 고수하라

· 깊이 중첩된 코드를 피하라

· 함수 호출도 가독성이 있어야 한다.

· 설명되지 않는 값을 사용하지 말라

· 익명함수를 적절하게 사용하라

· 프로그래밍 언어의 새로운 기능을 적절하게 사용하라

 

당연한 이야기처럼 세부목차가 느껴질수 있지만, 실제 명문화 하고 코드적으로 가이드를 하기에는 쉽지 않습니다.

설명하고 있는 내용도 한번 보고 바로 실무에 적용하기 어려운 부분도 있고 학습과 익숙해지는것이 필요한 내용으로 구성되어 있습니다.

 


 

이부분이 좋은 코드 습관을 가질려고 하는 분들이게 5장보다 조금 더 평소 느껴보지 못한 내용으로 구성된것은 아닐까 생각해 봅니다.

5장도 동일했지만, 이러한 패턴으로 내용구성을 합니다.

목표를 제시하고, 문제되는 경우를 언급하며, 해결책으로 마무리 합니다.

보통 제목으로 언급된 소제목이 목표입니다.

 

한번 아래 언급된 목표를 보시고, 흥미가 느껴지는 부분이 있는지 살펴보시면 좋을거 같습니다.

제목만 보고 어떠한 내용에 대한 부분인지 파악이 쉽지 않을수도 있습니다.

(Java, C++, JS등 저저분이 추가로 부연설명을 제공하기도 하고, 설명하기 좋은 언어를 선택해서 예제를 구성합니다)

 

· 매직값을 반환하지 말아야 한다 

· 널 객체 패턴을 적절히 사용하라

· 예상치 못한 부수 효과를 피하라

· 입력 매개변수를 수정하는 것에 주의하라

· 오해를 일으키는 함수는 작성하지 말라

· 미래에 대비한 열거형 처리

· 이 모든것을 테스트로 해결할 수는 없는가?

 


 

스프링을 많이 사용하면서 의존성이라는 용어가 많이 익숙해졌습니다.

의존성, 인터페이스,클래스 상속에 대한 근거 및 대안, 해결책에 대한 내용으로

구성되어 있습니다.

 

 


바로 실무에 제일 적용하기 쉬운 내용이 아닐까 생각합니다.

목차를 다 적지는 않지만, (함수의 매개변수, 제네릭을 사용하라 등등)

제네릭을 잘 사용하면 조금 더 추상화된 객체지향 구조를 가질 수 있습니다.

 

 


테스트 코드는 현재 많이 보편화 되어 있고, 언어(java, python, c#등등)을 가리지 않고 다양한 오픈소스와 방법이 제공되고 있습니다.

테스트코드를 통해서 실제 사용되는 코드를 작성하는 방법론도 활성화 되어 있습니다.

그런 중요한 테스트 코드에 대해서 어떻게 하면 더 좋은 테스트코드가 구성되는지 설명합니다.

단위테스트 코드 작성 및 테스트 코드를 바라봐야 하는 시점을 통해서 

실제 구현해야 의미있는 커비리지에 도달할지에 대해서 설명합니다.

 

<예시 샘플>

 

'book' 카테고리의 다른 글

혼공파 6주를 마지며  (0) 2022.08.22
SRE를 위한 시스템 설계와 구축  (0) 2022.08.21
이펙티브 엔지니어  (0) 2022.08.03
핸즈온 데이터 시각화  (0) 2022.07.24
Do it! 쉽게 배우는 파이썬 데이터 분석  (0) 2022.06.19