객체 지향 설계
(1) 객체 지향
1. 객체 지향이란
- 객체 지향은 실세계의 개체를 속성과 메소드가 결합한 형태의 객체로 표현하는 기법이다.
2. 객체 지향 구성요소
구성요소 | 설명 |
클래스 | 특정 객체 내에 있는 변수와 메소드를 담는 틀 |
객체 | 식별 가능한 대상(클래스에 정의된 대로 메모리에 할당) |
메소드 | 클래스로부터 생성된 객체를 사용하는 방법 |
메시지 | 객체 간 상호 작용을 하기 위한 수단 |
인스턴스 | 클래스를 통해 만든 실제의 실형 객체 |
속성 | 한 클래스 내에 속한 객체들이 가지고 있는 데이터 값들을 단위별로 정의 |
3. 객체 지향 기법
- 캡슐화 : 서로 연관된 데이터와 함수를 함께 묶어 경계를 만들고 필요한 인터페이스만을 밖으로 드러내는 기법
- 상속성 : 물려받아 사용
- 다형성 : 하나의 메시지에 대해 각 객체가 가지고 있는 고유한 방법으로 응답할 수 있는 능력
- 추상화 : 추상 클래스를 설정
- 정보 은닉 : 코드 내부 데이터와 메소드를 숨기고 공개 인터페이스를 통해서만 접근이 가능하도록 하는 코드 보안 기술
- 관계성 : 두 개 이상의 엔티티 형에서 데이터를 참조하는 관계를 나타내는 기법
4. 객체 지향 방법론 종류
종류 | 만든이 | 설명 |
OOSE | 야콥슨 | 유스케이스에 의한 접근 방법으로 유스케이스를 모든 모델의 근간으로 활용 |
OMT | 럼바우 | 그래픽 표기법을 이용하여 소프트웨어 구성요소를 모델링하는 방법론 객체 모델링 -> 동적 모델링 -> 기능 모델링 |
OOD | 부치 | 다이어그램 중심으로 개발하는 방법론 |
(2) 디자인 패턴
1. 디자인 패턴이란
- 소프트웨어 공학의 소프트웨어 설계에서 공통으로 발생하는 문제에 대해 자주 스이는 설계 방법을 정리한 패턴
2. 디자인 패턴 구성요소
- 패턴의 이름 : 디자인 패턴을 부를 때 사용하는 이름과 유형
- 문제 및 배경 : 디자인 패턴이 사용되는 분야 또는 배경, 해결하는 문제를 의미
- 솔루션 : 디자인 패턴을 이루는 요소들
- 사례 : 디자인 패턴의 간단한 적용 사례
- 결과 : 디자인 패턴을 사용하면 얻게 되는이점이나 영향
- 샘플 코드 : 디자인 패턴이 적용된 원시 코드
3. 디자인 패턴 종류
▶ 생성 패턴
Builder : 복잡한 인스턴스를 조립하여 만드는 구조
Prototype : 원형을 만들어 놓고 필요한 부분만 수정하는 패턴
Factory Method : 상위 클래스에서 인터페이스 정의하고, 하위 클래스에서 인스턴스를 생성하도록 하는 방식
Abstract Factory : 인터페이스를 제공하는 패턴
Singleton : 전역 변수를 생성하지 않고 객체를 하나만 생성하여 어디서든지 참조할 수 있도록 하는 패턴
▶ 구조 패턴
Bridge : 기능의 클래스 계층과 구현의 클래스 계층을 연결한 후에 구현부에서 추상 계층을 분리하여 확장
Decorator : 구현되어 있는 클래스에 필요한 기능을 추가해 나가는 설계 패턴
Facade : 복잡한 시스템에 대하여 단순한 인터페이스를 제공함으로써 사용자와 시스템 간 구조파악을 쉽게하는 패턴
Flyweight : 다수의 객체로 생성될 경우 본질적인 요소를 클래스 화하여 공유하는 디자인 패턴
Proxy : 실제 객체에 대한 대리 겍체로 실제 객체에 대한 접근 이전에 필요한 행동을 취할 수 있게 하는 패턴
Composite : 객체들의 관계를 트리 구조로 구성하여 부분-전쳬 게층을 표현하는 패턴
Adapter : 기존에 생성된 클래스를 재사용할 수 있도록 중간에서 맞춰주는 역할을 하는 인터페이스를 만드는 패턴
▶ 행위 패턴
Mediator : 중재자를 두고, 중재자에게 모든 것을 요구하게 해주는 디자인 패턴
Interpreter : 여러 형태의 구문을 해석할 수 있게 만드는 디자인 패턴
Iterator : 집합체 안에 들어있는 모든 항목에 접근할 방법을 제공하는 디자인 패턴
Template Method : 상위 작업의 구조를 바꾸지 않으면서 서브 클래스로 작업의 일부분을 수행하는 패턴
Obeserver : 일대 다의 의존성을 가지며 느슨하게 결합하는 디자인 패턴
State : 객체 상태를 캡슐화하여 클래스화하는 디자인 패턴
Visitor : 해당 클래스의 메소드가 각 클래스를 돌아다니며 특정 작업을 수행하도록 만드는 패턴
Command : 실행될 기능을 캡슐화함으로써 주어진 여러 기능을 실행할 수 있는 재사용성이 높은 클래스를 설계하는 패턴
Strategy : 알고리즘을 각각 하나의 클래스로 캡슐화한 다음, 필요할 때 서로 교환해서 사용할 수 있게 하는 패턴
Memento : 객체의 정보를 저장할 필요가 있을 때 적용하는 디자인 패턴
Chain of Responsibility : 동적으로 연결되어 있는 경우에 따라 다르게 처리될 수 있도록 연결한 디자인 패턴