2008. 8. 14. 15:15
Part 5. 자바에서 자주 사용되는 클래스 I Object 클래스
2008. 8. 14. 15:15 in 수업/자바2JDK입문
자바의 모든 클래스는 java.lang.Object 클래스로부터 상속을 받도록 설계되어 있다.
=========================== toSTring() 메서드 사용 예====================
package pack01;
// Object 클래스의 상속을 받기에 Object의 메소드를 가져다 사용할 수 있다.
class Point2D{ // extends Object
}
public class Ex01 {
public static void main(String[] args) {
Point2D pt=new Point2D();
System.out.println(pt); // 레퍼런스변수를 출력
// getClass().getName() + '@' + Integer.toHexString(hashCode())
System.out.println(pt.getClass());
System.out.println(pt.getClass().getName());
System.out.println(pt.hashCode());
System.out.println(Integer.toHexString(pt.hashCode()));
}
}
== toString() 메서드와 equals() 메서드를 동시에 사용하여 비교 하는 예 ==
package pack02;
class Example{
private String name;
private int id;
public Example( ){ }
public Example(String n, int i){
this.name=n;
this.id=i;
}
public String toString(){
String tot="이름 :" + name +","+ "id :" + id;
return tot;
}
public boolean equals(Object obj){
boolean res=false;
if(this==obj){
res=true;
}
if(obj instanceof Example){
Example ex=(Example)obj;
if(this.name.equals(ex.name) && this.id==ex.id)
res=true;
}
return res;
}
}
class ex05_A02 {
public static void main(String[] args) {
Example ex01 = new Example("전원지", 1001);
Example ex02 = new Example("전원지", 1001);
/*Example ex01 = new Example("전원지", 1001);
Example ex02 = new Example("전수빈", 1002);*/
System.out.println(ex01);
System.out.println(ex02);
}
}
===================================================================================
package pack02;
class Point{
int x=10, y=20;
public boolean equals(Object obj){
boolean res=false;
if(this == obj){// 자기가 자기 자신과 비교될 수 있다
res=true;
}
// 오버라이딩이란 Object의 equals랑 동일해야 하기에
// 전달인자가 Object 형이다. Object는 Point의 필드를 사용
// 못하기에 다운 캐스팅해야 한다.
// 다운 캐스팅은 형검사를 2번한다.
// 1. 컴파일시 형검사는 캐스트 연산자 이용
// 2. 런타임시 형검사(예외가 발생) - 막기 위해서는
if(obj instanceof Point){
Point test=(Point)obj;
if(this.x==test.x && this.y==test.y)
res=true;
}
return res;
}
}
public class Ex04 {
public static void main(String[] args) {
Point pt01=new Point();
Point pt02=new Point();
System.out.println(pt01==pt02);
// Object의 equals를 상속 받아 사용하고 있음
// Object의 equals를 상속받지 않고 Point에서 오버라이딩
System.out.println(pt01.equals(pt02));
// 자료구조 : 해쉬테이블(검색을 용이하게 하기 위한)
// 객체를 구분하기 위한 용도로 해쉬코드를 사용하므로 인해서 검색이 빨라
System.out.println(pt01.hashCode());
System.out.println(pt02.hashCode());
}
}
===================================================================================
▶ Object 클래스의 생성자와 메서드
생성자 | |
public Object() |
|
중요 메서드 | |
protected Object clone() |
객체를 복사하는데 사용합니다. |
public boolean equal(Object obj) |
두 객체의 내용이 동일한지 알아볼 때 사용합니다. |
public int hasCode() |
자바에서 객체를 식별하는 정수 값인 해시 코드를 반환합니다. |
protected void finalize() |
객체를 더 이상 사용하지 않을 때 쓰레기 수집기능을 수행합니다. |
public Class getClass() |
객체의 클래스 이름을 Class 형으로 반환합니다. |
public String toString() |
객체의 문자열을 반환합니다. |
public void notify() |
대기 중인 스레드를 하나 다시 시작합니다. |
public void notifyall() |
대기 중인 모든 스레드를 다시 시작합니다. |
public void wait() |
스레드의 작동을 중지하고 대기 상태로 만듭니다. |
=========================== toSTring() 메서드 사용 예====================
package pack01;
// Object 클래스의 상속을 받기에 Object의 메소드를 가져다 사용할 수 있다.
class Point2D{ // extends Object
}
public class Ex01 {
public static void main(String[] args) {
Point2D pt=new Point2D();
System.out.println(pt); // 레퍼런스변수를 출력
// getClass().getName() + '@' + Integer.toHexString(hashCode())
System.out.println(pt.getClass());
System.out.println(pt.getClass().getName());
System.out.println(pt.hashCode());
System.out.println(Integer.toHexString(pt.hashCode()));
}
}
== toString() 메서드와 equals() 메서드를 동시에 사용하여 비교 하는 예 ==
package pack02;
class Example{
private String name;
private int id;
public Example( ){ }
public Example(String n, int i){
this.name=n;
this.id=i;
}
public String toString(){
String tot="이름 :" + name +","+ "id :" + id;
return tot;
}
public boolean equals(Object obj){
boolean res=false;
if(this==obj){
res=true;
}
if(obj instanceof Example){
Example ex=(Example)obj;
if(this.name.equals(ex.name) && this.id==ex.id)
res=true;
}
return res;
}
}
class ex05_A02 {
public static void main(String[] args) {
Example ex01 = new Example("전원지", 1001);
Example ex02 = new Example("전원지", 1001);
/*Example ex01 = new Example("전원지", 1001);
Example ex02 = new Example("전수빈", 1002);*/
System.out.println(ex01);
System.out.println(ex02);
}
}
===================================================================================
package pack02;
class Point{
int x=10, y=20;
public boolean equals(Object obj){
boolean res=false;
if(this == obj){// 자기가 자기 자신과 비교될 수 있다
res=true;
}
// 오버라이딩이란 Object의 equals랑 동일해야 하기에
// 전달인자가 Object 형이다. Object는 Point의 필드를 사용
// 못하기에 다운 캐스팅해야 한다.
// 다운 캐스팅은 형검사를 2번한다.
// 1. 컴파일시 형검사는 캐스트 연산자 이용
// 2. 런타임시 형검사(예외가 발생) - 막기 위해서는
if(obj instanceof Point){
Point test=(Point)obj;
if(this.x==test.x && this.y==test.y)
res=true;
}
return res;
}
}
public class Ex04 {
public static void main(String[] args) {
Point pt01=new Point();
Point pt02=new Point();
System.out.println(pt01==pt02);
// Object의 equals를 상속 받아 사용하고 있음
// Object의 equals를 상속받지 않고 Point에서 오버라이딩
System.out.println(pt01.equals(pt02));
// 자료구조 : 해쉬테이블(검색을 용이하게 하기 위한)
// 객체를 구분하기 위한 용도로 해쉬코드를 사용하므로 인해서 검색이 빨라
System.out.println(pt01.hashCode());
System.out.println(pt02.hashCode());
}
}
===================================================================================
'수업 > 자바2JDK입문' 카테고리의 다른 글
Part 5. 자바에서 자주 사용되는 클래스 III - 문자열 관련 클래스 (0) | 2008.08.19 |
---|---|
Part 5. 자바에서 자주 사용되는 클래스 II - Wrapper 클래스 (0) | 2008.08.19 |
Part 4. 상속 IV 인터페이스 (1) | 2008.08.13 |
Part 4. 상속 III 추상 클래스와 Final (0) | 2008.08.13 |
Part 4. 상속 II 생성자, 레퍼런스 형변환 (2) | 2008.08.11 |