Spring[스프링핵심기술]
SOLID 원칙과 Spring의 핵심 기술
저번 포스트에서 간략히 언급한 핵심 기술에 대해 이번 포스트에서는 자세히 다뤄보겠습니다.
Spring을 학습하기 전에 SOLID 원칙을 이해하는 것이 중요합니다.
이 원칙들은 코드의 가독성과 유지보수성을 향상시키며, 견고하고 효율적인 소프트웨어 개발을 돕습니다.
SOLID
S : SRP 단일 책임 원칙
하나의 책임, 또는 하나의 역할만 가져야 한다는 것을 의미 합니다.
예를 들어 Spring의 Controller부분에서 사용자의 요청을 받아오면, 해당 요청은 비즈니스 로직을 호출하게 되고 호출된 비즈니스 로직에서 결과값이 도출되면 도출된 결과값을 View로 전달하는 역할을 수행해야 합니다.
[사진]
위의 사진을 기준으로 말하면 자동차는 움직이는 역할만하고, 운전자는 운전 역할 등 이런식으로 각각의 클래스는 한가지의 책임만 지는 것을 SRP : 단일 책임 원칙 이라고 합니다.
SRP : 단일 책임 원칙 이 적용되면 가독성이 좋아지고, 유지보수하기 쉬워진다는 이점이 있습니다.
O : OCP 개방-폐쇄 원칙
소프트웨어의 요소는 확장에는 열려 있어야 하고, 변경에는 닫혀 있어야 한다는 원칙을 나타냅니다.
즉, 새로운 기능을 추가 및 변경 할 경우에는 기존의 코드를 수정하지 않고 새로운 코드를 추가함으로써 기능 확장이 가능해야 합니다.
이러한 원칙을 OCP : 개방-폐쇄 원칙 이라고 합니다.
이러한 원칙을 적용하면, 코드의 유연성이 높아지고, 코드를 유지보수하기 쉽게 만들어 준다는 장점이 있습니다.
L : LSP 리스코프 치환 원칙
자식 클래스는 부모 클래스로 대체할 수 있어야 한다라는 개념입니다.
한마디로 A라는 클래스가 다른 클래스로 상속할 때, 그 클래스를 사용하는 부분에서 자식 클래스로 대체해도 문제가 없어야 한다는 뜻 입니다.
이러한 원칙을 LSP 리스코프 치환 원칙 라고 합니다.
LSP 리스코프 치환 원칙을 적용하면 코드가 더 유연해지고 안정적으로 동작하게 된다는 이점이 있습니다.
I : ISP 인터페이스 분리 원칙
클래스가 사용하지 않는 인터페이스를 강제로 구현해서는 안 된다는 원칙 입니다.
쉽게 말하면, 일꾼이라는 인터페이스가 있고, 먹는 메서드, 일하는 메서드, 쉬는 메서드가 있다면 실제 일을 하는 클래스는 먹는 메서드만 구현하고 나머지는 신경쓰지 않아도 된다는 것입니다.
이것이 바로 ISP 인터페이스 분리 원칙 원칙입니다.
이러한 원칙을 적용하면 코드가 깔끔해지고 유지보수 하기가 쉬워진다는 이점이 있습니다.
D : DIP 의존성 역전 원칙
고수준 모듈이 저수준 모듈에 의존해서는 안되며 모두 추상화에 의존해야 한다는 뜻을 담고있는 원칙입니다.
여기서 고수준 모듈은 시스템의 주요 기능을 담당하는 모듈입니다.
저수준 모듈은 세부 기능을 제공하는 모듈 입니다.
알기 쉽게 말하면 자동차와, 엔진이 있을 때, 자동차는 엔진에 의존해 동작 합니다.
하지만 DIP를 적용하면 자동차와 엔진은 “운전” 이라는 공통된 개념에 의존하게 만듭니다.
추후에 엔진을 바꾸더라도 자동차의 코드를 건드리지 않고 교체가 가능해집니다.
이런식으로 DIP 의존성 역전 원칙을 적용하게 되면 유지보수가 쉽고 와 시스템을 더 유연하게 할 수 있다는 이점이 있습니다.
제어의 역전 (IoC)
소프트웨어의 디자인 패턴중 하나로, 코드의 제어 흐름이 외부에서 결정되는 디자인 패턴 입니다.
의존성 주입 (DI)
한 객체가 다른 객체에게 필요한 것들을 직접 만들거나 찾지 않고, 외부에서 주입받는 방법
결론
이번 포스트에서는 SOLID 원칙에 대해 자세히 알아보았습니다.
각 원칙은 소프트웨어 개발에서 코드의 가독성과 유지보수성을 향상시키는 데 중요한 역할을 합니다.
정리
SRP(단일 책임 원칙)은 클래스나 모듈이 하나의 책임만을 가져야 한다는 원칙으로, 코드를 더 가독성 있게 만들고 유지보수를 용이하게 합니다.
OCP(개방-폐쇄 원칙)는 소프트웨어 요소가 확장에는 열려 있고 변경에는 닫혀 있어야 한다는 원칙으로, 유연하게 기능을 추가하고 변경할 수 있도록 합니다.
LSP(리스코프 치환 원칙)은 자식 클래스가 부모 클래스로 대체 가능해야 한다는 원칙으로, 코드의 유연성과 안정성을 향상시킵니다.
ISP(인터페이스 분리 원칙)는 클래스가 사용하지 않는 인터페이스를 구현하지 말아야 한다는 원칙으로, 코드의 깔끔함과 유지보수성을 높입니다.
DIP(의존성 역전 원칙)는 고수준 모듈이 저수준 모듈에 의존하지 않아야 한다는 원칙으로, 시스템을 더 유연하게 만들어줍니다.