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
'IT story > Java' 카테고리의 다른 글
D+13 Final(상수), Enum, Generic(제네릭), Collection Framework(ArrayList) (0) | 2016.08.22 |
---|---|
D+12 Equals & Access(접근지정자) (0) | 2016.08.18 |
D+10 Abstract(추상클래스), Anonymous(익명클래스), Interface(인터페이스) (0) | 2016.08.13 |
D+9 Extends (상속) Animal예제, Frame예제. (0) | 2016.08.11 |
D+8 class(overload, Calculator 출력, scope) (0) | 2016.08.10 |