Computer Language/Java

동등 비교 연산자( == )와 메소드( equals() ) [개념 및 차이점]

짠백이 2018. 9. 18. 17:13
반응형




java에서 동등 비교를 위한 방법은 2가지가 있습니다.





동등 비교 연산자 '==' 와 동등 비교 메소드'equals()' 인데요.


이번 포스팅은 두 개의 동등 비교방법의 개념과 차이점에 대해서 알아보겠습니다.





1. 개념



== (연산자) : variable (변수)에 저장된 값의 동등을 비교하며 결과를 Boolean 값으로 반환합니다.





equals() (메소드): object(객체)에 저장된 값의 동등을 비교하며 결과를 Boolean 값으로 반환합니다.


(*equals 사전적 의미 : 등호)




2. == (비교 연산자)


변수에 저장된 값의 동등을 비교하기 위해 사용하며, 참조 변수에 저장된 주소값을 비교하는 용도로도 사용합니다.







3. equals() (비교 메소드)


Java의 모든 객체의 조상 클래스인 Object 클래스에 정의되어있는 객체 메소드이기 때문에,


자바의 모든 객체는 비교 메소드인 equals() 를 호출하여 사용 할 수 있습니다.



일반적으로 사용하는 라이브러리 클래스(String, Integer 등..)에는 equals()가 Override되어 있어서 


각 클래스의 객체에 저장된 값을 비교 할 수 있습니다.


(* 만약 개발자가 정의한 클래스에서 equals() 메소드 

사용하기 위해서는 Object class의 equals() 메소드와  

hashCode() 메소드를 Override 해야 사용 할 수 있습니다.

세부내용은 추후 포스팅을 통해 다룰 예정입니다.)




[ object class에 정의된 equals() ]





[ String class에 Override되어있는 equals() ]











4. 예제소스 및 논리적인 구조




String 객체의 비교를 통해 조금 더 자세히 살펴보겠습니다.



[예제소스 1 + 논리적인 구조]





String 클래스로 2개의 객체(instance)가 생성과 동시에 "박보엉"이라는 문자열 값으로 초기화를 하였으며,


각 객체의 hashcode(=주소값)는 참조변수 str1, str2에 저장하였습니다.




if문의 조건으로 str1, str2를 비교 연산자( == )를 사용하면 참조변수에 저장된 hash code를 비교하기 


때문에 console 창에 "불일치"가 출력되고, if문의 조건으로 str2, str2를 비교 메소드( eqauls() )를 


사용하면 참조변수가 가리키는 객체에 저장된 값을 비교하기 때문에 console 창에 "일치"가 출력됩니다.










응용을 위해 예제소스 1 에서 str2 참조형 변수의 초기화 부분을 약간 수정해보겠습니다.



[예제소스 2 + 논리적인 구조]






위의 예제소스1 에서 참조변수인 str2에 str1의 hash code를 저장하였습니다.


그럴 경우 각 참조변수 str1과 str2에 저장된 hash code 값이 동일해지기 때문에 


각 참조변수가 가리키는 객체에도 완벽하게 일치합니다.



그렇게 때문에 console 창에 모두 "일치"가 출력되며, 위와 같은 상황을 


참조변수 str1과 str2가 객체 (instance)를 공유한다라고 표현합니다.

 






5. 결론


이처럼 동등 비교시에 변수와 객체에 따라서 사용 방법의 차이가 있습니다. 


자칫 가벼워보일 수 있는 개념이지만 코딩 시 혼란을 유발하는 경우가 종종 발생하기 때문에 


명확하게 구분하고 이해하고 있어야 불필요한 실수를 예방 할 수 있을 것이라고 생각합니다.



(ex) 문자열 비교시 동등 비교연산자의 사용 x )





최대한 정확한 정보를 공유하고자 항상 신중하게 포스팅을 하고 있지만, 

내용에 개선이 필요한 부분이 있을 수 도 있습니다.

혹시나 추가적인 보완이 필요하다고 판단되는 부분이 있다면 댓글로 조언해주세요. 

참고하여 수정해놓겠습니다.



* 해당 포스팅이 도움이되셨다면 공감과 댓글 부탁드릴께요 ㅎㅎ


반응형