[ 제가 정리하며 작성한 글이기 때문에, 내용의 전문성이 떨어지오니 전적으로 신뢰하기 말아주시길 부탁드립니다. ]
*
Controller class에서 mapper를 사용할 때 지금까지는 필드 주입방식을 사용하여 mapper interface를 @Autowired하여 사용하였다.
그러나 intelliJ에서 이를 사용하지 않기를 강하게 권고하고 있기에, 생성자 주입방식으로 수정하고자 한다.
그 전에 짚고 넘어가야 할 개념들을 정리한다.
1. 생성자Constructor란 무엇인가?
//생성자의 모양
public 클래스명(매개변수) {} //이때 클래스명은 생성자를 정의하는 클래스와 동일하게 작성해야한다.
이렇게 return 형이 지정되지 않은 메서드가 보인다면 그것이 생성자이다.
생성자는 new를 통해 인스턴스가 생성될 때 '반드시' 호출되고 제일 먼저 실행되며 인스턴스 변수를 초기화한다.
우리가 생성자를 정의하지 않았는데도 프로그램이 원활히 동작했던 이유가 무엇일까? 그건 컴파일러가 자동으로 기본 생성자를 생성해주기 때문이다.
만약 생성자 오버로딩을 하였는데(2line) 기본 생성자를 코딩하지 않았다면, 기본 생성자 호출시(8line)에 에러가 발생하게 된다. 오버로딩 된 생성자가 존재하기 때문에(2line) 컴파일러가 기본 생성자를 자동으로 생성해주지 않기 때문이다.
public class ConstructorTest {
public ConstructorTest(String a) { //생성자 오버로딩
System.out.println("오버로딩 된 생성자 호출 성공");
}
public static void main(String[] args) {
ConstructorTest co = new ConstructorTest("사용자정의생성자");
ConstructorTest co = new ConstructorTest(); //컴파일 에러 발생
}
}
2. mybatis의 mapper interface는 어떤 역할을 하는가?
Mybatis는 Mapper 인터페이스에 대한 구현 클래스를 자동으로 생성하므로 개발자는 인터페이스만 생성하면 됩니다.
3. DI란 무엇인가?
인터페이스는 인스턴스화 할 수 없으므로 인터페이스의 구현체가 필요하다. (대체로 인터페이스Impl.java 같은 이름을 가진다.)
생성자는 new를 통해 클래스를 메모리에 올리는 역할을 한다.
레퍼런스
[mybatis] https://jung-story.tistory.com/128, https://jung-story.tistory.com/121?category=968067
[생성자란?] https://blog.naver.com/PostView.nhn?isHttpsRedirect=true&blogId=heartflow89&logNo=220955879645
'┝ framework > ┎ Spring' 카테고리의 다른 글
spring webflux란? (0) | 2025.02.10 |
---|---|
[Gradle] build.gradle sourceSet 설정 (feat. resource 디렉터리와 mapper) (0) | 2024.10.19 |
public String test(Model model) 에서 model은 왜 리턴타입이 아닌 파라미터로 있는걸까요 (0) | 2024.10.15 |
[java] RestTemplate의 get~ 메소드 중에는 왜 request 인자가 없을까? (0) | 2024.10.12 |
spring boot setting (0) | 2022.02.01 |