반응형 Programing/Design Patterns17 Factory Method Pattern 팩토리메서드 패턴 GoF 디자인패턴 GoF 디자인 패턴 중 생성패턴의 하나인 Factory Method 패턴에 대해 알아보도록 하겠습니다. 특징 팩토리 메서드 패턴 (Factory Method Pattern)은 객체 생성에 관련된 디자인 패턴 중의 하나로, 객체의 생성을 서브클래스로 분리하여 객체를 생성하는 방식을 추상화 하는데 사용됩니다. 추상화된 팩토리 클래스에 대한 인터페이스를 제공하고, 이를 구체화하여 서브클래스에서 실제 객체를 생성하는 메서드를 구현(캡슐화)합니다. 이를 통해 객체 생성 로직을 클라이언트로부터 분리하고, 유연성과 확장성을 제공합니다. 샘플코드 public interface CommonResponse { Object getData(); } public class JpaResponse implements CommonR.. Programing/Design Patterns 2023. 7. 12. Abstract Factory Pattern 추상팩토리 패턴 GoF 디자인패턴 GoF 디자인 패턴 중 생성패턴의 하나인 Abstract Factory 패턴에 대해 알아보도록 하겠습니다. 특징 추상 팩토리 패턴 (Abstract Factory Pattern)은 객체 생성에 관련된 디자인 패턴 중의 하나로, 관련된 객체들의 팩토리를 생성하기 위한 인터페이스를 제공하며, 이 팩토리를 사용하여 서로 다른 객체들의 그룹을 생성할 수 있습니다. 객체들의 생성로직을 클라이언트로부터 분리하여 객체 간 결합도를 낮추고, 유연성과 확장성을 높이는데 사용됩니다. 샘플코드 Jpa와 Mybatis로 응답을 받는 2개의 추상 객체를 정의하고, 각각 응답에 대한 로직을 구현한 구체적인 객체를 생성하는 팩토리를 만들어보겠습니다. public interface CommonResponse { Object getD.. Programing/Design Patterns 2023. 7. 12. Prototype Pattern 프로토타입 패턴 GoF 디자인패턴 GoF 디자인 패턴 중 생성패턴의 하나인 Prototype 패턴에 대해 알아보도록 하겠습니다. 특징 Prototype Pattern 은 자주 사용하는 객체를 생성해 두고 이를 복사하여 사용하는 패턴을 말합니다. Singleton 패턴과 달리 매번 새로운 객체가 생성이 됩니다. @Scope("prototype") 설정으로 Prototype Pattern 으로 동작하게 할 수 있습니다. 참조 변수 필드의 경우 얕은 복사로 처리 되기 때문에 java.lang.Clonable interface를 implements 받아 깊은 복사로 처리되도록 clone method를 구현해야 합니다. 샘플코드 import java.util.ArrayList; import java.util.List; import java.uti.. Programing/Design Patterns 2023. 7. 11. Singleton Pattern 싱글턴 패턴 GoF 디자인패턴 GoF 디자인 패턴 중 생성패턴의 하나인 Singleton 패턴에 대해 알아보도록 하겠습니다. Singleton Pattern은 Spring bean, @Scope("singleton"), MapStruct Mapper 등 많이 사용되는 패턴 중의 하나입니다. 특징 Singleton 은 객체가 오직 한 개의 인스턴스만 갖도록 하는 패턴입니다. Spring을 예로 들면 @Component 관련 어노테이션을 통해 Spring Container에 단 하나의 객체 인스턴스만 생성을 하고, Inject 관련 어노테이션 (@Autowired, @Resource)을 통해 주입하여 사용하게 됩니다. 단점으로는 상속이 불가능 하기 때문에 다형성을 해치는 개념이고, 전역적인 접근을 허용하기 때문에 정보은닉을 해치는 단점이.. Programing/Design Patterns 2023. 7. 11. @Builder Annotation 알짜만 빼먹기 / 객체 생성 방법 @Builder Annotation은 lombok 라이브러리의 annotation 입니다. lombok의 적용은 아래의 Link를 확인하세요. Link : https://aljjabaegi.tistory.com/481 Java 필수 라이브러리 Lombok 사용, 적용방법 Java 필수 라이브러리 Lombok 사용, 적용방법 Lombok 라이브러리는 VO(Value Object) 나 DTO(Data Transfer Object) 생성 시 혁신적으로 코드를 줄여주는 라이브러리 입니다. 얼마나 혁신적으로 코드를 줄이는지 aljjabaegi.tistory.com Eclipse 이외의 다른 IDE에선 extension 설치로 사용 가능합니다. 1. @Builder Annotaion @Builder Annotati.. Programing/Design Patterns 2022. 11. 10. Javascript 퍼사드(façade) 패턴 / 자주 같이 사용되는 메서드를 묶자 Javascript 퍼사드(façade) 패턴 / 자주 같이 사용되는 메서드를 묶자 퍼사드 패턴(façade pattern) 은 주로 같이 자주 사용되는 메서드의 호출들을 묶어 새로운 메소드를 만들어 주는 패턴입니다. 개발을 하다보면 많은 기능을 가지고 있는 메소드를 개별 기능으로 나누어 작성을 하곤 합니다. 기능의 세분화는 좋은 방법이지만 메소드의 수를 증가시키고 메서드간 매개변수가 증가하게 될 수도 있습니다. 퍼사드 패턴을 사용하게 되면 여러 인터페이스를 활용하는 로직을 하나의 통합된 인터페이스를 제공하므로서 쉽게 여러 인터페이스를 활용할 수 있습니다. 예를들어, 지도라는 객체에 마커, 폴리라인, 폴리곤 객체를 추가하는 setMap 메서드가 있습니다. setMap(){ /*지도 객체 초기화 로직*/ .. Programing/Design Patterns 2022. 3. 31. Javascript 전략 패턴(strategy pattern), 데이터 유효성 검증 Javascript 전략 패턴(strategy pattern), 데이터 유효성 검증 런타임에 알고리즘을 선택할 수 있는 전략 패턴에 대해 알아보도록 하겠습니다. 전략패턴은 인터페이스를 유지하면서 특정한 작업을 해야할 때 원하는 알고리즘을 상황에 맞게 선택할 수 있습니다. 데이터의 유효성을 검사하는 Validator Class를 전략패턴을 활용하여 구현해보도록 하겠습니다. 즉시 실행 함수 내 클래스를 작성하고 window.AVT로 접근 가능하게 구현합니다. (function(){ class Validator{ constructor(){ } } window.AVT = new Validator(); })(); 이제 클래스 변수로 유효성 검증 에러 메시지를 출력할 msg, 유효성 검증 로직이 들어갈 types,.. Programing/Design Patterns 2022. 3. 30. Javascript Decorator Pattern 장식자 패턴 객체의 동적 기능 확장 패턴 Javascript Decorator Pattern 장식자 패턴 객체의 동적 기능 확장 패턴 동적으로 객체의 기능을 추가할 수 있는 장식자 패턴(Decorator Pattern) 에 대해 알아보겠습니다. Decorator Pattern 은 객체에 어떤 기능을 동적으로 확장하는데 유용한 패턴입니다. 기능의 순서가 중요하다면 어떤 순서로 기능을 추가할지도 지정할 수 있습니다. 키보드에 기능에 따른 모델명을 출력하는 예제를 만들어보겠습니다. 우선 키보드 클래스를 생성합니다. class Keyboard{ constructor(){ } } 기본 모델명 클래스 변수와 그 변수를 리턴해주는 getModel 메소드를 생성합니다. class Keyboard{ constructor(){ this.model = "PD-";.. Programing/Design Patterns 2022. 3. 22. Javascript iterator, next, hasNext 메소드를 구현해보자 Iterator 패턴 Javascript iterator, next, hasNext 메소드를 구현해보자 Iterator 패턴 Java 에서 iterator 메소드는 Collection 객체를 반복할 때 유용하게 활용되는 메소드 입니다. Javascript 에서도 이를 활용할 수 있도록 오브젝트의 prototype 에 추가하여 모든 객체에서 활용할 수 있도록 구현해봅시다. 배열에는 forEach라는 반복자가 있다는 것은 알아둡시다. Link : https://aljjabaegi.tistory.com/314 javascript forEach 함수에 대해 알아보자. 자바스크립트 forEach 함수 javascript forEach 함수에 대해 알아보자. 자바스크립트 forEach 함수 이번엔 고차함수 세번째 시간 입니다. 이전 포.. Programing/Design Patterns 2022. 3. 21. Javascript Factory Pattern 팩토리 패턴 반복 객체 생성 패턴 Javascript Factory Pattern 팩토리 패턴 반복 객체 생성 패턴 Factory Pattern은 비슷한 객체를 반복적으로 생성해야 할 경우 사용하는 패턴입니다. 객체를 생산하는 공장(Factory)을 구현하는 방법이라고 생각하시면 됩니다. 개발자가 컴파일 단계에서 어떤 객체를 생성해야될지 모르고, 런타임 환경에서 동적으로 객체를 생성해야 할 때도 사용합니다. 예제 코드를 보면서 자세히 설명하도록 하겠습니다. 아래와 같이 자동차 객체를 반복해서 생성해야된다고 합시다. const car1 = { name: "아반떼", price: "1,570 ~ 2,453만원", getInfo: function(){ return this.name+"의 가격은 "+this.price+" 입니다."; } } c.. Programing/Design Patterns 2022. 3. 18. Javascript 다른 객체의 메서드 호출하기 메서드 빌려쓰기 패턴 Javascript 다른 객체의 메서드 호출하기 메서드 빌려쓰기 패턴 어떤 객체에 특정 메소드만 호출해서 쓰고싶은 경우가 있습니다. 물론 상속을 받거나 특정 코드를 ctrl + c, ctrl + v 해서 쓸 수는 있지만 이는 중복코드를 발생시키고 유지보수 측면에서도 좋지 않습니다. 그래서 해당 객체의 메서드에 접근하여 호출하는 방식을 사용하게됩니다. 이를 위해서는 객체의 this를 바인딩 해주는 call, apply, bind 메서드를 활용하게 되는데요. call, apply, bind 메서드의 사용법, 차이점은 아래의 Link를 참고해주세요. Link: https://aljjabaegi.tistory.com/524 javascript call, apply, bind 차이점! 알짜만 빼먹기! javasc.. Programing/Design Patterns 2022. 3. 14. Javascript Mix-In pattern 믹스-인 패턴 여러 객체를 한 객체로 만들기 Javascript Mix-In pattern 믹스-인 패턴 여러 객체를 한 객체로 만들기 Mix-In 패턴은 여러 객체의 정보를 한 객체로 섞는 패턴입니다. 예를들어 복수의 Object들을 하나의 새로운 Object로 만드는 방법이죠. const mix = function(){ const child = {}; for(let arg in arguments){ for(let prop in arguments[arg]){ child[prop] = arguments[arg][prop]; } } return child; } 위의 코드를 보시면 arguments 개수 만큼 반복하면서 arguments의 value값을 child Object에 추가해주어 리턴해줍니다. 그럼 복수개의 오브젝트를 mix 함수의 매개변수로.. Programing/Design Patterns 2022. 3. 13. Javascript 프로퍼티 복사를 통한 상속 패턴 깊은복사 얕은복사 배열 객체 구분 Javascript 프로퍼티 복사를 통한 상속 패턴 깊은복사 얕은복사 배열 객체 구분 부모 객체의 프로퍼티를 자식의 프로퍼티에 추가하는 방법입니다. 예시 코드를 보시죠. const parent = {name: "알짜배기 프로그래머"}; let child = {}; const extend = function(parent, child){ child = child || {}; for(let prop in parent){ child[prop] = parent[prop]; } return child; } child = extend(parent, child); console.log(parent, child) console 창의 결과는 아래와 같습니다. 단순히 반복문을 돌면서 property 값을 추가하기 때문에 같.. Programing/Design Patterns 2022. 3. 11. javascript 설정 객체 패턴 javascript 설정 객체 패턴 설정객체 패턴은 간단하게 객체화된 매개변수 설정하여 전달하는 방식입니다. 예를들어 학생의 이름을 저장하는 함수가 있습니다. 단순하게 기본형 변수 파라메터를 전달받아 처리하도록 했다고 합시다. const addMember(name){ //name 저장 로직... } 그런데 계속적으로 저장해야되는 정보를 추가해 달라는 요청을 받았습니다. '나이를 추가해주세요.' const addMember(name, age){ //name, age 저장 로직... } '성별을 추가해주세요.' const addMember(name, age, gender){ //name, age, gender 저장 로직... } 이런식으로 계속 추가가 된다면, 코드도 보기 싫어지고 순서도 중요해지게 됩니다... Programing/Design Patterns 2021. 10. 28. javascript Memoization Pattern, 메모이제이션 패턴 javascript Memoization Pattern, 메모이제이션 패턴 메모이제이션 패턴(Memoization Pattern) 이란 함수에 캐시할 property를 추가하고 결과를 이 property에 저장하여, 다음번 호출 시점에 같은 연산을 반복하지 않고 캐시된 값을 리턴하는 방법입니다. 이전에 계산한 값을 메모리에 올려놓고 다음번 같은 계산을 할때는 메모리에 있는 값을 리턴하는 방식이므로, 반복적이고 복잡한 연산일 수록 연산 속도를 빠르게 할 수 있습니다. const func = function(param){ if(!func.cache[param]){ let result = {}; //연산시간이 오래 걸리는 로직 func.cache[param] = reuslt; } return func.cach.. Programing/Design Patterns 2021. 10. 28. 이전 1 2 다음 💲 추천 글 반응형