enum 타입에서의 == vs equals()

박윤택·2022년 11월 9일
0

JAVA

목록 보기
12/14

공통점

enum타입을 이용하여 ==과 eqauls() 연산을 했을때 같은 값을 비교한다는 연산에 있어서는 같다.

public Enum Season {
	SPRING,
    SUMMER
}

public class Main {
	public static void main(String[] args) {
    	Season seasonInstance = Season.SPRING;
        System.out.println(seasonInstance == Season.SPRING); // true
        System.out.println(seasonInstance.equals(Season.SPRING)); // true
    }
}

차이점

1. NullPointerException

public class Main {
    public enum Season {
        SPRING,
        SUMMER
    }

    public static void main(String[] args) {
        Season seasonInstance = null;

        System.out.println(seasonInstance == Season.SPRING); // false
        System.out.println(seasonInstance.equals(Season.SPRING)); // NPE
    }
}

==는 NPE를 발생시키진 않지만 equals()는 NPE를 발생시킨다.

2. 컴파일시점에서의 검사

public class Main {
    public enum Season {
        SPRING,
        SUMMER
    }
    public enum Framework {
        SPRING,
        DJANGO
    }

    public static void main(String[] args) {
        System.out.println(Season.SPRING.equals(Framework.SPRING)); // false
        System.out.println(Season.SPRING == Framework.SPRING); // incomparable types, compile error
    }
}

equals()는 컴파일 에러가 발생하지 않는 반면, ==는 컴파일 에러를 발생시킨다.

요약

eqauls()==는 같다.

==의 장점

  • 잘 동작한다
  • 좀더 빠르다
  • runtime-time에서 안전하다
  • compile-time에서 안전하다

0개의 댓글