반응형
객체지향 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를 수정할일이 없게 되는것입니다.
반응형
'객체지향 설계5대 원칙 > JAVA' 카테고리의 다른 글
객체지향5대원칙-DIP(DIP-Dependency Inversion Principle) - 의존 역전 원칙 (0) | 2023.05.23 |
---|---|
객체지향5대원칙-LSP(Liskov Substitution Principle) - 리스코프 치환 원칙 (0) | 2023.05.23 |
객체지향5대원칙-ISP(Interface Segregation Principle) - 인터페이스 분리 원칙 (0) | 2023.05.22 |
객체지향5대원칙-SRP(Single Responsibility Principle) - 단일 책임 원칙 (0) | 2023.05.22 |