자바에서 모든 클래스는 사실 Object를 암시적으로 상속받고 있는 것이다. 

그런 점에서 Object는 모든 클래스의 조상이라고 할 수 있다. 

그 이유는 모든 클래스가 공통으로 포함하고 있어야 하는 기능을 제공하기 위해서다.



toString

public String toString(){....}

toString 메서드는 인스턴스의 정보를 문자열의 형태로 반환하기 위한 메소드이다. 

가급적이면 toString 메소드를 오버라이딩 해서 인스턴스에 대한 정보를 적절히 표현할수 있도록 하는것이 좋다.


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
class Calculator{
    int left, right;
      
    public void setOprands(int left, int right){
        this.left = left;
        this.right = right;
    }
    public void sum(){
        System.out.println(this.left+this.right);
    }
      
    public void avg(){
        System.out.println((this.left+this.right)/2);
    }
     
    public String toString(){
        return "left : " + this.left + ", right : "+ this.right;
    }
}
  
public class CalculatorDemo {
      
    public static void main(String[] args) {
          
        Calculator c1 = new Calculator();
        c1.setOprands(1020);
        System.out.println(c1);
        System.out.println(c1.toString());
    }
  
}
cs





equals

== 연산자는 참조변수의 참조 값을 비교한다. 

따라서 인스턴스에 저장되어 있는 값 자체를 비교하려면 다른 방법을 사용한다.

일반적으로 인스턴스의 내용 비교를 위한 메소드 정의는 Object 클래스에 정의되어 있는 equals 메소드를 활용한다.


public boolean equals(Object obj)

이 메소드는 == 연산자와 마찬가지로 참조변수의 참조값을 비교하도록 정의되어 있다.

그런데 == 연산을 통해서 얼마든지 참조 값 비교가 가능하므로 

이 메소드는 내용비교를 하도록 오버라이딩을 해도 된다.(오버라이딩 목적으로 정의된 메소드)


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
32
33
34
35
package java01;
 
class IntNumber
{
    int num;
    
    public IntNumber(int num){
        this.num = num;
    }
    
    public boolean equals(Object obj){
        if(this.num == ((IntNumber)obj).num)
            return true;
        else
            return false;
    }
}
 
class ObjectEquality{
    public static void main(String[] args){
        IntNumber num1 = new IntNumber(10);
        IntNumber num2 = new IntNumber(12);
        IntNumber num3 = new IntNumber(10);
        
        if(num1.equals(num2))
            System.out.println("num1 num2 일치");
        else
            System.out.println("num1 num2 불일치");
        
        if(num1.equals(num3))
            System.out.println("num1 num3 일치");
        else
            System.out.println("num1 num3 불일치");
    }
}
cs




표준 클래스의 equals 메소드가 내용비교를 하도록 이미 오버라이딩 되어있는 경우도 많다.

대표적으로 String 클래스가 있다.

'Java' 카테고리의 다른 글

자바 기본 클래스  (0) 2017.02.25
Object 클래스의 메서드 clone / finalize  (0) 2017.02.25
자바 메모리 모델  (0) 2017.02.25
예외클래스 정의 / throw / throws  (0) 2017.02.25
예외처리 try~catch /finally  (0) 2017.02.25

+ Recent posts