2021. 3. 15. 20:55γκ°λ μ 리 μμ μ€/Java
μλ νμΈμ? μ£Όλνλ μ λλ€.
03μ 15μΌ μμ λ‘ Classμ λνμ¬ μ‘°μ¬νλ κ²μ λ°μ κ²μ΄μμ!
μμ λ΄μ©μ 곡μ ν΄μ μ¬λ¬λΆλ€κ»μλ 곡λΆνμλλ°, λ§μ λμ λμκΈ° λ°λΌκ² μ΅λλ€!
κ·ΈλΌ λ°λ‘ μμ ν΄ λ³΄κ² μ΅λλ€!
π Class μμ 01
π κ°μ²΄ μ§ν₯ νλ‘κ·Έλλ°(OOP, Object-Oriented Programing)
κ°μ²΄ μ§ν₯ νλ‘κ·Έλλ°μμλ λͺ¨λ λ°μ΄ν°λ₯Ό κ°μ²΄(Object)λ‘ μ·¨κΈνλ©°, μ΄λ¬ν κ°μ²΄κ° λ°λ‘ νλ‘κ·Έλλ°μ μ€μ¬μ΄ λλ κ²μ΄μμ.
κ°μ²΄(Object)λ κ°λ¨ν μ΄μΌκΈ°νμλ©΄ μ€ μνμμ μ°λ¦¬κ° μΈμν μ μλ μ¬λ¬Όλ‘ μ€λͺ ν μ μκ² μ΅λλ€.
μ΄λ¬ν κ°μ²΄μ μν(State)μ νλ(Behavior)μ ꡬ체ννλ ννμ νλ‘κ·Έλλ°μ΄ λ°λ‘ κ°μ²΄ μ§ν₯ νλ‘κ·Έλλ° μ λλ€.
μ΄ λ! κ°μ²΄λ₯Ό λ§λ€μ΄ λ΄κΈ° μν μ€κ³λμ κ°μ κ°λ μ ν΄λμ€(Class)λΌκ³ ν©λλ€.
π ν΄λμ€(Class)
μλ°μμ ν΄λμ€(Class)λ κ°μ²΄λ₯Ό μ μνλ ν λλ μ€κ³λμ κ°μ μλ―Έλ‘ μ¬μ©λ©λλ€.
μλ°μμλ μ΄λ¬ν μ€κ³λμΈ ν΄λμ€λ₯Ό κ°μ§κ³ , μ¬λ¬ κ°μ²΄λ₯Ό μμ±νμ¬ μ¬μ©νκ² λ©λλ€.
ν΄λμ€λ κ°μ²΄μ μνλ₯Ό λνλ΄λ νλ(Field)μ κ°μ²΄μ νλμ λνλ΄λ λ©μλ(Method)λ‘ κ΅¬μ± λλ κ²μ΄μμ.
μ¦, νλ(Field)λ Classμ ν¬ν¨λ λ³μ(Variable)μ μλ―Ένλ΅λλ€!
λν, λ©μλ(Method)λ μ΄λ ν νΉμ μμ μ μννκΈ° μν λͺ λ Ήλ¬Έμ μ§ν©μ΄λΌ ν μ μμ΅λλ€.
μ£Όλνλμ μ λ ₯κ°μ λ°μ μΆλ ₯κ°μ λ΄λ κ³μ°κΈ°λΌκ³ νννκ³ μΆμ κ²μ΄μμ!
π Classμ μ
public class Car {
private String modelName;
private int modelYear;
private int color;
private int maxSpeed;
public void accelerate() {
System.out.println("μ€λΉ λ¬λ €!")
}
public void brake() {
System.out.println("λ©μΆ°λΌ!");
}
}
public class Test {
public void main(String[] args) {
car.modelName = "λ보λ₯΄κΈ°λ";
car.modelYear = 2016;
car.color = "μ£Όν©μ";
car.maxSpeed = 350;
car.accelerate();
car.brake();
}
}
λ΄ μ°¨ (myCar): μ€κ³λμ μν΄ μμ°λ μ°¨λ
μΉκ΅¬ μ°¨(FriendCar): μ€κ³λμ μν΄ μμ°λ λ λ€λ₯Έ μ°¨λ
π κ°μ²΄(Object) λλ μΈμ€ν΄μ€(Instance)
μλ°μμ Classλ₯Ό μ¬μ©νκΈ° μν΄μλ μ°μ ν΄λΉ Class Typeμ κ°μ²΄(Object)λ₯Ό μ μΈν΄μΌ νλ κ²μ΄μμ.
μ΄λ κ² Classλ‘λΆν° κ°μ²΄λ₯Ό μ μΈνλ κ³Όμ μ Classμ μΈμ€ν΄μ€νλΌκ³ νλ΅λλ€!
λν, μ΄λ κ² μ μΈλ ν΄λΉ Class Typeμ κ°μ²΄λ₯Ό μΈμ€ν΄μ€(Instance)λΌκ³ νλ κ²μ΄μμ.
μ¦, μΈμ€ν΄μ€λ Memoryμ ν λΉλ κ°μ²΄λ₯Ό μλ―Ένλ κ²μ΄μμ.
μλ°μμλ νλμ Classλ‘λΆν° μ¬λ¬ κ°μ μΈμ€ν΄μ€λ₯Ό μμ±ν μ μμ΅λλ€.
μ΄λ κ² μμ±λ μΈμ€ν΄μ€λ λ 립λ Memory 곡κ°μ μ μ₯λ μμ λ§μ Fieldλ₯Ό κ°μ§ μ μλ΅λλ€!
νμ§λ§, ν΄λΉ Classμ λͺ¨λ λ©μλ(Method)λ ν΄λΉ Classμμ μμ±λ λͺ¨λ μΈμ€ν΄μ€κ° 곡μ νκ² λλ΅λλ€!
π thisμ this()
this μ°Έμ‘° λ³μλ μΈμ€ν΄μ€κ° λ°λ‘ μκΈ° μμ μ μ°Έμ‘°νλλ°, μ¬μ©νλ λ³μμΈ κ²μ΄μμ. μ΄λ¬ν this μ°Έμ‘° λ³μλ ν΄λΉ μΈμ€ν΄μ€μ μ£Όμλ₯Ό κ°λ¦¬ν€κ³ μλ΅λλ€!
λ€μ μμ μ½λλ Car Classμ μμ±μλ₯Ό λνλΈ μμ λλλ€.
public class Car {
/* μΈμ€ν΄μ€ λ³μ (νλ) */
private String modelName;
private int modelYear;
private String color;
private int maxSpeed;
private int currentSpeed;
/* μμ±μ */
public Car(String modelName, int modelYear, String color, int maxSpeed) {
this.modelName = modelName;
this.modelYear = modelYear;
this.color = color;
this.maxSpeed = maxSpeed;
this.currentSpeed = 0;
} // μμ±μ λ
} // Class λ
μμ μμ μ²λΌ μμ±μμ 맀κ°λ³μ μ΄λ¦κ³Ό μΈμ€ν΄μ€ λ³μμ μ΄λ¦μ΄ κ°μ κ²½μ°μλ μΈμ€ν΄μ€ λ³μ μμ this ν€μλλ₯Ό λΆνμΌλ§ νλ κ²μ΄μμ. κ·Έ μ΄μ λ thisλ₯Ό μ λ ₯νμ§ μμΌλ©΄ κ°κΉμ΄ μλ μμ±μμ 맀κ°λ³μ μ΄λ¦μΈ λ³μλͺ μΌλ‘ μΈμ§λ₯Ό νκΈ° λλ¬Έμ΄μμ!
λ§μ½ 맀κ°λ³μλͺ μ μΈμ€ν΄μ€ λ³μλͺ κ³Ό λ€λ₯΄κ² νλ€λ©΄ κ΅³μ΄ thisλ₯Ό λΆνμ§ μμλ λλ΅λλ€!
μ΄λ κ² μλ°μμλ this μ°Έμ‘° λ³μλ₯Ό μ¬μ©νμ¬ μΈμ€ν΄μ€ λ³μμ μ κ·Όν μ μλ κ²μ΄μμ.
μ΄λ¬ν this μ°Έμ‘° λ³μλ₯Ό μ¬μ©ν μ μλ μμμ μΈμ€ν΄μ€ λ©μλ λΏμ΄λ©°, Class λ©μλμμλ μ¬μ©ν μ μλ κ²μ΄μμ.
λͺ¨λ μΈμ€ν΄μ€ λ©μλμλ this μ°Έμ‘° λ³μκ° μ¨κ²¨μ§ μ§μ λ³μλ‘ μ‘΄μ¬νκ³ μλ΅λλ€!
π this()
this() λ©μλλ μμ±μ λ΄λΆμμλ§ μ¬μ©ν μ μλ κ²μ΄μμ. μ΄κ²μ κ°μ ν΄λμ€μ λ€λ₯Έ μμ±μλ₯Ό νΈμΆν λ μ¬μ©νλ΅λλ€!
this() λ©μλμ μΈμλ₯Ό μ λ¬νλ©΄ μμ±μ μ€ λ©μλ μκ·Έλμ²κ° μΌμΉνλ λ€λ₯Έ μμ±μλ₯Ό μ°Ύμ νΈμΆ ν΄ μ£Όλ κ²μ΄μμ!
βοΈ λ©μλ μκ·Έλμ²(Method Signature)λ? λ©μλμ μ΄λ¦κ³Ό λ©μλμ μνμ λͺ μλλ 맀κ°λ³μ(μΈμ) 리μ€νΈλ₯Ό κ°λ₯΄ν¨λ΅λλ€!
λ€μμ this μ°Έμ‘° λ³μμ this() λ©μλλ₯Ό μ¬μ©ν μμ μ λλ€.
public Car {
private String modelName;
private int modelYear;
private String color;
private int maxSpeed;
private int currentSpeed;
public Car(String modelName, int modelYear, String color, int maxSpeed) {
this.modelName = modelName;
this.modelYear = modelYear;
this.color = color;
this.maxSpeed = maxSpeed;
this.currentSpeed = 0;
}
public Car() {
this("μλν", 2012, "κ²μ μ", 160); // λ€λ₯Έ μμ±μ νΈμΆ!
}
public String getModel() {
return this.modelYear + "λ
μ" + this.modelName + " " + this.color;
}
} // Class λ
/* ########################################################################### */
public class Method05 {
public static void main(String[] args) {
Car tcpCar = new Car();
System.out.println(tcpCar.getModel();
} // Main λ
} // Class λ
/* ########################################################################### */
// μ€ν κ²°κ³Ό
// 2012λ
μ μλν κ²μ μ
μμ μμ μμ 맀κ°λ³μλ₯Ό κ°μ§λ 첫λ²μ§Έ μμ±μλ this μ°Έμ‘° λ³μλ₯Ό μ¬μ©νμ¬ μΈμ€ν΄μ€ λ³μμ μ κ·Όνκ³ μλ κ²μ΄μμ!
λν, 맀κ°λ³μλ₯Ό κ°μ§μ§ μλ λλ²μ§Έ μμ±μλ λ΄λΆμμ this() λ©μλλ₯Ό μ΄μ©νμ¬ μ²«λ²μ§Έ μμ±μλ₯Ό νΈμΆνκ³ μλ΅λλ€!
μ΄λ κ² λ΄λΆμ μΌλ‘ λ€λ₯Έ μμ±μλ₯Ό νΈμΆνμ¬ μΈμ€ν΄μ€ λ³μλ₯Ό μ΄κΈ°ν ν μ μλ κ²μ΄μμ!
βοΈ λ¨, ν μμ±μμμ λ€λ₯Έ μμ±μλ₯Ό νΈμΆν μ λ°λμ ν΄λΉ μμ±μμ 첫 μ€μμλ§ νΈμΆν μ μλ κ² μμΌλ©΄ μ λλ κ²μ΄μμ!
π Static(μ μ ) ν€μλ
μ μ (Static)μ κ³ μ λμ΄λ μλ―Έλ₯Ό κ°κ³ μλ κ²μ΄μμ. Staticμ΄λΌλ ν€μλλ₯Ό μ¬μ©νμ¬ Staticλ³μμ Static λ©μλλ₯Ό λ§λ€ μ μλλ°, λ€λ₯Έλ§λ‘ μ μ νλμ μ μ λ©μλλΌκ³ νλ©°, μ΄ λμ ν©μ³ μ μ λ©€λ²(Static Member) νΉμ ν΄λμ€ λ©€λ²(Class Member)λΌκ³ νλ κ²μ΄μμ.
μ μ νλμ μ μ λ©μλλ κ°μ²΄(μΈμ€ν΄μ€)μ μμλ λ©€λ²κ° μλλΌ ν΄λμ€μ κ³ μ λ λ©€λ²λΌλ μ μ μμΌλ©΄ μ λλ κ²μ΄μμ. κ·Έλ κΈ° λλ¬Έμ ν΄λμ€ λ‘λκ° ν΄λμ€λ₯Ό λ‘λ©ν΄μ λ©μλ λ©λͺ¨λ¦¬ μμμ μ μ¬ν λ ν΄λμ€λ³λ‘ κ΄λ¦¬ λλ΅λλ€. λλ¬Έμ ν΄λμ€μ λ‘λ©μ΄ λλλ μ¦μ λ°λ‘ μ¬μ© κ°λ₯νλ΅λλ€!
π μ μ (Class)λ©€λ² μμ±
Static ν€μλλ₯Ό ν΅ν΄ μμ±λ μ μ λ©€λ²λ€μ Heap μμμ΄ μλ Static μμμ ν λΉμ΄ λλ κ²μ΄μμ. Static μμμ ν λΉλ Memoryλ λͺ¨λ κ°μ²΄κ° 곡μ νμ¬ νλμ λ©€λ²λ₯Ό μ΄λμλ μ§ μ°Έμ‘°ν μ μλ μ₯μ μ κ°μ§λ§, Garbage Collectorμ κ΄λ¦¬ μμ λ°μ μ‘΄μ¬νκΈ° λλ¬Έμ Static μμμ μλ λ©€λ²λ€μ νλ‘κ·Έλ¨μ μ’ λ£μκΉμ§ Memoryλ₯Ό ν λΉν μ±λ‘ μ‘΄μ¬νκ² λλ΅λλ€. λλ¬Έμ Staticμ λ무 λ¨λ°νκ² λλ©΄ λ§λ€κ³ μ νλ System μ±λ₯μ μ μν₯μ μ€ μ μλ€λ μ ! μμΌλ©΄ μ λλ κ²μ΄μμ.
λν, μΈμ€ν΄μ€ λ³μλ λλΆλΆ privateλ‘ μ§μ νκ³ , getterμ setterλ₯Ό μ¬μ©ν΄μ μ°Έμ‘°λ₯Ό νκ² λ©λλ€. κ·Έ μ΄μ λ [Java] μλ°μ κ°μ²΄μ§ν₯ νλ‘κ·Έλλ°(Object-Oriented Programming) μ΄ κ³³μμ νμΈνμ€ μ μλ κ²μ΄μμ!
π μμ±μλ?
νλλ 무쑰건 μ μΈλ§ ν΄μΌ ν©λλ€. μλ₯Ό λ€μ΄ metaλΌλ νλμ 10μ λ£κ³ μΆλ€λ©΄ μλμ κ°μ΄ μΆκ°νλ©΄ μλ©λλ€.
public class test() {
private int meta = 10; // μ΄λ κ² νλμμ μ΄κΈ°νκΉμ§ νλ©΄ μλ¨.
}
μ΄κΈ°νλ Methodλ, μμ±μμμλ§ ν΄μ€μΌ ν©λλ€. μ¦, λ΄κ° μ΄λ€ νλμ κ°μ μ΄κΈ°ν νκ³ μΆμ λ, μμ±μλ₯Ό μ΄λ€κ³ μ΄ν΄ νλ©΄ μ’μ΅λλ€. μμ±μλ λ°λμ νμν κ²μ μλκ³ , νλλ₯Ό μ΄κΈ°νν νμκ° μμ λ μ¬μ©νλ©΄ λλ κ² μ λλ€.
κ²°κ΅ μμ±μλ μΈμ€ν΄μ€κ° μμ±λ λ νΈμΆλλ 'μΈμ€ν΄μ€ μ΄κΈ°ν λ©μλ'λΌκ³ ν μ μμ΅λλ€. μμ±μλ μ€λ²λ‘λ©(κ°μ μ΄λ¦μ κ°μ§ μ¬λ¬ λ©μλ μ¬μ©)μ΄ κ°λ₯ ν©λλ€.
μ°Έκ³ λ‘ κ°μ²΄λ₯Ό μμ±ν λ new λ€μ μ€λ κ²μ΄ μμ±μ νΈμΆ μ λλ€!
Test test new Test();
// Test();λ test κ°μ²΄μ μμ±μλ₯Ό νΈμΆνλ κ²
π μ κ·Ό μ§μ μ(μ μ΄μ)
μμ΄λ‘ μΉλ©΄ νμ©μ¬(λͺ
μ¬λ₯Ό κΎΈλ©°μ€)κ³Ό κ°μ κ²μ΄μμ. ν΄λμ€μ ν΄λμ€ Memberμκ² λΆκ°μ μΈ μλ―Έλ₯Ό λΆμ¬νμ£ !
μ κ·Ό μ μ΄μ: public, protected, defulat, private ( 4κ° μ€ νλλ§ μ¬μ© κ°λ₯)
κ·Έ μΈ: static, final, abstract, native, transient, synchronized, volatile, strictfp
μ μ΄μλ ν΄λμ€λ λ©€λ²λ³μμ λ©μλμ μ£Όλ‘ μ¬μ©λλ©°, νλμ λμμ μ¬λ¬ μ μ΄μλ₯Ό μ‘°ν©νμ¬ μ¬μ©νλ κ²μ΄μμ.
μ κ·Ό μ μ΄μλ ν λ²μ λ€κ°μ§ μ€ νλλ§ μ¬μ© κ°λ₯ νλ΅λλ€!
νλ(Class λ³μ) μ μ₯μμ λ΄€μ λ, μμ²νλ μͺ½μμ λμκ² ν¨λΆλ‘ μ κ·Όνμ§ λͺ»νλλ‘ κΆνμ μ§μ ν μ μμ΅λλ€. μ΄λ κ² νλ μ΄μ λ₯Ό λΉμ λ‘ λ€μλ©΄ νλ μ μ₯μμ λ΄κ° κ°μ§κ³ μλ 물건μ μ무λ μμ κ°μ Έκ°κ³ , λ°κΎΈκ³ νλ©΄ κΈ°λΆμ΄ λμκ² μ§μ? κ·Έλμ μ΄κ²μ λͺ»νλλ‘ λ΄ λ¬Όκ±΄μ μ¨κΈ°κΈ° μν΄ Class(κ°μ²΄)μμ μ μΈν λ³μ(νλ)λ₯Ό μλνλ₯Ό νμ¬ λ³μ μλ£ν μμ Privateλ₯Ό μμ±νκ² λ©λλ€. λ¨, λͺ¨λ Methodλ publicμΌλ‘ μ μΈνλκ² μ’λ΅λλ€.
μ κ·Ό μ μ΄μλ publicκ³Ό privateμΈμλ λκ°μ§κ° λ μμ΅λλ€. protectedμ defaultκ° κ·Έκ²μ λλ€. protectedλ μμ κ΄κ³μ μλ€λ©΄ μλ‘ λ€λ₯Έ ν¨ν€μ§μ μλ ν΄λμ€μ μ κ·Όλ νμ©ν©λλ€. defaultλ μ κ·Ό μ μ΄ μ§μμκ° μλ κ²½μ°λ₯Ό μλ―Ένλλ°, μ κ·Ό μ μ΄μκ° μλ λ©μλλ κ°μ ν¨ν€μ§μ μκ³ , μμ κ΄κ³μ μλ λ©μλμ λν΄μλ§ μ κ·Όμ νμ© ν©λλ€. μλ κ·Έλ¦Όμ μ κ·Ό μ μ΄μ λ³λ‘ μ κ·Ό νμ© λ²μλ₯Ό κ·Έλ¦ΌμΌλ‘ λνλΈ κ²μ΄μμ. μμͺ½μ μμμλ‘ μ κ·Ό ν΅μ κ° μΌμνκ³ , λ°μ μμμλ‘ μ κ·Όμ΄ μμ λ‘μ΅λλ€.
μ κ·Ό μ μ΄μλ Member λλ Classμ μ¬μ© λλ΅λλ€!
μ κ·Ό μ μ΄μκ° μ¬μ©λ μ μλ κ³³ - Class, Member λ³μ, Method, μμ±μ
- private : κ°μ ν΄λμ€ λ΄ μ κ·Ό κ°λ₯
- defulat : κ°μ ν¨ν€μ§ λ΄λ§ μ κ·Ό κ°λ₯
- protected : κ°μ ν¨ν€μ§ λ΄μ λ€λ₯Έ ν¨ν€μ§μ μμ Classμμλ§ μ κ·Ό κ°λ₯
- public : μ΄λ€ κ³³μμλ μ κ·Ό κ°λ₯
public > protected > (default) > private
π μ€λ²λ‘λ©(Overloading)
π Method Signature(λ©μλ μκ·Έλμ²)
λ©μλ μ€λ²λ‘λ©μ ν΅μ¬μ λ°λ‘ λ©μλ μκ·Έλμ²(Method Signature)μ μλ΅λλ€!
λ©μλ μκ·Έλμ²λ? λ©μλμ μ μΈλΆμ λͺ μλλ 맀κ°λ³μμ 리μ€νΈλ₯Ό κ°λ¦¬ν¨λ΅λλ€!
λ§μ½ λ λ©μλκ° λ§€κ°λ³μμ κ°μμ νμ , κ·Έ μμκΉμ§ λͺ¨λ κ°λ€λ©΄, μ΄ λ λ©μλμ μκ·Έλμ²λ κ°λ€κ³ ν μ μλ΅λλ€!
π Method Overloading
λ©μλ μ€λ²λ‘λ©(overloading)μ΄λ? κ°μ μ΄λ¦μ λ©μλλ₯Ό μ€λ³΅νμ¬ μ μνλ κ²μ μλ―Ένλ΅λλ€!
μλ°μμλ μλ ν ν΄λμ€ λ΄μ κ°μ μ΄λ¦μ λ©μλλ₯Ό λ μ΄μ κ°μ§ μ μλ κ²μ΄μμ.
νμ§λ§, 맀κ°λ³μμ κ°μλ νμ μ λ€λ₯΄κ² νλ€λ©΄? νλμ μ΄λ¦μΌλ‘ λ©μλλ₯Ό μμ±ν μ μλ κ²μ΄μμ.
μ¦, λ©μλ μ€λ²λ‘λ©μ μλ‘ λ€λ₯Έ μκ·Έλμ²λ₯Ό κ°λ μ¬λ¬ λ©μλλ₯Ό κ°μ μ΄λ¦μΌλ‘ μ μνλ κ²μ΄λΌκ³ ν μ μλ΅λλ€!
μ΄λ¬ν λ©μλ μ€λ²λ‘λ©μ μ¬μ©ν¨μΌλ‘μ¨, λ©μλμ μ¬μ©λλ μ΄λ¦μ μ μ½ν μ μλ κ²μ΄μμ.
λν, λ©μλλ₯Ό νΈμΆν λ μ λ¬ν΄μΌ ν 맀κ°λ³μμ νμ μ΄λ, κ°μμ λν΄ ν¬κ² μ κ²½ μ°μ§ μκ³ , νΈμΆ ν μ μλ΅λλ€!
λ©μλ μ€λ²λ‘λ©μ κ°μ²΄ μ§ν₯ νλ‘κ·Έλλ°μ νΉμ§ μ€ νλμΈ λ€νν(Polymorphism)μ ꡬννλ λ°©λ² μ€ νλλλλ€.
λ©μλ μ€λ²λ‘λ©μ λνμ μλ‘λ println()μ λ€ μ μλ κ²μ΄μμ.
println()μ μ λ¬λ°λ 맀κ°λ³μμ νμ μ λ°λΌ λ€μκ³Ό κ°μ΄ λ€μν μν μ€μμ μ μ ν μνμ νΈμΆνκ² λλ΅λλ€!
println()
println(boolean x)
println(char x)
println(char[] x)
println(double x)
println(float x)
println(int x)
println(long x)
println(Object x)
println(String x)
π Method Overloading 쑰건
μλ°μμ λ©μλ μ€λ²λ‘λ©μ΄ μ±λ¦½λκΈ° μν΄μλ λ€μκ³Ό κ°μ 쑰건μ λ§μ‘±ν΄μΌ νλ κ²μ΄μμ.
첫째! λ©μλμ μ΄λ¦μ΄ κ°μμΌ ν©λλ€.
λμ§Έ! λ©μλμ μκ·Έλμ² μ¦, 맀κ°λ³μμ κ°μ λλ νμ μ΄ λ¬λΌμΌ ν©λλ€.
λ©μλ μ€λ²λ‘λ©μ λ°ν νμ κ³Όλ κ΄κ³κ° μλ€λ μ μμΌλ©΄ μ λλ κ²μ΄μμ. λ§μ½ λ©μλμ μκ·Έλμ²λ κ°μλ° λ°ν νμ λ§μ΄ λ€λ₯Έ κ²½μ°μλ μ€λ²λ‘λ©μ΄ μ±λ¦½λμ§ μλ λ΅λλ€!
π Method Overloading μμ
μλ° μ»΄νμΌλ¬λ μ¬μ©μκ° μ€λ²λ‘λ©λ ν¨μλ₯Ό νΈμΆνλ©΄, μ λ¬λ 맀κ°λ³μμ κ°μμ νμ κ³Ό κ°μ μκ·Έλμ²λ₯Ό κ°μ§λ λ©μλλ₯Ό μ°Ύμ νΈμΆνλ΅λλ€.
λ€μμ ν¨μμ μ€λ²λ‘λ©μ μ΄μ©νμ¬ μ μν display() λ©μλμ μν μμ μ λλ€.
public void display (int num1) // μ λ¬λ°μ num1μ κ·Έλλ‘ μΆλ ₯
public void display (int num1, int num2) // μ λ¬λ°μ λ μ μμ κ³±μ μΆλ ₯
public void display (int num1, double num2) // μ λ¬ λ°μ μ μμ μ€μμ ν©μ μΆλ ₯
μ΄μ μ¬μ©μκ° display() λ©μλλ₯Ό νΈμΆνλ©΄, μ»΄νμΌλ¬λ μλμΌλ‘ κ°μ μκ·Έλμ²λ₯Ό κ°μ§λ λ©μλλ₯Ό μ°Ύμ νΈμΆνλ΅λλ€!
display(10); // 1λ² display() νΈμΆ => 10
display(10, 20); // 2λ² display() νΈμΆ => 10 * 20 = 200
display(10, 3.14); // 3λ² display() νΈμΆ => 10 + 3.14 = 13.14
display(10, 'a'); // 2λ²κ³Ό 3λ² λͺ¨λ νΈμΆ κ°λ₯!
λ¬Έμ λ 4λ²κ³Ό κ°μ΄ 첫λ²μ§Έ μΈμλ‘λ μ μλ₯Ό, λλ²μ§Έ μΈμλ‘λ μ€μλ₯Ό μ λ¬λ°λ νΈμΆμ λλ€.
μλ°μμ charν λ°μ΄ν°λ intν λΏλ§ μλλΌ doubleνμΌλ‘λ νμ μ΄ λ³νλ μ μκΈ° λλ¬ΈμΈ κ²μ΄μμ.
λ°λΌμ μ΄μ κ°μ νΈμΆμ μλ° μ»΄νμΌλ¬κ° μ΄λ μκ·Έλμ²μ display()λ₯Ό νΈμΆν΄μΌ ν μ§ λΆλͺ νν΄ μ§λ κ²μ΄μμ.
μλ°μμλ μ€λ²λ‘λ©ν λ©μλμ μ΄λ¬ν λͺ¨νΈν νΈμΆμ νμ©νμ§ μμΌλ©°, μμ κ°μ κ²½μ° λ μμ νν λ²μλ₯Ό κ°μ§λ intνμΌλ‘ μλ νλ³νμ νκ² λλ΅λλ€.
λ€μ μμ λ μμμ μ΄ν΄λ³Έ display()λ₯Ό λ€μν μκ·Έλμ²λ‘ μ€λ²λ‘λ©νλ μμ μΈ κ²μ΄μμ.
public class Test {
static void display(int num1) {
System.out.println(num1);
}
static void display(int num1, int num2) {
System.out.println(num1 * num2);
}
static void display(int num1, double num2) {
System.out.println(num1 + num2);
}
} // Class λ
/* ########################################################### */
public class Method01 {
public Static void main(String[] args) {
Test myfunc = new Test();
myfunc.display(10);
myfunc.dispaly(10,20);
myfunc.display(10, 3.14);
myfunc.display(10, 'a');
} // Main λ
} // Class λ
/* #######################μ€ ν κ²° κ³Ό########################## */
10
200
13.14
970 // aμ ASCII Code κ°μ΄ 97μ΄λ―λ‘, 97 * 10μ΄ μ°μ°λ¨
μμ μμ μ²λΌ λ©μλμ μ€λ²λ‘λ©μ 맀κ°λ³μμ νμ λΏ μλλΌ, 맀κ°λ³μμ κ°μλ₯Ό λ¬λ¦¬ν΄λ μμ±ν μ μλ΅λλ€!
π Class μμ 02
π μμμ΄λ?
Main Methodμμ μλ‘μ΄ Classλ₯Ό μμ±ν λ μλ£ν νμ λͺ μ λ€λ₯΄κ² νκ³ , Class λ³μλͺ μ λμΌνκ² νμ¬ μμ±νκ² λλ©΄ Classλͺ μ μ μνλ λΆλΆμμ extendκ° λμ€λλ°, μ΄κ±Έ 'μμ λ°λλ€'λΌκ³ ν©λλ€.
λΆλͺ¨ κ°μ²΄μ μμ κ°μ²΄λ μμ°ν λ€λ₯Έ μ½λμ λλ€. λ€λ₯Έ Methodμμ μμ κ°μ²΄λ₯Ό νΈμΆν λλ λ°λ‘ μ¬μ©μ΄ κ°λ₯νμ§λ§, λΆλͺ¨ κ°μ²΄λ₯Ό μ¬μ©νλ €λ©΄ Superλ₯Ό κ±°μ³μ κ°μΌ ν©λλ€.
λΆλͺ¨ νλκ° Privateμ΄λ©΄ μμ λ§ μ κ·Όμ΄ κ°λ₯νλ€λ μλ―Έμ΄κΈ° λλ¬Έμ μμλ μ κ·Όν μ μμ΅λλ€. λΆλͺ¨ νλκ° Protectedμ΄λ©΄ μ νμ μ κ·Όμ΄ κ°λ₯νλ€λ μλ―ΈμΈλ°, μμ κ°μ²΄λ μ κ·Όμ΄ κ°λ₯ν©λλ€. μμμ κ²°κ΅ μ΄λ€ Class κ°μ²΄λ₯Ό μμ±νκ³ , κΈ°λ₯μ λ£μ΄ μ°λ€κ° μΆκ°μ μΌλ‘ κΈ°λ₯μ λ λ£κ³ μΆμ λ, μμ Class κ°μ²΄λ₯Ό μμ±ν΄μ μ¬μ©νλ κ²μ λλ€.
λΆλͺ¨λ νλλ°μ κ°μ§ μ μκΈ° λλ¬Έμ ν λΆλͺ¨μκ²λ§ μμ λ°μ μ μμ΅λλ€.
κ²°κ΅ κΈ°μ‘΄ Classλ₯Ό νμ₯ν΄μ μλ‘μ΄ Classλ₯Ό λ§λλ κ²μ λλ€. κΈ°μ‘΄ Classλ₯Ό Base λλ parent(λΆλͺ¨), μμ ν΄λμ€(Super Class)λΌ νκ³ , μλ‘ λ§λ Classλ₯Ό νμ(Derived Class) λλ Child ClassλΌκ³ ν©λλ€.
public class AdvanceWhell extends Wheel {
public void back() {
System.out.println("λ€λ‘ κ΅΄λ¬κ°λ€.");
} // back End
} // Class End
μμ μ½λμμ Classλͺ μ λ κ³³μ extends μΌμͺ½μ μμ Classλͺ μ΄ μ€κ³ , μ€λ₯Έμͺ½μ λΆλͺ¨ Classλͺ μ΄ μ΅λλ€. λΆλͺ¨ Classλ νλλ§ μ¬μ©ν μ μκ³ , μμμ μ¬μ©νλ©΄ μ½λλμ λ§μ΄ μ€μΌ μ μκ² λ©λλ€.
κ²°κ΅ μμμ΄λ κΈ°μ‘΄μ ν΄λμ€μ κΈ°λ₯μ μΆκ°νκ±°λ, μ¬μ μνμ¬ μλ‘μ΄ ν΄λμ€λ₯Ό μ μνλ κ²μ μλ―Ένλ΅λλ€. μ΄λ¬ν μμμ μΊ‘μν, μΆμνμ λλΆμ΄ κ°μ²΄ μ§ν₯ νλ‘κ·Έλλ°μ ꡬμ±νλ μ€μν νΉμ§ μ€ νλμΈ κ²μ΄μμ.
μμμ μ΄μ©νλ©΄ κΈ°μ‘΄μ μ μλμ΄ μλ ν΄λμ€μ λͺ¨λ νλμ λ©μλλ₯Ό λ¬Όλ €λ°μ, μλ‘μ΄ ν΄λμ€λ₯Ό μμ±ν μ μλ΅λλ€!
π μμμ μ₯μ
μλ°μμ ν΄λμ€μ μμμ λ€μκ³Ό κ°μ μ₯μ μ κ°λ κ²μ΄μμ.
첫째! κΈ°μ‘΄μ μμ±λ ν΄λμ€λ₯Ό μ¬νμ©ν μ μλ€!
λμ§Έ! μμ ν΄λμ€ μ€κ³ μ μ€λ³΅λλ λ©€λ²λ₯Ό 미리 λΆλͺ¨ ν΄λμ€μ μμ±ν΄ λλ©΄ μμ ν΄λμ€μμλ ν΄λΉ λ©€λ²λ₯Ό μμ±νμ§ μμλ λλ€!
μ μ§Έ! ν΄λμ€ κ°μ κ³μΈ΅μ κ΄κ³λ₯Ό ꡬμ±ν¨μΌλ‘ λ€νμ±μ λ¬Έλ²μ ν λλ₯Ό λ§λ ¨νλ€!
π μμ ν΄λμ€(Child Class)
μμ ν΄λμ€(Child Class)λ λΆλͺ¨ ν΄λμ€μ λͺ¨λ νΉμ±μ λ¬Όλ € λ°μ μλ‘κ² μμ±λ ν΄λμ€μΈ κ²μ΄μμ.
λ€μμ λΆλͺ¨ ν΄λμ€μ μμ ν΄λμ€ κ°μ ν¬ν¨λ μ λλ€.
μ΄μ²λΌ λΆλͺ¨ ν΄λμ€λ μμ ν΄λμ€μ ν¬ν¨λ κ²μΌλ‘ λ³Ό μ μλ κ²μ΄μμ. λ°λΌμ λΆλͺ¨ ν΄λμ€μ μλ‘μ΄ νλλ₯Ό νλ μΆκ°νλ©΄, μμ ν΄λμ€μλ μλμΌλ‘ ν΄λΉ νλκ° μΆκ°λ κ²μ²λΌ λμνλ΅λλ€!
μμ ν΄λμ€μλ λΆλͺ¨ ν΄λμ€μ νλμ λ©μλλ§ μμλλ©°, μμ±μμ μ΄κΈ°ν ν΄λμ μμλμ§ μλμ μ°Έκ³ νμκΈΈ λ°λΌλ κ²μ΄μμ! λν, λΆλͺ¨ ν΄λμ€μ μ κ·Ό μ μ΄κ° Privateμ΄λ, Defaultλ‘ μ€μ λ λ©€λ²λ μμ ν΄λμ€μμ μμλ°μ§λ§, μ κ·Όμ ν μ μλ΅λλ€!
public class Parent {
private int a = 10;
public int b = 20;
} // class λ
/* ####################################### */
public Child extends Parent {
public int c = 30;
pubilc void display() {
/* System.out.println(a); μμλ°μ Private νλ μ°Έμ‘° */
System.out.println(b); // μμλ°μ public νλ μ°Έμ‘°
System.out.println(c); // μκΈ° μμ μ΄ μ μΈν public νλ μ°Έμ‘°
} // display λ
} // Class λ
/* ####################################### */
public class inheritance01 {
public static void main(Strint[] args) {
Child ch = new Child();
ch.display();
} // Main λ
} // Class λ
/* ############# μ€ ν κ²° κ³Ό ############### */
20
30
μ μμ μ μμ ν΄λμ€μ λ©μλμμ λΆλͺ¨ ν΄λμ€μμ μμλ°μ public νλλ₯Ό μ°Έμ‘°νλ κ²μ΄ μλ κ²μ΄μμ.
μ΄μ²λΌ μμ ν΄λμ€μμ λ°λ‘ μ μΈνμ§ μμ νλλΌλ ν΄λΉ μ΄λ¦μ νλλ₯Ό λΆλͺ¨ ν΄λμ€μμ μμ λ°μλ€λ©΄ λ¬Έμ κ° μλ΅λλ€!
νμ§λ§ μ£Όμ μ²λ¦¬λ a μΆλ ₯ λ¬Έμ₯μ ν΄λΉ νλκ° λΆλͺ¨ ν΄λμ€μ private νλλΌλ©΄ μ무리 μμμ΄λΌλ μ κ·Όν μ μμΌλ―λ‘ μ€λ₯κ° λλ΅λλ€!
λν, μμ ν΄λμ€μμλ μκΈ° μμ μ΄ μΆκ° μ μΈν νλλ λ©μλλ₯Ό μ μΈνμ¬ μ¬μ©ν μ μλ΅λλ€!
βοΈ μλ°μμ ν΄λμ€λ λ¨ ν κ°μ ν΄λμ€λ§μ μμλ°λ λ¨μΌ μμλ§ κ°λ₯νλ΅λλ€!
π Object Class
μλ°μμλ Object ν΄λμ€λ λͺ¨λ ν΄λμ€μ λΆλͺ¨ ν΄λμ€ μ¦, μλ΄κ³Ό νμ νΉμ λ¨κ΅° ν μλ²μ§κ° λλ ν΄λμ€ μΈ κ²μ΄μμ.
λ°λΌμ μλ°μ λͺ¨λ ν΄λμ€λ μλμΌλ‘ Object ν΄λμ€μ λͺ¨λ νλμ λ©μλλ₯Ό μμλ°κ² λλ΅λλ€.
μ¦, μλ°μ λͺ¨λ ν΄λμ€λ λ³λλ‘ extends ν€μλλ₯Ό μ¬μ©νμ¬ Object ν΄λμ€μ μμμ λͺ μνμ§ μμλ Object ν΄λμ€μ λͺ¨λ λ©€λ²λ₯Ό μμ λ‘κ² μ¬μ©ν μ μλ΅λλ€.
μλ°μ λͺ¨λ κ°μ²΄μμ toString()μ΄λ, clone()κ³Ό κ°μ λ©μλλ₯Ό λ°λ‘ μ¬μ©ν μ μλ μ΄μ κ° ν΄λΉ λ©μλλ€μ΄ Object ν΄λμ€μ λ©μλμ΄κΈ° λλ¬Έμ΄λλλ€.
π Superμ Super()
π Super ν€μλ
Super ν€μλλ λΆλͺ¨ ν΄λμ€λ‘λΆν° μμλ°μ νλλ λ©μλλ₯Ό μμ ν΄λμ€μμ μ°Έμ‘°νλλ° μ¬μ©νλ μ°Έμ‘° λ³μμΈ κ²μ΄μμ.
μΈμ€ν΄μ€ λ³μμ μ΄λ¦κ³Ό μ§μ λ³μμ μ΄λ¦μ΄ κ°μ κ²½μ° μΈμ€ν΄μ€ λ³μ μμ this ν€μλλ₯Ό μ¬μ©νμ¬ κ΅¬λΆν μ μμλ κ±° κΈ°μ΅νμλμ?
μ΄μ λ§μ°¬κ°μ§λ‘ λΆλͺ¨ ν΄λμ€μ λ©€λ²μ μμ ν΄λμ€μ λ©€λ² μ΄λ¦μ΄ κ°μ κ²½μ° superλ₯Ό μ¬μ©νμ¬ κ΅¬λ³ν μ μλ΅λλ€.
μ΄λ κ² μλ°μμλ super μ°Έμ‘° λ³μλ₯Ό μ¬μ©νμ¬ λΆλͺ¨ ν΄λμ€μ λ©€λ²μ μ κ·Όν μ μλ΅λλ€!
thisμ λ§μ°¬κ°μ§λ‘ super μ°Έμ‘° λ³μλ₯Ό μ¬μ©ν μ μλ λμλ μΈμ€ν΄μ€ λ©μλ λΏμ΄λ©°, ν΄λμ€ λ©μλμμλ μ¬μ©ν μ μλ μ μμΌλ©΄ μλλ κ²μ΄μμ!
public class Parent {
int a = 10;
} // Parent Class λ
/* ############################################## */
public Child extends Parent {
public void display() {
System.out.println(a);
System.out.println(this.a);
System.out.println(super.a);
} // display λ
} // Child Class λ
/* ############################################## */
public class inheritance02 {
public static void main(String[] args) {
Child ch = new Child();
ch.display();
} // Main λ
} // inheritance02 Class λ
/* ################# μΆ λ ₯ κ²° κ³Ό ################ */
10
10
10
μμ μμ μμ intν λ³μ numμ λΆλͺ¨ ν΄λμ€μΈ Parent ν΄λμ€μμλ§ μ μΈλμ΄ μμ΅λλ€. λ°λΌμ μ§μ λ³μμ this μ°Έμ‘° λ³μ, super μ°Έμ‘° λ³μ λͺ¨λ κ°μ κ°μ μΆλ ₯νκ² λ©λλ€.
class Parent {
int a = 10;
} // Parent λ
/* ######################################### */
class Child extends Parent {
int a = 20;
void display() {
System.out.println(a);
System.out.println(this.a);
System.out.println(super.a);
} // display λ
} // Child λ
/* ######################################### */
public class Inheritance03 {
public static void main(String[] args) {
Child ch = new Child();
ch.display();
} // main λ
} // Inheritance03 λ
/* ################# μΆ λ ₯ κ²° κ³Ό ############### */
20
20
10
νμ§λ§ μμ μμ μμ intν λ³μ numμ μμ ν΄λμ€μΈ Child ν΄λμ€μμλ μ μΈ λμ΄ μλ΅λλ€.
λ°λΌμ μ§μ λ³μμ this μ°Έμ‘° λ³μλ μμ ν΄λμ€μμ λμ λ κ°μ μΆλ ₯νκ³ , super μ°Έμ‘° λ³μλ§μ΄ λΆλͺ¨ ν΄λμ€μ λμ λ κ°μ μΆλ ₯νκ² λ©λλ€.
π Super() λ©μλ
this() λ©μλκ° κ°μ ν΄λμ€μ λ€λ₯Έ μμ±μλ₯Ό νΈμΆν λ μ¬μ©λλ€λ©΄, super() λ©μλλ λΆλͺ¨ ν΄λμ€μ μμ±μλ₯Ό νΈμΆν λ μ¬μ©λλ κ²μ΄μμ.
μμ ν΄λμ€μ μΈμ€ν΄μ€λ₯Ό μμ±νλ©΄, ν΄λΉ μΈμ€ν΄μ€μλ μμ ν΄λμ€μ κ³ μ λ©€λ²λΏλ§ μλλΌ λΆλͺ¨ ν΄λμ€μ λͺ¨λ λ©€λ²κΉμ§λ ν¬ν¨λμ΄ μλ΅λλ€!
λ°λΌμ λΆλͺ¨ ν΄λμ€μ λ©€λ²λ₯Ό μ΄κΈ°ννκΈ° μν΄ μμ ν΄λμ€μ μμ±μμμ λΆλͺ¨ ν΄λμ€μ μμ±μκΉμ§ νΈμΆν΄μΌλ§ νλ΅λλ€.
μ΄λ¬ν λΆλͺ¨ ν΄λμ€μ μμ±μ νΈμΆμ λͺ¨λ ν΄λμ€μ λΆλͺ¨ ν΄λμ€μΈ Object ν΄λμ€μ μμ±μκΉμ§ κ³μ κ±°μ¬λ¬ μ¬λΌκ°λ©° μνλλ κ²μ΄μμ.
λ°λΌμ μλ° μ»΄νμΌλ¬λ λΆλͺ¨ ν΄λμ€μ μμ±μλ₯Ό λͺ μμ μΌλ‘ νΈμΆνμ§ μλ λͺ¨λ μμ ν΄λμ€μ μμ±μ 첫 μ€μ μλμΌλ‘ λ€μκ³Ό κ°μ λͺ λ Ήλ¬Έμ μΆκ°νμ¬, λΆλͺ¨ ν΄λμ€μ λ©€λ²λ₯Ό μ΄κΈ°νν μ μλλ‘ ν΄ μ€λ΅λλ€.
super();
νμ§λ§ μλ° μ»΄νμΌλ¬λ μ»΄νμΌ μ ν΄λμ€μ μμ±μκ° νλλ μ μλμ΄ μμ§ μμμΌλ§, μλμΌλ‘ κΈ°λ³Έ μμ±μλ₯Ό μΆκ° ν΄ μ£Όλ κ²μ΄μμ.
λ§μ½ λ€μ μμ μ²λΌ λΆλͺ¨ ν΄λμ€μ 맀κ°λ³μλ₯Ό κ°μ§λ μμ±μλ₯Ό νλλΌλ μ μΈνλ€λ©΄, λΆλͺ¨ ν΄λμ€μλ κΈ°λ³Έ μμ±μκ° μλμΌλ‘ μΆκ°λμ§ μμ κ²μ΄μμ.
Public class Parent {
int a;
parent (int n) {
a = n;
} // Parent λ
} // Class λ
κ·Έλ μ§λ§ λ€μ μμ μ²λΌ Parent ν΄λμ€λ₯Ό μμλ°μ μμ ν΄λμ€μμ super() λ©μλλ₯Ό μ¬μ©νμ¬ λΆλͺ¨ ν΄λμ€μ κΈ°λ³Έ μμ±μλ₯Ό νΈμΆνκ² λλ€λ©΄ μ€λ₯κ° λ°μνκ² λ κ²μ΄μμ.
public Parent {
int a;
public Parent(int n) {
a = n;
} // Parent λ
} // Class λ
/* ########################################## */
class Child extends Parent {
int b;
public Child() {
super();
b = 20;
} Child λ
} Class λ
μλνλ©΄ λΆλͺ¨ ν΄λμ€μΈ Parent ν΄λμ€μλ κΈ°λ³Έ μμ±μκ° μκΈ° λλ¬ΈμΈ κ²μ΄μμ.
λ°λΌμ 맀κ°λ³μλ₯Ό κ°μ§λ μμ±μλ₯Ό μ μΈν΄μΌ ν κ²½μ° λλλ‘ λ€μκ³Ό κ°μ΄ κΈ°λ³Έ μμ±μκΉμ§ λͺ μμ μΌλ‘ μ μΈνλ κ²μ΄ μ’λ΅λλ€!
class Parent {
int a;
Parent() { a = 10; }
Parent(int n) { a = n; }
}
class Child extends Parent {
int b;
Child() {
super();
b = 20;
}
λ€μμ super() λ©μλκ° μ΄λ»κ² νΈμΆλλμ§ λ³΄μ¬μ£Όλ κ²μ΄μμ.
class Parent {
int a;
Parent() { /* κΈ°λ³Έ μμ±μ μ μΈ */
a = 10;
}
Parent(int n) {
a = n;
}
}
class Child extends Parent {
int b;
Child() {
//super(40);
b = 20;
}
void display() {
System.out.println(a);
System.out.println(b);
}
}
public class Inheritance04 {
public static void main(String[] args) {
Child ch = new Child();
ch.display();
}
}
/* ############## μ€ ν κ²° κ³Ό ################ */
10
20
μμ μμ λ κ·Έλ₯ μ€ν μ μλ° μ»΄νμΌλ¬λ μ£Όμ μ²λ¦¬λ [//super(40)] λΌμΈμ μλμΌλ‘ super(); ꡬ문μ μΆκ°νκ² λ κ²μ΄μμ.
λ°λΌμ λ³μ aλ 10μΌλ‘ μ΄κΈ°ν λλ΅λλ€. νμ§λ§, [//super(40)]λΌμΈμ μ£Όμ μ²λ¦¬λ₯Ό ν΄μ νκ³ μ€ν μ λΆλͺ¨ ν΄λμ€μΈ Parent ν΄λμ€λ λλ²μ§Έ μμ±μμ μν΄ μ΄κΈ°ν λ κ²μ λλ€. λ°λΌμ λ³μ aλ 40μΌλ‘ μ΄κΈ°ν λ κ²μ΄μμ!
π μ€λ²λΌμ΄λ©(overriding)
π λ©μλ μ€λ²λΌμ΄λ© (Method Overriding)
μμ λ°°μ΄ μ€λ²λ‘λ©(overloading)μ΄λ μλ‘ λ€λ₯Έ μκ·Έλμ²λ₯Ό κ°λ μ¬λ¬ λ©μλλ₯Ό νλμ μ΄λ¦μΌλ‘ μ μνλ κ²μ΄μμ΅λλ€.
μ€λ²λΌμ΄λ©(overriding)μ΄λ μμ κ΄κ³μ μλ λΆλͺ¨ ν΄λμ€μμ μ΄λ―Έ μ μλ λ©μλλ₯Ό μμ ν΄λμ€μμ κ°μ μκ·Έλμ³λ₯Ό κ°λ λ©μλλ‘ λ€μ μ μνλ κ²μ΄λΌκ³ ν μ μμ΅λλ€.
μλ°μμ μμ ν΄λμ€λ λΆλͺ¨ ν΄λμ€μ private λ©€λ²λ₯Ό μ μΈν λͺ¨λ λ©μλλ₯Ό μμλ°μ΅λλ€.
μ΄λ κ² μμλ°μ λ©μλλ κ·Έλλ‘ μ¬μ©ν΄λ λκ³ , νμν λμμ μν΄ μ¬μ μνμ¬ μ¬μ©ν μλ μμ΅λλ€.
μ¦, λ©μλ μ€λ²λΌμ΄λ©μ΄λ μμλ°μ λΆλͺ¨ ν΄λμ€μ λ©μλλ₯Ό μ¬μ μνμ¬ μ¬μ©νλ κ²μ μλ―Έν©λλ€.
μλ°μμλ λ©μλ μ€λ²λΌμ΄λ©μ ν΅ν΄ μμλ°μ λΆλͺ¨ ν΄λμ€μ λ©μλλ₯Ό μμ ν΄λμ€μμ μ§μ μ¬μ μν μ μμ΅λλ€.
λ€μ μμ λ λΆλͺ¨ ν΄λμ€μΈ Parent ν΄λμ€μ display() λ©μλλ₯Ό μμ ν΄λμ€μΈ Child ν΄λμ€μμ μ€λ²λΌμ΄λ©νλ μμ μ λλ€.
class Parent {
void display() {
System.out.println("λΆλͺ¨ ν΄λμ€μ display() λ©μλμ
λλ€.");
}
}
class Child extends Parent {
void display() {
System.out.println("μμ ν΄λμ€μ display() λ©μλμ
λλ€.");
}
}
public class Inheritance05 {
public static void main(String[] args) {
Parent pa = new Parent();
pa.display();
Child ch = new Child();
ch.display();
Parent pc = new Child();
pc.display();
}
}
μ€ν κ²°κ³Ό
λΆλͺ¨ ν΄λμ€μ display() λ©μλμ λλ€.
μμ ν΄λμ€μ display() λ©μλμ λλ€.
μμ ν΄λμ€μ display() λ©μλμ λλ€.
μμ μμ μμλ μΈλ²μ§Έμ κ°μ΄ μΈμ€ν΄μ€μ μ°Έμ‘°κ° νμ©λλ μ΄μ λ λ°λ‘ μλ°μμμ λ€νμ± λλ¬ΈμΈ κ²μ΄μμ.
π μ€λ²λΌμ΄λ© 쑰건
μλ°μμ λ©μλλ₯Ό μ€λ²λΌμ΄λ©νκΈ° μν 쑰건μ λ€μκ³Ό κ°μ κ²μ΄μμ.
1. μ€λ²λΌμ΄λ©μ΄λ λ©μλμ λμλ§μ μ¬μ μνλ κ²μ΄λ―λ‘, λ©μλμ μ μΈλΆλ κΈ°μ‘΄ λ©μλμ μμ ν κ°μμΌ ν©λλ€.
νμ§λ§ λ©μλμ λ°ν νμ μ λΆλͺ¨ ν΄λμ€μ λ°ν νμ μΌλ‘ νμ λ³νν μ μλ νμ μ΄λΌλ©΄ λ³κ²½ν μ μμ΅λλ€.
2. λΆλͺ¨ ν΄λμ€μ λ©μλλ³΄λ€ μ κ·Ό μ μ΄μλ₯Ό λ μ’μ λ²μλ‘ λ³κ²½ν μ μμ΅λλ€
3. λΆλͺ¨ ν΄λμ€μ λ©μλλ³΄λ€ λ ν° λ²μμ μμΈλ₯Ό μ μΈν μ μμ΅λλ€.
π μ€λ²λΌμ΄λ©κ³Ό μ€λ²λ‘λ©μ μ°¨μ΄
μ€λ²λ‘λ©(Overloding) κΈ°μ‘΄μ μλ μλ‘μ΄ μ΄λ¦μ΄ κ°μ λ©μλλ₯Ό μ μ (new) (μμκ³Ό 무κ΄)
μ€λ²λΌμ΄λ©(Overriding) μμλ°μ λ©μλμ λ΄μ©μ λ³κ²½ (Changer, modify)
μ€λ²λ‘λ©κ³Ό μ€λ²λΌμ΄λ©μ κ·Έ λ¨μ΄μ μ μ¬ν¨μΌλ‘ νΌλνκΈ° μ¬μ΄ κ²μ΄μμ. νμ§λ§, κ·Έ κ°λ μ νμ€ν λ€λ₯΄λ©°, κ·Έ μ°¨μ΄μ μ μλ κ²μ΄ μ€μνλ΅λλ€!
class Parent {
void display() { System.out.println("λΆλͺ¨ ν΄λμ€μ display() λ©μλμ
λλ€."); }
}
class Child extends Parent {
// μ€λ²λΌμ΄λ©λ display() λ©μλ
void display() { System.out.println("μμ ν΄λμ€μ display() λ©μλμ
λλ€."); }
void display(String str) { System.out.println(str); } // μ€λ²λ‘λ©λ display() λ©μλ
}
public class Inheritance06 {
public static void main(String[] args) {
Child ch = new Child();
ch.display();
ch.display("μ€λ²λ‘λ©λ display() λ©μλμ
λλ€.");
}
}
μ€ν κ²°κ³Ό
μμ ν΄λμ€μ display() λ©μλμ λλ€.
μ€λ²λ‘λ©λ display() λ©μλμ λλ€.
π λ νΌλ°μ€ νλ³ν
μΈμ€ν΄μ€ κ°μ νλ³νμΌλ‘ μ μΊμ€ν (Up Casting)κ³Ό λ€μ΄ μΊμ€ν (Down Casting)μ΄ μλ κ²μ΄μμ.
μΌλ°μ μΌλ‘ λ νΌλ°μ€ νλ³νμ μ μΊμ€ν μ μλ―Ένλ΅λλ€.
π μ μΊμ€ν (Up Casting)
μλΈ ν΄λμ€μ μΈμ€ν΄μ€λ₯Ό μνΌν΄λμ€ νμ μΌλ‘ λ³ννμ¬, μνΌν΄λμ€μμ μλΈ ν΄λμ€μ μΈμ€ν΄μ€λ₯Ό μ°Έμ‘°νλ κ²μ΄μμ.
μλ νλ³νλ κ°λ₯νλ©°, μ°Έμ‘° κ°λ₯ν μμμ΄ μΆμλμ΄ μ κ·Όν μ μλ λ©€λ²κ° μ€μ΄λ λ΅λλ€! (μμλ°μ λ©€λ²λ§ μ°Έκ³ κ°λ₯.)
π λ€μ΄ μΊμ€ν (Down Casting)
μνΌ ν΄λμ€μ μΈμ€ν΄μ€λ₯Ό μλΈ ν΄λμ€ νμ μΌλ‘ λ³ννμ¬, μλΈ ν΄λμ€μμ μνΌ ν΄λμ€μ μΈμ€ν΄μ€λ₯Ό μ°Έμ‘°νλ κ²μ΄μμ.
μλ νλ³νμ λΆκ°νλ©°, νλ³ν μ°μ°μλ₯Ό ν΅ν΄ λͺ μμ νλ³νμ μνν΄μΌ νλ κ²μ΄μμ. μ°Έμ‘° κ°λ₯ μμμ΄ νλ(μ μΊμ€ν μ ν νμ)λλ΅λλ€!
λ¨, μ‘΄μ¬νμ§ μλ μμμ λν μ°Έμ‘° μνμ± λλ¬Έμ μΌλ°μ μΌλ‘ λ€μ΄ μΊμ€ν μ λΆκ°νλ΅λλ€!
κ²°κ΅ μ μΊμ€ν μ νκ² λλ©΄ μλΈ ν΄λμ€ νμ μ λ©€λ²λ₯Ό μ¬μ©ν μ μκ² λλ©°, λ€μ΄ μΊμ€ν μΌλ‘ μ΄ λ¬Έμ λ₯Ό ν΄κ²°ν μ μλ΅λλ€. λν, λ€μ΄ μΊμ€ν μ΄ μ±λ¦½νλ €λ©΄? μ μΊμ€ν μ΄ λ¨Όμ μ ν λμΌ νλ΅λλ€!
π Class μμ 03
π μΆμ λ©μλλ₯Ό μ¬μ©νλ μ΄μ ?
π μΆμ ν΄λμ€ λ§λλ λ°©λ²?
π μΈν°νμ΄μ€μ μ¬μ©μ²?