본문 바로가기
공부하면서 생긴 질문들/Java

객체지향 디자인 원칙, SOLID

by 구너드 2023. 6. 16.

SOLID

객체지향 프로그래밍에서 좋은 소프트웨어 디자인 원칙을 나타내는 기준.

 

1, 단일 책임 원칙(Single responsibility principle)

클래스나 모듈은 하나의 주요 책임만 가져야 한다는 원칙.

클래스가 변경되어야 하는 이유는 하나여야 하며, 여러 책임을 갖는 클래스는 수정이나 확장이 어려울 수 있다.

중요한 기준은 변경. 변경이 있을 때 파급효과가 적으면, 단일 책임 원칙을 잘 따른 것.

 

 

2.개방-폐쇄 원칙(Open/closed principle)

클래스,모듈,함수와 같은 소프트웨어의 개체는 확장에는 열려있지만 수정에는 폐쇄되어야 한다는 원칙.

즉 기존의 코드를 수정하지 않고도 기능을 추가하거나 변경할 수 있어야 함.

이를 위해 추상화, 다형성,인터페이스의 개념을 활용할 수 있음

 

 

3.리스코프 치환 원칙(Liskov substitution principle)

프로그램에서 부모 클래스의 인스턴스는 언제나 자식 클래스의 인스턴스로 대체될 수 있어야 한다는 원칙

즉 자식 클래스는 부모 클래스의 기능을 제대로 구현하고 기존 코드에 영향을 주지 않으면서 확장성을 가질 수 있어야함

예를 들어 인터페이스에서 특정 기능을 겨냥하고 추상메서드를 만들었는데, 이 특정 기능에 반하는 메서드로 구현하면 이는 LSP를 위반한 것. 그 수준이 다른 기능을 구현할 수 있어도, 목적이 다른 기능을 구현해서는 안 됨.

 

 

4.인터페이스 분리 원칙(Interface segregation principle)

클라이언트는 자신이 사용하지 않는 인터페이스에 의존하도록 강요받지 않아야 한다는 원칙.

사용하지 않는 기능에 의존하지 않는 작은 인터페이스들로 분리함으로써 클라이언트가 필요한 기능에만 의존할 수 있도록 해야함 즉 클라이언트의 분리에 따라서 인터페이스도 분리하면 인터페이스의 기능도 명확해지고 대체가능성도 높아짐.

 

 

5.의존관계 역전 원칙(Dependency inversion principle)

고수준 모듈은 저수준 모듈에 의존해서는 안 되고, 두 모듈 모두 추상화된 추상체에 의존해야한다는 원칙

보다 쉽게 이야기하자면 구체화된 구현 클래스가 아닌 인터페이스에 의존해야함. 

이는 책임이 아닌 역할에 의존하여 설계하는 것과 같은 원리 

만약 구현체에 의존하게 되면 변경이 필요할 경우 매우 복잡해질 수 있음

 

 

'공부하면서 생긴 질문들 > Java' 카테고리의 다른 글

String을 변경할 수 없는 이유 - 불변 객체와 가변 객체  (0) 2023.06.21
instanceOf  (0) 2023.06.18
Comparator와 Comparable 1  (0) 2023.06.16
Iterator  (0) 2023.06.15
Null과 Optional  (0) 2023.06.15