일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
- 2024겨울방학 코딩부트캠프
- 핑퐁로봇
- 뚜루뚜루
- spring boot
- 초등학교 코딩수업
- 자바
- 코딩수업
- 자율주행자동차
- 코딩부트캠프
- CSS
- transaction
- 스마트리움
- 초등학생 코딩수업
- spring
- 드론
- 초등학생 겨울방학 놀이
- 알티노
- 서울시여성가족재단
- jsp
- Cos Pro
- 2024우먼테크위크
- 은평구립도서관
- 도서관 수업
- js
- 이것이 자바다
- html
- Java
- Spring Security
- 콜백함수
- 2023 ICT R&D 주간
- Today
- Total
블로그
[JAVA] Object 클래스, 포장 클래스(Wrapper class) 본문
Object 클래스
-자바 클래스의 최상위 클래스-

toString()
Object의 toString() 메소드는 객체의 문자 정보를 리턴한다.
객체의 문자 정보란 객체를 문자열로 표현한 값을 말한다.
기본적으로 Object의 toString() 메소드는 '클래스명@16진수해시코드'로구성된 문자열을 리턴한다.
Object obj = new Object(); System.out.println(obj.toString()); |
→ | java.lang.Objectøde6ced |
객체의 문자 정보가 중요한 경우에는 Object의 toString() 메소드를 재정의하여 사용한다.
@Override //toString 재정의
public String toString() {
return "C02MyClass1{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
※ System.out.println() 메소드는 매개값이 기본 타입(byte, short, int, long, float, double, boolean)이거나 문자열일 경우 해당 값을 그대로 출력한다.
그러므로 toString() 을 생략할 수 있다.
equals(Object obj)
객체 자신과 주어진 객체(obj)를 비교하는 메서드이다.
Object의 equals() 메소드는 참조변수 값(객체의 주소)을 비교하고 boolean 값을 리턴한다.
Object o1 = new Object();
Object o2 = new Object();
Object o3 = o2; // 참조값이 같음
boolean a1 = o1.equals(o2); //false
boolean a2 = o2.equals(o3); //true
boolean a3 = o1.equals(o3); //false
내부의 데이터(인스턴스변수의 값)가 같은지 확인하고 싶을 때,
equals()메소드를 재정의(오버라이딩)하여 사용한다.
※equals() 메소드의 매개변수 타입이 Object이므로 자동 타입 변환에 의해 모든 객체가 매개값으로 대입될 수 있다.

객체가 같다면 같은 해시코드를 가져야 한다.
hashCode()
객체의 해시코드(int타입의 정수)를 반환하는 메서드(해시함수)
객체를 식별하는 정수이다.
객체의 메모리 번지를 이용해서 해시코드를 생성하기 때문에 객체마다 다른 정수값을 리턴한다.

equals()메소드와 비슷하게 두 객체가 동등한지를 비교할 때 사용한다.
equals()메소드와 마찬가지로 객체의 데이터를 기준으로 재정의해서 새로운 정수값을 리턴할 때 사용하는것이 일반적이다.
hashCode() 재정의 규칙
1. 같은 객체가 hashCode를 여러 번 호출해도 같은 값이 나와야한다
2. 두 객체가 equals로 같은 객체로 여겨지면 두 객체의 hashCode는 같아야한다
3. 두 객체가 equals로 같지 않더라도 두 객체의 hashCode는 같을 수도 있다(하지만 다르면 더 좋다)
하지만 위의 내용을 외울필요는 없다. API와 인텔리제이 도움을 받아서 필드기준으로 재정의 하자
※equals()를 오버라이딩하면, hashCode()도 같이 오버라이딩 해야한다.
-> 위의 2번째 규칙처럼 equals() 결과가 같은 객체라면 hash code도 같아야 하기 때문이다.
public class C07HashCode {
public static void main(String[] args) {
C07MyClass o1 = new C07MyClass("안녕하세요");
C07MyClass o2 = new C07MyClass("안녕하세요");
C07MyClass o3 = new C07MyClass("자바를 배웁니다");
System.out.println(o1 == o2); // false : 참조값 다름
System.out.println(o1.equals(o2)); // true : equals 메소드 재정의
System.out.println(o1.hashCode());
System.out.println(o2.hashCode());
System.out.println(o1.equals(o3)); // false
System.out.println(o3.hashCode()); // 다른 hash 값
}
}
class C07MyClass {
private String title;
public C07MyClass(String title) {
this.title = title;}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
C07MyClass that = (C07MyClass) o;
return Objects.equals(title, that.title);
}
@Override
public int hashCode() {
return title != null ? title.hashCode() : 0;
}
}
※ System.identityHashcode(Object obj)
주어진 객체의 클래스가 hashCode()를 재정의하는지 여부에 관계없이 기본 메서드 hashCode()가 반환하는 것과 동일한 객체에 대해 동일한 해시 코드를 반환한다.
포장 클래스(Wrapper class)
자바는 기본타입의 값을 갖는 객체를 생성 할 수 있다. 포장(Wrapper)객체라고 한다.
포장 객체를 생성하기 위한 클래스는 java.lang 패키지에 포함되어 있다.
기본 타입 | 포장 클래스 |
byte | Byte |
char | Character |
short | Short |
int | Integer |
long | Long |
float | Float |
double | Double |
boolean | Boolean |
포장 객체는 포장하고 있는 기본 타입의 값을 변경할 수 없고, 객체로 생성하는 데 목적이 있다.
이런 객체가 필요한 이유는 컬렉션 객체 때문이다. 컬렉션 객체는 기본 타입의 값은 저장할 수 없고, 객체만 저장할 수 있다.
Integer obj = 100; // auto boxing
System.out.println("obj = " + obj.intValue()); // obj.intValue() : 수동 언박싱
System.out.println("obj = " + obj); // 재정의한 toString 호출
System.out.println("obj = " + obj.toString()); // 재정의한 toString 호출
int value = obj; // auto unboxing
int result = obj + 100; // auto unboxing
실제 객체의 참조값 비교 : ==, != 비교연산자를 사용한다.
👉 객체 내부 값 비교 : equals() 메소드를 사용한다. 👈 🔴아주아주아주아주아주아주 중요!!!!!!!!!!! 🔴
int a = 60000;
int b = 60000;
System.out.println(a == b); // true
Integer c = 70000; // auto boxing
Integer d = 70000; // auto boxing
System.out.println(c == d); // false
System.out.println(System.identityHashCode(c));
System.out.println(System.identityHashCode(d));
// *****************************************
// 참조타입 비교는 equals 사용!!
// *****************************************
System.out.println(c.equals(d)); // true
출처 : 이것이 자바다, 자바의 정석
'개발자 준비과정 > JAVA' 카테고리의 다른 글
[JAVA] 제네릭(Generic) (0) | 2024.03.15 |
---|---|
[JAVA] Regular Expression (정규 표현식) (0) | 2024.03.15 |
[JAVA] 람다식 (0) | 2024.03.13 |
[JAVA] 중첩 클래스, 익명 클래스 (0) | 2024.03.12 |
[JAVA] instanceof 연산자 (0) | 2024.03.11 |