객체지향 분석 및 설계에 대한 개념 정리
1. 객체지향 분석의 정의
- 객체지향 분석은 사용자의 요구사항을 바탕으로 객체, 속성(Attributes), 연산(Methods), 그리고 객체 간의 관계를 정의하여 모델링하는 작업입니다.
- 프로그램 개발을 위한 객체, 클래스 멤버, 전체와 부분을 구분하여 분석합니다.
- 객체 지향 분석의 주요 목적은 클래스를 식별하고 정의하는 것입니다.
2. 객체지향 분석 방법론
다양한 객체지향 분석 방법론이 존재하며, 주요 방법론은 다음과 같습니다:
① 럼바우(Rumbaugh) 방법
- 그래픽 표기법을 활용해 소프트웨어의 모든 구성 요소를 모델링하는 기법입니다.
- 분석 단계: 객체 모델링 → 동적 모델링 → 기능 모델링
- 객체 모델링: 시스템에 필요한 객체를 찾고, 속성과 연산을 식별한 후, 객체 간의 관계를 정의합니다. 객체 다이어그램으로 표현합니다.
- 동적 모델링: 상태 다이어그램을 이용하여 시간 흐름에 따른 객체 간의 동작과 상호작용을 표현합니다.
- 기능 모델링: 자료 흐름도(DFD)를 활용하여 데이터 흐름과 프로세스 간의 처리 과정을 나타냅니다.
② 부치(Booch) 방법
- 소프트웨어 개발에서 마이크로(세부적) 프로세스와 매크로(전반적) 프로세스를 혼합한 자동화 도구 활용 기법입니다.
- 클래스 식별 → 객체 분석 → 속성과 연산 정의 과정이 포함됩니다.
③ 제이콥슨(Jacobson) 방법
- 유스 케이스(Use Case)를 중심으로 객체를 모델링하는 기법입니다.
- 시스템이 제공해야 할 기능들을 사용자의 시나리오에 따라 정의합니다.
④ 코드-윤드(Coad-Yourdon) 방법
- ER(Entity-Relationship) 다이어그램을 통해 객체의 구조와 행위를 모델링합니다.
- 객체 식별, 속성과 연산 정리, 객체 간의 메시지와 관계 정의를 중점적으로 다룹니다.
⑤ BPS 방법
- 분석과 설계의 구분이 없는 연속적 개발 방법입니다.
- 고객 명세서를 바탕으로 평가 및 설계를 수행하는 방식입니다.
3. 럼바우 방법의 상세 내용
- 럼바우 방법은 모든 소프트웨어 구성 요소를 그래픽 표기법으로 모델링하는 기법입니다.
- 객체 모델링(Object Modeling), 동적 모델링(Dynamic Modeling), 기능 모델링(Function Modeling)이 순서대로 이루어집니다.
- 이 순서를 기억할 때 "객동기(객체-동적-기능)"라고 외우면 편리합니다.
-
객체 모델링 (정보 모델링)
- 시스템에서 필요한 객체를 식별하고, 객체 간의 관계를 정의합니다.
- 객체 다이어그램을 통해 객체 구조를 시각화합니다.
-
동적 모델링
- 시간 흐름에 따른 객체 간의 동작과 상호작용을 상태 다이어그램으로 표현합니다.
- 상태 변화와 제어 흐름을 시각적으로 나타냅니다.
-
기능 모델링
- 자료 흐름도(DFD)를 활용하여 프로세스 간의 데이터 흐름과 처리 과정을 나타냅니다.
- 데이터 중심의 프로세스를 분석하는 데 중점을 둡니다.
4. 객체지향 설계 원칙 (SOLID 원칙)
객체지향 설계에서 시스템이 변경이나 확장에 유연하도록 하기 위해 SOLID 원칙을 따릅니다.
① 단일 책임 원칙 (SRP, Single Responsibility Principle)
- 하나의 객체는 하나의 책임만 가져야 합니다.
- 객체는 하나의 역할이나 기능에 집중해야 하며, 여러 기능을 동시에 담당해서는 안 됩니다.
② 개방-폐쇄 원칙 (OCP, Open-Closed Principle)
- 소프트웨어는 기능 추가에는 열려(Open) 있고, 코드 변경에는 닫혀(Closed) 있어야 합니다.
- 즉, 기존 코드를 수정하지 않고 새로운 기능을 추가할 수 있도록 설계합니다.
③ 리스코프 치환 원칙 (LSP, Liskov Substitution Principle)
- 자식 클래스는 부모 클래스의 기능을 대체할 수 있어야 합니다.
- 자식 클래스를 부모 클래스로 치환해도 프로그램이 정상적으로 동작해야 합니다.
④ 인터페이스 분리 원칙 (ISP, Interface Segregation Principle)
- 객체는 자신이 사용하지 않는 인터페이스에 의존하지 말아야 합니다.
- 인터페이스는 사용 목적에 따라 여러 개로 나누어, 객체가 필요한 기능에만 의존하게 설계해야 합니다.
⑤ 의존 역전 원칙 (DIP, Dependency Inversion Principle)
- 고수준 모듈과 저수준 모듈은 구체적인 클래스가 아닌 추상 인터페이스에 의존해야 합니다.
- 의존 관계가 성립할 때 구체적 구현보다 추상화에 의존하도록 설계해야 합니다.
5. 객체지향 설계의 중요성
- 객체지향 설계 원칙을 따르면 소프트웨어가 유지보수와 확장이 용이한 구조로 개발됩니다.
- 특히 SOLID 원칙은 개발 과정에서 발생할 수 있는 문제들을 예방하고 효과적으로 해결할 수 있는 기준을 제공합니다.
6. 시험 대비 주요 내용 요약
원칙 | 설명 | 예시 |
---|
SRP | 단일 책임 원칙: 하나의 객체는 하나의 책임만 가짐 | 사용자는 사용자 정보만 관리 |
OCP | 개방-폐쇄 원칙: 기능 추가에 열려 있고 코드 변경에 닫혀 있음 | 기존 코드 수정 없이 새 기능 추가 |
LSP | 리스코프 치환 원칙: 자식 클래스는 부모 클래스를 대체 가능해야 함 | 부모 메서드가 자식에서도 정상 작동 |
ISP | 인터페이스 분리 원칙: 사용하지 않는 인터페이스에 의존하지 않음 | 필요한 기능만 인터페이스로 정의 |
DIP | 의존 역전 원칙: 고수준 모듈은 추상화에 의존해야 함 | 인터페이스에 의존하도록 설계 |
객체지향 분석과 설계는 시험에 자주 출제되는 항목이므로 철저히 학습하고 개념을 명확히 이해하세요!
모델링과 원칙들을 비교하고 연습하면서 공부하면 더욱 효과적입니다.