[JAVA] μΆμν(Abstraction)
in Tech-Stack on JAVA
Contents
μΆμν Abstraction
λͺ©μ κ³Ό κ΄λ ¨μ΄ μλ κ²μ μ κ±°νκ³ νμμ μΈ μμλ§μ ννν΄ λ κ²μ λ§νλ€.
ν΄λμ€μ λ©μλ μμ abstractλ₯Ό λΆμ¬ μμ±νλ€.
ν΄λμ€λ κ°μ²΄λ₯Ό μμ±ν μ μμ§λ§ μΆμ ν΄λμ€λ κ°μ²΄λ₯Ό μμ±ν μ μλ€.
λλ¬Ό μΆμ ν΄λμ€λ‘ μμλ₯Ό λ€μ΄λ³΄μ.
λλ¬Όμ ν¬μ λ₯, μ‘°λ₯, μ΄λ₯ λ± λ€μνκ² μ‘΄μ¬νλ©° λͺ¨λ λλ¬Όμ μμ§μκ³Ό μΈμμ νΉμ§μ κ°κ³ μμΌλ©° λ€μκ³Ό κ°μ΄ μ μν μ μλ€.
// μΆμ ν΄λμ€
public abstract class λλ¬Ό {
// μΆμ λ©μλ
abstract void μμ§μ();
abstract void μΈμ();
abstract void νΈν‘();
void λλ¬Όλ§μνΉμ§() {};
}
μ΄μ λλ¬Ό μΆμ ν΄λμ€λ₯Ό μμλ°λ ν¬μ λ₯ ν΄λμ€λ₯Ό μμ±ν΄λ³΄μ.
extendsλ‘λ§ μΆμ ν΄λμ€λ₯Ό μμλ°μΌλ©΄ compile errorκ° λ°μνλ€. μ΄λ μΆμ ν΄λμ€ μμ μΆμ λ©μλλ₯Ό μ μνμ§ μμμ λ°μνλ€.
public class ν¬μ λ₯ extends λλ¬Ό {
// compile error
// The type ν¬μ λ₯ must implement the inherited abstract method λλ¬Ό.μμ§μ()
}
μ΄λ₯Ό ν΄κ²°νλ λ°©λ²μ λ€μκ³Ό κ°λ€.
- μΆμ ν΄λμ€μ λͺ¨λ μΆμ λ©μλλ₯Ό μ€λ²λΌμ΄λ© νλ€.
public class ν¬μ λ₯ extends λλ¬Ό { @Override void μμ§μ() { System.out.println("ν¬μ λ₯μ μμ§μ"); } @Override void μΈμ() { System.out.println("ν¬μ λ₯μ μΈμ"); } } - ν¬μ λ₯ ν΄λμ€λ μΆμ ν΄λμ€λ‘ μ μνλ€.
public abstract class ν¬μ λ₯ extends λλ¬Ό { void ν¬μ λ₯νΉμ§() {}; @Override void νΈν‘(){ System.out.println("ννΈν‘"); } }- ν¬μ λ₯λ κ°, κ³ μμ΄, μ¬μ λ±μΌλ‘ λΆλ₯ν μ μμΌλ μΆμ ν΄λμ€λ‘ μμ±ν μ μλ€.
2λ² λ°©λ²μ μ νν ν ν¬μ λ₯λ₯Ό μμλ°λ κ° ν΄λμ€λ₯Ό μ μν΄λ³΄μ
public class κ° extends ν¬μ λ₯ {
@Override
void μμ§μ() {
System.out.println("κ°κ°μ΄ κ±·κΈ°");
}
@Override
void μΈμ() {
System.out.println("κ°κ°μ΄ μΈκΈ°");
}
}
λλ¬Ό ν΄λμ€μ νΈν‘() μΆμ λ©μλλ ν¬μ λ₯ μΆμ ν΄λμ€μμ μ¬μ μνκΈ° λλ¬Έμ ν¬μ λ₯λ₯Ό μμλ°λ κ° ν΄λμ€μμ μ¬μ μνμ§ μμλ λλ€.
κ³ μμ΄ ν΄λμ€λ ν¬μ λ₯ ν΄λμ€λ₯Ό μμλ°μμ λ§λ ν κ°μ κ³ μμ΄ κ°μ²΄λ₯Ό λ§λ λ€λ©΄ λλ¬Όκ³Ό ν¬μ λ₯ μλ£νμΌλ‘ κ°μ²΄λ₯Ό κ΄λ¦¬ν μ μλ€.
κ³ μμ΄ cat = new κ³ μμ΄();
κ° dog = new κ°();
λλ¬Ό[] animal = new λλ¬Ό[] {dog, cat};
ν¬μ λ₯[] mammalia = new ν¬μ λ₯[] {dog, cat}
κ°, κ³ μμ΄ ν΄λμ€λ ν¬μ λ₯ ν΄λμ€λ₯Ό μμλ°μκ³ ν¬μ λ₯ ν΄λμ€λ λλ¬Ό ν΄λμ€λ₯Ό μμλ°μμ κ°λ₯νλ€.
interface
μμ ν μΆμ ν΄λμ€μ΄λ€.
javaμμλ λ€μ€ μμμ΄ λΆκ°λ₯νμ§λ§ interfaceλ λ€μ€ μμμ ν μ μλ€.
interfaceλ₯Ό ν΅ν΄ κ΄κ³κ° μλ ν΄λμ€λ€μ μ°κ΄μ±μ λΆμ¬ν μ μλ€.
μ μλ λ©μλλ₯Ό κ°μ§ μ μμ΄μ λͺ¨λ λ©μλλ μΆμ λ©μλλ‘ μ μν΄μΌ νλ€.
interfaceλ₯Ό μμλ°λ ν΄λμ€λ interfaceμ λͺ¨λ μΆμ λ©μλλ₯Ό μ¬μ μν΄μΌ νλ€.
interface ν€μλλ₯Ό ν΅ν΄ μ μΈν μ μμΌλ©° implements ν€μλλ₯Ό ν΅ν΄ μμλ°μ μ μλ€.
λν, v1.8μ΄μ μλ μμ, μΆμ λ©μλ μ μΈλ§ κ°λ₯νμ§λ§ μ΄ν λ²μ μμλ default, static λ©μλκ° μΆκ°λμλ€.
- default method
- interfaceλ₯Ό μμλ°λ λͺ¨λ ν΄λμ€μ μ¬μ μνμ§ μμλ μ¬μ©μ΄ κ°λ₯ν λ©μλ
- νμμ μν΄ μ¬μ μν μ μλ€.
- static method
- interfaceμ μ μ λ©μλλ ν΄λμ€μ μ μ λ©μλμ λκ°μ λ°©μμΌλ‘ μ¬μ©μ΄ κ°λ₯νλ€.
interface μμ
interfaceλ₯Ό μμλ°μinterfaceλ₯Ό μμ±νκΈ°extendsν€μλ μ¬μ©
interfaceλ₯Ό μμλ°μclassμμ±νκΈ°implementsν€μλ μ¬μ©public class κ³ λ extends ν¬μ λ₯ implements λ¬Όμμμ¬λμλ¬Ό { @Override void μμ§μΈλ€() { System.out.println("κ³ λκ°μ΄ μμ§μΈλ€."); } }
interface ꡬν
public interface λ¬Όμμμ¬λμλ¬Ό {
// 1) public static finalμ΄ μλμΌλ‘ λΆμ§λ§ μλ΅λλ€.
int a = 1;
// 2) interfaceμμλ λ©μλλ₯Ό μ μν μ μλ€.
void method(){};
// 3) public abstractκ° μλμΌλ‘ λΆμ§λ§ μλ΅λλ€.
void λ¬Όμν();
// 4) default λ©μλ
default void methodD() {
System.out.println("default method");
}
// 5) μ μ λ©μλ
static void methodS() {
System.out.println("static method");
}
}
- μμ μ μΈ μ μμ
public static finalμ΄ μλμΌλ‘ μμ±λλ€.int a = 1=public static final int a = 1
- interfaceμμ λ©μλλ μ μΈλ§ ν μ μλ€. λ§μ½ body(
{ })λ₯Ό μ μ κ²½μ° μλ¬κ° λ°μνλ€. - λ©μλλ₯Ό μ μΈν λ
public abstractκ° μλμΌλ‘ μμ±λλ€. defaultν€μλλ₯Ό ν΅ν΄ λν΄νΈ λ©μλλ₯Ό μμ±ν μ μλ€.staticν€μλλ₯Ό ν΅ν΄ μ μ λ©μλλ₯Ό μμ±ν μ μλ€.
