- Java의 모든 클래스의 최상위 부모는 Object클래스이다.
- Object클래스의 toString()메소드는 객체의 주소를 String타입으로 반환해주는 메소드이다.
- => 패키지명.클래스명@주소(16진수) 형태로 주소를 반환한다.
- Object클래스의 equals()메소드는 두 객체간의 주소값을 비교해서 같으면 true 다르면 false를 반환한다.
- => 비교클래스의 인스턴스변수.equals(대상클래스의 인스턴스변수) 형태
예제를 보면서 알아보자.
▲ MyClass라는 클래스를 만들고 맴버로 data와 인자생성자 하나를 생성했다.
▲ Object클래스에서 주소값을 반환하던 toString()메소드와 주소값을 비교하던 equals()메소드를 오버라이딩하여 주소값이 아닌 실제 데이터값을 출력하고 비교하는 메소드로 오버라이딩 하였다.
이제 메인메소드에서 활용해보자
▲ MyClass타입의 인스턴스 변수 mc1과 mc2를 생성하고 각각 데이터값으로 10을 담은 메모리를 생성하였다.
우리가 위 MyClass에서 toStirng()메소드를 오버라이딩 시켜놓았으므로 mc1,mc2 둘다 데이터값이 출력된다.
비교연산자 두개(==)는 기본적으로 같은 타입의 주소값만을 비교할 수 있다. mc1과 mc2는 같은 타입이므로 ==를 사용할 수 있는 것이고 각각 new생성자를 사용했기때문에 다른 메모리 주소를 가져있으므로 Different가 출력된다.
equals()또한 값을 비교하도록 오버라이딩되었기 때문에 mc1과 mc2의 값으므로 true가 반환된다.
또 다른 예제를 보자
▲ 이번에는 맴버변수가 2개이고, 인자를 2개받는 인자생성자가 있는 클래스이다.
따라서 toString또한 변수 2개를 모두 반환하는 오버라이딩된 메소드이며, equals()는 각각의 값을 비교하여 boolean값으로 반환하는 오버라이딩 메소드를 만들었다.
메인메소드에서 사용해보자.
▲ Point클래스형 변수 point1과 point2를 선언과 동시에 인자생성자를 통해서 데이터값을 담은 메모리를 생성했다.
toString()과 equals()는 데이터값을 호출, 데이터값을 비교하는 메소드로 모두 오버라이딩 되었기 때문에 저장된 데이터 값을 활용하여 결과값을 출력한다.
'Java' 카테고리의 다른 글
[Java]인터페이스(Interface) (0) | 2022.03.16 |
---|---|
[Java]추상클래스(Abstract Class)와 추상메소드(Abstract Method) (0) | 2022.03.16 |
[Java]Heterogenious(이질화) & Homogenious(동질화) (2) | 2022.03.15 |
[Java]InstanceOf (0) | 2022.03.15 |
[Java]오버라이드(Override) (0) | 2022.03.15 |