스프링에 왜 객체 지향 이야기가 나올까? 스프링은 DI(Dependency Injection)을 통해서 OCP, DIP를 가능하게 지원한다. DI는 의존관계 주입, 의존성 주입이라고 하며, DI 컨테이너를 제공한다. DI 컨테이너는 자바의 객체들을 컨테이너 안에 넣어두고 이 안에서 의존관계를 연결해주고 주입해주는 기능을 제공하는 것이다. 이것을 활용하여 클라이언트 코드의 변경 없이 기능을 확장할 수 있다. 이제까지의 포스팅을 정리해보면, 모든 설계에 역할과 구현을 분리할 필요가 있다. 애플리케이션 설계도 공연을 설계 하듯이 배역(인터페이스, 역할)만 만들어두고, 배우(구현)는 언제든지 유연하게 변경할 수 있도록 만드는 것이 좋은 객체 지향 설계이다. 이것이 가능하려면 다형성 뿐만아니라, SOLID원칙도 ..
클린코드(Clean Code)로 유명한 로버트 마틴이 좋은 객체 지향 설계의 5가지 원칙을 정리한 것이다. 이 5가지 원칙을 줄여 SOLID라 한다. SRP Single Responsibility principle(단일 책임 원칙) 하나의 클래스는 하나의 책임만 가져야 한다는 원칙이다. 하지만 정의만 이런 것이고 실제로는 하나의 책임이라는 것은 매우 모호하다. 책임이라는 것이 클 수도 있고 작을 수도 있다. 또한 문맥과 상황에 따라 다르다. 여기서 중요한 기준은 변경이다. 즉, 변경이 있을 때 파급 효과가 적으면 SRP를 잘 따른 것이라 볼 수 있다. OCP Open/Closed principle(개방-폐쇠 원칙) 5가지 중 가장 중요한 원칙으로, 소프트웨어 요소는 확장에는 열려 있으나, 변경에는 닫혀 ..
들어가기에 앞서, 먼저 스프링에 대해 잠깐 알아보자. 스프링의 생태계 스프링은 단순한 하나의 개념이 아니라, 여러 가지 기술의 모음이라 볼 수 있다. 위의 그림을 살펴보면, 먼저 스프링의 가장 핵심이 되는 스프링 프레임워크, 여러 스프링 기술들을 편리하게 사용할 수 있도록 도와주는 스프링 부트는 스프링의 필수적인 요소이다. 스프링 데이터는 데이터베이스를 편리하게 사용할 수 있도록 도와주는 것이며, 제일 많이 사용하는 것은 스프링 데이터 jpa이다. 스프링 세션은 세션 기능을 편리하게 사용할 수 있도록 도와주는 것이며, 스프링 시큐리티는 보안과 관련된 것, 스프링 Rest Docs는 API 문서화를 편리하게 해주는 것이다. 마지막으로 스프링 배치는 배치 처리에 특화된 기술이며, 스프링 클라우드는 클라우드에..