
스프링등장의 배경
스프링이던 어떤 기술이던 해당 기술의 핵심을 알고, 그 핵심을 이해해야한다
예를 들어서 어떤 프레임워크가 나왔다면 이 프레임워크의 등장 배경에는 무엇이 있었는가?
어떤 점이 불편해서 기존의 것을 사용하지않고 새로운 기술을 탄생하게 했는가? 등의 궁금증을 품다보면 이 기술의 등장 원인을 알게 되고 그 기술의 핵심을 알게되는 것이다.
이러한 과정으로 기술의 핵심을 알고 제대로 이해해야 비로소 이 기술을 옳바르게 사용하고 있다고 할 수 있는것이다. 그렇지 않다면 그냥 API의 사용법만 알고 사용하는 것에 그친다
본론으로 돌아와 스프링은 Java언어 기반의 프레임워크로 Java언어의 특징인 객체지향 특징을 극대화 시켜주는 프레임워크이다
즉, 좋은 객체지향 어플리케이션을 개발할 수 있도록 도와주는 프레임워크이다
스프링 프레임워크 이전에는 EJB라는 모델을 사용했는데 EJB에는 캡슐화, 분산 애플리케이션, 트랜잭션 관리, 보안등 유용한 기능들이 매우 많았지만 프로젝트의 규모가 커질수록 코드가 굉장히 복잡해지고 사양 또한 무겁고 느리다는 것에 한계를 느낀 로드 존슨이 개발한 프레임워크가 바로 스프링 프레임워크 입니다.
Java언어로도 충분히 좋은 객체지향 어플리케이션을 개발할 수 있지만 스프링 프레임워크를 사용하면 객체지향의 특성을 더욱 더 극대화 시켜주며 Spring 컨테이너에서 생성되는 객체들을 모두 관리해주기 때문에 코드의 가독성 또한 크게 향상됩니다.
지금부터 이 스프링 프레임워크에 대해 왜 사용하는지 어떤 점이 객체지향의 특성을 더욱 더 극대화 시켜주는건지 파고들어가보도록 하겠습니다.
객체지향에 대해서
스프링 프레임워크를 이해하기 위해서는 먼저 객체지향의 핵심에 대해서 먼저 알아야합니다.
객체지향의 설명을 자동차를 예시로 설명하자면
만약 내가 K3자동차를 타다가도 어느날 자동차를 바꾸고싶어 아반떼로 차를 바꾼다하더라도 K3와 아반떼 모두 '자동차'라는 역할을 수행한다는 것에는 변함이 없다.
그렇기에 아반떼로 차를 바꾸더라도 운전자가 아반떼를 주행하기위해서 따로 기술을 배워야하거나 기능조작을 연습해야 할 필요는 없다.
이렇게 편리하게 '자동차'의 조작법만 배우면 어떤 차종이던 쉽게 조작할 수 있는 이유는 바로 '자동차'라는 역할을 운전자가 알고 있기 때문이다.
위에서 설명한 내용을 코드로 살펴보자면
public interface Car {
void carExcel();
void carBreak();
}
위 interface가 '자동차'라는 역할을 만들어 놓은것이다
자동차는 크게 앞으로가기위한 엑셀, 멈추기 위한 브레이크 기능 두 가지를 가지고 있는 것이다
public class AvanteCar implements Car{
@Override
public void carExcel() {
System.out.println("아반떼가 앞으로 주행합니다");
}
@Override
public void carBreak() {
System.out.println("아반떼가 브레이크를 밟습니다");
}
}
'아반떼'라는 '자동차'의 역할을 구현한 아반떼 자동차는 자동차의 역할을 가져와서 아반떼만의 기능을 구현시키면 된다
public class K3Car implements Car{
@Override
public void carExcel() {
System.out.println("K3가 앞으로 주행합니다");
}
@Override
public void carBreak() {
System.out.println("K3가 브레이크를 밟습니다");
}
}
K3도 마찬가지로 '자동차'의 역할을 가져와서 K3만의 기능을 구현하면된다
public class CarMain {
public static void main(String[] args) {
Car avanteCar = new AvanteCar();
avanteCar.carExcel();
avanteCar.carBreak();
Car k3Car = new K3Car();
k3Car.carExcel();
k3Car.carBreak();
}
}

이렇게 '자동차'라는 역할을 만들어 놓고 기능만 추가하게되면 자동차의 역할을 가지고 있는 구현체들을 무한하게 확장시킬 수 있다
이것이 객체지향프로그래밍의 가장 큰 장점중 하나이며 동시에 '자동차'에 대해서 K3자동차가 올 수 있고, 아반떼 자동차가 올 수 있고 전기차가 구현 될 수 있듯이 유연하고 변경에 용이하다는 장점을 알 수 있다.
아래 그림을 살펴보며 유연하고 변경에 용이하다는 장점이 무엇인지 더 자세히 살펴보자

위의 자동차를 통해 살펴본 코드와 똑같은 내용이지만 좀 더 개발관련 내용으로 비교를 해 그림을 그려보았다
MemberService라는 클라이언트에서는 회원의 아이디, 비밀번호, 이름 등의 데이터를 담아서 서버인 MemberRepository에게 save()메서드를 통해 회원정보 데이터를 데이터베이스에 저장해줄 것을 요청한다.
이 때 서버의 데이터베이스는 MemberRepository라는 역할(인터페이스)을 수행하는 save()추상메서드로 접근을 했기 때문에 서버는 현재 구현되어 있는 JDBCMemberRepository 또는 MemoryMemberRepository 둘 중 하나를 선택해서 DB에 저장 할 수 있다.
이렇게 필요에 따라서 JDBC서버에 저장을 할 수도있고, Memory서버에 저장을 할 수도있다.
이러한 점이 바로 유연하고 변경에 용이하다는 객체지향의 장점을 말해주며 이것이 바로 객체지향의 핵심이라고도 할 수 있는 다형성의 본질이다.
다형성을 통해 인터페이스를 구현한 객체 인스턴스를 실행 시점에 유연하게 변경할 수 있으며, 클라이언트를 변경하지 않고도 서버의 구현 기능을 유연하게 변경할 수 있는 것을 위 그림으로 확인할 수 있었다.
스프링을 알려고하는데 왜 이렇게 객체지향에 대해서 중요하다고 설명하는 것일까?
스프링은 위에서도 말했듯이 Java의 객체지향의 특성을 극대화시키는 역할을 해준다. 즉, Java객체지향을 보조해주는 도구일 뿐이다
객체지향을 극대화 시켜준다는 말은 다형성을 극대화 시켜줄 수 있다는 것을 의미하며, 스프링에서는 IoC,DI라는 개념을 활용하여 객체지향을 극대화 시켜줄뿐만아니라 역할과 구현을 편리하게 다룰 수 있도록 지원해준다
위 글은 인프런 김영한님의 Spring강의를 듣고 배운 점을 복습하기위해 작성한 것이며
혹시라도 잘못된 정보가 있다면 댓글로 알려주시면 감사하겠습니다!
'Framework > Spring' 카테고리의 다른 글
Spring MVC - @RequestMapping (0) | 2024.04.16 |
---|---|
Spring MVC - 프레임워크 사용 전과 후 & @Controller (0) | 2024.04.15 |
Spring MVC - Dispatcher Servlet과 View Resolver (0) | 2024.04.15 |
스프링 컨테이너와 싱글톤 (0) | 2024.03.23 |
객체지향 설계를 위한 5가지 원칙 (SOLID) (0) | 2024.03.20 |
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!