///////
Search

Object 클래스

날짜
2022/09/29
텍스트
모든 클래스의 조상
→ 클래스 선언 시 자동으로 컴파일러에 올라간다.
class Sample extends Object { // extends Object 부분은 작성하지 않아도 있는 것 처리된다. }
Java
복사
java.lang 안에 있다.
왜 모든 클래스의 조상인가?
→ 자주 쓰이는 함수들을 Override 하기 위해서

자주 쓰는 메서드

1. equals() 메서드

== 로 객체의 주소가 동일한지 확인
true / false 를 리턴한다.
예제 코드
public class Equals { public static void main(String[] args) { Circle circle1 = new Circle(10); Circle circle2 = new Circle(10); System.out.println("circle1 의 주소값(해쉬코드): " + circle1); System.out.println("circle2 의 주소값(해쉬코드): " + circle2); // 주소 비교 if(circle2 == circle1) { System.out.println("두 개의 원은 같습니다."); } else { System.out.println("두 개의 원은 같지 않습니다.\n\n"); } // Circle 내부의 radius 값 비교 if(circle2.equals(circle1)) { System.out.println("두 개의 원은 같습니다."); } else { System.out.println("두 개의 원은 같지 않습니다."); } } }
Java
복사
class Circle { private int radius; public int getRadius() { return radius; } public Circle(int radius) { this.radius = radius; } }
Java
복사
결과 화면
circle1 의 주소값(해쉬코드): edu.lion.car.sep29.Circle@4f3f5b24 circle2 의 주소값(해쉬코드): edu.lion.car.sep29.Circle@15aeb7ab 두 개의 원은 같지 않습니다. 두 개의 원은 같지 않습니다.
Java
복사
equals() 메서드는 주소를 비교하기 때문에 위 코드에서 false 를 리턴한다.
Circle 클래스에서 equals() 메서드를 재정의 한다면, 내부 값을 비교하게 할 수 있다.
→ Object 클래스의 equals() 메서드를 오버라이딩
public boolean equals(Circle c1){ if(this.radius == c1.getRadius()){ return true; } else { return false; } }
Java
복사
객체의 radius 를 비교하도록 설정하면 true 를 리턴하게 된다.
다형성을 활용하기 위해서, equals() 메서드의 parameter를 Object 로 설정할 수 있다.
@Override public boolean equals(Object obj){ if(obj instanceof Circle2){ Circle2 c1 = (Circle2) obj; // obj 안에 Circle2가 있으므로 형변환 가능 if(this.radius == c1.getRadius()){ return true; } else { return false; } } return true; }
Java
복사
Object 는 모든 클래스의 부모 클래스이므로, 형변환을 쉽게 할 수 있다.

2. toString() 메서드

객체의 문자정보를 리턴하는 메서드이다.
hashcode가 주소를 한 번 바꿔준다
public class toStringTest { public static void main(String[] args) { Object obj = new Object(); // toString()도 Object 클래스 안에 들어있어서 사용 가능 System.out.println(obj.toString()); System.out.println(obj + "\n\n\n"); toString_INum num1 = new toString_INum(10); System.out.println(num1.toString()); System.out.println(num1); } } class toString_INum { private int num; public toString_INum(int num) { this.num = num; } public int getNum() { return num; } }
Java
복사
print 함수의 parameter는 Object obj이다.
→ 매개변수 objnull이 아니면 toString()을 출력한다.
객체변수를 println 에 넣으면 주소가 출력된다.
equals() 와 마찬가지로 toString() 도 클래스에서 재정의 해주어야 원하는 출력을 얻을 수 있다. (아래 예제코드 참고)
public class toStringTest_2 { public static void main(String[] args) { Student s = new Student("홍길동", "남자"); System.out.println(s); // toString이 정의되어 있지 않다면, s에서는 주소(해쉬코드)가 출력된다. // toString을 Student에서 재정의 해야 원하는 출력이 나온다. } } class Student { private String name; private String gender; public Student(String name, String gender){ this.name = name; this.gender = gender; } public String toString(){ // toString을 재정의 해주었다. return "이름은 " + this.name + "이고 성별은 " + this.gender + "입니다."; } }
Java
복사
결과 화면
이름은 홍길동이고 성별은 남자입니다.
Java
복사
Student 클래스에서 toString() 메서드를 재정의 했다. 따라서 toString() 을 호출해도 주소가 나오지 않고, 재정의한 리턴 값이 나오게 된다.