μΌ | μ | ν | μ | λͺ© | κΈ | ν |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- Git
- Postman
- Codeup
- Python
- Spring
- κΈ°μ΄100μ
- springboot
- go
- νμ΄μ¬
- ν°μ€ν 리μ±λ¦°μ§
- java
- Vue.js
- κ°μ¬μ€
- mariadb
- ν΄λ¦° μ½λ
- MySQL
- spring security
- GitHub
- μ€νλ§
- 둬볡
- Spring Boot
- golang
- μ½λμ
- ν΄λ¦°μ½λ
- μκ³ λ¦¬μ¦
- thymeleaf
- H2 μ€μΉ
- JPA
- Gradle
- μ€λΈμ
- Today
- Total
nyximos.log
[Java] μΈν°νμ΄μ€ λ³Έλ¬Έ
π©π λͺ©ν
μλ°μ μΈν°νμ΄μ€μ λν΄ νμ΅νμΈμ.
π©π» νμ΅ν κ²
- μΈν°νμ΄μ€ μ μνλ λ°©λ²
- μΈν°νμ΄μ€ ꡬννλ λ°©λ²
- μΈν°νμ΄μ€ λ νΌλ°μ€λ₯Ό ν΅ν΄ ꡬν체λ₯Ό μ¬μ©νλ λ°©λ²
- μΈν°νμ΄μ€ μμ
- μΈν°νμ΄μ€μ κΈ°λ³Έ λ©μλ (Default Method), μλ° 8
- μΈν°νμ΄μ€μ static λ©μλ, μλ° 8
- μΈν°νμ΄μ€μ private λ©μλ, μλ° 9
π©βοΈ μΈν°νμ΄μ€ μ μνλ λ°©λ²
μΈν°νμ΄μ€
- μΌμ’ μ μΆμ ν΄λμ€
- μΆμ λ©μλμ μ§ν©
- λ©€λ²λ‘ μΆμ λ©μλμ μμλ§ κ°μ§ μ μλ€.
- λ€λ₯Έ ν΄λμ€λ₯Ό μμ±νλλ° λμ μ€ λͺ©μ μΌλ‘ μμ±λλ€
- μΆμ ν΄λμ€λ³΄λ€ μΆμν μ λκ° λλ€.
- Java 8 μ΄μ λ²μ μμλ μΆμ ν΄λμ€μ λ¬λ¦¬ λͺΈν΅μ κ°μΆ μΌλ° λ©μλ, λ©€λ² λ³μλ₯Ό ꡬμ±μμΌλ‘ κ°μ§ μ μλ€.
- μΈν°νμ΄μ€λ ν΄λμ€μ λ¬λ¦¬ Object ν΄λμ€μ κ°μ μ΅κ³ μ‘°μμ΄ μλ€.
μΈν°νμ΄μ€ μ μ
interface μΈν°νμ΄μ€λͺ
{
public static final νμ
μμλͺ
= κ°;
public abstract λ©μλλͺ
(맀κ°λ³μ);
}
μΈν°νμ΄μ€ λ©€λ²λ€μ μ μ½μ¬ν
- λͺ¨λ λ©€λ² λ³μλ public static final μ΄μ΄μΌ νλ©° μ΄λ₯Ό μλ΅ν μ μλ€.
- λͺ¨λ λ©μλλ public abstract μ΄μ΄μΌ νλ©°, μ΄λ₯Ό μλ΅ν μ μλ€.
- JDK 1.8λΆν° static λ©μλμ default λ©μλλ μμΈλ‘ μμ±ν μ μλ€.
- μλ΅λ μ μ΄μλ μ»΄νμΌ μμ μ»΄νμΌλ¬κ° μλμ μΌλ‘ μΆκ°ν΄μ€λ€.
μΈν°νμ΄μ€μ μ₯μ
1. κ°λ° μκ°μ λ¨μΆμν¬ μ μλ€.
λ©μλλ₯Ό νΈμΆνλ μͺ½μμλ μ μΈλΆλ§ μλ©΄ νΈμΆμ΄ κ°λ₯νλ€.
2. νμ€νκ° κ°λ₯νλ€.
κΈ°λ³Ένμ μΈν°νμ΄μ€λ‘ μμ±ν λ€μ, κ°λ°μλ€μκ² κ΅¬ννκ² νλ©΄ μΌκ΄λκ³ μ ννλ νλ‘κ·Έλ¨μ κ°λ°μ΄ κ°λ₯νλ€.
3. μλ‘ κ΄κ³μλ ν΄λμ€λ€μκ² κ΄κ³λ₯Ό λ§Ίμ΄ μ€ μ μλ€.
μμ κ΄κ³λ κ°μ μ‘°μ ν΄λμ€λ₯Ό κ°μ§κ³ μμ§ μμ μλ‘ μλ¬΄λ° κ΄κ³λ μλ ν΄λμ€λ€μκ² νλμ μΈν°νμ΄μ€λ₯Ό 곡ν΅μ μΌλ‘ ꡬνν¨μΌλ‘μ¨ κ΄κ±λ₯Ό λ§Ίμ΄μ€ μ μλ€.
4. λ 립μ μΈ νλ‘κ·Έλλ°μ΄ κ°λ₯νλ€.
ν΄λμ€μ μ μΈκ³Ό ꡬνμ λΆλ¦¬μν¬ μ μκΈ° λλ¬Έμ μ€μ ꡬνμ λ 립μ μΈ νλ‘κ·Έλ¨μ μμ±νλ κ²μ΄ κ°λ₯νλ€.
ν΄λμ€μ ν΄λμ€κ°μ μ§μ μ μΈ κ΄κ³λ₯Ό μΈν°νμ΄μ€λ₯Ό μ΄μ©ν΄μ κ°μ μ μΈ κ΄κ³λ‘ λ³κ²½νλ©΄ ν ν΄λμ€μ λ³κ²½μ΄ λ€λ₯Έ ν΄λμ€μ μν₯μ λ―ΈμΉμ§ μλ λ 립μ μΈ νλ‘κ·Έλλ°μ΄ κ°λ₯νλ€.
π©π¬ μΈν°νμ΄μ€ ꡬννλ λ°©λ²
μΈν°νμ΄μ€λ μΆμ ν΄λμ€μ²λΌ κ·Έ μ체λ‘λ μΈν°νμ΄μ€λ₯Ό μμ±ν μ μλ€.
implements ν€μλλ₯Ό μ¬μ©νμ¬ μΈν°νμ΄μ€λ₯Ό ꡬννλ€.
class ν΄λμ€λͺ
implements μΈν°νμ΄μ€λͺ
{
// μΈν°νμ΄μ€μ μ μλ μΆμλ©μλ λͺ¨λ ꡬν
}
λ§μΌ μΈν°νμ΄μ€ λ©μλμ€ μΌλΆλ§ ꡬν νλ€λ©΄ abstractλ₯Ό λΆμ¬μ μΆμ ν΄λμ€λ‘ μ μΈν΄μΌ νλ€.
abstract class ν΄λμ€λͺ
implements μΈν°νμ΄μ€λͺ
{
// μΈν°νμ΄μ€μ μ μλ μΆμλ©μλ μΌλΆ ꡬν
}
μμκ³Ό ꡬνμ λμμ ν μλ μλ€.
class ν΄λμ€λͺ
extends μμν΄λμ€ implements μΈν°νμ΄μ€λͺ
{
// μΈν°νμ΄μ€μ μ μλ μΆμλ©μλ ꡬν
}
π©π« μΈν°νμ΄μ€ λ νΌλ°μ€λ₯Ό ν΅ν΄ ꡬν체λ₯Ό μ¬μ©νλ λ°©λ²
μμ ν΄λμ€μ μΈμ€ν΄μ€λ₯Ό μ‘°μνμ μ μ°Έμ‘°λ³μλ‘ μ°Έμ‘°νλ κ²μ΄ κ°λ₯νλ€λ κ²μ λ°°μ λ€.
μΈν°νμ΄μ€ μμ μ΄λ₯Ό ꡬνν ν΄λμ€μ μ‘°μμ΄λΌ ν μ μμΌλ―λ‘
ν΄λΉ μΈν°νμ΄μ€ νμ μ μ°Έμ‘°λ³μλ‘ μ΄λ₯Ό ꡬνν ν΄λμ€μ μΈμ€ν΄μ€λ₯Ό μ°Έμ‘°ν μ μμΌλ©°
μΈν°νμ΄μ€ νμ μΌλ‘ νλ³νλ κ°λ₯νλ€.
Cook c = (Cook)new Cooker();
λλ
Cook c = new Cooker();
μΈν°νμ΄μ€λ λ©μλμ 맀κ°λ³μμ νμ μΌλ‘ μ¬μ©λ μ μλ€.
void bake(Cook c){
}
μΈν°νμ΄μ€ νμ μ 맀κ°λ³μκ° κ°λ μλ―Έλ
λ©μλ νΈμΆμ ν΄λΉ μΈν°νμ΄μ€λ₯Ό ꡬνν ν΄λμ€μ μΈμ€ν΄μ€λ₯Ό 맀κ°λ³μλ‘ μ 곡ν΄μΌ νλ€λ κ²
class Cooker extends Unit implements Cook {
public void bake(int temperature){ }
public void fry(Ingredient ingredient){ }
}
Cook μΈν°νμ΄μ€λ₯Ό ꡬνν Cooker ν΄λμ€κ° μμ λ,
fry λ©μλμ 맀κ°λ³μλ‘ Ingredient μΈμ€ν΄μ€λ₯Ό λ겨 μ€ μ μλ€.
fry(new Ingredient())μ κ°μ΄ μΈ μ μλ€.
λ©μλμ 리ν΄νμ μΌλ‘ μΈν°νμ΄μ€λ₯Ό μ§μ νλ κ²λ κ°λ₯νλ€.
Ingredient method() {
Cooker c = new Cooker();
return c;
}
λ¦¬ν΄ νμ μ΄ μΈν°νμ΄μ€λΌλ κ²μ
λ©μλκ° ν΄λΉ μΈν°νμ΄μ€λ₯Ό ꡬνν ν΄λμ€μ μΈμ€ν΄μ€λ₯Ό λ°ννλ€λ κ²μ μλ―Ένλ€.
π©πΎ μΈν°νμ΄μ€ μμ
μΈν°νμ΄μ€λ μΈν°νμ΄μ€λ‘λΆν°λ§ μμλ°μ μ μμΌλ©°,
ν΄λμ€μ λ¬λ¦¬ λ€μ€ μμμ΄ κ°λ₯νλ€. (μ¬λ¬κ°μ μΈν°νμ΄μ€λ‘λΆν° μμμ λ°λ κ²μ΄ κ°λ₯νλ€.)
interface Movable {
void move(int x, int y);
}
interface Attackable {
void attack(Unit u);
}
interface Fightable extends Movable, Attackable { }
ν΄λμ€μ μμκ³Ό λ§μ°¬κ°μ§λ‘ μμ μΈν°νμ΄μ€μΈ Fightableμ μ‘°μ μΈν°νμ΄μ€μ μ μλ λ©€λ²λ₯Ό λͺ¨λ μμ λ°λλ€.
κ·Έλμ Fightable μ체μλ μ μλ λ©€λ²κ° νλλ μμ§λ§ μ‘°μ μΈν°νμ΄μ€λ‘λΆν° μμλ°μ λκ°μ μΆμ λ©μλ move(int x, int y)μ attack(Unit u)λ₯Ό λ©€λ²λ‘ κ°κ² λλ€.
π©π§ μΈν°νμ΄μ€μ κΈ°λ³Έ λ©μλ (Default Method), μλ° 8
Defailt Method
- μΆμ λ©μλμ κΈ°λ³Έμ μΈ κ΅¬νμ μ 곡νλ λ©μλ
- ν€μλ defaultλ₯Ό μμ λΆμ΄λ©°, μΆμλ©μλμ λ¬λ¦¬ μΌλ° λ©μλμ²λΌ λͺΈν΅ { } μ΄ μμ΄μΌ νλ€.
- μ κ·Ό μ μ΄μκ° publicμ΄λ©° μλ΅ κ°λ₯νλ€.
- μΆμ λ©μλκ° μλκΈ° λλ¬Έμ λν΄νΈ λ©μλκ° μλ‘ μΆκ°λμ΄λ ν΄λΉ μΈν°νμ΄μ€λ₯Ό ꡬνν ν΄λμ€λ₯Ό λ³κ²½νμ§ μμλ λλ€.
- μ΄λ₯Ό ꡬννλ ν΄λμ€λ default methodλ₯Ό μ€λ²λΌμ΄λ© ν μ μλ€.
- μΈν°νμ΄μ€κ° λ³κ²½λλ©΄ μΈν°νμ΄μ€λ₯Ό ꡬννλ λͺ¨λ ν΄λμ€λ€μ΄ ν΄λΉ λ©μλλ₯Ό ꡬνν΄μΌ νμ§λ§,
default methodλ μΈν°νμ΄μ€μ λ©μλλ₯Ό ꡬννμ¬ μ΄λ¬ν λ¬Έμ λ₯Ό ν΄κ²°ν΄μ€λ€.
interface MyInterfacce {
void method();
default void newMethod(){
// ꡬν
}
}
π©π μΈν°νμ΄μ€μ static λ©μλ, μλ° 8
Static λ©μλ
- ν€μλ staticμ μμ λΆμΈλ€.
- static λ©μλλ default μ²λΌ μΈν°νμ΄μ€μμ ꡬννλ€.
- κ·Έλ¬λ ꡬννλ ν΄λμ€μμ μ¬μ μκ° λΆκ°λ₯νλ€.
- λ°λμ ν΄λμ€λͺ μΌλ‘ λ©μλλ₯Ό νΈμΆνλ€.
public interface Vehicle {
// regular / default interface methods
static int getHorsePower(int rpm, int torque) {
return (rpm * torque) / 5252;
}
}
Vehicle.getHorsePower(2500, 480));
π©π¨ μΈν°νμ΄μ€μ private λ©μλ, μλ° 9
private λ©μλ
- default methodμ static methodλ public methodλ‘ κ΅¬νν΄μΌνλ λΆλΆμ΄ λΆνΈνμ§λ§
- Java 9μμ μ 곡νλ private methodλ μ½λμ μ€λ³΅μ νΌνκ³ μΊ‘μνλ₯Ό κ°λ₯νκ² ν΄μ€λ€.
- μΈν°νμ΄μ€λ₯Ό ꡬννλ ν΄λμ€κ° ν΄λΉ λ©μλλ₯Ό μμνλ κ²μ λ§μμ€λ€.
- static private methodλ static methodμμ νΈμΆ κ°λ₯νλ€.
- private λ©μλλ private, abstract, default λλ static λ©μλλ₯Ό νΈμΆν μ μλ€. private staticμ static λ° static private λ©μλλ§ νΈμΆ ν μ μλ€.
Using private methods in interfaces have four rules :
- Private interface method cannot be abstract.
- Private method can be used only inside interface.
- Private static method can be used inside other static and non-static interface methods.
- Private non-static methods cannot be used inside private static methods.
ublic interface CustomInterface {
public abstract void method1();
public default void method2() {
method4(); //private method inside default method
method5(); //static method inside other non-static method
System.out.println("default method");
}
public static void method3() {
method5(); //static method inside other static method
System.out.println("static method");
}
private void method4(){
System.out.println("private method");
}
private static void method5(){
System.out.println("private static method");
}
}
public class CustomClass implements CustomInterface {
@Override
public void method1() {
System.out.println("abstract method");
}
public static void main(String[] args){
CustomInterface instance = new CustomClass();
instance.method1();
instance.method2();
CustomInterface.method3();
}
}
Output:
abstract method
private method
private static method
default method
private static method
static method
https://howtodoinjava.com/java9/java9-private-interface-methods/
μ°Έμ‘°
8μ£Όμ κ³Όμ : μΈν°νμ΄μ€
λ¨κΆμ±, μλ°μ μ μ κΈ°μ΄νΈ, λμ°μΆν, 2019
'Programming > JAVA' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[Java] λ©ν°μ°λ λ νλ‘κ·Έλλ° (0) | 2022.09.06 |
---|---|
[Java] μμΈ μ²λ¦¬ (0) | 2022.09.01 |
[Java] ν¨ν€μ§ (0) | 2022.08.17 |
[Java] μμ (0) | 2022.08.12 |
[Java] ν΄λμ€ (0) | 2022.08.05 |