Object 클래스,
모든 클래스의 최상위 클래스
아무것도 상속받지 않으면 자동으로 Object를 상속받기 때문
이 말은 Object가 가지고 있는 메소드는 모든 클래스에서 사용할 수 있다는 것을 의미
Object 가 가지고 있는 메소드 중에서 가장 많이 사용되는 메소드
1. equals()
: 객체가 가지고 있는 값을 비교할 때 사용, 같은 값인 지 아닌지를 비교할 때 사용
객체 간의 같다 다르다를 비교하려면 기준이 필요하다.( 예시: 학번 또는 이름만 같으면 같다할 것인지 등)
즉, Object는 같은 값인지 다른 값인지에 대해서 비교할 수 있는 메소드는 제공하고 있지만
그 메소드를 오버라이딩해서 기준을 정해주는 것은 프로그래머가 해야하는 일이다.
String 클래스의 equal()는 Object 가 가지고 있는 메소드를 오버라이딩한 것이다.
그래서 String클래스가 가지고 있는 equlas를 사용했을 때, 안에 가진 문자열들이 모두 같으면 같아요라고 리턴하는 것이다.
2. toString()
: 객체가 가지고 있는 값을 문자열로 바꾸어서 리턴하는 메소드, 객체가 가진 값을 문자열로 반환
3. hashCode()
: 객체에 해시코드를 구하는 메소드, 객체의 해시코드 값 반환
해시코드의 값은 되도록 객체 별로 서로 다른 값을 가지게하는 것이 좋다.
해시코드는 프로그래밍하다보면 자주 사용된다(주: 자료구조)
이 메서드들을 사용할 때 반드시 오버라이딩해서 사용해야 한다.
package java03.day01;
import java.util.Objects;
public class Student {
//이름
String name;
//학번
String number;
//생년
int birthYear;
// 단축키 - Alt + insert
// Generate Equals and Hashcode()
@Override
public boolean equals(Object o) { //메소드의 파라미터로 들어온 오브젝트와 자신과 비교한다
// this와 obj가 같다면, 참조가 같은 것을 의미하므로 무조건 같다.
if (this == o) return true;
// 또한 인자로 들어온 obj가 null이라면 비교할 필요도 없이 false라는 것을 알 수 있다.
if (o == null || getClass() != o.getClass()) return false;
// obj를 Student로 형변환한 후에 자신의 number와
Student student = (Student) o;
// obj의 number를 비교해서 같으면 true를 반환
// 같지 않다면 false 를 반환
return birthYear == student.birthYear && name.equals(student.name) && number.equals(student.number);
}
@Override
public int hashCode() {
/*
해시코드를 구하는 것은 일종의 수학식이다.
되도록 유일하지 않은 값을 반환하도록 한다.
소수중의 하나인 31값과 특정수를 몇개 곱하여 만든다.
해시코드를 구하는 방법은 자동으로 만들어진 코드 말고도
알고리즘 공부를 통해 가능하다.
*/
return Objects.hash(name, number, birthYear);
}
// toString() 활용 - 단축키 Alt + insert
@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;
if (s1.equals(s2)) {
System.out.println("s1 == s2");
} else {
System.out.println("s1 != s2");
}
System.out.println(s1.hashCode());
System.out.println(s2.hashCode());
//toString()
System.out.println(s1); // toString()이 아닐경우 주소 값이 출력된다. ==> toString()을 활용하면 Json형태로 출력
System.out.println(s1.toString()); // 이 방법으로도 toString()
}
}
'PL(ProgrammingLanguage) > JAVA' 카테고리의 다른 글
Generic (0) | 2021.10.20 |
---|---|
java.lang 패키지/ 오토박싱 (0) | 2021.10.20 |
[프로그래머스] 약수의 합 (0) | 2021.10.16 |
사용자 정의 Exception (0) | 2021.10.16 |
Exception 발생시키기 (0) | 2021.10.16 |