이번 포스팅에서는 OCP 규칙에 대해서 포스팅해보겠습니다.
OCP(Open Closed Principle) : 개방 폐쇄 원칙
소프트웨어 객체는 확장에는 열려있고, 수정에는 닫혀있다는 한다는 프로그래밍 원칙입니다.
프로그래밍을 진행할 때 수정할 때 한 객체를 수정해야 하는 상황이 발생한다면 그 객체를 이용하는 다른 객체들을 줄줄이 수정해야 하는 일이 발생할 수 있습니다.
따라서, 개방 폐쇄 원칙을 잘 지키게 된다면 기능을 추가하거나 수정할 때 기존의 코드를 수정하지 않고, 새로운 코드를 추가함으로써 기능의 추가나 수정을 완성할 수 있습니다.
말로만 하면 이해하기 어려우니 간단한 코드로 알아보겠습니다!
Tiger 클래스입니다.
public class Tiger {
public String name;
public int age;
public void eat(String meat){
System.out.println(meat + " 맛있당~!");
}
public void yell(){
System.out.println("어흥");
}
}
Zoo 클래스입니다.
public class Zoo {
public void eat(Tiger tiger){
tiger.eat("고기");
}
public void yell(Tiger tiger){
tiger.yell();
}
}
- Tiger는 먹기와 소리치기 기능을 갖고 있습니다.
- 제가 볼때는 충분히 잘 완성된 코드 같은데... 뭔가 부족한 점이 있을까요??
- 만약 여기에 Lion 클래스를 만들고 동물원에 Lion에게 먹을 것을 주고 소리를 치게 하고 싶으면 어떻게 해야 할까요?
- 아마도 Zoo 클래스안에 Tiger를 Lion으로 바꿔야 할 것입니다.
- 이러면 Lion을 추가하고 싶은데 기존의 코드를 수정하게 되었네요,..... 어떻게 하면 좋을까요??
다른 코드를 한번 봐볼게요
Animal 인터페이스입니다.
public interface Animal {
public void eat(String meat);
public void yell();
}
Tiger 클래스와 Lion는 Animal 인터페이스를 상속하고 있습니다.
바뀐 Zoo 클래스입니다.
public class Zoo {
public void eat(Animal animal){
animal.eat("고기");
}
public void yell(Animal animal){
animal.yell();
}
}
마지막으로 main 클래스가 있는 StartApplication 클래스입니다.
public class StartApplication {
public static void main(String[] args) {
Zoo zoo = new Zoo();
Animal lion = new Lion();
Animal tiger = new Tiger();
zoo.yell(lion);
zoo.yell(tiger);
}
}
- lion과 tiger를 불러서 각각 yell 메소드를 호출했지만 Zoo 클래스안에서는 코드의 수정이 발생하지 않았습니다.
- 즉, ocp원칙을 잘 지켜서 Lion 객체가 새롭게 만들어졌지만 기존의 코드의 추가를 했지만 수정하지는 않았습니다.
마무리
- ocp 원칙을 잘 지킨다면 기능의 확장에 아주 용이하다고 생각합니다.
- 나중에 코드의 확장을 위해서라도 프로그램을 설계할 때 ocp 원칙을 지키는 것은 중요하다고 생각합니다.
- 이제 solid원칙의 두번째 원칙까지 정리했으니 다음번에는 세번째(LSP)에서 만날게요~!
'객체지향' 카테고리의 다른 글
[객체지향의 사실과 오해] 1장 협력하는 객체들의 공동체 (0) | 2024.03.12 |
---|---|
캡슐화란 무엇일까? (0) | 2023.12.01 |
객체지향 설계란? - 3. LSP (0) | 2022.01.16 |
객체지향 설계란? - 1. SRP (solid) (0) | 2021.12.01 |
객체지향 프로그래밍 이란 (0) | 2021.02.01 |
댓글