키보드워리어

[자바] 인터페이스에 관한 이야기 (interface) 본문

JAVA/입문

[자바] 인터페이스에 관한 이야기 (interface)

꽉 쥔 주먹속에 안경닦이 2023. 3. 12. 11:11
728x90

안녕하세요!! 【Keyboard Warrior】


블로그 방문자 여러분, 안경닦이입니다.

 

오늘은 인터페이스 에 대해 알아보겠습니다.

 


 

인터페이스 (Interface)

 

자바를 처음 시작하는 프로그래머들은 인터페이스와 추상 클래스를 차이점을 이해하기 힘들어합니다.

인터페이스와 추상 클래스는 모두 객체 지향 프로그래밍에서 상속과 다형성을 구현하는 방법 중 하나입니다.

그렇지만 두 가지 구현 방식에는 몇 가지 차이점이 있습니다.


구현 방식

추상 클래스는 일반 클래스와 마찬가지로 상속을 통해 사용됩니다.

추상 클래스는 하나 이상의 추상 메서드를 포함할 수 있으며, 이러한 추상 메서드는 하위 클래스에서 구현해야 합니다. 추상 클래스는 추상 메서드 외에도 일반 메서드, 필드 등을 가질 수 있습니다.

인터페이스는 클래스와는 달리 인터페이스만으로 객체를 생성할 수 없습니다. 인터페이스는 하위 클래스에서 구현해야 하는 메서드만을 선언합니다. 인터페이스는 모든 메서드가 추상 메서드이며, 추가적으로 상수 필드만을 가질 수 있습니다.

상속

상속을 갖는 거도 다른데요
둘 다 상속을 통해 확장이 가능하지만, 추상 클래스는 클래스 계층 구조에서 상위 클래스로 위치하면서 하위 클래스에 공통적인 메서드나 필드를 상속할 수 있도록 하는 반면, 인터페이스는 인터페이스 간의 계층구조에서 구현클래스에서 구현해야 하는 메서드를 지정해 주는데 주로 사용됩니다.

추상 클래스와 인터페이스는 목적이 다르기 때문에, 각각의 상황에 맞게 사용해야 합니다.

 

public interface GamingConsole {
public void up();

public default void go() {//default는  꼭 구현안해도 됩니다.
}
public void down();

public void left();

public void right();

}


위 인터페이스를 구현하고자 하는 클래스를 만들어볼게요.

public class MarioGame implements GamingConsole {
@Override
public void up() {
System.out.println("Jump");
}
@Override
public void down() {
System.out.println("Go into a hole");
}
@Override
public void left() {

}
@Override
public void right() {
System.out.println("Turn right");
}
}


implements 키워들르 쓰면 자바에서 "당신 이걸 구현해야 해"하고 알려줍니다.


다중 상속


추상 클래스는 하나의 클래스만 상속할 수 있습니다. 따라서, 추상 클래스를 상속하면 하위 클래스는 다른 클래스를 상속할 수 없습니다.
인터페이스는 다중 상속이 가능합니다. 정확히는 다중 구현이 맞아요. 인터페이스를 구현하는 클래스는 여러 개의 인터페이스를 구현할 수 있습니다.

 

public interface Flyable {
    void fly(); // 비행 메서드
}

public interface Swimmable {
    void swim(); // 수영 메서드
}

public class Bird implements Flyable {
    public void fly() {
        System.out.println("I can fly");
    }
}

public class Fish implements Swimmable {
    public void swim() {
        System.out.println("I can swim");
    }
}

public class Duck implements Flyable, Swimmable {
    public void fly() {
        System.out.println("I can fly");
    }
    public void swim() {
        System.out.println("I can swim");
    }
}


자바 인터페이스를 통해 외부에서 알고리즘 정의하는 법을 간단하게 설명드리자면 이렇습니다.

프로젝트를 두 팀으로 나누어 개발하면서, 복잡한 알고리즘을 구현하는 A팀과 그 알고리즘을 사용하는 B팀이 존재합니다.

이때, A팀이 만든 인터페이스 ComplexAlgorithm를 구현하는 클래스 DummyComplexAlgorithm를 B팀이 이용함으로써, B팀은 그 알고리즘을 직접 구현할 필요 없이 ComplexAlgorithm 인터페이스를 사용할 수 있습니다.

 

이를 통해, 인터페이스는 다른 두 개 이상의 프로젝트에서 서로 소통할 수 있도록 해주는 중요한 역할을 합니다.

public interface ComplexAlgorithm {
int complexAlgorithm(int number1, int number2);
}

public class DummyComplexAlgorithm implements ComplexAlgorithm {//A팀이 작성

@Override
public int complexAlgorithm(int number1, int number2) {

return number1 + number2;
}

}

public class Project {

public static void main(String[] args) {
ComplexAlgorithm algorithm = new DummyComplexAlgorithm(); //B팀이 작성
algorithm.complexAlgorithm(3, 5);
// Your complex implementation will be present here..

}

}
 

 

아주 기초적인 인터페이스 사용법입니다. 다음에 기회가 된다면 느슨한 결합에 대해 배우게 될텐데 이 때, 인터페이스가 매우 중요합니다.

 
728x90