- 스프링은 ApplicationContext or BeanFactory라는 IOC 컨테이너 인터페이스를 제공한다.
- IOC 컨테이너를 직접 쓸 일이 거의 없다.
class OwnerController {
private OwnerRepository repo;
public OwnerController(OwnerRepository repo) {
this.repo = repo;
}
// repo를 사용합니다.
}- IOC컨테이너는 위의 코드를 동작하게 만들어준다.
- OwnerController가 IOC컨테이너 내부에 객체로 들어오게 되고 IOC컨테이너 내부에서 OwnerController의 객체를 만들어준다. OwnerRepository 타입의 객체도 만들어준다.
- IOC컨테이너는 이런 Bean들의 의존성을 관리해준다.
- Bean : 컨테이너 내부에 만든 객체들
IoC 컨테이너가 관리하는 객체를 Bean이라 한다.
스프링 IOC 컨테이너가 관리하는 객체만이 Bean이다.
- Component Scan
- Repository
- Service
- Controller
- XML에 직접 등록하는 방법
- @Bean을 이용하여 직접적으로 등록을 하면 된다.
- Bean 어노테이션으로 정의할 때는 Configuration 어노테이션을 가지고 있는 클래스 안에 정의해야 한다.
- Autowired 어노테이션을 이용해서 Bean을 꺼내 쓸 수 있다.
Entity
- Entity클래스는 DB의 테이블내에 존재하는 컬럼만을 필드로 가지는 클래스
- 엔티티 클래스는 상속을 받거나 구현체여서는 안되며, 테이블내에 존재하지 않는 컬럼을 가져서도 안된다.
DTO (Data Transfer Object)
- 계층간의 데이터 전송을 위해 필요한 객체이다.
- Setter/Getter로 이루어져 있다.
데이터 전송 객체라는 의미를 가지고 있습니다. DTO는 주로 비동기 처리를 할 때 사용합니다. 비동기 처리에서도 JSON데이터 타입으로 변환해야 하는 경우, Spring Boot에서 Jackson 라이브러리를 제공하는데, Jackson은 ObjectMapper를 사용해서 별다른 처리 없이도 객체를 JSON타입으로 변환시켜 줍니다.
VO
- 값으로 취급할 객체
- 변하지 않는 값을 가지는 객체(불변성), 내부 속성을 변경할 수 없다.
- 값이 같다면 동등한 객체
- VO의 핵심 역할은 equels()와 hashcode()를 오버라이딩 하는 것입니다.(참조객체의 동등을 표현하기 위해서)
- 동일 : 참조하고 있는 객체가 같다는 것을 의미한다.(== 연산자를 사용)
- 동등 : 객체가 참조하는 대상의 속성 값 혹은 동등하게 하는 조건이 같음을 의미한다. (equals라는 연산자를 사용)
| DTO | VO |
|---|---|
| 값이 변할 수 있다. | 값이 변하지 않는다. |
| 레이어와 레이어 사이에서 사용한다. | 모든 레이어에서 사용이 가능하다. |
| DTO dto1(1) != DTO dto(1) | VO vo1(1) == vO vo2(1) |
| 데이터 접근 외의 기능을 가지지 않는다. | 특정한 비즈니스 로직을 가질 수 있다. |

