정보처리기사 필기 - 4과목 소프트웨어 공학


4장 객체지향 S/W 공학


138 객체지향 소프트웨어 공학


① 객체지향 기법의 개요


객체지향 기법은 현실 세계의 개체(Entity)를 기계의 부품처럼 하나의 객체로 만들어, 기계적인 부품들을 조립하여 제품을 만들 듯이 소프트웨어를 개발할 때에도 객체들을 조립해서 작성할 수 있도록 하는 기법


· 객체지향 기법은 구조적 기법의 문제점으로 인한 소프트웨어 위기의 해결책으로 채택되어 사용중

· 소프트웨어의 재사용 및 확장을 용이하게 함으로서 고품질의 소프트웨어를 빠르게 개발할 수 있으며 유지보수 쉬움

· 복잡한 구조를 단계적·계층적으로 표현하고, 멀티미디어 데이터 및 병렬 처리를 지원

· 현실 세계를 모형화하여 사용자와 개발자가 쉽게 이해 가능

· 객체지향 기법의 구성 요소 : 객체, 클래스,  메시지


② 객체(Object)


· 객체는 데이터와 데이터를 처리하는 함수를 묶어 놓은 (캡슐화한) 하나의 소프트웨어 모듈

데이터

 · 객체가 가지고 있는 정보로 속성이나 상태, 분류 등을 나타냄

 · 속성, 상태, 변수, 상수, 자료 구조

함수

 · 객체가 수행하는 기능으로 객체가 갖는 데이터(속성, 상태)를 처리하는 알고리즘

 · 객체의 상태를 참조하거나 변경하는 수단이 되는 것을 메소드(Method, 행위), 서비스, 동작, 연산 이라고도 함

 · 기존의 구조적 기법에서의 함수, 프로시저에 해당하는 연산 기능

· 객체는 상태와 행위를 가지고 있음

· 객체는 다른 객체들과 구별될 수 있는 이름을 갖고 있으며, 일정한 기억 장소를 가지고 있음

· 객체의 메소드는 다른 객체로부터 메시지를 받았을 때 수행


③ 클래스(Class)


· 클래스는 공통된 속성과 연산(행위)을 갖는 객체의 집합으로 객체의 일반적인 타입을 의미

· 클래스는 각각의 객체들이 갖는 속성과 연산을 정의하고 있는 틀

· 클래스에 속한 각각의 객체를 인스턴스라 하며, 클래스로부터 새로운 객체를 생성하는 것을 인스턴스화 라고 함

· 동일 클래스에 속한 각가그이 객체(인스턴스)들은 공통된 속성과 행위를 가지고 있으면서, 그 속성에 대한 정보가 ㅓ로 달라서 동일 기능을 하는 여러 가지 객체를 나타내게 됨

· 최상위 클래스는 상위 클래스를 갖지 않는 유일한 클래스를 의미

· 슈퍼 클래스는 특정 클래스의 상위(부모) 클래스이고, 서브클래스는 특정 클래스의 하위(자식) 클래스를 의미


④ 메시지(Message)


· 메시지는 객체들 간에 상호작용을 하는 데 사용되는 수단으로, 객체에게 어떤 행위를 하도록 지시하는 명령 또는 요구사항

· 메시지의 구성 요소 : 메시지를 받는 객체(수신자)의 이름, 객체가 수행할 메소드 이름, 메소드를 수행할 때 필요한 인자(속성값)

· 인자는 옵션, 즉 필요할 때만 사용

· 메시지를 받은 수신 객체는 요구된 메소드(동작, 연산)를 수행하여 결과를 반환하게 됨



139 객체지향 기법의 기본 원칙


객체지향 기법의 기본 원칙에는 캡슐화, 정보 은닉, 추상화, 상속성, 다형성 등이 있으며, 이 중 구조적 기법과 차별되는 개념은 캡슐화, 상속성, 다형성


① 캡슐화(Encapsulation) 


캡슐화는 데이터(속성)와 데이터를 처리하는 함수를 하나로 묶는 것


· 캡슐화된 객체의 세부 내용이 외부에 은폐(정보 은닉)되어, 변경이 발생할 때 오류의 파급 효과가 적음

· 캡슐화된 객체들은 재사용이 용이함

· 객체들 간의 메시지를 주고 받을 때 각 객체의 세부 내용은 알 필요가 없으므로 인터페이스가 단순해지고, 객체 간의 결합도가 낮아짐


② 정보 은닉


캡슐화에서 가장 중요한 개념으로, 다른 객체에게 자신의 정보를 숨기고 자신의 연산만을 통하여 접근을 허용하는 것


· 각 객체의 수정이 다른 객체에게 주는 영향을 최소화하는 기술

· 외부 객체가 특정 객체의 데이터와 함수를 직접 접근하여 사용하거나 변경하지 못하므로 유지보수와 소프트웨어 확장 시 오류 최소화 가능


③ 추상화(Abstraction)


추상화는 불필요한 부분을 생략하고 객체의 속성 중 가장 중요한 것에만 중점을 두어 개략화 하는 것, 즉 모델화 하는 것


· 인간이 복잡한 문제를 다루는데 가장 기본이 되는 방법으로, 완전한 시스템을 구축하기 전에 그 시스템과 유사한 모델을 만들어서 여러 가지 요인들을 테스트할 수 있음

· 추상화는 최소의 비용으로 실제 상황에 대처 가능하고, 시스템의 구조 및 구성을 가시적으로 볼 수 있음


④ 상속성(Inheritance)


상속성은 이미 정의된 상위 클래스(부모 클래스)의 모든 속성과 연산을 하위 클래스가 물려받는 것


· 상속성을 이용하면 하위 클래스는 상위 클래스의 모든 속성과 연산을 자신의 클래스 내에서 다시 정의하지 않고서도 즉시 자신의 속성으로 사용 가능

· 하위 클래스는 상위 클래스로부터 상속받은 속성과 연산 외에 새로운 속성과 연산을 첨가하여 사용 가능

· 상위 클래스의 속성과 연산을 하위 클래스가 공유할 수 있기 때문에 객체와 클래스의 재사용, 즉 소프트웨어 재사용을 증대시키는 중요한 개념

· 다중 상속성(Multiple Inheritance) : 한 개의 클래스가 두 개 이상의 상위 클래스로부터 속성과 연산을 상속받는 것


다형성(Polymorphism)


다형성은 메시지에 의해 객체(클래스)가 연산을 수행하게 될 때 하나의 메시지에 대해 각 객체(클래스)가 가지고 있는 고유한 방법(특성)으로 응답할 수 있는 능력


· 객체(클래스)들은 동일한 메소드명을 사용하며 같은 의미의 응답을 함

· 응용 프로그램 상에서 하나의 함수나 연산자가 두 개 이상의 서로 다른 클래스의 인스턴스들을 같은 클래스에 속한 인스턴스처럼 수행 가능하도록 하는 것



140 객체지향 기법의 생명 주기와 분석


① 객체지향 기법의 생명 주기


· 객체지향 기법을 사용하는 소프트웨어 개발 과정의 가장 큰 특징은 각 과정에서 사용되는 객체, 클래스, 메소드, 속성 등이 동일한 개념으로 사용된다는 것

· 개발 전 과정에 걸쳐 동일한 방법론과 표현 기법이 적용된다는 장점 갖고 있음

· 개발 과정 사이에서 같은 용어와 개념을 사용하여 분석, 설계, 구현 단계 사이의 전환이 쉬우므로 각 과정이 명확하게 순차적으로 이루어지지는 않음

· 객체지향 기법의 생명 주기 : (계획 및 분석) → (설계) → (구현) → (테스트 및 검증)


② 객체지향 분석의 개념


객체지향 분석(OOA; Object Oriented Analysis)은 사용자의 요구사항을 분석하여 요구된 문제와 관련된 모든 클래스(객체), 이와 연관된 속성과 연산, 그들 간의 관계 등을 정의하여 모델링하는 작업


· 소프트웨어를 개발하기 위한 비즈니스(업무)를 객체와 속성, 클래스와 멤버, 전체와 부분 등으로 나누어서 분석

· 분석가에게 주요한 모델링 구성 요소인 클래스, 객체, 속성, 연산 들을 표현해서 문제를 모형화 할 수 있게 해줌

· 객체는 클래스로부터 인스턴스화되고, 이 클래스를 식별하는 것이 객체지향 분석의 주요한 목적


③ 객체지향 분석의 방법론


객체지향 분석을 위한 여러 방법론이 제시되었으며 각 방법론은 다음과 같음


· Rumbaugh(럼바우) 방법 : 가장 일반적으로 사용되는 방법으로 분석 활동을 객체 모델, 동적 모델, 기능 모델로 나누어 수행하는 방법

· Booch(부치) 방법 : 미시적(Micro) 개발 프로세스와 거시적(Macro) 개발 프로세스를 모두 사용하는 분석 방법으로, 클래스와 객체들을 분석 및 식별하고 클래스의 속성과 연산 정의

· Jacobson 방법 : Use Case를 강조하여 사용하는 분석 방법

· Coad와 Yourdon 방법 : E-R 다이어그램을 사용하여 객체의 행위를 모델링하며, 객체 식별, 구조 식별, 주제 저으이, 속성과 인스턴스 연결 정의, 연산과 메시지 연결 정의 등의 과정으로 구성하는 기법

· Wirfs-Brock 방법 : 분석과 설계 간의 구분이 없고, 고객 명세서를 평가해서 설계 작업까지 연속적으로 수행하는 기법


④ 럼바우(Rumbaugh)의 분석 기법


럼바우의 분석 기법은 모든 소프트웨어 구성 요소를 그래픽 표기법을 이요하여 모델링하는 기법으로, 객체 모델링 기법이라고도 함

분석활동은 객체 모델링, 동적 모델링, 기능 모델링을 통해 이루어짐


· 객체 모델링(Object Modeling)

- 정보 모델링이라고도 하며, 시스템에서 요구되는 객체를 찾아내어 속성과 연산 식별 및 객체들 간의 관계를 규정하여 객체 다이어그램으로 표시하는 것

- 분석 활동의 세 가지 모델 중 가장 중요하며 선행되어야 할 모델링

- 객체 모델링의 순서

① 객체와 클래스 식별

② 클래스에 대한 자료 사전 작성

③ 클래스 간의 관계 정의

④ 객체 속성 및 연결 관계 정의

⑤ 클래스를 계층화하고 모듈로 정의

⑥ 생성된 모형을 반복적으로 검정


· 동적 모델링(Dynamic Modeling)

상태 다이어그램(상태도)을 이용하여 시간의 흐름에 따른 객체들 간의 제어 흐름, 상호 작용, 동작 순서 등의 동적인 행위를 표현하는 모델링

- 동적 모델링에서는 객체나 클래스의 상태, 사건을 중심으로 다룸

사건

 하나의 객체로부터 다른 객체에 자극을 주어 객체의 상태를 변화시키는 것

상태

 특정 시점의 객체에 대한 속성 값

- 동적 모델링 순서

① 사건의 상호 작용 순서에 대한 시나리오 작성

② 사건 시나리오를 역할과 시간에 따라 표기한 후 사건 추적도 작성

③ 사건 추적도를 사건 발생자의 관계로 설명하는 사건 흐름도 작성

④ 사건과 상태를 연겨시킨 상태도 작성


· 기능 모델링(Functional Modeling)

- 자료 흐름도(DFD)를 이용하여 다수의 프로세스들 간의 자료 흐름을 중심으로 처리 과정을 표현한 모델링

- 어떤 데이터를 입력하여 어떤 결과를 구할 것인지를 표현하는 것

- 기능 모델링 순서

① 외부와 시스템 간의 입·출력 자료를 정의

② 자료 흐름도 상세화

③ 프로세스 기능에 대한 정의를 기능 명세서로 작성

④ 제약 조건 파악

⑤ 최적화 기준 명세화



141 객체지향 설계, 구현, 테스트


① 객체지향 설계의 개요


객체지향 설계(OOD; Object Oriented Design)는 객체지향 분석(OOA)을 사용해서 생성한 여러 가지 분석 모델을 설계 모델로 변환하는 작업으로, 시스템 설계와 객체 설계를 수행


· 최근 소프트웨어 제품의 전형적인 타입인 사용자 중심, 대화식 프로그램의 개발에 적합

· 객체지향 설계에서 가장 중요한 문제는 시스템을 구성하는 객체와 속성, 연산을 인식하는 것

· 객체지향 설계의 설계 개념은 추상화, 정보 은닉, 기능 독립성, 모듈화, 상속성을 바탕으로 하며 이 중 가장 중요한 개념은 모듈화

· 객체지향 설꼐를 위해 럼바우의 객체지향 설계, 부치의 객체지향 설꼐, 윌리엄 로렌스의 객체지향 설계 방법등이 제안되었으며, 이 중 일반적으로 럼바우의 객체지향 설계가 가장 많이 사용됨

· 일반적으로 객체지향 설꼐 단계의 순서 : '문제 정의→요구 명세화→객체 연산자 정의→객체 인터페이스 결정→객체 구현'


② 럼바우(Rumbaugh)의 객체지향 설계


· 시스템 설계

- 시스템 설계는 전체적인 시스템 구조를 설계하는 것으로 분석 단계의 분석 모델을 서브시스템으로 분할하고, 시스템의 계층을 정의하며 분할 과정 중에서 성능의 최적 방안, 문제 해결 전략, 자원 분해 등을 확정하는 것

- 상세 설계를 위한 중요한 개념과 전략을 결정하고, 서브 시스템과 이들이 할당될 하드웨어를 결정

- 설계 절차

① 시스템을 서브시스템으로 분할

② 동적 모델링을 분석하여 객체들의 병행수행 가능성 파악

③ 서브시스템을 하드웨어와 태스크에 할당

④ 자원 관리 방법 및 공동 자원의 접근 방법 결정

⑤ 시스템의 제어 방식 결정

⑥ 경계 조건의 처리 방법 결정

⑦ 우선 순위 결정 


· 객체 설계

- 객체 설계는 분석 단계에서 만들어진 클래스, 속성, 관계, 메시지를 이용한 통신을 설계 모델로 제작하고 상세화하여 구체적인 자료 구조와 알고리즘 정의

- 정보와 처리를 모듈화하고 데이터 객체와 처리 조작을 연결하며, 추상화, 정보 은닉, 모듈화를 기본으로 하여 소프트웨어 생성

- 설계 절차

① 객체 모델링, 동적 모델링, 기능 모델링을 통합하고 연산 파악

② 연산을 구현하기 위해 알고리즘 설계

③ 자료에 대한 접근 경로 최적화

④ 외부와 상호작용 하기 이한 제어 방식 구현

⑤ 클래스 구조를 조정하여 상속성 향상

⑥ 관계를 설계하고, 객체의 표현 방법을 결정

⑦ 클래스와 관계를 단일 모듈로 생성

 문서화


③ 부치(Booch)의 객체지향 설계


· 자료 흐름도(DFD)를 사용해서 객체를 분해하고, 객체들 간의 인터페이스를 찾아 이것들을 Ada 프로그램으로 변환시키는 기법

· 설계 절차

① 문제를 정의(요구사항 분석)

② 실세계 문제 영역을 소프트웨어로 구현하기 위해 비정형적인 전략을 기술

③ 비정형적 전략을 정형화

④ 위의 ②, 단계를 완전한 설계가 될 때까지 반복

⑤ 서브클래스와 메시지 특성을 세분화하여 세부 사항 정제화

⑥ 객체의 속성과 자료 구조 표현

⑦ 구체적인 절차 표현


④ 윌리엄 로렌슨(William Lorensen)의 객체지향 설계


· 추상화, 상속성, 메시지, 그리고 다른 모든 OOD 개념들을 직접 지원해주는 기능을 가주고 있는 Smalltalk와 같은 프로그래밍 언어로 소프트웨어를 개발하기 위한 기법

· 설계 절차

① 각 서브시스템에 대한 자료 추상화 식별

② 각 추상화에 대한 속성들을 식별

③ 각 추상화에 대한 연산들을 식별

④ 객체들 사이의 통신 메시지 식별

⑤ 시나리오 이용하여 설계 검사

⑥ 적절한 곳에 상속 적용


⑤ 객체지향 구현


· 구현은 설계 단계에서 생성된 설계 모델과 명세서를 근거로 하여 코딩하는 단계

· 객체지향 프로그래밍을 이용하면 용이하게 구현 가능

· 객체는 순차적으로 또는 동시적으로 구현 가능


객체지향 프로그래밍(OOP; Object Oriented Programing)

객체지향 프로그래밍은 새로운 개념의 모듈 단위, 즉 객체라는 단위를 중심으로 하여 프로그램을 개발하는 기법

· 객체라는 단위를 이용하여 현실 세계에 가가운 방식으로 프로그래밍함

· 현실 세계에 가까운 방식이므로 이해하기 쉽고 조작하기 쉬운 프로그램 개발 가능

· 유지보수 쉽고 재사용 가능한 프로그램 제작 가능

· 이미 개발된 프로그램을 이용해 빠르게 확장된 프로그램 개발 가능

· 객체지향 프로그래밍 언어 분

 객체 기반 언어

 Ada, Actor와 같이 객체의 개념만을 지원하는 언어

 클래스 기반 언어

 Clu와 같이 객체와 클래스의 개념을 지원하는 언어

 객체 지향성 언어

 · 객체, 클래스, 상속의 개념을 모두 지원하는 가장 좋은 언어

 · 초기에 발표된 Simula로부터 Smalltalk, C++, Objective C와 같은 언어 있음


⑥ 객체지향 테스트


· 클래스 테스트 : 구조적 기법에서의 단위 테스트와 같은 개념으로 가장 작은 단위, 즉 캡슐화된 클래스나 객체를 검사하는 것

· 통합 테스트 : 객체를 몇 개 결합하여 하나의 시스템으로 완성시키는 과정에서의 검사

 스레드 기반(Thread-Based) 테스트

 시스템에 대한 하나의 입력이나 이벤트에 응답하는 데 요구되는 클래스들을 통합하는 것으로, 각각의 스레드가 통합되고 개별적으로 테스트됨

 사용 기반(Use-Based)테스트

 독립 클래스를 테스트한 후 독립 클래스를 사용하는 다음 계층의 종속 클래스를 테스트함

· 확인 테스트 : 사용자 요구사항에 대한 만족 여부 검사

· 시스템 테스트 : 모든 요소들이 적합하게 통합되고 올바른 기능을 수행하는지 검사



출처 : 2017 시나공 정보처리기사 필기

+ Recent posts