CS

[Java] 객체지향 분석(OOA) 및 설계(OOD) 및 설계원칙(SOLID)

KJihun 2023. 10. 19. 12:21
728x90

 

 

객체지향 분석(OOA; object-oriented anaysis)

사용자의 요구사항을 토대로 클래스, 관계 등을 정의하여 모델링하는 단계이며 클래스를 식별 및 정의하는 것이 목적이다.

클래스 식별: 실생활에서 어떤 객체들이 서로 유사한 특성과 행동을 가지고 있는지 파악하는 것

ex: 자동차(클래스) - 속도, 연료량 등의 특성을 가지며 주행, 가속, 감속 등의 행동을 할 수 있다.

객체지향 분석의 방법론

  • Rumbaugh(럼바우) 방법 : 모든 구성요소를 그래픽 표기법(UML)을 이용하여 모델링하는 기법 
 

[JAVA] UML(Unified Modeling Language)

UML(Unified Modeling Language) 객체지향 소프트웨어 개발 전 단계에서 다양한 측면을 의사소통이 원활하게 이루어지도록 시각화 한 모델링 언어 사물(Things), 관계(Relationships), 다이어그램(Diagram)으로 구

developerhun.tistory.com

    • 객체 모델링(Objcet) : 객체들 간 관계를 규정(E-R다이어그램을 만드는 과정)을 모델링하며 객체 다이어그램을 활용하여 표현
    • 동적 모델링(Dynamic) : 시간의 흐름에 따라 객체 사이의 제어, 동작 등 동적인 행동을 행위 다이어그램으로 표현
    • 기능 모델링(Functional) : 프로세스들의 자료 흐름을 중심으로 처리 과정을 DFD로 표현
  • Booch(부치) 방법 : 미시적, 거시적 개발 프로세스를 모두 사용하는 분석방법
  • Jacobson 방법 : UseCase를 강조하여 사용하는 분석 방법
  • Coad와 Yourdon 방법 : E(Entity)-R(Relationship)다이어그램을 사용
  • Wirfs-Brock 방법 : 분석, 설계 구분없이 고객 명세서로 설계작업까지 연속적으로 수행

 

객체지향 설계(OOA; object-oriented Design)

소프트웨어 문제를 해결하기 위해 상호 작용하는 객체 시스템을 계획하는 프로세스

 

 

객체지향 설계(OOD)의 원칙(SOLID) : 유지보수성, 재사용성, 확장성, 테스트 용이성 등 다양한 측면에서 이점을 제공

  • Single Responsibility Principle (SRP): 객체는 하나의 책임만 가져야 한다(모듈이 변경되는 이유가 한가지여야 한다)
    • 변경이 필요할 때 수정할 대상이 명확해진다
    • 낮은 결합도를 유지할 수 있다.
  • Open-Closed Principle (OCP) : 확장에 대해 열려있고 수정에 대해서는 닫혀있어야 한다
    • 코드를 변경하지 않고 기능을 추가할 수 있도록 설계하여야 한다
    • ex: PSA
  • Liskov Substitution Principle (LSP) : 자식클래스는 부모 클래스에서 가능한 행위는 수행할 수 있어야 한다
    • 부모 클래스의 책임을 무시하거나 재정의 하지않고 확장만 수행하여야 한다
  • Interface Segregation Principle (ISP) : 사용하지 않는 인터페이스의 영향을 받지 않아야 한다
    • 클라이언트의 목적과 용도에 적합한 인터페이스 만 제공하여야 한다
    • 목적과 관심이 각기 다른 클라이언트가 있다면 인터페이스를 통해 적절하게 분리하여야 한다
  • Dependency Inversion Principle (DIP) : 고수준 모듈은 저수준 모듈의 구현에 의존해서는 안 되며, 저수준 모듈이 고수준 모듈에 의존해야 한다
    • 고수준 모듈: 입력과 출력으로부터 먼(비즈니스와 관련된) 추상화된 모듈
    • 저수준 모듈: 입력과 출력으로부터 가까운(HTTP, 데이터베이스, 캐시 등과 관련된) 구현 모듈
    • 추상성이 높은 클래스와 의존관계를 맺어야 한다