String sessionId = session.getAttribute("UserId").toString();
JSP로 소스코드를 작성 중 문득 위 코드가 어떻게 "ClassName@HashCode" 형식으로 반환되지 않는지 몰라서 잠깐 헤매게 되었다.
우선 session.getAttribute() 메소드의 리턴은 Object 타입이므로 sessionId에 대입되기 위해서는 String 타입으로 형 변환이 되어야한다.
그래서 toString()을 이용하게 되면 의도한 대로 User의 Id 값만 받아올 수 있다. 왜 "ClassName@HashCode" 이런 형식이 아니라 User의 Id값만 가져올 수 있을까?
원인은 session에 "UserId" 속성을 저장할 때 코드가 다음과 같았다.
session.setAttribute("UserId", memberDTO.getId());
위 DTO 객체의 getId() 메소드의 리턴형식이 String 이었기 때문에 UserId의 데이터 타입은 String이 된다. 그 후 session에서 UserId 속성을 가져오게 되면 원래의 데이터 타입이 String 이었으나 메소드의 리턴 타입으로 인해 Object로 형 변환된 것이다.
따라서 UserId 속성을 리턴 받은 후에 toString() 메소드는 Object의 toString() 메소드가 아닌 String의 toString() 메소드를 실행하게 되어 기대하는 값이 나오게 되는 것이었다.