Spring과 객체지향에 대하여

gorapaduckoo·2023년 6월 11일
0

스프링 기본편

목록 보기
1/10
post-thumbnail

인프런 김영한님의 스프링 핵심 원리-기본편 강의 내용을 바탕으로 작성한 글입니다.


Spring이란?

스프링은 문맥에 따라 여러 가지 의미를 갖는다. 스프링 생태계 전체를 의미하기도 하지만, 스프링 DI 컨테이너나 스프링 프레임워크를 의미하는 경우도 있다.

스프링은 여러가지 기술의 모음으로, Spring Boot, Spring Framework, Spring Data 등으로 구성되어 있다. 공식 홈페이지에 가면 아래 사진보다 더 많은 기술들을 확인할 수 있다.

스프링에 속하는 기술들

많은 기술들 사이에서도 대표적인 기술이 있다면, 바로 스프링 프레임워크스프링 부트이다.
스프링 프레임워크는 오리지널팩에 해당하는 기술로, 스프링 DI 컨테이너, AOP, JDBC 등 다양한 기능을 지원한다.
스프링 부트는 확장팩이지만 요즘에는 필수적으로 사용한다. 스프링부트는 스프링을 편리하게 사용할 수 있도록 지원해주는 역할이다.


Spring은 왜 탄생했을까?

스프링이 탄생하기 전에는 EJB라는 자바 종합선물세트가 있었는데 느리고, 어렵고, 비쌌다. EJB는 표준 기술이었기에 널리 쓰였지만, EJB로 만든 코드는 EJB에 의존적이고, 종속적이었기 때문에 객체지향의 장점들은 전부 가려버렸다.

결국 EJB에 고통받던 개발자들이 좋은 객체 지향 애플리케이션을 개발하기 위해 오픈소스 프로젝트를 개발했는데, 그게 바로 스프링이다. 스프링은 객체지향의 장점들을 찾아 순수한 자바 객체(POJO)로 돌아가고자 탄생했다. 추운 EJB 겨울을 버텨낸 개발자들에게 찾아온 봄 같은 존재인 것이다.


객체지향의 장점: 다형성

그렇다면 스프링이 추구하는 객체지향 프로그래밍의 장점이란 대체 무엇일까?

객체지향 프로그래밍은, 프로그램을 유연하고 쉽게 변경할 수 있게 만든다. 조금 더 쉽게 말하면, 레고 블록처럼 프로그램의 각 부분을 쪼개서 모듈화한 뒤, 나중에 조립할 수 있게 해준다. 때문에 각 모듈이 서로 종속적이거나 의존적이지 않도록 설계해야 하는데, 이는 개발자들의 코드가 서로 영향을 끼치지 않아 대규모 작업에 용이하게 해준다.

로미오와 줄리엣 뮤지컬을 예로 들어보자. 공연을 밤낮으로 해야 하므로 배우들의 컨디션 관리를 위해 배역 당 2~3인의 배우를 캐스팅한 상황이다. 각 배우들은 맡은 역할을 충실히 연기(구현)한다.

이런 구조는 배우 교체가 공연에 지장을 주지 않는다. 공연을 앞둔 A배우가 갑자기 몸이 아파도, B배우로 교체하면 되기 때문이다. 로미오 역의 배우가 바뀌었다고 해서 스토리가 바뀌거나, 줄리엣 역의 대사가 바뀌는 일은 없다. 이게 바로 유연하고, 변경이 용이하다는 것이다.

이처럼 컴포넌트를 쉽게 변경하면서 개발할 수 있도록 만드는 것을 다형성(Polymorphism)이라고 한다. 다형성의 핵심은 역할(인터페이스)과 구현(객체)을 분리하여, 구현을 변경해도 역할에는 영향이 가지 않도록 한다는 데 있다.

만약 줄리엣의 대사 중에 배우 개그가 들어가 있었다면 어떨까? 로미오의 배우를 교체하면 줄리엣은 대사를 바꿔야 한다. 이를 두고 우리는 줄리엣 배역이 로미오에게 종속적이고, 의존적이라고 한다.


자바에서의 다형성

자바도 객체지향 언어이기 때문에, 역할과 구현을 분리했다. 자바에서는 인터페이스를 통해 역할을 정의하고, 클래스를 통해 구현체를 만들 수 있다. 그리고 오버라이딩을 통해 다형성을 실현할 수 있다.

interface Juliet {
    void cry();
}

class KimTaeHee implements Juliet {
	void cry() {
    	...
    }
}

class JeonJiHyeon implements Juliet {
	void cry() {
    	...
    }
}

만약 줄리엣이 우는 장면에서, 배우가 김태희라면 김태희의 cry()가 호출되고, 전지현이라면 전지현의 cry()가 호출될 것이다. 이러한 오버라이딩은 실행 시점에 구현 객체를 변경할 수 있게 해준다. 방금 전 장면까지 김태희가 줄리엣을 연기하고 있다가 전지현으로 교체되어도 공연에는 아무 지장이 없기 때문이다.

이처럼 다형성을 잘 지킨 설계는 확장 가능하고, 변경이 용이하다. 공연 횟수가 늘어나 배우를 한명 더 캐스팅하거나, 공연 직전, 심하게는 공연 도중에 배우를 교체해도 아무 문제가 없다.

하지만 이러한 설계에도 한계점은 존재한다. 바로 역할 자체가 변하면, 큰 변경이 발생한다는 것이다. 줄리엣 역할이 로미오와 사랑에 빠지지 않는 걸로 변했다면? 배우들이 새로운 대본을 외우는 것은 물론이고, 로미오 역할도 크게 수정되어야 한다.


그래서 왜 스프링인데?

스프링은 다형성을 극대화할 수 있도록 도와준다. 스프링에서 제공하는 기능들, 예를 들어 제어의 역전(Inversion Of Control)이나 의존관계 주입(Dependency Injection)은 전부 다형성을 살리기 위해 제공하는 것이다. 우리는 이러한 기능을 이용해 줄리엣의 배우를 보다 쉽게 교체할 수 있다.

0개의 댓글