본문 바로가기

내일배움캠프/Today I Learned

[TIL] 나의 마흔 다섯 번째 회고록

이번 '스프링 심화 프로젝트'를 하면서 크게 느낀 점이 있다. 

단순한 제품 구매 서비스를 구현함에 있어서도 코드의 완성도를 어디까지 높일 수 있을지 고민하고 개선해야 한다는 점이다. 

코드에 이정도면 되겠지..?는 없다. 

 

프로젝트를 하면서 JPA이 제공해주는 기능이 많다는 것을 새삼 느꼈다. 

그 중에서 내가 사용하고 있는 부분은 아주 극...극히 소수의 도구들로 뚝딱 거리고 있었다는 걸 알게되었다. 

 

코드가 어디까지 완벽해야 하는지 스스로 어디까지 파볼 수 있는지 요즘 고민이 많다. 

 

프로젝트를 마치며 이 개념은 머리에 남겨 앞으로 코드를 작성할 때 충분히 고려해야겠다고 생각한 개념이 있다. 

 

1. OCP(Open Closed Principle)

= 개방 폐쇄 원칙

 

개방 폐쇄의 원칙(OCP)이란 

기존의 코드를 변경하지 않으면서, 기능을 추가할 수 있도록 설계가 되어야 한다는 원칙을 말한다.

 

보통 OCP를 확장에 대해서는 개방적(open)이고, 수정에 대해서는 폐쇄적(closed)이어야 한다는 의미로 정의한다.

여기서 확장이란 새로운 기능이 추가됨을 의미한다.

따라서, 기능 추가 요청이 오면 클래스를 확장을 통해 손쉽게 구현하면서, 확장에 따른 클래스 수정은 최소화 하도록

프로그램을 작성해야 하는 설계 기법을 말한다고 보면 된다.

 

 

OCP는 다형성과 확장을 가능케 하는 객체지향의 장점을 극대화하는 설계 원칙으로써,

우리는 코딩할때 강의에서 배운대로 객체를 추상화함으로써,

확장엔 열려있고 변경엔 닫혀있는 유연한 구조를 만들어 사용해오며

객체 지향 프로그래밍의 OCP 원칙의 효과를 이용해왔던 것이다.

 

 

 

이번 프로젝트를 진행하면서 그저 Service객체 위에 직접 코드를 작성하는 것으로 

강의에서 배웠던 그대로 적용하려고 했었다. 

 

그러나 팀원분 중에 한분이 Service객체를 추상화하여 

ServiceImpl 객체에 Service를 상속받아서 코드의 확장성도 고려해주는 건 어떻게 생각하시나요? 라는 물음에 

머리를 한대 맞은 것 같았다. 

 

배운 것만 사용한다면

언제나 제자리 걸음이라는 것을 이부분에서 느끼고 반성했다. 

 

다음 마지막 프로젝트에서는 

OCP를 고려한 코드를 구현함과 동시에 

유지보수의 유연성까지 

최대한 고려해서 코드를 작성해볼 생각이다. 

 

많은 기능을 해보는 것도 좋지만 

작은 기능을 만들더라도 최선을 다해 완벽함을 추구하는 것이 의미가 있다고 생각한다. 

 

 

 

@참고 : https://inpa.tistory.com/entry/OOP-%F0%9F%92%A0-%EC%95%84%EC%A3%BC-%EC%89%BD%EA%B2%8C-%EC%9D%B4%ED%95%B4%ED%95%98%EB%8A%94-OCP-%EA%B0%9C%EB%B0%A9-%ED%8F%90%EC%87%84-%EC%9B%90%EC%B9%99

 

[OOP] 💠 완벽하게 이해하는 OCP (개방 폐쇄 원칙)

개방 폐쇄 원칙 - OCP (Open Closed Principle) 개방 폐쇄의 원칙(OCP)이란 기존의 코드를 변경하지 않으면서, 기능을 추가할 수 있도록 설계가 되어야 한다는 원칙을 말한다. 보통 OCP를 확장에 대해서는

inpa.tistory.com