Object 생성과 특징
- java.lang 패키지에 속함
- 모든 클래스에 강제로 상속되는 계층 구조 상 최상위 클래스
> 모든 클래스에서 상속받아 사용할 공통 기능 구현
Object obj = new Object(); //Object 클래스 객체
주요 메소드
toString(): 객체를 문자열로 변환
//Object 클래스에 구현된 toString()이 반환하는 문자열
public String toString(){
return getClass().getName()+"@"+Integer.toHexString(hashCode());
}
- toString() 메소드는 객체 클래스의 이름을 얻어 와서 '@'를 연결하고 다시 객체의 해시코드 값을 16진수로 변환하여 연결한 문자열을 리턴
Point a = new Point(2, 3);
System.out.println(a.toString());
//예제 6-1 참고
Point@2ff4acd0
//클래스명@해시코드 16진수
- '객체 + 문자열' 연산이나 객체를 출력하는 경우 toString()이 자동 호출
Point p = new Point(2, 3);
System.out.println(p); //System.out.println(p.toString()); 으로 자동 변환
String s = p + "점"; //String s = p.toString() + "점"; 으로 자동 변환
클래스에 toString() 만들기
- 개발자는 클래스를 작성할 때 Object의 toString()을 오버라이딩하여 자신만의 문자열을 리턴
public String toString(); //public으로 선언!!
- 예제 6-2 참고
객체 비교와 equals()메소드
- 기본 타입의 값을 비교하기 위해서는 == 연산자 사용
- 객체 비교를 위해서는 equals() 메소드 사용
== 연산자
Class Point{
private int x, y;
public Point(int x, int y){
this.x = x;
this.y = y;
}
}
Point a = new Point(2, 3);
Point b = new Point(2, 3);
Point c = a;
if(a==b){
System.out.println("a==b");
//false
}
if(a==c){
System.out.println("a==c");
//true
}
- 실행결과: a==c
== 연산자는 두 객체의 내용물이 아니라 두 레퍼런스가 같은지를 비교한다
코드 실행 시 2개의 Point 객체가 생성되고, 레퍼런스 a와 b는 이들을 각각 가리킨다
a와 b의 레퍼런스 값이 다르므로 a==b의 결과는 false이지만,
c에는 a의 레퍼런스가 대입되므로 a==c의 값은 true이다
boolean equals(Object obj)
- a와 b가 서로 다른 객체를 가리키지만 두 객체의 내용은 동일
- Object의 equals(Object obj) 메소드는 인자로 건네진 객체 obj와 자신을 비교
- 클래스 작성자가 equals() 메소드를 오버라이딩하는 것이 원칙
String a = new String("Hello");
String b = new String("Hello");
if(a==b){
System.out.println("a==b");
//false
}
if(a.equals(b)){
System.out.println("a==b");
//true
}
a와 b는 서로 다른 객체를 가리키므로 == 연산자의 실행 결과는 false
a와 b가 가리키는 문자열은 동일하므로 a.equals(b)의 실행 결과는 true
예제 6-1 객체 레퍼런스만으로 객체의 클래스명, 해시코드 값, 객체 문자열 출력하는 코드 작성
class Point{
private x, y;
public Point(int x, int y){
this.x = x;
this.y = y;
}
}
public class ObjectPropertyEx{
...
}
- Point 클래스의 클래스명, 해시코드 값 출력
- 객체를 문자열로 만들어 출력
- 객체 출력
예제 6-2 Point 클래스에 Point 객체를 문자열로 리턴하는 toString() 메소드 작성
예제 6-3 Point 클래스에 두 점이 좌표가 같으면 true를 리턴하는 equals()를 작성
예제 6-4 Rect 클래스를 작성하고, 면적이 같으면 두 Rect 객체가 같은 것으로 판별하는 equals() 작성
- Rect 클래스는 int 타입의 width와 height 필드를 가짐
- 생성자에서 너비와 높이를 받아 width, height 필드를 초기화
'java > 개념' 카테고리의 다른 글
String 클래스 (0) | 2024.06.07 |
---|---|
박싱과 언박싱 (0) | 2024.06.04 |
JDK에서 제공하는 패키지 (0) | 2024.06.02 |
모듈 (0) | 2024.06.02 |
패키지 만들기 (0) | 2024.06.02 |