본문 바로가기
반응형

전체 글145

[엘레강트 오브젝트] 3.1 5개 이상의 public 메서드만 노출하세요 이 내용은 엘레강트 오브젝트 를 읽으면서 정리한 내용을 포함하고 있습니다. 메소드 크기 정리 가장 우아하고, 유지보수가 가능하고, 응집력이 높으면서, 테스트하기도 용이한 객체는 작은 객체 이다. 메소드 크기 클래스의 크기를 정하는 기준으로 public 메서드(protected 메서드 포함)의 개수를 사용하기를 권장한다. 여기에서는 저자가 적절하다고 생각하는 객체의 public 메서드의 수는 5개이다. 구체적인 숫자를 언급한 이유는 public 메서드의 수에 제한이 있고, 그 제한이 매우 작다는 사실을 설명하기 위해서이다. 클래스를 작게 만들어서 얻는 이득으로는 무엇이 있을까? 다음 4가지의 장점이 있다. 우아함 유지보수성 응집도 테스트 용이성 가장 중요한 것은 유지보수성이다. 더 작은 클래스는 유지보수하.. 2023. 3. 12.
[엘레강트 오브젝트] 2.9 인터페이스를 짧게 유지하고 스마트(smart)를 사용하세요 이 내용은 엘레강트 오브젝트 를 읽으면서 정리한 내용을 포함하고 있습니다. 스마트 클래스 데코레이터 활용 정리 스마트 클래스 클래스를 작게 유지하는 것이 중요하다면, 인터페이스를 작게 만드는 것은 훨씬 더 중요하다. interface Exchange { float rate(final String target); float rate(final String source, final String target); } 같은 기능을 동작하는 2개의 인터페이스 메소드는 구현 클래스에게 너무 많은 것을 요구하고 있다. 이런 종류의 계약은 단일 책임 원칙(Single Responsibility Principle)을 위반하는 클래스를 만들도록 유도한다. 두 rate 메서드는 매우 밀접하게 연관되어 있지만 두 개의 독립적인.. 2023. 3. 12.
[엘레강트 오브젝트] 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.
반응형