Software Development/DesignPatterns 11

Use-Case Diagram ( Include / Extend )

* Include : Use-case 다이어그램에서 "include" 관계는 한 유즈케이스가 다른 유즈케이스를 포함하고 필수적으로 실행해야 할 때 사용됩니다. 이 관계는 재사용성을 높이고, 유즈케이스 간의 중복을 줄이며, 다이어그램의 복잡성을 줄이는 데 도움을 줍니다.* Extend : Use-case 다이어그램에서 "extend"는 한 유즈케이스가 다른 유즈케이스의 기능을 확장할 때 사용되는 관계를 설명합니다. 이 관계는 특정 조건이 충족될 때 선택적으로 실행될 추가적인 기능을 나타냅니다. 기본 유즈케이스의 실행 흐름이 중단되지 않고, 확장된 유즈케이스가 필요에 따라 추가적인 기능을 제공할 수 있습니다. https://devjaewoo.tistory.com/15

DesignPattern_MVC/MVP/MVVM

beomy.tistory.com/43 [디자인패턴] MVC, MVP, MVVM 비교 웹 개발자로 일을 하면서 가장 먼저 접한 디자인패턴이 바로 MVC 패턴이었습니다. 그만큼 유명하고 많이 쓰이는 디자인패턴인 MVC 패턴과 MVC 패턴에서 파생되어져 나온 MVP 패턴과 MVVM 패턴을 이야 beomy.tistory.com mygumi.tistory.com/304 MVC, MVP, MVVM 무엇인가? :: 마이구미 이 글은 디자인 패턴 중 MVC, MVP, MVVM 패턴을 다룬다. 현재 프론트엔드, 백엔드, 앱 개발에서 많이 들리는 용어이다. 다른 패턴도 있지만, 현재 주로 사용하고, 알려져있는 패턴이라고 볼 수 있다 mygumi.tistory.com brunch.co.kr/@oemilk/113 MVC, M..

리팩토링은 왜 해야할까?

[리팩토링] - 겉으로 드러나는 기능은 그대로 둔 채, 알아보기 쉽고 수정하기 간편하게 소프트웨어 내부를 수정하는 작업 [리팩토링의 목적]- 소프트웨어를 더 이해하기 쉽고 수정하기 쉽게 만드는 것이다. 리팩토링을 수행하면 겉으로 드러나는 기능에 거의 영향을 주지 않은 채 소프트웨어의 코드를 간결하게 변경할 수 있다. 1. 소프트웨어 설계 개선2. 소프트웨어 이해 쉬워짐(코드 간결. 가독성 향상)3. 버그 찾기 쉬워짐4. 프로그래밍 속도 향상 * 소프트웨어 개발에 리팩토링을 적용할 땐 기능을 추가하지말고 코드만 추가해야 한다. 기능을 추가할 땐 코드를 수정하지 말고 기능만 추가해야 한다. 진행 상태를 파악하려면 테스트를 추가하고 그 테스트들이 제대로 되는지 알아내면 된다. =>리팩토링할 때는 코드를 추가하..

7. Command Pattern(커맨드 패턴)

Command Design Pattern(커맨드 패턴) Define 커맨드 패턴을 이용하면 요구사항을 객체로 캡슐화 할 수 있으며, 매개변수를 써서 여러 가지 다른 요구 사항을 집어넣을 수도 있습니다. 또한 요청 내역을 큐에 저장하거나 로그로 기록할 수도 있으며, 작업취소 기능도 지원 가능합니다. Structure - 커맨드 객체는 일련의 행동을 특정 리시버하고 연결시킴으로써 요구사항을 캡슐화 한 것을 의미한다.- 행동과 리시버를 한 객체에 집어넣고, 외부에는 execute()메소드 하나만 외부에 공개한다. 이 메소드 호출에 의해 리시버에서 일련의 작업이 처리된다.- 외부에서는 어떤 객체가 리시버인지, 그 리시버가 무슨일을 하는지 알 수 없고 그냥 execute()메소드만 호출하면 요구사항이 처리된다.A..

6. Singleton Pattern(싱글턴 패턴)

Singleton Design Pattern(싱글턴 패턴) Define 싱글턴 패턴은 해당 클래스의 인스턴스가 하나만 만들어지고, 어디서든지 그 인스턴스에 접근할 수 있도록 하기 위한 패턴. Structure>- 클래스에서 자신의 단 하나뿐인 인스턴스를 관리하도록 만든다. 그리고 다른 어떤 클래스에서도 자신의 인스턴스를 추가로 만들지 못하도록 한다. 인스턴스가 필요하면 반드시 클래스 자신을 거치도록 한다.- 또한 어디스든 이 인스턴스에 접근할 수 있도록 만든다. - getInstance()메소드는 정적 메소드로 어디서든 호출 가능,- 생성자를 private로 선언하여 외부에 노출이 되지 않도록 한다.Advantage - 시스템 상 전역으로 관리되고 단하나의 클래스에서만 정보가 유지되는 것을 원할 때 사용..

5. Abstract Factory Pattern(추상 팩토리 패턴)

Abstract Factory Design Pattern(추상 팩토리 패턴) Define 추상 팩토리 패턴에서는 인터펫이스를 이용하여 서로 연관된, 또는 의존하는 객체를 구상 클래스를 지정하지 않고도 생성할 수 있습니다. Structure 추상 팩토리 패턴을 사용하면 클라이언트에서 추상 인터페이스를 통해 일련의 제품들을 공급받을 수 있다. 이때 실제로 어떤 제품이 생산되는지는 알 필요 없어서 클라이언트와 팩토리에서 생산되는 제품을 분리시킬 수 있다. PlatformOne, PlatformTwo는 구상 팩토리로, 서로 다른 제품군을 구현한다. 클라이언트에서 제품이 필요하면 이 팩토리 가운데 적당한 걸 골라서 쓰면 되기 때문에 제품 객체의 인스턴스를 직접 만들 필요가 없다. Advantage - 팩토리메소드..

4. Factory Method Pattern(팩토리 메소드 패턴)

Factory Method Design Pattern(팩토리 메소드 패턴) Define 팩토리 메소드 패턴에서는 객체를 생성하기 위한 인터페이스를 정의하는데, 어떤 클래스의 인스턴스를 만들지는 서브클래스에서 결정하게 만듭니다. 팩토리 메소드패턴을 이용하면 클래스의 인스턴스를 만드는 일을 서브클래스에게 맡기는 것이다. Structure Creator추상 클래스에서 객체를 만들기 위한 메소드, 즉 팩토리 메소드를 위한 인터페이스를 제공. 실제 팩토리 메소드를 구현하고 제품(객체 인스턴스)를 만들어내는 일은 서브클래스에서만 할 수 있다.사용하는 서브클래스에 따라 생산되는 객체 인스턴스가 결정 Advantage - 객체의 생성을 한군데서 관리할 수 있다. - 동일한 인터페이스 구현으로 새로운 객체가 추가되더라도..

3. Decorate Pattern(데코레이트 패턴)

Decorator Design Pattern(데코레이터 패턴) Define 객체에 추가적인 요건을 동적으로 첨가한다. 데코레이터는 서브클래스를 만드는 것을 통해서 기능을 유연하게 확장할 수 있는 방법을 제공한다. Structure- 데코레이터(OptionalWrapper)의 슈퍼클래스(Interface)는 자신이 장식하고 있는 객체(CoreFunctionality)의 슈퍼클래스와 같다. Example) Advantage- 클래스의 기능들이 동적으로 변경될 소지가 있을 때 사용- 클래스에 동적으로 추가하는 기능들이 앞으로도 더 추가될 수 있을 때 사용- 클래스에 기능들을 여러개로 조합 될 때 미리 정의해두기 너무 많은 클래스가 생성되므로, 즉시 생성이 가능하게 할 때 사용- 한 객체를 여러개의 데코레이터로..

2. Observer Pattern(옵저버 패턴)

Observer Design Pattern(옵저버 패턴) Define 한 객체의 상태가 바뀌면 그 객체에 의존하는 다른 객체들한테 연락이 가고 자동으로 내용이 갱신되는 방식으로 일대다(one-to-many)의존성을 정의 Structure- Subject(주제) : 객체에서 옵저버를 등록하거나 옵저버 목록에서 제거할 수 있다. 또한 모든 옵저버에게 연락을 위한 메소드가 있다.- Observer : 옵저버가 될 가능성이 있는 객체는 반다스 observer인터페이스를 구현해야 한다. 이 인터페이스에는 주제의 상태가 바뀌었을 때 호출되는 update()메소드만 존재한다.- ConcreteObserver(ViewOne,ViewTwo) : Observer인터페이스를 구현하면 무엇이든 옵저버 클래스가 될 수 있다. ..