인프런 스프링부트 개념정리(이론)
이 글은 다음 강의의 이론 정리 글 입니다.
스프링이라는 틀안에서 동작한다. 스프링이 정해준대로 개발을 하면 된다.
틀에 맞춰서 개발을 해! 그럼 너도 나처럼 좋은 프로그램을 만들수 있어.
무료다.
소스코드가 공개되어있다.
즉, 스프링 코드의 내부를 뜯어고칠 수 있다.
만약 진짜로 고친다면, 스프링에 contribute를 할 수 있다.(그렇다면 당신은 천재만재)
스프링의 핵심, 제어의 역전
주도권이 스프링에 있다.
class가 설계도라면
object는 그 중에서 실체화가 가능한 것을 말하고,
instance는 실체화가 된 것을 의미한다.
예를 들어, 가구라는 abstract class가 있고 의자라는 class가 있을 때,
의자는 object가 되고, 이것이 실제 세상에 나타나면 instance가 되는 것이다.
object는 이런 식으로 쓸 수 있다.
의자 chair = new 의자(); //개발자가 직접 new를 호출해서 heap에 올린다.
여기서 new
는 object를 새로 만들어서 heap에 올리게 된다.
그렇다면 다음과 같은 경우에는 어떻게 될까?
public void func1(){
의자 chair = new 의자();
}
public void func2(){
의자 chair = new 의자();
}
func1에서 만들어진 chair와 func2에서 만들어진 chair는 서로 다른 주소값으로 heap에 등록된다. 따라서 한 메소드 안에서 만들어진 chair는 다른 메소드에서 쓰지 못하고, 다른 메소드에서 의자를 쓰려면 새로 new로 만들어야된다.
여기까지가 일반적인 java의 특징이었으면, Spring은 좀 다르다!
💡 Spring은?
object들을 미리 scan해서 직접 heap 메모리에 올려놓는다. 따라서, object의 주소를 개발자가 직접 관리하지 않고, spring이 관리해준다. 주도권이 spring에 있다는 뜻이다. 그렇게 되면 이미 heap에 올라가있는 object를 다양한 function에서 가져다가 쓸 수 있게 되는 것이다.
제가 만든게 아닌데 어떻게 주소를 찾아가죠? 는 나중에 해결해보자!
의존성 주입
내가 원하는 모든 class의 method에서 다 사용이 가능하다.
singletone object: 다 같은 의자다.
따라서, singletone object를 가져다 쓰는 것을 DI라고 한다.