관리 메뉴

이사작전.com IT Blog

ModelAttribute, RequestParam, Autowired, Resource란? 본문

A series of lectures/[면접 직전에 보는] Spring Framework

ModelAttribute, RequestParam, Autowired, Resource란?

말랑고양 플랫폼공작소 2019.02.08 18:49

[스프링 어노테이션 정리] 

03. @ModelAttribute, @RequestParam, @Autowired, @Resource란?

[지난 시간 포스팅]

https://doctorson0309.tistory.com/406


안녕하세요. 이사작전.com의 플랫폼공작소입니다. 지난 시간에 이어서 '스프링 어노테이션'에 관한 포스팅을 작성하겠습니다. 학부생들도 이해할 수 있을 정도로 명쾌하게 표현하려 노력하였습니다. 혹시 잘못된 부분이 있다면 지적해주세요.


0. VO란?

- 용어 정리 : value object

- 특징 : 필드(=전역변수)와 함께 setter, getter를 가지고 있음.

특징 : 함수에 이것저것 로직을 작성할 수도 있음.

1
2
3
private int age;
public int getAge(){…};
public void setAge(int age){….};
cs

reference : http://blog.naver.com/tmondev/220344112936


1. DTO란?

- 용어 정리 : data transfer object

특징 : 순수하게 데이터를 주고받기 위해 사용하는 것.

- 특징 : 필드(=전역변수)와 함께 setter, getter를 가지고 있음.

특징 : 객체의 속성(프로퍼티, 필드)에 접근하기 위한 getter, setter 메소드만 가진 클래스를 말함.

reference : https://www.youtube.com/watch?v=OOpFpla8NXs

reference : https://stackoverflow.com/questions/1612334/difference-between-dto-vo-pojo-javabeans/1612671#1612671


2. VO vs DTO

- VO ≒ DTO

- 보통 VO에 로직을 담지 않으니, 개인적으로는 VO와 DTO를 쌍둥이처럼 생각하는 중..

- 공통점 : 필드 + getter + setter

- 차이점 : DTO는 로직을 포함할 수 없다.


3. @ModelAttribute = 파라미터 To VO

- 용어 정리 : '파라미터를 받아서 VO에 맵핑'하라는 어노테이션

- 사용 예제 : public String testMethod(@ModelAttribute UserVO userVo)

- 사용 예제 해석 : 파라미터로 들어오는 값들을 한방에 UserVO에 맵핑해주세요.

ex) UserVO.java
public class UserVO{
private String id;
private String name;

public test(String id, String name){
this.id = id;
this.name = name;
}

public String getId(){
return id;
}
}


4. @RequestParam = 파라미터 To 변수

- 용어 정리 : '파라미터를 변수에 저장'하는 어노테이션

- 사용 예제 : @RequestParam("userId") String id

- 사용 예제 해석 : 'userId'라는 파라미터를 받아서 'id'라는 변수에 저장하세요.


5. @Autowired = 자동 주입

- 용어 정리 : 스프링에게 '객체를 자동으로 생성'하라고 시키는 어노테이션

- 용어 상세 설명 : 의존하는 객체를 자동으로 삽입해주며 생성자, 필드(=전역변수), 메서드 세 곳에 적용이 가능.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public class Test{
    private TestService testService;
 
    //필드(=전역변수)에 @Autowired를 붙여봤습니다. 
    @Autowired
    private Apple apple;
    
    //생성자에 @Autowired를 붙여봤습니다.
    @Autowired
    public Test(TestService testService){
        this.testService = testService;
    }
 
    //함수에 @Autowired를 붙여봤습니다.
    @Autowired 
    public void myMethod(TestService testService){ 
        this.testService = testService; 
    }
}
cs
- 위의 예제 중 myMethod에 @Autowired를 붙인 것이 어떻게 해석되는 것인지 알아보겠습니다. Test클래스의 필드(=전역변수)인 testServiceTestService 타입 객체(≒인스턴스) myMethod메서드를 통해 자동으로 주입하도록 스프링에게 명령합니다.

6. @Resource = name속성을 통해 자동 주입

- 용어 정리 : 스프링에게 '딱 이 name을 가진 객체를 주입'하라고 시키는 어노테이션 

- 사용 이유 : 

- @Resource 어노테이션은 name속성을 통해 자동 주입을 실행한다


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class Test{
    @Resource(name="hello")
    private Hello hello;
    private HelloService helloService;
 
    public HelloService getService(){
        return helloService;
    }
 
    @Resource(name="helloSerivce")
    public void setService(HelloService helloService){
        this.helloService = helloService;
    }
 
}
cs
reference : https://okky.kr/article/291827


7. @Repository =

(포스팅 작성중...)


포스팅을 작성하면서 느낀점이 있습니다. 용어 정리가 참 힘들다는 느낌이 듭니다. Apple을 사과라고 번역하는 것처럼 단일하게 해석이 되어야 하는데, 이 분야는 서적마다 용어를 설명하는게 크게 다르네요.


감사합니다. 도움이 되었다면 '공감'을 눌러주세요.

추가로 궁금한 점이 있다면 댓글에 남겨주세요.

다음 포스팅은 @ModelAttribute, @RequestParam, @Configuration에 대해서 알아보겠습니다.

다음 포스팅으로 이동 : https://doctorson0309.tistory.com/408

0 Comments
댓글쓰기 폼