μμμ΄λ
- κ°μ²΄μ§ν₯μΈμ΄μ νΉμ±μ΄μ μννΈμ¨μ΄μ μ¬μ¬μ©μ κ°λ₯νκ² νλ κΈ°μ μ΄λ€.
- μ€μνμ μλ₯Ό λ€λ©΄ λΆλͺ¨ μ μ μλ₯Ό μμμ΄ λ¬Όλ €λ°λ μ μ μ μΈ μμκ³Ό μ μ¬νλ€.
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 Person {
void eat() {} // λ°₯λ¨ΉκΈ°
void sleep() {} // μ μκΈ°
}
class Student extends Person {
void study() {} // 곡λΆνκΈ°
}
class StudentDeveloper extends Student {
void develop() {} // κ°λ°νκΈ°
}
- 곡ν΅μ μΈ νΉμ±μ λ¬Άμ΄μ μ¬λ(Person) ν΄λμ€λ‘ μ μνλ€.
- κ·Έλ¦¬κ³ κ³΅ν΅ νΉμ±μ΄ νμν ν΄λμ€λ€μ΄ μ΄λ₯Ό μμνμ¬ μ¬μ©νλλ‘ νλ€.

- μ΄μ²λΌ μμμ ν΄λμ€ μ¬μ΄μ λ©€λ²λ₯Ό μ€λ³΅ μ μΈνμ§ μμλ λλ μ₯μ μ΄ μλ€.
- λν ν΄λμ€λ₯Ό κ³μΈ΅μ μΌλ‘ λΆλ₯ν μ μμ΄ ν¨μ¨μ μΌλ‘ κ΄λ¦¬ν μ μκ² ν΄μ€λ€.
- κ·Έλ¬λ―λ‘ ν΄λμ€μ μ¬μ¬μ©κ³Ό νμ₯μ ν΅ν μννΈμ¨μ΄μ μμ°μ±μ ν₯μμν¬ μ μλ€.
μμ μ¬μ© λ°©λ²
μ μΈ λ°©λ²
- μλ°μμλ
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