본문 바로가기
기타/소프트웨어분석설계

Chapter 13. 객체지향 방법론

by hyun-am 2019. 6. 10.

객체지향 방법론의 이해

객체지향 방법론의 4대 방법론을 적으시오

  • Booch 법
  • Coad.Yourdon법
  • shlaer/Mellor 법
  • OMT법

객체지향 방법론 표기법의 차이가 문제로 대두

  • 따라서 레셔널사는 표기법만이라도 통일하자는 취지로 UML을 제안하였습니다.
  • UML을 사용하면 장점은 다른 방법론을 사용하여 분석및 설계해도 이해하기 쉽고, 경우에 따라서는 부분적으로 다른 방법론을 사용하는 것도 가능할 것입니다.


객체지향의 학습 로드맵을 보겠습니다

먼저 개념을 파악하겠습니다.

 

방법론 : 앞서 객체지향 방법론의 개략적인 역사를 살펴 보았습니다. 이를 해결하기 위해 레셔널사가 그 표기법만이라도 통일하자고 제안하여 통일된 표기법이 UML입니다.

객체지향 : 객체지향의 핵심 개념으로는 객체, 클래스, 캡슐화, 데이터 은닉, 상속, 조합, 다형성 등이 있습니다.

모델링 도구 : 먼저 정적 모델링 도구와 동적 모델링 도구로 나누어 지는데 정적 모델링 도구 중 가장 중요한 클래스 다이어그램과 동적 모델링 도구중 유스케이스 다이어그램, 시퀀스 다이어그램에 대해 자세히 살펴볼 것입니다.

객체지향 방법론의 핵심 개념

먼저 객체지향 프로세스의 특성을 설명하겠습니다.

소프트웨어 공학이 추구하는 목적은 두가지입니다.

  • 성공적인 소프트웨어 제품을 만들자
  • 성공적인 프로세스를 달성하자.

객제지향 방법론에서 구조적 방법론이 아주 중요합니다. 그러나 몇몇 문제점을 갖고 있어 프로세스 관점에서 개선의 여지가 있습니다. 객체지향 방법론은 구조적 방법론의 이러한 문제를 해결합니다.

객체지향 방법론의 주요 특성은 아래와 같습니다.(★★★)

  • 반복적인 프로세스
  • 솔기 없는 프로세스
  • 상향식 접근 방식
  • 재사용을 고려

반복적인 프로세스

  • 구조적 방법론에 따른 소프트웨어 개발 프로세스를 폭포수 모형이라고 부릅니다.

  • 요구사항 분석 - 설계 - 구현 - 테스트 - 유지보수

  • 객체지향 방법론은 소프트웨어 생명주기를 반복하여 적용하도록 제안했습니다.

이렇게 하는 이유는 고객의 요구사항은 시스템 개발 중에도 자주 변하기 때문입니다. 따라서 시스템을 한 주기 동안 완벽히 개발하는 것은 불가능 하여 개발 주기를 여러 번 반복하는것이 합당하기 때문입니다.

솔기 없는(Seamless)프로세스

프로세스를 구성하는 각 단계 간의 경계선이 불분명하다는 것을 뜻합니다.

 

왜냐하면 분석, 설계, 구현 단계에 걸쳐 실세계의 객체를 프로그램의 객체로 표현하면 그 단계간의 구분이 불명확하기 때문입니다.

상향식 프로세스(Bottom Up)

구조적 방법론 : 하향식 프로세스를 사용

객체지향 방법론 : 상향식 프로세스를 사용

하향식 프로세스 : 어떤 문제를 큰 덩어리로 인식한 후 그것을 작은 덩어리로 잘라서 문제를 하결하는 구조

상향식 프로세스 : 작은 덩어리의 문제들을 해겨한 후 그 덩어리들을 뭉쳐서 좀 더 큰문제를 해결해 나가는 방식 입니다.

재사용(Reuse)에 대한 고려

이미 구현되어 있는 클래스들을 다시 사용하여 다시 리팩토링 할 수 있습니다.

구조적 방법론 : 성공적인 소프트웨어 산물을 만들고자 하는 개발 공정에 치중합니다.

객체지향 방법론 : 재사용이 고려되어 프로세스가 진행됩니다.

객체지향의 핵심 개념

객체 : 현실 세계의 업무처리를 시스템 모델로 구축하기 위해 개념세계에서 개발대상 업무를 식별하고 이를 모델링하는 과정을 말합니다. 자세히 말하자면 객체 데이터(속성) +(행위) 라고 설명할 수 있습니다.

(참고)

객체는 네가지의 관점으로 설명 할 수 있습니다.

  • 모델링 관점 : 객체는 명확한 의미를 담고 있는 대상 또는 개념입니다.
  • 프로그래머 관점 : 객체는 클래스에서 생성된 변수입니다.
  • 소프트웨어 개발 관점 : 객체는 '데이터 + 메서드' 형태의 소프트웨어 모듈입니다.
  • 객체지향 프로그래밍 관점 : 객체는 속성과 메서드 용어로 구현할 수 있습니다.

클래스 : 공통되는 것들을 묶어서 대표적인 이름을 붙힌 것 입니다. 클래스가 개념적 이라면, 객체는 구체적 입니다. 또한, 데이터뿐 아니라 이 데이터에서 수행되는 메서드까지 포함해서 묶어놓은 것 입니다.

간단하게 설명하자면 클래스는 객체를 추상화 한 것 이고, 객체는 클래스를 구체화 한 것 입니다. (클래스 : 승용차, 객체 : 소나타, 그랜져) (클래스 : 자동차, 객체 : 승용차, 버스)

※ 추상화 : 사물들의 공통된 특징, 추상적 특징을 파악해 인식의 대상으로 삼는 행위입니다. 구체적인 사물들의 공통적인 특징을 파악해서 이를 하나의 개념으로 다루는 수단입니다.

인스턴스 : 같은 클래스에 속하는 개개의 객체로, 하나의 클래스에서 생성된 객체입니다. 클래스가 구체화되어, 클래스에서 정의된 속성과 성질을 가진 실제적인 객체로 표현된 것 입니다.

여기서 인스턴스화는 추상적인 개념인 클래스에서 실제 객체를 생성하는 것 입니다. 예제는 아래 그림과 같습니다.

 

객체 vs 클래스 vs 인스턴스(★★★)

객체는 소프트웨어 세계에 구현할 대상이고, 이를 구현하기 위한 설계도가 클래스 이며, 이 설계도에 따라 소프트웨어 세계에 구현된 실체가 인스턴스 입니다.

상속 : 부모로부터 유산을 불려받는 것을 말합니다. 객체를 생성할 때 상속 을 사용하면 시스템의 신뢰성과 재사용성을 높일 수 있어서 효율적 입니다.

상속 관계는 'is-a 관계'라고 표현할 수 있습니다. 예를 들면

A 교수 is a 교수 B 교수 is a 교수 의 관계가 참이라면

교수의(속성과 행위)를 물려줄 수 있습니다.

A 교수 is a 
교수 B 교수 is a 교수 의 관계가 참이라면

교수의(속성과 행위)를 물려줄 수 있습니다.

상속의 장점(★★★) : 이해 용이, 재사용성 증대, 확장 용이, 유지보수 용이, 추상화 가능

캡슐화와 데이터 은닉

먼저 캡슐화란 데이터(속성)과 데이터를 처리하는 함수를 하나로 묶는 것 입니다.

캡슐화의 장점들을 소개하겠습니다.

  • 데이터 보호
  • 추상화 용이
  • 제공자와 이용자를 명확히 분리
  • 이용자에게 편리성 제공
  • 사용법이 쉬움
  • 변화에 대한 국지적 영향
  • 객체 간의 독립성 보장
  • 변경 용이성과 재사용성 증대

데이터 은닉이란 각각의 객체는 자신의 속성(데이터)와 메서드(행위)를 다른 객체에게 숨깁니다. 캡슐화가 되어 있다고 반드시 정보 은닉이 되는 것은 아닙니다.

특징으로는 블랙박스 역할, 인터페이스를 통한 접근, 자료구조 변경 용이가 있습니다.

장점으로는 독립성 향상, 수정 용이, 이해도 증진, 확장성 증가가 있습니다.

인터페이스 : 외부에 노출된 부분

구현 : 내부에 숨겨진 부분

다형성 : 서로 다른 객체가 동일한 메시지에 대하여 서로 다른 방법으로 응답할 수 있는 기능입니다.

예제는 아래 그림과 같습니다.

조합 : 다른 객체를 사용하여 객체를 구성하는 것 입니다. 다른 클래스를 사용하여 보다 복잡한 클래스를 만드는 일종의 조립 이라고 설명할 수 있습니다.

여기서 집합과 연관이 있는데, 집합은 복잡한 객체가 다른 객체들로 구성된다는 의미입니다. 간단하게 비교하자면 집합은 반드시 필요한 요소들 이지만 연관은 그냥 일부만 구성되어 있어도 되는 것 입니다.

 

 


 

본문 내용은 아래 책을 참고하여 작성하였습니다.

https://book.naver.com/bookdb/book_detail.nhn?bid=9910113

 

시스템 분석과 설계

[시스템 분석과 설계]는 비즈니스 시스템을 개발하는 데 필요한 요구 분석 및 설계 방법론을 다룬 책으로, 기업의 정보시스템 개발 과정 및 개발에 참여하는 사람들의 역할, 개발에 사용되는 설계 및 분석 도구, 개발 후 품질관리까지의 전 과정을 간결하게 설명한다. 구조적 방법론, 정보공학 방법론, 객체지향 방법론의 주요 개념과 원리를 살펴본 후 미니 프로젝트로 해당 방법론의 적용 사례를 보여주어 원론적인 내용 이해에 그치지 않고 실제적인 지식이 될 수 있도록

book.naver.com

 

 

댓글