개발 공부

좋은 객체 지향 프로그래밍 ①

수달하나 2021. 6. 22. 17:47

스프링의 핵심 개념, 컨셉 ???

 

  • 스프링은 자바 언어 기반의 프레임워크.
  • 자바 언어의 가장 큰 특징인 객체지향을 담는다.
  • 스프링은 객체 지향 언어가 가진 강력한 특징을 살려내는 프레임워크.
  • 스프링은 좋은 객체 지향 어플리케이션을 개발할 수 있게 도와주는 프레임워크.

 

기존의 개발 성향은 EJB에 종속이 되서 객체지향의 좋은 특징들을 잃어버리게 됨

→ 그것을 탈피하기 위해서 Spring을 개발하여 객체 지향 중심적인 설계를 하도록 함.

 

좋은 객체 지향 프로그래밍이란?

 

흔히 아는 객체지향의 정의 말고 key word 로 생각해보자.

객체의 모임,  객체의 메세지, 유연성, 변경의 용이

 

→ 레고 블록을 조립하듯이, 컴퓨터 부품을 갈아 끼우듯이 컴포넌트를 쉽고 유연하게 변경하면서 개발할 수 있는 방법

즉 객체지향의 핵심은 다형성이다.

클라이언트에 영향을 주지 않고 무한히 확장 하여 새로운 것을 통해 기존의 역할을 대신 할 수 있도록 설계하는 방법.

 

A의 역할을 수행할 수 있는 a가 있을 때 새로운 b를 생성해서 a를 대체 할 수 있도록 하는 설계. 

 

역할구현으로 구분하면 세상이 단순해지고 유연해지면서 변경이 용이해진다.

 

  • 클라이언트는 대상의 역할만 알면 된다.
  • 클라이언트는 구현 대상의 내부 구조를 몰라도 된다.
  • 클라이언트는 구현 대상의 내부 구조가 변경되어도 영향을 받지 않는다.
  • 클라이언트는 구현 대상 자체를 변경해도 영향을 받지 않는다.

 

자반 언어의 다형성을 활용한다면 아래와 같이 설명할 수 있다.

 

역할 = 인터페이스

구현 = 인터페이스를 구현한 클래스, 구현 객체

 

객체를 설계할 때 역할과 구현을 명확히 분리하여 설계 하고 인터페이스 먼저 설계 후 그 역할을 수행하는 구현 객체 설계한다.

 

 

다형성의 본질

  • 인터페이스를 구현한 객체 인스턴스를 실행 시점에 유연하게 변경할 수 있다.
  • 다형성의 본질을 이해하려면 협력이라는 객체사이의 관계에서 시작을 해야한다.
  • 클라이언트를 변경하지 않고 서버의 구현 기능을 유연하게 변경할 수 있다.

 

이 모든것이 잘 설계된다면 

 

유연하고 변경이 용이하며 확장 가능한 설계를 할수 있기에 클라이언트에 영향을 주지 않는 변경이 가능하고 그러기 위해서는 인터페이스를 안정적으로 잘 설계하는 것이 중요하다.

 

한계

→ 인터페이스가 곧 역할

인터페이스가 변한다면 클라이언트와 서버 모두에 큰 변경이 발생한다.

따라서 인터페이스를 변화 없이 안정적으로 설계하는 것이 정말 중요하다.