개발/JAVA

Java 도형 그리기 프로그램 만들기! 🎨

예니03 2025. 2. 17. 09:20
반응형

안녕하세요! 오늘은 자바(Java)를 이용해서 도형을 그리고, 면적을 구하는 프로그램을 만들어볼 거예요! 🖥️💡

🧐 우리가 만들 프로그램은?

우리는 원(circle), 사각형(rectangle), 그리고 점(point)을 그리는 프로그램을 만들 거예요. 하지만 그냥 만드는 게 아니라, 객체 지향 프로그래밍(OOP) 개념을 이용해서 깔끔하고 멋지게 만들 거예요! 😆

🔥 먼저, 중요한 개념부터 알아볼까요?

1. 추상 클래스(abstract class) 란?

  • 완전한 클래스가 아니라, 설계도 같은 것! 🚧
  • 직접 사용할 수 없고, 자식 클래스가 상속해서 써야 해요.

👉 우리 코드에서는 Shape(도형) 클래스가 추상 클래스예요.

2. 인터페이스(interface) 란?

  • 다른 클래스들이 공통으로 사용할 기능을 정해놓는 역할! 🎯
  • 인터페이스를 구현한 클래스는 꼭 그 기능을 만들어야 해요.

👉 우리 코드에서는 Drawable(그릴 수 있는 기능) 인터페이스를 만들었어요!

 

🛠️ 자바 코드 설명하기!

1. Shape(도형) 클래스 - 추상 클래스 만들기

public abstract class Shape {
    protected int x;
    protected int y;
    
    public Shape(int x, int y) {
        this.x = x;
        this.y = y;
    }
    
    public abstract double area(); // 면적 계산 (각 도형이 알아서 구현해야 함)
}

👉 Shape는 도형들의 공통된 특성을 모아놓은 추상 클래스예요. 👉 area()는 도형마다 다르게 계산해야 하니까, 아직 구현하지 않고 추상 메서드로 만들었어요!

 

2. Drawable(그릴 수 있는 기능) 인터페이스 만들기

public interface Drawable {
    public void draw(); // 모든 Drawable 객체는 draw()를 만들어야 해요!
}

👉 draw() 메서드는 도형을 그리는 기능이에요! 👉 원, 사각형, 점은 다 그림을 그릴 수 있어야 하니까, 이 인터페이스를 사용할 거예요! 🎨

 

3. Circle(원) 클래스 만들기

public class Circle extends Shape implements Drawable {
    private double radius;
    
    public Circle(int x, int y, double radius) {
        super(x, y);
        this.radius = radius;
    }
    
    @Override
    public double area() {
        return Math.PI * Math.pow(radius, 2);
    }
    
    @Override
    public void draw() {
        System.out.printf("원 [x=%d, y=%d, r=%f, area=%f]을 그렸습니다.%n", x, y, radius, area());
    }
}

✅ extends Shape → 원은 도형(Shape)이다! 🏀 ✅ implements Drawable → 원은 그릴 수 있다! 🖌️ ✅ area() → 원의 면적 계산 공식 사용 (π × 반지름²) ✅ draw() → 원을 그리는 기능

 

4. Rectangle(사각형) 클래스 만들기

public class Rectangle extends Shape implements Drawable {
    private int width;
    private int height;
    
    public Rectangle(int x, int y, int width, int height) {
        super(x, y);
        this.width = width;
        this.height = height;
    }
    
    @Override
    public double area() {
        return width * height;
    }
    
    @Override
    public void draw() {
        System.out.printf("사각형[x=%d, y=%d, w=%d, h=%d, area=%f]을 그렸습니다.%n", x, y, width, height, area());
    }
}

✅ width * height → 사각형의 면적 계산 💡 ✅ draw() → 사각형을 그리는 기능 🏠

 

5. Point(점) 클래스 만들기

public class Point implements Drawable {
    private int x;
    private int y;
    
    public Point(int x, int y) {
        this.x = x;
        this.y = y;
    }
    
    @Override
    public void draw() {
        System.out.printf("점[x=%d, y=%d]을 그렸습니다.%n", x, y);
    }
}

✅ 점(Point)은 Shape을 상속받지 않아요! 왜냐하면 점은 면적이 없으니까! ✅ 하지만 점도 Drawable을 구현했어요. 왜? 점도 그림판에서 찍을 수 있으니까! 🎯

 

6. ShapeApp(프로그램 실행) 클래스 만들기

public class ShapeApp {
    public static void main(String[] args) {
        Circle c = new Circle(10, 20, 30);
        Rectangle r = new Rectangle(10, 20, 100, 500);
        Point p = new Point(100, 200);
        
        c.draw();
        r.draw();
        p.draw();
        
        Drawable[] objs = {c, r, p};
        for (Drawable obj : objs) {
            obj.draw();
        }
    }
}

✅ Circle, Rectangle, Point를 각각 만들고, draw() 메서드 실행 ✅ Drawable 배열을 만들어 한 번에 다 그려줌 🎨

 

🎉 실행 결과

원 [x=10, y=20, r=30.000000, area=2827.433388]을 그렸습니다.
사각형[x=10, y=20, w=100, h=500, area=50000.000000]을 그렸습니다.
점[x=100, y=200]을 그렸습니다.

🎯 정리!

  • 추상 클래스(Shape) → 도형의 기본적인 공통 기능을 정의!
  • 인터페이스(Drawable) → 모든 도형이 공통으로 그려질 수 있도록!
  • 상속과 인터페이스를 활용하면 코드가 깔끔하고 재사용하기 좋아짐! 👍

 

반응형