스프링 핵심 개념

  • 객제 지향 언어인 자바를 통해, 객체 지향의 강력한 특징을 극대화해서 개발을 도와주는 프레임워크.
  • 역할과 구현을 분리하는 다형성을 활용해서 객체를 설계. 인터페이스 설계(역할) -> 객체 구현(구현)
  • 즉, 클라이언트를 변경하지 않고 서버의 구현 기능을 실행 시점에 유연하게 변경할 수 있어야 함.
  • 확장 가능성이 있을 것 같으면 인터페이스와 구현체로 나누고, 그럴 것 같지 않다면 그냥 구현체만 만들어서 사용하는 것도 좋은 방법.

 

SOLID

  • SRP(Single Responsibility Principle): 단일 책임 원칙. 변경을 했을 때 파급 효과가 적으면 잘 따른 것. 하나의 책임이라는 것이 모호하기에 경험을 통해 적절히 조절하는 것이 중요.

  • OCP(Open/Closed Principle): 개방-폐쇄 원칙. 확장에는 열려 있으나, 변경에는 닫혀있다. 인터페이스를 구현해서 새로운 기능을 구현하는 클래스를 만드는 것이 그 예시이지만, 클라이언트 코드를 변경해야 하므로 OCP를 지킬 수 없다. 그래서 연관관계를 맺어주는 별도의 조립, 설정자가 필요함.

  • LSP(Liskov Subtituion Principle): 리스코프 치환 원칙. 객체는 프로그램의 정확성을 깨뜨리지 않으면서 하위 타입의 인스턴스로 바꿀 수 있어야 함. 즉, 기존의 기능이 객체게 하위로 치환되더라도 동일하게 수행 되어야 한다는 것.

  • ISP(Interface Segregation Principle): 인터페이스 분리 원칙. 기능을 모듈화로 인터페이스를 분리하는 것.

  • DIP(Dependency Inversion Principle): 의존관계 역전 원칙. 클라이언트는 구현 객체가 아니라, 역할인 인터페이스에 집중해야 한다. 즉, 추상화(역할)에 의존해야 하고 구체화(구현체)에 의존하면 안된다는 것.

 

 

객체 지향 설계 원칙(OCP, DIP 등)을 수동으로 적용하는 과정에서 개발 복잡도가 증가할 수 있다.
스프링은 이를 해결하기 위해 의존성 주입(DI), 프록시, 빈 컨테이너 등의 기능을 제공하여 객체 지향적인 설계를 유지하면서도 효율적인 개발을 가능하게 하는 프레임워크로 등장하게 된 것이다.