π μ°Έκ³ ν μ±
- κΈ°λ³Έμ μΈ κ°λ μ μ 리νκ³ μΆκ°μ μΌλ‘ κΆκΈν κ²λ€μ μ 리νμ΅λλ€ -
π₯ π₯ π₯
βοΈ μ΅λͺ μ΄λ ν΄λμ€_ 436p
• μ΅λͺ μ΄λ ν΄λμ€
: μ΄λ¦μ μ μ μλ μ΄λ ν΄λμ€λ₯Ό μλ―Ένλ©°, μΈμ€ν΄μ€ μ΅λͺ ν΄λμ€μ μ§μ μ΅λͺ μ΄λ ν΄λμ€κ° μλ€.
• μ΄λν΄λμ€μ μ΅λͺ μ΄λ ν΄λμ€ λΉκ΅νκΈ°.
interface MyInterface {
public abstract void myMethod1();
}
class OuterClass {
MyInterface inner = new InnerClass();
void myMethod2(){
inner.myMethod1();
}
class InnerClass implements MyInterface {
public void myMethod1() {
System.out.println("μΈμ€ν΄μ€ μ΄λ ν΄λμ€!");
}
}
}
public class PracticeInnerClass {
public static void main(String[] args) {
OuterClass outer = new OuterClass();
outer.myMethod2();
}
}
μμ μ½λλ μ΄λν΄λμ€μμ μΈν°νμ΄μ€λ₯Ό μμ λ°μ μΈν°νμ΄μ€ myMethod1μ ꡬνν μ½λμ΄λ€. μΆλ ₯λλ μ½λλ 'myMethod1!'μ΄ μΆλ ₯λ κ²μ΄λ€. μμ μ½λκ° μ΅λͺ μ΄λ ν΄λμ€ μ½λμ μ΄λ»κ² λ€λ₯Έμ§ λΉκ΅νλ©΄ λ μ’μ κ² κ°λ€.
interface MyInterface {
public abstract void myMethod1();
}
class OuterClass {
MyInterface myinter = new MyInterface() {
public void myMethod1() {
System.out.println("μ΅λͺ
μ΄λ ν΄λμ€");
}
};
void myMethod2() {
myinter.myMethod1();
}
}
public class PracticeAnonymousClass {
public static void main(String[] args) {
OuterClass outer = new OuterClass();
outer.myMethod2();
}
}
μ΅λͺ μ΄λ ν΄λμ€λ μΈν°νμ΄μ€μΈ MyInterfaceλ₯Ό μ°Έμ‘° λ³μ νμ μΌλ‘ λ°μ μμ±μλ₯Ό νΈμΆνλ€. κ·Έλ¦¬κ³ κ·Έ μμ±μ μ€κ΄νΈ μμ μΈν°νμ΄μ€μ μΆμ λ©μλμΈ myMethod1λ₯Ό ꡬννλ€. κ·Έλ¬λ©΄ μ»΄νμΌλ¬κ° μμμ MyInterfaceλ₯Ό μμλ°μ ν΄λμ€λ₯Ό λ΄λΆμ μΌλ‘ μμ±ν ν(μ΅λͺ ν΄λμ€) ν΄λΉ ν΄λμ€λ‘ κ°μ²΄λ₯Ό μμ±ν΄ μ°Έμ‘° λ³μμ λμ νλ€.
μ΅λͺ μ΄λ ν΄λμ€λ₯Ό μ¬μ©νλ©΄μ μ£Όμν΄μΌν κ²μ νμ λΆλͺ¨ νμ μΌλ‘λ§ μ μΈν μ μμΌλ©°, λΆλͺ¨νμ μΌλ‘ μ μΈλμκΈ°μ λΆλͺ¨μκ² μλ λ©μλλ νΈμΆν μ μλ€.
Q. κ·Έλ°λ° μΈν°νμ΄μ€λ κ°μ²΄λ₯Ό μμ±ν μ μλλ°, μ΅λͺ μ΄λ ν΄λμ€λ μ΄λ»κ² μΈν°νμ΄μ€ κ°μ²΄λ₯Ό μμ±νκ±ΈκΉ?
A. μμ μ€λͺ κ³Ό κ°λ€. ν΄λΉ μ½λκ° μ€λ₯ μμ΄ μ€νλλ μ΄μ λ, μΈν°νμ΄μ€ μ체λ₯Ό μΈμ€ν΄μ€νν κ²μ΄ μλλΌ, μ»΄νμΌλ¬κ° μΈν°νμ΄μ€λ₯Ό ꡬνν μ΅λͺ ν΄λμ€λ₯Ό μλμΌλ‘ μμ±ν΄μ κ·Έ μΈμ€ν΄μ€λ₯Ό μμ±νκΈ° λλ¬Έμ΄λ€. μ½κ² λ§νλ©΄, μ°λ¦¬κ° μ½λμμ μΈν°νμ΄μ€λ₯Ό μ§μ μ¬μ©νλ κ²μ²λΌ 보μ΄μ§λ§, μ€μ λ‘λ μΈν°νμ΄μ€λ₯Ό ꡬνν μ΄λ¦ μλ ν΄λμ€κ° λ΄λΆμμ μμ±λμ΄ κ·Έ κ°μ²΄κ° μΈν°νμ΄μ€ νμ λ³μμ μ μ₯λμκΈ° λλ¬Έμ κ°λ₯ν κ²μ΄λ€.
Q. μ± μ 보면 'λ©μλλ₯Ό νΈμΆμ ν μ μμΌλ―λ‘ μ μ΄μ λ§λ€ νμκ° μμκΉ? κ·Έλ μ§ μλ€. μ€λ²λΌμ΄λ© λ©μλ λ΄λΆμμλ νΈμΆν μ μμΌλ―λ‘ μμ±ν΄μΌν λ΄μ©μ΄ λ§μ λ λ©μλλ₯Ό λΆλ¦¬ν΄ μμ±νλ κ²μ΄ ν¨μ¨μ μ΄λ©°, μ΄λ μ΅λͺ μ΄λ ν΄λμ€ μ μμ λ΄λΆμ μΆκ° λ©μλλ₯Ό μ μν΄ μ¬μ©νλ κ²μ΄ νΈν μ μλ€.'λΌκ³ λμ΄μλ€. μ΄κ² λ¬΄μ¨ λ§μΌκΉ?
A. λ¬Έμ₯μ μ°¨κ·Όμ°¨κ·Ό μ΄ν΄λ³΄κ² λ€. μ€λ²λΌμ΄λ© λ©μλ λ΄λΆλ μμ μ½λμμλ OuterClassμ μλ myMethod1μ μλ―Ένλ€. ν΄λΉ λ©μλλ μΈν°νμ΄μ€μ μλ λ©μλλ₯Ό μ€λ²λΌμ΄λ© ν κ²μ΄λ€. μμμ μ€λͺ νκΈΈ μ΅λͺ μ΄λ ν΄λμ€λ νμ λΆλͺ¨ νμ μΌλ‘λ§ μ μΈλκΈ° λλ¬Έμ λΆλͺ¨μκ² μλ λ©μλλ νΈμΆν μ μλ€κ³ νμ§λ§ λ§μ½ μ΄λ€ κΈ°λ₯μ myMethod1 μμμ μ€νλλ κ²μΌλ‘ μΆ©λΆνλ€λ©΄ κ΅³μ΄ μΈλΆμ λ§λ€μ§ λ§κ³ myMethod1μ μνλ λ©μλλ₯Ό ꡬννμ¬, μλ μλ λ©μλμ λΆλ¦¬ν΄ μμ±νλ©΄ λλ€κ³ νλ κ²μ΄λ€. μ½κ² ν μ€λ‘ μ 리νμλ©΄ μλ‘μ΄ λ©μλλ₯Ό λ§λ€κ³ μΆμ κ²½μ° λΆλͺ¨μκ² μλ λ©μλμ¬λ, μ€λ²λΌμ΄λ© λ©μλ λ΄λΆμ λ§λ€λ©΄ λλ€λΌκ³ νλ κ²μ΄λ€.
βοΈ μ΅λͺ μ΄λ ν΄λμ€λ₯Ό νμ©ν μΈν°νμ΄μ€ νμ μ μ λ ₯λ§€κ°λ³μ μ λ¬_ 439p
• μΈν°νμ΄μ€ νμ μ μ λ ₯λ§€κ°λ³μ μ λ¬ λ°©λ²_ μ½λ: μ΅λͺ μ΄λν΄λμ€ + μ°Έμ‘°λ³μνμ©X
interface Messenger {
void send(String message);
}
class MessageProcessor {
void process(Messenger messenger) {
messenger.send("μ΅λͺ
μ΄λ ν΄λμ€ λ©μμ§ μ μ‘!");
}
}
public class Main {
public static void main(String[] args) {
MessageProcessor processor = new MessageProcessor();
// μ°Έμ‘° λ³μ μμ΄ μ΅λͺ
μ΄λ ν΄λμ€λ₯Ό μ§μ μΈμλ‘ μ λ¬
processor.process(new Messenger() {
public void send(String message) {
System.out.println("λ³΄λΈ λ©μμ§: " + message);
}
});
}
}
μΈν°νμ΄μ€ νμ μ μ λ ₯ λ§€κ°λ³μλ₯Ό μ λ¬νλ λ°©λ²μ μ΄ 4κ°μ§κ° μλ€. μμ ν΄λμ€λ₯Ό μ§μ μμ±νμ¬ μ°Έμ‘° λ³μλͺ μ νμ©νλ λ°©λ²κ³Ό μ°Έμ‘° λ³μλͺ μμ΄ νμ©νλ λ°©λ²μ΄ μλ€. κ·Έλ¦¬κ³ μ΅λͺ μ΄λ ν΄λμ€λ₯Ό νμ©νλλ° μ΄λ μ°Έμ‘° λ³μλͺ μ νμ©νλ λ°©λ²κ³Ό μ°Έμ‘° λ³μλͺ μ νμ©νμ§ μλ λ°©λ²μ΄ μλ€.
κ°μ²΄ μ°Έμ‘° λ³μμ μν μ κ°μ²΄μ μ°Έμ’κ°μ μ λ¬νκΈ° μν¨μ΄λ€. λ¨μν κ°μ²΄μ μ°Έμ’κ°λ§μ μ λ¬νκ³ μ νλ€λ©΄ κ΅³μ΄ μ°Έμ‘° λ³μλ₯Ό μ¬μ©νμ§ μκ³ λ©μλ μ λ ₯λ§€κ°λ³μ μμΉμμ λ°λ‘ κ°μ²΄λ₯Ό μμ±νλ©΄ μμ±λ κ°μ²΄μ μ°Έμ’κ°μ΄ λ©μλλ‘ μ λ¬λ κ²μ΄λ€.
βοΈ μ΄λ μΈν°νμ΄μ€_ 444p
• μ μ μ΄λ μΈν°νμ΄μ€
: ν΄λμ€ λ΄λΆμ μΈν°νμ΄μ€λ₯Ό μ μνμ¬ ν΄λΉ ν΄λμ€μ μμ‘΄μ μΈ κΈ°λ₯μ μννλ€.
// ꡬν ν΄λμ€
class Outer {
interface MyInterface {
void hello();
}
}
public class Main {
public static void main(String[] args) {
Outer.MyInterface obj1 = new Outer.MyInterface() {
public void hello() {
System.out.println("μ΅λͺ
ν΄λμ€!!");
}
};
obj1.hello();
class Impl implements Outer.MyInterface {
public void hello() {
System.out.println("ꡬν ν΄λμ€!!");
}
}
Outer.MyInterface obj2 = new Impl();
obj2.hello();
}
}
μ΄λ μΈν°νμ΄μ€λ 무쑰건 μ μ μ΄λ μΈν°νμ΄μ€λ§ μ‘΄μ¬ν μ μλ€. λ§μ½ static μ μ΄μλ₯Ό μλ΅νλ©΄, μ»΄νμΌλ¬κ° μλμΌλ‘ μΆκ°ν΄μ€λ€. μμ μ½λμμ μ»΄νμΌμ νκ² λλ©΄ λ΄λΆ μΈν°νμ΄μ€μ λ°μ΄νΈ μ½λλ 'Outer$MyInterface.class'λ‘ νμ±λλ€. μμ°ν° ν΄λμ€ λ΄μ μν΄ μλ μΈν°νμ΄μ€λ λΉμ°νκ² μΈν°νμ΄μ€λ―λ‘ μ§μ κ°μ²΄ μμ±μ λΆκ°νλ€. κ·Έλμ κ°μ²΄ μμ±μ νκΈ° μν΄ λ€λ₯Έ ν΄λμ€λ‘λΆν° μμμ λ°κ±°λ, μ΅λͺ μ΄λ ν΄λμ€λ₯Ό νμ©ν΄μΌνλ€.
μμ μ½λμμ λκ°μ§ λͺ¨λλ₯Ό λ°μν μ½λλ‘, obj1μ΄λΌλ κ°μ²΄λ₯Ό μμ±ν λ°©λ² κ·Έλ¦¬κ³ Impl ν΄λμ€λ₯Ό λ§λ€μ΄ Outer.MyInterfaceλ₯Ό μμν λ°©λ²μ 보μ¬μ£Όκ³ μλ€.
• μ΄λ²€νΈ μ²λ¦¬ λ°©λ²
class Button {
// μΈν°νμ΄μ€ OnClickListenerνμ
μ κ°μ§λ ocl λ³μμΈ νλ
OnClickListner ocl;
// OnClickListenerνμ
μ ocl λ³μλ₯Ό μΈμλ‘ λ°μ
// Button ν΄λμ€μ ocl λ³μλ₯Ό μ¬μ μνλ setOnClickListener λ©μλ
void setOnClickListener(OnClickListener ocl) {
this.ocl = ocl;
}
// ν΄λμ€ λ΄λΆμ μλ μΈν°νμ΄μ€
// μΆμ λ©μλ onClickμ΄ μμμ μ μ
interface OnclickListener {
public abstract void onClick();
}
void click() {
ocl.onClick();
}
}
public static void main(String[] ar) {
// Button ν΄λμ€μ κ°μ²΄μΈ button1
Button button1 = new Button();
// Button ν΄λμ€μ λ΄λΆ μΈν°νμ΄μ€λ₯Ό μ΅λͺ
ν΄λμ€λ‘ ꡬν
button1.setOnClickListener(new Button.OnClicklistener() {
@Override
public void onClick() {
System.out.println("κ°λ°μ 1. μμ
μ¬μ");
}
});
button1.click();
}
mainμμ Button ν΄λμ€μ κ°μ²΄μΈ button1μ΄ λ§λ€μ΄μ§κ³ , μ΄ κ°μ²΄λ OnClickListener νμ μ ocl νλλ₯Ό κ°μ§κ³ μλ€. OnClickListenerμμ onClick λ©μλλ₯Ό ꡬννκ³ μμΌλ©° setOnclickListenerλ μ΄ κ°μ²΄λ₯Ό λ°μμ λ²νΌ μμ μλ ocl νλμ μ μ₯νλ€. this.ocl = oclλ‘ κ°λ°μκ° μ λ¬ν λμμ λ²νΌμ΄ κΈ°μ΅νκ² λλ€.
button1.click();λ‘ λ²νΌμ΄ ν΄λ¦λλ©΄, onClick λ©μλκ° νΈμΆλμ΄ "κ°λ°μ 1. μμ μ¬μ"μ΄ μΆλ ₯λλ€.
'π Java > μλ°μμ μ 볡' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[Java] μμΈμ²λ¦¬, μμΈμ κ°, μ¬μ©μ μ μ μμΈ ν΄λμ€ (0) | 2025.05.14 |
---|---|
[Java] μΌλ° μμΈμ μ€ν μμΈ (0) | 2025.05.08 |
[Java] μ΄λ ν΄λμ€ (0) | 2025.04.29 |
[Java] μΆμν΄λμ€μ μΈν°νμ΄μ€ (1) | 2025.04.28 |
[Java] final, static, abstract μ μ΄μ (2) | 2025.02.05 |