1. 객체지향이란?
– 현실 세계의 개체(Entity)를 기계 부품처럼 하나의 객체(Object)로 만들어 소프트웨어를 개발.
– 소프트웨어의 재사용 및 확장이 용이, 유지보수가 쉬움.
– 구성요소: 객체, 클래스, 캡슐화, 상속, 다형성 등. ★★
1. 1. 객체(Object)
: 데이터와 데이터를 처리하는 함수를 묶어 놓은 하나의 소프트웨어 모듈.
- 데이터: 속성, 상태, 변수, 상수, 자료구조
- 함수: 메소드, 서비스, 동작, 행위
1. 2. 클래스(Class) ★
: 공통된 속성과 연산을 갖는 객체들의 집합.
– 각각의 객체들이 갖는 속성과 연산을 정의하고 있는 틀.
– 클래스에 속한 각각의 개체 => 인스턴스(Instance)
1. 3. 캡슐화(Encapsulation) ★
: 데이터와 데이터를 처리하는 함수를 하나로 묶는 것.
– 불필요 기능 최소화, 소프트웨어 개발비용 감소.
– 개발 속도, 재사용성 증가.
– 정보은닉.
– 결합도 감소, 응집도 증가.
1. 4. 상속(inheritance)
: 상위 클래스의 모든 속성과 연산을 하위 클래스가 물려받는 것.
1. 5. 다형성(Polymorphism)
: 하나의 메세지에 대해 여러 형태의 응답이 존재하는 것.
2. 객체지향의 5가지 특징 ★
- 캡슐화(Encapsulation)
- 추상화(Abstraction)
- 상속성(Inheritance)
- 다형성(Polymorphism)
- 정보은닉(Information Hiding)
3. 객체지향 기법에서의 관계성
- is member of: 연관성, 참조 및 이용관계.
- is part of: 집단화, 객체간 구조적인 집약 관계.
- is a: 일반화, 클래스간 개념적인 포함관계.
4. 객체지향 설계 원칙(SOLID) ★★
- 단일 책임 원칙(SRP; Single Responsibility Principle)
: 클래스⋅함수 등은 단 하나의 책임만을 가져야 한다.
- 개방-폐쇄 원칙(OCP; Open-Close Principle)
: 기존의 코드를 변경하지 않고(Close), 기능을 확장(Open)할 수 있도록 설계해야 한다.
- 리스코프 치환 원칙(LSP; Liskov Substitution Principle)
: 자식 클래스는 어디에서나 부모클래스로 교체(치환)할 수 있어야 한다.
- 인터페이스 분리 원칙(ISP; Interface Segregation Principle)
: 자신이 사용하지 않는 인터페이스는 구현하지 않아야 한다.
(= 자신이 사용하지 않는 인터페이스에 영향받지 않아야 한다.)
- 의존 역전 원칙(DIP; Dependency Inversion Principle)
: 의존 관계를 맺을 때, 변화하기 쉬운 것보다 변화하기 어려운 것에 의존해야 한다.
5. 객체지향 분석
5. 1. 객체지향 분석 방법론 ★
- 럼바우(Rumbaugh)방법
– 분석 활동을 객체모델, 동적모델, 기능모델로 나누어 수행. 가장 일반적으로 사용.
- 부치(Booch)방법
– 미시적 개발 프로세스와 거시적 개발 프로세스를 모두 사용.
- Jacobson방법
– Use case를 강조하여 사용.
- Coad와 Yourcon방법
– E-R다이어그램을 사용
- Wirf – Brock방법
– 분석과 설계간 구분이 없음.
5. 2. Rumbaugh의 객체 지향 분석 / 객체 모델링 기법 ★★
객체 모델링: 객체를 찾아내어 관계를 규정. => 객체 다이어그램 (정적)
동적 모델링: 상태를 시간의 흐름에 따라 표시. => 상태 다이어그램 (동적)
기능 모델링: 자료의 흐름을 표시 => 자료흐름도(DFD) (구조적)