본문 바로가기

Java/객체 지향 설계

객체 지향 설계 5가지 SOLID 원칙

좋은 객체 지향 설계의 5가지 SOLID 원칙 (로버트 마틴)

 

1. SRP / Single Responsibility Principle 단일 책임 원칙

한 클래스는 하나의 책임만 가져야 한다. 하나의 책임의 기준은 변경.

소프트웨어 모듈은 변경의 이유가 단 하나여야만 한다.

 

 

2. OCP / Open Closed Principle 개방 폐쇄 원칙

소프트웨어 요소(개체)는 확장에는 열려 있으나 변경에는 닫혀 있어야 한다.

소프트웨어 개체의 행위는 확장될 수 있어야 하지만, 이때 개체를 변경해서는 안된다.
=> 다형성을 활용해 인터페이스를 구현한 새로운 클래스를 만들어 새로운 기능을 구현하도록 한다.

 

 

3. LSP / Liskov Substitution Principle 리스코프 치환 원칙

프로그램의 객체는 프로그램의 정확성을 깨뜨리지 않으면서 하위 타입의 인스턴스로 바꿀 수 있어야 한다.

다형성에서 하위 클래스는 인터페이스 규약을 다 지켜야 한다. (정의한 기능대로 동작해야 한다)

상호 대체 가능한 구성요소를 이용해 소프트웨어를 만들 수 있으려면 이들 구성 요소는 반드시 서로 치환 가능해야 한다.

자식 클래스는 부모클래스에서 가능한 행위를 수행할 수 있어야 한다.

 

4. ISP / Interface Segregation Principle 인터페이스 분리 원칙

특정 클라이언트를 위한 인터페이스 여러 개가 범용 인터페이스 하나보다 낫다.

하나의 일반적인 인터페이스보다는, 여러 개의 구체적인 인터페이스가 낫다.

사용하지 않는 것에 의존하지 않아야 한다.

클래스에 의해 구현되는 더 작고 더 구체적인 일련의 인터페이스를 작성해야 한다.

 

5. DIP / Dependency Inversion Principle 의존관계 역전 원칙

구현 클래스에 의존하지 말고 인터페이스에 의존해야 한다.

DIP를 만족한다는 것은 의존관계를 맺을 때, 구체적인 클래스보다 인터페이스나 추상 클래스와 관계를 맺는다는 것을 의미한다.

 

 

 

객체 지향의 핵심은 다형성이다. 

하지만 다형성을 지키려면 구현 객체를 변경할 때 클라이언트 코드를 변경하게 된다.

 

이때 스프링이 제공하는 DI 컨테이너 기술로 의존관계와 의존성을 주입하여 클라이언트 코드의 변경 없이 기능 확장이 가능해진다.

즉 스프링이 다형성과 OCP, DIP를 가능하게 지원해준다.

 

 

참고)

inflearn 스프링 핵심원리 기본편 (김영한 강사님)

https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%ED%95%B5%EC%8B%AC-%EC%9B%90%EB%A6%AC-%EA%B8%B0%EB%B3%B8%ED%8E%B8/dashboard

 

스프링 핵심 원리 - 기본편 - 인프런 | 학습 페이지

지식을 나누면 반드시 나에게 돌아옵니다. 인프런을 통해 나의 지식에 가치를 부여하세요....

www.inflearn.com

 

https://dev-momo.tistory.com/entry/SOLID-%EC%9B%90%EC%B9%99

 

SOLID 원칙

프로그래밍 설계를 하다보면 객체지향 5대원칙 또는 SOLID 원칙이란 단어를 들어본 적이 있을 것이다. 당시에 구글링을 하여 찾아보았지만 프로그래밍 내공이 부족하여 잘 이해가 되지 않았다.

dev-momo.tistory.com

https://bbaktaeho-95.tistory.com/98

 

[Programming] SOLID 원칙 (객체지향 5대 원칙, SRP, OCP, LSP, ISP, DIP)

들어가며 좋은 소프트웨어는 깔끔한 코드로부터 시작한다. - 로버트 C. 마틴 건물을 지을 때 좋은 벽돌을 사용하지 않으면 건물의 구조가 좋고 나쁨은 큰 의미가 없다고 합니다. 반대로 좋은 벽

bbaktaeho-95.tistory.com