Notice
Recent Posts
Recent Comments
Link
«   2025/08   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
Archives
Today
Total
관리 메뉴

코딩로그

[SOLID] SRP_단일 책임 원칙 본문

YJ/관련 이론

[SOLID] SRP_단일 책임 원칙

Team DAON 2022. 9. 24. 01:39

[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