SyntaxHighlighter.all(); 'Spring' 카테고리의 글 목록 (2 Page) :: 게을러지고 싶어 부지런한 개발자

Builder

개발하면서 가장 귀찮은 것 중에 하나다 Builder를 만드는 것이다. 이것은 자바 모델과도 거의 비슷한것이 반복된 내용만 가득하고.. 사용하는건 정말 편하고 좋은데 Builder자체를 만드는것은 귀찮은 일이다. Lombok 어노테이션을 사용하면 Builder도 자동으로 만들 수 있다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
package myFirstGradleProject;
 
import lombok.*;
 
 
@RequiredArgsConstructor
@Getter @Setter
@Builder
public class Customer {
    @NonNull private String name;
    private Integer age;
    @NonNull private Date dateOfBirth;
    private String gender;
    private Integer height;
}
 
 
 

이제 Builder를 사용해 오브젝트를 생성 해 보자.

 

1
2
3
4
5
6
7
8
Customer c = Customer.builder()
.name("f.softwareengineer")
.age(78)
.dateOfBirth(new Date())
.gender("female")
.height(188)
.build();
System.out.println(c.getName());
cs

 

만약 @Builder 어노테이션이 없었다면 코드의 양은 이렇다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
package myFirstGradleProject;
 
import lombok.*;
 
 
@RequiredArgsConstructor
@Getter @Setter
public class Customer {
 
@NonNull private String name;
private Integer age;
 
@NonNull private Date dateOfBirth;
private String gender;
 
private Integer height;
 
public static class builder {
private String name;
private Integer age;
private Date dateOfBirth;
private String gender;
private Integer height;
 
public builder() {
 
}
 
public builder name(String name) {
this.name = name;
return this;
}
 
public builder age(Integer age) {
this.age = age;
return this;
}
 
public builder dateOfBirth(Date dateOfBirth) {
this.dateOfBirth = dateOfBirth;
return this;
}
 
public builder gender(String gender) {
this.gender = gender;
return this;
}
 
public builder height(Integer height) {
this.height = height;
return this;
}
 
public Customer build() {
Customer c = new Customer(this.name, this.dateOfBirth);
c.age = this.age;
c.gender = this.gender;
c.height = this.height;
return c;
}
 
}
}
cs

 

여기다가 생성자와 게터 세터까지 추가하면 boilerplate 코드만 백줄이 넘는 것이다..

jsp에서 작성한 Form 데이터를 스프링의 Controller가 받아오는 방법이 있다. 



1) HttpServletRequest 클래스 이용






2) @RequestParam 어노테이션







3) 데이터 (Command) 객체 이용  

-기존의 @RequestParam의 개선방법


-2)의 @RequestParam을 사용하는 경우, 데이터를 많이 받게 되면 코드가 길어지고 복잡해짐.

따라서 2)과 같은 기존 방법보다는 데이터 (command) 객체를 이용하면 훨씬 간결해진다. 


 


3-1) Command 객체의 이름 변경

그리고 개발자는 @ModelAttribute 어노테이션을 이용하면 커맨드 객체의 이름도 변경 가능! 


만약 객체의 이름이 studentInformation인데, 이걸 좀 더 줄여서 studentInfo이라고 변경하고자 한다면 아래와 같이 변경가능 


Controller.java

1
2
3
4
5
@RequestMapping("/studentView")
    public String studentView(@ModelAttribute("studentInfo") StudentInformation studentInformation) {
    
    return "studentView";   //studentView.jsp
}
cs


studentView.jsp

1
2
3
4
5
6
7
8
9
10
11
12
이름: ${studentInfo.name} <br />
나이: ${studentInfo.age} <br />
학년: ${studentInfo.grade} <br />
반: ${studentInfo.gradeNum} <br />
 
 
<!--만약 studentInfo로 커맨드 객체명을 바꾸지 않았더라면 아래와 같이 사용...
이름: ${studentInformation.name} <br />
나이: ${studentInformation.age} <br />
학년: ${studentInformation.grade} <br />
반: ${studentInformation.gradeNum} <br /> -->
cs





출처: 인프런 Wiz Spring 

//  /example + /mapping.do = /example/mapping.do


Controller에서 @RequestMapping을 클래스와 메소드에 아래 그림과 같이 모두 적용 시 나중에 브라우저 띄울 때 두 개를 합친 url을 써야 한다.


    /example + /mapping.do = /example/mapping.do





출력된 브라우저 화면



Controller에서 View로 데이터 전달하는 두 가지 방법이 있음





1) Model 클래스를 이용한 데이터 전달 

  

 Controller.java

1
2
3
4
5
6
7
@RequestMapping("/ex.do")
    public String ex(Model model) {            //Model 객체를 파라미터로 받음
        
        model.addAttribute("id""abcde");       //Model 객체에 데이터를 담음
        
        return "ex";                           //ex.jsp
    }
cs




실행결과 


id는 abcde 입니다. 





2) ModelAndView 클래스를 이용한 데이터 전달 


Controller.java 

1
2
3
4
5
6
7
8
9
@RequestMapping("/ex2.do")
    public ModelAndView ex2() {   //데이터 타입이 ModelAndView
        
        ModelAndView mv = new ModelAndView();  //ModelAndView 객체 생성
        mv.addObject("pw""12345");     //Model 객체에 데이터를 담음
        mv.setViewName("ex2");             //뷰이름 정함 (ex2.jsp)
        
        return mv;
    }
cs


실행결과


pw는 12345 입니다. 


+ Recent posts