본문 바로가기
객체지향 설계5대 원칙/JAVA

객체지향5대원칙-SRP(Single Responsibility Principle) - 단일 책임 원칙

by 쁘락지 2023. 5. 22.
반응형
객체지향 5대원칙 중 처음의 S에 해당하는것으로
SRP(Single Responsibility Principle) - 단일 책임 원칙
하나의 객체는 반드시 하나의 기능만을 수행하는 책임을 가지면서
클래스를 변경해야 하는 이유는 오직 하나뿐이어야 한다는 의미다.

그럼 예를 살펴보자
package kr.co.touch;

public class Family {
    private String member;
    public void setMember(String member){
        this.member = member;
    }
    public void Work(){
        if(this.member == "Mother"){
            System.out.println("집안일을 하신다.");
        }
        if(member == "Father"){
            System.out.println("회사일을 하신다.");
        }
    }

}

package kr.co.touch;


public class Main {
    public static void main(String args[]){
       Family family = new Family();
       family.setMember("Mother");
       family.Work();
       family.setMember("Father");
       family.Work();

    }
}

Work라는 메소드는 상황에 따라서 두가지의 일을 하고 있습니다. 이는 하나의 객체는 반드시 하나의
기능만을 수행하는 책임에 위배됩니다. 따라서 이를 변경하면 이렇게 할수 있습니다.

package kr.co.touch;

public abstract class Family {
    public abstract void Work();

}

package kr.co.touch;

public class Mother extends Family{

    @Override
    public void Work() {
        System.out.println("집안일을 하신다.");
    }
}

package kr.co.touch;

public class Father extends Family{
    @Override
    public void Work() {
        System.out.println("회사일을 하신다.");
    }
}


package kr.co.touch;


public class Main {
    public static void main(String args[]){
       Family family = new Mother();
       family.Work();
       family = new Father();
       family.Work();

    }
}
Family라는 추상클래스로 Work라는 메소드를 정의하고 Mother,Father라는 클래스를 만들어서
Family를 상속받고 추상클래스의 메소드를 각 클래스에 맞게 구현했습니다.
이러면서 하나의 객체는 하나의 기능만을 수행하는 책임을 지키게 됬네요.
그리고 저도 이걸 공부하면서 정리하는거라 잘 이해가 안되는부분은 말씀해주시고
제가 잘못 알고 있는 내용이 있다면 과감히 지적해 주시면 감사하겠습니다.
고맙습니다.
반응형