2023. 4. 26. 08:17ㆍ프로그래밍/Java
일반적으로 우리는 서로 같은 인스턴스인지 비교하기 위해 Object클래스에 정의돼있는 equals() 메서드를 사용하곤 한다. 그러나 프로그래밍을 하다 보면 equals메서드를 재정의해서 사용하는 것을 심심찮게 볼 수 있다. 그렇다면 우리가 equals메서드를 오버라이딩 해서 사용하는 이유는 무엇일까? 말 그대로 Object클래스에서는 equals 메서드를 실행시킨 참조변수와 매개변수로 주어진 변수와의 주소값만을 비교한다.
실제 Object클래스에 정의돼있는 equals메서드이다. 코드를 보면 알 수 있듯이 단순히 메서드를 실행시킨 참조변수 this와 매개변수로 주어진 obj와의 단순 주소값만을 비교한다. 그러나 일반적으로 우리가 문자열의 값을 비교할때도 equals를 사용하는데 이는 String 클래스에 equals메서드가 재정의 돼있기 때문에 문자열을 비교하는 기능을 수행하는 equals로써 사용가능하다.
String 클래스의 equals()메서드와 Object클래스의 equals()메서드는 서로 다르게 정의돼있다는 사실을 알 수 있다. 그렇다면 우리는 이것을 어떻게 이용할 수 있을까? 쉽게 예를 들면 회원가입을 한 후 회원 정보를 DB에 저장한다고 해보자. 여기서 DB는 Map이 될 수도 있고 Set, List가 될 수도 있다. 이 때 인스턴스별로 독립적인 인스턴스 멤버를 정의해줄 것이다. 그러나 혹시라도 기존에 동일한 아이디와 닉네임 등을 가진 회원이 있다면 신규 회원이 가입할 때 이를 제한해야한다. 이 때 여러가지 요소(문자열간의 비교든 숫자간의 비교든)를 비교하게 되는데 해당 객체 타입에 해당하는 클래스에서 equals 메서드를 재정의하면 간단하게 나타낼 수 있다.
학생DB에 저장된 학생 인스턴스와 DB의 정보와 비교하려고 하는 매개변수의 id와 pw를 비교한 boolean타입의 결과값을 반환하는 메서드이다. 이는 학생정보가 DB에 있는지 없는지를 비교하는데 용이하게 이용될 것이며 이뿐만 아니라 사용자가 원하는 조건식으로 얼마든지 재정의해서 사용가능하다.
즉 equals메서드를 재정의해서 사용하는 이유는 우리가 클래스에서 직접 비교하기 까다로운 조건식등이 있을 때를 대비해 코드의 유지보수 및 가독성, 재사용성을 높이기 위해 비교하고자 하는 클래스에서 오버라이딩해 사용하는 것이다. 물론 오버라이딩이 아닌 오버로딩해서 여러가지 형태로도 사용 가능하다.
'프로그래밍 > Java' 카테고리의 다른 글
[Java, JavaScript] 웹 소켓을 이용해 다중 1대1 채팅방 구현하기(DB 연동) (0) | 2023.09.20 |
---|---|
[JSP] JSP란 무엇인가(feat.Servlet과 차이점?) (0) | 2023.06.14 |
[Java] Collection( List, Set, Map )이란? (2) | 2023.04.21 |
[Java] Arrray(배열), ArrayList, Stack(스택), Queue(큐), LinkedList, Vector 차이점 (0) | 2023.04.05 |
[Java] 초보를 위한 ArrayList에 대한 개념 정리 (0) | 2023.04.02 |