[Spring] 데이터 바인딩 - PropertyEditor

Junseo Kim·2020년 1월 27일
0

데이터 바인딩이란?

어떤 property의 값을 타겟 객체에 설정하는 기능.

즉, 사용자가 입력한 값을 어플리케이션 도메인 객체에 동적으로 할당하는 기능이다.

사용자는 주로 문자열을 입력하는데, int형으로 받아야 할 수도 있고, Date나 객체 그 자체로 받아야하는 경우도 있는데, 그 문자열을 객체가 가지고 있는 다양한 property 타입으로 변환해주는 기능이다.

DataBinder라는 인터페이스를 사용한다.

PropertyEditor

아래와 같은 Event 객체가 있고,
스크린샷 2020-01-27 오후 9.18.12.png

EventController에서 요청을 받아 데이터를 받을 수 있다.

스크린샷 2020-01-27 오후 9.20.11.png

요청이 문자열로 오기 때문에 "event/1" 뒤의 '1' 부분을 Integer 형으로 바꿔주어야한다.

그 작업을 하기 위해, PropertyEditor를 사용한다.

PropertyEditorSupport를 상속받는 객체를 만들어준다. 필요한 메서드를 구현해주면 되는데, 문자열을 Integer로 바꿔주는 구현은 setAsText 메서드에서 해준다.

스크린샷 2020-01-27 오후 9.23.25.png

PropertyEditor가 가지고 있는 값은 서로 다른 쓰레드에 공유가 될 수 있다. 따라서 stateful하기 때문에 쓰레드 safe하지 않는다. 즉, 여러 쓰레드에 공유해서 사용하면 안된다(Bean으로 등록해서 사용하면 안된다) Bean으로 등록해서 사용하면, 1번 회원이 2번 회원 정보를 수정하는 등 심각한 문제가 생길 수 있다.

만들어준 Editor를 사용하기 위해 위에서 만들어줬던 Controller에 @InitBinder 어노테이션을 사용하여 컨트롤러에서 사용할 Binder를 등록해줘야한다.

스크린샷 2020-01-27 오후 9.25.08.png

실행시키면, 컨트롤러가 어떤 요청을 처리하기 전에 컨트롤러에서 정의한 데이터바인더에 들어있는 PropertyEditor 사용해준다.

0개의 댓글