안녕하세요! 오늘은 자바(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) → 모든 도형이 공통으로 그려질 수 있도록!
- 상속과 인터페이스를 활용하면 코드가 깔끔하고 재사용하기 좋아짐! 👍
'개발 > JAVA' 카테고리의 다른 글
자바 클래스에서 this 생성자 활용하기! 🎵 (8) | 2025.02.19 |
---|---|
자바(Java)로 나만의 노래 관리 프로그램 만들기 🎵 (11) | 2025.02.18 |
Java로 배우는 객체 지향 프로그래밍 - 추상 클래스와 상속 (8) | 2025.02.07 |
Java 객체지향 프로그래밍 - Point 클래스와 상속 개념 배우기 (10) | 2025.02.06 |
Java 객체 지향 프로그래밍 - Point 클래스 만들기 (8) | 2025.02.05 |