60일차 (1) - 스프링 (Ioc, DI, lombok, )

Yohan·2024년 5월 17일
0

코딩기록

목록 보기
88/156
post-custom-banner

IoC, DI

제어의 역전(IoC) : 객체 생성의 제어권을 외부로 넘긴다.
의존성 주입(DI) : 외부에서 생성된 객체를 주입받는 개념

  • IoC는 개발자가 아니라 스프링같은 프레임워크에서 객체의 생성과 관리를 수행
    개발자는 객체를 사용하기 위해 필요한 인터페이스를 정의하는 것에 집중

클래스를 통한 Ioc, DI도 가능

  • 아래 예시를 보면 스프링 대신 HotelManager라는 클래스에서 IoC 역할을 대신한다.
    -> IoC는 다양한 객체(Chef, Course, Restaurant, Hotel)를 생성하고 조립하는 책임을 가짐
  • DI는 아래 예시에서 WesternRestaurant 객체를 생성할 때 chef1()과 course1() 메서드를 호출하여 Chef와 Course 객체를 주입하는 것을 말한다.
    -> 즉, Restaurant와 Hotel 객체를 생성할 때 필요한 의존성을 메서드를 통해 외부에서 주입하는 부분을 말한다. (@Autowired 역할)

스프링을 통한 IoC, DI

의존성 주입 (생성자 주입을 사용하자)

1. 필드 주입

  • 객체의 필드에 @Autowired 어노테이션을 붙여서 의존성 주입

2. 수정자 주입

  • Setter 메소드에 @Autowired 어노테이션을 붙여서 의존성

3. 생성자 주입

  • 의존성 주입을 받을 객체의 생성자 파라미터에 @Autowired 어노테이션을 붙여서 의존성 주입
    -> 불변성 유지가 가능한 생성자 주입을 사용하자!
    • 생성자 주입은 객체가 생성된 이후에는 의존성을 변경할 수 없습니다. new Hotel()처럼 새로 객체가 만들어지므로 변경은 불가능하고 새로 생성은 가능하다.
    • 필드 주입은 필드를 final로 선언할 수 없으므로, 객체가 생성된 이후에 의존성을 변경할 수 있으므로 불변성 유지 X
    • 수정자 주입은 필요한 의존성을 선택적으로 주입할 수 있으며, 객체 생성 이후에도 의존성을 변경할 수 있으므로 불변성 유지 X
  • Hotel 클래스에 @Component를 쓰게되면 객체 생성 제어권을 가진 HotelManager 역할을 스프링이 하게된다.
  • @Autowired는 HotelManager에서 의존성 주입에 사용되었던 객체들을 가리킨다.
  • AsianRestaurant, westernRestaurant가 둘다 @Component를 가지고 있으면 Hotel에서 어떤 레스토랑을 가져올지 몰라서 에러 발생
    업로드중..
  • @Qualifier로 명시해줌으로써 해결 가능

Spring Core 모듈 주요 아노테이션

  • @Component: 스프링의 컴포넌트 스캔 기능을 사용하여 빈으로 등록하고자 하는 클래스에 사용합니다.
  • @Autowired: 자동 주입을 위한 아노테이션으로, 스프링 컨테이너가 해당 타입에 맞는 빈을 자동으로 주입합니다.
  • @Qualifier: 여러 개의 빈이 등록되어 있을 때, 어떤 빈을 주입할지 선택하기 위한 아노테이션입니다.
  • @Controller: 스프링 MVC에서 컨트롤러 역할을 하는 클래스에 사용합니다.
  • @Service: 비즈니스 로직을 처리하는 서비스 클래스에 사용합니다.
  • @Repository: 데이터베이스와 관련된 작업을 처리하는 DAO 클래스에 사용합니다.
  • @Configuration: 자바 기반의 스프링 설정 클래스에 사용합니다.
  • @Bean: @Configuration 클래스에서 스프링 빈을 직접 등록하기 위한 아노테이션입니다.
  • @Scope: 빈의 범위를 지정하기 위한 아노테이션으로, singleton, prototype, request, session, global session 등이 있습니다.
  • @Value: 프로퍼티 값을 주입하기 위한 아노테이션으로, 스프링의 PropertyPlaceholderConfigurer를 통해 값을 가져올 수 있습니다.

Lombok

자바 개발을 더 간편하게 만들어주는 라이브러리

  • getter/setter 생성, 생성자 생성, toString 메서드 생성 등 편리함을 높여주고 코드의 가독성을 높이고 유지보수를 쉽게 만들어 준다.
  • 인텔리제이 내에서 설치해서 사용
package com.study.springstudy.springmvc;

import lombok.*;

@Setter @Getter
@ToString
@EqualsAndHashCode
@NoArgsConstructor // 기본 생성자
@AllArgsConstructor // 모든 필드 초기화 생성자
@RequiredArgsConstructor // 필수 파라미터(final 필드만) 초기화 생성자
public class Student {

//    private final String name;
    private int age;
    private int grade;
}
profile
백엔드 개발자
post-custom-banner

0개의 댓글