[스프링 핵심원리 - 기본편] 내용 정리1
인프런 김영한님의 강의를 듣고,
내용을 정리하며 저의 생각도 정리하였습니다.
스프링과 객체지향
강의는 스프링의 핵심원리를 소개하기에 앞서, 객체지향에 대한 설명을 먼저 하고있다.
사실 이 부분이 스프링의 핵심이라고 말할 수 있을거 같다.
스프링은 자바 언어 기반의 프레임 워크이다
자바 언어의 가장 큰 특징은 객체지향언어이다
스프링은 객체 지향 언어가 가진 가장 강력한 특징을 살려내는 프레임워크
스프링은 좋은 객체 지향 애플리케이션을 개발할 수 있게 도와주는 프레임워크
즉, 스프링 = 자바 언어 기반 = 객체지향언어의 특징을 살린 프레임워크
스프링의 핵심을 이해하기 위해서는 먼저 객체지향의 특징을 알아야하는 이유를 명확히 설명해주고 있다.
객체지향의 특징중 특히 다형성을 잘 살펴보아야하는데, 이 부분을 가장 잘 살려내고 있다.
객체지향 프로그래밍
- 컴퓨터 프로그래밍을 명령어의 목록에서 벗어나 여러개의 독립된 단위, 즉 객체들의 모임으로 파악하고자 하는것
- 각각의 객체는 메세지를 주고받고, 데이터를 처리할 수 있다( 협력의 관계 )
- 프로그램을 유연하고 변경이 용이하게(키보드, 마우스를 갈아 끼우듯이)
즉 객체지향 프로그래밍은 메세지를 주고 받으며 데이터를 처리하는 객체들의 협력으로 초점을 맞추고 있다.
그렇게 함으로써 개발자는 편리하게(유연/변경용이) 개발을 할 수 있는것이라고 할 수 있다.
다형성
강의는 다형성의 특징을 실세계에 비유하고 있는데, 역할과 구현으로 세상을 구분한다.
(물론 완벽히 일치한 비유가 되지는 않지만, 흐름을 이해하는 용도로 생각하면 좋을거 같다)
여기서 역할은 인터페이스를 나타내고 구현은 그 구현 객체로 표현하고 있다.
자동차의 역할(인터페이스)
자동차를 구현(K3, 아반떼, 테슬라 모델3)
역할과 구현을 분리하여 생각한다면, 운전자(클라이언트) 입장에서는
- 자동차의 역할(인터페이스)만 알면된다.
- 구현대상의 내부구조를 몰라도 된다
- 구현대상의 내부구조가 변경되어도 영향을 받지 않는다
- 구현대상 자체를 변경해도 영향을 받지 않는다(바뀐 구현대상이 그 역할만 수행하면 된다)
이 말은, 운전자는 엑셀을 밟으면 속도가 올라가는 것만 알고 사용하면 된다는 것이다.
엑셀을 밟았을때 어떻게 속도가 올라가는지 그 내부 구조까지 알 필요가 없는것 처럼 말이다.
또한 속도가 올라가는 방법이 바뀌어도, 엑셀을 밟았을때 속도가 올라가기만 하면 아무 상관이 없다.
결국, 아반떼를 타다가 소나타를 타게 되어도, 자동차의 역할만 수행한다면 괜찮다라는 말이다!
다형성 활용
결국 역할은 인터페이스, 구현은 인터페이스를 구현한 클래스 구현 객체가 된다.
개발자는 설계 시 이 역할과 구현을 명확하게 분리하여 역할(인터페이스)를 먼저 부여하고,
그 역할을 수행하는 구현객체를 만들면 된다.
다형성을 활용한다는 건 역할/구현을 명확하게 구분하여 분리한다는 것이고
이렇게 개발하게 되면, 변경이 필요한 시점에 아주 쉽게 변경할 수 있다.
정리
- 실세계의 역할과 구현이라는 편리한 컨셉을 다형성을 통해 객체 세상에 가져온다.
- 유연하고 변경이 용이하다.
- 확장 가능한 설계
- 클라이언트에 영향을 주지 않는 변경
- 인터페이스의 안정적인 설계가 무엇보다 중요하다.