▶ Object 클래스 - 오브젝트 클래스
● Object클래스
: 단순하게 모든클래스(API 또는 내가 만든 class 등)는 Object클래스의 자식클래스이다.
즉, Object클래스가 자바에서 '최상의 클래스'이다.
Object클래스에는 다양한 메소드가 존재하는데, 어떤 클래스에서도 이 메소드를 호출할수있다.
● Object클래스 대표 메소드 종류
- equals() 메소드 : 두 객체가 동일한 객체라면 true를 리턴하고, 다르다면 false를 리턴합니다.
- hashCode() 메소드 : 객체의 메모리 번지를 이용해서 해시코드를 만들어 리턴한다.
객체마다 다른값을 가지고 있다.
- toString() 메소드 : 객체의 문자 정보를 리턴한다. 즉, 객체를 문자열로 표현한다.
class Car{
private int speed;
private int gear;
private String color;
}
public class Test {
public static void main(String[] args) {
Car obj = new Car();
System.out.println("obj 객체는 " + obj.getClass()+"로 생성되었다.");
}
}
main메소드가 있는 Test클래스에서 Car클래스의 객체를 생성해줍니다.
obj인스턴스의 getClass메소드를 호출합니다.
getClass메소드는 Object클래스에 있는 메소드입니다. 위에서 말했듯이 내가 만든 클래스도 자바에서는 자동으로 Object클래스를 상속합니다. 그렇기에 getClass를 사용할수있습니다.
import java.util.ArrayList;
public class Test {
public static void main(String[] args) {
ArrayList arr = new ArrayList();
arr.add(123);
arr.add("456");
arr.add(1.123);
Object ob01 = arr.get(0);
Object ob02 = arr.get(1);
Object ob03 = arr.get(2);
System.out.println(ob01.getClass());
System.out.println(ob02.getClass());
System.out.println(ob03.getClass());
}
}
Test클래스에서 ArrayList 컬렉션클래스의 객체 arr를 생성해줍니다.
add메소드를 사용해서 3개의 값들을 저장합니다.
그리고 get메소드를 호출해서 0부터 2까지 저장한 값들을 리턴받아오는데 여기서 Object클래스로 받아주면 모두 받아올수있습니다. 이유는 Object클래스는 어떤 클래스든 전부 부모클래스이기에 데이터타입으로 받아올수있습니다.
그값들을 모두 getClass로 출력해줍니다.
class Car {
private String model;
public Car(String model) {
this.model = model;
}
}
public class Test {
public static void main(String[] args) {
Car car1 = new Car("vm502");
Car car2 = new Car("vm502");
if(car1.equals(car2)) {
System.out.println("하나의 Car이다.");
}else {
System.out.println("서로 다른 Car이다.");
}
}
}
이번에는 equals메소드를 실습해보겠습니다.
Car class의 생성자를 생성할때 매개변수로 String타입의 값을 받고 model필드에 저장해줍니다.
그러면 main메소드에 있는 Test클래스에서 car1와 car2를 각각 같은 String타입의 값을 넣어 만들어줍니다.
하지만, 각각 인스턴스를 생성해주었습니다.
그리고 car1.equals(car2)를 비교해주면 당연히 false가 리턴되면서 '서로 다른 Car이다.'라고 출력됩니다.
우선, equals메소드는 Object클래스의 메소드이기에 car1객체를 호출할수있습니다.
그리고 equals메소드는 객체하고만 비교해주기에 model의 값이 같다해도 엄연히 car1과 car2 이름부터 다르고
인스턴스가 다르기에 false가 리턴됩니다.
class Car{
private String model;
private String year;
public Car(String model, String year) {
this.model = model;
this.year = year;
}
public String toString() {
return model + " , " + year;
}
}
public class Test {
public static void main(String[] args) {
Car car1 = new Car("first", "2001");
Car car2 = new Car("second", "2018");
System.out.println(car1.toString());
System.out.println(car2.toString());
}
}
이번에는 toString메소드를 실습해보겠습니다.
toString메소드는 Object클래스에 존재합니다. 이 메소드를 Car클래스에서 오버라이딩해서 소스를 짜보았습니다.
main메소드가 있는 Test클래스에서 Car클래스의 인스턴스를 car1과 car2를 생성해주고 인자값으로 first, 2001을 넘겨주고 second, 2018을 넘겨줍니다. 각각 객체에서 모델과 년도 필드가 저장되었을테고, 이 값들을 오버라이딩(재정의)한
toString메소드를 통해 출력해주면 각 객체의 필드들이 출력됩니다.
만약에 오버라이딩을 안했다면 그냥 객체의 문자정보를 출력해주는데 이는 사람이 알아볼수없는 클래스@16진수 해시코드로
구성된 문자정보를 콘솔창에 출력되는걸 확인할수있습니다.
'Programming Language > JAVA' 카테고리의 다른 글
[이클립스 문제해결] Unfortunately the Java version needed to run Eclipse Installer couldn't be found on your system. You need the following version or a higher version: 문제해결 (2) | 2020.04.15 |
---|---|
[JAVA] 파일 입출력 (0) | 2019.07.30 |
[JAVA] 업캐스팅(Up-Casting)과 다운캐스팅(Down-Casting) (0) | 2019.07.28 |
[JAVA] 래퍼 클래스(Wrapper class) 및 제네릭(Generic) (0) | 2019.07.27 |
[JAVA] 오버라이딩(Overriding)과 final클래스 (0) | 2019.07.26 |
[JAVA] 쓰레드(thread)와 프로세스(process),멀티쓰레드, 멀티프로세싱, 데몬쓰레드(Daemon),동기화(Synchronized) (0) | 2019.07.25 |
[JAVA] 예외(exceptional event) 강제예외,예외전가,예외처리 try-catch, finally (0) | 2019.07.24 |
[JAVA] 상속( inheritance ) (0) | 2019.07.23 |