📌 오버라이딩
- 부모 클래스에서 정의된 메소드를 자식 클래스에서 재정의하는 것
ㅤ📌 객체 생성 어노테이션
- @Component
- @Controller
- @Service( )
- @Configuration
- @Repository(JPA)
ㅤ📌 선언된 객체를 가져와 의존성을 주입하는 어노테이션
- @Resource( )
- @Autowired
예제
Member m = new Member();
class B { public void aaa{} } class A { B b = new B( ); b.test( ); }
- 위 코드로 객체를 생성하면 클래스간 결합도가 증가하는 문제점 야기됨
- A 클래스에서 B 객체를 사용 => B 클래스를 바꾸면 A 클래스도 수정해야함.
➡️ 두 클래스간 결합도가 높음.
➡️ 개발자가 직접 객체 생성하지 않고, 스프링이 객체를 생성해 줌.
➡️ 제어의 역전 (제어의 주체가 개발자에서 스프링으로 바뀜!)
ㅤㅤ
: 프로그램 구현에 필요한 객체를 개발자가 아닌 스프링이 생성하는 것!
ㅤㅤ
📌 어노테이션을 사용하여 객체를 생성하는 절차
- 모든 클래스를 스프링이 객체를 만들어 주는 건 아님. 반드시 객체를 만드려는 클래스는 기본 패키지 안에 있어야 한다. 기본 패키지 밖에서 선언된 클래스들은 스프링이 객체 생성을 해줄 수 없다.
- 클래스명에 객체 생성 어노테이션을 선언하면 자동으로 객체가 만들어진다.
ㅤ📌 객체 생성 어노테이션
- @Component
- @Controller
- @Service( )
- @Configuration
- @Repository (JPA)
@Component -> Aaa 클래스에 대해 객체 생성 class Aaa{ } -> Aaa aaa = new Aaa( ); @Service("test") class Aaa{ } -> Aaa test = new Aaa( );
📌 DI를 통한 의존성 주입 방법 (생성된 객체 사용 방법)
- 생성된 객체를 사용할 때에도 어노테이션을 적용해서 사용함.
- @Resource( )
- 만들어진 객체의 이름을 통해 의존성 주입
- @Autowired
- 만들어진 객체와 의존성 주입하려는 객체의 자료형을 비교하여 객체 주입
Aaa a = aaa;
- @Autowired 한계점 : 의존성 주입을 할 수 있는 객체가 2개 이상이면 오류 발생!
예제
@Component class A{ } -> A a = new A( ); // @Component class B extends A{ } -> B b = new B( ); // @Component class C{ } -> C c = new C( ); // @Autowired private A a; // 오류 발생 // 만들어진 객체의 이름을 통해 의존성 주입 @Resource(name="a") private A a;