코딩로그
[SOLID] SRP_단일 책임 원칙 본문
[SRP]
- 단일 책임 원칙, Single Responsibility Principle
- 클래스는 단 하나의 책임을 가져야 함
- 책임 → 기능
- 액터
- 시스템이 동일한 방식으로 변경되기를 원하는 사용자 집단
- 클래스를 변화시킬 수 있는 주체
- ex) 기획자, 디자이너, 개발자
- 한 클래스가 수행할 수 있는 기능이 여러 개인 경우, 클래스 내부 함수끼리의 강한 결합 발생
- 높은 응집도 + 낮은 결합도 → 객체 지향 설계의 핵심
- 응집도 → 모듈의 독립성, 모듈 내부 구성 요소 간의 연관 정도
- 결합도 → 외부 모듈과의 연관 정도, 모듈 간의 상호 의존 정도
- 강한 결합 발생 → 해당 핵심 위반
- 새로운 요구사항이나 프로그램 변경에 의해 클래스 내부의 동작 연쇄 변경 가능성 O
- 유지보수 비효율적 → 잘게 쪼개어 분리
- 클래스를 변경하는 이유는 단 하나여야 함
- 한 책임의 변경에 의해 다른 책임과 관련된 코드에 영향을 미칠 수 있음
- 유지보수의 비효율성
[Example]
- Bad Example
- DogCare class 하나가 여러 기능을 포함
// SRP Bad Example
// 여러 기능을 포함하고 있는 class
class DogCare {
public void doWash(){
System.out.println("wash");
}
public void doEat(){
System.out.println("eat");
}
public void doWalk(){
System.out.println("walk");
}
}
public class MyClass {
public static void main(String args[]) {
DogCare dubuCare = new DogCare();
dubuCare.doWash();
dubuCare.doEat();
dubuCare.doWalk();
}
}
- Good Example
- DogCare class 기능별 분리, 하나의 class가 하나의 역할만 수행하도록 구현
// SRP Good Example
// 하나의 class 하나의 역할만 수행
class DogWash{
public void doWash(){
System.out.println("wash");
}
}
class DogEat{
public void doEat(){
System.out.println("eat");
}
}
class DogWalk{
public void doWalk(){
System.out.println("walk");
}
}
public class MyClass {
public static void main(String args[]) {
DogWash dubuwash = new DogWash();
DogEat dubueat = new DogEat();
DogWalk dubuwalk = new DogWalk();
dubuwash.doWash();
dubueat.doEat();
dubuwalk.doWalk();
}
}
'YJ > 관련 이론' 카테고리의 다른 글
[SOLID] DIP_의존 역전 원칙 (0) | 2022.09.25 |
---|---|
[SOLID] ISP_인터페이스 분리 원칙 (0) | 2022.09.25 |
[SOLID] LSP_리스코프 치환 원칙 (0) | 2022.09.25 |
[SOLID] OCP_개방 폐쇄 원칙 (0) | 2022.09.24 |