개발관련 책

clean code 2장 요약

MIN우 2023. 9. 24. 14:55
728x90

sw마에스트로에서 여러 사람들이 많이 주문한 책이고 개발자는 거의 필수코스라고봐도 무방할 정도로 사람들이

많이 읽는다. 좀 오래 걸리긴 했지만 읽은 것을 바탕으로 내용을 정리해보려고한다.

 

2장 의미있는 이름

 

의도를 분명히밝혀라

 

"의도가 분명하게 이름을 지으라" 이 부분은 정말 공감되는 부분이다 좋은이름으로 함수명 클래스명을

지으려면 시간이 걸리지만 좋은이름으로 절약하는 시간이 더 많아질 것이다.

 

변수나 함수 그리고 클래스 이름은 존재 이유, 수행 기능과 사용 방법과 같은 굶직한 질문에 모두 답해야 한다.

 

 

의미 있게 구분하라

 

- 읽는 사람이 차이를 알도록 이름을 지어라

- 컴파일러를 통과할지라도 연속된 숫자를 덧붙이거나 불용어를 추가하는 방식은 적절하지 못하다.

이름이 달라야한다면 의미도 달라져야한다.

- 동일한 범위 안에서는 다른 두 개념에 같은 이름을 사용하지 못한다.

 

검색하기 쉬운 이름을 사용하라

 

- 긴 이름이 짧은 이름보다 좋다

- 검색하기 쉬운 이름이 상수보다 좋다

- 변수나 상수를 코드 여러 곳에서 사용한다면 검색하기 쉬운 이름이 바람직하다.

 

인코딩을 피하라

 

이름에 인코딩할 정보는 아주 많다. 유형이나 범위 정보까지 인코딩에 넣으면 그만큼 이름을 해독하기 어려워진다.

인코딩한 이름은 거의 발음하기 어려우며 오타가 생기기도 한다.

 

인터페이스 클래스와 구현 클래스

 

인터페이스 클래스 이름과 구현클래스 이름 중 하나를 인코딩해야 한다면 구현 클래스 이름을 택하겠다.

ShapeFactoryImpl처럼 ?

 

자신의 기억력을 자랑하지 마라

문자 하나만 사용하는 변수이름은 문제가 있다. 루프에서 반복 횟수를 세는 변수 i,j.k는 괜찮다. (l는 절대 안됨)

단, 루프 범위가 아주 작고 다른 이름과 충돌하지 않을 때만 괜찮다.

 

다름사람들이 봤을때도 알아볼 수 있는 , 이해할 수 있는 코드를 내놓아라.

 

클래스 이름

 

클래스 이름과 객체 이름은 명사나 명사구가 적합하다 동사는 사용하지 않는다.

  • Customer
  • WikiPage
  • Account
  • AddressParser

메서드 이름

메서드 이름은 동사나 동사구가 적합하다.

접근자, 변경자, 조건자는 javabean 표준에 따라 값 앞에 get, set, is를 붙인다.

  • string name = employee.getName();
  • customer.setName("mike");
  • if (paycheck.isPosted())...

생성자를 중복정의 할 때는 정적 팩토리 메서드를 사용한다. 메서드는 인수를 설명하는 이름을 사용한다.

(❌)

Complex fulcrumPoint = new Complex(23.0)

(⭕️)

Complex fulcrumPoint = Complex.FromRealNumber(23.0);

 

이건 effetive java에서도 강조하는 이야기다. 생성자의 이름은 클래스의 이름을 그대로 사용한다.

각각의 생성자가 어떤 용도로 존재하는지 명확하게 알 수 없다. 하지만 정적팩토리 메소드는

메소드의 이름을 자유롭게 지울 수 있어서 그 용도를 명확하게 표현할 수 있다.

 

한 개념에 한 단어를 사용하라

추상적인 개념 하나에 단어 하나를 선택해 이를 고수한다. 메서드 이름은 독자적이고 일관적이어야 한다. 일관성 있는 어휘는 코드를 사용할 프로그래머가 반갑게 여길 선물이다.

 

의미 있는 맥락을 추가하라

대다수 이름은 스스로 의미가 분명하지 않다. 그래서 클래스, 함수, 이름 공간에 넣어 맥락을 부여한다.

firstName, lastName, state (❌)
addrFirstName, addrLastName, addrState (⭕️)

 

 

 

 

728x90