내겐 BoardDTO가 있다.
public class BoardDTO {
private int boardId;
private String title;
public int getArticleId() {
return articleId;
}
public void setArticleId(int articleId) {
this.articleId = articleId;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
}
나는 이 DTO에 데이터를 담아 JSP에서 사용하기 위해
request.setAttribute("boardDTO", boardDTO)
를 사용했다.
이때 JSP에서는 값을 가져와 보여주는 2가지 방법이 있다.
${articleDTO.getTitle()}
${articleDTO.title}
getTitle()
은 public이고 우리가 익숙한 메소드다.
title
은 우리가 명시해주었지만 private
다
어떻게 jsp는 private
변수에 접근이 가능한 걸까?
궁금해서 찾아봤지만 해답은 간단했다.
JSP는 DTO 구문을 해석해 변수명이 명시되면 해당 변수에 매칭되는 get 메소드를 호출시킨다
결국 title은 getTitle()
로 변환되어 실행되는 것이다.
좀더 명확히는
JSP가 Java 객체의 속성에 액세스 할때 JavaBeans의 사양을 사용한다.
JavaBeans 사양에 따라 property를 해석하며 public getter가 있다고 판단하는 것이다
Java 객체가 setAttribute()로 설정되면 JSP 컨테이너는 원래 객체를 래핑하는 proxy object를 생성한다.
이 프록시 객체는 원본 객체에 대한 getter, setter 메소드에대한 접근을 제공한다.
즉 프록시 객체는 인터페이스 역할을 해준다.