웹 프로그래밍/[ Spring ]

[ Spring] 01. 객체지향 설계 과정과 원칙

kim.svadoz 2021. 6. 30. 16:29
728x90
반응형

객체지향 설계 과정

  • 제공해야 할 기능을 찾고 세분화 한다. 그리고 그 기능을 알맞은 객체에 할당한다.
  • 기능을 구현하는 데 필요한 데이터를 객체에 추가한다.
  • 그 데이터를 이용하는 기능을 넣는다.
  • 기능은 최대합 캡슐화하여 구현한다.
  • 객체 간에 어떻게 메소드 요청을 주고받을 지 결정한다.

객체지향 설계 원칙

SOLID 라고 부르는 5가지 설계 원칙이 존재한다.

  1. SRP(Single Responsibility) - 단일 책임 원칙
    • 클래스는 단 한개의 책임을 가져야 한다.
    • 클래스는 변경하는 이유는 단 한개여야 한다.
    • 이를 지키지 않으면 한 책임의 변경에 의해 다른 책임과 관련된 코드에 영향이 갈 수 있다.
  2. OCP(Open-Closed) - 개방 폐쇄 원칙
    • 확장에는 열려있어야 하고, 변경에는 닫혀 있어야 한다.
    • 기능을 변경하거나 확장할 수 있으면서, 그 기능을 사용하는 코드는 수정하지 않는다.
    • 이를 지키지 않으면 instanceof와 같은 연산자를 사용하거나 다운 캐스팅이 일어난다.
  3. LSP(Liskov Subsitution) - 리스코프 치환 원칙
    • 상위 타입의 객체르르 하위 타입의 객체로 치환해도, 상위 타입을 사용하는 프로그램은 정상적으로 동작해야 한다.
    • 상속관계가 아닌 클래스들을 상속 관계로 설정하면, 이 원칙이 위배된다.
  4. ISP(Interface Segregation) - 인터페이스 분리법칙
    • 인터페이스는 그 인터페이스를 사용하는 클라이언트를 기준으로 분리해야 한다.
    • 각 클라이언트가 필요로 하는 인터페이스들을 분리함으로써, 각 클라이언트가 사용하지 않는 인터페이스에 변경이 발생하더라도 영향을 받지 않도록 만들어야 한다.
  5. DIP(Dependency Inversion) - 의존 역전 법칙
    • 고수준 모듈을 저수준 모듈의 구현에 의존해서는 안된다.
    • 저수준 모듈이 고수준 모듈에서 정의한 추상 타입에 의존해야 한다.
    • 즉, 저수준 모듈이 변경돼도 고수준 모듈을 변경할 필요가 없는 것이다.

참조

https://github.com/gyoogle/tech-interview-for-developer/blob/master/Computer%20Science/Software%20Engineering/Object-Oriented%20Programming.md

https://velog.io/@hkoo9329/%EC%9E%90%EB%B0%94-extends-implements-%EC%B0%A8%EC%9D%B4

728x90
반응형