Java/Language

굳이 필요한 게 아니면 enum에 toString() 을 구현하지 않는다.

허니몬 2015. 4. 22. 16:16

스프링시큐리티의 GrantedAuthority 인터페이스를 enum 타입으로 구현했는데, 이 구현체에 toString() 을 선언하면서 의도와는 다르게 동작하는 문제가 발생했다.

public enum MemberAuthority implements OrderedGrantedAuthorityCodeableEnum {
    /**
     * Administrator
     */
    ADMINISTRATOR("administrator""code.memberAuthority.administrator"1),
    /**
     * Project Manager(project, project member, jobs of project management)
     */
    PROJECT_MANAGER("project-manager""code.memberAuthority.projectManager"2),
    /**
     * Operator( operator jobs of project)
     */
    OPERATOR("operator""code.memberAuthority.operator"3),
    /**
     * Inspector(monitoring)
     */
    INSPECTOR("inspector""code.memberAuthority.inspector"4);
 
    private String code;
    private String key;
    private int order;

이런 코드인데, toString() code, key, order 에 대한 내용을 출력하도록 만들면...MemberAuthority[code="project", key="code.memberAuthority.administrator", order=1]의 형태로 나오게 된다. 스프링시큐리티에서는 권한을 문자열로 받기에 ADMINISTRATOR 으로 나와야하는데... 전혀 다른 형태가 되어버리니 권한 체크가 제대로 되지 않을 수밖에...

○ 정리

  • enum 타입에 대해서 toString()을 적용할 때는 잠시만 고심해보자.