프로그래밍/java
[JAVA] Object 클래스
승민아
2022. 5. 21. 18:00
모든 자바 클래스는 Object 클래스를 상속받는다.
즉, 모든 클래스의 슈퍼 클래스이며 모든 객체는 Object 클래스의 메소드를 가진다.
그중 몇 가지 메소드에 대해서만 정리한다.
메소드 | 설명 |
boolean equals(Object obj) | obj가 가리키는 객체와 현재 객체를 비교하여 같으면 true |
Class getClass() | 현 객체의 런타임 클래스를 리턴 |
int hashCode() | 현 객체에 대한 해시 코드 값 리턴 |
String toString() | 현 객체에 대한 문자열 표현을 리턴 |
hashCode()
- 객체의 해시코드 값(객체의 주소, 고유값)을 리턴
- "이 객체의 고유값은?"을 의미하는 hashCode()로 오버라이딩 가능 ( 상속 객체가 오버로딩도 가능 )
실행 코드
public class Hongong {
public static void main(String args[]){
Point a = new Point(2,3);
Point b = new Point(2,3);
Point c = a;
System.out.println(a.hashCode());
System.out.println(b.hashCode());
System.out.println(c.hashCode());
}
}
실행 결과
-> a와 c의 해쉬코드가 같다.
getClass()
- 객체의 클래스 정보를 담은 Class 객체 리턴
- Class 객체의 getName() 메소드는 객체의 클래스 이름을 반환
- upCasting 관계없이 실제 객체의 클래스 이름을 반환
toString()
- 객체를 문자열로 리턴
- 대부분의 클래스에서 toString()을 오버라이딩하여 자신의 객체를 문자열로 표현하도록 구현함.
- 자신이 개발한 클래스에서 Object의 toString()를 오버라이딩함.
모든 메소드 예제 코드
class Point{
private int x,y;
public Point(int x,int y)
{
this.x=x;
this.y=y;
}
}
public class Hongong {
public static void print(Object obj)
{
System.out.println(obj.getClass());
System.out.println(obj.getClass().getName());
System.out.println(obj.hashCode());
System.out.println(obj.toString());
System.out.println(obj);
}
public static void main(String args[]){
Point p = new Point(2,3);
print(p);
}
}
실행 결과
Point 클래스에 toString() 오버라이딩
class Point{
private int x,y;
public Point(int x,int y)
{
this.x=x;
this.y=y;
}
public String toString()
{
return "Point("+x+","+y+")";
}
}
public class Hongong {
public static void main(String args[]){
Point p = new Point(2,3);
System.out.println(p.toString());
System.out.println(p);
}
}
실행 결과
- 객체 p는 p.toString()으로 자동 변환됨을 알 수 있다.
객체 비교 ( 객체==객체 )
==연산자 ( 객체 레퍼런스 비교 )
- 두 객체의 주소가 같은가?
- 두 객체의 해시코드 값이 같은가?
실행 코드
public class Hongong {
public static void main(String args[]){
Point a = new Point(2,3);
Point b = new Point(2,3);
Point c = a;
if(a==b)
System.out.println("a==b");
if(a==c)
System.out.println("a==c");
}
}
a와 c는 같은 객체를 가리키고 있다.
a와 b는 같은 값은 같지만 다른 객체이다.
실행 결과
-> a와 c만 같다고 나온다.
Object 클래스의 equals()
- 두 객체의 해시코드 값이 같은가?
- == 와 같은 반환 값
실행 코드
public class Hongong {
public static void main(String args[]){
Point a = new Point(2,3);
Point b = new Point(2,3);
Point c = a;
if(a.equals(b))
System.out.println("a==b");
if(a.equals(c))
System.out.println("a==c");
}
}
실행 결과
왜? ==랑 똑같은데 equals()를 만들었을까?
- 개발자가 equals()를 필요한 용도에 맞게 오버라이딩할 수 있게 해 주기 위함. (ex, 객체의 내용이 같은가? 판단 )
- String의 equals() 메소드가 오버라이딩 된것과 같음 (ex, str.equals("문자열") )
아래와 같이 equals를 오버라이딩해서 사용
class Point{
private int x,y;
public Point(int x,int y)
{
this.x=x;
this.y=y;
}
public boolean equals(Point p)
{
if(x==p.x&&y==p.y)
return true;
else
return false;
}
}
실행 코드
public class Hongong {
public static void main(String args[]){
Point a = new Point(2,3);
Point b = new Point(2,3);
Point c = new Point(3,4);
if(a==b)
System.out.println("a==b");
if(a.equals(b))
System.out.println("a equals b");
if(a.equals(c))
System.out.println("a eqauls c");
}
}
실행 결과