본문 바로가기
반응형

인터페이스5

[엘레강트 오브젝트] 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.3 항상 인터페이스를 사용하세요 이 내용은 엘레강트 오브젝트 를 읽으면서 정리한 내용을 포함하고 있습니다. 객체의 결합 객체의 분리 연습해보기 정리 관련해서 참고해볼 내용 객체의 결합 객체는 다른 객체들과 의사소통하면서 작업을 지원하고, 다른 객체들에게 도움을 제공한다. 결합이 필요한 부분은 다른 누군가가 객체의 서비스를 필요로 하기 때문이다. 이렇듯, 객체들이 서로를 필요로 하기 때문에 결합한다. (coupled) 객체들의 수가 수십 개를 넘어가면서부터 객체 사이의 강한 결합도가 심각한 문제가 된다. 이러한 결합도 문제는 유지보수성에 영향을 미치게 된다. 객체의 분리 애플리케이션 전체를 유지보수 가능하도록 만들기 위해서는 객체를 분리헤야 한다.(decouple) 기술적인 관점에서 객체 분리란 상호작용하는 다른 객체를 수정하지 않고도 .. 2023. 3. 1.
[Java] List와 ArrayList List와 ArrayList의 비교를 통해서 인터페이스와 구현체에 대해서 알아보도록 하겠습니다. 또한 이러한 구조의 문제점은 무엇이고 장점은 어떤 부분이 있는지도 확인해보도록 하겠습니다. 자바에서는 전체 사용자수, 오늘 등록한 주문수 등 복수의 형태의 데이터를 저장하여 활용하기 위해서는 List 를 사용합니다. 아래는 샘플 코드입니다. List lists = new ArrayList(); 그렇다면, 왜 이렇게 사용할까? 그 내용을 알아보기 위해 정리합니다. List List 는 선형 자료구조로 순서를 가진 항목들이 모여 있습니다. 먼저 List 는 Collection 의 하위 인터페이스입니다. public interface List extends Collection 2022. 7. 9.
[객체지향] OCP 적용 정리 최근 진행하고 있는 미션에서 코드 리뷰를 통해서 OCP의 대해서 피드백을 받은적이 있습니다. OCP를 적용하면서 진행하였던 내용을 정리하려고 합니다. 상황 현재 외부 프로젝트 준비를 위해서 플랫폼 개발을 진행하고 있습니다. 그 중 API가 하나 있습니다. 이 API는 Elasticsearch를 조회해서 가져온 데이터를 전달하고 있습니다. 사실, 이 API는 기존에는 Database에서 조회한 내용을 전달하였습니다. 하지만 Elasticsearch를 연동하면서 변경되었습니다. 현재 개발 시에는 Elasticsearch를 사용하고 있지만, 외부 프로젝트 상황에 따라서 다른 라이브러리도 변경될 수 있습니다. 문제점 외부 라이브러리를 사용하는 부분에서 다른 라이브러리를 활용하여 다른 방식으로 변경될 수 있습니다.. 2022. 1. 23.
반응형