[ 세션 유저는 Value Object ]
짜피 세션에 값이 있으니까, request.setAttribute("user", user);를 바로 sessionUser로 담으면 안되나? request.setAttribute("user", sessionUser); 이렇게... 왜 조회해서 쓰지? -> 세션 유저는 실제로는 value오브젝트 라는 것을 만들어서 쓰기 때문!
이렇게 2개만 넣어놓고, 유저 객체를 사용하지 않는다.
DTO처럼 필요한 것만 옮겨 담아서 사용한다!
이렇게!
유저 객체에서 필요한 것만 옮겨 담는다!
왜?? → 이런게 필요하기 때문
이런게 바로 value 오브젝트 → 값을 들고 있는 오브젝트
이런 정보가… User 에 필요하니? X
유저 클래스는 상태가 변경되는 객체
유저 클래스같은 애들은 DB의 테이블과 동일하게 만들었잖아
→ Entity, Model(모델링 된 객체) 라고 부른다.
근데 SessionUser은 밸류 오브젝트. (DTO도, Entity도 아닌 건 모두 밸류 오브젝트!)
→ 한 번 세팅되면 값이 변경되지 않는 불변 객체! → setter를 못씀!! 쓰면 안됨!
[ Value Object (값 객체) 정리 ]
한 번 설정되면 그 값이 바뀌지 않는 불변 객체! 데이터를 전달하거나 값 자체에 초점을 맞추는 데 사용 예를 들어, SessionUser 같은 경우는 로그인된 사용자의 정보를 담는 용도로 쓰이며, 생성 시 받은 정보는 변경되지 않는다. 따라서, setter 메소드를 제공해서는 안 되며, 객체가 생성될 때 모든 정보가 설정되어야 함. 값 객체는 주로 데이터 전달(Data Transfer Object, DTO)에 사용되며, 엔티티와 달리 고유한 식별자를 갖지 않는다.
엔티티는 고유한 식별자를 가지고 시간에 따라 상태가 변할 수 있지만,
값 객체는 불변성을 가지고 있으며, 주로 데이터 전달에 사용!
Share article