TIL (Today I Learned)
2022.02.20
오늘 읽은 범위
2장. 의미 있는 이름
책에서 기억하고 싶은 내용을 써보세요.
- 서로 흡사한 이름을 사용하지 않도록 주의한다. 한 모듈에서 XYZControllerForEfficientHandlingOfStrings라는 이름을 사용하고, 조금 떨어진 모듈에서 XYZControllerForEfficientStorageOfStrings라는 이름을 사용한다면? 차이를 알아채겠는가? (p.24)
- 이름으로 그릇된 정보를 제공하는 진짜 끔찍한 예가 소문자 L이나 대문자 O 변수다. 두 변수를 한꺼번에 사용하면 더욱 끔찍해진다. 다음 코드에서 보듯, 소문자 L은 숫자 1처럼 보이고 대문자 O는 숫자 0처럼 보인다. (p.25)
- 컴파일러를 통과할지라도 연속된 숫자를 덧붙이거나 불용어를 추가하는 방식은 적절하지 못하다. 이름이 달라야 한다면 의미도 달라져야 한다. (p.26)
- 전문가 프로그래머는 자신의 능력을 좋은 방향으로 사용해 남들이 이해하는 코드를 내놓는다. (p.31)
- 클래스 이름과 객체 이름은 명사나 명사구가 적합하다. ··· Manager, Processor, Data, Info 등과 같은 단어는 피하고, 동사는 사용하지 않는다. (p.32)
- 메서드 이름은 동사나 동사구가 적합하다. ··· 접근자, 변경자, 조건자는 javabean 표준에 따라 값 앞에 get, set, is를 붙인다. (p.32)
오늘 읽은 소감은? 떠오르는 생각을 가볍게 적어보세요
프로그래밍을 할 때 명명법을 정하는 것은 참 골치 아픈 일이다. 데이터베이스의 테이블과 키부터 API, 함수, 변수 등 왜 이렇게 겹치고 구분 안되는 이름들만 생각나는 건지 머리를 한 대 쥐어박고 싶다. 심지어 팀 프로젝트를 할 때는 각자 고수하던 방식이 있어서 그런지 더 힘들어진다. 하지만 오늘 2장을 읽고 문제 해결의 실마리를 찾은 느낌이다. 그동안 내가 잘못해왔던 네이밍에 대해 반성할 수 있었고 (예를 들어, 동일한 API에 사용되는 함수들 중 비슷한 역할을 한다고 생각되는 것들이 있으면 이름에 1,2,3 등 숫자를 덧붙이곤 했었다... 정말 끔찍하다..) 코드 예시들을 보며 왜 이 방식을 지켜야 효율적인 건지 명확한 이유를 확인할 수 있었다. 앞으로도 반복적으로 읽으며 주변 개발자들과 공유하고 싶은 챕터였다.
궁금한 내용이 있거나, 잘 이해되지 않는 내용이 있다면 적어보세요.
- 인터페이스 클래스(interface class): 추상 메소드와 상수만으로 구성된 추상 클래스를 말한다. 다른 멤버 변수나 일반 메소드를 가질 수 있는 추상 클래스보다 더 완벽한 추상화를 제공한다. 다중 상속을 하고 싶을 때 인터페이스를 사용한다.
- 구체 클래스(concrete class): 추상 클래스가 아닌 클래스. new 키워드를 사용하여 인스턴스를 만드는 클래스를 말한다.
- 접근자(Accessor): 게터(getter)라고도 부른다. private 설정된 멤버 변수에 대하여 외부 클래스에서 접근할 수 있도록 메소드 형태로 변수의 값을 리턴하는 역할을 한다.
- 변경자(Mutator): 세터(setter)라고도 부른다. private 설정된 멤버 변수에 대하여 외부 클래스에서 변수의 값을 설정할 수 있도록 한다.
- 조건자(Predicate): boolean(true/false)값 또는 정수값을 리턴하는 메소드이다.
- 생성자(Constructor): 객체의 초기화 과정을 수행하는 메소드이다. 생성자는 리턴타입이 없어야 하며, 클래스와 이름이 같아야 한다.
- 정적 팩토리 메소드(static factory method): 직접적으로 생성자를 통해 객체를 생성하는 것이 아닌 메소드를 통해서 객체를 생성하는 것을 말한다.
'Book Review' 카테고리의 다른 글
[Clean Code] 4장. 주석 (0) | 2022.02.26 |
---|---|
[Clean Code] 3장. 함수 (0) | 2022.02.24 |
[Clean Code] 추천사 ~ 1장. 깨끗한 코드 (0) | 2022.02.19 |