스택큐힙리스트

자바 열거형 멤버를 비교할 때 : == 또는 equals() ? 본문

카테고리 없음

자바 열거형 멤버를 비교할 때 : == 또는 equals() ?

스택큐힙리스트 2023. 3. 26. 10:38
반응형

나는 Java enum이 private 생성자와 여러 개의 public static 멤버를 가진 클래스로 컴파일된다는 것을 알고 있다. 주어진 enum의 두 멤버를 비교할 때, 나는 항상 .equals()을 사용한다.

public useEnums(SomeEnum a)

{

if(a.equals(SomeEnum.SOME_ENUM_VALUE))

{

...

}

...

}

그러나 나는 방금 .equals() 대신 == 연산자를 사용하는 코드를 만났다.

public useEnums2(SomeEnum a)

{

if(a == SomeEnum.SOME_ENUM_VALUE)

{

...

}

...

}

어떤 연산자를 사용해야 할까요?

답변 1

둘 다 기술적으로 정확합니다. .equals()의 소스 코드를 살펴보면, 그것은 단순히 ==로 연기되어 있습니다.

나는 ==을(를) 사용하지만, 그것은 null 안전성을 보장하기 때문이다.

답변 2

Java에서 enum 멤버들을 비교할 때 == 또는 equals()를 사용해야 할까?

Java의 enum 클래스는 열거형 멤버들의 집합을 정의하는데 사용됩니다. 이러한 멤버들은 보통 고정된 상수 값을 가지며, 서로 구분되는 특정한 상황을 표현하기 위해 사용됩니다. 그러나, enum 멤버들을 비교할 때, 개발자는 == 또는 equals()의 사용 방법에 대해서 고민해야 합니다.

먼저, ==는 두 객체가 같은 객체를 참조하는지 검사하는 경우에 사용됩니다. 즉, == 연산자는 두 객체의 레퍼런스 값을 비교합니다. 따라서, 두 enum 멤버가 같은 객체를 참조한다면, == 연산자를 사용해 비교하는 것이 가장 적절합니다. 이 방법은 두 객체가 같은 객체를 참조하고 있는지 여부를 빠르게 비교할 수 있기 때문입니다.

반면, equals() 메소드는 두 객체가 동일한 값을 가지는 것을 비교하는데 사용됩니다. 따라서, 두 enum 멤버가 값이 같은지 비교하고자 할 때는 equals() 메소드를 사용하는 것이 더 적합합니다. 이 방법은 두 객체의 값이 같은지를 검사하는데 사용되며, 객체의 레퍼런스 값을 비교하는 것보다는 조금 느릴 수 있습니다. 하지만, 값이 같은지 여부를 비교하기 위해서는 equals() 메소드를 사용해야 하며, == 연산자를 사용하면 원하는 결과가 나오지 않을 수 있습니다.

결론적으로, enum 멤버들을 비교할 때는 이들 멤버가 같은 객체를 참조하는지를 검사하고자 한다면, == 연산자를 사용하는 것이 유리합니다. 반면, 두 객체가 동일한 값을 가지는 것을 비교해야 한다면, equals() 메소드를 사용하는 것이 더 적합합니다. 개발자는 각각의 상황에 맞게 적절한 비교 방법을 선택할 수 있도록 다양한 방법을 공부하고 활용할 필요가 있습니다.

반응형
Comments