객체지향 : 소프트웨어의 각 요소들을 객체로 만든 후, 객체들을 조립해서 소프트웨어를 개발하는 기법
- 소프트웨어의 재사용 및 확장이 용이하여 고품질의 소프트웨어를 빠르게 개발할 수 있고 유지보수가 쉽다
1. 객체지향의 구성 요소
(1) 객체 (Object)
- 데이터와 이를 처리하기 위한 함수를 묶어 놓은 소프트웨어 모듈
- 데이터 : 객체가 가지고 있는 정보로, 속성이나 상태, 분류 등
(2) 클래스 (Class)
- 공통된 속성과 연산을 갖는 객체의 집합
- 각각의 객체들이 갖는 속성과 연산을 정의하고 있는 틀
- 클래스에 속한 각각의 객체를 인스턴스라고 한다.
(3) 메시지 (Message)
- 객체들 간의 상호작용을 하는데 사용되는 수단으로, 객체에게 어떤 행위를 하도록 지시하는 명령 또는 요구사항
- 메시지를 받은 객체는 대응하는 연산을 수행하여 예상된 결과를 반환
2. 객체지향의 특징
(1) 캡슐화 (Encapsulation)
- 외부에서의 접근을 제한하기 위해 인터페이스를 제외한 세부 내용을 은닉하는 것
- 캡슐화된 객체는 외부 모듈을 변경으로 인한 파급 효과가 적다
- 객체들 간 메시지를 주고받을 때 상대 객체의 세부 내용은 알 필요가 없으므로 인터페이스가 단순해지고, 객체 간의 결합도가 낮아진다.
(2) 상속 (Inheritance)
- 상위 클래스의 모든 속성과 연산을 하위 클래스가 물려받는 것
- 하위 클래스는 물려받는 속성과 연산을 다시 정의하지 않아도 즉시 자신의 속성으로 사용할 수 있다.
- 하위 클래스는 상속받는 속성과 연산 외에 새로운 속성과 연산을 첨가하여 사용할 수 있다.
(3) 다형성 (Polymorphism)
- 하나의 메시지에 대해 각각의 객체가 가지고 있는 고유한 방법으로 응답할 수 있는 능력
- 객체들은 동일한 메소드명을 사용하며 같은 의미의 응답을 한다.
메소드 : 어떠한 특정 작업을 수행하기 위한 명령문의 집합
(4) 연관성 (Relationship)
- 두 개 이상의 객체들이 상호 참조하는 관계를 의미
객체지향 분석 (OOA : Object Oriented Analysis)
- 사용자의 요구사항과 관련된 객체, 속성, 연산, 관계 등을 정의하여 모델링하는 작업
- 개발을 위한 업무를 객체와 속성, 클래스와 멤버, 전체와 부분 등으로 나누어서 분석한다.
- 클래스를 식별하는 것이 객체지향 분석의 주요 목적
1. 객체지향 분석의 방법론
(1) Rumbaugh(럼바우) 방법
- 모든 소프트웨어 구성 요소를 그래픽 표기법을 이용하여 모델링하는 기법
- 객체 모델링 기법
객체 모델링 (Object Modeling)
- 정보 모델링
- 시스템에서 요구되는 객체를 찾아내어 속성과 연산 식별 및 객체들 간의 제어 흐름, 상호 작용, 동작 순서 등의 동적인 행위를 표현하는 모델링
동적 모델링 (Dynamic Modeling)
- 상태 다이어그램을 이용하여 시간의 흐름에 따른 객체들 간의 제어 흐름, 상호 작용, 동작 순서 등의 동적인 행위를 표현하는 모델링
기능 모델링 (Functional Modeling)
- 자료 흐름도 (DFD)를 이용하여 다수의 프로세스들 간의 자료 흐름을 중심으로 처리 과정을 표현한 모델링
자료 흐름도 (DFD) : 시스템 구성요소인 프로세스와 프로세스 간 데이터 흐름을 표현하는 주요 도구
2. 객체지향 설계 원칙
- 변경이나 확장에 유연한 시스템을 설계하기 위해 지켜져야 할 원칙
- SOLID 원칙
- 종류
(1) 단일 책임 원칙 (SRP) : 객체는 단 하나의 책임만 가져야 한다는 원칙
(2) 개방-폐쇄 원칙 (OCP) : 기존의 코드를 변경하지 않고 기능을 추가할 수 있도록 설계해야 한다는 원칙
(3) 리스코프 치환 원칙 (LSP) : 자식 클래스는 최소한 부모 클래스의 기능은 수행할 수 있어야 한다는 원칙
(4) 인터페이스 분리 원칙 (ISP) : 자신이 사용하지 않는 인터페이스와 의존 관계를 맺거나 영향을 받지 않아야 한다는 원칙
(5) 의존 역전 원칙 (DIP) : 의존 관계 성립 시 추상성이 높은 클래스와 의존 관계를 맺어야 한다는 원칙
'C++ > C++ CS 개념' 카테고리의 다른 글
디자인 패턴 (0) | 2023.11.09 |
---|---|
생성자, 소멸자, 대입 연산자 (0) | 2023.11.08 |
아키텍처 패턴 (3) | 2023.11.08 |
소프트웨어 생명 주기 (Software Life Cycle) (0) | 2023.11.07 |
const (0) | 2023.10.30 |