빌더의 이름은 명사로, 조정자의 이름은 동사로 짓자
빌더는 항상 뭔가를 반환합니다
반환타입은 void가 될 수 없으며, 이름은 항상 명사여야 합니다
// Builder
int pow(int base, int power);
float speed();
Employee employee(int id);
String parsedCell(int x, int y); // 형용사를 통해 명사를 꾸며주어 풍부한 정보를 제공
객체로 추상화한 실세계 엔티티를 수정하는 메서드를 조정자라고 부릅니다
조정자의 반환 타입은 항상 void이고, 이름은 항상 동사입니다
// 조정자(manipulator)
void save(String content);
void put(String key, Float value);
void remove(Employee emp);
void quicklyPrint(int id); // 부사를 통해 동사를 꾸며주어 풍부한 정보를 제공
빌더는 어떤 것을 만들고, 조정자는 뭔가를 조작합니다
뭔가를 만드는 동시에 조작하는 메서드가 있어서는 안됩니다
그런데 무언가 값을 저장하거나 수정했을 때, 반환 값이 없다면 성공적으로 수행됐는지 여부를 알 수 없습니다
문제를 해결하기 위해서는 PutOperation의 인스턴스를 반환하도록 클래스의 전반적인 설계를 수정해야 합니다
PutOperation 클래스는 조정자인 save() 메서드와 성공/실패 여부를 반환하는 빌더인 success() 메서드를 포함해야 합니다
객체는 자신의 의무를 수행하는 방법을 알고 있고 존중 받기를 원하는 살아있는 유기체입니다
객체는 단순히 지시에 따르는 것이 아니라 계약에 기반해 일하고 싶어합니다
따라서 메서드 이름을 동사로 지을 때에는 객체에게 '무엇을 할지'를 알려주어야 합니다
우리는 객체에게 구체적인 요청을 하지 않습니다
원하는 요청을 하고 그에 응하는 새로운 객체를 반환받기를 원합니다
객체에게 직접적으로 어떤 일을 하라고 요청하지 않고, 특정한 계약을 준수하는 결과를 요청할 뿐입니다
빌더 패턴은 유지보수성이 낮고 응집도가 떨어집니다
더 커다란 객체를 만들기 용이한 구조입니다
하지만, 더 커다란 객체를 만들기보단 더 작은 객체로 나눠야 합니다
따라서 빌더 패턴을 사용하지 말자
Boolean 값을 결과로 반환하는 경우 메서드 이름은 형용사로 지어야 합니다
boolean empty();
boolean readable();
boolean negative();
보통 boolean으로 반환하는 경우는 보통 is를 넣어서 isEmpty, isReadable 등으로 표현했었습니다
이 책에서는 형용사로 짓고 읽을 때 is를 붙여 부르자고 말합니다
이 글은 학습을 위해 “엘레강트 오브젝트" 책 내용을 정리한 글입니다.
저작권 관련 문제가 있다면 바로 삭제하도록 하겠습니다
'Java > Elegant Objects' 카테고리의 다른 글
[엘레강트 오브젝트] 2. 학습 - (3) 항상 인터페이스를 사용하세요 (0) | 2021.09.05 |
---|---|
[엘레강트 오브젝트] 2. 학습 - (2) 최소한 뭔가는 캡슐화하세요 (0) | 2021.09.05 |
[엘레강트 오브젝트] 2. 학습 - (1) 가능하면 적게 캡슐화하세요 (0) | 2021.09.04 |
[엘레강트 오브젝트] 1. 출생 - (3) 생성자에 코드를 넣지 마세요 (0) | 2021.09.02 |
[엘레강트 오브젝트] 1. 출생 - (2) 생성자 하나를 주 생성자로 만드세요 (0) | 2021.09.02 |
댓글