토비의 스프링 1장

Spring

스프링이란

자바 엔터프라이즈 애플리케이션 개발에 사용되는 애플리케이션 프레임워크

애플리케이션 바탕 틀, 공통 프로그래밍 모델, 기술 api등을 제공

  1. 스프링 컨테이너 : 또는 애플리케이션 컨텍스트라 불리는 스프링 런타임 엔진을 제공, 설정정보를 참고해서 애플리케이션을 구성하는 오브젝트를 생성 및 관리한다.

  2. IoC/DI, 서비스 추상화, AOP : 애플리케이션 코드가 어떻게 작성되어야 하는지에 대한 기준 (프로그래밍 모델)

IoC/DI - 오브젝트의 생명주기와 의존관계에 대한 프로그래밍 모델

서비스 추상화 - 유연한 추상 계층을 두는 방법

AOP - 애플리케이션 코드에 산재해서 나타나는 부가적인 기능을 독립적으로 모듈화하는 프로그래밍 모델

  1. 기술 API

오브젝트

스프링은 자바의 객체지향적 가치에 중심을 두고있기 때문에 오브젝트에 관심이 많다.

객체지향의 장점은 변화에 효과적으로 대처할 수 있다는 기술적 특징이 있다.

그것을 위해서는 분리와 확장을 고려한 설계가 필요하다. 메소드에는 관심사가 같은것끼리 묶어주고 다른 관심사는 분리해야 한다!

템플릿 메소드 패턴 : 슈퍼클래스에 기본적인 로직의 흐름을 만들고 기능의 일부를 추상 메소드 등으로 만든 후 서브클래스에서 필요에 맞게 사용하는 방법, 스프링에서 애용되는 디자인 패턴

팩토리 메소드 패턴 : 서브클래스에서 구체적인 오브젝트 생성 방법을 결정하게 하는것

슈퍼클래스

protected abstract Animal getMyPet();

서브클래스

public Animal getMyPet(){
  ...
  return cat;
}

상속을 할 때와 같이 자유로운 확장이 가능하면서 클래스의 분리가 가능하려면 인터페이스를 사용한다.

인터페이스는 추상적이고 느슨한 연결고리를 만들어주는것이다.

public interfacr Animal{
  public Food feedAnimal();
  public void cleanAnimal
}
public class Cat implements Animal{
  public Food feedAnimal(){
    ... return 캣닢;
  }

  public void cleanAnimal(){
    // 내가 고양이를 씻기는 방법 애옹
  }
}

public class Dog implements Animal{
  public Food feedAnimal(){
    ... return 개사료;
  }

  public void cleanAnimal(){
    // 내가 강아지를 씻기는 방법 멍멍
  }
}

IoC

제어의 역전

오브젝트가 자신이 사용할 오브젝트를 스스로 선택하지 않고 생성하지도 않는다. 또 자신도 어떻게 만들어지고 사용될지 모른다.

ex) 프레임워크 : 애플리케이션 코드가 프레임워크에 의해 사용된다! 그러므로 애플리케이션 코드는 그 틀 안에서 수동적으로 동작해야 한다.