필기_4과목_9장_객체지향 분석과 설계 - JuNijen/Industrial-Engineer-Information-Processing GitHub Wiki
소프트웨어를 만들 때 현실 세계의 개체(Entity)를 부품처럼 하나의 객체(Object)로 만들어, 객체들을 조립해서 작성할 수 있도록 하는 기법.
- 분석과 설계의 표현에 큰 차이점이 없어 시스템 개발을 용이하게 한다.
- 기능 중심이 아닌 정보 중심, 데이터 중심으로 시스템 개발이 이루어진다.
- 소프트웨어 위기를 극복하기 위해 기존의 분석 기법이 가지고 있는 한계점을 극복하고, 확장성과 적응력이 뛰어난 시스템을 설계하는 데 목적이 있다.
- 구조적 기법의 문제점으로 인한 소프트웨어 위기의 해결책으로 채택되어 사용되고 있다.
- 상속을 통한 재사용과 시스템의 확장이 용이하다.
- 자연적인 모델링에 의해 분석과 설계를 쉽고 효율적으로 할 수 있다.
- 사용자와 개발자 사이의 이해를 쉽게 해준다.
- 대형 프로그램의 작성이 용이하다.
- 소프트웨어 개발 및 유지보수가 용이하다.
- 복잡한 구조를 단계적, 계층적으로 표현할 수 있으며, 소프트웨어 생명주기 상에서 객체를 일관적으로 나타낼 수 있다.
- 프로그래밍 구현을 지원해 주는 정형화된 분석 및 설계 방법이 없다.
- 구현 시 처리 시간이 지연된다.
- 공통된 속성을 명백히 표현 할 수 있고, 객체 간의 종속성을 극소화 할 수 있다.
데이터(속성)와 이를 처리하기 위한 연산(메소드)을 결합시킨 실체이다.
- 데이터 구조와 그 위에서 수행되는 연산들을 가지고 있는 소프트웨어 모듈이다.
- 속성 (Attribute)
- 메소드 (Method)
- 객체의 특성
두 개 이상의 유사한 객체들을 묶어서 하나의 공통된 특성을 표현하는 요소이다. 공통된 특성과 행위를 갖는 객체의 집합이라고 할 수 있다.
- 객체의 유형 또는 타입(Object Type)을 의미한다.
- 한 클래스를 기준으로 하여 그 기준 클래스의 상위 클래스를 슈퍼 클래스, 하위 클래스를 서브 클래스라고 한다.
- 인스턴스(Instance) : 하나의 클래스에 속하는 각각의 객체를 의미하며, 클래스로부터 새로운 객체를 생성하는 행위를 인스턴스화(Instantiation)라고 한다.
외부로부터 하나의 객체에 전달되는 메소드(연산)의 요구를 의미.
- 메시지를 받은 객체는 대응하는 연산을 수행하여 예상된 결과를 반환하게 된다.
- 구성 요소 : 메시지를 받는 객체(수신자)의 이름, 객체가 수행할 메소드 이름, 메소드를 수행할 때 필요한 인자(속성값).
다른 객체들과 식별할 수 있는 속성.
동일 속성과 행위를 갖는 객체들을 하나의 클래스로 분류하는 속성.
하나의 메시지에 대해 각 클래스가 가지고 있는 고유한 방법으로 응답할 수 있는 능력.
같은 연산자라도 각 클래스에 따라 다른 기능을 수행할 수 있다.
이미 정의된 상위 클래스의 메소드를 비롯한 모든 속성을 하위 클래스가 물려받을 수 있는 것을 의미.
불필요한 부분을 생략하고 객체의 속성 중 가장 중요한 것에만 중점을 두어 개략화하는 것이다.
- 데이터의 공통된 성질을 추출하여 슈퍼 클래스를 선정하는 개념.
◆ 추상화의 목적
- 완전한 시스템을 구축하기 전에 그 시스템과 유사한 모델을 만들어서 여러 가지 요인들을 테스트할 수 있기 때문에 , 최소의 비용으로 실제 상황에 대처한다.
- 시스템의 구조 및 구성을 가시적으로 볼 수 있다.
- 사람에게 모델을 보여줌으로써 설명에 도움이 된다.
- 실제 상황 모델의 복잡성이 감소한다.
데이터 구조와 데이터를 조작하는 연산을 묶어 하나의 모듈 내에서 결합하는 것으로 사용자에게는 상세한 구현을 감추고 필요한 사항만 보이게 된다.
- 캡슐화된 객체를 사용할 수 있으며, 객체들 간에 정보 교환이 가능하다.
- 연산 방법이 바뀌어도 연산 자체에는 영향을 주지 않는다.
- 자료가 변해도 다른 객체에 영향을 주지 않기 때문에 독립성이 보장된다.
- 정보의 손상과 오용을 방지한다.
- 정보 은닉(Information Hiding) 개념을 사용한다.
정보 은닉 (Information Hidden)
갭슐화된 정보를 외부에 감추는 것을 의미한다.
- 캡슐 내부의 정보에 대해 외부에서 직접 접근하지 못하도록 캡슐 안에 정의된 절차에 의해서만 접근하게 한다.
사용자의 요구 사항을 분석하여 요구된 문제와 관련된 모든 클래스(객체), 이와 연관된 속성과 연산, 그들 간의 관계 등을 정의하여 모델링하는 작업을 말하고, 객체지향 설계(OOD)는 분석 과정에서 정의된 객체 모델에 대해서 구현이 가능하도록 상세 설계하는 과정을 말한다.
객체 모델링 기법 (OMT; Object Modeling Technique) 라고도 한다.
모든 소프트웨어 구성 요소를 그래픽 표기법을 이용하여 모델링하는 기법이다.
- 객체들의 연관을 강조하며, 조직적인 모델링 방법론을 이용하여 실세계의 문제들을 다른 방법보다 상세하게 나타낸다.
- 시스템의 무엇(객체 모델링)에서 언제(동적 모델링), 어떤 일(기능 모델링)이 일어나는가를 분석한다.
- 분석 절차 : 객체 모델링 > 동적 모델링 > 기능 모델링
실세계 문제 영역으로부터 객체와 클래스를 추출해 그들 간의 관계를 연관화, 집단화, 일반화 중심으로 규명하여 객체 다이어그램 (Object Diagram)으로 나타내는 것이다.
- 클래스의 속성과 연산을 함께 표현함으로써 시스템의 정적 구조를 생성한다.
- 객체 모델링 순서 : 객체 식별 > 객체의 속성 기술 > 연산의 정의 > 객체들 간의 통신(관계) 정의 > 클래스의 계층화 > 모듈화
시간의 흐름에 따라 변하는 객체들 사이의 제어 흐름, 상호 작용, 연산 순서 등의 동적인 행위를 상태 다이어그램 (State Transcation Diagram)으로 나타내는 것.
- 동적 모델링에서는 객체나 클래스의 상태, 사건을 중심으로 다룬다.
- 사건 : 하나의 객체로부터 다른 객체에 자극을 주어 객체의 상태를 변화시키는 것
- 상태 : 특정 시점의 객체에 대한 속성값
- 동적 모델링 순서
- 사건의 상호 작용 순서에 대한 시나리오를 작성한다.
- 사건 시나리오를 역할과 시간에 따라 표기한 사건 추적도를 작성한다.
- 사건 추적도를 사건 발생자와의 관계로 설명하는 사건 흐름도를 작성한다.
- 사건과 상태를 연결시킨 상태 전이도를 작성한다.
다수 프로세스 간의 데이터 흐름을 중심으로 처리 과정을 자료 흐름도 (DFD; Data Flow Diagram)로 나타내는 것.
- 어떤 데이터를 입력하여 어떤 결과를 구할 것인지를 표현함.
- 기능 모델의 구성 요소 : 프로세스, 자료 흐름, 제어 흐름, 자료 사전, 행위자.
- 기능 모델링 순서 :
- 외부와 시스템 간의 입·출력 자료를 정의한다.
- 데이터 흐름도를 작성한다.
- 프로세스 기능에 대한 정의를 기능 명세서로 작성한다.
- 제약 조건을 파악한다.
- 최적화 기준을 명세화한다.
전체적인 시스템 구조를 서브시스템으로 분할하고, 분할 과정 중에서 성능의 최적 방안, 문제 해결 전략, 자원 분해 등을 확정하는 단계.
- 상세 설계를 위한 중요한 개념과 전략을 결정하고, 서브시스템과 이들에게 할당될 하드웨어를 결정한다.
◆ 시스템 설계 절차
- 시스템을 서브시스템으로 분할한다.
- 동적 모델을 분석하여 객체들의 병행 수행 가능성과 상호 배타적인 요소를 파악한다.
- 서브시스템을 하드웨어와 태스크에 할당한다.
- 자원 관리 방법 및 공동 자원의 접근 방법을 결정한다.
- 시스템의 제어 방식을 결정한다.
- 경계 조건의 처리 방법을 결정한다.
- 우선순위를 결정한다.
분석 단계에서 만들어진 클래스, 속성, 관계들을 설계 모델로 제작하고 상세화하여 구체적인 자료 구조와 알고리즘을 정리하는 단계.
- 정보와 처리를 모듈화하고 데이터 객체와 처리 조작을 연결하며, 추상화, 정보 은폐, 모듈화를 기본으로 소프트웨어를 생성한다.
◆ 객체 설계 절차
- 객체·동적·기능 모델의 객체들에 대한 오퍼레이션을 파악한다.
- 연산을 구현하기 위한 알고리즘을 설계한다.
- 자료에 대한 접근 경로를 최적화한다.
- 외부와 상호 작용하기 위한 제어 방식을 구현한다.
- 클래스 구조를 조정하여 상속성을 향상시킨다.
- 관계를 설계하고, 객체의 표현 방법을 결정한다.
- 클래스와 관계를 단일 모듈로 생성한다.
- 문서화를 수행한다.
- E-R 다이어그램(개체 관계도)을 사용하여 개체(Entity)의 활동들을 데이터 모델링 하는 데 초점을 둔 기법이다.
- 모델링 표기법이 간단하고 분석 모형을 개발하는 지침도 간단하여 배우기에 쉬운 객체지향 분석 기법 중의 하나이다.
- 대화적으로 개발을 진행해 나가는 방법으로 작은 시스템 개발에 적합하다.
◆ 분석 절차
객체 및 클래스 식별 > 구조 식별 > 주체 정의 > 속성 및 관계 정의 > 서비스 정의
분석 사항을 하향식 방법으로 설계에 접근하여 프로토타입으로 개발하는 객체지향 설계 기법.
- 메시지 프로토콜을 간단하게 유지한다.
- 전체 시스템 규모를 최소화한다.
- 서비스를 간단하게 유지하며 설계의 변경을 최소화한다.
- 문제 영역 요소, 사람과 상호 작용 요소, 작업(Task) 관리 요소, 자료 관리 요소로 구성된다.
1991년 Booch에 의해 발표된 객체지향 기법으로, 설계 단계에 중점을 두어 클래스 및 객체의 식별과 그것들 간의 관계를 강조한 기법.
- 데이터 프름도(DFD)를 사용하여 객체를 분해하고, 객체들 간의 인터페이스를 찾아 Ada 프로그램으로 변환시키는 기법.
- 전체 시스템의 가시화와 실시간 처리(Real Time)에 유용하다.
- 설계를 위한 문서화 기법을 강조한 기법이다.
- 분석 단계와 구현 세부 사항에 취약하다.