Search

좔상 클래슀

좔상 클래슀

좔상

λŒ€μƒμœΌλ‘œλΆ€ν„° κ³΅ν†΅λœ νŠΉμ§•μ„ λ½‘μ•„λ‚΄λŠ” 것을 μ˜λ―Έν•©λ‹ˆλ‹€.

λ„ν˜•μ˜ 좔상화 μ˜ˆμ‹œ

λ„ν˜•λ“€μ€ 각각 λ‹€λ₯Έ νŠΉμ„±μ„ 가지고 μžˆμ§€λ§Œ, κ³΅ν†΅λœ νŠΉμ§•λ“€μ„ μΆ”μΆœν•  수 μžˆμŠ΅λ‹ˆλ‹€:
β€’
μ‚Όκ°ν˜• - μ„Έ 개의 λ³€κ³Ό 각을 가짐
β€’
μ‚¬κ°ν˜• - λ„€ 개의 λ³€κ³Ό 각을 가짐
β€’
μ›ν˜• - 쀑심점과 λ°˜μ§€λ¦„μ„ 가짐
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
볡사