- 객체 지향 프로그래밍 : 여러 독립적인 객체들의 결합과 협력으로 결과를 출력한다.
OOP(Object-Oriented Programming)와 같은 말로, 명령어가 나열된 프로그램이 아닌 각각의 객체가 서로 메시지를 주고받으며 데이터를 처리하고 결과를 도출한다.
마치 바퀴, 엔진, 차 frame 등등의 여러 부품이 모여 하나의 자동차를 만드는 그림과 같다.
이는 프로그램을 유연하고 변경하기 쉽게 해준다.
OOP는 다음과 같은 특징을 가진다.
- 추상화 : 객체들의 공통된 속성을 모델링하여 프로그램을 단순화한다.
- 캡슐화 : 객체의 필드 및 함수에 대한 접근을 제한하여, 데이터를 보호하고 유지보수성을 높인다.
- 상속 : 객체 간의 상속 관계를 설정하여 필드 및 함수를 물려받게 한다.
코드의 재사용성을 높이며, 계층적 구조를 형성할 수 있다.
- 다형성 : 같은 이름의 함수를 서로 다른 객체에서 다르게 동작하게 한다.
코드의 유연성을 향상시킨다.
Spring은 위와같은 객체 지향의 특징을 극대화하는 framework이다.
이 중 Spring의 꽃은 다형성의 극대화인데, 다형성에 대해 좀 더 알아보자.
다형성(多形性), 여러 가지 형태를 가질 수 있는 성질이다.
아래와 같은 공연 무대를 떠올려보자.
로미오의 경우, 어떤 남자 배우든 상관없이 "로미오"라는 역할에 충실하게 될 것이다.
줄리엣의 경우, 마찬가지로 어떤 여자 배우든 "줄리엣"이라는 역할에 충실할 것이다.
이와 같이, 다형성을 활용하면 역할과 구현을 분리할 수 있게 된다.
Java에서는 Interface로 역할을 부여하고, 역할을 수행하는 Class로 구현 객체를 생성한다.
역할과 구현을 분리한다는 것은, 또다른 의미로 관객(Client)의 입장에서는 어떤 남자 배우(Class)가 로미오 역할(Interface)을 연기하든 상관없이 공연(Program)을 즐길 수 있음을 의미한다.
즉! 클라이언트의 코드 변경없이 서버의 구현 기능을 유연하게 변경할 수 있고, Spring을 통해 이 특성을 극대화 할 수 있다.