MVC - Command Object


본 카테고리는 스프링 프레임워크를 다룬다.

좀 더 자세한 내용은 아래의 공식 사이트를 참고하자.

참고 스프링 프레임워크 공식 사이트


스프링 MVC 프레임워크의 커맨드 객체

파라미터의 개수가 매우 많다면 이를 처리하는 코드도 덩달아 길어지게 된다.

만약 파라미터가 변경된다면 처리할 코드도 줄거나 늘어나는 등 유지보수 비용 또한 증가할 것이다.

이러한 불편함을 줄이기 위해 요청 파라미터의 값은 커맨드 객체에 담아주는 기능이 있다.

아래의 코드를 보자.

1
2
3
4
@PostMapping("/command")
public String handleCommand(CommandRequest commandRequest) {
// ...
}

위의 /command 경로를 통해 들어온 요청 파라미터들은 CommandRequest 객체에 담겨 있어 꺼내다 쓸 수 있게 된다.

이 커맨드 객체를 사용하려면 해당 요청에 맞는 파라미터들의 타입과 일치하는 속성을 가진 객체 클래스를 생성한 뒤 이 클래스에 Getter/Setter를 추가로 작성하면 된다.

중첩 / 콜렉션

커맨드 객체로 사용하기위한 객체 A와 또 다른 커맨드 객체 B가 있다고 있다고 가정하자.

커맨드 객체 B는 객체 A를 속성값으로 가진 객체라고 할때, 이를 중첩된 커맨드 객체라고 볼 수 있다.

스프링은 이 경우에도 각 커맨드 객체에 값을 설정해준다.

아래의 코드를 보자.

1
2
3
4
5
// A.java
public class A {
private int i;
private String s;
}
1
2
3
4
5
// B.java
public class B {
private A a;
private List<String> list;
}

위와 같은 구조일 때 중첩된 커맨드 객체임을 알 수 있다.

추가적으로 객체 B는 List 콜렉션 또한 속성으로 가지고 있음을 알 수 있는데, 이 경우에도 스프링이 자동으로 처리해준다.