[Java] 인터페이스 & 구현체

G·2024년 6월 25일
0

Java

목록 보기
12/21
post-thumbnail

✍️ 인터페이스

✏️  인터페이스 (Interface) 란?

  • 인터페이스는 클래스와 비슷하지만, 오로지 추상 메서드와 상수만을 포함합니다.
  • 인터페이스는 객체의 행위를 정의하며, 이를 구현하는 클래스는 해당 행위를 구체적으로 구현하도록 강제합니다.

✏️  인터페이스 장점

  • 코드의 유연성과 확장성: 인터페이스를 사용하면, 해당 인터페이스를 구현한 다양한 클래스를 사용할 수 있습니다. 또한 나중에 구현체를 쉽게 변경할 수 있습니다.
  • 다형성: 인터페이스는 다형성을 가능하게 하여, 하나의 인터페이스 타입으로 다양한 구현체를 처리할 수 있습니다.
  • 유지보수성: 인터페이스는 구현과 분리되어 있으므로, 구현체를 변경해도 인터페이스를 사용하는 코드는 변경할 필요가 없습니다.



✏️  인터페이스 선언

  • 인터페이스를 선언할 때는 interface 키워드를 사용합니다.
  • 인터페이스 내 변수반드시 public static final 로 선언되며, 이는 생략 가능합니다.
  • 인터페이스 내 메서드반드시 public abstract 로 선언되며, 이 또한 생략 가능합니다.
  • Java 8 이전은, 인터페이스 메서드는 구현부가 없는 추상 메서드로 작성합니다.
  • 하지만 Java 8 이후로, 인터페이스는 디폴트 메서드와 정적 메서드도 포함할 수 있습니다.
    {접근 제어자} interface {인터페이스명} {
    	public static final {타입} {상수명} = {};
        ...
        public sbstract {타입} {메서드명}();
        ...
    }

    인터페이스 내 메서드 예시

    public interface MyInterface {
        void doSomething(); // 추상 메서드
        
        default void defaultMethod() { // 디폴트 메서드
            System.out.println("This is a default method.");
        }
        
        static void staticMethod() { // 정적 메서드
            System.out.println("This is a static method.");
        }
    }

✏️  인터페이스 구현

  • 인터페이스는 추상 클래스와 마찬가지로 자신이 직접 인스턴스를 생성할 수 없습니다.
  • 인터페이스의 추상 메서드를 구현해 줄 클래스를 작성해야 합니다.
    class {클래스명} implements {인터페이스명} {...}

✏️  인터페이스 상속

  • Java에서는 클래스의 다중 상속을 지원하지 않지만, 인터페이스를 통해 다중 상속을 사용할 수 있습니다.
  • 클래스가 인터페이스를 상속받을 때는 implements 키워드를 사용합니다. 여러 개의 인터페이스를 상속받을 수 있습니다.
    // 단일 상속
    class {클래스명} extend {상위 클래스 명} implements {인터페이스 명} { ... }
    // 다중 상속
    class {클래스명} extend {상위 클래스 명} implements {인터페이스 명1}, {인터페이스 명2} { ... }

✏️  인터페이스 예시

// 인터페이스 정의
interface Animal {
    void makeSound();
}

interface Pet {
    void play();
}

// 클래스가 두 개의 인터페이스를 구현
class Dog implements Animal, Pet {
    @Override
    public void makeSound() {
        System.out.println("Woof!");
    }

    @Override
    public void play() {
        System.out.println("Playing fetch!");
    }
}

// 사용 예시
public class Main {
    public static void main(String[] args) {
        Dog dog = new Dog();
        dog.makeSound();
        dog.play();
    }
}



✍️ 구현체

✏️  구현체 (Implementation) 란?

💡 인터페이스나 추상 클래스에서 정의된 메서드들을 실제로 구현하는 클래스

  • 인터페이스나 추상 클래스는 메서드의 선언만 있고, 실제 동작은 정의되어 있지 않습니다.
  • 이러한 인터페이스나 추상 클래스를 실제 작동하는 형태로 만든 클래스를 구현체라고 합니다.
  • List<String> list = new ArrayList<>(); 에서는 ArrayList가 List 인터페이스의 구현체입니다.

    추상 클래스


✏️  구현체의 역할

  • 구현 세부사항 정의: 인터페이스나 추상 클래스가 선언한 메서드들의 실제 동작을 정의합니다.
  • 다양한 동작 제공: 동일한 인터페이스를 구현하는 여러 구현체가 서로 다른 동작을 제공할 수 있습니다.
  • 코드 분리: 구현 세부사항을 인터페이스와 분리하여 코드의 가독성과 유지보수성을 높입니다.

✏️  구현체의 장점

  • 유연성: 구현체를 변경하거나 추가할 때, 인터페이스 타입을 사용하는 코드에는 영향을 미치지 않으므로 유연하게 대응할 수 있습니다.
  • 유지보수성: 코드의 구현 부분을 인터페이스와 분리하여 유지보수성을 높일 수 있습니다. 인터페이스가 변경되지 않는 한, 구현체를 자유롭게 변경할 수 있습니다.
profile
기!술! 블로그

0개의 댓글