IT story/Java

D+11 Object, toString, hashCode

jason719 2016. 8. 17. 10:32

2016.08.16. Tue. 열한 번째 수업!


오늘의 수업내용

  • Object class의 이해
  • toString에 대해 알아보자
  • hashCode에 대해 알아보자

1. Object class의 이해

  • java.lang.Object에 위치
  • 모든 클래스가 상속받는 클래스이다. (모든 클래스의 조상)
  • 모든 객체의 데이터타입으로 가능하다. (이때는 Object class의 자원만 사용가능)
  • 상속, 재정의, 객체, 데이터타입을 자세히 알아보자
예제

package com.javalesson.ch10object;


import java.lang.Object;


class ObjectDemo{

public void a(Object o){

System.out.println(o);//.toString() 생략됨

//System.out.println(o.toString());

}//a end

}//class end

class ToStringDemo1{

@Override

public String toString() {

return "ToStringDemo1 호출"; //=super.toString()+"ToStringDemo1 호출"

}

}//class end

class ToStringDemo2{

public String toString() {

return "ToStringDemo2 호출 " +super.toString();

}

}

public class L01Object extends Object{//모든 클래스가 object 클래스를 상속 받고 있다.(생략가능)

public static void main(String[] args) {

//ToStringDemo1, ToStringDemo2의 toString을 ObjectDemo.a()로 호출하세요.

ObjectDemo o = new ObjectDemo();

ToStringDemo1 a = new ToStringDemo1();

Object b = new ToStringDemo2();

o.a(a);

o.a(b);

}//main end

}//class end


2. toString에 대해 알아보자

  • Object.toString()
  • 인스턴스 객체를 직접 호출하면 암묵적으로 toString()을 호출함
  • 프로그래머들이 문자열을 반환하는 함수를 자주 작성하기 때문에 만들어졌다.

예제

package com.javalesson.ch10object;

//동물 쥐 클래스를 만든다.

//쥐 클래스가 하는 가장 큰일 "찍찍"하고 짖는 것!

//Mouse 객체를 생성할 때마다 "쥐가 찍찍"이 호출 되도록 하자.

class Mouse{

String squick;

public Mouse(String squick){

this.squick = squick;

}

@Override

public String toString(){

return "쥐가"+squick;

}

}//class end

public class L02ToString {


public static void main(String[] args) {

//String a = new Mouse("찍찍"); //예외 상황: 이때만 .toString()이 자동호출 되지 않는다.

System.out.println(new Mouse("찍찍"));

System.out.println(new Mouse("짹짹").toString());

}//main end

}//class end


3. hashCode에 대해 알아보자

  •  com.javalesson.ch10object.L03HashCode 클래스를 유일하게 만들어주는 경로
  • 패키지명 = 고유한 이름, 패키지내부에서 같은 이름의 클래스를 가질 수 없다.
  • new L03HashCode(), new L03HashCode() 두객체가 다름을 증명하는 싸인이다.
  • 인스턴스 객체.hashCode()는 객체의 고유 싸인을 가진다.
  • 하지만 String객체는 아스키 코드 값을 가진다. ☞ 모든 객체가 고유한 hashCode 값을 가지는 것은 아니다.
  • 기본데이터 타입의 랩퍼 클래스를 (재정의 했기 때문) 제외하고 모든 클래스의 객체는 고유한 hashCode값을 가진다.
  • Object.hashCode() 객체의 고유값을 부여한다. 
예제

package com.javalesson.ch10object;


class HashCodeDemo{

String name;

public HashCodeDemo(String name){

this.name = name;

}

@Override

public int hashCode() {

return super.hashCode();

}

//재정의를 권장하지 않는다. 16진수로 반환

}

public class L03HashCode {


public static void main(String[] args) {

HashCodeDemo a = new HashCodeDemo("A");

HashCodeDemo b = new HashCodeDemo("A");

HashCodeDemo c = new HashCodeDemo("A");


System.out.println(a == b); //==참조하는 위치가 같은지 비교(값이 같은지의 비교가 아님)

System.out.println(b == c);

System.out.println(Integer.toHexString(a.hashCode()));

System.out.println(Integer.toHexString(b.hashCode()));

System.out.println(Integer.toHexString(c.hashCode()));

}//main end

}//class end