์ƒ์†์ด๋ž€

  • ๊ฐ์ฒด์ง€ํ–ฅ์–ธ์–ด์˜ ํŠน์„ฑ์ด์ž ์†Œํ”„ํŠธ์›จ์–ด์˜ ์žฌ์‚ฌ์šฉ์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜๋Š” ๊ธฐ์ˆ ์ด๋‹ค.
  • ์‹ค์ƒํ™œ์˜ ์˜ˆ๋ฅผ ๋“ค๋ฉด ๋ถ€๋ชจ ์œ ์ „์ž๋ฅผ ์ž์‹์ด ๋ฌผ๋ ค๋ฐ›๋Š” ์œ ์ „์ ์ธ ์ƒ์†๊ณผ ์œ ์‚ฌํ•˜๋‹ค.
  • C++ ์–ธ์–ด์—์„œ์˜ ์ƒ์†์˜ ๊ฐœ๋…๊ณผ ์œ ์‚ฌํ•˜๋‹ค.
    • ์ฐจ์ด์ ์ด๋ผ๋ฉด ์ž๋ฐ”์—์„œ์˜ ์ƒ์†์€ ๋‹ค์ค‘ ์ƒ์†(multiple inheritance)์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค.
  • ์ž๋ฐ”์—์„œ๋Š” ๋‘ ํด๋ž˜์Šค(class) ์‚ฌ์ด์—์„œ์˜ ๋ถ€๋ชจ-์ž์‹์˜ ์ƒ์† ๊ด€๊ณ„๋ฅผ ์„ ์–ธํ•œ๋‹ค.
    • ์ด๋•Œ, ๋ถ€๋ชจ ํด๋ž˜์Šค๋ฅผ ์ˆ˜ํผ ํด๋ž˜์Šค(super class), ์ž์‹ ํด๋ž˜์Šค๋ฅผ ์„œ๋ธŒ ํด๋ž˜์Šค(sub class)๋ผ๊ณ  ํ•œ๋‹ค.
    • ์„œ๋ธŒ ํด๋ž˜์Šค๋Š” ์ž์‹ ์˜ ๋ฉค๋ฒ„๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์ˆ˜ํผ ํด๋ž˜์Šค์˜ ๋ฉค๋ฒ„๋ฅผ ํฌํ•จํ•˜๊ฒŒ ๋œ๋‹ค.

๊ธฐ๋ณธ ํด๋ž˜์Šค? ๋ถ€๋ชจ ํด๋ž˜์Šค?
์ƒ์† ๊ด€๊ณ„์— ์žˆ๋Š” ๋‘ ํด๋ž˜์Šค๋ฅผ ๋ถ€๋ฅด๋Š” ์ด๋ฆ„์€ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋งˆ๋‹ค ์กฐ๊ธˆ์”ฉ ๋‹ค๋ฅด๋‹ค. C++์—์„œ๋Š” ์ƒ์†์„ ํ•ด์ฃผ๋Š” ํด๋ž˜์Šค๋ฅผ ๊ธฐ๋ณธ ํด๋ž˜์Šค(base class), ์ด์™€ ๋ฐ˜๋Œ€๋กœ ์ƒ์†์„ ๋ฐ›๋Š” ํด๋ž˜์Šค๋ฅผ ํŒŒ์ƒ ํด๋ž˜์Šค(derived class)๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค. ๋˜ํ•œ C#์—์„œ๋Š” ๊ฐ๊ฐ ๋ถ€๋ชจ ํด๋ž˜์Šค(parent class), ์ž์‹ ํด๋ž˜์Šค(child class)๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.


์ƒ์†์˜ ์žฅ์ (advantange)

์•„๋ž˜์˜ ์˜ˆ์ œ ์ฝ”๋“œ๋ฅผ ํ†ตํ•ด ์ƒ์†์ด ์ฃผ๋Š” ์žฅ์ ์„ ์‚ดํŽด๋ณด์ž.

class Student {
    void eat() {} // ๋ฐฅ๋จน๊ธฐ
    void sleep() {} // ์ž ์ž๊ธฐ
    void study() {} // ๊ณต๋ถ€ํ•˜๊ธฐ
}

class StudentDeveloper {
    void eat() {} // ๋ฐฅ๋จน๊ธฐ
    void sleep() {} // ์ž ์ž๊ธฐ
    void study() {} // ๊ณต๋ถ€ํ•˜๊ธฐ
    void develop() {} // ๊ฐœ๋ฐœํ•˜๊ธฐ
}

class Professor {
    void eat() {} // ๋ฐฅ๋จน๊ธฐ
    void sleep() {} // ์ž ์ž๊ธฐ
    void research() {} // ์—ฐ๊ตฌํ•˜๊ธฐ
}
  • ํ•™์ƒ(Student)๊ณผ ํ•™์ƒ๊ฐœ๋ฐœ์ž(StudentDeveloper) ๊ทธ๋ฆฌ๊ณ  ๊ต์ˆ˜(Professor)๊ฐ€ ์žˆ๋‹ค.
  • ์ด๋“ค์€ ๊ณตํ†ต์ ์œผ๋กœ ๋ฐฅ๋จน๊ธฐ(eat)์™€ ์ž ์ž๊ธฐ(sleep) ๋ผ๋Š” ๊ณตํ†ต์ ์ธ ํ–‰์œ„(์ฝ”๋“œ)๊ฐ€ ์žˆ๋‹ค.
  • ๋˜ํ•œ ํ•™์ƒ๊ณผ ํ•™์ƒ๊ฐœ๋ฐœ์ž๋Š” ๊ณตํ†ต์ ์œผ๋กœ ๊ณต๋ถ€(study)๋ผ๋Š” ๊ณตํ†ต์ ์ธ ํ–‰์œ„(์ฝ”๋“œ)๊ฐ€ ์กด์žฌํ•œ๋‹ค.
  • ๋งŒ์ผ, ๋ฐฅ๋จน๊ธฐ์™€ ์ž ์ž๊ธฐ์˜ ๋ฐฉ์‹์ด ๋‹ค๋ฅด์ง€ ์•Š๊ณ  ๋™์ผํ•œ ์—ญํ• ์„ ํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด๋ณด์ž. ํ•˜๋‚˜์˜ ํ–‰์œ„๋ฅผ ์ˆ˜์ •ํ•˜๊ธฐ ์œ„ํ•ด์„œ ์œ„์˜ 3๊ฐœ ํด๋ž˜์Šค ๋ชจ๋‘๋ฅผ ์ˆ˜์ •ํ•ด์•ผ ํ•˜๋Š” ๋ฒˆ๊ฑฐ๋กœ์›€์ด ์ƒ๊ธด๋‹ค.

class structure

  • ์ƒ์†์„ ์ด์šฉํ•˜๋ฉด ์•„๋ž˜์™€ ๊ฐ™์ด ๊ฐ„๊ฒฐํ•˜๊ฒŒ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.
class Person {
    void eat() {} // ๋ฐฅ๋จน๊ธฐ
    void sleep() {} // ์ž ์ž๊ธฐ
}

class Student extends Person {
    void study() {} // ๊ณต๋ถ€ํ•˜๊ธฐ
}

class StudentDeveloper extends Student {
    void develop() {} // ๊ฐœ๋ฐœํ•˜๊ธฐ
}
  • ๊ณตํ†ต์ ์ธ ํŠน์„ฑ์„ ๋ฌถ์–ด์„œ ์‚ฌ๋žŒ(Person) ํด๋ž˜์Šค๋กœ ์ •์˜ํ–ˆ๋‹ค.
  • ๊ทธ๋ฆฌ๊ณ  ๊ณตํ†ต ํŠน์„ฑ์ด ํ•„์š”ํ•œ ํด๋ž˜์Šค๋“ค์ด ์ด๋ฅผ ์ƒ์†ํ•˜์—ฌ ์‚ฌ์šฉํ•˜๋„๋ก ํ•œ๋‹ค.

class structure with inheritance

  • ์ด์ฒ˜๋Ÿผ ์ƒ์†์€ ํด๋ž˜์Šค ์‚ฌ์ด์˜ ๋ฉค๋ฒ„๋ฅผ ์ค‘๋ณต ์„ ์–ธํ•˜์ง€ ์•Š์•„๋„ ๋˜๋Š” ์žฅ์ ์ด ์žˆ๋‹ค.
  • ๋˜ํ•œ ํด๋ž˜์Šค๋ฅผ ๊ณ„์ธต์ ์œผ๋กœ ๋ถ„๋ฅ˜ํ•  ์ˆ˜ ์žˆ์–ด ํšจ์œจ์ ์œผ๋กœ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค€๋‹ค.
  • ๊ทธ๋Ÿฌ๋ฏ€๋กœ ํด๋ž˜์Šค์˜ ์žฌ์‚ฌ์šฉ๊ณผ ํ™•์žฅ์„ ํ†ตํ•œ ์†Œํ”„ํŠธ์›จ์–ด์˜ ์ƒ์‚ฐ์„ฑ์„ ํ–ฅ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค.


์ƒ์† ์‚ฌ์šฉ ๋ฐฉ๋ฒ•

์„ ์–ธ ๋ฐฉ๋ฒ•

  • ์ž๋ฐ”์—์„œ๋Š” extends ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ƒ์†์„ ์„ ์–ธํ•œ๋‹ค.
  • class ์„œ๋ธŒ ํด๋ž˜์Šค extends ์ˆ˜ํผ ํด๋ž˜์Šค ์ฒ˜๋Ÿผ ์ž‘์„ฑํ•˜๋ฉด ๋œ๋‹ค.

์‚ฌ์šฉ ๋ฐฉ๋ฒ•

class Point {
    private int xPos, yPos;

    void setPoint(int xPos, int yPos) {
        this.xPos = x;
        this.yPos = y;
    }

    void showPoint() {
        System.out.println("(" + xPos + "," + yPos + ")");
    }
}

class ColorPoint extends Point {
    private String color;

    void setColor(String color) {
        this.color = color;
    }

    void showColorPoint() {
        showPoint(); // Point ํด๋ž˜์Šค์˜ showPoint ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ
        System.out.println("Color : " + color);
    }
}

public class ExampleTest {
    public static void main(String[] args) {
        Point p = new Point();
        p.setPoint(3, 4);
        p.shoWPoint():

        ColorPoint cp = new ColorPoint();
        cp.setPoint(2, 3);
        cp.setColor("Yellow");
        cp.showColorPoint();
    }
}
  • ์„œ๋ธŒ ํด๋ž˜์Šค๋Š” ์ƒ์†์„ ํ†ตํ•˜์—ฌ ์ˆ˜ํผ ํด๋ž˜์Šค์˜ ๋ฉค๋ฒ„๋ฅผ ์ž์‹ ์˜ ๋ฉค๋ฒ„๋กœ ํ™•์žฅํ•œ๋‹ค.
    • ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ์ˆ˜ํผ ํด๋ž˜์Šค์˜ private ๋ฉค๋ฒ„ ์™ธ์˜ ๋ชจ๋“  ๋ฉค๋ฒ„์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์ฆ‰, ColorPoint๋Š” Point ํด๋ž˜์Šค๋ฅผ ์ƒ์†ํ•จ์œผ๋กœ์จ ์ž์‹ ์˜ ๋ฉค๋ฒ„ ๋ณ€์ˆ˜์ธ ๋ฌธ์ž์—ด color๋ฟ๋งŒ ์•„๋‹ˆ๋ผ Point ํด๋ž˜์Šค์˜ ์ •์ˆ˜ํ˜• xPos, yPox๋„ ๊ฐ–๊ฒŒ ๋œ๋‹ค.
  • ๋˜ํ•œ ์„œ๋ธŒ ํด๋ž˜์Šค์ธ ColorPoint์˜ ๋ฉค๋ฒ„ ๋ฉ”์„œ๋“œ showColorPoint์—์„œ๋Š” ์ˆ˜ํผ ํด๋ž˜์Šค์˜ showPoint๋„ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ํ•˜์ง€๋งŒ xPos์™€ yPos๋Š” Point์˜ private ๋ฉค๋ฒ„์ด๋ฏ€๋กœ Color ํด๋ž˜์Šค์˜ ๋ฉค๋ฒ„๋“ค์ด ์ ‘๊ทผํ•  ์ˆ˜ ์—†๋‹ค.
    • ๋”ฐ๋ผ์„œ setPoint์™€ showPoint ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด์„œ ๊ฐ„์ ‘์ ์œผ๋กœ ์ ‘๊ทผํ•œ๋‹ค.

์ƒ์†์˜ ์ข…๋ฅ˜

  • ์ž๋ฐ”์—์„œ๋Š” C++์ฒ˜๋Ÿผ public ์ƒ์†, protected ์ƒ์† ๋“ฑ์„ ๋ช…์‹œํ•˜์ง€ ์•Š๋Š”๋‹ค.
  • ์œ„์—์„œ ์–ธ๊ธ‰ํ•œ ๊ฒƒ์ฒ˜๋Ÿผ ์„œ๋ธŒ ํด๋ž˜์Šค extends ์ˆ˜ํผ ํด๋ž˜์Šค๋กœ๋งŒ ์„ ์–ธํ•˜๋ฉฐ ์ˆ˜ํผ ํด๋ž˜์Šค ๋ฉค๋ฒ„๋“ค์˜ ์ ‘๊ทผ ์ง€์ •์ž์— ๋”ฐ๋ผ์„œ ๊ฐ๊ฐ ๋‹ค๋ฅด๊ฒŒ ์„œ๋ธŒ ํด๋ž˜์Šค์— ์ƒ์†๋œ๋‹ค.
class Point {
    private int privateVal;
    protected int protectedVal;
    public int publicVal;
    int defaultVal;
}

// ๊ฐ™์€ ํŒจํ‚ค์ง€์— ์žˆ๋‹ค.
class ColorPoint extends Point {
    void someMethod() {
        privateVal = 1; // Error!
        protectedVal = 2;
        publicVal = 3;
        defaultVal = 4;
    }
}
์ˆ˜ํผ ํด๋ž˜์Šค ๋ฉค๋ฒ„์— ์ ‘๊ทผํ•˜๋Š” ํด๋ž˜์Šค ์ข…๋ฅ˜ private default protected public
๊ฐ™์€ ํŒจํ‚ค์ง€์˜ ํด๋ž˜์Šค X O O O
๋‹ค๋ฅธ ํŒจํ‚ค์ง€์˜ ํด๋ž˜์Šค X X X O
๊ฐ™์€ ํŒจํ‚ค์ง€์˜ ์„œ๋ธŒ ํด๋ž˜์Šค X O O O
๋‹ค๋ฅธ ํŒจํ‚ค์ง€์˜ ์„œ๋ธŒ ํด๋ž˜์Šค X X O O


์ƒ์†๊ณผ ์ƒ์„ฑ์ž

์ˆ˜ํผ ํด๋ž˜์Šค์™€ ์„œ๋ธŒ ํด๋ž˜์Šค์˜ ์ƒ์„ฑ์ž

  • ์ˆ˜ํผ ํด๋ž˜์Šค์™€ ์„œ๋ธŒ ํด๋ž˜์Šค ๋ชจ๋‘ ์ƒ์„ฑ์ž๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.
  • ์„œ๋ธŒ ํด๋ž˜์Šค ๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ๋  ๋•Œ, ์„œ๋ธŒ ํด๋ž˜์Šค์˜ ์ƒ์„ฑ์ž์™€ ์ˆ˜ํผ ํด๋ž˜์Šค์˜ ์ƒ์„ฑ์ž๊ฐ€ ๋ชจ๋‘ ์‹คํ–‰๋œ๋‹ค.
  • ์ƒ์„ฑ์ž์˜ ๋ชฉ์ ์€ ๊ฐ์ฒด ์ดˆ๊ธฐํ™”์— ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, ์„œ๋ธŒ ํด๋ž˜์Šค์˜ ์ƒ์„ฑ์ž๋Š” ์„œ๋ธŒ ํด๋ž˜์Šค์˜ ๋ฉค๋ฒ„๋‚˜ ํ•„์š”ํ•œ ์ดˆ๊ธฐํ™”๋ฅผ ์ˆ˜ํ–‰ํ•œ๋‹ค.
  • ์ˆ˜ํผ ํด๋ž˜์Šค์˜ ์ƒ์„ฑ์ž๋Š” ์ˆ˜ํผ ํด๋ž˜์Šค์˜ ๋ฉค๋ฒ„๋‚˜ ํ•„์š”ํ•œ ์ดˆ๊ธฐํ™”๋ฅผ ๊ฐ๊ฐ ์ˆ˜ํ–‰ํ•œ๋‹ค.
  • ์ˆ˜ํผ ํด๋ž˜์Šค์˜ ์ƒ์„ฑ์ž์™€ ์„œ๋ธŒ ํด๋ž˜์Šค์˜ ์ƒ์„ฑ์ž ์ค‘์—์„œ ์ˆ˜ํผ ํด๋ž˜์Šค์˜ ์ƒ์„ฑ์ž๊ฐ€ ๋จผ์ € ์‹คํ–‰๋œ๋‹ค.
class Point {
    Point() {
        // ๋จผ์ € ์‹คํ–‰๋œ๋‹ค.
        System.out.println("Point ์ƒ์„ฑ์ž ์‹คํ–‰");
    }
}

class ColorPoint extends Point {
    ColorPoint() {
        // ์ดํ›„์— ์‹คํ–‰๋œ๋‹ค.
        System.out.println("ColorPoint ์ƒ์„ฑ์ž ์‹คํ–‰");
    }
}

class ExampleTest {
    public static void main(String[] args) {
        ColorPoint cp = new ColorPoint();
    }
}
  • ์ปดํŒŒ์ผ๋Ÿฌ๋Š” new ๋ฌธ์žฅ์ด ์‹คํ–‰๋˜๋ฉด ColorPoint ์ƒ์„ฑ์ž๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค.
  • ๊ทธ๋Ÿฌ๋‚˜ ColorPoint๋Š” ์ž์‹ ์˜ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์ „์— ๋จผ์ € ์ˆ˜ํผ ํด๋ž˜์Šค์˜ ์ƒ์„ฑ์ž๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค.
  • ์„œ๋ธŒ ํด๋ž˜์Šค์˜ ์ƒ์„ฑ์ž๊ฐ€ ๋จผ์ € ํ˜ธ์ถœ๋˜์ง€๋งŒ, ๊ฒฐ๊ตญ ์ˆ˜ํผ ํด๋ž˜์Šค์˜ ์ƒ์„ฑ์ž๊ฐ€ ๋จผ์ € ์‹คํ–‰๋œ๋‹ค.
  • ์–ด๋–ค ์„œ๋ธŒ ํด๋ž˜์Šค๋“ ์ง€ ์ƒ์„ฑ์ž์— ๋Œ€ํ•ด ์ปดํŒŒ์ผ๋Ÿฌ๋Š” ์ˆ˜ํผ ํด๋ž˜์Šค์˜ ์ƒ์„ฑ์ž๋ฅผ ํ˜ธ์ถœํ•œ ๋’ค ์ž์‹ ์˜ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋„๋ก ์ปดํŒŒ์ผ ํ•œ๋‹ค.
    • ์ด๋Š” ์ˆ˜ํผ ํด๋ž˜์Šค๊ฐ€ ๋จผ์ € ์ดˆ๊ธฐํ™”๋œ ํ›„ ์ด๋ฅผ ์ƒ์†๋ฐ›๋Š” ์„œ๋ธŒ ํด๋ž˜์Šค๊ฐ€ ์ดˆ๊ธฐํ™”๋˜์–ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

์„œ๋ธŒ ํด๋ž˜์Šค์˜ ์ˆ˜ํผ ํด๋ž˜์Šค ์ƒ์„ฑ์ž ํ˜ธ์ถœ

  • ์ˆ˜ํผ ํด๋ž˜์Šค์˜ ์ƒ์„ฑ์ž๊ฐ€ ์—ฌ๋Ÿฌ ๊ฐœ ์žˆ์„ ์ˆ˜ ์ž‡๋‹ค. ๋ฌผ๋ก  ์„œ๋ธŒ ํด๋ž˜์Šค๋„ ๋งˆ์ฐฌ๊ฐ€์ง€๋‹ค.
  • ์ˆ˜ํผ ํด๋ž˜์Šค์˜ ์ƒ์„ฑ์ž๋ฅผ ๋ช…์‹œ์ ์œผ๋กœ ์ง€์ •ํ•˜์ง€ ์•Š์œผ๋ฉด ์ปดํŒŒ์ผ๋Ÿฌ๋Š” ๋ฌต์‹œ์ ์œผ๋กœ ์ˆ˜ํผ ํด๋ž˜์Šค์˜ ๊ธฐ๋ณธ ์ƒ์„ฑ์ž๋ฅผ ํ˜ธ์ถœ๋˜๋„๋ก ์ปดํŒŒ์ผํ•œ๋‹ค.
class Point {
    Point() {
        // ๊ฐ€์žฅ ์ฒซ ๋ฒˆ์งธ๋กœ ์‹คํ–‰๋œ๋‹ค.
        System.out.println("Point ๊ธฐ๋ณธ ์ƒ์„ฑ์ž");
    }

    Point(int x) {
        // ์‹คํ–‰๋˜์ง€ ์•Š๋Š”๋‹ค.
        System.out.println("Point ๋งค๊ฐœ๋ณ€์ˆ˜ ์ƒ์„ฑ์ž");
    }
}

class ColorPoint extends Point {
    ColorPoint() {
        // ๋‘ ๋ฒˆ์งธ๋กœ ์‹คํ–‰๋œ๋‹ค.
        System.out.println("ColorPoint ๊ธฐ๋ณธ ์ƒ์„ฑ์ž");
    }
}

class ExampleTest {
    public static void main(String[] args) {
        ColorPoint cp = new ColorPoint();
    }
}
  • ๋งŒ์ผ ์ˆ˜ํผ ํด๋ž˜์Šค์˜ ๊ธฐ๋ณธ ์ƒ์„ฑ์ž๊ฐ€ ์„ ์–ธ๋˜์–ด ์žˆ์ง€ ์•Š๋‹ค๋ฉด ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.
  • ์„œ๋ธŒ ํด๋ž˜์Šค์˜ ์ƒ์„ฑ์ž๋กœ ๋งค๊ฐœ ๋ณ€์ˆ˜๊ฐ€ ์žˆ๋Š” ์ƒ์„ฑ์ž๋ฅผ ํ˜ธ์ถœํ•˜๊ฒŒ ๋˜๋Š” ๊ฒฝ์šฐ์—๋„ ์ปดํŒŒ์ผ๋Ÿฌ๋Š” ๋ฌต์‹œ์ ์œผ๋กœ ์ˆ˜ํผ ํด๋ž˜์Šค์˜ ๊ธฐ๋ณธ ์ƒ์„ฑ์ž๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค.
  • ๋ช…์‹œ์ ์œผ๋กœ ์ˆ˜ํผ ํด๋ž˜์Šค์˜ ์ƒ์„ฑ์ž๋ฅผ ์„ ํƒํ•˜๋ ค๋ฉด ์•„๋ž˜์™€ ๊ฐ™์ด ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋ฉด ๋œ๋‹ค.
class Point {
    Point() {
        System.out.println("Point ๊ธฐ๋ณธ ์ƒ์„ฑ์ž");
    }

    Point(int x) {
        System.out.println("Point ๋งค๊ฐœ๋ณ€์ˆ˜ ์ƒ์„ฑ์ž");
    }
}

class ColorPoint extends Point {
    ColorPoint() {
        System.out.println("ColorPoint ๊ธฐ๋ณธ ์ƒ์„ฑ์ž");
    }

    ColorPoint(int x) {
        super(x); // ๋ฐ˜๋“œ์‹œ ๋ฉ”์„œ๋“œ ์‹œ์ž‘ ์œ„์น˜์— ์žˆ์–ด์•ผ ํ•œ๋‹ค.
        System.out.println("ColorPoint ๋งค๊ฐœ๋ณ€์ˆ˜ ์ƒ์„ฑ์ž");
    }
}
  • super ํ‚ค์›Œ๋“œ๋ฅผ ์ด์šฉํ•˜์—ฌ ๋ช…์‹œ์ ์œผ๋กœ ์ˆ˜ํผ ํด๋ž˜์Šค์˜ ์ƒ์„ฑ์ž๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ์ฝ”๋“œ๋Š” ์„œ๋ธŒ ํด๋ž˜์Šค์˜ ์ƒ์„ฑ์ž ์ฒซ ๋ผ์ธ์— ์žˆ์–ด์•ผ ํ•œ๋‹ค.
    • ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. Constructor call must be the first statement in a constructor