πToday...
βμ€λμ TIL(Today I Learn)
λ€νμ±?
λ€νμ±(Polymorphism)μ νλμ κ°μ²΄κ° μ¬λ¬κ°μ§ ννλ₯Ό κ°μ§μμλ μ±μ§μ μλ―Ένλ€. μ¦ μλ°μμμ λ€νμ±μ΄λ ννμ μ μ°Έμ‘°λ³μλ₯Ό ν΅ν΄ μ¬λ¬ νμ μ κ°μ²΄λ₯Ό μ°Έμ‘°ν μμλλ‘ λ§λ κ²μ μλ―Ένλ€. μμ ν΄λμ€ νμ μ μ°Έμ‘°λ³μλ₯Ό ν΅ν΄μ νμ ν΄λμ€ κ°μ²΄λ₯Ό μ°Έμ‘°ν μμλλ‘ νμ©νκ² μ΄λΌκ³ λ ν μμλ€.
μμ ν΄λμ€λ₯Ό μ°Έμ‘°λ³μμ νμ μΌλ‘ μ§μ νλ©΄, μ°Έμ‘°λ³μκ° μ¬μ©ν μμλ λ©€λ²μ κ°μλ μμν΄λμ€μ λ©€λ²μκ° λλ€.
public class FriendTest {
public static void main(String[] args) {
Friend friend = new Friend(); // κ°μ²΄ νμ
κ³Ό μ°Έμ‘° λ³μ νμ
μ μΌμΉ -> κ°λ₯
BoyFriend boyfriend = new BoyFriend();
Friend girlfriend = new GirlFriend(); // κ°μ²΄ νμ
κ³Ό μ°Έμ‘° λ³μ νμ
μ λΆμΌμΉ -> κ°λ₯
// GirlFriend friend1 = new Friend(); -> νμν΄λμ€ νμ
μΌλ‘ μμν΄λμ€ κ°μ²΄ μ°Έμ‘° -> λΆκ°λ₯
friend.friendInfo();
boyfriend.friendInfo();
girlfriend.friendInfo();
}
}
νμ λ³ν λ° μ¬ν
μ°Έμ‘°λ³μμ νμ λ³νμ μ¬μ©ν μμλ λ©€λ²μ κ°μλ₯Ό μ‘°μ νλκ²μ μλ―Ένλ€. νμ λ³νμ μν΄μλ 3κ°μ§ 쑰건μ μΆ©μ‘±ν΄μΌ νλ€.
- μλ‘ μμ κ΄κ³μ μλ μμν΄λμ€ - νμ ν΄λμ€ μ¬μ΄μμλ§ νμ λ³νμ΄ κ°λ₯
- νμν΄λμ€ => μμν΄λμ€ νμ μΌλ‘ νμ λ³ν(μ μΊμ€ν )μ νλ³ν μ°μ°μ μλ΅ κ°λ₯
- μμν΄λμ€ => νμν΄λμ€ νμ μΌλ‘ νμ λ³ν(λ€μ΄μΊμ€ν )μ νλ³ν μ°μ°μ(κ΄νΈ) λ°λμ λͺ μ
+ λ€μ΄μΊμ€ν μ μ μΊμ€ν λμ΄μλ μ°Έμ‘°λ³μμ νν΄μλ§ κ°λ₯
public class VehicleTest {
public static void main(String[] args) {
Car car = new Car();
Vehicle vehicle = (Vehicle) car; // μμ ν΄λμ€ Vehicle νμ
μΌλ‘ λ³ν(μλ΅ κ°λ₯)
Car car2 = (Car) vehicle; // νμ ν΄λμ€ Carνμ
μΌλ‘ λ³ν(μλ΅ λΆκ°λ₯)
MotorBike motorBike = (MotorBike) car; // μμ κ΄κ³κ° μλλ―λ‘ νμ
λ³ν λΆκ° -> μλ¬λ°μ
}
}
class Vehicle {
}
class Car extends Vehicle {
}
}
class MotorBike extends Vehicle {
}
}
# instanceof μ°μ°μ
instanceof μ°μ°μλ νμ λ³ν(μ /λ€μ΄μΊμ€ν )μ΄ κ°λ₯νμ§ μ¬λΆλ₯Ό booleanνμ μΌλ‘ νμΈν μμλ μμμ΄λ€.
μ°Έμ‘°λ³μ instanceof type
>> κ°μ²΄μ νμ μ νμΈνκΈ° μ΄λ €μ΄ μν©μμ νλ°ν μ¬λΆλ₯Ό νμΈνμ¬ μλ¬λ₯Ό μ΅μννλ€.
>> ifλ¬Έκ³Ό ν¨κ» νμ¬ ν¨μ¨μ λΌμμλ€.
μΆμν / μΆμν΄λμ€
μΆμν(Abstracet)λ κΈ°μ‘΄μ ν΄λμ€λ€μ 곡ν΅μ μΈ μμλ₯Ό λ½μμ μμν΄λμ€λ₯Ό λ§λ€μ΄ λ΄λκ²μ κ°λ¦¬ν¨λ€.
μ΄λ¬ν μΆμνλ₯Ό λνλ΄λ μλ° λ¬Έλ²μ μΆμν΄λμ€λΌκ³ νλ€. abstract μ μ΄μλ₯Ό μ΄μ©ν΄μ λνλ΄λ©°, λ©μλμμ λΆμΌλ©΄ μΆμλ©μλ, ν΄λμ€μμ λΆμΌλ©΄ μΆμ ν΄λμ€ λΌκ³ λΆλ₯Έλ€. λν μ΄λ€ ν΄λμ€μ μΆμλ©μλκ° ν¬ν¨λμ΄μμΌλ©΄ ν΄λΉν΄λμ€λ μλμΌλ‘ μΆμ ν΄λμ€κ° λλ€.
abstract class AbstractExample { // μΆμ λ©μλκ° μ΅μ νλ μ΄μ ν¬ν¨λΌμλ μΆμ ν΄λμ€
abstract void start(); // λ©μλ λ°λκ° μλ μΆμλ©μλ
}
보면 μΆμλ©μλλ λ―Έμμ±λ λ©μλμ΄κ³ , μ΄λ₯Ό ν¬ν¨ν ν΄λμ€λ λ―Έμμ±λ ν΄λμ€μ΄λ€. μΆμν΄λμ€λ λ©μλλ°λκ° μμ±λκΈ° μ κ°μ§λ κ°μ²΄μμ±μ΄ λΆκ°λ₯νλ€. => μμ±μ μ€λ²λΌμ΄λ©μ ν΅ν΄ μμλ°μ μΆμ λ©μλμ λ΄μ©μ λ°λμ ꡬννμ¬μΌνλ€.
abstract class Animal {
public String kind;
public abstract void sound();
}
class Dog extends Animal { // Animal ν΄λμ€λ‘λΆν° μμ
public Dog() {
this.kind = "ν¬μ λ₯";
}
public void sound() { // λ©μλ μ€λ²λΌμ΄λ© -> ꡬνλΆ μμ±(κ°μ λλ€)
System.out.println("λ©λ©");
}
}
class Cat extends Animal { // Animal ν΄λμ€λ‘λΆν° μμ
public Cat() {
this.kind = "ν¬μ λ₯";
}
public void sound() { // λ©μλ μ€λ²λΌμ΄λ© -> ꡬνλΆ μμ±(κ°μ λλ€)
System.out.println("μΌμΉ");
}
}
class DogExample {
public static void main(String[] args) throws Exception {
Animal dog = new Dog();
dog.sound();
Cat cat = new Cat();
cat.sound();
}
}
μΆμν΄λμ€λ₯Ό μ¬μ©νμ¬ μμλ°λ νμν΄λμ€μμ μ€λ²λΌμ΄λ©μ νκ² λλ©΄ κ°κ° μν©μ λ§λ λ©μλμ ꡬνμ΄ κ°λ₯ν΄μ§λ€.
# final
finalν€μλλ ν΄λμ€,λ©μλ,λ³μ μμ μ¬μ©λκ³ λμ΄μ ν΄λΉ λμμ λ³κ²½μ΄ λΆκ°λ₯νκ±°λ νμ₯λμ§ μλ μ±μ§μ λ€λ€.
μμΉ | μλ―Έ |
ν΄λμ€ | λ³κ²½ λλ νμ₯ λΆκ°λ₯ν ν΄λμ€, μμ λΆκ° |
λ©μλ | μ€λ²λΌμ΄λ© λΆκ° |
λ³μ | κ° λ³κ²½μ΄ λΆκ°ν μμ |
μΈν°νμ΄μ€?
μΈν°νμ΄μ€(interface)λ μΆμνμ κ°μ₯ ν΅μ¬μ μΈ μν μ λ΄λΉνλ€. μΈν°νμ΄μ€λ λ€λ₯Έ λμ μ¬μ΄λ₯Ό μ°κ²°νλ€λ μλ―Έλ₯Ό κ°μ§κ³ μλ€. μΈν°νμ΄μ€λ κΈ°λ³Έμ μΌλ‘ μΆμλ©μλμ μμλ§μ λ©€λ²λ‘ κ°μ§μμλ€. (μλ°8 μ΄νμ default/static λ©μλλ₯Ό μΈν°νμ΄μ€μμ μ¬μ©ν μμλλ‘ νμ©)
public interface InterfaceEx {
public static final int rock = 1; // μΈν°νμ΄μ€ μΈμ€ν΄μ€ λ³μ μ μ
final int scissors = 2; // public static μλ΅
static int paper = 3; // public & final μλ΅
public abstract String getPlayingNum();
void call() //public abstract μλ΅
}
μΈν°νμ΄μ€λ μΌλ° ν΄λμ€μ λ€λ₯΄κ² λ΄λΆμ λͺ¨λ νλκ° public static finalλ‘ μ μλλ€. κ·Έλ¦¬κ³ λͺ¨λ λ©μλλ public abstractλ‘ μ μλλ€. λ§μ½ μλ΅μ΄ λλ€λ©΄ μ»΄νμΌλ¬κ° μλμΌλ‘ μΆκ°νκ² λλ€.
//μΈν°νμ΄μ€ ꡬν
class ν΄λμ€λͺ
implements μΈν°νμ΄μ€λͺ
{
... // μΈν°νμ΄μ€μ μ μλ λͺ¨λ μΆμλ©μλ ꡬν
}
//μΈν°νμ΄μ€ λ€μ€κ΅¬ν
class ExampleClass implements ExampleInterface1, ExampleInterface2, ExampleInterface3 {
... μλ΅ ...
}
//μμ & μΈν°νμ΄μ€ ꡬν
class Dog extends Animal implements Pet { // Animal ν΄λμ€ μμ & Pet μΈν°νμ΄μ€ ꡬν
public void cry(){
System.out.println("λ©λ©!");
}
DI(Dependency Injection)
DI μ¦ μμ‘΄μ± μ£Όμ μ κ°μ²΄κ° μμ μ΄ μμ‘΄ν κ°μ²΄λ₯Ό μ€μ€λ‘ λ§λ€λλ‘ νλκ²μ΄ μλλΌ μΈλΆμμ μ£Όμ μ ν΄μ£Όλ κ²μ μλ―Ένλ€.
=> μ’λ κ³΅λΆ νμν¨, λ²κ±°νΈ μμ±νκ³ λ³΅μ΅ νμ
πνΌμμ ν΄κ²°νκΈ°
λ΄μ©