* 객체 지향 (Object Orient)
☞ 실세계 개체를 속성과 메소드가 결합된 형태의 객체로 표현하는 개념
☞ 구현 대상을 하나의 객체로 보고 객체와 객체들 간 관계로 모델링 하는 방법
☞ 개발 측면에서 SW 위기 해결 위한 대안과 생산성 저하에 따른 재사용성, 확장성 필요에 의해 등장
☞ 사용 측면에서 컴퓨팅 환경에 대한 보다 많은 기능, 단순성, 사용 편의성 요구가 증대
◎ 객체 지향 프로그래밍 (Object Oriented Programming)
- 컴퓨터 프로그래밍 패러다임 중 하나
- 컴퓨터 프로그램을 명령어 목록으로 보는 시각에서 벗어나 여러 개 독립된 단위(객체)들의 모임으로 파악하고자 함
- 각각의 객체는 메시지 주고 받고, 데이터 처리 가능
- 프로그램을 유연하고 변경 용이하게 만들기 때문에 대규모 SW 개발에 많이 사용됨
- 프로그래밍 더 배우기 쉽게 하고 SW 개발과 보수 간편하게 하며 보다 직관적인 분석 가능케 함
▶ 객체지향 구성
▷ 클래스 (Class)
- 같은 종류 객체들 집합에 공통 속성과 행위 정의
- 객체지향 프로그램 기본적인 사용자 정의 데이터 형
▷ 객체 (Object)
- 클래스 인스턴스 (실제로 메모리 상에 할당된 것)
- 자신 고유 데이터를 가지며 클래스에서 정의한 행위 수행
▷ 속성 (Attribute)
- 객체 데이터
▷ 메소드 (Method)
- 객체 행위 (함수, 메소드)
- 클래스로부터 생성된 객체 사용하는 방법
▷ 메시지 (Message)
- 객체 간 통신
▶ 객체지향 기법
▷ 캡슐화 (Encapsulation)
- 속성과 메소드를 하나로 묶어서 객체로 구성
- Readability 향상 : 유지보수 용이
- 재사용성 높은 SW 개발 가능
- 정보은닉으로 내부 자료 일관성 유지
- 객체 각 인터페이스 이용, 종속성 최소화
▷ 추상화 (Abstraction)
- 공통 성질 추출하여 수퍼클래스로 구성
- 객체 중심 안정된 모델 구축
- 현실 세계 자연스럽게 표현
- 분석 초점이 명확해짐
▷ 다형성 (Polymorphism)
- 동일 이름의 여러 오퍼레이션(메소드)을 다른 사양으로 정의 가능
- 오버로딩 : 매개변수의 수 또는 타입 달리하여 구분
- 오버라이딩 : 부모 클래스 메소드 재정의
▷ 정보 은닉 (Information Hiding)
- 캡슐화된 항목을 다른 객체로부터 숨김
- 메시지 전달에 의해 다른 클래스 내 메소드가 호출됨
▷ 상속성 (Inheritance)
- 부모 클래스 속성과 메소드 상속받아 사용함
- 부모와 자식 클래스 간 관계가 수퍼 클래스와 서브 클래스로 유지됨
- 부모 클래스는 추상적이며, 자식 클래스는 구체적 성질 가짐
▶ 다형성과 상속성 비교
구분 | 다형성 (Polymorphism) | 상속성(Inheritance) |
개념 | 동일 인터페이스에 대해 서로 다른 처리 방식으로 구현 가능한 특성 | 부모(Super) 클래스 Method, Attribute 물려 받는 특성 |
특징 | 동적 Binding (Run Time) | 정적 Binding (Compile Time) |
구조 | 수직/수평적 구조 | 수직적 구조 |
장점 | 명령 단순화, 메모리 절약, 높은 응집도 실현 가능 | 재사용성 향상, 중복 제거, 유지보수성 향상됨 |
단점 | 코드 중복 개발 가능성 | 과도한 상속은 결합도 상승 요인 |
▶ 다형성의 오버로딩과 오버라이딩
구분 | 오버라이딩 (Overriding) | 오버로딩 (Overloading) |
개념 | 상속관계에서 상위 클래스 메소드를 하위 클래스에서 재정의 | 하나의 클래스 내에서 같은 이름으로 여러 개 메소드 정의 |
메소드 명 | 상속관계 내 동일 | 특정 클래스 내 동일 |
매개변수 개수, 타입 | 반드시 통일 | 개수 또는 타입이 다름 |
리턴 타입 | 기본적으로 동일 | 상관 없음 |
접근 제한 | 범위 같거나 넓어야 함 | 상관 없음 |
▶ 객체지향 설계 원칙
▷ 단일 책임 원칙 (SRP, Single Responsibility Principle)
- 객체는 단 하나의 책임만을 가져야 함
- 어떤 클래스를 변경해야 하는 이유는 오직 하나뿐이어야 함 (책임=변경 사유)
- 같은 이유로 변화하는 것끼리 묶고, 다른 이유로 변화하는 것끼리 분리
▷ 개방 폐쇄 원칙 (OCP, Open-Closed Principle)
- 기존 코드 변경하지 않으면서 기능 추가할 수 있도록 설계 되어야 함
- SW 개체 (Classes, Modules, Functions 등)는 확장에는 열려있고 수정 시에는 닫혀있어야 함
- 클래스 변경하지 않고도 그 클래스 둘러싼 환경 변경할 수 있는 설계가 되어야 함
▷ 리스코프 치환의 원칙 (LSP, Liskov Substitution Principle)
- 부모 클래스와 자식 클래스 사이 행위가 일관성이 있어야 함
- 일반화 관계 (is kind of 관계)에 대한 것으로 자식 클래스는 최소한 자신 부모 클래스에서 가능한 행위는 수행 가능해야 함
- 부모 클래스 인스턴스를 자식 클래스 인스턴스로 대체해도 프로그램 의미는 변화되지 않음
- 서브 타입은 언제나 자신 기반 타입으로 교체 가능해야 함
▷ 인터페이스 분리 원칙 (ISP, Interface Segregation Principle)
- 인터페이스를 클라이언트에 특화되도록 분리하라는 설계 원칙
- 하나의 일반적인 인터페이스보다 구체적인 여러 개 인터페이스가 나음
▷ 의존성 역전의 원칙 (DIP, Dependency Inversion Principle)
- 의존 관계 맺을 때 변화하기 쉬운 것 또는 자주 변화하는 것보단 변화하기 어렵거나 거의 변화가 없는 것에 의존하라는 것
- 추상화된 것에 의존하게 만들고 구체 클래스에 의존하도록 만들지 않도록 함
단일 책임 원칙 (SRP) | |
개방 폐쇄 원칙 (OCP) | |
리스코프 치환 원칙 (LSP) | |
인터페이스 분리 원칙 (ISP) | |
의존성 역전 원칙 (DIP) |
* 디자인 패턴 (Design Pattern)
☞ 반복적으로 나타나는 문제들 해결해 온 전문가들 경험을 모아서 정리한 일관된 솔루션
☞ 설계 재사용을 통해 생산성 향상을 위한 기법
☞ SW 프로그래머들이 유용하다고 생각되는 객체들 간 일반적인 상호작용 방법들을 모은 목록
☞ GoF (Gang of Four) 분류가 많이 활용되고 있음
▶ 디자인 패턴 구성
▷ 패턴 이름 및 유형
- 설계 의도 표현하며 한 두 단어로 설계 문제와 해법 서술
▷ 문제 및 배경
- 해결해야 할 문제와 그 배경 설명하며 언제 패턴을 사용하는지 서술
▷ 해결
- 설계 구성 요소와 그 요소들 간 관계, 책임, 협력 관계 서술
▷ 사례
- 간단한 적용 사례 서술
▷ 결과
- 디자인 패턴 적용해서 얻는 결과와 장/단점 서술
▷ 샘플 코드
- 패턴이 적용된 원시 코드 기술
◎ GoF (Gang of Four) 디자인 패턴의 분류
목적 | 생성 패턴 | 구조 패턴 | 행위 패턴 | |
암기 TIP | FSABP | ABCD2FP | T2I2C2S2MVO | |
의미 | 객체 생성 방식 결정하는 패턴 | 객체 조직화하는데 유용한 패턴 | 객체 행위를 조직, 관리, 연합하는데 사용하는 패턴 | |
범위 | 클래스 | Factory method | Adapter | Template method Interpreter |
객체 | Singleton Abstract factory Builder Prototype |
Bridge Composite Decorator Facade Fly weight Proxy |
Iterator Command Chain of Responsibility State Strategy Mediator Memento Visitor Observer |
1. 생성 패턴 (Creation Pattern)
- 객체 인스턴스 생성 위한 클래스 정의와 객체 생성 방식 구조화, 캡슐화 방법 등 제공
▶ 생성 패턴 종류
종류 | 개념 |
Factory method | - 객체 생성하기 위한 인터페이스 따로 정의하며 어떤 클래스에서 객체 생성하는 일을 서브 클래스가 담당토록 하는 패턴 -Virtual-Constructor 패턴 |
Singleton | - 지정한 클래스 인스턴스가 반드시 한 개만 존재하도록 하는 패턴 |
Abstract factory | - 구체적인 클래스 지정 않고 관련성 갖는 객체들 집합을 생성하거나 서로 독립적인 객체들 집합을 생성 할 수 있는 인터페이스 제공하는 패턴 |
Builder | - 복잡한 객체 생성 방법과 표현 방법 정의하는 클래스를 별도 분리해 서로 다른 표현이라도 이를 생성할 수 있는 동일한 절차 제공하는 패턴 |
Prototype | - 원본이 되는 인스턴스 사용해 생성할 객체 종류 명시하고, 견본 복사해 새로운 객체 생성하는 패턴 |
2. 구조 패턴 (Structural Pattern)
- 다른 기능 가진 객체 간 협력 필요 시 객체들 조직화 하는 방법, 기능 구현 위해 객체 구성하는 방식 제공
▶ 구조 패턴 종류
종류 | 개념 |
Adaptor | - 클래스 재사용성 높이기 위해 클래스 간 기능 변환 제공하여 호환성 확보하는 패턴 |
Bridge | - 인터페이스(API)가 서로 다른 클래스 연결하는 패턴으로 기능 계층과 구현 계층 연결시키는 패턴 |
Composite | - 복잡한 객체 구조 표현하여 객체 집합 속에 또 다른 객체 집합 갖는 패턴 |
Decorator | - 새로운 기능 추가될 때마다 새로운 객체 만들고, 이전 객체 기능은 새로운 객체 내부에서도 그대로 유지, 보장해주는 패턴 |
Facade | - 서브 시스템 복잡할 경우 간단한 인터페이스 통해 서브 시스템 주요 기능 사용 가능한 패턴 |
Fly weight | - 인스턴스를 가능한 한 공유시켜 불필요한 생성 하지 않도록 하는 패턴 |
Proxy | 객체 접근 제어하려는 목적으로 인터페이스 역할 하는 객체 사용하여 제어하는 패턴 |
3. 행위 패턴 (Behavioral Pattern)
- 객체 간 기능 분배하는 일과 같은 로직 수행에 주로 이용하여 객체 간 연동에 대한 유형 제공
▶ 생성 패턴 종류
종류 | 개념 |
Template method | - 상위 클래스에서 처리 흐름 정하고 하위 클래스에서 구체적인 내용 재정의 하는 패턴 |
Interpreter | - 간단한 언어 문법 정의하는 방법과 그 언어로 문장 구성하는 방법, 문장 해석하는 방법 제시하는 패턴 |
Iterator | - 집합 객체 요소들 내부 표현 방식 공개하지 않고, 순차적으로 접근하는 구조 제공하는 패턴 |
Command | - 요청 자체를 객체화(캡슐화(하고 매개변수 추가하여 여러 가지 요구사항 추가할 수 있는 패턴 (로그 기록, 작업 취소 지원) |
Chain of Responsibility | - 요청 처리 가능한 기회를 하나 이상 객체에 부여함으로써 객체 간 결합도 없애려는 패턴 |
State | - 상태를 일반적인 데이터 변수로 두지 않고 객체로 만들어 그 상태에 따른 행동들 분리한 패턴 |
Strategy | - 상황에 따라 알고리즘 변경 필요 시, 각 알고리즘 클래스들을 공통된 인터페이스에 맞게 구현하여 다형성 활용하는 패턴 |
Mediator | - 중재자 통해 한 집합에 속해 있는 객체들 상호 작용을 캡슐화 하는 패턴 |
Memento | - 어떤 시점에서의 객체 상태 저장해 두었다가 필요 시 객체를 그 시점 상태로 되돌리는 패턴 |
Visitor | - 데이터 구조 안을 돌아다니는 주체인 "방문자" 나타내는 클래스 준비해서 그 클래스에게 처리 맡김으로서 기능 추가 시 유연성 제공하는 패턴 |
Observer | - 한 객체 상태가 바뀌면 그 객체에 의존하는 다른 객체들에게 통지되고 필요 시 자동으로 내용 갱신되는 패턴 |
◎ 객체 지향 분석 (Object Oriented Analysis)
- 사용자 요구사항 분석하여 요구되는 사항과 관련된 모든 객체, 클래스와 연관된 속성, 연산, 관계 등을 정의하여 모델링하는 작업
- 분석가에게 중요한 클래스, 객체, 속성, 연산 등을 표현해서 문제를 모형화 할 수 있게 해줌
1. 객체 지향 분석 방법론
ㄱ. Rumbaugh(럼바우) 방법론 (OMT; Object Modeling Technique)
- 가장 일반적으로 사용되는 방법
- 분석 활동을 객체 모델, 동적 모델, 기능 모델로 나누어 수행하는 방법
- 절차 : 객체 모델링 → 동적 모델링 → 기능 모델링
▶ 럼바우 방법론 분석 절차
① 객체 모델링 (Object Modeling)
- 정보 모델링
- 시스템에서 요구되는 객체 찾아내 속성과 연산 식별
- 객체들 간 관계 규정하여 그래픽 다이어그램으로 표시
- 실세계 문제 영역으로부터 객체와 클래스 추출해 그들 간 관계를 연관화, 집단화, 일반화 중심으로 규명하며, 클래스 속성과 연산 함께 표현함으로써 시스템 정적 구조 생성
② 동적 모델링 (Dynamic Modeling)
- 상태 다이어그램 사용해 시스템 행위 기술
③ 기능 모델링 (Function Modeling)
- 자료 흐름도(DFD) 이용, 다수 프로세스들 간 자료 흐름 중심으로 처리 과정 표현
- 어떤 데이터 입력하면 어떤 결과 구할 것인지 표현
ㄴ. Booch (부치) 방법
- 요구사항 분석 하는 과정에서 절차 지향 프로그램으로 개발하려면 '동사' 식별하고, 객체 지향 프로그램으로 개발하려면 '명사' 선택하라고 했음
- 미시적(Micro) 개발 프로세스와 거시적 (Macro) 개발 프로세스 모두 포함해 사용
- 클래스와 객체들 분석 및 식별하고 클래스 속성과 연산 정의
- 클래스와 객체들 의미 식별, 클래스와 객체들 관계 식별, 클래스와 객체 구현
- 각 작업에 대한 다이어그램, 클래스 계층 정의, 클래스들 클러스터링 작업 수행
- Use Case 강조하여 사용하는 분석 방법
ㄷ. Coad(코드)와 Yourdon(요든) 방법
- 객체 지향 분석 방법론 중 E-R 다이어그램 사용하여 객체 행위 모델링
- 객체 식별, 구조 식별, 속성과 인스턴스 연결 정의 등의 과정으로 구성되는 것
- E-R 다이어그램은 Coad & Yourdon 분석법의 기본 스타일
ㄹ. Wirfs-Brock (워프스-브록) 방법
- 분석과 설계 간 구분 없고 고객 명세서 평가해 설계 작업까지 연속적으로 수행하는 기법
'정보처리기사 > 필기' 카테고리의 다른 글
[정보처리기사] Part01-04-2. 인터페이스 대상 식별 (0) | 2022.02.25 |
---|---|
[정보처리기사] Part01-04-1. 인터페이스 요구사항 확인 (0) | 2022.02.25 |
[정보처리기사] Part01-03-1. 공통 모듈 설계 (0) | 2022.02.25 |
[정보처리기사] Part01-02-2. UI 설계 (0) | 2022.02.24 |
[정보처리기사] Part01-02-1. UI 요구사항 확인 (0) | 2022.02.24 |
댓글