라기의 IT's time

[SE-06강] 객체지향 소프트웨어 공학

 

[SE-06강]객체지향소프트웨어공학.pdf
0.10MB

학습내용 ☞ 객체지향 소프트웨어 공학
학습목표 ☞ 개체지향의 개념을 이해 할 수 있다. 객체지향의 개발단계와 분석과정을 이해 할 수 있다. 객체지향의 설계, 구현, 테스트 단계를 이해 할 수 있다. 학습내용
1. 객체(object)란?
주체에 반대되는 말. 객관과 거의 동일한 뜻으로 
1)일반적 대상, 사상(事象), 2)주체와 연관됨으로써 이 주체의 행위가 지향하는 것을 의미한다. 더 좁은 뜻에서 
인식론적으로 보면 경험을 통해서 의식에 주어진 대상 또는 인식 주체와의 관계에서 본 실재(實在)라는 것이 된
다.
[네이버 지식백과] 객체 [Object, 客體] (철학사전, 2009, 중원문화)
객체 지향 프로그래밍(OOP)이나 설계에서, 데이터(실체)와 그 데이터에 관련되는 동작(절차, 방법, 기능)을 모두 
포함한 개념. 예를 들어 기차역에서 승차권을 발매하는 경우, 실체인 ‘손님’과 동작인 ‘승차권 주문’은 하나의 객체이다. 실체인 ‘역무원’과 동작인 ‘승차권 발매’도 하나의 객체이다. 같은 성질(구조와 형태)을 가지는 객체는 등급으로 정의하고, 같은 등급에 속하는 객체는 그 등급의 인스턴스라
고 한다.
[네이버 지식백과] 객체 [object, 客體, 客體空間] (IT용어사전, 한국정보통신기술협회)

 

2. 객체지향 소프트웨어 공학의 개념
(1) 객체지향 기법 개념 
1) 현실 세계의 개체(Entity)를 기계의 부품처럼 하나의 객체(Object)로 만들어, 기계적인 
 부품들을 조립하여 제품을 만들듯이 소프트웨어를 개발할 때도 객체들을 조립해서 작성
 할 수 있도록 하는 기법을 말함
2) 객체들 간의 상호작용은 메시지를 통해 이루어짐
3) 클래스는 인스턴스(instance)들이 갖는 변수들과 인스턴스들이 사용할 메소드
 (method)를 가짐
(2) 객체지향 기법의 구성 요소 
1) 객체(Object)
 객체란 필요한 자료 구조와 이에 수행되는 함수들을 가진 하나의 소프트웨어 모듈
 (어트리뷰트+메소드) 
① 어트리뷰트(Attribute) • 객체가 가지고 있는 정보로 속성이나 상태, 분류 등을 나타냄
• 데이터, 속성, 상태, 변수, 상수, 자료 구조라고도 함
• 오브젝트의 상태는 어트리뷰트를 파악함으로써 알 수 있음
② 메소드(Method) • 객체지향 시스템에서 전통적 시스템의 함수(Function) 또는 프로시저(Procedure)
 에 해당하는 연산 기능
• 객체가 메시지를 받아 실행해야 할 객체의 구체적인 연산을 정의한 것
• 객체가 갖는 데이터를 처리하는 알고리즘
• 연산(Operation)이라고도 함
• 오퍼레이션(Operation)은 속성(Attribute)을 변화시킴
2) 클래스 (Class) 
① 클래스는 공통된 속성과 연산(행위)을 갖는 객체의 집합으로 객체의 일반적인 타
 입(Type)을 의미
② 하나 이상의 유사한 객체들을 묶어 공통된 특성을 표현한 데이터 추상화를 의미
③ 모든 객체들은 더 큰 클래스의 멤버이고, 그 클래스에 대하여 이미 정의된 개별 자
 료구조와 연산이 상속이 되며, 그 때문에 개별 객체는 클래스의 인스턴스가 됨
④ 메타 클래스 (Meta Class) 
 클래스의 클래스를 의미하는 것으로 클래스 계층 트리의 최상단에 위치
3) 메시지 (Message) 
① 메시지는 객체(Object)들 간에 상호작용을 하는데 사용되는 수단
② 객체(Object)의 메소드(동작, 연산)를 일으키는 외부의 요구 사항임
③ 메시지의 구성 요소
• 메시지를 받는 객체(수신자)의 이름
• 객체(Object)가 수행할 메소드 이름
• 메소드를 수행할 때 필요한 인자(속성값)
 * 메시지=수신객체이름 + 연산이름 + 인자
④ 메시지 전달은 오브젝트(object)에서 오브젝트로 이루어짐
⑤ 메소드는 오브젝트로부터 메시지를 받을 때 시작되어 짐

 

(=오브젝트가 메시지를 받으면 메소드를 부른다(Invoke))
(3) 객체지향 기법의 기본 원칙 
1) 캡슐화 (Encapsulation) 
① 캡슐화는 데이터(속성)와 데이터를 처리하는 함수를 하나로 묶은 것
② 객체지향 시스템에서 자료부분과 연산(또는 함수)부분 등 정보처리에 필요한 기
 능을 한 테두리로 묶는 것
③ 객체 지향의 기본 원리인 정보은폐와 가장 밀접한 관계가 있음
④ 객체지향 개념에서 연관된 데이터와 함수를 함께 묶어 외부와 경계를 만들고 필
 요한 인터페이스만을 밖으로 드러내는 과정
⑤ 서로 관련 있는 데이터와 연산자를 하나로 묶어서 프로그램의 컴포넌트로 재사
 용할 수 있는 개념
⑥ 객체지향의 캡슐화(encapsulation) 개념이 갖는 장점
• 재사용이 용이
• 인터페이스 단순화
• 변경이 발생할 때 오류의 파급효과가 적음
• 응집도가 향상
2) 정보 은닉 (Information Hiding) 
① 캡슐화에서 가장 중요한 개념
② 다른 객체에서 자신의 정보를 숨기고 자신의 연산만을 통하여 접근을 허용하는 것
③ 정보 은폐라고도 함
④ 목적 : 고려되지 않은 영향(Side Effect)들을 최소화하기 위하여
3) 추상화 (Abstraction)
 추상화는 불필요한 부분을 생략하고 객체의 속성 중 가장 중요한 것에만 중점을 두어 
 개략화하는 것, 즉 모델화하는 것
4) 상속성 (Inheritance) 
① 상속성은 이미 정의된 상위 클래스(부모 클래스)의 모든 속성과 연산을 하위 클래
 스가 물려받는 것을 말함
② 상위 클래스의 속성과 연산을 하위 클래스가 공유할 수 있기 때문에 객체(Object)
 와 클래스의 재사용, 즉 소프트웨어 재사용(Reuse)을 증대시키는 중요한 개념임
5) 다형성 (Polymorphism) 
① 객체지향 시스템에서 서로 다른 Class들이 같은 의미의 응답을 하는 특성
② 한 메시지가 객체에 따라 다른 방법으로 응답할 수 있는 것
③ 많은 상이한 클래스들이 동일한 메소드 명을 이용하는 능력
(4) 객체지향 프로그램의 장점
1) 자연적인 모델링이 가능
2) 소프트웨어의 재사용률이 높아짐

 

3) 소프트웨어의 유지보수성이 향상
3. 객체지향 개발 단계와 분석
(1) 객체지향 소프트웨어 개발모형의 개발 단계
 계획 ⇨ 분석 ⇨ 설계 ⇨ 구현 ⇨ 테스트 및 검증
1) 객체지향 기법을 사용하는 소프트웨어 개발 과정의 가장 큰 특징은 각 과정에서 
 사용되는 객체, 클래스, 메소드, 속성 등이 동일한 개념으로 사용된다는 것임
2) 개발 전 과정에 걸쳐 동일한 방법론과 표현 기법이 적용된다는 장점을 갖고 있음
3) 개발 과정 사이에서 같은 용어와 개념을 사용하여 분석, 설계, 구현 단계 사이의 
 전환이 쉬우므로 각 과정이 명확하게 순차적으로 이루어지지는 않음
4) 분석은 객체를 형상화하는 단계(객체, 동적, 기능 모델링)이고 설계는 객체를 구
 체화하는 것이며 객체 프로그래밍은 객체를 클래스로 정의 또는 명시하는 단계임
(2) 객체지향 분석(OOA, Object Oriented Analysis) 
1) 객체지향 분석은 사용자의 요구사항을 분석하여 요구된 문제와 관련된 모든 클래
 스(객체), 이와 연관된 속성과 연산, 그들 간의 관계 등을 정의하여 모델링하는 작업
2) 분석가에게 주요한 모델링 구성요소인 클래스, 객체, 속성, 연산들을 표현해서 문
 제를 모형화로 할 수 있게 해 줌
3) 객체지향 관점은 모형화 표기법의 전후 관계에서 객체의 분류, 속성들의 상속, 그
 리고 메시지의 통신 등을 결합한 것
4) 객체는 클래스로부터 인스턴스화 되고, 이 클래스를 식별하는 것이 객체지향 분석
 의 주요한 목적임
5) 객체 관계, 행위 모형의 생성
6) 객체와 연관된 자료구조의 표현
(3) 객체지향 분석의 방법론 
1) 럼바우의 분석 기법 (Rumbaugh Method) 
① 모든 소프트웨어 구성 요소를 그래픽 표기법을 이용하여 모델링하는 기법
② 분석 절차: 객체 모델링 ⇨ 동적 모델링 ⇨ 기능 모델링
• 객체 모델링(Object Modeling) - 객체와 클래스를 연관화, 집단화, 일반화 관계를 중심으로 표현함
- 정보 모델링이라고도 하며, 시스템에서 요구되는 객체를 찾아내어 속성과 
 연산 식별 및 객체들 간의 관계를 규정하여 객체 다이어그램(객체도)으로 
 표시하는 것
- 분석 활동의 세 가지 모델 중 가장 중요하며 선행되어야 할 모델링
• 동적 모델링(Dynamic Modeling) - 객체지향 분석 과정 중 객체들의 제어 흐름, 상호 반응, 연산 순서를 나타
 내주는 과정
- 동적 모델링에서는 객체나 클래스의 상태, 사건을 중심으로 다룸
• 기능 모델링(Functional Modeling) - 자료 흐름도(DFD)를 사용하여 프로세스들의 처리 과정을 기술하고, 처리 

 

과정은 프로세스, 제어 흐름, 데이터 흐름, 데이터 저장소, 행위자를 가지
 고 표현함
- 기능 모델링 순서 
 ․ 입/출력 결정
 ․ 자료 흐름도 작성 (기능 의존 관계를 기술)
 ․ 기능의 내용을 상세히 기술
 ․ 제약 사항을 결정하고 최소화
③ 각 모델에서 사용되는 그래픽 기법
• 객체 모델링 - 객체도
• 동적 모델링 - 상태도
• 기능 모델링 - 자료 흐름도
2) 부치(Booch) 
 방법다양한 자동화 도구들을 지원 받으며, 미시적(Micro) 개발 프로세스와 거시
 적(Macro) 개발 프로세스를 모두 사용하는 분석 방법
3) Jacobson 방법
 Use Case를 강조하여 사용하는 분석 방법
4) Coad와 Yourdon 방법
 E-R 다이어그램을 사용하여 개체의 활동들을 데이터 모델링하는 데 초점을 둔 방법
5) Wirfs-Brock 방법
 분석과 설계 간의 구분이 없고, 고객 명세서를 평가해서 설계 작업까지 연속적으
 로 수행하는 방법
4. 객체지향 설계, 구현, 테스트
(1) 객체지향 설계 (OOD, Object Oriented Design) 
1) 객체지향 분석(OOA)을 사용해서 생성한 여러 가지 분석 모델을 설계 모델로 변
 환하는 작업으로, 시스템 설계와 객체 설계를 수행
2) 최근 소프트웨어 제품의 전형적인 타입인 사용자 중심, 대화식 프로그램의 개발에 
 적합한 방식
3) 객체의 속성과 자료구조를 표현함
4) 구체적인 절차를 표현함
5) 서브 클래스와 메시지 특성을 세분화하여 세부사항을 정제화함
(2) 객체지향 구현
1) 구현은 설계 단계에서 생성된 설계 모델과 명세서를 근거로 하여 코딩하는 단계임
2) 객체지향 프로그래밍을 이용하면 용이하게 구현할 수 있음
3) 객체는 순차적으로(Sequentially) 또는 동시적으로(Concurrently) 구현될 수 
 있음
4) 객체지향 프로그래밍 (OOP, Object Oriented Programming) 
① 객체라는 단위를 이용하여 현실 세계에 가까운 방식으로 프로그래밍 함

 

② 현실 세계에 가까운 방식이므로 이해하기 쉽고 조작하기 쉬운 프로그램을 개발
 할 수 있음
③ 유지보수가 쉽고 재사용 가능한 프로그램을 만들 수 있음
④ 이미 개발된 프로그램을 이용해 빠르고 확장된 프로그램을 개발할 수 있음
⑤ 객체모델의 주요 요소는 추상화, 캡슐화, 모듈화, 계층 등이 있음
⑥ 설계 시 자료와 자료에 가해지는 프로세스를 묶어 정의하고 관계를 규명함
⑦ 객체지향 프로그래밍 언어에는 Smalltalk, C++ 등이 있음
(3) 객체지향 테스트 
1) 클래스 테스트 
 구조적 기법에서의 단위테스트와 같은 개념으로 가장 작은 단위, 즉 캡슐화 된 클래
 스나 객체를 검사하는 것 (단위 테스팅에 사용)
2) 통합 테스트
① 객체를 몇 개 결합하여 하나의 시스템으로 완성시키는 과정에서의 검사로, 스레
 드 기반 테스트와 사용 기반 테스트로 분류함
② 분류
• 스레드 기반(Thread-Based) 테스트
• 사용 기반(Use-Based) 테스트
3) 확인 테스트
 사용자 요구사항에 대한 만족 여부를 검사함
4) 시스템 테스트
 모든 요소들이 적합하게 통합되고 올바른 기능을 수행하는지 검사함
요점정리
1. 개체지향의 개념을 정리합니다. 2. 객체지향의 개발단계와 분석과정을 정리합니다. 3. 객체지향의 설계, 구현, 테스트 단계를 정리합니다. 다음차시예고
수고하셨습니다. 다음 7주차에서는 “[SE-07강] 소프트웨어 공학의 발전적 주제 (에필로그)”에 대해서 학습하도록 
하겠습니다.

TOP