전체 글50 브릿지(Bridge) 패턴 추상적인 것과 구체적인 것을 분리하여 연결하는 패턴 하나의 계층 구조일 때 보다 각기 나누었을 때 독립적인 계층 구조로 발전시킬 수 있다. 구현 방법 장단점 장점 추상적인 코드를 구체적인 코드 변경 없이도 독립적으로 확장할 수 있다. 추상적인 코드과 구체적인 코드를 분리하여 수 있다. 단점 계층 구조가 늘어나 복잡도가 증가할 수 있다. 실무 적용 사례 자바 JDBC API, DriverManger와 Driver SLF4J, 로깅 퍼사드와 로거 스프링 Portable Service Abstraction 예제 코드 https://github.com/jsyang-dev/study-designpattern/tree/master/src/main/java/me/study/designpattern/bridge 2022. 1. 29. 퍼사드 패턴 복잡한 서브 시스템 의존성을 최소화하는 방법 클라이언트가 사용해야 하는 복잡한 서브 시스템 의존성을 간단한 인터페이스로 추상화할 수 있다 구현 방법 장단점 장점 서브 시스템에 대한 의존성을 한곳으로 모을 수 있다 단점 퍼사드 클래스가 서브 시스템에 대한 모든 의존성을 가지게 된다 실무 적용 사례 스프링 Spring MVC 스프링이 제공하는 대부분의 기술 독립적인 인터페이스와 그 구현체 예제 코드 https://github.com/jsyang-dev/study-designpattern/tree/master/src/main/java/me/study/designpattern/facade 2022. 1. 28. @Transactional의 propagation(전파옵션) REQUIRED 기본 속성, 부모 트랜잭션 내에서 실행(부모 트랜잭션 전파)하며 부모 트랜잭션이 없는 경우 새로운 트랜잭션을 생성한다. 한개의 트랜잭션으로 묶이기 때문에 부모나 자식 어디에서든 예외가 발생할 경우 둘 다 롤백 된다. 부모가 문제인 경우 @Transactional public void saveWithRequiredAndParentFailed(Parent parent, Child child) { parentRepository.save(parent); childService.saveWithRequired(child, false); throw new RuntimeException(); } @Transactional(propagation = Propagation.REQUIRED) public vo.. 2022. 1. 24. 템플릿 메소드(Template method) 패턴 템플릿 메소드(Template method) 패턴 Algorithm 구조를 서브 클래스가 확장할 수 있도록 템플릿으로 제공하는 방법 추상 클래스는 템플릿을 제공하고 하위 클래스는 구체적인 Algorithm을 제공한다. 템플릿 콜백(Template-Callback) 패턴 콜백으로 상속 대신 위임을 사용하는 템플릿 패턴 상속 대신 익명 내부 클래스 또는 람다 표현식을 활용할 수 있다. 구현 방법 장단점 장점 템플릿 코드를 재사용하고 중복 코드를 줄일 수 있다. 템플릿 코드를 변경하지 않고 상속을 받아서 구체적인 Algorithm만 변경할 수 있다. 단점 리스코프 치환 원칙을 위반할 수도 있다. 하위 클래스에서 의도치 않은 행동으로 상속할 경우 발생 (final로 상속을 막으면 어느정도 방지 가능) 알고리듬 .. 2022. 1. 19. 어댑터(Adapter) 패턴 기존 코드를 클라이언트가 사용하는 인터페이스의 구현체로 바꿔주는 패턴 클라이언트가 사용하는 인터페이스를 따르지 않는 기존 코드를 재사용할 수 있게 해 준다. 구현 방법 장점과 단점 장점 기존 코드를 변경하지 않고 원하는 인터페이스 구현체를 만들어 재사용할 수 있다.(개방-폐쇄 원칙) 기존 코드가 하던 일과 특정 인터페이스 구현체로 변환하는 작업을 각기 다른 클래스로 분리하여 관리할 수 있다.(단일 책임 원칙) 단점 새 클래스가 생겨 복잡도가 증가할 수 있다. 경우에 따라서는 기존 코드가 해당 인터페이스를 구현하도록 수정하는 것이 좋은 선택이 될 수도 있다. 실무 적용 사례 자바 java.util.Arrays#asList(T…) java.util.Collections#list(Enumeration), ja.. 2022. 1. 13. 프로토타입(Prototype) 패턴 기존 인스턴스를 복제하여 새로운 인스턴스를 만드는 방법 복제 기능을 갖추고 있는 기존 인스턴스를 프로토타입으로 사용해 새 인스턴스를 만들 수 있다. 구현 방법 장점과 단점 장점 복잡한 객체를 만드는 과정을 숨길 수 있다. 기존 객체를 복제하는 과정이 새 인스턴스를 만드는 것보다 비용(시간 또는 메모리)적인 면에서 효율적일 수도 있다. 추상적인 타입을 리턴할 수 있다. 단점 복제한 객체를 만드는 과정 자체가 복잡할 수 있다. (특히, 순환 참조가 있는 경우) 실무 적용 사례 자바 Object 클래스의 clone 메소드와 Cloneable 인터페이스 얕은 복사(shallow copy)와 깊은 복사(deep copy) Collections 을 사용할 때 대부분 인터페이스 타입으로 인스턴스를 사용하기 때문에 c.. 2022. 1. 10. 빌더(Builder) 패턴 동일한 프로세스를 거쳐 다양한 구성의 인스턴스를 만드는 방법 (복잡한) 객체를 만드는 프로세스를 독립적으로 분리할 수 있다. 구현 방법 장점과 단점 장점 만들기 복잡한 객체를 순차적으로 만들 수 있다. 복잡한 객체를 만드는 구체적인 과정을 숨길 수 있다. 동일한 프로세스를 통해 각기 다르게 구성된 객체를 만들 수도 있다. 불완전한 객체를 사용하지 못하도록 방지할 수 있다. 단점 원하는 객체를 만들려면 빌더부터 만들어야 한다. 구조가 복잡해진다. (트레이드 오프) 실무 적용 사례 자바 Stream.Buidler API StringBuilder, StringBuffer 롬복 @Builder 스프링 UriComponentsBuilder MockMvcWebClientBuilder Builder 로 끝나는 클래스.. 2022. 1. 8. 추상 팩토리 패턴 서로 관련 있는 여러 객체를 만들어주는 인터페이스 구체적으로 어떤 클래스의 인스턴스(concreate product)를 사용하는지 감출 수 있다. 구현 방법 클라이언트 코드에서 구체적인 클래스의 의존성을 제거한다. 팩토리 메서드 패턴과 비교 비슷한 점 둘 다 구체적인 객체 생성 과정을 추상화한 인터페이스를 제공한다. 다른 점 관점의 차이 팩토리 메소드 패턴은 “팩토리를 구현하는 방법 (inheritance)”에 초점을 둔다. 추상 팩토리 패턴은 “팩토리를 사용하는 방법 (composition)”에 초점을 둔다. 목적의 차이 팩토리 메소드 패턴은 구체적인 객체 생성 과정을 하위 또는 구체적인 클래스로 옮기는 것이 목적이다. 추상 팩토리 패턴은 관련 있는 여러 객체를 구체적인 클래스에 의존하지 않고 만들 수.. 2022. 1. 6. 면접 리팩터링 특강 면접은 누가 보는가? 개발 리더: 우리 팀에 개발자 필요해 임원: 인성/태도/협업/비전(꿈) 면접은 무엇을 검증하는가? 자기소개, 지원동기, 개발 기본기, 구현 경험(성공/실패), 문제 해결 능력, 나의 장점 단점, 꾸준한 성장, 진실됨, 협업 능력, 성장 가능성 등 면접은 실력을 검증하는 확실한 수단이다. 검증에 준비가 되어 있어야 한다. 듣기 편해야 한다 의견(결론) - 근거/이유 - 예시 - 의견(결론) 서술어는 중요하다 사실에 대해서 말할 때: ~입니다. 나의 생각에 대해서 말할 때: ~라고 생각합니다. 예측하는 내용에 대해서 말할 때: ~인 것 같습니다. 생각할 시간이 필요할 때: ~ 잠시 생각해도 될까요? 잘못 사용되는 서술어: ~라고 들었습니다. 모르는 내용은 확실히 모른다고 대답해야 한다... 2022. 1. 6. 팩토리 메소드(Factory method) 패턴 구체적으로 어떤 인스턴스를 만들지는 서브 클래스가 정한다. 다양한 구현체 (Product)가 있고, 그중에서 특정한 구현체를 만들 수 있는 다양한 팩토리 (Creator)를 제공할 수 있다. 구현 방법 확장에 열려있고 변경에 닫혀있는 구조로 만든다. 팩토리 메소드 패턴을 적용했을 때의 장점은? 단점은? 장점: 객체지향 원칙 중 개방 폐쇄 원칙(OCP)을 적용할 수 있다. 단점: 패토리 메서드 패턴을 적용하기 전보다 클래스의 수가 많아진다. 하지만 클래스별로 단일 책임의 관점에서는 오히려 책임 분리가 되기 때문에 큰 문제가 되지 않는다고 생각한다. “확장에 열려있고 변경에 닫혀있는 객체 지향 원칙”을 설명하세요. “확장에 열려 있다”는 의미는 새로운 변경사항이 생겼을 때 유연하게 코드를 추가, 수정할 수 .. 2022. 1. 4. 이전 1 2 3 4 5 다음