java.lang.Object는 모든 클래스의 최상이 클래스이다.
=> 별도로 상속을 받지 않는 클래스는 묵시적으로 Object를 상속받는다.
✍ Object 객체 생성
public static void main(String[] args) {
Object o = new Object(); // 인스턴스 생성
System.out.println(o);
System.out.println(o.toString());
}
=> Object도 일반 클래스와 동일하게 인스턴스 생성 후 사용이 가능하다
💻
🔍 Object로 부터 상속받은 메서드 활용해보기
우선 Object로 상속받은 메서드를 사용하기 위해 Person이라는 클래스를 생성해보자
class Person {
String name;
int age;
public Person() {}
public Person(String name, int age) {
super();
this.name = name;
this.age = age;
}
}
✍ getClass() 메서드
- 현재 객체의 클래스 정보를 Class 타입 객체로 리턴하는 메서드이다.
예를 들어, Person 클래스의 참조변수 p1의 getClass() 결과를 출력하면 : class Person이 출력된다)
- 해당 클래스의 클래스명을 얻으려면 getClass() 메서드 결과에 다시 .getName()을 붙인다
- 클래스명만 필요할 경우 getClass() 메서드 결과에 다시 .getSimpleName()을 붙인다
public static void main(String[] args) {
Person p1 = new Person();
System.out.println("p1 : " + p1);
System.out.println("p1.getClass() : " + p1.getClass());
System.out.println("p1.getClass().getName()" + p1.getClass().getName());
System.out.println("p1.getClass().getSimpleName()" + p1.getClass().getSimpleName());
}
💻
✍ hasgCode() 메서드
참조변수의 주소값을 출력해주는 메서드이다
System.out.println(p1.hashCode());
System.out.println(Integer.toHexString(p1.hashCode()));
Integer.toHexString() 은 정수값을 16진수로 변환해주는 메서드이다.
💻

✍ equals() 메서드
- 두 객체가 같은 객체인지를 판별해주는 메서드이다
- Object 클래스의 equals() 메서드는 두 객체의 주소값(참조값)을 비교하여 주소값이 같으면 true, 다르면 false를 리턴한다
public static void main(String[] args) {
int a = 10;
int b = 10;
if(a == b) {
System.out.println("a, b는 같다!");
} else {
System.out.println("a, b는 다르다!");
}
}
=> 기본 데이터 타입 변수값을 비교할 때는 동등비교연산자(==)를 사용하여 비 교한다.
즉, 기본 데이터타입 변수에 같은 값을 저장할 경우 동등비교연산 결과는 true 이다.
💻
public static void main(String[] args) {
Object o1 = new Object();
Object o2 = new Object();
if(o1 == o2) {
System.out.println("o1, o2는 같다!");
} else {
System.out.println("o1, o2는 다르다!");
}
if(o1.equals(o2)) {
System.out.println("o1, o2는 같다!");
} else {
System.out.println("o1, o2는 다르다!");
}
}
=> 인스턴스를 생성할 때마다 서로 다른 메모리 공간에 인스턴스가 생성된다.
그러므로 해당 인스턴스의 주소값도 인스턴스마다 달라진다 !
각 인스턴스의 참조변수 o1과 o2를 동등비교 할 때와 equlas() 메서드를 사용했을 때의 결과는 같다.
💻
단! equals() 메서는 두 객체의 주소값을 비교하므로, 두 객체에 저장된 데이터가 같더라도 false가 리턴된다. 객체끼리의 비교는 실제 데이터가 아니라 주소값을 비교하는 것 이라는 걸 명심해야 한다!
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Person other = (Person) obj;
return age == other.age && Objects.equals(name, other.name);
}
=> 클래스 내부에서 equals() 메서드 단축키로 오버라이딩도 가능하다.
Alt + Shift + S -> H
'개발 > Java' 카테고리의 다른 글
[Java] Collection Framework - List (0) | 2023.03.05 |
---|---|
[Java] Collection Framework - Set (0) | 2023.03.04 |
[Java] Builder 패턴 (0) | 2023.03.04 |
[Java] 중첩 클래스 (Nested Class) (0) | 2023.03.01 |
[Java] 익명 클래스 (0) | 2023.03.01 |