[STUDY] 240314 | Spring | 객체 생성 개념(IOC, DI)

Nimgnos·2024년 4월 16일
0

👾 STUDY

목록 보기
36/40
post-thumbnail

📌 오버라이딩

  • 부모 클래스에서 정의된 메소드를 자식 클래스에서 재정의하는 것

📌 객체 생성 어노테이션

  • @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 클래스도 수정해야함.
    ➡️ 두 클래스간 결합도가 높음.
    ➡️ 개발자가 직접 객체 생성하지 않고, 스프링이 객체를 생성해 줌.
    ➡️ 제어의 역전 (제어의 주체가 개발자에서 스프링으로 바뀜!)

ㅤㅤ

💻 스프링 객체 생성을 위해 도입된 개념

💡IOC(Inversion of Controll : 제어의 역전)

: 프로그램 구현에 필요한 객체를 개발자가 아닌 스프링이 생성하는 것!
ㅤㅤ

💡DI(Dependency Injectiom: 의존성 주입)

  • 스프링이 만들어준 객체를 개발자가 사용하는 방법
  • 스프링이 객체를 알아서 생성할 수 있도록 어노테이션을 사용한다.
  • IOC의 개념을 코드화
    ㅤㅤ

📌 어노테이션을 사용하여 객체를 생성하는 절차

  1. 모든 클래스를 스프링이 객체를 만들어 주는 건 아님. 반드시 객체를 만드려는 클래스는 기본 패키지 안에 있어야 한다. 기본 패키지 밖에서 선언된 클래스들은 스프링이 객체 생성을 해줄 수 없다.
  2. 클래스명에 객체 생성 어노테이션을 선언하면 자동으로 객체가 만들어진다.

📌 객체 생성 어노테이션

  • @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;
profile
먹고 기도하고 코딩하라

0개의 댓글