JAVA

Java 중급 - 영한쌤

태태코 2024. 3. 31. 13:22
반응형

Java 모든 클래스가 Object를 상혹하는 이유.

-> 공통적인 부분 해결

-> 다형성 기본 구현

 

<아래 설명 참조.>

 

Object제공 기능

- toString() -> 객체 정보

- equals() -> 객체의 같음을 비교한다.

- getClass() -> 객체의 클래스 정보를 제공하는

etc ..

 

 

사람마다 Object에 대한 기본 기능을 따로따로 구현하게 된다면 정말 많은 기능이 나올 것 이므로, 조금 단순화하고 공통화 시킨 것으로 말한다. -> 핵심이유.

 

다형성의 기본 구현

- Object는 모든 클래스의 부모 클래스이다. 즉 모든 객체를 참조할 수 있는 것이다.

모든 java 객체는 Object 타입으로 처리되기 떄문에. 다양한 타입의 객체를 통합적으로 처리할 수 있게한다.

 

 

public class ObjectPolyExample1 {
    public static void main(String[] args) {
        Dog dog = new Dog();
        Car car = new Car();


        action(dog);
        action(car);

    }

    private static  void action(Object obj){
        if(obj instanceof Dog dog){
            dog.sound();
        }else if(obj instanceof Car car){
            car.move();
        }

    }
}

 

아무것도 모르는 상태에서 Object를 통해서 객체를 담을 수 있다. 모든 객체의 부모이기 때문이다.

 

*하지만 Object를 통해 전달받은 객체를 호출하려면 객체에 맞는 다운케스팅이 필요하다.*

다형적 참조 + 메서드 오버라이딩을 함께 사용해야한다.

 

Object toString() 에 대하여

getClass().getName() + "@"+Integer.toHexString(hashCode()); -> 실제 객체의 참조값. 16진수로 나온다.

어떤 클래스로 부터 파생되었는지 + 참조 값.

 

println과 같은 값을 가지는 이유는 -> println내부에서는 toString을 부르기 때문이다.

String은 그대로 String으로 -> Object는 object.toString()을 한 상태로 출력.

 

-> toString()을 재정의 해서 참조값을 알아내지 못할때 알아낼 수 있는 방법이 있다.

String hexString = Integer.toHexString(System.identityHashCode())-> 를 통해서 객체의 참조값을 얻어낼수있다.

 

동일성 == 연산자를 사용하여 두 객체의 참조가 동일한 객체를 가르키고있는지 확인.

동등성 : equals() 메서드를 사용하여 두 객체가 논리적으로 동등한지 확인.

 

*동일은 완전히 같음을 의미 동등은 같은 가치나 수준을 의미하지만, 외관이나 형태가 다를 수 있다.*

 

기본적으로 Object의 equals()메서드는 동일성을 요구한다.

그렇기 때문에 객체의 값을 비교하기 위해서는 equals메서드를 재정의해야한다.

 

ex)

@Override
public boolean equals(Object obj){
	UserV2 user = (UserV2) obj;
    return id.equals(user.id);  
 }

 

 

반응형