μΆμ ν΄λμ€
μΆμ
λμμΌλ‘λΆν° 곡ν΅λ νΉμ§μ λ½μλ΄λ κ²μ μλ―Έν©λλ€.
λνμ μΆμν μμ
λνλ€μ κ°κ° λ€λ₯Έ νΉμ±μ κ°μ§κ³ μμ§λ§, 곡ν΅λ νΉμ§λ€μ μΆμΆν μ μμ΅λλ€:
β’
μΌκ°ν - μΈ κ°μ λ³κ³Ό κ°μ κ°μ§
β’
μ¬κ°ν - λ€ κ°μ λ³κ³Ό κ°μ κ°μ§
β’
μν - μ€μ¬μ κ³Ό λ°μ§λ¦μ κ°μ§
classDiagram
Shape <|-- Triangle
Shape <|-- Rectangle
Shape <|-- Circle
class Shape{
+draw()
+resize()
+getArea()
}
class Triangle{
+draw()
+getArea()
}
class Rectangle{
+draw()
+getArea()
}
class Circle{
+draw()
+getArea()
}Mermaid
볡μ¬
μΆμ ν΄λμ€λ?
κ°μ²΄μ νΉμ±μ μ½λλ‘ κ΅¬ννμ§ μκ³ , μΆμννμ¬ μ μΈλ§ ν΄λμ ν΄λμ€
μ μ
μΆμ ν΄λμ€(Abstract Class)λ νλ μ΄μμ μΆμ λ©μλλ₯Ό ν¬ν¨νλ©°, κ°μ²΄λ₯Ό μ§μ μμ±ν μ μλ ν΄λμ€μ
λλ€. μ£Όλ‘ μμμ ν΅ν΄ μμ ν΄λμ€μμ κΈ°λ₯μ νμ₯νλ λͺ©μ μΌλ‘ μ¬μ©λ©λλ€.
νΉμ§
1.
μΆμ λ©μλλ₯Ό νλ μ΄μ ν¬ν¨ν μ μμ΅λλ€ (ꡬνλΆκ° μλ λ©μλ)
2.
μΈμ€ν΄μ€λ₯Ό μ§μ μμ±ν μ μμ΅λλ€
3.
μμμ ν΅ν΄μλ§ μ¬μ© κ°λ₯ν©λλ€
4.
μμ ν΄λμ€λ λ°λμ μΆμ λ©μλλ₯Ό ꡬνν΄μΌ ν©λλ€
5.
μΌλ° λ©μλμ νλλ κ°μ§ μ μμ΅λλ€
μΆμ ν΄λμ€ λ¬Έλ² μμ μ½λ
// μΆμ ν΄λμ€ μ μ
abstract class Shape {
// μΌλ° νλ
protected String color;
// μμ±μ
public Shape(String color) {
this.color = color;
}
// μΌλ° λ©μλ
public String getColor() {
return color;
}
// μΆμ λ©μλ (μμ ν΄λμ€μμ λ°λμ ꡬνν΄μΌ ν¨)
public abstract double getArea();
public abstract void draw();
}
// μΆμ ν΄λμ€ μμ λ° κ΅¬ν
class Circle extends Shape {
private double radius;
public Circle(String color, double radius) {
super(color);
this.radius = radius;
}
// μΆμ λ©μλ ꡬν
@Override
public double getArea() {
return Math.PI * radius * radius;
}
@Override
public void draw() {
System.out.println("Drawing a " + color + " circle");
}
}
Java
볡μ¬
ꡬν ν΄λμ€
μΆμ ν΄λμ€λ μΈν°νμ΄μ€μ μ μΈλ μΆμ λ©μλλ₯Ό μ€μ λ‘ κ΅¬νν ν΄λμ€
νΉμ§
1.
μΆμ ν΄λμ€λ‘λΆν° μμλ°μ λͺ¨λ μΆμ λ©μλλ₯Ό ꡬνν΄μΌ ν©λλ€
2.
μΈμ€ν΄μ€νκ° κ°λ₯ν©λλ€ (κ°μ²΄ μμ± κ°λ₯)
3.
μμ λ§μ νλμ λ©μλλ₯Ό μΆκ°λ‘ κ°μ§ μ μμ΅λλ€
4.
μ¬λ¬ ꡬν ν΄λμ€κ° κ°μ μΆμ ν΄λμ€λ₯Ό μμλ°μ λ€μν ꡬνμ μ 곡ν μ μμ΅λλ€
ꡬν ν΄λμ€ μμ μ½λ
// μΆμ ν΄λμ€ μ μ
abstract class Animal {
// μΆμ λ©μλ
public abstract void makeSound();
// μΌλ° λ©μλ
public void eat() {
System.out.println("λλ¬Όμ΄ λ¨Ήμ΄λ₯Ό λ¨Ήμ΅λλ€.");
}
}
// ꡬν ν΄λμ€ 1
class Dog extends Animal {
// μΆμ λ©μλ ꡬν
@Override
public void makeSound() {
System.out.println("λ©λ©!");
}
// μΆκ° λ©μλ
public void fetch() {
System.out.println("κ°κ° 물건μ κ°μ Έμ΅λλ€.");
}
}
// ꡬν ν΄λμ€ 2
class Cat extends Animal {
// μΆμ λ©μλ ꡬν
@Override
public void makeSound() {
System.out.println("μΌμΉ!");
}
// μΆκ° λ©μλ
public void scratch() {
System.out.println("κ³ μμ΄κ° κΈμ΅λλ€.");
}
}
Java
볡μ¬
μΆμ ν΄λμ€μ ꡬν ν΄λμ€μ κ΄κ³
μΆμ ν΄λμ€μ ꡬν ν΄λμ€λ μμ κ΄κ³λ‘ μ°κ²°λμ΄ μμΌλ©°, μ΄λ₯Ό ν΅ν΄ λ€μκ³Ό κ°μ μ΄μ μ μ»μ μ μμ΅λλ€:
β’
μ½λ μ¬μ¬μ©μ± μ¦κ°
β’
μΌκ΄λ μΈν°νμ΄μ€ μ 곡
β’
μ μ§λ³΄μ μ©μ΄μ± ν₯μ
β’
λ€νμ± κ΅¬ν κ°λ₯
classDiagram
Animal <|-- Dog
Animal <|-- Cat
class Animal{
+makeSound() abstract
+eat()
}
class Dog{
+makeSound()
+fetch()
}
class Cat{
+makeSound()
+scratch()
}Mermaid
볡μ¬
μΆμν΄λμ€ μμμ½λ
π¦ Project
βββ π Shape
βββ π Point.java
βββ π Shape.java
βββ π Triangle.java
βββ π Rectangle.java
βββ π Circle.java
βββ π ShapeMaker.java
Plain Text
볡μ¬
Point.java
public class Point {
// λ©€λ² λ³μ
int x, y;
// alt + shift + S -> Generate Contructor Using Field...
// κΈ°λ³Έ μμ±μ
public Point() {
this(0, 0);
}
// λ§€κ°λ³μκ° μλ μμ±μ
public Point(int x, int y) {
this.x = x;
this.y = y;
}
// alt + shift + S -> Generate toString()...
@Override
public String toString() {
return "Point [x=" + x + ", y=" + y + "]";
}
}
Java
볡μ¬
Shape.java
// μΆμ ν΄λμ€
public abstract class Shape {
Point point;
// λμ΄μ λλ λ₯Ό ꡬνλ μΆμ λ©μλλ₯Ό μ μνμμ€.
// * μΆμ λ©μλ : abstract μ κ·Όμ§μ μ λ°ννμ
λ©μλλͺ
( λ§€κ°λ³μ );
abstract double area(); // λμ΄
abstract double round(); // λλ
// getter, setter λ©μλλ₯Ό μ μνμμ€.
public Point getPoint() {
return point;
}
public void setPoint(Point point) {
this.point = point;
}
}
Java
볡μ¬
Triagle.java
public class Triangle extends Shape {
double width, height;
// μμ±μ
public Triangle() {
this(0.0, 0.0);
}
public Triangle(double width, double height) {
this.width = width;
this.height = height;
}
@Override
double area() {
// μΌκ°νμ λμ΄ = (κ°λ‘)x(μΈλ‘)/2
return width * height / 2;
}
@Override
double round() {
// *μ μΌκ°ν
// μΌκ°νμ λλ = 3 * width
return 3 * width;
}
// getter, setter
public double getWidth() {
return width;
}
public void setWidth(double width) {
this.width = width;
}
public double getHeight() {
return height;
}
public void setHeight(double height) {
this.height = height;
}
// toString()
@Override
public String toString() {
return "Triangle [width=" + width + ", height=" + height + "]";
}
}
Java
볡μ¬
Rectangle.java
// * μΆμ ν΄λμ€μ μΆμ λ©μλλ ꡬν ν΄λμ€μμ λ°λμ μ€λ²λΌμ΄λ© ν΄μΌνλ€.
public class Rectangle extends Shape {
double width, height;
public Rectangle() {
this(0.0, 0.0);
}
public Rectangle(double width, double height) {
this.width = width;
this.height = height;
}
@Override
double area() {
// μ¬κ°νμ λμ΄ = (κ°λ‘) x (μΈλ‘)
return width * height;
}
@Override
double round() {
// μ¬κ°νμ λλ = 2 * (a+b)
return 2 * (width + height);
}
public double getWidth() {
return width;
}
public void setWidth(double width) {
this.width = width;
}
public double getHeight() {
return height;
}
public void setHeight(double height) {
this.height = height;
}
@Override
public String toString() {
return "Rectangle [width=" + width + ", height=" + height + "]";
}
}
Java
볡μ¬
Circle.java
public class Circle extends Shape {
double radius; // λ°μ§λ¦
public Circle() {
this(0);
}
public Circle(double radius) {
this.radius = radius;
}
@Override
double area() {
// μμ λμ΄ = (μμ£Όμ¨) x (λ°μ§λ¦) x (λ°μ§λ¦)
return Math.PI * Math.pow(radius, 2);
}
@Override
double round() {
// μμ λλ = 2 x (μμ£Όμ¨) x (λ°μ§λ¦)
return 2 * Math.PI * radius;
}
public double getRadius() {
return radius;
}
public void setRadius(double radius) {
this.radius = radius;
}
@Override
public String toString() {
return "Circle [radius=" + radius + "]";
}
}
Java
볡μ¬
ShapeMaker.java
import java.util.Scanner;
public class ShapeMaker {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
// μ
λ ₯ λ³μ
double width = 0.0;
double height = 0.0;
double radius = 0.0;
// μ
λ ₯λ°μ λν λ°°μ΄ (3κ°)
Shape[] shapeList = new Shape[3];
int index = 0;
while( true ) {
if( index == 3 )
break;
System.out.println("1. μΌκ°ν, 2. μ¬κ°ν, 3. μν");
System.out.print(">>");
String input = sc.next(); // next() : String(λ¬Έμμ΄) μ
λ ₯
if( input.equals("κ·Έλ§") )
break;
// λν μ ν
switch (input) {
// μΌκ°ν
case "1":
System.out.print("κ°λ‘ : ");
width = sc.nextDouble();
System.out.print("μΈλ‘ : ");
height = sc.nextDouble();
shapeList[index++] = new Triangle(width, height);
break;
// μ¬κ°ν
case "2":
System.out.print("κ°λ‘ : ");
width = sc.nextDouble();
System.out.print("μΈλ‘ : ");
height = sc.nextDouble();
shapeList[index++] = new Rectangle(width, height);
break;
// μν
case "3":
System.out.print("λ°μ§λ¦ : ");
radius = sc.nextDouble();
shapeList[index++] = new Circle(radius);
break;
} // - switch λ
} // - while λ
// λμ΄ μ΄ν©, λλ μ΄ν©
double areaSum = 0.0;
double roundSum = 0.0;
for (Shape shape : shapeList) {
if( shape == null )
continue;
// λμ΄μ λλ
double area = shape.area();
double round = shape.round();
// ν©κ³
areaSum += area;
roundSum += round;
// instanceof : μΈμ€ν΄μ€λ₯Ό νμΈνλ μ°μ°
if( shape instanceof Triangle ) System.out.println("μΌκ°ν");
if( shape instanceof Rectangle ) System.out.println("μ¬κ°ν");
if( shape instanceof Circle ) System.out.println("μν");
System.out.println("λμ΄ : " + area + "\t");
System.out.println("λλ : " + round + "\t");
} // - foreach λ
System.out.println("λμ΄ μ΄ν© : " + areaSum);
System.out.println("λλ μ΄ν© : " + roundSum);
sc.close();
}
}
Java
볡μ¬





