본문 바로가기
java/개념

Object 클래스

by unhyepnhj 2024. 6. 2.

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