단일 책임 원칙 (Single Responsibility Principle)
1. 정의
하나의 클래스는 하나의 책임만 가져야 한다는 것이 핵심
2. 속성이 단일 책임 원칙을 지키지 못하는 경우: '사람' 클래스 예시
public class Main{
public static void main(String[] args) {
사람 로미오 = new 사람();
사람 줄리엣 = new 사람();
로미오.군번 = "129301203012";
}
public static class 사람 {
String 군번;
}
}
2.1 문제점
사람
클래스에서는 군번이라는 속성이 모든 사람, 즉 남자와 여자 모두에게 적용됨
- 하지만 이 경우 남자와 여자의 책임이 명확하게 구분되어 있지 않기 때문에 문제가 생깁니다.
2.2 해결 방안
남자
와여자
클래스를 따로 만들고,
군번
속성은남자
클래스에서만 다루는 것이 좋음
- 이렇게 하면 각 클래스가 하나의 책임만 갖게 되어 단일 책임 원칙을 준수함
3. 하나의 속성이 여러 의미를 가지는 경우
3.1 문제점
- 하나의 필드가 여러 의미를 가질 때도 단일 책임 원칙을 지키지 못한다.
- 예를 들어, 하나의 필드가 토지일 경우 면적을, 건물일 경우 층수를 나타내는 것이다.
3.2 해결 방안
- 이런 문제를 해결하려면, 단일 책임 원칙에 따라 필드를 분리해야함
- 토지와 건물을 분리하여 각각의
클래스
에서 면적과 층수를 다루면 됩니다.
4. 메서드가 단일 책임 원칙을 지키지 못하는 경우: '강아지' 클래스 예시
public static class 강아지 {
final static Boolean 수컷 = true;
final static Boolean 암컷 = false;
Boolean 성별;
void 소변보다() {
if (this.성별 == 수컷) {
// 한쪽 다리를 들고 소변
} else {
// 앉아서 소변
}
}
}
4.1 문제점
'강아지' 클래스의 소변보다()
메서드가 수컷과 암컷의 행동을 모두 처리해야 하는 경우, 단일 책임 원칙을 위배하게 됩니다.
4.2 해결 방안
- '
수컷강아지
'와 '암컷강아지
' 클래스를 만들고 각각에서소변보다()
메서드를 오버라이딩하여 구현해야 합니다.
- 이렇게 하면 각 클래스는 하나의 책임만 가지게 되어
단일 책임 원칙을 준수
public static class 수컷 extends 강아지 { void 소변보다() { } } public static class 암컷 extends 강아지 { void 소변보다() { } } public static abstract class 강아지 { abstract void 소변보다(); }
5. 단일 책임 원칙과 객체지향 4대 특성
5.1 추상화 <> 단일 책임 원칙
- 추상화
- 모델링 과정 담당
- 단일 책임 원칙과 관계가 깊음
- 클래스 설계시 단일 책임 원칙 고려 ⇒ 추상화가 정확하게 이루어짐
Uploaded by N2T
'자바 > 스프링입문객체지향' 카테고리의 다른 글
[5단원] 객체지향 세계와 SOLID 마무리 (0) | 2023.09.13 |
---|---|
[5단원]5원칙 - SOLID (0) | 2023.09.10 |
[5단원]5원칙 - OCP (0) | 2023.09.10 |
[4단원]this 키워드 (0) | 2023.09.04 |
[4단원]super 키워드 (0) | 2023.09.04 |