본문 바로가기

develop/Java

Object 클래스

모든 클래스의 슈퍼클래스

모든 클래스의 부모

 

- extends 키워드로 상속을 표현하지 않으며, 묵시적 상속 적용됨.

java.lang 패키지에 포함되므로 별도의 import과정이 필요하지 않음.

object 클래스의 모든 메서드는 다른 클래스에서 접근이 가능하며 그대로 사용하거나 오버라이딩해서 사용 가능함.

 

1. equals 메서드

- 두 객체가 같은지 비교하는 메서드(동등비교 (==)와 동일한 연산을 수행함)

=> 두 객체의 주소값 비교해서 같으면 true, 다르면 false 리턴함.

- 실제 '두 객체가 같다'라는 의미는 두 객체의 주소값이 아닌 객체가 가지는 속성값(멤버변수)가 같다는 의미로 사용.

따라서, 사용자가 정의하는 클래스에 equals()메서드를 오버라이딩하여 각 객체의 멤버변수를 비교하도록 수정하여 사용

 

-자바에서 제공하는 대부분의 클래스(API 또는 라이브러리)들은 Object 클래스의 equals() 메서드가 이미

오버라이딩 되어 있으므로 객체 내의 내용을 비교하는 것이 가능하다.

ex) String 클래스의 equals() 메서드 : 문자열 내용 비교

 

자동생성 가능 alt shit s -> h

 

new 키워드를 통해 새로운 객체를 생성하게 되면

같은 클래스라도 주소값이 달라짐. 동등비교 == 연산자 사용해서 확인 가능

하지만 내용은 같은데 equals 메서드를 통해서 확인 가능하다. 

업캐스팅 해서 주소값을 복사한 경우 주소값은 같다고 나옴

 

 

Object 클래스의 equals() 메서드 오버라이딩

 

public boolean equals(Object obj) { // Person2 -> Object 로 업캐스팅 됨

전달받은 객체(obj)의 멤버변수가 현재 인스턴스 멤버변수와 같은지 판별

=> 주의! Object 타입으로 업캐스팅 된 객체는 멤버변수 접근이 불가능하므로

반드시 원래의 객체(Person2)로 강제형변환을 수행한 뒤 비교해야한다!

 

 

2.toString() 메서드

- 어떤 객체의 정보를 문자열로 변환하여 리턴한다. 

 

- 기본적으로 Object 클래스의 toString()메서드는 객체의 정보가 '클래스명@16진수주소값'을 리턴하도록 정의됨.

 

- 일반적으로 객체의 정보 = 객체 내의 멤버변수 값이므로

객체 내의 멤버변수 값을 문자열로 변환하여 리턴하도록 오버라이딩이 필요함. 

 

- 자바에서 제공하는 대부분의 클래스(API)들은 toString() 메서드가 

오버라이딩 되어 있으므로 객체의 정보를 문자열로 리턴받을 수 있음

 

- toString() 메서드를 출력문 내에서 사용하는 경우 toString() 메서드를 호출하는 걸 생략가능하다. 

단, String 타입 변수에 저장하는 경우엔 생략 불가능함

 

alt shift s -> s 로 자동 생성 가능

 

Student s = new Student("20211111", "홍길동", 20);
System.out.println("Student 객체 s 의 정보 : " + s.toString());
System.out.println("Student 객체 s 의 정보 : " + s); // 생략 가능

 

요렇게 나오지만 실제 사용자가 필요한 건 멤버변수 값이므로 불필요함. 그래서 

오버라이딩을 통해 원하는 정보를 리턴하도록 함

 

String studentInfo = s.toString();

@Override
	public String toString() {
		return "Student2 [id=" + id + ", name=" + name + ", age=" + age + "]";
	}
    
		Student2 s2 = new Student2("20211111", "홍길동", 20);
		System.out.println("Student2 객체 s2 의 정보 : " + s2.toString());
		System.out.println("Student2 객체 s2 의 정보 : " + s2); // 생략 가능

 

 

 

 

 

 

 

 

 

'develop > Java' 카테고리의 다른 글

StringBuilder, StringBuffer 클래스  (0) 2021.03.23
String 클래스  (0) 2021.03.21
인터페이스(Interface)  (0) 2021.03.20
객체지향 다형성  (0) 2021.03.15
객체지향 추상화  (0) 2021.03.11