반응형
Long타입의 변수가 2개 있다.
두 값을 비교해서 같을 때 데이터베이스의 특정 컬럼의 값을 업데이트 하는 로직이다.
아주 간단한 작업이다.
로컬에서 테스트할 때 로컬 데이터베이스에 있는 Row를 가지고 테스트했을 때는 잘 되었다.
분명 값이 변경되는걸 확인했고 스웨그로 몇 번을 테스트했다.
그리고 개발 서버에 배포를 하고 프론트 개발자분들에게 API가 개발되었다고 이야기했다.
퇴근길에 안된다는 메일을 받았고 온통 왜지? 라는 물음을 가지고 있었다.
출근을 해서 소스를 열어보고 테스트를 진행했다.
클라이언트에서 테스트한 Long형 값을 가지고 개발 데이터베이스와 연결했는데, 정말 변경이 일어나지 않는다.
뭔 일이지? 하는 마음에 혹시 비교가 잘못되나 싶어 if문에 log를 남겨보았다. 역시나 서로 다르다고 찍힌다.
내가 비교했던 구문은 이렇다.
Long ptrId = 4876L;
if (ptlId == item.getId()) {
//업데이트
} else {
//서로 다름
}
뭔가 이상하다는 느낌을 받았다.
Objective-c, Swift위주로 문법 작업을 했던터라, 자바의 기초 문법에 약한 나는 비교가 이게 아니라는걸 직감했다.
그래서 아래와 같이 변경 후 테스트를 진행하니 정상적으로 업데이트가 일어났다.
Long ptlId = 4876L;
if (ptlId.equals(item.gitId())) {
//업데이트
} else {
//서로 다름
}
로컬 서버에서 테스트할 때는 그 값의 범위가 -127 ~ 127 사이의 값으로 했었고, 잘 비교가 되었지만 그보다 큰 값으로 할 경우는 정상적으로 비교가 되지 않으니, 참조형 오브젝트 타입의 변수를 사용할 때는 equals 을 이용해서 비교하는 것이 안전하다는 것을 배웠다.
반응형
'프로그래밍 > Java' 카테고리의 다른 글
자바의정석 도서 구입 과정에 대한 이야기. (0) | 2023.07.30 |
---|---|
Java List 사용자 정의 정렬 예제 (0) | 2023.06.29 |
Java 매달, 첫번째 월요일 확인 예제 (0) | 2020.06.29 |
Java Calendar를 이용한 두 날짜의 차이 계산 (0) | 2019.05.15 |
Jsoup Elements 정렬(Comparator) (0) | 2019.01.30 |