본문 바로가기
Back/Java

[Java] Object와 오버라이딩

by SIXXXX_ 2022. 8. 4.
728x90

Object 클래스 : 모든 클래스의 최상위 클래스

주요 메소드 equals, toString, hashCode :" 오버라이딩" 해서 사용

 

equals : 객체가 가진 값을 비교할때 사용한다.

기준 : 메서드를 오버라이딩해서 기준을 개발자가 정의해줘야 한다.

 

toString : 객체가 가진 값을 문자열로 반환해준다.

 

hashCode : 객체의 해시코드 값을 반환시켜준다.

해시코드 : 자료구조에서 주로 사용

 

 

자동으로 생성 가능하게 만들어주는 도구들이 있다.

클래스를 정의,

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 = 1994;

       Student s2 = new Student();
       s2.name = "홍길동";
       s2.number = "1234";
       s2.birthYear = 1994;

       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());
  }

메소드가 Object가 구현한 메소드를 그대로 사용해서 그렇다

 

 

오버라이딩을 해보면,

public Student{	
    String name;
    String number;
    int birthYear;
    
    
   @Override
   public int hashCode() {
 	 final int prime = 31; //소수 
   	 int result = 1;
     result = prime * result + ((number == null) ? 0 : number.hashCode());
     return result;
   }
   
   
   @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;
     if(number == null) {
     	if(other.number != null)
        	return false;
        }else if (!number.equals(other.number))
        	return false;
        return true;
   }
   
    
   public static void main(String[] args){
       Student s1 = new Student();
       s1.name = "홍길동";
       s1.number = "1234";
       s1.birthYear = 1994;

       Student s2 = new Student();
       s2.name = "홍길동";
       s2.number = "1234";
       s2.birthYear = 1994;

       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 오버라이딩

public Student{	
    String name;
    String number;
    int birthYear;
    
    
   @Override
   public int hashCode() {
 	 final int prime = 31; //소수 
   	 int result = 1;
     result = prime * result + ((number == null) ? 0 : number.hashCode());
     return result;
   }
   
   
   @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;
     if(number == null) {
     	if(other.number != null)
        	return false;
        }else if (!number.equals(other.number))
        	return false;
        return true;
   }
   
   //toString을 통해 속성값의 결과를 보여줄 수 있게 한다
   
   @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 = 1994;

       Student s2 = new Student();
       s2.name = "홍길동";
       s2.number = "1234";
       s2.birthYear = 1994;

       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());
       
  }

 

 

 

 

 

 

 

출처 : 프로그래머스 - 자바 중급