Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
Tags
- ModelAttribute
- 브루트 포스
- 스파르타코딩
- Java
- 코테
- 메서드
- 운영체제
- 스프링 MVC
- 알고리즘
- 백준
- 검증
- 자바의 정석
- OS
- 네트워크
- 프로그래머스
- 스프링MVC
- 코딩테스트
- 면접
- Bean Validation
- 객체지향프로그래밍
- 반복문
- 자료구조
- 정처기
- programmers
- JPA
- db
- 웹개발
- 자바
- 쿼리dsl
- 스프링
Archives
- Today
- Total
개발일지
최상위 클래스 Object 본문
728x90
자바의 모든 클래스는 Objcet 클래스를 상속받는다.
아무런 클래스로 상속하지 않으면 자동으로 extends Object를 삽입해 Object 클래스를 상속한다.
💡Object 클래스의 주요 메서드
반환타입 | 메서드명 | 주요 내용 |
String | toString() | - Object 객체의 정보를 문자열로 출력 - 일반적으로 오버라이딩해서 사용 - 출력 결과 : 패키지.클래스명@해시코드 |
boolean | equals(Object obj) | - 입력매개변수 obj 객체와 stack 메모리값(번지)비교 - 등가 비교 연산자 == 와 동일한 결과 |
int | hashCode() | - 객체의 hashCode() 값 리턴 - Hashtable, HashMap 등의 동등 비교에 사용 - 위치값을 기반으로 생성된 고유값 |
1️⃣ toString() - 객체 정보를 문자열로 출력
- 객체 정보는 패키지명.클래스명@해시코드 로 나타난다.
- 해시코드는 객체가 저장된 위치와 관련된 값이다.
- 실제 객체의 정보를 표현하고자 할때는 대부분 클래스명이나 숫자로 나열된 해시코드보다는 객체에 포함돼 있는 필드값을 출력한다. 따라서 이때 자식 클래스에서는 toString() 메서드를 오버라이딩해 사용한다.
class A {
int a = 3;
int b = 4;
}
A aa = new A();
System.out.printf("%x\n",aa.hashCode()); // 7@dea4e3
System.out.println(aa); // 패키지.클래스명@해시코드
class B {
int a = 3;
int b = 4;
@Override
public String toString() {
return "필드값 : a = " + a + " , b = " + b;
}
}
B bb = new B();
System.out.println(bb); // 필드값 : a = 3, b = 4
2️⃣ equals(Object obj) - 스택 메모리의 값 비교
equals(Object obj)는 입력매개변수로 넘어온 객체와 자기 객체의 스택 메모리 변수값을 비교해 그 결과를 true 또는 false로 리턴하는 메서드다. 기본 자료형이 아닌 객체의 스택 메모리 값을 비교하므로 실제데이터의 값이 아닌, 실제 데이터의 위치를 비교하는 것이다.
✅ 실제 내용을 비교하고자 할때는 ==으로 비교하는 것이 아니라, equals() 메서드를 오버라이딩해 사용해야 한다.
class Example {
String name;
public Example(String name) {
this.name = name;
}
@Override
public String toString() {
return "필드값 : a = " + name;
}
@Override
public boolean equals(Object obj) {
if (obj instanceof Example) {
if (this.name == ((Example) obj).name) {
return true;
}
}
return false;
}
}
public class Practice {
public static void main(String[] args) {
Example ex = new Example("Hello");
Example ex2 = new Example("Hello");
System.out.println(ex == ex2); //false
System.out.println(ex.equals(ex2)); //true
}
}
3️⃣ hashCode() - 객체의 위치와 연관된 값
- hashCode() 메서드는 객체의 위치와 관련된 값으로, 실제 위치를 나타내는 값은 아니다.
- 객체의 위치값을 기준으로 생성된 고유값 정도로 생각하는 것이 적절하다.
- 두 객체의 내용을 비교하기 위해 equals() 메서드를 오버라이딩해 봤다. 그런데 Hashtable, HashMap 등에서 동등 비교를 하고자 할 때는 hashCode()까지 오버라이딩 해야한다.
- HashMap 자료구조는 테이블을 (Key,Value)의 쌍으로 저장하며, Key값은 중복되지 않는다. 따라서 Key값이 서로 같은지를 확인해야 하는데, 이 과정은 다음과 같이 2단계로 구성된다.
- 1. 두 객체의 hashColde() 값을 비교한다.
- 2. 두 객체의 hashCode() 값이 동일 할 때 equals() 메서드를 호출하며, 이 값이 true이면 같은 객체로 인식한다.
- 정리하자면, HashMap 관점에서 두 객체가 동일하기 위해서는 hashCode()값이 동일해야 하고, equals() 메서드가 true를 리턴해야 한다.
728x90
'Java > Java 개념 설명' 카테고리의 다른 글
Static 제어자 (0) | 2024.02.20 |
---|---|
필드, 메서드, 생성자 (0) | 2024.02.20 |
클래스와 객체의 개념 (0) | 2024.02.20 |
기본 자료형 VS 참조 자료형 (0) | 2024.02.20 |
JVM에 대해 알아보자 (0) | 2023.04.10 |
Comments