‘개발자가 반드시 정복해야 할 객체 지향과 디자인 패턴' 책을 보고 정리한 글입니다. 통합 검색 기능을 정의하기 위해 SearchService 인터페이스를 작성하고 DB를 이용한 DBSearchService 클래스를 구현하였다. 게시글의 개수가 빠르게 증가하면서 SQL의 검색 속도 성능에 문제가 발생했다고 해보자. 검색 속도의 문제를 해결하기 위해 Tolr라는 오픈 소스 검색 서버를 도입하기로 결정했다. TolrClient가 제공하는 인터페이스와 SearchService 인터페이스가 맞지 않는다는 게 문제다. WebSearchRequestHandler 클래스를 비롯해서 여러 클래스가 SearchService를 사용하도록 만들어졌기 때문에, SearchService 대신 TolrClient를 사용하도록 변..
‘개발자가 반드시 정복해야 할 객체 지향과 디자인 패턴' 책을 보고 정리한 글입니다. 제품 목록을 보여주는 GUI 프로그램은 다음 사진처럼 목록 중 일부를 화면에 보여주고, 스크롤을 할 때 나머지 목록을 화면에 표시할 수 있다. 제품 목록을 구성할 때 관련된 모든 이미지를 로딩하도록 구현할 수 있는데, 이 경우 불필요하게 메모리를 사용하는 문제가 발생할 수 있다. 예를 들어, 목록 하단에 위치한 이미지는 실제로 스크롤을 하기 전까지는 화면에 보이지 않음에도 불구하고 목록을 구성할 때 메모리에 이미지 정보를 로딩하게 된다. 특히 이미지를 로컬 파일 시스템이 아닌 웹에서 읽어 온다면 이미지 로딩으로 인해 제품 목록을 보여주기까지 대기 시간이 길어지게 된다. 위같은 문제를 해결하는 방법은 이미지가 실제로 화면..
‘개발자가 반드시 정복해야 할 객체 지향과 디자인 패턴' 책을 보고 정리한 글입니다. 상속은 기능을 확장하는 방법을 제공한다. 상속을 이용한 기능 확장 방법이 쉽긴 하지만, 다양한 조합의 기능 확장이 요구될 때 클래스가 불필요하게 증가하는 문제가 발생된다. 예를 들어 버퍼 기능과 압축 기능을 함께 제공해야 한다거나, 압축한 뒤 암호화 기능을 제공해야 한다면 클래스가 증가하고 계층 구조가 복잡해진다. 이런 경우에 사용할 수 있는 패턴이 데코레이터 패턴이다. 데코레이터 패턴은 상속이 아닌 위임을 하는 방식으로 기능을 확장해 나간다. FileOut 인터페이스는 파일 출력 기능을 정의하고 있고, 실제 파일 출력 기능은 FileOutImpl 클래스가 구현한다. 여기서 중요한 건 기능 확장을 위해 FileOutIm..
‘개발자가 반드시 정복해야 할 객체 지향과 디자인 패턴' 책을 보고 정리한 글입니다. 단일 상품을 판매하는 자판기에 들어갈 소프트웨어를 개발해 달라는 요구가 있다고 해보자. 이 자판기의 동작 방식은 다음과 같다. 자판기 프로그램의 조건에 따른 코드를 다음과 같이 작성하였다. public class VendingMachine { public static enum State {NOCOIN, SELECTABLE} private State state = State.NOCOIN; public void insertCoin(int coin) { switch (state) { case NOCOIN: increaseCoin(coin); state = State.SELECTABLE; break; case SELECTABL..
‘개발자가 반드시 정복해야 할 객체 지향과 디자인 패턴' 책을 보고 정리한 글입니다. 프로그램을 구현하다 보면, 완전히 동일한 절차를 가진 코드를 작성하게 될 때가 있다. 심지어 이 코드들은 절차 중 일부 과정의 구현만 다를 뿐 나머지의 구현은 똑같을 때도 있다. 예를 들어, DB 데이터와 LDAP을 이용해서 인증을 처리하는 클래스는 사용자 정보를 가져오는 부분의 구현만 다를 뿐 인증을 처리하는 과정은 완전히 동일할 수 있다. 실행 과정/단계는 동일한데 각 단계 중 일부의 구현이 다른 경우에 사용할 수 있는 패턴이 템플릿 메서드 패턴이다. 실행 과정을 구현한 상위 클래스 실행 과정의 일부 단계를 구현한 하위 클래스 상위 클래스는 실행 과정을 구현한 메서드를 제공한다. 이 메서드는 기능을 구현하는데 필요한..
‘개발자가 반드시 정복해야 할 객체 지향과 디자인 패턴' 책을 보고 정리한 글입니다. 한 과일 매장은 상황에 따라 다른 가격 할인 정책을 적용하고 있다. 매장을 열자마자 들어온 첫 손님을 위한 ‘첫 손님 할인' 정책과 저녁 시간대에 신선도가 떨어진 과일에 대한 ‘덜 신선한 과일 할인' 정책이 있다면, 다음 코드처럼 가격을 계산하는 모듈에 이런 가격 할인 정책을 적용하기 위한 if-else 블록이 포함될 것이다. import java.util.List; public class Calculator { public int calculate(boolean firstGuest, List items) { int sum = 0; for (Item item : items) { if(firstGuest) { sum +=..
- Total
- Today
- Yesterday
- MSA
- 테라폼
- 정규표현식
- 디자인 패턴
- Effective Java
- programmers
- 코테
- 디자인패턴
- AWS
- Java
- BOJ
- Spring
- 백준
- node.js
- 이팩티브 자바
- 프로그래머스
- 클린 코드
- C++
- Olympiad
- kkoon9
- Kotlin
- 클린 아키텍처
- JPA
- 이펙티브 자바
- 객체지향
- kotest
- Spring Boot
- 알고리즘
- Algorithm
- BAEKJOON
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |