상황
회사에서 이메일을 발신하는 기능이 있다.
원래는 등록자와 담당자에게만 갔는데, 처리자에게도 발신하도록 하는 기능을 추가하기로 하였다.
추가를 하면서 이전 값과 새로운 값 즉 문자열에 대해 비교를 하여 분기를 해야하는데 equals가 아닌 == 으로 했더니 내가 원하던 조건이 성립되지 않았다.
원인 파악
chatGpt에 물어봤더니 아래와 같이 답해줬다.
복사하기 붙혀넣기가 아닌 일부 내용만 발췌해서 적었다.
== 연산자
- 기본 자료형(int, char, boolean 등)은 값을 비교한다
- 객체에서는 참조(메모리 주소)를 비교한다.
- 즉, 두 객체가 동일한 메모리 주소를 가리킬 때만 true를 반환
String a = new String("hello");
String b = new String("hello");
System.out.println(a == b); // false, a와 b는 서로 다른 메모리 주소를 가리킨다
equals 메소드
- 간단하다.
- 객체의 값을 비교한다.
- String, Integer 등 많은 Java Class는 equals 메소드를 override하여 값 비교를 수행하도록 구현되어있다.
String a = new String("hello");
String b = new String("hello");
System.out.println(a.equals(b)); // true, a와 b의 값을 비교
해결
그래서 나는 == 연산자가 아닌 equals 메소드를 사용하여 값 비교를 하였고, 내가 원하던 로직으로 처리를 할 수 있었다.
느낀점
빠른 구현을 위해서 chatGPT에게 물어보긴 하였지만, Java의 Class를 먼저 찾아볼걸이라는 생각을 했다.
이토록 간단한 방법인데 이걸 몰랐다는게 난 아직 미숙하고 겸손하고 배워야할게 많다고 생각됬다.
앞으론 이런 실수를 하지 않도록 해야겠다.
그리고 간단했던 것이더라도 이렇게 기록을 남겨 복기를 해야곘다.