Object 클래스란 무언인가
Updated: Categories: Javajava.lang 패키지와 Object 클래스에 대해 알아보자!
해당 포스팅은 Java의 정석 책을 참고하였습니다
java.lang 패키지
- 자바프로그래밍에 가장 기본이 되는 클래스를 포함하는 패키지 (근-본)
- import문 없이 사용할 수 있다. (ex. String 클래스)
- 이제 알아볼 Object 클래스도 이 패키지 소속이다~
Object 클래스
- 모든 클래스의 최고 조상 클래스
- Object 클래스의 멤버는 모든 클래스에서 바로 사용이 가능
- Object 클래스는 멤버변수는 없고 오직 11개의 메소드만을 가지고 있다.
- 아래에서 기본 메소드들을 알아보자
equals(Object obj)
- equals 메소드는 객체의 참조변수를 입력받고 비교해 결과를 boolean 값으로 리턴하는 메소드이다.
class Value{
int value;
Value(int value){
this.vaule = value;
}
}
public static void main(){
// 1
Value v1 = new Value(10);
Value v2 = new Value(10);
System.out.println(v1.equals(v2));
// 2
v2 = v1;
System.out.println(v1.equals(v2));
}
- 위의 결과는
1 : false / 2 : true
가 나온다. - class는 기본적으로 Reference 객체이기 때문에 객체에는 주소값이 저장됨.
- 따라서 객체 클래스의 변수에 동일한 값 10을 넣었다 하더라도, ‘주소값’을 비교하기 때문에 1번은 false가 나온다.
- 2번에서는 객체 클래스를 똑같이 만들었기 때문에 두 객체가 같은 주소를 가리킴. 따라서 true를 리턴
그럼 값을 비교하고 싶으면 어떡해?
- 그럴땐 equals 메소드를 오버라이딩해서 사용하면 된다.
class Value{
int value;
Value(int value){
this.vaule = value;
}
// 오버라이딩!!
public boolean equals(Object obj){
if(obj instanceof Value)
return value == ((Value)obj).value
else
return false
}
}
- 이렇게 equals 메소드를 오버라이딩해서 주소값이 아닌 변수
value
를 직접 비교해줄 수 있다.
hashCode()
- 객체의 주소값으로 해시코드를 만들어 반환한다.
- 32bit JVM에서는 중복되지 않지만 64bit JVM에서는 중복될 수 있음
String str = "abc";
str.hashCode();
toString()
- 인스턴스에 대한 정보를 문자열로 제공하는 메소드
// toString Default 모습
public String toString(){
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
- 내부가 이렇게 생겼다. (이래서 그냥 print로 찍으면 해시코드가 나왔구나)
- 일반적으로 자바에서 제공하는 컬렉션에서 toString은 오버라이딩되어 있기에 print로 찍거나
.toString()
메소드를 붙여주면 원하는 값을 볼 수 있다. - 하지만 내가 직접 만든 클래스라면 직접 오버라이딩을 해줘야 원하는 값을 볼 수 있음
- Object 클래스에서 toString 메소드는 접근제어자가 public이기 때문에 오버라이딩할때도 public으로 해야한다.