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

객체지향5대원칙-OCP(Open Closed Principle) - 개방 폐쇄 원칙

by 쁘락지 2023. 5. 22.
반응형

객체지향 5대원칙(SOILD)의 원칙중 O에 해당하는것으로 확장에는 열려있고, 수정에는 닫혀있어야 한다는 원칙이다.

이게 무슨말일까? 예를들어보자.

농어업에는 농민, 어민이 있다.
이를 코드화 하면 이렇다.

package kr.co.touch;
public class Job{
    public void doWork(String job){
        if(job == "농업"){
            System.out.println("농업을 한다.");
        }else if(job == "어업"){
            System.out.println("어업을 한다.");
        }
    }
}

package kr.co.touch;
public class Main {
    public static void main(String args[]){
       Job job = new Job();
       job.doWork("농업");
       job.doWork("어업");
    }
}
여기서 만약 여기에 축산업이라는 직업군을 추가한다면 어떻게 될까? 그럼 어쩔수 없이 Job클래스 자체를 수정해야 한다.
이는 개방폐쇄원칙에 위배될수밖에 없다. 이를 위배되지 않도록 변경하면 다음과 같다.

package kr.co.touch;

public abstract class Job {
    public abstract void doWork();
}

package kr.co.touch;

public class Work extends Job{
    private String job;
    public void setJob(String job){
        this.job = job;
    }
    @Override
    public void doWork() {
        System.out.println(this.job + "을 한다.");
    }
}


package kr.co.touch;


public class Main {
    public static void main(String args[]){
       Work work = new Work();
       work.setJob("농업");
       work.doWork();
       work.setJob("어업");
       work.doWork();
       work.setJob("축산업");
       work.doWork();

    }
}

이렇게 추상화 클래스를 통해서 작성하면 자유롭게 직업군을 추가할수 있다.
이렇게 확장에 열려있고 확장시 기존 클래스 Work를 수정할일이 없게 되는것입니다.

 

반응형