-
[Java] μΆμ ν΄λμ€, Dispatch, final, Object ν΄λμ€Android/Java 2021. 1. 18. 23:13λ°μν
- μ΄ κΈμ "μλ° μ¨λΌμΈ μ€ν°λ"λ₯Ό 곡λΆνμ¬ μμ±ν κΈμ λλ€.
μΆμ ν΄λμ€
μΆμ ν΄λμ€λ μ¬λ¬κ°μ§ μ€μ²΄ ν΄λμ€μ 곡ν΅μ μΈ λΆλΆμ μΆμΆν΄ λ§λ€μ΄μ§ μΆμμ μΈ ν΄λμ€μ λλ€.
λνμ ν΄λμ€κ° μ€μ²΄ ν΄λμ€λΌκ³ κ°μ νλ©΄ μμΈλ, μ°μΈλ, κ³ λ €λ λ€μν λνμ ν΄λμ€κ° λ§λ€μ΄ μ§ μ μμ΅λλ€.
νμ§λ§, μ΄λ° ν΄λμ€λ€μμ μ΄λ¦, λμ΄κ°μ 곡ν΅μ μΈ μμ±κ³Ό λ©μλλ₯Ό μΆμΆν΄ μ μΈν ν΄λμ€λ₯Ό μΆμν΄λμ€λΌκ³ ν©λλ€.
μΆμ ν΄λμ€λ₯Ό μ¬μ©νλ©΄ μ μ§λ³΄μμ±μ λμ΄κ³ ν΅μΌμ±μ μ μ§ν μ μμ΅λλ€.
μ°Έμ‘°(https://limkydev.tistory.com/188)
public abstract class Student { public String name; public int age; public void printInfo(){ System.out.println("μ΄λ¦μ "+name+"μ΄κ³ λμ΄λ "+age+"μΈ μ λλ€"); } public abstract void printSchool(); }
ν΄λμ€ μμ abstractλ₯Ό λΆμ΄λ©΄ μΆμ ν΄λμ€λ₯Ό μμ±ν μ μμ΅λλ€. μΆμ ν΄λμ€μ μ κ·Ό μ μ΄μλ privateλ νμ©λμ§ μμ΅λλ€.
public class SStudent extends Student{ String school; public SStudent(String name, int age) { this.name = name; this.age = age; school = "μμΈλνκ΅"; } @Override public void printSchool() { System.out.println(school+"μ μ¬νμ€μ λλ€"); } }
public class KStudent extends Student{ String school; public KStudent(String name,int age) { this.name = name; this.age = age; school = "κ³ λ €λνκ΅"; } @Override public void printSchool() { System.out.println(school+"λ₯Ό μ‘Έμ νμμ΅λλ€"); } }
μΆμ ν΄λμ€μΈ Studentμ 곡ν΅μ μΈ λ³μ name, ageλ₯Ό κ°μ§ μ€μ²΄ ν΄λμ€ SStudentμ KStudentλ₯Ό μμ±νμμ΅λλ€.
printSchool λ©μλλ abstract ν€μλκ° μκΈ° λλ¬Έμ κ°μ μ μΌλ‘ μμλ°μ μ€μ²΄ ν΄λμ€μμ μ¬μ μλ₯Ό ν΄μΌν©λλ€.public class Main { public static void main(String[] args) { Student student = new SStudent("νκΈΈλ",21); Student student1 = new KStudent("μμ€κ³΅",25); student.printInfo(); student1.printInfo(); student.printSchool(); student1.printSchool(); } }
λ©μλ λμ€ν¨μΉ(Method Dispatch)
μ μ λμ€ν¨μΉ(Static Dispatch)
- μ»΄νμΌ μμ μ, μ»΄νμΌλ¬κ° νΉμ λ©μλλ₯Ό νΈμΆν κ²μ νμ€ν μλ κ²½μ°μ λλ€.
- μ»΄νμΌ μ μμ±λλ λ°μ΄νΈ μ½λμ μ΄ μ λ³΄κ° κ·Έλλ‘ λ¨μ μμ΅λλ€. μ¦ λ°νμ μ μ μ€νλλ λ©μλκ° λ―Έλ¦¬ κ²°μ λλ€λ κ°λ μ λλ€.
- μ€λ²λ‘λ© λ©μλμΈ κ²½μ° λ κ°μ§μ λ©μλκ° λ€λ₯΄κΈ° λλ¬Έμ μ΄ κ²½μ° Static Dispatchμ λλ€.
- μΆμ ν΄λμ€λ₯Ό μμλ°μ μ€μ²΄ ν΄λμ€μμλ μ€μ²΄ ν΄λμ€μ λ νΌλ°μ€λ‘ μ μΈνκ³ μΈμ€ν΄μ€λ₯Ό λ§λ λ€λ©΄ μ΄ μμλ Static Dispatchμ λλ€.
λμ λμ€ν¨μΉ(Dynamic Dispatch)
- λμ λμ€ν¨μΉλ μΈν°νμ΄μ€, μΆμν΄λμ€λ₯Ό μμλ°μ ν΄λμ€μμ μ¬μ μλ λ©μλλ₯Ό νΈμΆ μ μ»΄νμΌ νμμ΄ μλ λ°νμμ ν΄μλλ νλ‘μΈμ€μ λλ€.
- μΆμ ν΄λμ€λ₯Ό μμλ°μ μ€μ²΄ ν΄λμ€κ° μμ΄λ μ€μ²΄ ν΄λμ€κ° μλ μΆμν΄λμ€λ‘ λ νΌλ°μ€λ‘ μ μΈνκ³ μΈμ€ν΄μ€λ μ€μ²΄ ν΄λμ€λ‘ λ§λ λ€λ©΄ Dynamic Dispatchμ λλ€.
- μ°Έκ³ (https://defacto-standard.tistory.com/413)
public class Main { public static void main(String[] args) { Student student = new SStudent("νκΈΈλ",21); Student student1 = new KStudent("μμ€κ³΅",25); student.printInfo(); student1.printInfo(); student.printSchool(); student1.printSchool(); } }
μ κ²½μ°μμ student, student1 μΈμ€ν΄μ€λ printSchool λ©μλλ₯Ό μ¬μ©νλλΌλ μ»΄νμΌ μμ μλ λͺ¨λ₯΄κ³ λ¨μ§ μΆμν΄λμ€μ λ©μλλ₯Ό νΈμΆνλ€λ κ²λ§ μΈμ§νκ³ μμ΅λλ€.
λ°νμ μμ μμμΌ κ° μΈμ€ν΄μ€μ ν λΉλ κ°μ²΄κ° 무μμΈμ§ νμΈνκ³ λ©μλλ₯Ό μ€ννλ λ°©μμ λλ€.
final ν€μλ
final ν΄λμ€ : final ν€μλκ° ν΄λμ€ μ΄λ¦ μμ μμΌλ©΄ μμλ μ μμμ λνλ λλ€.
final λ©μλ : final ν€μλκ° λ©μλ μ΄λ¦ μμ μλ€λ©΄ μ€λ²λΌμ΄λ© ν μ μμμ λνλ λλ€.
final λ³μ : final λ³μλ₯Ό μ μΈνλ©΄ μμλ‘ λ§λ€κ³ λ³κ²½ν μ μμμ λνλ λλ€.
Object ν΄λμ€
java.langμ μλ° νλ‘κ·Έλ¨μμ κ°μ₯ λ§μ΄ μ¬μ©λλ ν¨ν€μ§λ‘ μλ° νλ‘κ·Έλ¨ λ΄μμ importλ₯Ό νμ§ μμλ μλμΌλ‘ ν¬ν¨λ©λλ€.
μ΄ ν¨ν€μ§ μμ λ€μ΄ μλ java.lang.Object ν΄λμ€λ μλ° APIμ λͺ¨λ ν΄λμ€μ μ¬μ©μκ° μ μν λͺ¨λ ν΄λμ€μ μ΅μμ ν΄λμ€μ λλ€.
java.lang.Objectλ μλμΌλ‘ μμλ°κ² λμ΄ Object ν΄λμ€μ μλ λͺ¨λ λ©μλμ λ³μλ₯Ό μ¬μ©ν μ μμ΅λλ€.
μ°Έμ‘°(https://docs.oracle.com/javase/7/docs/api/java/lang/Object.html)
λ°μν'Android > Java' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[Java] μλ° μΈν°νμ΄μ€(Interface) μ¬μ© (0) 2021.01.24 [Java] μλ° ν¨ν€μ§λ? (0) 2021.01.19 [Java] μλ° ν΄λμ€ μμ, λ©μλ μ€λ²λΌμ΄λ© (0) 2021.01.18 [Java] μλ° ν΄λμ€, κ°μ²΄ (0) 2021.01.18 [Java] 쑰건문(if, else, else if), λ°λ³΅λ¬Έ(for, while) (0) 2021.01.15