λͺ©μ°¨
κ°μ²΄μ§ν₯ νλ‘κ·Έλλ°μ κ°λ ₯ν νΉμ§ μ€ νλλ “μ¬μ¬μ©μ±κ³Ό νμ₯μ±”μ λλ€.
μ΄μ μ μμ±ν μ½λλ₯Ό μ¬νμ©νμ¬ μλ‘μ΄ ν΄λμ€λ₯Ό λ§λ€ μ μλ€λ©΄, κ°λ° μκ°μ ν¬κ² λ¨μΆν μ μμ£ .
μ΄ κ°λ μ μ€νν μ μκ² ν΄μ£Όλ λνμ μΈ λκ΅¬κ° λ°λ‘ μμ(Inheritance) μ΄μ£ .
μ΄λ² ν¬μ€ν μμλ μμμ ν΅ν΄ ν΄λμ€λ₯Ό νμ₯νλ λ°©λ², κ·Έλ¦¬κ³ μ€λ²λ‘λ©(Overloading)μ€λ²λ‘λ©(Overloading)κ³Ό μ€λ²λΌμ΄λ©(Overriding)μ λΉκ΅νλ©° Javaμμ λ©μλλ₯Ό μ΄λ»κ² μ μ°νκ² νμ©νλμ§λ₯Ό ν¨κ» μμλ³΄κ² μ΅λλ€.
π μμκ³Ό super ν€μλ
μμ(Inheritance)μ΄λ?
μμμ κΈ°μ‘΄ ν΄λμ€(λΆλͺ¨)λ₯Ό λ°νμΌλ‘ μλ‘μ΄ ν΄λμ€(μμ)λ₯Ό λ§λλ κ²μ λλ€.
λΆλͺ¨ ν΄λμ€μ νλμ λ©μλλ₯Ό μμ ν΄λμ€κ° κ·Έλλ‘ λ¬Όλ €λ°μ μ μμ΄μ!
// λΆλͺ¨ ν΄λμ€
public class Animal {
void sound() {
System.out.println("λλ¬Όμ΄ μ리λ₯Ό λ
λλ€.");
}
}
// μμ ν΄λμ€
public class Dog extends Animal {
void bark() {
System.out.println("λ©λ©!");
}
}
Dog dog = new Dog();
dog.sound(); // λΆλͺ¨ λ©μλ νΈμΆ κ°λ₯
dog.bark(); // μμ λ©μλ
π‘ extends ν€μλλ₯Ό μ¬μ©ν΄ μμμ μ μΈν©λλ€.
μμμ μ₯μ
- μ½λ μ¬μ¬μ©μ± μ¦κ°
- μ μ§λ³΄μ μ©μ΄μ± ν₯μ
- νμ₯μ± μ¦κ°
μμ κ΄κ³ μ©μ΄
- λΆλͺ¨ ν΄λμ€(Parent class) / μνΌ ν΄λμ€(Super class) / κΈ°λ° ν΄λμ€(Base class): μμμ ν΄μ£Όλ ν΄λμ€
- μμ ν΄λμ€(Child class) / μλΈ ν΄λμ€(Sub class) / νμ ν΄λμ€(Derived class): μμμ λ°λ ν΄λμ€
π Javaλ λ¨μΌ μμλ§ μ§μν©λλ€. μ¦, ν ν΄λμ€λ νλμ ν΄λμ€λ§ μμλ°μ μ μμ΅λλ€.
super ν€μλ
superλ λΆλͺ¨ ν΄λμ€μ λ©€λ²μ μ κ·Όν λ μ¬μ©νλ ν€μλμ λλ€.
1. λΆλͺ¨ ν΄λμ€μ μμ±μ νΈμΆ
public class Animal {
Animal(String name) {
System.out.println(name + " μμ±λ¨");
}
}
public class Cat extends Animal {
Cat() {
super("κ³ μμ΄"); // λΆλͺ¨ μμ±μ νΈμΆ
}
}
2. λΆλͺ¨ ν΄λμ€μ λ©μλ νΈμΆ
class Parent {
void hello() {
System.out.println("λΆλͺ¨ μΈμ¬");
}
}
class Child extends Parent {
void hello() {
super.hello(); // λΆλͺ¨μ hello νΈμΆ
System.out.println("μμ μΈμ¬");
}
}
3. λΆλͺ¨ ν΄λμ€μ νλ μ°Έμ‘°
public class Vehicle {
String brand = "μΌλ° μ°¨λ";
}
public class Car extends Vehicle {
String brand = "μλμ°¨";
void printBrand() {
System.out.println("μμ λΈλλ: " + this.brand);
System.out.println("λΆλͺ¨ λΈλλ: " + super.brand);
}
}
β οΈ μμ μ μ£Όμμ¬ν
1. private λ©€λ²λ μμλμ§λ§ μ§μ μ κ·Ό λΆκ°λ₯
λΆλͺ¨ ν΄λμ€μ private λ©€λ²λ μμμ λμ§λ§, μμ ν΄λμ€μμ μ§μ μ κ·Όν μ μμ΅λλ€.
getterμ setterλ₯Ό ν΅ν΄ κ°μ μ μΌλ‘ μ κ·Όν΄μΌ ν©λλ€.
2. μμ±μλ μμλμ§ μμ
λΆλͺ¨ ν΄λμ€μ μμ±μλ μμλμ§ μμ΅λλ€. νμ§λ§ super()λ₯Ό ν΅ν΄ νΈμΆμ κ°λ₯ν©λλ€.
3. final ν΄λμ€λ μμ λΆκ°
finalλ‘ μ μΈλ ν΄λμ€λ μμν μ μμ΅λλ€
4. final λ©μλλ μ€λ²λΌμ΄λ© λΆκ°
finalλ‘ μ μΈλ λ©μλλ μμ ν΄λμ€μμ μ€λ²λΌμ΄λ©ν μ μμ΅λλ€.
β μ€λ²λ‘λ© vs μ€λ²λΌμ΄λ©
μ€λ²λ‘λ©(Overloading)
κ°μ μ΄λ¦μ λ©μλλ₯Ό λ§€κ°λ³μλ§ λ€λ₯΄κ² νμ¬ μ¬λ¬ κ° μ μνλ κ²
→ κ°μ κΈ°λ₯μ΄μ§λ§ μ λ ₯μ΄ λ€λ₯Ό λ μ¬μ©ν©λλ€.
public class Calculator {
int add(int a, int b) {
return a + b;
}
double add(double a, double b) {
return a + b;
}
int add(int a, int b, int c) {
return a + b + c;
}
}
μ€λ²λ‘λ©μ νΉμ§
- κ°μ ν΄λμ€ λ΄μμ μ΄λ£¨μ΄μ§
- λ©μλ μ΄λ¦μ΄ λμΌ
- λ§€κ°λ³μ νμ , κ°μ, μμ μ€ νλ μ΄μμ΄ λ¬λΌμΌ ν¨
- λ°ν νμ λ§ λ€λ₯Έ κ²μ μ€λ²λ‘λ©μ΄ μλ
μ€λ²λ‘λ©μ μ₯μ
- μ§κ΄μ μΈ λ©μλ μ΄λ¦ μ¬μ© κ°λ₯
- λ€μν λ§€κ°λ³μμ λμνλ λ©μλλ₯Ό μΌκ΄λ μ΄λ¦μΌλ‘
- μ½λμ κ°λ μ±κ³Ό μ μ§λ³΄μμ± ν₯μ
μ€λ²λΌμ΄λ©(Overriding)
λΆλͺ¨ ν΄λμ€μ λ©μλλ₯Ό μμ ν΄λμ€μμ μ¬μ μνλ κ²
→ λΆλͺ¨μ κΈ°λ₯μ κ·Έλλ‘ μ°μ§ μκ³ μμμ΄ λ€λ₯΄κ² ꡬννκ³ μΆμ λ μ¬μ©ν©λλ€.
class Animal {
void sound() {
System.out.println("λλ¬Ό μ리");
}
}
class Dog extends Animal {
@Override
void sound() {
System.out.println("λ©λ©!");
}
}
π @Override μ΄λ Έν μ΄μ μ νμλ μλμ§λ§, μ€λ²λΌμ΄λ© λ©μλμμ λͺ νν νκ³ μ€μλ₯Ό λ°©μ§νκΈ° μν΄ μ¬μ©νλ κ²μ΄ μ’μ΅λλ€.
μ€λ²λΌμ΄λ©μ νΉμ§
- μμ κ΄κ³μμ μ΄λ£¨μ΄μ§
- λ©μλ μ΄λ¦, λ§€κ°λ³μ, λ°ν νμ μ΄ λͺ¨λ λμΌν΄μΌ ν¨
- μ κ·Ό μ μ΄μλ λΆλͺ¨ ν΄λμ€λ³΄λ€ λ μ νμ μ΄λ©΄ μ λ¨
- μμΈλ λΆλͺ¨ ν΄λμ€λ³΄λ€ λ λ§μ΄ λμ§λ©΄ μ λ¨
μ€λ²λ‘λ© vs μ€λ²λΌμ΄λ© λΉκ΅
νλͺ© | μ€λ²λ‘λ©(Overloading) | μ€λ²λΌμ΄λ©(Overriding) |
μ μ μμΉ | κ°μ ν΄λμ€ λ΄ | μμ κ΄κ³μ ν΄λμ€ κ° |
λ©μλ μ΄λ¦ | λμΌ | λμΌ |
λ§€κ°λ³μ | νμ , κ°μ, μμ μ€ νλ μ΄μ λ¬λΌμΌ ν¨ | λμΌν΄μΌ ν¨ |
λ°ν νμ | λ€λ₯Ό μ μμ | λμΌν΄μΌ ν¨ (Java 5λΆν° κ³΅λ³ λ°ν νμ νμ©) |
μ κ·Ό μ μ΄μ | λ¬΄κ΄ | λΆλͺ¨ ν΄λμ€λ³΄λ€ λ μ νμ μ΄λ©΄ μ λ¨ |
λͺ©μ | λ€μν λ§€κ°λ³μμ λμ | μμλ°μ λ©μλμ μ¬μ μ |
π λ§λ¬΄λ¦¬
μ€λμ Javaμ κ°μ²΄μ§ν₯ νλ‘κ·Έλλ°μμ μ€μν κ°λ μΈ μμκ³Ό λ©μλ νμ₯(μ€λ²λ‘λ©, μ€λ²λΌμ΄λ©)μ λν΄ μμ보μμ΅λλ€.
μμμ κΈ°μ‘΄ μ½λλ₯Ό μ¬μ¬μ©νκ³ νμ₯νμ¬ κ°λ° ν¨μ¨μ±μ λμ΄λ κ°λ ₯ν λꡬμ λλ€.
super ν€μλλ₯Ό ν΅ν΄ λΆλͺ¨ ν΄λμ€μ λ©€λ²μ μ κ·Όν μ μμ΅λλ€.
μ€λ²λ‘λ©μ κ°μ μ΄λ¦μ λ©μλλ₯Ό λ€μν λ§€κ°λ³μλ‘ μ μνμ¬ μ½λμ μΌκ΄μ±κ³Ό κ°λ μ±μ λμ΄κ³ , μ€λ²λΌμ΄λ©μ λΆλͺ¨ ν΄λμ€μ λ©μλλ₯Ό μμ ν΄λμ€μμ μ¬μ μνμ¬ λ€νμ±μ ꡬνν©λλ€.
μ΄λ¬ν κ°λ λ€μ κ°μ²΄μ§ν₯ νλ‘κ·Έλλ°μ ν΅μ¬μ΄λ©°, ν¨μ¨μ μ΄κ³ μ μ§λ³΄μκ° μ©μ΄ν μ½λλ₯Ό μμ±νλ λ° ν° λμμ΄ λ©λλ€.
λ€μ μκ°μλ κ°μ²΄μ§ν₯ νλ‘κ·Έλλ°μ λ λ€λ₯Έ ν΅μ¬ κ°λ μΈ λ€νμ±(Polymorphism)κ³Ό μΆμν(Abstraction)μ λν΄ μμλ³΄κ² μ΅λλ€. κΆκΈν λ΄μ©μ΄λ μΆκ°λ‘ μκ³ μΆμ κ°λ μ΄ μλ€λ©΄ λκΈλ‘ λ¨κ²¨μ£ΌμΈμ π
'β¨οΈ Language > Java' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[Java] μμΈ μ²λ¦¬ μμ μ 볡 β : κ°λ λΆν° try-catchκΉμ§ (0) | 2025.05.16 |
---|---|
[Java] μΆμνμ λ€νμ±μΌλ‘ μ μ°ν μ½λ μ€κ³νκΈ° (0) | 2025.05.13 |
[Java] κ°μ²΄μ§ν₯ νλ‘κ·Έλλ°(OOP) κΈ°λ³Έ κ°λ κ³Ό ꡬ쑰 (0) | 2025.05.11 |
[Java] Java μ μ΄λ¬Έ μμ μ 볡! (0) | 2025.05.10 |
[Java] κΈ°μ΄ λ¬Έλ² - λ³μ, μμ, μλ£ν, μ°μ°μ μμ μ 리! (0) | 2025.05.08 |