java.lang 패키지
- 가장 기본이 되는 클래스들을 포함하고 있다. 따라서 import문 없이도 사용할 수 있도록 되어 있다.
[참고] 자세한 설명은 http://docs.oracle.com/javase/7/docs/api/ 참고. 본문에서는 강의때 다루었던 부분들의 이론에 대해서 집중, 정리한다.
Object 클래스
- 모든 클래스의 최고 조상이기 때문에 Object클래스의 멤버들은 모든 클래스에서 바로 사용 가능하다.
+ equals메서드
- 매개변수로 객체의 참조변수를 받아서 비교하여 그 결과를 boolean값으로 알려 주는 역할을 한다.
----------------------------------
public boolean equals(Object obj){
return (this == obj);
}
----------------------------------
- 두 객체의 같고 다름을 참조변수의 값으로 판단한다. 그렇기 때문에 서로 다른 두 객체를 equals메서드로 비교하면 항상 false를 결과로 얻게 된다.
[참고] 객체 생성 시, 메모리의 비어있는 공간을 찾아 생성하므로 서로 다른 두 개의 객체가 같은 주소를 갖는 일은 있을 수 없다. 하지만, 두 개 이상의 참조변수가 같은 주소값을 갖는 것(한 객체를 참조하는 것)은 가능하다.
- equals메서드를 사용해서 value값을 비교하도록 하고 싶으면 오버라이딩하여 사용하면 된다.
---------------------------------------------------------
equals 오버라이딩 예제
public class Test {
long id;
public boolean equals(Object obj){
if(obj != null && obj instanceof Test)
return id == ((Test)obj).id; // 주소값이 아닌 멤버변수의 값을 비교하여 결과를 반환한다.
else
return false;
}
}
---------------------------------------------------------
[참고] String클래스 역시 Object클래스의 equals메서드를 오버라이딩하여 문자열 값을 비교한다. 그 외에도 Date, File, wrapper클래스등 역시 오버라이딩되어 있다.
+ hashCode메서드
- 해싱(hasing)기법에 사용되는 해시함수를 구현한 것이다. 찾고자하는 값을 입력하면, 그 값이 저장된 위치를 알려주는 해시코드를 반환한다.
- 일반적으로 해시코드가 같은 두 객체가 존재하는 것이 가능하지만, Object클래스에 정의된 hashCode메서드는 객체의 주소값을 이용해서 해시코드를 만들어 반환하기 때문에 한번의 실행에서 서로 다른 두 객체는 결코 같은 해시코드를 가질 수 없다.
- 클래스의 멤버변수 값으로 객체의 같고 다름을 판다해야하는 경우라면 hashCode메서드를 적절히 오버라이딩해야 한다. 만일 오버라이딩하지 않는다면 Object클래스에 정의된 대로 모든 객체가 서로 다른 해시코드값을 가질 것이다.
[참고] 해싱기법을 사용하는 HashMap이나 HashSet과 같은 클래스에 저장할 객체라면 반드시 HashCode메서드를 오버라이딩해야 한다.
------------------------------------------------------
String클래스의 hashCode 예제
public class _03_HashCode {
public static void main(String[] args){
String str1 = new String("abc");
String str2 = new String("abc");
System.out.println(str1.hashCode());
System.out.println(str2.hashCode());
System.out.println(System.identityHashCode(str1));
System.out.println(System.identityHashCode(str2));
}
}
실행결과
96354
96354
1968829424
1688096192
------------------------------------------------------
- String클래스는 문자열의 내용이 같으면 동일한 해시코드를 반환하도록 hashCode메서드를 오버라이딩하였기 때문에, str1과 str2에 대해 항상 동일한 해시코드값을 얻는다.
- identityHashCode(Object)는 Object클래스의 hashCode메서드처럼 객체의 주소값으로 해시코드를 생성하기 때문에 모든 객체에 대해 항상 다른 해시코드값을 반환할 것을 보장한다.
- 위의 예제가 말하고자 하는 것은 str1과 str2가 해시코드는 같지만 서로 다른 객체라는 것을 보여주는 예제이다.
+toString메서드
[참고] 0905 강의필기 (이론도 여기에 정리하였다.)
'예전 포스팅 모음' 카테고리의 다른 글
[DB] Unique, not null, check 조건, default, union, join (0) | 2014.09.29 |
---|---|
[DB] 제약 사항, ERD(Entity Relationship Diaglam) (0) | 2014.09.26 |
[DB] 테이블 생성 및 curd sql문 예제 (0) | 2014.09.25 |
[DB] sub query, rownum (0) | 2014.09.25 |
[DB] 조건별 sql select문 문제 예제 (0) | 2014.09.24 |