# 디자인 패턴

[디자인 패턴] FACADE 패턴
Facade 패턴 Facade 패턴에서 'Facade'는 원래 건물의 정면이라는 뜻을 가지고 있다. 이 패턴에서는 '창구'라는 의미로 해석되며 프로그램이 복잡해질수록 클래스 제어가 힘들어지는데, 이 때 이와 관련된 창구에 '요청'만 함으로써 문제를 해결할 수 있도록 만들어졌다. Database 클래스 > Database에서 값을 읽기 위한 클래스 HtmlWriter 클래스 > 웹 페이지를 만드는 클래스 PageMaker 클래스 > Database 클래스와 HTML Writer를 조합하여 웹 페이지를 만드는 클래스 Main 클래스 > PageMaker 클래스를 이용하는 클래스 결과 를 컨트롤(처리)하고 model값을 갱신 xml > View 이 자체를 이해하긴 하였으나, Model같은 경우
[정보처리기사] 디자인 패턴
디자인 패턴 ( Design Pattern ) 개념 : 소프트웨어 공학의 소프트웨어 설계에서 공통으로 발생하는 문제에 대해 자주 쓰이는 설계 방법을 정리한 패턴 이를 참고하여 개발할 경우, 개발의 효율성과 유지보수성, 운용성이 높아지며, 프로그램 최적화에 도움이 된다. 구성요소 : 패턴의 이름, 문제 및 배경, 솔루션, 사례, 결과, 샘플 코드로 구성되어 있다. 유형 > ### 디자인 패턴의 유형 > 목적에 따라 생성 패턴 / 구조 패턴 / 행위 패턴으로 나뉘고 > >> #### 생성 패턴 >> - 객체 인스턴스 생성에 관여, 클래스 정의와 객체 생성 방식을 구조화, 캡슐화를 수행하는 패턴 > >> #### 구조 패턴 >> - 더 큰 구조 형성을 목적으로 클래스나 객체의 조합을 다루는 패턴 >> 행위 패턴 > >> #### 행위 패턴 클래스나 객체들이 상호작용하는 방법과 역할 분담을 다루는 패턴 > 범위에 따라 클래스 패턴 / 객체 패턴으

영한갓님 JPA 실전 강의 들었는 데 CQS, CQRS 안다, 모른다?
영한갓님의 강의에서 회원의 정보를 수정하기 위해 MemberService에 update 메서드를 추가하던 와중이었습니다. > "update 메서드는 엔티티를 바꾸겠다는 변경성 메서드인데, > 이 메서드의 return type 을 Member로 한다면 update로 조회를 하는 꼴이 돼요. > > command와 query 가 같이 있는 꼴이 되죠. > 그래서 저는 update 메서드의 return type을 void로 하거나 id 값 정도로 해줘요." > > -갓영한님의 말씀- 영한님이 실무를 하시면서 되게 신경쓰는 규칙이라고 느껴지기도 하고, 뭔가 일종의 디자인 패턴인가 싶기도 하고, 대충 문맥은 알겠는 데 저 문장에서 command 와 query라는 단어가 정확히 무슨 뜻이지? 라는 각종 의문이

생성 패턴 - 팩토리 메서드 패턴
팩토리 메서드는 부모 클래스에서 객체들을 생성할 수 있는 인터페이스를 제공하지만, 자식 클래스들이 생성될 객체들의 유형을 변경할 수 있도록 하는 생성 패턴이다. 이는 클라이언트테서 직접 new 연산자를 통해 제품 객체를 생성하는 것이 아닌, 제품 객체들을 생성하는 공장 클래스를 만들고, 이를 상속하는 서브 공장 클래스의 메서드에서 여러가지 제품 객체 생성을 각각 책임 지는 것으로 객체 생성에 필요한 과정을 템플릿 처럼 미리 구성해놓고, 객체 생성에 관한 전처리나 후처리를 통해 생성 과정을 다양하게 처리하여 객체를 유연하게 정할 수 있는 특징이 있다. 적용 시기 팩토리 메서드는 함께 동작해야 하는 객체들의 정확한 유형과 의존 관계를 모르는 경우 팩토리 메서드는 객체 생성 코드와 실제로 사용

[디자인 패턴] 옵저버 패턴(Observer Pattern)
정의 옵저버 패턴(Observer Pattern) 은 한 객체의 상태가 바뀌면 그 객체에 의존하는 다른 객체에게 연락이 가고 자동으로 내용이 갱신되는 방식으로 일대다(ont-to-many) 의존성을 정의한다. > 주제(subject) + 구독자(observer) = 옵저버 패턴 > 구독자는 주제를 구독하고, 각 주제들은 각 주제의 구독자들에게 해당 주제를 준다. > > ex) 시청자가 유튜버를 구독하면, 유튜브가 올린 미디어가 구독자(시청자)에게 보여진다. >❗️ 주의 출판-구독(Publish-Subsribe) 패턴 이랑 다른 패턴이다. 출판-구독 패턴은 출판사와 구독자를 더 세세하게 분리할 수 있는 복잡한 패턴이다. 미들웨이 시스템에서 종종 쓰인다. 의도 옵저버 패턴은 여러 객체에 자신이 관찰 중인 객체에 발생하는 모든 이벤트에 대하여 알리는 구독 메커니즘을 정의할 수 있도록 한다. > 상호 작용하는 객체 사이에는 가

디자인 패턴
디자인 패턴이란? 디자인 패턴은 소프트웨어 디자인 과정에서 자주 발생하는 문제들에 대한 전형적인 해결책으로 코드에서 반복되는 문제들을 해결하기 위해 제시되는 미리 만들어진 청사진으로 볼 수 있다. 표준화된 라이브러리들이나 함수들과 달리 패턴을 붙여 넣는 방식으로 사용할 수 없는데 이는 패턴이 재사용할 수 있는 코드 조각이 아닌 특정 문제를 해결하는 방식을 알려주는 일반적인 개념이기 때문이다. 패턴은 알고리즘과 자주 혼동되는데 이는 두 개념 모두 알려진 문제에 대한 일반적인 해결책을 설명하기 때문이다. 하지만 알고리즘은 어떤 목표를 달성하기 위해 따라야 할 명확한 일련의 절차를 정의하고 패턴은 해결책에 대한 더 상위 수준의 설명이다. 예를 들어 같은 패턴을 두 개의 다른 프로그램에 적용한다면 두 프로그램의 코

MVC패턴과 MVVM 패턴 (2023.09.04)
TIL 최근 팀프로젝트 등을 하면서 좋은 동료분들과 함께 협업을 하고 새롭게 알게된 개발지식이 있습니다. 그건 바로 디자인 패턴! 디자인 패턴은 주로 웹개발을 하시는 분들에게 익숙 한것 같은데, 게임 개발을 공부하는 지금 당장은 얼마나 필요한지를 가늠할 수 없지만! 무엇이든지 궁금한건 알아봐야 합니다! 디자인 패턴이란? 개발을 할때 항상 생각하고 고민해야 하는 부분은 얼마나 내가 만든 코드의 재사용성을 높일 수 있을까? 즉 유지및 보수가 쉬운지이다. 특히 C#과 같은 객체지향프로그램(OOP) 을(를) 잘 설계하는것은 더욱이 어렵다. 예를 들어 오늘 튜터님께서 공유해주신 예시를 보자. 이러한 코드가 있다면 매번 필요할때마다 색을 정하고 초기화 하기에 작업이 번거로워 집니다.
[디자인 패턴] 전략 패턴 (Strategy Pattern)
정의 전략 패턴(Strategy Pattern)은 알고리즘군을 정의하고 캡슐화 해서 각각의 알고리즘군을 수정해서 쓸 수 있게 해준다. 전략 패턴을 사용하면 클라이언트로부터 알고리즘을 분리해서 독립적으로 변경할 수 있다. 의도 1. 전략 패턴은 알고리즘군을 정의하고 캡슐화해서 각각의 알고리즘군을 수정해서 쓸 수 있게 해준다. 2. 전략 패턴을 사용하면 클라이언트로부터 알고리즘을 분리해서 독립적으로 변경할 수 있다. 적용 >#### 예시 오리는 날거나 날지 못하는 상태 (FlyBehavior.interface) 오리가 소리를 내거나 못내는 상태 (QuackBehavior.interface) > > → 오리는 두 가지 상태가 있다. > → A는 B(알고리즘군)가 있다. > → 구성 O (Composition), 상속 X > > 여기서 알고리즘군은 FlyBehavior, QuackBehavio

팀 과제 마무리 및 회고(2023.09.01)
팀 과제의 마무리 9월1일 12시까지 과제를 제출해야해서 오전 중 까지 만들던 프로젝트를 마무리하고 오늘 오후 3시에 시연및 과제 발표를 했습니다. 저희 팀을 제외한 다른 여섯팀의 과제들도 같이 보면서 설명 및 시연을 듣는 유익한 시간이었습니다. 과제 소개 팀 과제 게임 이름: 짭든링 (엘든링의 이름을 패러디했습니다.) 개발 환경: .Net 7.0 / C# 11.0 /데이터 통신 JSON 포맷 참여 인원: 김대열(팀장) / 장현교 / 최장범 / 김어진 개발 일정: 23/08/28 ~ 23/09/01 플레이 화면 GIF: https://github.com/Kim-dae-yeol/ZzabDenRing/issues/27#issue-1876649011 Github ReadMe: https://github.com/Kim-dae-yeol/ZzabDenRing#readme 개발 과정 이번에 팀과제를 하게 된것은 두번째였기 때문에, 저번 미니 프로젝트를
팩토리 매서드 패턴
객체를 생성하는 팩토리 클래스와 객체의 정보를 담는 클래스를 나눠서 작성하는 패턴을 팩토리 매서드 패턴이라 한다. 객체 생성을 따로 만들면 객체 추가하기가 용이하며 객체의 정보를 담는 클래스를 작성할 때 생성 코드를 신경쓰지 않아도 되기 때문에 사용한다.
Builder Pattern
Builder Pattern 빌더 패턴(Builder Pattern) 은 복잡한 객체의 생성 과정과 표현 방법을 분리하여 다양한 구성의 인스턴스를 만드는 생성 패턴이다. 빌더 패턴 탄생 배경 우선 탄생 배경을 보기 전에 점층적 생성자 패턴 을 알아보자. 점층적 생성자 패턴 점층적 생성자 패턴은 필수 매개변수와 함께 선택 매개변수를 0개, 1개, ... 로 받는 형태로, 다양한 매개변수를 입력받아 인스턴스를 생성하고 싶을 때 사용하는 생성자 오버로딩 방식이다. 이런 방식은 클래스 필드가 많으면 많을수록 생성자에 들어가는 인자수가 늘어나 몇번째 인자가 어떤 필드였는지 헷갈릴 수 있다. 또한 매개변수 특성상 순서를 따라야 하기 때문에 매개변수의 순서를 변경할 수 없다. 생성자 만으로는 필드를 선택적으로 생략할 수 있는 방법이 없다. 자바 빈(Java Beans) 패턴 위의 단점을 보완하기 위해 Setter 메소드를
템플릿 메서드 패턴
템플릿 메서드 패턴 공통된 부분이 있고 다른 부분이 있을때 abstract class로 정의하고 다른 부분을 abstract method로 정의하여 이를 상속 받아 따로 정의하여 사용하는 패턴이다. 즉 변경하는 부분과 변경하지 않는 부분을 분리할 수 있다. 쉽게 생각해서 템플릿을 만들어서 이를 사용하는 패턴이라고 보면 된다. 이를 이용하면 하위 클래스가 구조를 변경하지 않고도 로직을 재정의할 수 있다. 자식 클래스와 부모 클래스가 컴파일 시점에 강력하게 결합되는 문제가 있다. 자식 클래스에서는 부모 클래스의 기능을 전혀 사용하지 않는 경우가 있고 부모 클래스의 모든 기능들을 상속 받고 있다. 즉, 부모 클래스에 의존하고 있다. 템플릿 메서드 패턴과 비슷하지만 상속의 단점을 개선하기 위해 위임을 이용하는 전략패턴을 이용할 수 있다. 방법 abstract class 를 정의하고 이를 상속 받아 abstract method를 구현한다. 익명 내부 클래스를 이용한
Redux Store의 디자인 패턴은? pub/sub과 observer
Publish-Subscribe Pattern 리덕스 스토어 자체의 상태 변화를 감지하기 위한 패턴으로는 발행/구독 패턴(Publish-Subscribe Pattern)을 따른다. 줄여서 펍섭패턴은 어떤 이벤트를 발생시키는 subject 객체와, 그 이벤트에 대한 알림을 받기 위해 관찰자 옵저버 객체가 존재한다. 하지만 옵저버 패턴과 다른 점은 그 사이에 이벤트를 처리하는 브로커가 존재한다는 점이다. 옵저버 패턴의 서브젝트는 자신이 직접 오브젝트를 받아 관리하고 이벤트에 대한 알림을 보내지만, 펍섭 패턴의 서브젝트(퍼블리시)는 이벤트 브로커에게 이벤트를 보내고 이벤트 브로커가 옵저버(서브스크라이버)들에게 알림을 보낸다. 중간의 한 단계의 구조가 더 생긴 것이다. 펍섭 패턴을 사용하면 발행자가 직
디자인 패턴 - 전략 패턴
전략 패턴(Strategy pattern) 전략 패턴으로 불리며, 객체지향의 꽃이라고 불린다고 한다. 유사한 행위들을 캡슐화 하여, 객체의 행위를 바꾸고 싶은 경우 직접 변경하는 것이 아니고 전략을 변경하여, 유연하게 확장하는 패턴이다. SOLID 중에서 개방폐쇄 원칙(OCP)와 의존 역전 원칙(DIP)를 따른다. EncodingStategy 인터페이스 Encoder 클래스 NormalStrategy 클래스 AppednStrategy 클래스 Base64Strategy 클래스 Main 클래스 실행결과 강의출처: (https://fastcampus.co.kr/courses/203525)
디자인 패턴 - 파사드 패턴
파사드 패턴(Facade pattern) Fcade는 건물의 앞쪽 정면이라는 뜻인데, 여러 개의 객체와 실제 사용하는 서브 객체의 사이에 복잡한 의존관계가 있을 때, 중간에 facade라는 중간 객체를 두어, 여기서 제공하는 interface만을 활용하여 기능을 사용하는 방식이다. facade는 자신이 가지고 있는 클래스들의 기능을 명확히 알아야 한다! Ftp 클래스 Reader 클래스 Writer 클래스 SftpClient 클래스 Main 클래스 실행결과 강의출처: (https://fastcampus.co.kr/courses/203525)

[CS] 디자인 패턴: 팩토리 패턴
디자인 패턴 팩토리 패턴 (factory pattern) > 객체를 사용하는 코드에서 객체 생성 부분을 떼어내 추상화한 패턴 팩토리 패턴은 상속 관계에 있는 두 클래스에서 상위 클래스가 중요한 뼈대를 결정하고, 하위 클래스에서 객체 생성에 관한 구체적인 내용을 결정하는 패턴이다. 상위 클래스와 하위 클래스가 분리되기 때문에 느슨한 결합을 가지며 상위 클래스에서는 인스턴스 생성 방식에 대해 전혀 알 필요가 없기 때문에 더 많은 유연성을 갖게 된다. 그리고 객체 생성 로직이 따로 떼어져 있기 때문에 코드를 리팩터링하더라고 한 곳만 고칠 수 있게 되니 유지 보수성이 증가된다. 예를 들어 라떼 레시피와 아메리카노 레시피, 우유 레시피라ㄴ 구체적인 내용이 들어 있는 하위 클래

[CS] 디자인 패턴: 싱글톤 패턴
디자인 패턴 싱글톤 패턴 (singleton pattern) > 하나의 클래스에 오직 하나의 인스턴스만 가지는 패턴 하나의 인스턴스를 만들어 놓고 해당 인스턴스를 다른 모듈들이 공유하며 사용하기 때문에 인스턴스를 생성할 때 드는 비용이 줄어드는 장점이 있으나, 의존성이 높아진다는 단점이 있다. 자바스크립트의 싱글톤 패턴 자바스크립트에서 리터럴 {} 또는 new Object로 객체를 생성하게 되면 이 자체만으로 싱글톤 패턴을 구현할 수 있다. 데이터베이스 연결 모듈 싱글톤 패턴은 데이터베이스 연결 모듈에 많이 쓰인다. DB 연결을 하는 것이기 때문에 비용이 더 높은 작업인데 싱글톤 패턴을 통해 데이터베이스 연결에 관한 인스턴스 생성 비용을 아낄 수 있다. 싱글톤 패턴의 단점 싱글톤 패턴은 TDD(Test Driven Development)를 할 때 걸림돌이 된다. TDD를 할 때 주로 단위 테스트를 하는데, 단
디자인 패턴 - 옵저버 패턴
옵저버 패턴(Observer pattern) 변화가 일어 났을 때, 미리 등록되어 있는 다른 클래스에 통보해주는 패턴을 구현 한 것. 보통 event listener에서 해당 패턴을 사용한다. IButtonListener 인터페이스 Button 클래스 Main 클래스 실행결과 강의출처: (https://fastcampus.co.kr/courses/203525)
디자인 패턴 - 데코레이터 패턴
데코레이터 패턴(Decorator pattern) 기존 뼈대(클래스)를 유지하되, 이후 필요한 형태로 꾸밀 때 사용. 확장이 필요한 경우 상속 대신 사용되기도 한다. SOLID 중에서 개방폐쇄 원칙(OCP)와 역전 원칙(DIP)를 따른다. ICar 인터페이스 Hyundai 클래스 HyundaiDecorator 클래스 각 순서대로 아반떼 -> 소나타 -> 그랜져 클래스 Main 클래스 실행결과 강의출처: (https://fastcampus.co.kr/courses/203525)