Object 클래스
•
Object 클래스는 java.lang 패키지에 속함
•
모든 클래스의 조상 클래스
•
컴파일 할 경우에, 자동으로 슈퍼 클래스의 멤버가 들어가 있다
◦
Object 클래스의 멤버를 모든 클래스가 사용할 수 있다.
•
모든 클래스에서 상속받아 사용할 공통 기능이 구현되어 있음
Object 클래스의 주요 메소드
주요 메소드 목록
객체 비교와 equals 메소드
== 연산자
•
== 연산자는, 두 객체의 레퍼런스 값 (주소값)을 비교해주는 연산자이다.
•
코드를 통해 알아보자.
class Circle{
int radius;
public Circle(int radius){
this.radius = radius;
}
}
public class CircleTest{
Circle cir1 = new Circle(10);
Circle cir2 = new Circle(5);
if(cir1 == cir2){
System.out.println("2개의 원은 같습니다.")
}else{
System.out.println("2개의 원은 다릅니다.");
}
}
Java
복사
•
위 코드의 결과 값은 “2개의 원은 다릅니다”와 같을 것이다.
◦
cir1과 cir2는 new 연산자를 통해 생성된 서로 다른 객체이기 때문이다.
◦
따라서, 두 객체는 서로 다른 주소값을 가지고 있을 것이다.
equals(Object obj) 메소드
•
Object의 equals(Object obj) 메소드는 인자로 건네진 객체 obj와 자기 자신의 내용을 비교하여 두 객체의 내용이 같은지 비교하는 메소드이다.
•
내용의 동일성은 전적으로 클래스 작성자가 정의할 문제이기 때문에, 클래스를 작성자가 equals() 메소드를 오버라이딩 하는 것이 원칙이다.
•
예제를 통해 알아보자.
package lecture_0929;
class INum{
private int num;
public INum(int num) {
this.num = num;
}
public int getINumber() {
return num;
}
@Override
public boolean equals(Object obj) {
if (obj instanceof INum) {
INum in = (INum)obj;
return this.num == in.getINumber();
}
return false;
}
}
public class ObjectEquality {
public static void main(String[] args) {
INum num1 = new INum(10);
INum num2 = new INum(12);
INum num3 = new INum(10);
if(num1.equals(num2))
System.out.println("num1, num2 내용 동일하다.");
else
System.out.println("num1, num2 내용 다르다.");
if(num1.equals(num3))
System.out.println("num1, num3 내용 동일하다.");
else
System.out.println("num1, num3 내용 다르다.");
}
}
Java
복사
•
위의 코드를 통해 equals() 메소드를 오버라이딩 해준 것을 볼 수 있다.
◦
메소드 내부에서는, 인자로 넘어간 obj 객체가 INum 클래스 타입이면, 다운캐스팅을 통해 INum 타입의 레퍼런스 변수 in이 형변환된 obj 객체를 가리키도록 한다.
◦
이 후, INum 클래스의 멤버 변수 num과 obj의 Number를 비교해줌으로써, 값이 같은지 확인한다.
◦
값이 같으면 true를, 같지 않으면 false를 반환한다.
•
따라서, 출력 결과는 아래와 같을 것이다.
toString() 메소드
1.
객체를 문자열로 변환하는 메소드가 Object의 toString이다.
[JDK의 원본 Object Java Source]
•
Object의 toString() 메소드는 객체의 클래스 이름 @ 객체의 해시코드 값을 16진수로 변환한 값 형식으로 출력된다.
•
코드를 통해 toString() 메소드의 출력 결과를 확인 해보자
•
위와 같이 toString() 메소드를 출력할 경우, 클래스명과 해시코드를 16진수로 변환한 값을 출력해주는 것을 볼 수 있다.
2.
객체 + 문자열 연산이나, 객체를 출력하는 경우, toString()이 자동 호출된다.
•
위의 코드를 통해, a 객체를 출력하여도 a.toString() 메소드가 자동호출 되어 a.toString()을 호출한 것과 동일한 결과를 얻는 것을 확인할 수 있다.
3.
개발자는 toString() 메소드를 오버라이딩하여, 자신만의 문자열을 출력할 수 있다.
•
위의 코드를 통해, 오버라이딩된 toString() 메소드가 호출되어 (2,3)의 형태의 출력 결과를 얻을 것이다.