2022. 3. 26. 12:44ㆍjava/java
java.lang.Object 클래스는 모든 클래스의 최상위 클래스로 모든 클래스는 Object 클래스를 상속받는다.
따라서 모든 클래스는 Object 클래스의 메소드를 사용할 수 있고 일부 메소드를 override해서 사용할수도 있다.
주로 equals(), hashCode(), toString()을 흔히 override해서 사용한다.
각 메소드에 대해 알아보자.
1.equals();
기본 기능 : '==' 연산 결과 반환
사용 목적 : 객체가 서로다른 메모리에 위치하더라도 객체가 가진 값이 같이 같은걸 알아보기 위해 사용
public static void main(String[] args) {
Student s1 = new Student();
s1.name = "홍길동";
s1.number = "1234";
s1.birthYear = 1995;
Student s2 = new Student();
s2.name = "홍길동";
s2.number = "1234";
s2.birthYear = 1995;
if(s1.equals(s2))
System.out.println("s1 == s2");
else
System.out.println("s1 != s2");
위 메인 메서드를 실행시키면 결과는 console은 false를 출력한다. 이유는 s1 과 s2가 서로다른 참조변수를 가리키기 때문이다.
그럼 equals를 오버라이딩 해보자 equals는 많이 오버라이딩 되기 때문에 이클립스에서 source generate로 쉽게 만들 수 있다.
@Override
public boolean equals(Object obj) {
if (this == obj) //객체가 가리키는 참조변수가 같으면 true
return true;
if (obj == null) //매개변수로 가져온 객체가 아무것도 가리키지 않으면 false
return false;
if (getClass() != obj.getClass()) //getClass는 오브젝트가 가진 메서드로 클래스 정보를 리턴한다
return false;
Student other = (Student) obj;
if (number == null) { //두 객체의 number만 같으면 객체가 같다고 오버라이딩 한 것이다
if (other.number != null)
return false;
} else if (!number.equals(other.number))
return false;
return true;
}
2.hashCode();
- 기본 기능: JVM이 부여한 코드값. 인스턴스가 저장된 가상머신의 주소를 10진수로 반환
- override 목적: 두 개의 서로 다른 메모리에 위치한 객체가 동일성을 갖기 위해
public static void main(String[] args) {
Student s1 = new Student();
s1.name = "홍길동";
s1.number = "1234";
s1.birthYear = 1995;
Student s2 = new Student();
s2.name = "홍길동";
s2.number = "1234";
s2.birthYear = 1995;
System.out.println(s1.hashCode());
System.out.println(s2.hashCode());
위 메인 메서드를 실행하면 s1 객체와 s2 객체는 서로 다른 해시코드를 반환한다. 그럼 equals와 마찬가지로 s1,s2객체의 number가 같다면 같은 값을 반환할 수 있게 오버라이딩을 해보자
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((number == null) ? 0 : number.hashCode());
return result;
}
//4번째 라인에서 31 소수 * 1 + (number)가 null이면 0 , 아니라면 number.hashCode()를 계산해서
//result변수에 저장하는데 정수형 데이터 타입인 변수의 값만 같다면 해시코드는 같은 값을 반환한다.
//자세히 알고 싶으면 따로 알고리즘 공부를 해야한다
2.toString();
- 기본 기능 : 객체의 해시코드 출력
- override 목적 : 객체의 정보를 문자열 형태로 표현하고자 할 때
public static void main(String[] args) {
Student s1 = new Student();
s1.name = "홍길동";
s1.number = "1234";
s1.birthYear = 1995;
Student s2 = new Student();
s2.name = "홍길동";
s2.number = "1234";
s2.birthYear = 1995;
System.out.println(s1);
위 메서드를 실행하면 s1의 해시코드 값이 출력된다. 클래스의 데이터 영역의 정보를 가지고 가지고 오고자 할 때를 오버라이딩 해보자
package javaUtil;
public class Student {
String name;
String number;
int birthYear;
@Override
public String toString() {
return "Student [name=" + name + ", number=" + number + ", birthYear=" + birthYear + "]";
}
public static void main(String[] args) {
Student s1 = new Student();
s1.name = "홍길동";
s1.number = "1234";
s1.birthYear = 1995;
Student s2 = new Student();
s2.name = "홍길동";
s2.number = "1234";
s2.birthYear = 1995;
System.out.println(s1);
}
}
출력 값은
Student [name=홍길동, number=1234, birthYear=1995]
이렇게 나온다. 다른 정보를 얻고 싶으면 오버라이딩할대 return문을 수정하면 된다
'java > java' 카테고리의 다른 글
인터페이스 선언 (0) | 2022.04.14 |
---|---|
인터페이스의 역할 (0) | 2022.04.14 |
Set-HashSet (보완 필요) (0) | 2022.03.26 |
Generic (보완 필요) (0) | 2022.03.26 |
자바 데이터 타입 (0) | 2022.03.13 |