인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

km54277님의 프로필 이미지
km54277

작성한 질문수

스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술

회원 웹 기능 - 조회

members/membersList.html

작성

·

244

0

- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요!
- 먼저 유사한 질문이 있었는지 검색해보세요.
- 서로 예의를 지키며 존중하는 문화를 만들어가요.
- 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.
안녕하세요
Member클래스가 구현되어있는 것을 보면 id와 name은 private으로 구현되서 밖에서 접근하지 못하게 되어있습니다.
members/membersListhtml에서 body내에 템플릿 문법으로 구성된 반복문에서 ${member.id} 와 ${member.name} 이렇게 되서 member의 id와 name에 바로 접근해서 값을 가져오는 것처럼 보이는데 어떻게 getter와 setter로 값을 가져오는 것인지 궁금합니다.
감사합니다.

답변 2

1

안녕하세요. km54277님, 공식 서포터즈 OMG입니다.

객체의 필드는 private 하지만, getter와 setter는 public으로 생성하기 때문에

getter와 setter의 이름 규칙getXxx, setXxx 으로 바인딩이 가능합니다.

이를 프로퍼티 바인딩이라 하며, 자세한 내용은 영한님의 MVC1편 강의를 참고해주세요.

감사합니다.

km54277님의 프로필 이미지
km54277
질문자

답변 감사합니다.

저러한 방식이 프로퍼티 바인딩이라는 것은 강의를 통해 알고 있습니다. 그런데 제가 궁금한 점은 생김새(?)가 member.id 와 member.name 처럼 클래스에 직접 접근해서 그 값을 가져오는 것처럼 생겨서 이것들이 어떻게 프로퍼티를 통해 값을 가져오게 되는 것인지 궁금했습니다.

감사합니다.

안녕하세요 km54277님!

.

우선 스프링과 통합하기 이전의 타임리프 사용법을 살펴볼 필요가 있을것 같습니다.

아래의 코드는 타임리프 메뉴얼에서 설명하고 있는 타임리프 사용법 입니다.

WebContext ctx = new WebContext(request, response, servletContext, request.getLocale());
ctx.setVariable("today", dateFormat.format(cal.getTime()));
        
templateEngine.process("home", ctx, response.getWriter());

.

위와 같이 WebContext 객체에 사용할 '키'와 '객체'를 매핑하는 부분이 있습니다. 그리고 저렇게 매핑된 콘텍스트를 타임리프 엔진에서 사용할 수 있도록 전달하고 있음을 알 수 있습니다.

그리고 타임리프 메뉴얼 4.2 Variables 를 참조하면

타임리프에서 ${...} 변수 표현식을 사용하게 되면 키를 가지고 객체를 찾는다는 것을 알 수 있습니다.그리고 객체의 객체의 프로퍼티에 접근하는 경우 (session.user.name) 우선 세션 객체를 찾고, 그 객체가 참조하고 있는 user객체를 그리고 프로퍼티는 getName() 을 호출하는 것을 볼 수 있습니다. 

.

즉 타임리프는 객체의 프로퍼티에 직접 접근하는 것이 아니라, getter 를 통해 접근하고 있음을 확인할 수 있습니다.

.

감사합니다.

0

codesweaver님의 댓글을 참고해주세요.

감사합니다.

km54277님의 프로필 이미지
km54277

작성한 질문수

질문하기