[정보처리산업기사] 22강 객체지향 분석 및 설계

DongHo Im·2022년 1월 21일
0

정보처리산업기사

목록 보기
22/86

1. 객체지향 분석의 개념

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

  • 소프트웨어를 개발하기 위한 업무를 객체와 속성, 클래스와 멤버, 전체와 부분 등으로 나누어 분석한다.

  • 클래스, 객체, 속성, 연산들을 표현해서 모형화할 수 있게 해준다.

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


2. 객체지향 분석의 방법론

✅ Rumbaugh 방법

  • 분석 활동을 객체 모델, 동적 모델, 기능 모델로 나누어 수행하는 방법

✅ Booch 방법

  • 클래스와 객체들을 분석 및 식별하고 클래스의 속성과 연산을 정의하는 방법

✅ Jacobson 방법

  • Use Case를 강조하여 사용하는 분석 방법

✅ Coad와 Yourdon 방법

  • ER 다이어그램을 사용하여 객체의 행위를 모델링하며, 객체 식별, 구조 식별, 주제 정의, 속성과 인스턴스 연결 정의, 연산과 메시지 연결 정의 등의 과정으로 구성하는 방법

✅ Wirfs-Brock 방법

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

3. 럼바우(Rumbaugh)의 분석 기법

가장 일반적으로 사용되는 방법으로 소프트웨어 구성 요소를 그래픽 표기법을 이용하여 모델링하는 기법으로 객체 모델링 기법(OMT, Object Modeling Technique)이라고도 불린다.

  • 분석 활동을 객체 모델, 동적 모델, 기능 모델로 나누어 수행하는 방법

  • 모든 SW 구성 요소를 그래픽 표기법으로 활용하여 모델링하여 시스템 개발의 전 단계가 추상화, 캡슐화, 상속성 등 일관된 객체 지향 개념이 적용되는 객체 지향 개발 방법

분석 절차 : 객체 모델링 --> 동적 모델링 --> 기능 모델링 순으로 진행

✅ 객체 모델링(Object Modeling)

  • 정보 모델링. 시스템에서 요구되는 객체 찾아내 속성과 연산 식별 및 객체들 간 관계 규정하여 그래픽 다이어그램으로 표시
  • 실세계 문제 영역으로부터 객체와 클래스 추출해 그들 간 관계 연관화, 집단화, 일반화 중심으로 규명하며, 클래스 속성과 연산 함께 표현함으로써 시스템 정적 구조 생성

✅ 동적 모델링(Dynamic Modeling)

  • 상태 다이어그램 사용하여 시스템 행위 기술

✅ 기능 모델링(Function Modeling)

  • 자료 흐름도(DFD) 이용, 다수 프로세스 간 자료 흐름 중심으로 처리 과정 표현
  • 어떤 데이터를 입력하면 어떤 결과 구할 것인지 표현

4. 객체지향 설계 원칙

객체지향 설계 원칙은 시스템 변경이나 확장에 유연한 시스템을 설계하기 위해 지켜야 할 다섯가지 원칙으로, 원칙의 앞 글자를 따 SOLID 원칙이라고도 한다.

  • 설계 원칙 5가지
    1. SPR(Single Responsibility Principle) : 단일 책임 원칙
    2. OCP(Open Closed Principle) : 개방 폐쇄 원칙
    3. LSP(Liskov Substitution Principle) : 리스코프 치환 원칙
    4. ISP(Interface Segregation Principle) : 인터페이스 분리 원칙
    5. DIP(Dependency Inversion Principle) : 의존 역전 원칙

✅ SRP = 단일 책임 원칙

  • 어떤 클래스를 변경해야 하는 이유는 오직 하나 뿐이어야 한다.
  • SRP가 안지켜진 사례
    • 변수레벨
      • 하나의 속성이 여러 의미를 갖는 경우
      • 어떤 곳에서는 쓰고, 어떤 곳에선 안쓰는 속성이 있는 경우
    • 메소드레벨
      • 분기처리를 위한 if문이 많을 경우

✅ OCP = 개방 폐쇄 원칙

  • 소프트웨어 엔티티(클래스, 모듈, 함수 등)는 확장에 대해서는 열려 있어야 하지만 변경에 대해서는 닫혀 있어야 한다.
  • 즉, 자신의 확장에는 열려있고, 주변의 변화에 대해서는 닫혀 있어야 한다는 것이다. 이것은 interface 를 통해 구현하여 해결한다.

현실의 예를들면 상점직원이 아무리 바뀐다고해서 손님이 상품을 구매하는 데는 지장이 없다.
이는 직원은 판매 인터페이스를 구현해야하기 때문이다.
손님은 판매인터페이스와 소통하기 때문에 직원이 누구든 지장이 없다.

✅ LSP = 리스코프 치환 원칙

  • 서브타입은 언제나 자신의 기반타입으로 교체할 수 있어야 한다.
  • 즉, 하위 클래스의 인스턴스는 상위형 객체 참조 변수에 대입해 상위 클래스의 인스턴스 역할을 수행하는 데 문제가 없어야 한다.
  • 이것은 OOP 4대 특성의 상속, 인터페이스 원칙이 잘 지켜진 다면 LSP는 자동으로 잘 적용된 것이다. (주로 조직도, 계층도 관점에서의 상속이 LSP를 위배하는 문제가 생긴다)

✅ ISP = 인터페이스 분리 원칙

  • 클라이언트는 자신이 사용하지 않는 메소드에 의존 관계를 맺으면 안된다.
  • ISP는 SRP와 비슷하지만 인터페이스를 통한 다른 해결책을 제안하고 있다.

예를들어 class 사람 implements 군인 이면 군인 홍길동 = new 사람() 을 통해 군인 인터페이스의 메소드만을 사용하도록 제한하는 것이다.
SRP였다면 class를 나눠버렸겠지만.. 일반적으론 ISP보다 SRP 할 것이 권장된다.

✅ DIP = 의존 역전 원칙

  • 고차원 모듈은 저차원 모듈에 의존하면 안된다.
  • 추상화된 것은 구체적인 것에 의존하면 안된다.
  • 구체적인 것이 추상화된 것에 의존해야 한다.
  • 자주 변경되는 클래스에 의존하지 말자. 로 요약될 수 있다.
  • 즉, 자신보다 변하기 쉬운 것에 의존하지 말라는 것이다.
  • 해결방법은 OCP와 비슷한데, 구체적인 class가 아닌, 인터페이스에 의존함으로써 DIP를 해결한다.
profile
[DATABASE] 비전공자 출신의 개발 도전!

0개의 댓글