1. Model 객체
controller에서 html로 데이터를 보낼 때 model 객체를 사용한다.
request.setAttribute()와 비슷한 역할을 한다.
@GetMapping("/test")
public String test(Model model) {
//html로 데이터 보내기
//model.addAttribute(보내는 이름, 데이터)
model.addAttribute("name", "홍길동");
model.addAttribute("age", "20");
return "test";
}
2. IOC와 DI
소프트웨어의 성능 향상과 수정 용이를 위해 성능 단위로 분해하는 것을 모듈화라고 하며, 각 기능을 모듈이라고 한다. 모듈의 독립성이 높을 수록 수정이 용이하고 재사용이 쉽다.
모듈의 독립성은 응집도와 결합도에 의해 결정되는데 응집도는 높을수록, 결합도는 낮을수록 모듈의 독립성이 높다.
응집도를 높이고 -> AOP
결합도를 낮추자 -> IOC, DI
IOC(Inversion Of Control : 제어의 역전) -> 객체를 생성하는 주체가 개발자에서 스프링으로
DI(Dependency Injection : 의존성 주입) -> IOC를 실행한 개념
DI(의존성 주입)을 하는 방법
1. 프로그램 실행 시 필요할 것 같은 객체는 모두 만들어 준다.
1) 프로젝트 생성 시 기본 패키지 안에 있는 모든 클래스는
스프링이 자동으로 객체를 생성하는 후보가 된다(자격이 된다.)
2) 객체 생성 어노테이션을 사용하여 객체를 생성한다.
- 아래 네 가지 중 하나라도 붙어있는 클래스는 스프링이 객체를 자동 생성
1) @Component -> 스프링 초창기 버전에 사용했음
------------------------------------------------------
2) @Controller
3) @Service("만들어질 객체명 지정")
@Service
class MyServiceImpl{...}
-> MyServiceImpl myServiceImpl = new MyServiceImpl();
@Service("myService")
class MyServiceImpl{...}
-> MyServiceImpl myService = new MyServiceImpl();
4) @Repository
2. 만들어진 객체 중 필요한 객체를 의존성 주입시킨다.
- 의존성 주입을 통해 객체를 생성하는 것도 어노테이션을 사용함
1) @Autowired() - 자료형을 구분하여 객체의 의존성 주입을 시킨다.
@Component
class Board{...} -> Board board = new Board();
@Component
class Member{...} -> Member member = new Member();
//자료형 구분
@Autowired
private Member m;
-> private Member m = member;
@Component
class Avante implements Car{...} -> Avante avante = new Avante();
@Component
class Sonata implements Car{...} -> Sonata sonata = new Sonata();
@Autowired
private Car c; // 오류 발생(자료형으로 구분 불가)
2) @Resource() - 만들어진 객체명을 기준으로 의존성 주입을 시킨다.
@Component
class Avante implements Car{...} -> Avante avante = new Avante();
@Component
class Sonata implements Car{...} -> Sonata sonata = new Sonata();
//객체명으로 구분
@Resource(name="avante")
private Car c;'TIL' 카테고리의 다른 글
| 230320 [SQL, Spring] (페이징 처리) (0) | 2023.03.20 |
|---|---|
| 230317 [Spring, thymeleaf] (layout) (0) | 2023.03.17 |
| 230313 [Spring, thymeleaf] (Controller / Mapping) (0) | 2023.03.13 |
| 230310 [SQL, MyBatis] (IN 연산자 / 동적 쿼리 foreach문) (0) | 2023.03.10 |
| 220309 [SQL] (VIEW / MERGE INTO) (0) | 2023.03.09 |