반응형

전체 글 271

퍼사드 패턴(Facade Pattern)

퍼사드 패턴(Facade Pattern) 이란? 퍼사드 패턴(Facade Pattern)은 구조 패턴(Structural Pattern)의 한 종류로, 서브시스템들의 공통적인 기능을 정의하는 단순화된상위 수준의 인터페이스를 정의하는 패턴이다. 복잡한 서브 시스템 의존성을 최소화하는 방법 클라이언트가 사용해야 하는 복잡한 서브 시스템 의존성을 간단한 인터페이스로 추상화 할수 있다. 이메일 발송로직을 예로 들어봅시다. 퍼사드 패턴 사용 전 public class Client { public static void main(String[] args) { String to = "namookk@test.com"; String from = "namookk2@test.com"; String host = "127.0.0..

디자인패턴 2022.08.14

[리팩토링] 긴 함수

임시 변수를 질의 함수로 바꾸기 (Replace Parameter with Query) 함수의 매개변수 목록은 함수의 다양성을 대변하며, 짧을수록 이해하기 좋다. 어떤 한 매개변수를 다른 매개변수를 통해 알아낼 수 있다면 중복 매개변수라 생각할 수 있다. 매개변수에 값을 전달하는 것은 함수를 호출하는 쪽의 책임이다. 가능하면 함수를 호출하는 쪽의 책임을 줄이고 함수 내부에서 책임지도록 노력한다. 임시 변수를 질의 함수로 바꾸기와 함수 선언 변경하기를 통해 이 리팩토링을 적용한다. 예시 participants.forEach(p -> { long count = p.homework().values().stream() .filter(v -> v == true) .count(); double rate = coun..

Language/Java 2022.08.06

데코레이터(Decorator) 패턴

데코레이터 패턴 (Decorator Pattern) 이란? 기존에 있는 코드를 변경하지 않고 부가적인 기능을 추가하는 패턴이다. 데코레이터 사용 전 Comment 를 관리하는 CommentService 는 아래와 같으며 addComment 는 Comment 를 출력하는 메서드이다. public class CommentService { public void addComment(String comment) { System.out.println(comment); } } SpamFiltering 은 http 프로토콜을 받기 싫다면 그에 맞는 기능을 추가해야한다. 해당 기능은 아래와 같이 SpamFilteringCommentService로 구현할 수 있다 public class SpamFilteringCommen..

디자인패턴 2022.08.04

빈 생명주기 콜백

빈 생명주기 콜백이란? 스프링 프로젝트가 시작될 때 DB연결, 소켓연결, 기타 등등 시간이 걸리기에 미리 연결을 한 뒤 애플리케이션 종료시점에 연결을 종료해야하는 경우 객체의 초기화 및 종료 작업을 해야한다. 스프링 빈의 라이플 사이클 스프링 컨테이너 생성 → 스프링 빈 생성 → 의존관계 주입 → 초기화 콜백 → 사용 → 소멸전 콜백 →스프링 종료 초기화 콜백 : 빈이 생성되고, 빈의 의존관계 주입이 완료된 후 호출 소멸전 콜백 : 빈이 소멸되기 직전에 호출 객체의 생성과 초기화를 분리하자 생성자는 필수 정보를 받아 메모리 할당후 객체를 생성하는 책임을 가진다 그리고 초기화는 이렇게 생성된 값들을 활용해 기타 무거운 작업들을 수행한다. 그렇기에 초기화를 묶는 것은 SRP(단일 책임 원칙)적으로도 과한 책..

Spring 2022.07.30

컴포짓(composite) 패턴

컴포짓 패턴(Composite Pattern) 이란? 그룹 전체와 개별 객체를 동일하게 처리할 수 있는 패턴 클라이언트 입장에서는 "전체" 나 "부분"이나 모두 동일한 컴포넌트로 인식할수 있는 계층 구조를 만든다(Part-Whole Hierarchy) 컴포짓 패턴을 사용하면 클라이언트 측에서 모든 데이터를 모르더라도 복잡한 트리구조를 쉽게 다룰 수 있다. 컴포짓 패턴(Composite Pattern)은 언제 사용하는가? 복합 객체와 단일 객체의 처리 방법이 다르지 않을 경우, 전체-부분 관계로 정의할 수 있다. 새로운 leaf 로써의 클래스를 추가하더라도 클라이언트는 상위 추상화된 인터페이스 만을 바라보기 때문에 OCP 를 준수할 수 있다. 컴포짓 패턴(Composite Pattern) 장점과 단점 장점..

디자인패턴 2022.07.30

의존관계 자동 주입

의존 관계 주입 4가지 1. 생성자 주입 2. 수정자 주입 (setter) 3. 필드 주입 4. 일반 메서드 주입 생성자 주입 이름 그대로 생성자를 통해서 의존 관계를 주입 받는 방법 특징 생성자 호출시점에 딱 1번만 호출되는 것이 보장된다. 불변, 필수 의존관계에 사용 생성자가 딱 1개만 있으면 @Autowired를 제외 시킬수 있다. @Component public class OrderServiceImpl implements OrderService{ private final MemberRepository memberRepository; private final DiscountPolicy discountPolicy; @Autowired public OrderServiceImpl(MemberReposit..

Spring 2022.07.24

브릿지(Bridge)패턴

브릿지 패턴 (Bridge Pattern) 이란? 추상적인 것과 구체적인 것을 구분하는 패턴 구현부에서 추상층을 분리하여 각자 독립적으로 변형이 가능하고 확장이 가능하도록 한다. 기능과 구현에 대해서 두 개의 별도의 클래스로 구현을 한다. 브릿지 패턴의 특징 브리지 패턴은 복합 객체를 다시 재정의하여 추상 계층화된 구조이다. 구성 클래스의 연결 부분을 추상 클래스로 변경한다. 이를 통해 각각의 계층이 독립적으로 확장 및 변경 가능 해진다. 브리지 패턴은 기능을 처리하는 클래스와 구현을 담당하는 추상 클래스로 구별한다. 구현 뿐 아니라 추상화도 독립적 변경이 필요할 때 브릿지 패턴을 사용한다 브릿지는 상속 대신 구현을 통해 분리된 객체를 연결한다. 구현을 통해 객체를 연결하면 객체간 종속 관계를 제거할 수..

디자인패턴 2022.07.20

싱글톤 컨테이너

싱글톤 패턴 클래스의 인스턴스가 딱 1개만 생성되는 것을 보장하는 디자인 패턴 이다. 그래서 객체 인스턴스르 2개 이상 생성하지 못하도록 해야한다. pricate 생성자를 사용해서 외부에서 임의로 new 키워드를 사용하지 못하도록 막아야한다. public class SingletonService { //1. static 영역에 객체를 딱 1개만 생성 private static final SingletonService instance = new SingletonService(); //2. public 으로 열어서 객체 인스턴스가 필요하면 이 static 메서드를 통해서만 조회하도록 허용한다. public static SingletonService getInstance() { return instance; ..

Spring 2022.07.10

스프링 컨테이너와 스프링 빈

스프링 컨테이너란? 스프링 컨테이너는 자바 객체의 생명 주기를 관리하며, 생성된 자바 객체들에게 추가적인 기능을 제공하는 역할을 한다. 여기서 말하는 자바 객체를 스프링에서는 빈(Bean)이라고 부른다. 개발자는 new 연산자, 인터페이스 호출, 팩토리 호출 방식으로 객체를 생성하고 소멸시킬 수 있는데, 스프링 컨테이너가 이 역할을 대신해 준다. 즉, 제어 흐름을 외부에서 관리하고 객체들 간의 의존 관계를 스프링 컨테이너가 런타임 과정에서 알아서 만들어 준다. 스프링 컨테이너의 종류 BeanFactory와 ApplicationContext가 있다. BeanFactory는 빈을 등록하고 생성하고 조회하고 돌려주는 등 빈을 관리하는 역할이다. getBean() 메서드를 통해 빈을 인스턴스화 할수 있다. Ap..

Spring 2022.07.10

프로토타입(Prototype) 패턴

프로토타입 패턴 이란? 인스턴스를 사용해 새롭게 생성할 객체의 종류를 명시하여 새로운 객체가 생성될 시점에 인스턴스의 타입이 결정되도록 하는 패턴이다. 적용 가능한 경우 1. 코드가 복사해야 하는 구현 클래스에 의존하지 않아야 하는 경우 프로토타입 패턴을 사용할 수 있다. 이 경우는 코드가 인터페이스를 통해 써드파티 코드와 함꼐 작동할 경우 많이 발생한다. 2. 객체를 초기화 하는 방식만 다를뿐 서브클래스의 수를 줄이려는 경우 프로토타입 패턴을 사용할 수 있다. 장단점 장점 복한 객체를 만드는 과정을 숨길 수 있다 기존 객체를 복제하는 과정이 새 인스턴스를 만드는 것보다 비용(시간 또는 메모리)적인 면에서 효율적일 수도 있다 추상적인 타입을 리턴할 수 있다 단점 복제한 객체를 만드는 과정 자체가 복잡할 ..

디자인패턴 2022.07.08
반응형