Interface 와 Class

상곤·2024년 9월 10일

Java

목록 보기
1/22
post-thumbnail

1. 인터페이스(Interface)

인터페이스는 클래스가 가져야 할 메서드(함수)들의 청사진(설계도)을 제공한다. 인터페이스 내에서는 메소드의 선언부만 있고, 구체적인 구현은 없다


2. 클래스(Class)

클래스는 인터페이스에서 선언된 메서드를 구현하는 실제 로직을 담고 있다. 즉, 인터페이스는 "이런 메소드가 있어야 해!"라고 선언하고, 클래스는 "이 메소드는 이렇게 동작할 거야"라고 구체적인 동작 방식을 제공한다.


3. 예시

인터페이스

public interface Animal {
    void sound();  // 동물 소리를 내는 메소드 (구현은 없음)
    void move();   // 동물이 움직이는 메소드 (구현은 없음)
}
  • Animal 인터페이스는 모든 동물이 가져야 할 공통된 메서드를 선언해 둔다. 각 동물이 소리를 내거나 움직이는 방법이 다를 수 있지만, 공통적으로 소리움직임이라는 행동을 수행해야 한다는 것을 선언한다.

클래스

public class Dog implements Animal {
    @Override
    public void sound() {
        System.out.println("The dog barks: Woof Woof!");
    }

    @Override
    public void move() {
        System.out.println("The dog runs.");
    }
}
  • Dog 클래스는 Animal 인터페이스를 구현(implements) 한다
  • 여기서는 sound() 메소드를 구체적으로 정의해서 "강아지가 짖는 소리"로 구현하고, move() 메소드는 "강아지가 뛰는" 동작으로 구현한다.
public class Bird implements Animal {
    @Override
    public void sound() {
        System.out.println("The bird chirps: Tweet Tweet!");
    }

    @Override
    public void move() {
        System.out.println("The bird flies.");
    }
}
  • 이번에는 Bird 클래스가 Animal 인터페이스를 구현한다. 새는 짖는 대신 짹짹 소리를 내고, 뛰는 대신 날아다니는 동작을 한다.

4. 인터페이스를 사용

public class Main {
    public static void main(String[] args) {
        Animal dog = new Dog();  // 인터페이스 타입으로 객체를 생성
        Animal bird = new Bird(); // 인터페이스 타입으로 다른 객체를 생성

        dog.sound();  // 결과: The dog barks: Woof Woof!
        dog.move();   // 결과: The dog runs.

        bird.sound(); // 결과: The bird chirps: Tweet Tweet!
        bird.move();  // 결과: The bird flies.
    }
}
  • Animal 인터페이스를 통해 DogBird 객체를 동일한 타입으로 취급할 수 있다.
  • DogBird는 서로 다른 클래스지만, 공통적으로 Animal 인터페이스를 구현했기 때문에, Animal 타입으로 다룰 수 있다.

왜 인터페이스를 사용할까?

  1. 유연성: 코드가 더 유연해진다. 위 예제에서, Main 클래스는 Animal 인터페이스를 통해 동물 객체를 다루기 때문에 DogBird구체적인 구현에 의존하지 않는다. 이는 나중에 새로운 동물(예: Cat)이 추가되더라도 Main 클래스를 변경할 필요 없이 새 객체를 바로 사용할 수 있다는 의미이다.
  2. 다형성(Polymorphism): 인터페이스를 사용하면, 다형성을 이용할 수 있다. 이는 하나의 인터페이스 타입 변수가 여러 객체 타입을 참조할 수 있다는 것을 의미힌다. 위에서 Animal 타입 변수가 DogBird 객체를 참조할 수 있는 것이 바로 다형성이다.
  3. 표준화: 인터페이스는 모든 클래스가 따라야 할 일종의 계약이다. 이는 팀 작업 시 특히 유용하다. 모든 개발자가 인터페이스를 기반으로 코드를 작성하면, 클래스가 어떤 메서드를 가져야 하고 어떻게 동작해야 하는지 미리 알 수 있기 때문에 협업이 쉬워진다.
  4. 유지 보수성: 인터페이스를 사용하면, 구현체를 쉽게 교체할 수 있다. 예를 들어 Dog 클래스의 sound() 메소드가 나중에 "멍멍"에서 "왈왈"로 바뀐다면, 다른 코드에 영향을 주지 않고 Dog 클래스만 수정하면 된다.

인터페이스와 클래스 구분의 이유

자바에서 인터페이스와 클래스의 구분은 객체지향 프로그래밍 원칙을 따르는 것이며, 코드의 유연성확장성, 다형성을 극대화하는 데 중요한 역할을 한다.

따라서, 인터페이스를 통해 메소드의 설계도를 먼저 정의하고, 이를 여러 클래스가 각각 구체적인 방식으로 구현함으로써, 더 모듈화되고 관리하기 쉬운 코드를 작성할 수 있다.

profile
🫠

0개의 댓글