옐그's 코딩라이프

[TOPCIT][01] VI. 객체 지향 설계 (에센스 정리 요약) 본문

TOPCIT

[TOPCIT][01] VI. 객체 지향 설계 (에센스 정리 요약)

옐그멍이 2023. 2. 10. 01:17

학습 목표

1. 객체 지향 분석과 모델링의 개념을 이해할 수 있다.

2. 객체 지향 설계 개념과 원리를 설명할 수 있다.

3. 정적 및 동적 모델링을 수행하고 UML(Unified Modeling Language)로 표현할 수 있다.

4. 디자인 패턴의 개념과 대표적인 패턴을 열거할 수 있다.

 

핵심 키워드

- 유스케이스, 시퀀스 다이어그램, 액티비티 다이어그램

- 객체, 클래스, 캡슐화, 상속, 다형성, 연관, 집합

- 클래스, 속성, 관계, 연관, 오퍼레이션, 클래스 다이어그램

- 인터랙션 다이어그램(순서 다이어그램, 커뮤니케이션 다이어그램), 상태 다이어그램, 액티비티 다이어그램

- 싱글톤 패턴, 팩토리 메소드 패턴, 퍼사드 패턴, 스트래티지 패턴

01 객체 지향 분석과 모델링 개념

객체 지향이란?

- 주어진 문제영역을 실세계 안에 존재하는 객체의 집합으로 보고 객체들 사이의 상호작용을 나타낸 것

- 객체 지향 분석기법은 3가지 관점(정보, 동적, 기능 관점)을 단계적으로 적용하여 소프트웨어에 요구되는 객체(또는 클래스)를 찾아내고, 객체의 속성과 동작을 밝히는 작업임

 

모델링이란?

대상 시스템의 성능 또는 동작과정 분석을 위하여 이를 간단히 도식화하거나 시스템의 특징을 수학적으로 표현하는 과정

 

모델링의 세가지 관점

1. 기능 관점 : 기능 모델은 소프트웨어가 어떠한 기능을 수행하는가의 관점에서 시스템을 기술함

2. 동적 관점 : 소프트웨어의 동작과 제어에 초점을 맞추어 시스템의 상태와 상태를 변하게 하는 원인들을 묘사함

3. 정보 관점 : 소프트웨어의 정적인 정보구조를 포착하는 경우 사용되며, 시스템에 사용되는 정보 객체를 찾아내고, 이들 객체의 특성, 객체들 사이의 관계와 연관성 구명함

 

유스케이스(Use Case)

- 이해 관계자를 찾아내고, 이해 관계자의 역할에 따라 동질성 있는 집단으로 분류하여 이를 행위자 또는 액터로 분류함

- 각 행위자는 시스템에 대하여 각기 다른 관점과 용도를 가짐

- 이를 바탕으로 각 행위자의 시스템에 대한 용도라 할 수 있는 유스케이스를 식별함

 

정보 모델링

- 시스템 내부에 저장되고 관리되어야 하는 정보를 밝히는 과정

- 수행 결과를 UML의 클래스 다이어그램으로 나타냄

 

동적 모델링

- 시스템을 구성하는 객체의 상태나 동작의 변화 혹은 객체들 사이의 상호 작용에 관심을 두고 클래스들의 오퍼레이션을 찾는 과정

 

기능 모델링

- 기능들은 내부적으로 복잡한 로직을 담고 있으며, 그 안에서 더 작은 규모의 오퍼레이션으로 표현될 수 있음

- 액티비티 다이어그램은 오퍼레이션 안에서 이루어지는 여러 로직들을 활동으로 표현함으로써, 잠재적이고 새로운 오퍼레이션을 도출할 수 있도록 함

 

02 객체 지향 설계와 원리

객체와 클래스

- 클래스란? 유사한 객체들의 모임

- 객체란? 독립적으로 존재하는 실세계의 사물, 객체를 나타냄

- 분류화란? 비슷한 객체를 묶는 작업

- 시스템에 요구되는 데이터의 특성을 규명할 경우에는 각각의 객체들을 기술하는 것보다 묶어진 클래스를 기술하는 것이 편리함

 

캡슐화 (Encapsulation)

- 정보 은닉을 통한 추상화, 독립성 향상을 얻을 수 있는 방법

- 속성과 오퍼레이션을 함께 묶어 보호하려는 방법

 

상속 (Inheritance)

- 상위클래스와 하위클래스는 공통적인 속성과 오퍼레이션을 가짐

- 하위클래스는 각각 하위클래스 간의 공유되지 않는 속성과 오퍼레이션을 가짐

- 상속이란? 일반화를 통해 나타나는 중요한 특성은 상위 클래스에 하위 클래스의 공통적인 속성과 오퍼레이션을 표시하는 것

 

다형성 (Polymorphism)

- 동일한 이름의 오퍼레이션이라도 클래스에 따라 다르게 동작하는 것

- 하나의 함수 이름이나 연산자가 여러 목적으로 사용될 수 있는 것

- 주로 상속 관계에서 사용되어 상위 클래스에 정의된 하나의 오퍼레이션에 대해 각 하위 클래스가 가지고 있는 고유한 방법으로 응답할 수 있도록 유연성을 제공함

 

03 정적 모델링과 동적 모델링

정적 모델링

- 정보 모델링과 같은 개념

(정보 모델링이란? 시스템에 사용되는 데이터베이스의 구조를 알아내어 데이터를 기술함)

- 시간의 개념이 개입되지 않은 객체의 정적인 정보를 밝히는 것

- 정적 모델링을 사용하여 시스템을 구성하는 클래스를 찾아내고 클래스의 속성과 관계를 식별함

 

동적 모델링

- 시스템을 구성하는 객체의 상태나 동작의 변화 혹은 객체들 사이의 상호 작용에 관심을 두고 클래스들의 오퍼레이션을 찾는 과정 

- 객체들 사이의 상호 작용을 통해 클래스의 오퍼레이션을 도출함

모델구분 다이어그램 내용
기능모델 유스케이스 다이어그램 액터와 시스템을 사용하는 다양한 경우, 즉 유스케이스의 관계를 구조적으로 표현
정적모델 클래스 다이어그램 시스템을 구성하는 클래스, 인터페이스 사이의 구조적 연관관계를 표현
객체 다이어그램 특정 시점 객체들의 구조적 상태를 표현
컴포넌트 다이어그램 컴포넌트 구조사이의 관계 표현
배치 다이어그램 소프트웨어, 하드웨어, 네트워크를 포함한 실행 시스템의 물리 구조를 표현
동적모델 시퀀스 다이어그램 시스템 외부 이벤트를 처리하기 위해 시스템 내부 객체 간에 주고받는 동적 메시지를 시간의 흐름에 따라 표현
컬레보에리션 다이어그램 시퀀스 다이어그램과 동일한 내용을 객체 상호 관계의 관점에서 표현
액티비티 다이어그램 시스템 내부의 활동 흐름을 표현
상태차트 다이어그램 시스템 내부의 상태 전이를 표현
패키지 다이어그램 클래스나 유스케이스 등을 포함한 여러 모델 요소들을 그룹화해 패키지를 구성하고 패키지들 사이의 관계를 표현

04 디자인 패턴

디자인 패턴 개념

- 소프트웨어 설계의 특정한 맥락에서 반복해서 해결해야 할 문제에 대해서 일반적이고 재사용이 가능한 해결 방법

  생성 구조 행위
클래스 - Factory Method - Adaptor(class) - Interpreter
- Template Method
객체 - Abstract Factory
- Builder
- Prototype
- Singleton
- Abstract(object)
- Bridge
- Composite
- Decorator
- Facade
- Flyweight
- Proxy
- Chain of Responsibility
- Command
- Interpreter
- Mediator
- Memento
- Observer
- State
- Strategy
- Visitor

목적에 따른 구분

- 생성패턴: 객체의 생성과정에 관여하는 패턴

- 구조패턴: 클래스나 객체의 합성에 관한 패턴

- 행위패턴: 클래스나 객체들이 상호작용하는 방법과 책임을 분산하는 방법을 정의하는 패턴

 

범위에 따른 구분

- 클래스패턴: 클래스와 서브 클래스 간의 관련성을 다루는 패턴

- 객체패턴: 객체 관련성을 다루는 패턴으로서 런타임에 변경할 수 있으며 동적인 성격을 가짐

 

대표적인 디자인 패턴

대분류 문제 유형(사용 목적) 관련 디자인 패턴
객체 생성을 위한 패턴 제품군(Product Family)별 객체 생성 Abstract Factory
부분 생성을 통한 전체 객체 생성 Builder
대행 함수를 통한 객체 생성 Factory Method
복제를 통한 객체 생성 Prototype
최대 N개까지로 객체 생성을 제한 Singleton
구조 개선을 위한 패턴 기존 모듈 재사용을 위한 인터페이스 변경 Adapter
인터페이스와 구현의 명확한 분리 Bridge
객체 간의 부분-전체 관계 형성 및 관리 Composite
객체의 기능을 동적으로 추가, 삭제 Decorator
서브시스템의 명확한 구분 정의 Facade
작은 객체들의 공유 Flyweight
대리 객체를 통한 작업 수행 Proxy
행위 개선을 위한 패턴 수행 가능 객체로까지 요청 전파 Chain of Responsibility
수행할 작업의 일반화를 통한 조작 Command
간단한 문법에 기반한 검증 및 작업 처리 Interpreter
동일 자료형의 여러 객체 순차 접근 Iterator
M:N 객체 관계를 M:1로 단순화 Mediator
객체의 이전 상태 복원 또는 보관 Memento
One Source Multiple Use Observer
객체 상태 추가 시 행위 수행의 원활한 변경 State
동일 목적의 여러 알고리즘 중 선택해서 적용 Strategy
알고리즘의 기본 골격 재사용 및 상세 구현 변경 Template method
작업 종류의 호율적 추가, 변경 Visitor

 

728x90