Java

[Java]인터페이스

codi-3 2024. 8. 12. 19:44

Java 인터페이스는 객체지향 프로그래밍에서 중요한 개념으로, 클래스들이 특정 메서드를 구현하도록 강제하는 방법을 제공한다. 인터페이스는 일종의 계약이라고 볼 수 있다. 이 계약을 따르는 모든 클래스는 인터페이스에 정의된 메서드를 구현해야 한다.

 

🔍 인터페이스의 특징

  • 추상 메서드만 포함: 인터페이스 내에 선언된 메서드는 기본적으로 추상 메서드라고 한다. 즉, 메서드의 구현부가 없으며, 이를 구현하는 클래스에서 실제 메서드를 정의해야 합니다. 
  • 다중 상속 가능: 자바는 클래스의 다중 상속을 허용하지 않지만, 인터페이스는 여러 개를 구현할 수 있다. 이는 클래스가 여러 인터페이스에서 정의된 메서드를 모두 구현하도록 강제할 수 있음을 의미한다.
  • 구현 강제: 인터페이스를 구현하는 클래스는 인터페이스에 선언된 모든 메서드를 구현해야 한다. 그렇지 않으면 클래스는 추상 클래스로 선언되어야 한다.
  • 상수 선언: 인터페이스에서는 상수(static final)도 선언할 수 있다. 이 상수들은 인터페이스를 구현하는 모든 클래스에서 접근할 수 있다.

🚀 인터페이스의 사용 목적

 

  • 코드의 일관성 유지: 인터페이스를 통해 특정 기능을 강제함으로써, 다양한 클래스들이 공통된 방식으로 동작하도록 할 수 있다.
  • 다형성 구현: 인터페이스 타입으로 객체를 다룰 수 있기 때문에, 하나의 인터페이스로 여러 클래스의 객체를 동일한 방식으로 처리할 수 있다.
  • 유연한 설계: 인터페이스를 사용하면 클래스 간의 결합도를 낮출 수 있어, 더 유연하고 확장 가능한 프로그램을 설계할 수 있다.

 


🔡 예시

// 인터페이스 정의
interface Animal {
    void sound(); // 추상 메서드
    void move();
}

// 인터페이스 구현
class Dog implements Animal {
    @Override
    public void sound() {
        System.out.println("Bark");
    }

    @Override
    public void move() {
        System.out.println("Runs");
    }
}

class Cat implements Animal {
    @Override
    public void sound() {
        System.out.println("Meow");
    }

    @Override
    public void move() {
        System.out.println("Jumps");
    }
}

public class Main {
    public static void main(String[] args) {
        Animal dog = new Dog();
        Animal cat = new Cat();

        dog.sound(); // 출력: Bark
        dog.move();  // 출력: Runs

        cat.sound(); // 출력: Meow
        cat.move();  // 출력: Jumps
    }
}

 

저번 팀과제에서 자바의 객체화를 위해 메서드마다 static을 사용해 메모리에 할당하는 대신 인터페이스나 추상화 클래스 사용하여 Java의 객체지향성을 더 끌어올려보라는 피드백이 있서다. 유지보수 측면이나 메모리 할당 측면에서 훨씬 더 유리하지만 아직 완전히 익숙하지 않아 앞으로 더 사용을 해봐야 할 거 같다.