equals 사용시 주의할 점에대해 알아보겠습니다.
equals는 객체가 동등한지 확인하는 메서드 입니다.
Object의 메서드이지만 String에서 오버라이딩하여 문자열간의 비교를 할 수 있습니다.
간단하게 "==" 연산자와의 차이를 알아보면 아래와 같습니다.
equals | 값을 비교 |
== | 주소값 비교 |
이처럼 equals는 값을 비교할때 사용하는데요
equals 사용시 주의점에 대해 알아보겠습니다.
주의점
String equals 에서 상수를 먼저 사용
상수를 먼저 사용하여 변수가 null일 경우 예외를 피하는 것입니다.
아래는 잘못된 예시 입니다.
변수.equals("상수")
if (login.username().equals("test")) {
return UriConst.HOME;
}
return UriConst.REDIRECT_OTP_LOGIN;
이때 변수가 null이라면 NullPointerException이 발생합니다.
Exception in thread "main" java.lang.NullPointerException
at Practice.equalsTest1(Practice.java:6)
at Practice.main(Practice.java:26)
상수.equals("변수")
if ("test".equals(login.username())) {
return UriConst.HOME;
}
return UriConst.REDIRECT_OTP_LOGIN;
위와같이 상수를 먼저 사용하면 null값이여도 비교가 되기 때문에
개발자의 의도대로 코드가 동작하게 됩니다.
Object equals 이용
Object의 equals는 null예외를 발생시키지 않습니다.
내부적으로 null체크를 해주기 떄문입니다.
public static void equalsTest(String name) {
if (Objects.equals(name, "test")) {
System.out.println("hello");
} else {
System.out.println("world");
}
}
Object.equals의 내부 함수
public static boolean equals(Object a, Object b) {
return (a == b) || (a != null && a.equals(b));
}
Utils 사용
StringUtils, ObjectUtils 와같은 apache commons API를 사용할 수 있습니다.
결론
정말 작은 습관들이 모여서 좋은 코드를 만드는 것 같습니다.
오늘 공부한 equals 사용법을 토대로
안전한 코드를 작성하는 습관을 만들어야 겠습니다.
'Java' 카테고리의 다른 글
InnerClass의 메모리 누수 위험 (0) | 2023.12.20 |
---|---|
Lambda, Stream (0) | 2023.10.11 |
Error와 Exception의 차이 (0) | 2023.10.10 |
ThreadPool (1) | 2023.10.08 |
자바 컬렉션 (0) | 2023.09.27 |
equals 사용시 주의할 점에대해 알아보겠습니다.
equals는 객체가 동등한지 확인하는 메서드 입니다.
Object의 메서드이지만 String에서 오버라이딩하여 문자열간의 비교를 할 수 있습니다.
간단하게 "==" 연산자와의 차이를 알아보면 아래와 같습니다.
equals | 값을 비교 |
== | 주소값 비교 |
이처럼 equals는 값을 비교할때 사용하는데요
equals 사용시 주의점에 대해 알아보겠습니다.
주의점
String equals 에서 상수를 먼저 사용
상수를 먼저 사용하여 변수가 null일 경우 예외를 피하는 것입니다.
아래는 잘못된 예시 입니다.
변수.equals("상수")
if (login.username().equals("test")) {
return UriConst.HOME;
}
return UriConst.REDIRECT_OTP_LOGIN;
이때 변수가 null이라면 NullPointerException이 발생합니다.
Exception in thread "main" java.lang.NullPointerException
at Practice.equalsTest1(Practice.java:6)
at Practice.main(Practice.java:26)
상수.equals("변수")
if ("test".equals(login.username())) {
return UriConst.HOME;
}
return UriConst.REDIRECT_OTP_LOGIN;
위와같이 상수를 먼저 사용하면 null값이여도 비교가 되기 때문에
개발자의 의도대로 코드가 동작하게 됩니다.
Object equals 이용
Object의 equals는 null예외를 발생시키지 않습니다.
내부적으로 null체크를 해주기 떄문입니다.
public static void equalsTest(String name) {
if (Objects.equals(name, "test")) {
System.out.println("hello");
} else {
System.out.println("world");
}
}
Object.equals의 내부 함수
public static boolean equals(Object a, Object b) {
return (a == b) || (a != null && a.equals(b));
}
Utils 사용
StringUtils, ObjectUtils 와같은 apache commons API를 사용할 수 있습니다.
결론
정말 작은 습관들이 모여서 좋은 코드를 만드는 것 같습니다.
오늘 공부한 equals 사용법을 토대로
안전한 코드를 작성하는 습관을 만들어야 겠습니다.
'Java' 카테고리의 다른 글
InnerClass의 메모리 누수 위험 (0) | 2023.12.20 |
---|---|
Lambda, Stream (0) | 2023.10.11 |
Error와 Exception의 차이 (0) | 2023.10.10 |
ThreadPool (1) | 2023.10.08 |
자바 컬렉션 (0) | 2023.09.27 |