Programming language/Java

[JAVA] Object와 오버라이딩

chaenii 2022. 9. 14. 22:17

Object 클래스

  • 모든 클래스의 최상위 클래스
  • 아무것도 상속받지 않으면 자동으로 Object를 상속
  • Object가 가지고 있는 메소드는 모든 클래스에서 다 사용할 수 있다는 것을 의미

Object 메소드

사용할 때 반드시 오버라이딩해서 사용해야 한다.

  • equals : 객체가 가진 값을 비교할 때 사용
    • String 클래스의 equals 함수도 equals 메소드를 오버라이딩한 것이다.
  • toString : 객체가 가진 값을 문자열로 반환
  • hashCode : 객체의 해시코드 값 반환

아래의 코드를 실행하면, s1 != s2가 출력되고, 서로 다른 hashCode 값이 출력된다. 아직 Object 메소드를 따로 정의하지 않았기 때문에 나오는 결과이다. Object 메소드는 사용자가 알맞게 오버라이딩해서 사용해야 한다. eclipse에서는 Object 메소드를 자동으로 생성해주는 기능을 제공하고 있다. 

public class Student {
	String name;
	String number;
	int 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;
		
		// equals 함수 사용해보기 
		if (s1.equals(s2)) {
			System.out.println("s1 == s2");
		} else {
			System.out.println("s1 != s2"); // s1 != s2 출력 
		}
		
		// hashCode 값 확인 
		System.out.println(s1.hashCode()); // 1304836502
		System.out.println(s2.hashCode()); // 225534817
	}
}

 

eclipse에서 오버라이딩하기

1. Source > Generate hashCode() and equals() 클릭

2. 기준으로 설정하고 싶은 속성만 선택하기 > Generate 클릭

equals()와 hashCode()를 오버라이딩을 한 후, s1 == s2 가 출력되고, hashCode도 객체 s1과 s2가 동일하게 나오는 것을 확인할 수 있다.

public class Student {
	String name;
	String number;
	int birthYear;

	@Override
	public int hashCode() {
		return Objects.hash(number);
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		Student other = (Student) obj;
		return Objects.equals(number, other.number);
	}
    
	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;
		
		// equals 함수 사용해보기 
		if (s1.equals(s2)) {
			System.out.println("s1 == s2");
		} else {
			System.out.println("s1 != s2"); // s1 == s2 출력 
		}
		
		// hashCode 값 확인 
		System.out.println(s1.hashCode()); // 1509473
		System.out.println(s2.hashCode()); // 1509473
	}
}
반응형

'Programming language > Java' 카테고리의 다른 글

[JAVA] Collection Framework  (0) 2022.09.16
[JAVA] java.lang 패키지/오토박싱  (0) 2022.09.14
[JAVA] 인터페이스와 다른 형식의 클래스  (0) 2022.09.13
[JAVA] 상속  (0) 2022.09.12
[JAVA] 클래스 다듬기  (0) 2022.09.12