Sam Story

JAVA - 단일 책임의 원칙 본문

JAVA

JAVA - 단일 책임의 원칙

Sam H 2024. 10. 12. 17:50

오늘은 지난번 포스팅 했던 SOLID 원칙 중에서

SRP (Single Responsibility Principle) 단일 책임의 원칙 에 대해서 포스팅 해보겠다.

 

5가지 원칙에 대한 내용은

아래 포스팅을 참고하도록 하자.

 

https://samtistory.tistory.com/49

 

객체지향 프로그래밍 SOLID 원칙

지난번 포스팅 했던 객체지향 프로그래밍에 이어서객체지향 프로그래밍의 5가지 원칙 SOLID 원칙에 대해 포스팅 하려한다.  SOLID 원칙 이란? SOLID란 객체 지향 프로그래밍을 하면서 지켜야하

samtistory.tistory.com

 

단일 책임의 원칙 (SRP)

단일 책임 원칙은 클래스(객체)는 단 하나의 책임만 가져야 한다는 원칙이다.

 

즉 하나의 클래스는 하나의 기능을 담당하여 하나의 책임을 수행하는데

집중되도록 클래스를 따로따로 여러개 설계하라는 원칙이다.

 

만일 하나의 클래스에 기능이 여러개 있다면 수정할 내용이 생겼을 때

수정해야할 코드가 많아지고 복잡해지는 경우가 생긴다.

 

 

그림으로 간단하게 예시를 들어보자면

 

위 그림을 클래스에 비유해서 보면 간단하다.

남자 클래스는 여자친구 클래스, 엄마 클래스, 직장상사 클래스, 3가지 클래스에 대한 책임을 지고 있는것이다.

 

이렇게 프로그래밍을 할 경우 단일책임의 원칙을 위배하는 것이다.

 

그럼 단일책임의 원칙을 준수 할 경우에는 어떻게 나타낼 수 있는가

 

위 그림 처럼 각각의 역할을 담당하는 클래스들을 만들어 처리를 하는것이 단일 책임의 원칙인 것이다.

 

 

이러한 내용을 코드로 나타내보자.

 

Man class

public class Man {


    // 데이트 하기
    void date(GirlFriend girlFriend) {

        System.out.println("데이트 하기");

    } 


    // 기념일 챙기기
    void takeCareOfAnniversary(GirlFriend girlFriend) {

        System.out.println("기념일 챙기기");

    } 


    // 효도하기
    void filialPiety(Mother mother) {

        System.out.println("효도하기");

    }


    // 안마하기
    void massage(Mother mother) {

        System.out.println("안마하기");

    }


    // 출근하기
    void goToWork(Boss boss) {

        System.out.println("출근하기");

    } 


    // 퇴근하기
    void leaveWork(Boss boss) {

        System.out.println("퇴근하기");

    } 

}

 

Man class 에서는 다양한 남자 관련 메서드들을 처리하고 있다.

이렇게 처리할 경우 위에서 설명했듯이 3개의 클래스에 대한 책임을 전부 Man class가 지고 있기 때문에

 

단일 책임의 원칙을 지키지 못한다.

 

이러한 원칙을 지켜서 새롭게 class를 작성해보자.

 

BoyFriend class

public class BoyFriend extends Man{

    void date(GirlFriend girlFriend) {

        System.out.println("데이트 하기.");

    }

    void takeCareOfAnniversary(GirlFriend girlFriend) {

        System.out.println("기념일 챙기기");

    }

}

 

 

Son class

public class Son extends Man{

    void filialPiety(Mother mother) {
        
        System.out.println("효도하기");
        
    }

    void massage(Mother mother) {
        
        System.out.println("안마하기");
        
    }

}

 

 

Worker class

public class Worker extends Man{

    void goToWork(Boss boss) {

        System.out.println("출근하기");

    }

    void leaveWork(Boss boss) {

        System.out.println("퇴근하기");

    }

}

 

 

이렇게 3가지 class를 만들어 각각의 책임을 지게 만들고

위 코드에서는 작성하지 않았지만 Man의 속성을 지녀야 할 경우 상속을 이용해 처리해준다.

 

세부적으로 코드를 작성할 때 더 속성과 메서드를 생각하여 class를 세분화 하거나

공통적으로 지니고 있는 속성을 class로 묶어서 상속으로 처리한다거나 인터페이스를 이용할 수 있다.

 

이러한 내용들을 항상 신경쓰며 프로그래밍을 해야하는걸 명심하도록 하자.

 

 

 

'JAVA' 카테고리의 다른 글

JAVA - 리스코프 치환 원칙  (0) 2024.10.15
JAVA - 개방 폐쇄 원칙  (0) 2024.10.14
JAVA - 2~36진수 기수변환  (0) 2024.09.29
JAVA - 자료구조 Map  (4) 2024.09.21
JAVA - 스레드 (Thread)  (0) 2024.05.12