에러&문제해결/JAVA

형변환 에러 | instanceof | equals오버라이딩

보배 진 2025. 10. 21. 10:40

@Override
public boolean equals(Object obj) {
    if(!(obj instanceof Circle)) {
        System.out.println(" [로그] 형변환 불가능한 객체");
        return false;
    }

    Circle circle = (Circle)obj;
    if(this.radius == circle.radius) {
        System.out.println("반지름이 같으므로 같은 크기의 원입니다");
        return true;
    }
    System.out.println(" [로그] radius 값이 다름");
    return false;
}

 

클래스 Circle를 만들었다

Circle 객체의 값이 똑같은지 equals를 사용하여 비교하려고 한다

equals를 객체의 주소값을 비교하기 때문에 equals 메소드를 오버라이딩하여 재정의하고 사용하도록 한다

if(!(obj instanceof Circle)) {

왼쪽에 있는 obj 객체가 오른쪽 클래스 Circle 타입으로 형변환이 가능한지 불가능한지 instanceof 로 판단을 하고

flase 또는 true를 반환한다

 

 

예시)

package class01;

class Circle {
	int radius;
	String name;
	double area;
	final static double PI = 3.14;
	
	// 반드시 이름 입력, 반지름 입력 안하면 1로 초기화
	Circle(String name){
		this(name, 1);
	}
	
	Circle(String name, int radius){
		this.name = name;
		this.radius = radius;
		this.area = radius*radius*PI;
	}
	
	@Override
	public boolean equals(Object obj) {
		if(!(obj instanceof Circle)) {
			System.out.println(" [로그] 형변환 불가능한 객체");
			return false;
		}
		
		Circle circle = (Circle)obj;
		if(this.radius == circle.radius) {
			System.out.println("반지름이 같으므로 같은 크기의 원입니다");
			return true;
		}
		System.out.println(" [로그] radius 값이 다름");
		return false;
	}
	
	void printInfo() {
		System.out.println(this.name + "은/는 반지름이 " + this.radius + "이고, 넓이는 " + this.area +"입니다.");
	}
	
	
	public int getRadius() {
		return radius;
	}
	public void setRadius(int radius) {
		this.radius = radius;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public double getArea() {
		return area;
	}
	public void setArea(double area) {
		this.area = area;
	}
}
public class Test04 {
	public static void main(String[] args) {
		Circle c1 = new Circle("도넛");
		Circle c2 = new Circle("피자", 5);
		Circle c3 = new Circle("축구공", 5);
		
		c1.printInfo();
		c2.printInfo();
		c3.printInfo();
		System.out.println();
		
		c1.equals(c2);
		c1.equals(c3);
		c2.equals(c3);
	}
}