템플릿 메서드 패턴 설명 코드에 변하는 부분과 변하지 않는 부분이 있을 때, 변하지 않는 부분을 추상 클래스 내 메서드로 정의하고, 변하는 부분을 추상 클래스 내 abstract 메서드로 정의하여 자식 클래스에서 변하는 부분을 abstract 메서드를 override 하여 구현하는 패턴. 코드 예시 public abstract class AbstractTemplate { public void execute() { long startTime = System.currentTimeMillis(); //비즈니스 로직 실행 call(); //비즈니스 로직 종료 long endTime = System.currentTimeMillis(); long resultTime = endTime - startTime; log...

상속을 이용해 기능을 확장한 예시를 들어보자. FileOut은 데이터를 파일에 출력하는 기능을 제공한다. 그리고 BufferedOut과 ZipOut은 각각 버퍼 기능과 압축 기능을 추가 제공한다. 그런데 만약 버퍼 기능과 압축 기능을 함께 제공하고 싶다면 어떻게 해야 할까? 이렇게 하위 클래스를 추가해서 구현할 수 있다. 이 방법은 직관적이지만 추가할 수 있는 기능이 많아질 경우 클래스의 개수가 지나치게 많아질 수 있다는 문제가 있다. 이럴 때 사용할 수 있는 것이 바로 데코레이터 패턴이다. 데코레이터 패턴은 상속이 아닌 '위임' 방식으로 기능을 확장한다. 구조가 조금 복잡해보이니 코드를 통해 이해해 보자. public abstract class Decorator implements FileOut { p..

자판기에 들어가는 소프트웨어를 만든다고 상상하자. 자판기는 다음과 같이 동작한다. 동작 상태 실행 결과 동전을 넣는다 동전 없음 금액을 증가 제품 선택 가능 상태 동전을 넣는다 제품 선택 가능 금액을 증가 제품 선택 가능 상태 제품을 선택한다 동전 없음 아무 동작하지 않음 동전 없음 상태 유지 제품을 선택한다 제품 선택 가능 제품을 주고 잔액 감소 잔액 있으면 제품 선택 가능 잔액 없으면 동전 없음 상태 위 표를 토대로 다음과 같은 프로그램을 작성했다. public class VendingMachine{ public static enum State { NOCOIN, SELECTABLE } private State state = State.NOCOIN; public void insertCoin(int co..
동일한 절차를 따르되, 일부 과정만 다른 코드를 짜는 경우가 있다. 예를 들어 인증을 처리할 때, DB 데이터를 사용하는 경우와 LDAP을 사용하는 경우를 생각해보자. 1) DB 데이터를 이용한 인증 처리 public class DbAuthenticator{ public Auth authenticate(String id, String pw){ //사용자 정보로 인증 확인 User user = userDao.selectById(id); boolean auth = user.equalPassword(pw); //인증 실패 예외 처리 if(!auth) throw createException(); //인증 성공시, 인증 정보 제공 return new Auth(id, user.getName()); } private..

첫 번째 손님, 그리고 신선하지 않은 과일에 대해 할인을 적용하는 과일 가게를 생각해보자. public class Calculator{ public int calculate(boolean firstGuest, List items){ int sum = 0; for (Item item : items){ if(firstGuest) sum += (int)(item.getPrice()*0.9); else if(!item.isFresh()) sum += (int)(item.getPrice()*0.8); else sum += item.getPrice(); } return sum; } } 간단한 코드지만 만약 할인 정책이 계속해서 추가된다면 if-else 문이 늘어나고 calculate의 parameter도 증가해 코..
- Total
- Today
- Yesterday
- BOJ
- 스프링
- 코테
- provider
- OOP
- gracefulshutdown
- 템플릿콜백
- 프록시패턴
- 백기선
- 자바
- ec2
- 프록시
- SOLID
- 객체지향
- 메서드레퍼런스
- java
- 데코레이터패턴
- 김영한
- 토비의봄TV
- AOP
- 디자인패턴
- 프로그래머스
- 코딩테스트
- 예외처리
- 자바스터디
- 토비
- 토비의스프링
- 카카오
- c++
- 서비스추상화
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |