자바에서 모든 클래스는 사실 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(10, 20); 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 |