π μ°Έκ³ ν μ±
- κΈ°λ³Έμ μΈ κ°λ μ μ 리νκ³ μΆκ°μ μΌλ‘ κΆκΈν κ²λ€μ μ 리νμ΅λλ€ -
π₯ π₯ π₯
βοΈ μΆμν΄λμ€_ 395p
• μΆμν΄λμ€
: λ©μλ λ³Έμ±κ° μμ±λμ§ μμ λ―Έμμ± λ©μλλ‘, λ©μλμ κΈ°λ₯μ μ μνλ μ€κ΄νΈ μμ²΄κ° μμΌλ©° λͺ λ Ήμ΄μ λμ μ리λ μΈλ―Έν΄λ‘ μΌλ‘ λλλ€.
abstract class A {
abstract void abc();
void bcd() {
}
}
μΆμ λ©μλλ₯Ό 1κ° μ΄μ ν¬ν¨νκ³ μλ ν΄λμ€λ λ°λμ μΆμ ν΄λμ€λ‘ μ μν΄μΌνλ€. μΌλ°μ μΌλ‘ μΆμ ν΄λμ€λ λ©μλμ κΈ°λ₯μ΄ μ μλμ΄ μμ§ μλ λ―Έμμ± λ©μλμΈ μ€κ΄νΈκ° μλ ννμ λ©μλκ° 1κ° μ΄μ μ‘΄μ¬νλ€λ μλ―Έμ΄λ€. μΆμ ν΄λμ€μ νμμ class ν€μλ μμ abstractλ₯Ό λΆμ¬ νννλ€.
μΆμ ν΄λμ€μ μ£Όμν΄μΌν μ μ, μ€κ΄νΈμ μ¬λΆμ΄λ€. λ§μΌ μ€κ΄νΈκ° μλ μνλ‘ μ½λλ₯Ό μμ±νλ©΄ κ·Έ λ©μλλ 'μλ¬΄λ° κΈ°λ₯μ νμ§ μλ μμ±λ λ©μλ'λΌκ³ κΈ°λ₯μ λͺ νν μ μνκ² λλ€.
μΆμ ν΄λμ€λ λ΄λΆμ λ―Έμμ± λ©μλλ₯Ό μ§λκ³ μκΈ° λλ¬Έμ κ°μ²΄λ₯Ό μ§μ μμ±ν μ μλ€. κ·Έ μ΄μ λ ν λ©λͺ¨λ¦¬μ νΉμ± λλ¬Έμ΄λ€. ν λ©λͺ¨λ¦¬λ κ°μ΄ λΉμ΄μλ νλλ₯Ό μ μ₯ν μ μλ νΉμ±μ μ§λ λλ°, μ΄λ‘ μΈν΄ λ―Έμμ±λ λ©μλλ₯Ό κ°μ§ μΆμ ν΄λμ€λ A a = new A( )μ κ°μ΄ μμ±μ νΈμΆ μ체λ₯Ό ν μ μλ€.
• μΆμ ν΄λμ€ κ°μ²΄ μμ±νλ λ°©λ² : 1. μΆμ ν΄λμ€λ₯Ό μμν μΌλ° ν΄λμ€
abstract class A {
abstract void abc();
}
class B extends A {
void aaa() {
System.out.println("μμ ν΄λμ€λ‘ μΆμ ν΄λμ€ μ΄μ©νκΈ°");
}
}
public class AbstractClass_1 {
public static void main(String[] args) {
A b1 = new B();
A b2 = new B();
b1.aaa();
b2.aaa();
}
}
Bλ μΆμ ν΄λμ€λ₯Ό μμνλ€. Bκ° μΌλ° ν΄λμ€λ‘ μν μ νκ³ μΆλ€λ©΄, μΆμ ν΄λμ€λ₯Ό μμνκΈ°μ μΆμ λ©μλμ ꡬ체μ μΌλ‘ μ΄λ€ μν μ ν κ²μΈμ§ μ μν΄μΌνλ€. λ§μ½ κ°μ²΄λ₯Ό μ¬λ¬κ° λ§λ€μ΄μΌνλ μν©μ΄λΌλ©΄ μμ μ½λμ κ°μ΄ μμ ν΄λμ€λ₯Ό μ§μ μ μνλ κ²μ΄ λ μ μ νλ€.
• μΆμ ν΄λμ€ κ°μ²΄ μμ±νλ λ°©λ² : 2. μ΄λν΄λμ€
abstract class A {
abstract void abc();
}
public class AbstractClass {
public static main(String[] args) {
A a1 = new A();
void abc() {
System.out.println("μ΄λν΄λμ€λ‘ μ΄μ©νκΈ°");
}
};
a1.aaa();
}
μ΄λν΄λμ€λ₯Ό μ΄μ©νλ κ²μ, A( )λ μ»΄νμΌλ¬κ° ν΄λμ€ Aλ₯Ό μμλ°μ aaa( ) λ©μλλ₯Ό μ€λ²λΌμ΄λ©ν μ΅λͺ ν΄λμ€μ μμ±μλ₯Ό νΈμΆνλ κ²μ΄λ€. μ΄ κ²½μ° ν΄λμ€ Aμ μμ±μλ₯Ό νΈμΆνλ κ²μ΄ μλλ€. μ΅λͺ μ΄λ ν΄λμ€λ₯Ό νμ©ν μ₯μ μΌλ‘λ μ½λκ° κ°κ²°ν΄ 보μΈλ€λ μ μ΄ μμ§λ§, μμν κ²½μ°μ λ¬λ¦¬ κ°μ²΄λ₯Ό μ¬λ¬κ° λ§λ€κΈ°μ μ ν©νμ§ μλ€.
βοΈ μΈν°νμ΄μ€_ 402p
• μΈν°νμ΄μ€
: μλ‘ λ€λ₯Έ μμ€ν μ΄λ μ₯μΉ, λλ μ¬μ©μ κ°μ μ 보 κ΅νμ μν μ μ μ΄λ κ²½κ³λ©΄
interface abc {
public static final int a = 1;
public abstract void abc();
}
μΈν°νμ΄μ€ λ΄λΆμ λͺ¨λ νλλ public static finalλ‘ μ μλμ΄μκ³ , staticκ³Ό default λ©μλ μ΄μΈμ λͺ¨λ λ©μλλ public abstractλ‘ μ μλμ΄μλ€. ν΄λμ€λ classλΌκ³ μ΄λ¦ μμ λΆμ¬μ£Όμλ€λ©΄, μΈν°νμ΄μ€λ interfaceμμ μ΄λ¦ μμ λͺ μνλ€. μ μ΄μλ₯Ό λͺ μμ μΌλ‘ μ μ§ μμμ΄λ public static finalκ³Ό public abstractλ μλμΌλ‘ μΆκ°λλ€.
Q. μΈν°νμ΄μ€ λ΄ νλμ staticκ³Ό finalμ λΆμ΄λ μ΄μ λ?
A. μΈν°νμ΄μ€λ κΈ°λ₯μ μ½μμ μ μνλ κ³³μΌλ‘ "μ΄λ€ κΈ°λ₯μ μ 곡νκ² λ€."λΌλ λ©μλ μ΄λ¦κ³Ό κ·μ½λ§ κ°μ§κ³ μλ€. μΈν°νμ΄μ€λ νμμ λν μ½μλ§ νμ§, λ³μμ λν΄μλ κΈ°λ³Έμ μΌλ‘ μ μνμ§ μκΈ° λλ¬Έμ μΈν°νμ΄μ€ λ΄μ λ³μλ κΈ°λ³Έμ μΌλ‘ λ³νμ§ μλ μμμ¬μΌλ§ νλ€. μ¬κΈ°μ staticμ ν΄λμ€(μΈν°νμ΄μ€) μ체μ λΆμ΄μλ κ²μΌλ‘ κ°μ²΄ μμ± μμ΄ μ κ·Ό κ°λ₯νλ©°, finalμ ν λ² μ μν κ°μ λ³κ²½λμ§ μλ νΉμ±μ λΆμ¬ν΄μ€λ€.
μΈν°νμ΄μ€λ μΈμ€ν΄μ€λ₯Ό λ§λ€ μ μκΈ° λλ¬Έμ λ³μμ staticμ λΆμ¬ μΈν°νμ΄μ€ λ΄μ μ μ₯λλλ‘ νμ¬ μ κ·Όκ°λ₯νκ² λ§λ€κ³ , μΈν°νμ΄μ€λ λ©μλλ₯Ό κ΄λ¦¬νλ κ³³μ΄κΈ° λλ¬Έμ λ³κ²½λλ λ³μμ μν΄ λ©μλμ λ³λμ΄ μκΈ°λ κ²μ λ°©μ§ν΄μΌν¨μΌλ‘ finalμ λΆμΈλ€.
Q. μΈν°νμ΄μ€μ μΆμ ν΄λμ€μ μ°¨μ΄μ μ 무μμ΄λ©° μ΄λ€ μν©μ λ§μΆ° μ¨μΌνλκ°?
A. μΈν°νμ΄μ€λ λ©μλμ μ΄λ¦λ§ μ μν΄λλ κ³³μ΄λ€. μΈν°νμ΄μ€λ₯Ό μμλ°μ ν΄λμ€μμ ꡬ체νκ° μ΄λ£¨μ΄μ Έ μ νν μ΄ λ©μλκ° μ΄λ€ κΈ°λ₯μ κ°μ§λμ§ μ μνλ€. μΆμ ν΄λμ€λ μΆμνκ° λ€μ΄μλ ν΄λμ€λΌκ³ μκ°νλ©΄ λλ€. μΌλ° λ³μ, μμ λͺ¨λ μ μν μ μμΌλ©° κ³΅ν΅ κΈ°λ₯κ³Ό μ½μλ κΈ°λ₯λ ν¨κ» μλ€. μ κ·Όμ μ΄μλ μμ λ‘κ² μ§μ κ°λ₯νλ€.
μΈν°νμ΄μ€λ λ€μν ν΄λμ€λ€μ΄ κ³΅ν΅ μμ΄ μ κ°κ° λμνλ κ²½μ° μ¬μ©νλ€. νΉμ λ€μ€ ꡬνμ΄ νμνκ±°λ νΉμ μν λ‘ λλ λ μ¬μ©νλ€. μΆμ ν΄λμ€μ κ²½μ° κΈ°λ³Έ ννλ μ μ§νλ©΄μ μΈλΆμ μΈ λμμ λ€λ₯΄κ² νκ³ μΆμ λ μ¬μ©νλ€. κ°μ νμ λΌλ¦¬ λ¬Άκ³ κ³΅ν΅ μ½λλ₯Ό μ¬μ¬μ©νλ€κ³ μκ°νλ©΄ λλ€.
• μΈν°νμ΄μ€μ μμ
class ABC extends myClass implements myInterface1, MyInterface2 {
}
μΈν°νμ΄μ€λ λ―Έμμ± λ©μλλ₯Ό μμ±νκΈ° λλ¬Έμ μμνλ μλ―ΈμΈ extendsκ° μλ ꡬννλ μλ―ΈμΈ implementsλ₯Ό μ¬μ©νλ€. κ·Έλμ μΈν°νμ΄μ€μ μ μλ λ©μλλ μμ ν΄λμ€μμ λͺ¨λ ꡬνλμ΄μΌ μ λλ‘ μλλλ€.
1. ν ν΄λμ€λ μΈν°νμ΄μ€λ₯Ό λ€μ€ μμ κ°λ₯νλ€.
ν΄λμ€λ λ λΆλͺ¨ ν΄λμ€μ λμΌν μ΄λ¦μ νλ νΉμ λ©μλκ° μ‘΄μ¬νλ©΄ μ΄λ λΆλͺ¨ ν΄λμ€μ νλ(λ©μλ)λ₯Ό κ°μ Έμ¬μ§ νΌλνμ¬ μ€λ₯κ° λ°μνκ² λκ³ κ·Έκ²μ λ§κ³ μ ν΄λμ€λ λ€λ₯Έ ν΄λμ€λ₯Ό λ€μ€ μμνλ κ²μ λ§κ³ μλ€. νμ§λ§ μΈν°νμ΄μ€λ₯Ό λ€μ€ μμνλ κ²μ κ°λ₯νλ€. μλνλ©΄ λͺ¨λ νλκ° public static finalλ‘ μ μλμ΄ κ° μΈν°νμ΄μ€ λ΄μ μ‘΄μ¬νκΈ° λλ¬Έμ μ μ₯ 곡κ°μ΄ κ²ΉμΉμ§ μκΈ° λλ¬Έμ΄λ€. λ©μλμ κ²½μ° μ΄μ°¨νΌ μμ ν΄λμ€μμ μμ±λκΈ° λλ¬Έμ λ¬Έμ λλ λΆλΆμ΄ μλ€.
2. ν ν΄λμ€λ νλμ ν΄λμ€μ μ¬λ¬ μΈν°νμ΄μ€λ₯Ό λμμ μμν μ μλ€.
ν΄λμ€λ§ λ€μ€ μμνμ§ μλλ€λ©΄ λ¬Έμ λ 건 μλ€. λ€λ§ μμν κ²½μ° μμμ μ μν΄μΌνλ€. λ°λμ μ²μμ ν΄λμ€ λ¨Όμ μμν΄μ£Όκ³ κ·Έ λ€μ μΈν°νμ΄μ€λ₯Ό μμν΄μΌνλ€.
3. μΈν°νμ΄μ€λ μΈν°νμ΄μ€λ₯Ό μμν μ μλ€.
μΈν°νμ΄μ€λ μΈν°νμ΄μ€λ₯Ό μμν μ μμ§λ§ μ΄λ implementsκ° μλ extendsλ‘ μμν΄μΌνλ€. μμλ₯Ό λ€μ΄λ³΄μλ©΄ interface myInterface1 extends myInterface2μ νμμ΄ λ κ²μ΄λ€.
4. μΈν°νμ΄μ€λ ν΄λμ€λ₯Ό μμνμ§ μλλ€.
μΈν°νμ΄μ€λ μμ±λμ§ μμ ν λλ¦¬λ§ μλ λ©μλλ₯Ό κ°μ§λ€. κ·Έλ°λ° μμ±λ λ©μλλ₯Ό μ§λ ν΄λμ€λ₯Ό μμνκ² λλ€λ©΄ μΈν°νμ΄μ€μ μλ―Έκ° μ¬λΌμ§κ² λλ ν΄λμ€λ μΈν°νμ΄μ€μ μμλμ§ λͺ»νλ€.
5. λͺ¨λ μμ ν΄λμ€μ ꡬν λ©μλλ publicλ§ κ°λ₯νλ€.
νμ ν΄λμ€μ μ€λ²λΌμ΄λ©μ΄ μνλ λ μ κ·Ό μ§μ μλ λΆλͺ¨ λ©μλμ μ κ·Ό μ§μ μμ μ κ·Ό λ²μκ° κ°κ±°λ μ»€μΌ νλ€. μΈν°νμ΄μ€μ λͺ¨λ νλμ λ©μλλ publicμΌλ‘ κ°μ λμ΄μμ΄μ μΈν°νμ΄μ€λ₯Ό μμλ°λ λͺ¨λ μμ ν΄λμ€λ public μ κ·Ό μ§μ μλ§ κ°μ ΈμΌνλ€.
μΈν°νμ΄μ€μ κ°μ²΄ μμ± λ°©λ²μ μΆμ ν΄λμ€μ λμΌνλ€.
• μΈν°νμ΄μ€μ λν΄νΈ λ©μλ
interface myInterface {
public default void myMethod {
}
}
myInterfaceκ° μ¬λ¬ ν΄λμ€μ μμλμ΄ μ¬μ©λκ³ μλ€κ³ κ°μ νμ. 무μν λ§μ ν΄λμ€μ μ¬μ©λκ³ μλ μμ€μ μΈν°νμ΄μ€ λ΄μ μλ‘μ΄ λ©μλκ° μΆκ°λλ€λ©΄? myInterfaceλ₯Ό μμνκ³ μλ λͺ¨λ ν΄λμ€μ μ€λ₯κ° λ°μν κ²μ΄λ€. κ·Έ μ΄μ λ μΈν°νμ΄μ€μ μ μλ λ©μλλ μμν ν΄λμ€μμ λͺ¨λ ꡬνλμ΄μΌνλλ°, μλ‘ μΆκ°λ λ©μλλ λͺ¨λ ν΄λμ€μ ꡬνλμ§ μμμ μ€λ₯κ° λ°μνλ€. μ΄λ° λ¬Έμ μ μ ν΄κ²°νκ³ μ μΆκ°λ κ²μ΄ default λ©μλμ΄λ€. λν΄νΈ λ©μλλ μΈν°νμ΄μ€ λ΄λΆμ μμ±λ λ©μλλ₯Ό μ½μ νμ¬ μμ ν΄λμ€μμ μ΄ λ©μλλ₯Ό λ°λμ μ€λ²λΌμ΄λ© νμ§ μμλ λλ κ²μ΄λ€.
• μΈν°νμ΄μ€μ super
interface myInterface {
default void myMethod(){
System.out.println("MyInterfaceμ λ©μλ μΆλ ₯");
}
}
class myClass implements myInterface {
@Override
public void myMethod(){
myInterface.super.myMethod();
System.out.println("myClassμ λ©μλ μΆλ ₯");
}
}
myClass.myMethod( );λ₯Ό νΈμΆνλ€λ©΄, superλ‘ μΈν΄ μΈν°νμ΄μ€μ λ©μλκ° νΈμΆλ ν κ·Έ λ€μμ ν΄λμ€μ λ©μλκ° νΈμΆλ κ²μ΄λ€. superλ₯Ό ν΄λμ€μ μ¬μ©ν λ, κ·Έλ₯ λ©μλλͺ μμ super.μ λΆμ΄λ©΄ λλλ° μΈν°νμ΄μ€μ κ²½μ° μΈν°νμ΄μ€λͺ .super.λ©μλλͺ μ λΆμλ€λ μ°¨μ΄κ° μλ€. μλ§ κ·Έ μ΄μ λ μΈν°νμ΄μ€λ λ€μ€ μμμ΄ κ°λ₯νκΈ° λλ¬Έμ, μ΄λ€ μΈν°νμ΄μ€μ λ©μλλ₯Ό λ°©λ¬Έν κ²μΈμ§ μ ννκ² μ μ΄μΌνλ λ― νλ€.
• μΈν°νμ΄μ€μ static
interface MyInterface {
static void greet() {
System.out.println("Hello from Interface!");
}
}
public class Main {
public static void main(String[] args) {
MyInterface.greet();
}
}
μΈν°νμ΄μ€μ static λ©μλλ₯Ό μ¬μ©ν μ μλλ°, μ΄λ° κ²½μ° Main ν΄λμ€μ 보μ΄λ κ²κ³Ό κ°μ΄ κ°μ²΄λ₯Ό μμ±νμ§ μκ³ λ°λ‘ μΈν°νμ΄μ€μ greet λ©μλλ₯Ό νΈμΆν μ μκ² λλ€. μ΄λ κ² λλ©΄ μ€λ²λΌμ΄λ© μ κ²½μΈ κ² μμ΄ λ 립μ μΌλ‘ μ‘΄μ¬ κ°λ₯νλ©°, static λ©μλλ₯Ό μΈλΆλ‘ λΉΌμ§ μμλ λμ΄ κ°λ°μ μ μ₯μμ μ’ λ νΈλ¦¬ν΄μ§λ€.
'π Java > μλ°μμ μ 볡' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[Java] μ΅λͺ μ΄λ ν΄λμ€ (1) | 2025.05.02 |
---|---|
[Java] μ΄λ ν΄λμ€ (0) | 2025.04.29 |
[Java] final, static, abstract μ μ΄μ (2) | 2025.02.05 |
[Java] λ©μλ μ€λ²λΌμ΄λ©κ³Ό μ€λ²λ‘λ©, super( ) λ©μλ (1) | 2025.02.02 |
[Java] μλ° μμ μ 볡_ 10μ₯ ν΄λμ€μ μμκ³Ό λ€νμ± (1) (2) | 2024.12.24 |