본문 바로가기

개발일지/TIL

[230806] Wrapper 클래스 비교 문제

Wrapper 클래스 비교 문제

💬 equals와 "=="의 비교는 정확히 알고 있다고 생각하고 있었습니다. 그런데 이번에 "== " 비교로 인해 문제가 발생하고 있는 코드를 마주하게 되었습니다.

 

✔ 문제

💢 아이디어에 대한 권한을 체크하기 위해 현재 유저 ID와 아이디어 작성 유저 ID를 비교를 했습니다. 근데 두 타입은 Long인데 비교를 "=="를 사용했습니다. "==" 비교는 참조 타입의 경우 주소를 비교하기 때문에 실제 값을 비교해야 하는 경우 문제가 발생합니다.

userId == idae.getUser().getId();

 

✔ 해결

✅ Long 타입의 eqauls는 실제 값을 비교한다는 것을 확인했습니다. 그래서 "=="을 equals로 변경해서 해결했습니다.

1. Long equals 메서드
public boolean equals(Object obj) {
    if (obj instanceof Long) {
        return value == ((Long)obj).longValue();
    }
    return false;
}

2. 수정 코드
userId.eqauls(idea.getUser().getId());​

생각

알고 있는 지식이어도 사람은 실수를 할 수 있습니다. 이러한 실수를 줄이기 위해 코드를 작성할 때 끊임없이 생각을 해야 합니다. 다시 한번 스스로를 다짐하는 시간이었습니다.