Software Engineering
-
[Design Pattern] 옵서버 패턴(Observer Pattern)Software Engineering 2020. 6. 6. 21:51
Observer Pattern 어떤 객체에 이벤트가 발생했을 때, 이 객체와 관련된 객체들(옵저버)에게 통지하는 패턴 데이터의 변경이 발생했을 경우 상대 클래스나 객체에 의존하지 않으면서 데이터 변경을 통보할 때 사용 통보 대상 객체의 관리를 Subject클래스와 Observer인터페이스로 일반화함 데이터 변경을 통보하는 클래스(ConcreteSubject)는 통보 대상 클래스나 객체(ConcreteObserver)에 대한 의존성을 없앨 수 있음 결과적으로 옵서버 패턴은 통보 대상 클래스나 대상 객체(ConcreteObserver)의 변경에도 ConcreteSubject 클래스를 수정 없이 그대로 사용할 수 있음 역할이 수행하는 작업 Observer 데이터의 변경을 통보 받는 인터페이스 Subject에서..
-
[Design Pattern] 커맨드 패턴(Command Pattern)Software Engineering 2020. 6. 1. 17:07
Command Pattern 행위 패턴 이벤트가 발생했을 때 실행될 기능이 다양하면서도 변경이 필요한 경우에 이벤트를 발생시키는 클래스를 변경하지 않고 재사용할 수 있게하는 패턴 실행될 기능을 캡슐화하으로써 기능의 실행을 요구하는 호출자 클래스와 실제 기능을 실행하는 수신자 클래스 사이의 의존성을 제거 실행될 기능의 변경에도 호출자 클래스를 수정 없이 그대로 사용할 수 있도록 해줌 역할이 수행하는 작업 Command 실행될 기능에 대한 인터페이스 실행될 기능을 execute 메서드로 선언 ConcreteCommand 실제로 실행되는 기능을 구현(Command 인터페이스를 실체화) Invoker 기능의 실행을 요청하는 호출자 클래스 Receiver ConcreteCommand에서 execute 메서드를 구..
-
[Design Pattern] 스테이트 패턴(State Pattern)Software Engineering 2020. 5. 31. 19:59
State Pattern 행위 패턴 상태에 따라 동일한 작업이 다른 방식으로 실행될 때 해당 상태가 작업을 수행하도록 위임하는 패턴 시스템의 각 상태를 클래스로 분리하고 각 클래스에서 수행하는 행위들을 메서드로 구현 외부로부터 캡슐화하기 위해 인터페이스를 만들어 시스템의 각 상태를 나타내는 클래스로 실체화 역할이 수행하는 작업 State 시스템의 모든 상태에 공통의 인터페이스를 제공 인터페이스를 실체화한 상태 클래스는 기존 상태 클래스를 대신해 교체해서 사용 가능 ConcreteState Context 객체가 요청한 작업을 자신의 방식으로 실행 대부분의 경우 다음 상태를 결정해 상태 변경을 Context 객체에 요청하는 역할도 수행 Context State를 이용하는 역할을 수행 현재 시스템의 상태를 나..
-
[Design Pattern] 싱글턴 패턴(Singleton Pattern)Software Engineering 2020. 5. 29. 20:05
Singleton Pattern 어떤 클래스가 최초 한번만 메모리를 할당하고(Static) 그 메모리에 객체를 만들어 사용하는 디자인 패턴 객체를 하나만 생성하고 그 객체를 어디에서든 참조할 수 있음 역할이 수행하는 작업 Singleton 하나의 인스턴스만을 생헝하는 책임이 있음 getInstance 메서드를 통해 모든 클라이언트에게 동일한 인스턴스를 반환하는 작업을 수행 사용하는 이유 객체 생성을 한번만 하기 때문에 재사용이 가능해 메모리 낭비를 방지할 수 있음 싱글톤으로 생성된 객체는 전역성을 띄기 때문에 다른 객체와 공유 가능 문제점 멀티 스레드 환경에서 동기화 문제인 경합조건 발생 경합조건 메모리와 같은 동일한 자원을 2개 이상의 스레드가 이용하려고 경합하는 현상 싱글톤 인스턴스의 역할이 많거나 ..
-
[Design Pattern] 스트래티지 패턴(Strategy Pattern)Software Engineering 2020. 5. 28. 20:25
Strategy Pattern 행위 패턴으로 분류됨 행위를 클래스로 캡슐화해 동적으로 행위를 자유롭게 바꿀 수 있게 해주는 패턴 같은 문제를 해결하는 여러 알고리즘이 클래스별로 캡슐화되어 있고 이들이 필요할 때 교체할 수 있도록 함으로써 동일한 문제를 다른 알고리즘을 해결할 수 있게하는 디자인 패턴 전략을 쉽게 바꿀 수 있도록 해주는 디자인 패턴 전략이란 어떤 목적을 달성하기 위해 일을 수행하는 방식, 비지니스 규칙, 문제를 해결하는 알고리즘 등 역할이 수행하는 작업 Strategy 인터페이스나 추상 클래스로 외부에서 동일한 방식으로 알고리즘을 호출하는 방법을 명시 ConcreteStarategy 스트래티지 패턴에서 명시한 알고리즘을 실제로 구현한 클래스 Context 스트래티지 패턴을 이용하는 역할을 ..
-
Design Pattern이란?Software Engineering 2020. 5. 27. 10:30
디자인 패턴이란? 소프트웨어를 설계할 때 특정 맥락에서 자주 발생하는 고질적인 문제들이 재발했을 때 재사용할 수 있는 해결책 디자인 패턴 구조 콘텍스트(Context) 문제가 발생하는 여러 상황을 기술, 즉 패턴이 적용될 수 있는 상황을 나타냄 경우에 따라서는 패턴이 유용하지 못한 상황을 나타내기도함 문제(Problem) 패턴이 적용되어 해결될 필요가 있는 여러 디자인 이슈들을 기술 여러 제약 사항과 영향력도 문제 해결을 위해 고려해야함 해결(Solution) 문제를 해결하도록 설계를 구성하는 요소들과 그 요소들 사이의 관계, 책임, 협력 관계를 기술 구체적인 구현 방법이나 언어에 의존적이지 않으며 다양한 상황에 적용할 수 있는 일종의 템플릿 디자인 패턴 종류 GoF라고 불리는 에리히 감마, 리차드 헬름..
-
SOLID 원칙Software Engineering 2020. 5. 23. 19:44
SOLID 객체지향 설계에서 지켜야할 5개의 원칙(SRP, OCP, LSP, ISP, DIP) 변경사항에 유연하게 대처하고 확장성있는 시스템을 만들기 위해 적용 좋은 설계란? 요구사항이나 변경이 있을 때 가능한 영향 받는 부분이 적어야함 1. SRP(Single Responsibility Principle) : 단일 책임 원칙 객체는 단 하나의 책임만 가져야 한다는 원칙 책임이 많으면 서로 다른 역할을 수행하는 코드끼리 강하게 결합될 가능성이 높아짐 책임이 많으면 클래스가 변경될 가능성이 높음 여러 객체들이 하나의 책임만 갖도록 분배하면 시스템에 변화가 생기더라도 영향을 최소화 할 수 있음 2. OCP(Open-Closed Principle) : 개방 폐쇄 원칙 기존의 코드를 변경하지 않으면서(Close..
-
OOP(Objected Oriented Programming) 란?Software Engineering 2020. 5. 23. 13:44
OOP Object Oriented Programming의 약자 객체들이 서로 메시지를 주고 받으며 데이터를 처리 강한 응집력과 약한 결합력을 지향 장점 프로그램을 유연하고 변경이 용이하게 만듬 프로그램의 개발과 유지 보수를 간편하게 만듬 직관적인 코드 분석을 가능하게함 구성 요소 클래스(Class) 동일한 속성과 행위를 갖는 객체들의 집합 객체(Object) 클래스의 인스턴스 메서드(Method) 클래스로부터 생성된 객체를 조작하는데 사용 특징 추상화(Abstaction) 어떤 영역에서 필요로 하는 속성이나 행동을 추출하는 작업 구체적인 사물들의 공통적인 특징을 파악해서 하나의 개념으로 다루는 수단 구체적인 개념보다 추상적인 개념에 의존하면 변경사항에 유연하게 대처할 수 있음 캡슐화(Encapsulat..