Cracking Code

[Java] 인터페이스 (Interface) 본문

Java/Java language

[Java] 인터페이스 (Interface)

CrackCo 2020. 8. 27. 19:41
자식 클래스의 메서드 등을 강제할 때 추상 클래스 이외에 인터페이스를 사용할 수 있습니다.

인터페이스

추상 클래스와는 다르게 상수와 추상 메서드만 가질 수 있습니다.

상수는 public static final 키워드가 자동으로 지정되며

추상 메서드는 public abstract 키워드가 자동으로 지정됩니다.

객체 생성을 할 수 없으므로 독자적으로 사용할 수 없습니다.

public interface interface_name {
    (public static final) data_type constant_name = value; // 상수
    (public abstract) void method_name([data_type variabel1, ...]); // 추상 메서드
}

public class class_name implements interface_name {
    @Override
    public void method_name([datatype variabel1, ...]) {}
}

인터페이스는 interface 키워드를 사용하여 정의할 수 있으며

상수와 추상 메서드만을 가져야 합니다.

클래스는 implements 키워드를 사용하여 인터페이스를 구현할 수 있으며

반드시 추상 메서드를 오버라이딩해야 합니다.

 

E.g.

// Action.java - 인터페이스
public interface Action {
    public static final int HP = 100;
    public abstract void attack(Fighter f);
    public abstract void takeDamage(int damage);
}

// Fighter.java - Action 인터페이스를 사용하는 클래스
public class Fighter implements Action {
    private String name;
    private int hp = Action.HP;
    private int damage;

    public Fighter(String name, int damage) {
        this.name = name;
        this.damage = damage;
    }

    @Override
    public void attack(Fighter f) {
        System.out.println(name + "이(가) " + f.getName() + "을(를) 공격하였습니다.");
        f.takeDamage(damage);
    }

    @Override
    public void takeDamage(int damage) {
        hp -= damage;
        System.out.println(name + "이(가) " + damage + "만큼의 데미지를 입었습니다.");
        System.out.println(name + "의 hp: " + hp);
    }

    public String getName() {
        return name;
    }
}

// Main.java - main
public class Main {
    public static void main(String[] args) {
        Fighter f1 = new Fighter("dev", 10);
        Fighter f2 = new Fighter("boss", 50);

        f1.attack(f2);
    }
}

// 실행 결과
dev이(가) boss을(를) 공격하였습니다.
boss이(가) 10만큼의 데미지를 입었습니다.
boss의 hp: 90

인터페이스추상 클래스와는 다르게 생성자를 가질 수 없습니다.

또한 오로지 상수만을 필드로 가지며 모든 메서드는 추상 메서드여야 합니다.

 

Fighter 클래스Action 인터페이스를 구현하여 정의하면

Action 인터페이스에 정의된 추상 메서드 attack(f:Fighter)takeDamage(damage:int)오버라이딩해야 합니다.

추상 클래스와 비슷하게 메서드에 대한 강제성을 부여받게 됩니다.

'Java > Java language' 카테고리의 다른 글

[Java] 추상 클래스 (Abstract class)  (0) 2020.08.25
[Java] 다형성 (Polymorphism)  (0) 2020.08.25
[Java] 메서드 오버라이딩 (Method Overriding)  (0) 2020.08.13
[Java] 상속 (Inheritance)  (0) 2020.08.12
[Java] this 키워드  (0) 2020.08.09
Comments