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

문상준님의 프로필 이미지

작성한 질문수

스프링 MVC 2편 - 백엔드 웹 개발 활용 기술

조건부 평가

타임 리프 객체 접근

해결된 질문

작성

·

117

0

[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)

[질문 내용]
user.username 이 어떻게 가능한가요? private 이어서 user.getUsername() 해야하는 것 아닌가요? 아니면, 서버 사이드에서 user.username 을 user.getUsername으로 바꿔주나요?

답변 1

0

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

타임리프가Getter() 뿐만 아니라 .필드 접근 방식도 지원한다고 이해하시면 될 것 같습니다 😀

감사합니다.

문상준님의 프로필 이미지
문상준
질문자

필드가 private이어도 접근가능하면 안되는 것 아닌가요? 브라우저에서 소스보기하면, 특정 클래스의 변수이름을 알 수 있으니까 보안적으로 문제가 되지는 않나요?

필드가 private이지만, 결국 호출하는 것은 public 메서드인 getter를 호출하여 문제가 되지 않습니다 😀

User 클래스를 아래와 같이 직접 getter를 생성하고, getter에는 출력문을 추가하신 후,


static class User {
    private String username;
    private int age;

    public User(String username, int age) {
        this.username = username;
        this.age = age;
    }

    public String getUsername() {
        System.out.println("username = " + username);
        return username;
    }

    public int getAge() {
        System.out.println("username = " + username);
        return age;
    }
}

강의 초반에서 다루었던 SpringEL 표현식의 다양한 객체 접근 방식에 대해 모두 getter가 호출되는 것을 확인해보실 수 있습니다 😀


<h1>SpringEL 표현식</h1>
<ul>Object
    <li>${user.username} =    <span th:text="${user.username}"></span></li>
    <li>${user['username']} = <span th:text="${user['username']}"></span></li>
    <li>${user.getUsername()} = <span th:text="${user.getUsername()}"></span></li>
</ul>