코딩못하는사람

스프링이 무엇이고 왜 나왔을까? 본문

스프링(Spring)/개념

스프링이 무엇이고 왜 나왔을까?

공부절대안함 2021. 9. 17. 16:38

스프링이 어떤점이 감동이고 잘 만들어졌길래 사람들이 그렇게 좋아하고 많이 쓰일까? 라는 질문을 던졌을때

대답이 잘 안나오는거보니 나는 그저 스프링 '사용자'였나보다.

 

스프링이 왜 나왔고 어떤점이 좋은지 알아보자.

내가 읽은 책에서 스프링을 OOP 프레임워크라고 부른다. 이유가 뭘까?

자바는 대표적인 객체지향 언어중에 하나이다.

객체 지향 프로그래밍은 컴퓨터 프로그램을 명령어의 목록으로 보는 시각에서 벗어나 여러 독립된 단위인 "객체"들의 모임으로 보자는 뜻이다. 각각의 객체는 메시지를 주고받을 수 있고 데이터를 처리할 수 있다.

 

객체지향 프로그래밍은 프로그램을 유연하고 변경이 용이하게 만들어 준다.

객체지향의 다형성이라는 특징은 프로그램을 레고 블럭을 조립하듯이, 컴퓨터에 원하는 키보드,마우스를 갈아 끼우듯이, 컴포넌트를 쉽고 유연하게 변경하면서 개발 할 수 있다는 장점을 준다.

 

다형성의 특징을 잘 살리려면 역할(인터페이스) 과 구현(구현체)으로 잘 분리하는것이 필요하다.

위에서 든 예를 다시 써보자. 컴퓨터는 마우스가 필요하다. 그렇다면 컴퓨터는 마우스(인터페이스)라는 역할만 알고있으면 어떤 종류의 마우스(구현체)든 사용할 수 있게 된다.

이렇게 역할과 구현으로 잘 나누게 된다면 단순해지고 유연해지며 변경도 편리해진다.

 

특히 컴퓨터(클라이언트)는 특정마우스(구현체)의 내부 구조를 몰라도 되고, 변경되어도 영향을 받지 않는다.

이렇듯 다형성의 본질은 클라이언트를 변경하지 않고, 서버의 구현 기능을 유연하게 변경할 수 있다는 점이다.

 

하지만 다향성의 활용이 쉬울까? 코드로 보자.

MemberService(클라이언트)가 MemberRepository(인터페이스)를 의존하고 있다.

Service가 Repository를 쓸때 JDBC를 사용할수도 있고, 메모리를 쓸수도있다. 하지만 위 코드는 앞에서 말했던 다형성의 특징과 다르게 구체화된 Jdbc,Memory에 의존하고 있는 것을 볼 수 있다. 이러한 코드의 단점을 보자.

 

레포지토리가 바뀔때마다 클라이언트의 코드가 변경되어야 한다.(OCP 위반)

그 이유는? 추상적인것(역할)이 아닌 구체적인 것에 의존해 놨기 때문(DIP 위반)

 

하지만 당연히 바뀔때마다 클라이언트가 변경되어야 하는것 아닌가?

다형성으로 OCP와 ICP를 지키긴 힘든거 아닌가? 라는 생각이 든다.

맞다.순수한 자바로  좋은 객체 지향 프로그램을 개발하기위해 OCP,DIP를 지키면서 개발을 하려면 할일이 너무나도 많다.

 

그러면 다형성 + OCP,DIP 를 지키기 위해서 객체의 연관관계를 맺어주고 의존성을 주입해주는 특별한 장치가 있으면 되지 않을까? 라는 생각이 지금의 스프링 프레임워크(DI 컨테이너)를 만들었다.

 

스프링은 다형성을 활용하면서 DIP,OCP를 위반하지 않도록

스프링은 스프링 컨테이너(DI 컨테이너),DI(Dependency Injection)를 통해 의존관계를 읽어서 생성해내고 필요한 곳에 의존성을 주입해준다.

이로 인해 우리는 클라이언트 코드의 변경없이 기능 확장이 가능해져서 객체지향의 특성을 잘 살리는 개발을 쉽게 할 수 있게 되는 것이다.

 

 스프링이라는 이름은 스프링 이전 EJB에 의존적으로, 객체지향의 장점을 살리지 못하며 개발하던  개발자들의 겨울이 끝났다는 의미로 "스프링"이라고 한다.

 

이제 나는 스프링을 좋은 객체지향 애플리케이션 개발을 도와주는 프레임워크라고 불러야겠다.

 

 

 

김영한님-스프링 핵심원리' 강의 및 '스프링 입문을 위한 자바 객체지향의 원리와 이해' 책을 보고 공부하였습니다.

'스프링(Spring) > 개념' 카테고리의 다른 글

@AuthenticationPrincipal 어노테이션  (0) 2022.01.02
Filter와 Interceptor  (0) 2021.12.30
스프링과 스프링부트  (0) 2021.09.17
객체지향 설계 5원칙-SOLID  (0) 2021.09.17
스프링 Bean,Singleton,Bean Scope  (0) 2021.03.06
Comments