스프링 핵심 원리(기본편) 생성일: 2022년 4월 10일 오후 5:00
0. 객체 지향 설계와 스프링 EJB(Enterprise Java Beans)
트랜잭션이 좋다. 분산 기술이 좋았다. 엔티티빈(JPA ORM)도 가지고 있었다. 비용이 비싸다. 어렵고 복잡하고 느리다(EJB에 의존적으로 코드를 짜야 한다, 컨테이너 띄우는 게 느리다). → 순수하게 자바로 돌아가자. (POJO Plain Old Java Object)
로드존슨이 EJB를 비판하면서 미래 스프링의 기틀을 다져준다. 링킹이 Hibernate 등장. 자바 표준 JPA 구현체로 사용될 수 있다.
스프링 오픈소스 제안 → EJB란 겨울을 넘어 새로운 시작으로 지음 스프링 역사
이펙티브 자바 Item1. 생성자 대신 정적 팩토리 메서드를 고려하라 정적 팩토리 메서드(static factory method)는 그 클래스의 인스턴스를 반환하는 단순한 정적 메서드이다.
1 2 3 4 5 //생성자 Boolean a = Boolean("true") //정적 팩토리 메서드 Boolean a= Boolean.valueOf("true"); 아래와 같은 장점을 가질 수 있다.
생성자와 달리 이름을 가질 수 있다. 호출될 때마다 인스턴스를 새로 생성하지 않아도 된다. 반환 타입의 하위 타입 객체를 반환할 수 있다. Java8 이전에는 인스턴스에 static 메서드를 선언할 수 없어 Companion class를 만들어 거기에 정의를 했어야 했다.
Test code +mock과 stub의 차이? 행위 검증을 추구한다는 것. mock은 행위검증을 추구하고, stub은 그렇지 않다
1. MockBean, Mock, Autowired
target(mock)으로 보면 되겠다! 예를 들어서 controller 생성자에 service가 필요하다고 가정하면, controller(service)이므로 controller에 @InjectMocks, service에 @Mock을 해준다
아래를 보면 알겠지만,
MockBean/SpyBean은 Autowired로 기억됨을 알 수 있다
@MockBean: mock객체를 스프링 컨텍스트에 등록
@Autowired: @MockBean으로 등록한 mock 객체를 주입 받아서 의존성 해결
@MockBean의 의존성 주입 Target을 @InjectMocks로 하려고 하면 실패한다
2. SpyBean
@SpyBean: spy 객체를 스프링 context에 등록
토비의 스프링 2차 정리 관심사의 분리? 관심이 같은 것끼리는 하나의 객체 안으로 또는 친한 객체로 모이게 하고
관심이 다른 것은 가능한 한 따로 덜어져서 서로 영향을 주지 않도록 분리하는 것
템플릿 메소드 패턴 슈퍼클래스에 기본적인 로직의 흐름을 만들고 기능의 일부를 추상 메소드나 오버라이딩이 가능한 protected 메소드 등으로 만든 뒤
서브 클래스에서 이런 메소드를 필요로 맞게 구현해서 사용
훅메소드? 슈퍼클래스에서 디폴트 기능을 정의해두거나 비워뒀다가 선택적으로 오버라이드할 수 있도록 만들어둔 메소드 팩토리 메소드 패턴 서브클래스에서 구체적인 오브젝트 생성 방법을 결정하게 하는 것