- μΆμ ν΄λμ€
λΆλΆμ μΌλ‘ μμ±λ 'λ―Έμμ± μ€κ³λ'- μΈν°νμ΄μ€
μ무κ²λ μκ³ λ°κ·Έλ¦Όλ§ μλ 'κΈ°λ³Έ μ€κ³λ'
μμ±λ²
interface μΈν°νμ΄μ€μ΄λ¦{
public static final νμ
μμμ΄λ¦ = κ°;
public abstract λ©μλμ΄λ¦(맀κ°λ³μλͺ©λ‘);
}
μ μ½μ¬ν
- λͺ¨λ λ©€λ²λ³μλ public static final μ΄μ΄μΌ νλ©°, μ΄λ₯Ό μλ΅ν μ μλ€.
- λͺ¨λ λ©μλλ public abstract μ΄μ΄μΌ νλ©°, μ΄λ₯Ό μλ΅ν μ μλ€.
(λ¨, static λ©μλμ λν΄νΈ λ©μλλ μμΈ(JDK 1.8)λΆν°
interface Movable{
void move(int x, int y);
}
interface Attackable {
void attack(Unit u);
}
interface Fightable extends Movable, Attackable{}
μμ±λ°©λ²
class ν΄λμ€ μ΄λ¦ implements μΈν°νμ΄μ€μ΄λ¦{
//μΈν°νμ΄μ€μ μ μλ μΆμλ©μλλ₯Ό λͺ¨λ ꡬνν΄μΌ νλ€.
}
class Fighter implements Fightable{
public void move(int x, int y) { /* ꡬνλΆ */}
public void attack(Unit u) { /* ꡬνλΆ */}
}
μ΄λ, λ§μ½ μΈν°νμ΄μ€μ μΌλΆ λ©μλλ§ μμ±νλ€λ©΄
implementλ°μ ν΄λμ€λ abstractλ‘ μ μν΄μΌνλ€.
(리뷰) λ€νμ± : μμ λ°μ μμμ μ‘°μμ λͺ¨λ λ©μλ λ° λ©€λ²λ³μλ₯Ό κ°μ§κ³ μκΈ° λλ¬Έμ, λμ€μ μ°Έμ‘°ν λ μ‘°μ ν΄λμ€μ νμμΌλ‘ μ μΈν΄λ λλ€.
μμ
class : Fighter
interface : Fightable
Fighter implemetns FightableμΈ μν©μμ
μμ1 (Fighter μΈμ€ν°μ€λ₯Ό Fighteable μΈνΌνμ΄μ€ μ°Έμ‘°νμΌλ‘ μ°Έμ‘° κ°λ₯)
Fightable f = new Fighter(); Fightable f = (Fightable)new Fighter();
μμ2 (λ©μλμ 맀κ°λ³μμ νμ μΌλ‘ μΈν°νμ΄μ€ νμ μ¬μ©κ°λ₯)
void attack(Fightabel f){ //... }
μμ3 (μΈν°νμ΄μ€ νμ μ λ©μλμ 맀κ°λ³μλ‘ μ 곡ν κ²½μ°, κ·Έ μΈν°νμ΄μ€λ₯Ό μμ±ν ν΄λμ€μ μ°Έμ‘°λ³μλ₯Ό 맀κ°λ³μλ‘ μ 곡ν΄μΌνλ€)
class Fighter extends Unit implements Fightable{ public void move(int x, int y){ /*ꡬνλΆ*/ } public void attack(Fightable f){ /*ꡬνλΆ*/ } }
μμ4 (리ν΄νμ μ μΈν°νμ΄μ€νμ μ¬μ©νλ κ²λ κ°λ₯)
Fightable method(){
...
Fighter f = new Fighter();
return f;
}
μμ 4 μ΄ κ°μ‘° λΆλΆ
리ν΄νμ μ΄ μΈν°νμ΄μ€λΌλ κ²μ λ©μλκ° μΈν°νμ΄μ€λ₯Ό ꡬνν ν΄λμ€μ μΈμ€ν΄μ€λ₯Ό λ°ννλ€λ κ²μ μλ―Ένλ€. μ΄ λ¬Έμ₯μ μΈμΈ λκΉμ§ λ°λ³΅ν΄μ μ½μ΄μΌ νλ€.
- κ°λ°μκ°μ λ¨μΆμν¬ μ μλ€.
μΈν°νμ΄μ€λ‘ μ μΈλΆλ§ μμ±ν΄λλ©΄, κ·Έ κΈ°λ₯μ ꡬνμ λ΄λΉνλ λΆμμ κ·Έ κΈ°λ₯μ νμ©νλ λΆμκ°μ λμκ°λ°μ§νμ΄ κ°λ₯νλ€.
νΈμΆνλ μͺ½μμ μμ λ‘κ² μμ±κ°λ₯
- νμ€νκ° κ°λ₯νλ€.
νλ‘μ νΈμ μ¬μ©λλ κΈ°λ³Έ νμ μΈν°νμ΄μ€λ‘ μμ±ν λ€μ, κ°λ°μλ€μκ² μΈν°νμ΄μ€λ₯Ό ꡬννμ¬ νλ‘κ·Έλ¨μ μμ±νλλ‘ ν¨μΌλ‘μ¨ λ³΄λ€ μΌκ΄λκ³ μ ννλ νλ‘κ·Έλ¨μ κ°λ°μ΄ κ°λ₯νλ€.
- μλ‘ κ΄κ³μλ ν΄λμ€λ€μκ² κ΄κ³λ₯Ό λ§Ίμ΄ μ€ μ μλ€.
ν΄λμ€μ μμμ λΌμΈμ΄ νλμ§λ§ μΈν°νμ΄μ€μ μμμ μ¬λ¬κ°μ§κ° κ°λ₯νκΈ°μ ν΄λμ€κ°μ μ°κ²°κ³ 리μ μν μ ν μ μλ€.
- λ 립μ μΈ νλ‘κ·Έλλ°μ΄ κ°λ₯νλ€.
ν΄λμ€κ°μλ μ§μ μ μΈ κ΄κ³λ₯Ό μΈν°νμ΄μ€λ₯Ό μ΄μ©νμ¬ κ°μ μ μΈ κ΄κ³λ‘ λ³νμμΌ ν ν΄λμ€μ λ³κ²½μ΄ λ€λ₯Έ ν΄λμ€μ μν₯μ λ―ΈμΉμ§ μλ λ 립μ μΈ νλ‘κ·Έλλ°μ΄ κ°λ₯νλ€.
μλ, interfaceμ μΆκ°λλ μΆμ λ©μλλ μμμμ λ€μ μ μν΄μΌλμ§λ§,
default methodλ μ‘°μ ν΄λμ€μ μΆκ°λ μν λ‘ μμμμ λ°λ‘ μ μν νμμκ² νΈμμ±μ μ¦κ°μμΌ°λ€.
μμ
μλ μ½λ
interface MyInterface2 {
default void method1() {
System.out.println("method1() in MyInterface2");
}
static void staticMethod() {
System.out.println("staticMethod() in MyInterface2");
}
}
κ²°κ³Ό
default νμ νμ μ κ±° μ
interface MyInterface2 {
void method1() {
System.out.println("method1() in MyInterface2");
}
static void staticMethod() {
System.out.println("staticMethod() in MyInterface2");
}
}
κ²°κ³Ό : μλ¬ λ°μ(μΆμ λ©μλλ bodyλ₯Ό κ°μ§ μ μκΈ° λλ¬Έμ!!!)
κ²°λ‘
default or staticμΌλ‘ μ μν methodλ interfaceμμ bodyκΉμ§ κ°μ§ μ μμΌλ©°, μμ ν΄λμ€μ λ 립μ μΈ κΈ°λ₯μ μννλ€.
μμ±λ²
class A{ //μΈλΆ ν΄λμ€
classB{ //λ΄λΆ ν΄λμ€
}
}
λ΄λΆ ν΄λμ€λ μ μΈ μμΉμ λ°λΌ λ€μκ³Ό κ°μ΄ ꡬλΆλλ€.
<μ’
λ₯μ νΉμ§>
1. μΈμ€ν΄μ€ ν΄λμ€(instance class)
- μΈλΆ ν΄λμ€μ 맴λ²λ³μ μ μΈμμΉμ μ μΈ
- μ£Όλ‘ μΈλΆ ν΄λμ€μ μΈμ€ν΄μ€ λ©€λ²λ€κ³Ό κ΄λ ¨λ μμ μ μ¬μ©λ¨
- μΈλΆ ν΄λμ€μ 맴λ²λ³μ μ μΈμμΉμ μ μΈ
- μ£Όλ‘ μΈλΆ ν΄λμ€μ staticλ©€λ², νΉν static λ©μλμμ μ¬μ©λ λͺ©μ μΌλ‘ μ μΈλλ€.
- μΈλΆ ν΄λμ€μ λ©μλλ μ΄κΈ°νλΈλ μμ μ μΈ
- μ νλ μμ μμμλ§ μ¬μ©κ°λ₯
- ν΄λμ€μ μ μΈκ³Ό κ°μ²΄μ μμ±μ λμμ νλ μ΄λ¦μλ ν΄λμ€(μΌνμ©)
μ μΈκ³Ό μ μ΄μ μ κ·Όμλ λͺ¨λ 맴λ²λ³μ μ μΈκ³Ό λμΌν ννλ₯Ό λλ€.
μ΅λͺ ν΄λμ€ λ³ν μ ν΄λμ€
import java.awt.*;
import java.awt.event.*;
class Ex7_18 {
public static void main(String[] args) {
Button b = new Button("Start");
b.addActionListener(new EventHandler());
}
}
class EventHandler implements ActionListener {
public void actionPerformed(ActionEvent e) {
System.out.println("ActionEvent occurred!!!");
}
}
μ΅λͺ ν΄λμ€λ‘μΌλ‘ λ³ν ν μ½λ
import java.awt.*;
import java.awt.event.*;
class Ex7_19 {
public static void main(String[] args) {
Button b = new Button("Start");
b.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.out.println("ActionEvent occurred!!!");
}
}
);
}
}