본문 바로가기
반응형

엘레강트오브젝트23

[엘레강트 오브젝트] 2.8 모의 객체(Mock) 대신 페이크 객체(Fake)를 사용하세요 이 내용은 엘레강트 오브젝트 를 읽으면서 정리한 내용을 포함하고 있습니다. 페이크(Fake) 한걸음 더 나아가기 정리 페이크(Fake) 테스트를 최적화하기 위한 도구인 모킹(Mocking)을 많이 사용하는데, 하지만 모킹 대신 페이크 객체를 사용할 것을 제안한다. 페이크 클래스는 인터페이스의 일부이며 인터페이스와 함께 제공한다. 페이크 클래스가 실제 클래스보다 더 복잡한 경우도 존재한다. 페이크 클래스를 만족하도록 테스트를 작성하지 말고, 페이크 클래스가 테스트를 올바르게 지원하도록 작성한다. 프로덕션 코드 변경 시 단위 테스트 코드를 수정하지 않으면 실패하게 된다. 단위 테스트도 신경써서 수정해야 한다. 페이크 클래스가 존재하는 상황에서 해당 인터페이스를 변경하기 위해서는 자연스럽게 해당 인터페이스 클.. 2023. 3. 12.
[엘레강트 오브젝트] 2.7 문서를 작성하는 대신 테스트를 만드세요 이 내용은 엘레강트 오브젝트 를 읽으면서 정리한 내용을 포함하고 있습니다. 문서화 단위 테스트 정리 관련해서 참고해볼 내용 문서화 문서화는 유지보수에 있어 중요한 구성 요소이다. 구체적으로 문서를 만드는 일이 중요한 것이 아니라 클래스나 메서드에 관한 추가 정보에 얼마나 쉽게 접근할 수 있는 지가 중요하다. 코드를 볼 사람이 모든 것을 알고 있다 라고 생각하며 작성된 코드를 읽는 것은 매우 성가신 일이다. 더 읽기 쉬운 코드를 만들기 위해서는, 코드를 읽게 될 사람이 비즈니스 도메인, 프로그래밍 언어, 디자인 패턴, 알고리즘을 거의 이해하지 못하는 주니어 프로그래머라고 가정해야 한다. 단위 테스트 나쁜 설계는 문서를 작성하도록 강요한다. 코드 만으로는 이 클래스가 어떤 일을 하는지, 메서드의 목적이 무엇.. 2023. 3. 12.
[엘레강트 오브젝트] 2.6 불변 객체로 만드세요 이 내용은 엘레강트 오브젝트 를 읽으면서 정리한 내용을 포함하고 있습니다. 불변 클래스 불변객체의 특징 정리 불변 클래스 모든 클래스를 상태 변경이 불가능한 불변 클래스(immutable class)로 구현하면 유지보수를 크게 향상시킨다. 불변성의 특징은 다음과 같다. 크기가 작음 응집력이 높음 느슨하게 결합 유지보수하기 쉬운 클래스 불변객체는 인스턴스를 생성한 후에 상태를 변경할 수 없는 객체이다. class Cash { private final int dollars; Cash(int val) { this.dollars = val; } } final 키워드는 생성자 외부에서 프로퍼티의 값을 수정할 경우 컴파일 에러가 발생한다. 불변 객체를 수정해야 한다면 프로퍼티를 수정하는 대신 새로운 객체를 생성해야.. 2023. 3. 12.
[엘레강트 오브젝트] 2.5 퍼블릭 상수(Public Constant)를 사용하지 마세요 이 내용은 엘레강트 오브젝트 를 읽으면서 정리한 내용을 포함하고 있다. 상수 잘못된 사용 어떻게 해결할까? 또 다른 예 정리 상수 상수를 사용하는 이유는 데이터를 공유하기 위한 목적이다. 그래서 public static final 을 사용한다. 하지만 실제 객체들은 어떤 것도 공유해서는 안되고 독립적으로 닫혀 있어야 한다. 아래 예시를 통해서 알아보도록 하겠다. class Records { private static final String EOL = "\r\n"; void write(Writer out) { out.write(rec.toString()); out.write(Recoreds.EOL); } } EOL 상수는 private으로 선언되어 있어서 Records 클래스 안에서만 사용되기 때문에 바람.. 2023. 3. 12.
[엘레강트 오브젝트] 2.4 메서드 이름을 신중하게 선택하세요 이 내용은 엘레강트 오브젝트 를 읽으면서 정리한 내용을 포함하고 있습니다. 들어가기 빌더는 명사다 조정자는 동사다 빌더와 조정자 혼합하기 Boolean 값을 결과로 반환하는 경우 정리 관련해서 참고해볼 내용 들어가기 빌더(builder)란 뭔가를 만들고 새로운 객체를 반환하는 메서드를 말한다. Java의 Builder 패턴을 말하는 것은 아니다. 빌더 메소드는 항상 뭔가를 반환하고, 이름은 명사로 표현한다. 빌더 메소드의 의미를 좀 더 풍부하게 설명하기 위해서 형용사 활용 가능하다. 빌더의 예 int pow(int base, int power); float speed(); Employee employee(int id); String parsedCell(int x, int y);객체로 추상화한 엔티티를 수.. 2023. 3. 1.
[엘레강트 오브젝트] 2.3 항상 인터페이스를 사용하세요 이 내용은 엘레강트 오브젝트 를 읽으면서 정리한 내용을 포함하고 있습니다. 객체의 결합 객체의 분리 연습해보기 정리 관련해서 참고해볼 내용 객체의 결합 객체는 다른 객체들과 의사소통하면서 작업을 지원하고, 다른 객체들에게 도움을 제공한다. 결합이 필요한 부분은 다른 누군가가 객체의 서비스를 필요로 하기 때문이다. 이렇듯, 객체들이 서로를 필요로 하기 때문에 결합한다. (coupled) 객체들의 수가 수십 개를 넘어가면서부터 객체 사이의 강한 결합도가 심각한 문제가 된다. 이러한 결합도 문제는 유지보수성에 영향을 미치게 된다. 객체의 분리 애플리케이션 전체를 유지보수 가능하도록 만들기 위해서는 객체를 분리헤야 한다.(decouple) 기술적인 관점에서 객체 분리란 상호작용하는 다른 객체를 수정하지 않고도 .. 2023. 3. 1.
반응형