Optional
java 8부터 들어간 기능인데 null이 반환될 경우 Optional로 형변환되어 반환되도록 한다.
Optional.ofNullable('null이 될 수 있는 객체')
JUnit으로 테스트 진행할 때 알아둬야하는 부분
테스트 실행 순서는 장담할 수가 없다. 따라서 실행 순서 의존적으로 테스트를 작성하면 안된다.
테스트를 할 때는 정상 플로우보다는 예외 플로우가 훨씬 중요하다.
동일한 객체를 여러번 선언 후 초기화해서 써야하는 경우 의존성 주입(생성자 주입 등..)으로 생성된 객체를 주입함으로써 빈번한 작업을 줄일 수 있다.
스프링을 실행하면 스프링 컨테이너라는 스프링 통이 생성된다.
@Controller 애노테이션을 추가해놓으면 해당 컨트롤러 클래스 객체를 생성해서 스프링 통에 넣어놓는다.
그리고 스프링이 해당 객체를 관리한다. (스프링 빈이 관리된다고 표현한다.)
스프링 컨테이너에 객체가 추가되면 딱 하나의 객체만 등록된다.
이때 @Autowired 애노테이션을 사용하면 컨트롤러 객체를 생성할 때 해당 객체에 필요한 또다른 객체를 연결해준다.
예를 들어 MemberController를 생성할 때 MemberService 객체를 필요로 해서 @Autowired를 사용한다면,
스프링 컨테이너가 MemberController를 컨테이너에 등록할 때 @Autowired로 자동으로 MemberService를 MemberController와 연결해준다.
이때 연결하려고 하는 객체는 반드시 스프링 컨테이너에 등록되어 있어야 한다.
'스프링 빈을 등록하는 방법'
1. 컴포넌트 스캔과 자동 의존관계 설정
2. 자바 코드로 직접 스프링 빈 등록하기
@Component
위의 애노테이션을 사용하면 자동으로 스프링 빈으로 등록된다. (컴포넌트 스캔)
@Controller
위의 애노테이션을 사용했을 때 스프링 빈으로 등록된 이유는 컴포넌트 스캔 때문이다.
위의 애노테이션의 정의로 이동하면 @Component 애노테이션을 발견할 수 있다.
@SpringBootApplication
위의 애노테이션의 정의를 열어보면 @ComponentScan이라는 애노테이션을 발견할 수 있다.
(컴포넌트 스캔을 하는 이유)
스프링은 스프링 컨테이너에 빈을 등록할 때, 기본적으로 싱글톤으로 등록한다(유일하게 하나만 등록해서 공유한다)
따라서 같은 스프링 빈이면 모두 같은 인스턴스이다.
설정으로 싱글톤이 아니게 설정할 수 있기는 하지만, 특별한 경우를 제외하면 대부분 싱글톤을 사용한다.
의존성 주입에는 3가지 방법이 있다.
필드 주입, 생성자 주입, setter 주입
class MemberService {
// 필드 주입
@Autowired
private MemberRepository memberRepository;
// 생성자 주입
@Autowired
public MemberService(MemberRepository memberRepository) {
this.memberRepository = memberRepository;
}
// setter 주입
@Autowired
public void setMemberService(MemberRepository memberRepository) {
this.memberRepository = memberRepository;
}
}
필드 주입은 선호되지 않는 방법인데, 스프링이 켜질 때 의존성을 주입하고 그 이후에는 주입하고자 하는 객체를 바꿀 수 있는 방법이 없다.
setter 주입도 선호되지 않는 방법인데, 스프링 빈으로 등록된 후 사실 memberRepository가 변경될 일이 크게 없다.
(그럴거면.. 필드 주입이 나은 거 아닌가..)
그럼에도 setter 주입을 하려면 public으로 선언되어야 하기 때문에 불필요한 의존성 주입이 발생할 수 있다.
의존관계가 실행 중에 동적으로 바뀌는 경우는 거의 없으므로 생성자 주입을 권장한다.
DDL의 경우 프로젝트 내에서 따로 sql 디렉토리를 만들어서 관리하면 좋다.
(create table, create index 등등..)
'공부공부' 카테고리의 다른 글
공부공부-230419 (0) | 2023.04.21 |
---|---|
공부공부-230410 (0) | 2023.04.12 |
공부공부-230409 (1) | 2023.04.10 |
공부공부-230401 (0) | 2023.04.01 |
공부공부-230320 (0) | 2023.03.20 |