본문 바로가기

개발/Java

[CS]객체 지향 설계의 5원칙(SOLID)

지금까지 객체지향 언어를 공부하면서 막연히 가장 많이 사용되는 개발언어라는 것만 알고 있었고,

정확히 어떤점에서 강점을 가지고, 그 강점을 살리기 위해서는 어떤 방식으로 구현해야 하는지에 대해서는 깊게 생각해보지 못했다.

 

클린 코드의 저자인 로버트 C.마틴의  논리에 따르면 좋은 객체지향 언어란 아래의 5가지 원칙을 가진다고 한다.

 

이 원칙들은 사실상 자바로 단순히 분류하기 보다는 소프트웨어 공학의 분야이다.

 

  1. 단일 책임 원칙(Single responsibility principle) : SRP
    ㄴ 한 클래스는 하나의 책임만 가져야 한다.
  2. 개방 폐쇄 원칙(Open/closed principle) : OCP
    ㄴ 소프트웨어 요소는 확장에는 열려 있으나 변경에는 닫혀 있어야 한다.(구현/분리)
  3. 리스코프 치환 원칙(Liskov substitution principle) : LSP
    ㄴ 프로그램 객체는 정확성을 깨뜨리지 않으면서 하위 타입의 인스턴스로 바꿀 수 있어야 한다.
  4. 인터페이스 분리 원칙(Interface segregation principle) : ISP
    ㄴ 특정 클라이언트를 위한 인터페이스 여러개가 범용 인터페이스 하나보다 낫다.
  5. 의존관계 역전 원칙(Dependency inversion principle) : DIP
    ㄴ 프로그래머는 "구체화"보다 "추상화"에 의존해야 한다. 즉 의존성 주입으로 이 원칙을 따를 수 있다.
 
즉 객체 지향의 핵심은 다형성이라고 할 수 있다. 다만 자바의 다형성 기능만으로는 5원칙을 제대로 지킬 수 없다. (OCP, DIP 위반)
그리고 이를 지킬 수 있도록 도와주는 것이 스프링이다.

'개발 > Java' 카테고리의 다른 글

[Java]Comparator  (0) 2022.03.31
[Java]PriorityQueue  (0) 2022.03.27
[Java]Call by value, Call by reference  (0) 2022.03.09
[Java]순수 자바 코드로 DIP와 OCP를 준수하는 방법  (0) 2022.03.06
[Java]Optional  (0) 2022.03.01