///////
Search

16_Object 클래스_곽철민

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)의 형태의 출력 결과를 얻을 것이다.