본문 바로가기

Java/본격 Java 퀴즈 기초

[Java] 도형의 성질을 이용하여 크기 조절하기(인터페이스)

도형의 성질 중에는 넓이과 둘레를 알아야한다.

그런 성질을 알 수 있는 인터페이스를 작성한다.

.

.

package InterfaceGeometric;

public interface GeometricObject {
	public double getPerimeter();
	public double getArea();
}

.

.

상위 인터페이스를 상속받을 원 클래스를 만든다.

.

.

package InterfaceGeometric;
import java.math.*;

public class Circle implements GeometricObject{
	protected double radius = 1.0;
	public Circle(double radius) {
		this.radius = radius;
	}
	public double getPerimeter() {
		return 2 * radius * Math.PI;
	}
	public double getArea() {
		return Math.pow(radius , 2) + Math.PI;
	}
	@Override
	public String toString() {
		return "Circle [radius=" + radius + "]";
	}
	
	
}

.

.

그리고 크기 조절할 수 있는 인터페이스를 만든다.

.

.

package InterfaceGeometric;

public interface Resizeable {
	public void resize(int percent);

}

.

.

거기에다가 상위 인터페이스를 상속받을 크기가 조절가능한 원 클래스를 만든다.

인터페이스의 성질은 여러개를 상속 받을 수 있는 장점이 있다. 그걸 이용하여 도형의 성질과 도형의 크기 조절할 수 있는 인터페이스를 상속한다.

.

.

package InterfaceGeometric;

public class ResizeableCircle extends Circle implements Resizeable{
	
	public ResizeableCircle(double radius) {
		super(radius);
	}
	
	public void resize(int percent) {
		radius *= percent/100f;
	}

	@Override
	public String toString() {
		return "ResizeableCircle [radius : " + super.radius + "]";
	}
	


}

.

.

테스트를 해본다.

.

.

package InterfaceGeometric;

public class TestResizable {

	public static void main(String[] args) {
		Circle c1 = new Circle(3.5);
		System.out.println(c1);
		System.out.printf("c1의 둘레 : %f \n", c1.getPerimeter());
		System.out.printf("c1의 넓이 : %f \n", c1.getArea());
		
		ResizeableCircle c2 = new ResizeableCircle(10);
		System.out.println(c2);
		System.out.printf("c2의 둘레 : %f \n", c2.getPerimeter());
		System.out.printf("c2의 넓이 : %f \n", c2.getArea());
		
		c2.resize(90);
		System.out.println("c2의 크기를 10%만큼 변경");
		System.out.printf("c2의 둘레 : %f \n", c2.getPerimeter());
		System.out.printf("c2의 넓이 : %f \n", c2.getArea());
	}

}

.

.

728x90
반응형