개발자 99% 커뮤니티에서 수다 떨어요!
TIL (Today I Learned)
2022.02.20
오늘 읽은 범위
2장. 의미있는 이름
책에서 기억하고 싶은 내용을 써보세요.
Product라는 클래스가 있다고 가정하자. 다른 클래스를 ProductInfo 혹은 ProductData라 부른다면 개념을 구분하지 않은 채 이름만 달리한 경우다.
그릇된 정보를 피하라
발음하기 쉬운 이름을 사용하라
검색하기 쉬운 이름을 사용하라 - 이름길이는 범위 크기에 비례해야한다.
인터페이스 클래스와 구현클래스 - 인터페이스 이름은 접두어를 붙이지 않는 편이 좋다고 생각한다. 주의를 흐트리고 과도한 정보를 제공한다. ShapeFactoryImp나 심지어 CShapeFactory가 ISapeFactory보다 좋다.
클래스이름과 객체이름은 명사나 명사구가 적합하다. manager processor data info등과 같은 단어는 피하고 동사는 사용하지 않는다.
메서드이름은 동사나 동사구가 적합하다. 접근자 변경자 조건자는 javabean 표준에 따라 값 앞에 get set is를 붙인다.
생성자를 중복 정의 할 대는 정적 팩토리 메서드를 사용한다.
Complex fulcrumPoint = Complex.FromRealNumber(23.0);
위 코드가 아래 코드보다 좋다.
Complex fulcrumPoint = new Complex(23.0);
한 개념에 한 단어를 사용하라.
한 단어를 두가지 목적으로 사용하지 마라.
해법 영역에서 가져온 이름을 사용하라. 코드를 읽을 사람도 프로그래머라는 사실을 명심한다.
전산용어, 알고리즘이름, 패턴이름, 수학용어 등을 사용해도 괜찮다. 모든 이름을 문제영역(도메인)에서 가져오는 정책은 현명하지 못하다. 같은 개념을 다른이름으로 이해하던 동료들이 매번 고객에게 의미를 물어야하기 때문이다.(34p)
문제 영역에서 가져온 이름을 사용하라. 적절한 프로그래머 용어가 없다면 문제영역에서 이름을 가져온다. 그러면 코드를 보수하는 프로그래머가 분야 전문가에게 의미를 물어 파악할 수 있다.
우수한 프로그래머와 설계자라면 해법영역과 문제영역을 구분할 줄 알아야한다.
문제영역 개념과 관련이 깊은 코드라면 문제영역에서 이름을 가져와야 한다.
의미 있는 맥락을 추가하라.
firstName lastName street houseNumber city state zipcode 라는 변수가 있다. 주소라는 사실을 금방 알아챈다.
하지만 어느 메서드가 state라는 변수하나만 사용한다면? 변수 state가 주소 일부라는 사실을 금방 알아챌까?
addr 이라는 접두어를 추가해 addrFirstName addrLastName addrState라 쓰면 맥락이 좀 더 분명해 진다. 변수가 좀 더 큰 구조에 속한다는 사실이 적어도 독자에게는 분명해진다.
물론 Address라는 클래스를 생성하면 더 좋다. 그러면 변수가 좀 더 큰 개념에 속한다는 사실이 컴파일러에게도 분명해진다. ... 맥락을 개선하면 함수를 조개기가 쉬워지므로 알고리즘도 좀 더 명확해진다.
불필요한 맥락을 없애라.(37p)
오늘 읽은 소감은? 떠오르는 생각을 가볍게 적어보세요
헝가리안표기법.(29p) 실제 서버코드와 응답값에 헝가리안을 쓰고 있는 것을 겪어 보았는데 일도 많고 탈도 많았다.
이름을 짓는 기준을 조금 더 명확하게 하고 몸에 익힐 필요성을 느꼈다.
궁금한 내용이 있거나, 잘 이해되지 않는 내용이 있다면 적어보세요.