μΆμ ν΄λμ€
μΆμ
λμμΌλ‘λΆν° 곡ν΅λ νΉμ§μ λ½μλ΄λ κ²μ μλ―Έν©λλ€.
λνμ μΆμν μμ
λνλ€μ κ°κ° λ€λ₯Έ νΉμ±μ κ°μ§κ³ μμ§λ§, 곡ν΅λ νΉμ§λ€μ μΆμΆν μ μμ΅λλ€:
β’
μΌκ°ν - μΈ κ°μ λ³κ³Ό κ°μ κ°μ§
β’
μ¬κ°ν - λ€ κ°μ λ³κ³Ό κ°μ κ°μ§
β’
μν - μ€μ¬μ κ³Ό λ°μ§λ¦μ κ°μ§
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
package Day07.Ex01_Shape;
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
package Day07.Ex01_Shape;
// μΆμ ν΄λμ€
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
package Day07.Ex01_Shape;
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
package Day07.Ex01_Shape;
// * μΆμ ν΄λμ€μ μΆμ λ©μλλ ꡬν ν΄λμ€μμ λ°λμ μ€λ²λΌμ΄λ© ν΄μΌνλ€.
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
package Day07.Ex01_Shape;
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
package Day07.Ex01_Shape;
// μΆμ ν΄λμ€
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
볡μ¬