무언가를 배울 때 그 무언가가 왜 만들어졌는지, 즉 탄생 배경을 알면 배우기가 더 수월하다는 말을 들었습니다.
고로 스프링의 첫 단추를 꿰는 저 자신을 위해 탄생 배경에 대해 간략하게 설명하는 글을 쓰겠습니다.
1. 스프링이란?
스프링 프레임워크는 자바 플랫폼을 위한 오픈 소스 애플리케이션 프레임워크입니다.
무슨 소린지 알아들을 수가 없어서 알아본 결과,
프레임워크란 컴퓨터 프로그래밍에서 복잡한 문제를 해결하거나 서술하는 데 사용되는 기본 개념 구조라는
것을 알아냈습니다. 간단히 말하면 뼈대, 골조, 프레임워크라고도 한다고 하네요.
2. 스프링의 탄생 배경
스프링 프레임워크를 사용하기 전에는 자바 프로그래밍 전반적으로 EJB라는 프레임워크를 사용하였는데요,
단위 테스트가 어렵고 불필요한 메서드를 구현해야 하고 예외 처리가 번거롭고 배포가 불편한 등 여러
문제점이 있었습니다.
때문에 스프링이라는 프레임워크가 개발되며 EJB의 자리를 대신하게 됩니다.
스프링의 이름 뜻을 들어보면 이 과정이 더욱 적나라한데요
스프링은 말 그대로 봄, EJB라는 겨울을 넘어 새로운 봄..이라는 뜻으로
아주 적나라하게 EJB를 타도하기 위해 만들어진 프레임워크라는 사실을 알 수 있습니다.
3. 스프링의 특징
우선 한 가지 짚고 넘어가자면 스프링은 특정한 하나가 아니라 여러 기술의 모음입니다.
핵심이 되는 스프링 프레임워크와 여러 기술을 편리하게 사용할 수 있게 해 주는 스프링 부트를 비롯해
스프링 데이터, 스프링 세션, 스프링 시큐리티, 스프링 Rest Docs, 스프링 클라우드 등 아주 다양한 기술의
집합이 스프링이라 할 수 있습니다.
스프링은 자바 언어 기반 프레임워크이고, 자바 언어의 가장 큰 특징이 객체 지향 언어라는 것을 보면
예상할 수 있듯이 스프링의 가장 두드러지는 핵심적인 특징은 객체 지향 언어가 가진 강력한 특징을 살려내는
프레임워크라는 점입니다.
좋은 객체 지향 애플리케이션을 개발할 수 있게 도와주는 프레임워크라는 것인데요.
객체 지향은 말로만 들어도 복잡!시럽지만 스프링의 핵심을 관통하는 주제인만큼 간단하게나마 설명을
준비했습니다.
4. 객체 지향 프로그래밍
객체 지향 프로그래밍은 컴퓨터 프로그램을 명령어의 목록으로 보는 시각에서 벗어나 여러개의 독립된 단위,
즉 "객체"들의 모임으로 파악하고자 하는 것입니다.
각 객체가 서로 메세지를 주고 받으며 협력하여 데이터를 처리할 수 있게 하는 것이죠.
객체 지향 프로그래밍의 특징으로는 유연하고 변경이 용이하다는 점이 있습니다.
조금 더 깊게 들어가자면 객체 지향 프로그래밍은 역할과 구현을 분리합니다.
좀 더 프로그래밍식의 단어로 말 하자면 인터페이스와 그의 구현체로 나눈다는 뜻입니다.
클라이언트로 하여금 구현체까지 신경 쓸 필요 없게 하기 때문에, 클라이언트는 인터페이스만 알면 됩니다.
이로 인해 구현체가 변경되더라도 클라이언트에 영향이 없도록 할 수 있습니다.
즉 다형성이라는 개념이 객체 지향 프로그래밍에서 정말 중요한 개념입니다.
4-2 다형성
자바 언어에서 다형성은 오버라이딩을 생각하면 편리합니다.
다형성을 이용해 인터페이스를 구현한 객체를 실행 시점에 유연하게 변경할 수 있습니다.
클라이언트를 변경하지 않고, 서버의 구현 기능을 유연하게 변경할 수 있는 것이죠.
자동차로 예시를 들자면 자동차의 역할이 있고 테슬라, 람보르기니 등의 구현이 있습니다.
이 때 운전자를 클라이언트라 생각한다면 운전자는 자동차의 역할만 알고 있어도 차종의 관계 없이
충분히 운전을 할 수 있습니다.
바로 이것이 다형성의 특징이자 객체 지향의 특징입니다.
말하자면 다형성을 잘 이용하는 것이 객체 지향의 핵심이라 할 수 있습니다.
하지만 이렇게 좋아보이기만 하는 객체 지향에서도 한계가 존재합니다.
5. 객체 지향의 한계
역할과 구현을 분리하는 것에는 한계가 존재하는데요.
역할, 즉 인터페이스 자체가 변하면, 클라이언트, 서버 모두에 큰 변경이 발생하게 됩니다.
그렇기 때문에 애초에 인터페이스를 안정적으로 잘 설계하는 것이 중요합니다.
스프링의 기본적인 배경과 간단한 설명을 알아보았는데요.
스프링이라는 프레임워크 자체가 객체 지향을 기반으로 하고 있기 때문에 스프링을 더 잘 사용하기 위해서는
객체 지향에 전반적인 이해와 더 좋은 객체 지향 설계를 위한 노력이 필요합니다.
때문에 다음에는 좋은 객체 지향 설계를 위한 글도 적어보겠습니다.
다들 좋프 (좋은 프로그래밍이라는 뜻) 하세요 ~!!
좋은 객체 지향 설계를 위한 글 보러가기 !
좋은 객체 지향 설계가 뭐지? (좋은 객체 지향 설계의 5가지 원칙) (tistory.com)
좋은 객체 지향 설계가 뭐지? (좋은 객체 지향 설계의 5가지 원칙)
해당 사진은 객체 지향적으로 대강 잘만 프로그래밍 하면 되는 줄 알았던 안일한 과거의 저의 모습입니다. 좋은 객체 지향 프로그래밍. 말만 들어도 머리가 어지러운데 원칙까지 있다니... 벌써
kes0917.tistory.com
해당 글은 김영한님의 스프링 핵심 강의를 기반으로 작성 되었습니다.
'Spring' 카테고리의 다른 글
[스프링] 자바 기반 AppConfig를 스프링으로 바꿔보자 (0) | 2023.03.15 |
---|---|
[스프링] DI, IoC, 컨테이너가 뭐지? (DI, IoC, 컨테이너의 간단 정리) (0) | 2023.03.15 |
[스프링] AppConfig을 리팩터링 해 보자 (0) | 2023.03.15 |
[스프링] AppConfig가 뭐지? (0) | 2023.03.14 |
[스프링] 좋은 객체 지향 설계가 뭐지? (좋은 객체 지향 설계의 5가지 원칙) (2) | 2023.03.10 |
댓글