일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 개발자부트캠프추천
- 프로그래머스 이중우선순위큐
- 빈 충돌
- 빈 조회 2개 이상
- KPT회고
- 1주일회고
- 커스텀 헤더
- 개발자 취업
- 프로그래머스
- Python
- JavaScript
- 취업리부트코스
- Spring multimodule
- 단기개발자코스
- 전략패턴 #StrategyPattern #디자인패턴
- TiL
- 파이썬
- jwttoken
- 디자인패턴
- 인프콘 2024
- 99클럽
- 코딩테스트 준비
- 디자인 패턴
- 항해99
- infcon 2024
- spring batch 5.0
- jwt
- @FeignClient
- DesignPattern
- 구글 OAuth login
- Today
- Total
목록백엔드 with java/Design Pattern (7)
m1ndy5's coding blog
잠깐 디자인패턴 정리를 쉬고 스프링 MVC 패턴에 대한 인강을 듣다가 어떨 때는 이걸 사용하고 어떨 때는 저걸 사용하고 싶을 때는 어댑터 패턴을 사용해야한다 라는 말이 나와서 먼저 이에 대해 정리해보려고 한다! 어댑터의 역할 예를 들어 국내에서 쓰던 충전기를 일본에가서 사용하려고 하면 당연히 호환이 안될 것이다. 이때 어댑터를 사용하여 맞춰준 경험이 있을 것이다! 어댑터는 특정 인터페이스를 클라이언트에서 요구하는 형태로 적응시키는 역할을 한다. 객체지향 어댑터 어떤 소프트웨어 시스템에 새로운 업체에서 제공한 클래스 라이브러리를 사용해야 하는데 그 업체에서 사용하는 인터페이스가 기존에 사용하던 인터페이스와 다르다고 가정해 보자 그렇지만 기존 코드를 바꿔서 이 문제를 해결하기엔 일이 너무 복잡해지기 때문에 ..
싱글톤 정의 생성자가 여러 차례 호출되더라도 실제로 생성되는 객체는 하나이고 최초 생성 이후에 호출된 생성자는 최초의 생성자가 생성한 객체를 리턴하는 것 즉 인스턴스가 오직 한개라는 뜻이다. 고전적인 싱글톤 패턴 구현 public class Singleton{ private static Singleton uniqueInstance; private Singleton(){} public static Singleton getInstance(){ if (uniqueInstance == null){ uniqueInstance = new Singleton(); } return uniqueInstance; } }생성자를 private로 선언해 외부에서 인스턴스 생성을 막고 static 변수로 Singleton을 선언..
추상 팩토리 패턴 정의 연관성이 있는 객체 군이 여러개 있을 경우 이들을 묶어 추상화하고, 어떤 구체적인 상황이 주어지면 팩토리 객체에서 집합으로 묶은 객체 군을 구현화 하는 생성 패턴 -> 다양한 구성 요소 별로 '객체의 집합'을 생성해야 할 때 유용 원재료 팩토리 만들기 피자를 만들 때 들어가는 토핑이 조금씩 다르다고 생각해보자. 일단 각 재료를 공급하는 Factory를 만들어보자 public interface PizzaIngredientFactory{ public Dough createDough(); public Sauce createSauce(); public Cheese createCheese(); public Veggies[] createVeggies(); }이 안의 메소드를 전..
팩토리 메소드 패턴 정의 부모 클래스에 알려지지 않은 구체 클래스를 생성하는 패턴이며 자식 클래스가 어떤 객체를 생성할지를 결정하도록 하는 패턴(출처 : 위키백과) 즉 슈퍼클래스에서 new를 사용해서 직접적인 인스턴스를 생성하지 않고 자식클래스에서 생성하도록 한다는 뜻이다. 객체 생성 팩토리 만들기 Pizza orderPizza(String type){ Pizza pizza; if(type.equals("cheese")){ pizza = new CheesePizza(); } else if(type.equals("greek")){ pizza = new GreekPizza(); } else if(type.equals("pepperoni")){ pizza = new PepperoniPizza(); } pizz..
데코레이터 패턴 정의 주어진 상황 및 용도에 따라 어떤 객체에 책임을 덧붙이는 패턴으로, 기능 확장이 필요할 때 서브클래싱 대신 쓸 수 있는 유연한 대안이 될 수 있는 패턴 객체에 요소들을 추가할 때 원본 코드를 수정하지 않고 동적으로 더할 수 있는 패턴이다. OCP(Open-Closed Principle) 확장에는 열려 있지만 변경에는 닫혀있어야 한다는 원칙으로 데코레이터 패턴은 이 원칙을 따른다.(기존 코드를 건드리지 않고 확장을 할 수 있기 때문) 예시 상황 예를 들어서 엽기떡볶이를 시켜먹는다고 상상을 해보자. 떡볶이는 착한맛, 순한맛, 덜매운맛, 오리지널맛, 더매운맛 중에 하나를 선택해야하고 토핑으로는 계란추가, 떡사리 추가, 베이컨 추가, 우동면 추가 등등 여러가지를 추가할 수있고 물론 똑같은 ..
옵저버 패턴의 정의 옵서버 패턴은 객체의 상태 변화를 관찰하는 관찰자들, 즉 옵저버들의 목록을 객체에 등록하여 상태 변화가 있을 때마다 메서드 등을 통해 객체가 직접 목록의 각 옵저버에게 통지하도록 하는 디자인 패턴이다. 주로 분산 이벤트 핸들링 시스템을 구현하는 데 사용된다.(출처: 위키백과) 즉, 한 객체의 상태가 바뀌면 그 객체에 의존하는 다른 객체들에게 연락이가고 내용이 갱신되는 일대다 의존성을 뜻한다. 상태를 저장하고 있는 객체를 Subject, 갱신된 값들을 받는 객체들을 Observer로 보면된다. 보통 Subject Interface와 Observer Interface로 구현한다 public interface Subject{ // Observer 등록 public void registerO..
전략 패턴의 정의 실행 중에 알고리즘을 선택할 수 있게 하는 행위 소프트웨어 디자인 패턴이다. 전략 패턴은 특정한 계열의 알고리즘들을 정의하고 각 알고리즘을 캡슐화하며 이 알고리즘들을 해당 계열 안에서 상호 교체가 가능하게 만든다. (출처 : 위키백과) 즉, 변화할 수 있는 알고리즘을 따로 빼서 캡슐화하고 수정하기 용이하게 만든 패턴이라고할 수 있다. 왜 전략패턴을 사용해야하는가? 우리가 현재 사용하고 있는 애플리케이션 중에 한번에 뚝딱 만들어지고 수정을 거치지 않은 애플리케이션은 없을 것이다. 사용자의 요구를 반영해야하거나 기존 코드가 후져보일 때(?)등 무조건 수정을 거쳐야한다. 이 때 규칙없이 맘대로 짜여 있는 코드를 고쳐야한다면 아주 힘들 것이다! 자바를 배울 때 상속이라는 개념을 배우게 되는데 ..