개발하며 어떤 코드가 좋은 코드일까? 내가 작성한 코드는 좋은 코드일까? 라는 물음을 갖게 되었다.
이 물음을 해결하기 위해 '클린 코드'를 공부하고 나름의 코딩 가이드라인을 세울 계획이다.
의미 있는 이름
의도를 분명히 밝혀라.
작명에서 의도는 매우 매우 중요하다. 이 의도를 잘 담기 위해서
- 해당 변수(혹은 함수나 클래스)의 존재 이유는?
- 수행 기능은?
- 사용 방법은?
을 고려해보자.
💡 주의사항
코드에 의미를 함축하지 말고, 코드와 맥락을 명시적으로 드러내자.
그릇된 정보를 피하라
널리 쓰이는 의미가 있는 단어를 다른 의미로 사용하지 마라.
// 나쁜 예
class Car // Capital Adequacy Ratio(금융 분야에서, 은행의 자기 자본 비율을 나타내는 용어) 클래스
// 좋은 예
class Car // 일반적인 자동차 클래스
두 클래스를 구분하기 위해 불분명한 불용어(info, data)를 사용하지 말고 읽는 사람이 차이를 알도록 이름을 지어라.
// 나쁜 예시
class CustomerInfo { // 'Info'라는 불용어로 구분
String name;
String address;
String phoneNumber;
}
class CustomerData { // 'Data'라는 불용어로 구분했지만 실제 차이가 모호함
String name;
int age;
String email;
}
// 좋은 예시
class CustomerProfile { // 고객의 기본 신상정보를 나타냄
String name;
String address;
String phoneNumber;
}
class CustomerAccount { // 시스템 내 고객 계정 정보를 나타냄
String name;
int age;
String email;
}
이름 인코딩을 피하라
접두어를 웬만하면 사용하지 말자. 하지만 접두어를 추가해 맥락이 분명해 진다면 사용해도 좋다.
인터페이스 클래스 vs 구현 클래스 → 구현 클래스의 이름을 인코딩
클래스, 함수 이름
- 클래스 이름과 객체 이름
- 명사나 명사구
- Manager, Processor, Data, Info 등의 단어는 피하자
- 메서드 이름
- 동사나 동사구
- 생성자를 오버로딩할 때는 정적 팩토리 메서드를 사용하자. 메서드는 인수를 설명하는 이름을 사용하자.
User user1 = User.withEmailContact("John", "john@email.com");
User user2 = User.withPhoneContact("John", "123-456-7890");
이름을 일관성 있게 사용하라
삭제에 관한 함수들의 이름을 "remove", "delete"등으로 제각각 부르지 말고,
요소의 값들을 더하는 함수와, 요소를 추가하는 함수를 모두 "add"로 부르지 말자.
같은 맥락인 함수엔 한 단어를, 다른 맥락인 함수들은 다른 단어들로 부르자.
불필요한 맥락을 없애라
클래스 이름에 컨텍스트를 중복해서 넣지 말자.
긴 이름 vs 짧은 이름
일반적으로 짧은 이름이 긴 이름보다 좋다. 단, 의미가 분명한 경우에 한해서다.
긴 이름은 의미가 분명하기 쉽고 검색하기 편하다.
이름 길이는 범위 크기에 비례해야 한다. → 여러 곳에서 사용하는 코드라면 검색하기 쉬운 이름이 바람직하다.
'Clean Code' 카테고리의 다른 글
| [Day 6] 경계 (1) | 2024.10.29 |
|---|---|
| [Day 5] 오류 처리 (0) | 2024.10.29 |
| [Day 4] 객체와 자료 구조 (1) | 2024.10.25 |
| [Day 3] 형식 맞추기 (0) | 2024.10.24 |
| [Day 2] 함수 (1) | 2024.10.23 |