자바에서 무언가를 비교하기 위해서는 두가지 방법을 사용할 수 있습니다.
Object 클래스에 정의되어 있는 equals() method와 자바 언어에서 제공하는 '==' 연산자(operator)입니다.
두가지의 차이는
1. equals()는 method이며 '=='는 operator입니다.
2. equals()는 method이기 때문에 오버라이딩(overriding)이 가능하여 사용자의 비지니스 로직에 따라 재정의가 가능하지만 '=='는 자바 언어에서 제공하는 이항연산자(binary operator)로서 오버라이딩이 불가능합니다.
3. equals()는 Object 클래스에 정의되어 있어 객체끼리의 비교만 가능하지만 '==' 연산자는 primitive type 끼리의 비교만 가능합니다.
따라서 primitive type 비교시에는 고민하지 말고 '==' operator를 사용하면 됩니다.
4. 고민의 여지가 생기는 부분은 객체를 비교해야 할 때입니다. 간단하게 말하자면 '==' 연산자는 객체 비교시 객체의 주소값을 비교하여 동일한 객체를 참조하고 있는지 확인하며 equals() method는 객체 내의 오버라이딩 된 equals() 기능에 따라 값을 반환합니다.
예를 들어 String 클래스에는 equals() 메소드는 같은 객체를 참조하고 있거나 같은 value(byte[])를 가지고 있다면 true를 반환하도록 오버라이딩되어 있습니다.
String a = new String("a");
String b = new String("a");
예를 들어 위의 두 String 객체를 '==' 연산자를 이용해 비교한다면 결과값은 어떻게 나올까요?
위에서 '==' 연산자는 같은 주소값을 참조하고 있는 동일한 객체여야 true값을 반환한다고 하였습니다.
네, 위의 두 String 객체는 '==' 연산자를 이용해 비교하면 false를 반환합니다.
true값을 얻기 위해서는 String 클래스의 equals() 메소드를 사용하여야 합니다.
( * String 객체는 보통 생성자 없이 interning 해주기 때문에 '==' 연산자를 사용하여도 비교가 가능합니다. )
+ 객체가 null 값인지 비교하기 위해서는 '==' operator를 사용할 수 밖에 없습니다.
그 이유로는 equals() 메소드를 실제 사용해보면 알게 될텐데 equals() 메소드를 사용하기 위해 null 객체에 접근하면 NullPointerException이 발생하기 때문입니다.
'PROGRAMMING > Java' 카테고리의 다른 글
조합(combination) 구하기 (0) | 2018.09.25 |
---|---|
Scanner.next 메소드 이후에 Scanner.nextLine 메소드 하나를 스킵하는 이유 (2) | 2018.04.27 |
java.sql.SQLException 전방향 전용 결과 집합에 부적합한 작업이 수행되었습니다. (0) | 2018.04.19 |
어레이리스트(Arraylist) 정렬(sort)하기 (1) | 2018.04.10 |
드라이버 로드를 위한 Class.forName 메소드, 더 이상 필수가 아닙니다. (0) | 2018.02.28 |