2021. 6. 28. 14:37ㆍDev/Spring
#Spring Bean
Spring Bean != Java Bean
#What is a Bean?
Bean은 Spring IOC Container가 관리하는 객체다. 그리고 Spring Bean Container에 존재하는 객체이다.
일단 POJO(Plain Old Java Object)부터 알아보자...
#POJO(Plain Old Java Object) = 순수한 오래된 자바 객체 ?
쉽게 말해 POJO = 그냥 객체이다. 근데 이제 어떤 규칙성도 없는 대충 만든.
그러니까 잘 만든 class도 POJO이고 대충 만든 class도 POJO이다.
Spring 말고 Java Bean이라는 개념이 있다. 이건 Spring Bean이랑 다르다.
Java Bean은 다음을 말한다.
1. class 내의 모든 필드는 private이고 getter 함수와 setter함수를 통해서만 접근 가능
2. 기본 생성자(= 아무 필드도 정하지 않는)가 public으로 선언
3. Serializer 인터페이스 구현
그러니까 Java Bean은 class이다. 근데 잘 만들어진 규칙을 따르는 class이다. 그러니까 POJO이기도 하다.
근데 모든 POJO는 Java Bean은 아니다. 왜냐면 대충 만든 class가 있을 수 있기 때문이다.
#Spring Bean ?
다시 본론으로 돌아가서 그럼 Spring Bean을 알아보자.
Spring Bean은 일단 중요한 개념이, 개발자가 객체를 선언할 필요가 없이, 어플리케이션이 객체를 관리해준다.
이게 무슨 말이냐 하면, 일단 내가 A 클래스를 만들고 사용하고 싶다고 해보자.
public class A {
//...logic and field..
}
public void main () {
A a = new A();
//...아무튼 뭔가 복잡하고 있어보이는 로직
}
보통은 이렇게 new 라는 키워드를 이용하여 객체를 할당해줄 것이고 사용할것이다.
근데 Spring Bean은 이렇게 할 필요가 없다. 왜? Spring이 선언하고 관리하니까!
그럼 어떻게 쓰냐?
@Component //Bean으로 클래스 등록
public class A {
//...logic and field
}
public class Testing {
...
@AutoWired
A a;
//무슨무슨 로직
}
이런 식으로 쓴다.
근데 그럼 왜쓰냐?
사실 그냥 일반 객체랑 똑같은데, 장점이 있다.
1. 라이프사이클 관리 용이
2. 생산성 향상
1번은 IoC, DI와 관련된 내용,
2번은 개발자의 생산성 향상이다.
예를 들어, 어떤 모듈을 만들었는데 그 모듈이 검증하는 모듈이라고 해보자.
그럼 이 모듈은 여러 인스턴스가 생성될 필요 없이 하나의 모듈만 있어도(즉, 싱글톤 객체여도) 충분하고 이게 더 이상적으로 보인다.
검증할때마다 굳이 새로운 객체를 만들 필요가 없이 기존의 객체를 재사용하면 되니까!
이 때 Bean을 사용한다고 생각하면 된다.
즉 Spring의 Bean은 동일한 객체가 재사용이 여러 번 되게 함으로서, 의존성을 줄이고 라이프사이클을 관리한다.
'Dev > Spring' 카테고리의 다른 글
[Java] Stream api 정리 (0) | 2022.09.17 |
---|---|
[Spring] gradle 정리 (0) | 2022.09.07 |
[Java] @Entity 객체의 값 수정 시 자동 DB 갱신? (0) | 2022.03.03 |
Spring Annotation - Getter, Setter (0) | 2021.06.23 |