여행사 프로젝트 - Spring DI 기술 설명

김도형·2022년 10월 21일
0
post-thumbnail

크게 목차는 아래와 같다.

  • DI 를 사용하는 이유
  • @Component
  • @Autowired
  • 회고

먼저 간단히 적용된 DI 도식화한 그림이다.

DI 를 사용하는 이유

변경에 유리한 코드로 사용하기 위해서이다.

@Component

bean id 이름 설정

  • 이름 설정은 생략가능
  • 생략 시, 참조 타입의 이름을 소문자 첫글자로만 변경해서 bean id 저장
  • 이름 설정하는 법
@Component("superEngine") // 이름 설정

// 위, 아래 결과 똑같음

@Component // 이름 생략
class SurperEngine extends Engine {} 

component-scan 등록 및 검색 순서

  1. root-context.xml component-scan Bean 추가
    검색 범위는 서브패키지까지 검색 가능
    guava 라이브러리 적용해야 component-scan 사용 가능
<context:component-scan base-package="com.devcamp.eztour"/>
  1. 패키지 내의 모든 클래스를 읽어서 set에 저장
  2. 패키지 내의 @Component(@Controller, @Service, @Repository의 메타 애너테이션) 애너테이션 적용된 모든 클래스를 찾은 후 Map 형성


[위 표는 여행사 프로젝트의 후기 게시판 component bean 등록된 Map 테이블]

component-scan 의 빈등록의 장점

  • 코드를 줄여줄 수 있다.

[적용 후]

<bean id="superEngine" class="com.fastcampus.ch3.SuperEngine"/>
@Component("superEngine")
class SuperEngine extends Engine{}

[적용 전]

@Component
class SuperEngine extends Engine{}

@Autowired

특징

  • byTpye 으로 타입 먼저 검색 후 자동 객체 연결
  • 동일한 타입이라면 이름 검색 후 자동 객체 연결

검색 후 연결

후기 게시판 component bean 의 Map에 저장된 객체 중 @Autowired 가 적용됐는지 검색 후 타입이 맞다면 자동 연결

후기 게시판 @Autowired 자동 연결

RvwController(후기 게시판 Controller)

@Controller
public class RvwController {

    @Autowired RvwService rvwService;
    @Autowired RvwLkAdmService rvwLkAdmService;
    
	}

RvwService(후기 게시판 Service)

@Service
public class RvwServiceImpl implements RvwService {

    @Autowired
    RvwDao rvwDao;
    }

RvwDao(후기 게시판 Repository)

RvwLkAdmService(후기 좋아요 기능 Service)

RvwLkAdmDao(후기 좋아요 기능 Repository)

@Autowired 장점

기존의 자바의 객체 생성이라는 중복된 코드를 사용하지 않아도 됨.

회고

특히 이 bean 등록 하나만 해주면 애너테이션에 의해서 코드 결합을 줄이고 재활용성이 있어 쓰는 측면에 더 동의한다.

다만, 이번 프로젝트는 실서비스도 아니고 규모가 큰 프로젝트는 아니여서 단점을 못 느꼈지만 단점은 있다.

  • 클래스 수가 늘어나 복잡성이 증가될 수 있으며
  • 약간의 런타임 패널티가 생기기도 한다.

여기서 런타임 패널티는 각 클래스마다 애너테이션를 찾는 것에 의해서 런타임 패널티가 발생한다고 정확하지는 않지만 이러한 이유로 발생하는 거 같다.

profile
3년간 웹/앱, 자동제어 QA 🔜 개발자로 전향하여 현재 교육 회사에서 백엔드 개발자로 근무 중입니다.(LinkedIn : https://www.linkedin.com/in/dohyoung-kim-5ab09214b)

0개의 댓글