[Java 개념] 인터페이스 개요

예세림·2024년 7월 23일

Java

목록 보기
9/12

인터페이스 (Interface)

인터페이스는 객체들 간의 상호작용을 정의하는 '약속'입니다. 인터페이스는 모든 메서드가 추상 메서드로, 실제 구현은 없고 메서드의 시그니처만 정의되어 있습니다. 인터페이스는 주로 다음의 특징과 목적을 가지고 있습니다:

  • 모든 메서드는 추상 메서드: 인터페이스 내의 메서드는 기본적으로 publicabstract입니다.
  • 변수는 상수: 인터페이스 내의 변수는 public, static, final로 선언됩니다.
  • 구현(implements): 클래스가 인터페이스를 구현할 때, 인터페이스의 모든 메서드를 구체적으로 정의해야 합니다.
  • 다중 구현 가능: 한 클래스가 여러 인터페이스를 구현할 수 있습니다.
public interface Animal {
    void eat(); // public abstract가 생략됨
    void sleep();
}
public class Dog implements Animal {
    @Override
    public void eat() {
        System.out.println("Dog is eating");
    }
    @Override
    public void sleep() {
        System.out.println("Dog is sleeping");
    }
}

추상 클래스 (Abstract Class)

추상 클래스는 실체가 없는 관념적인 클래스입니다. 이는 구체적인 클래스를 위한 공통적인 속성과 메서드를 정의하며, 일부는 구현을 제공하고 일부는 추상 메서드로 남겨두어 하위 클래스가 반드시 구현하도록 강제합니다.

  • 추상 메서드 포함 가능: 추상 메서드는 abstract 키워드로 선언되며, 하위 클래스에서 반드시 구현해야 합니다.
  • 일부 구현 제공 가능: 추상 클래스는 일반 메서드를 포함할 수 있어 하위 클래스에 공통된 동작을 제공할 수 있습니다.
  • 상속(extends): 추상 클래스는 extends 키워드를 사용해 상속받습니다.
  • 단일 상속: 클래스는 한 번에 하나의 추상 클래스만 상속받을 수 있습니다.
public abstract class Animal {
    public abstract void eat();
    public void breathe() {
        System.out.println("Animal is breathing");
    }
}
public class Cat extends Animal {
    @Override
    public void eat() {
        System.out.println("Cat is eating");
    }
}

인터페이스와 추상 클래스의 차이점

  1. 목적:

    • 인터페이스: 서로 다른 객체들 간의 상호작용을 정의.
    • 추상 클래스: 공통된 속성과 동작을 공유하면서 구체적인 구현은 하위 클래스에서 제공.
  2. 구현 방식:

    • 인터페이스: 모든 메서드가 추상 메서드이며, 다중 구현 가능.
    • 추상 클래스: 일부 메서드는 구현될 수 있으며, 단일 상속만 가능.
  3. 용도:

    • 인터페이스: 다양한 클래스에서 공통된 기능을 강제할 때 사용.
    • 추상 클래스: 공통된 속성과 동작을 공유하는 클래스들을 위한 기본 틀 제공.

상호작용 예시: GUI와 CLI

  • GUI (Graphic User Interface): 사용자가 그래픽 환경에서 상호작용하는 인터페이스. 예를 들어, 윈도우 OS에서는 버튼, 창, 아이콘 등을 통해 사용자와 시스템이 상호작용합니다.
  • CLI (Command Line Interface): 사용자가 명령어를 입력해 상호작용하는 인터페이스. 예를 들어, 터미널이나 커맨드 프롬프트에서 명령어를 통해 시스템과 소통합니다.

요약

  • 인터페이스는 객체 간 상호작용을 위한 '약속'이며, 모든 메서드는 추상적입니다.
  • 추상 클래스는 구체적인 클래스를 위한 공통적인 속성과 동작을 제공하며, 일부는 구현을 제공하고 일부는 추상적으로 남겨둡니다.
  • 상속구현을 통해 객체 지향 설계의 유연성과 확장성을 높입니다.
  • GUICLI는 인터페이스의 실질적인 예로, 사용자와 시스템 간의 상호작용 방식을 정의합니다.

이러한 개념들은 객체 지향 프로그래밍의 핵심으로, 효율적이고 확장 가능한 소프트웨어 설계를 가능하게 합니다.

참고

  • default method : 상속 가능

  • static method : 상속 불가
    (인터페이스 내에서 메서드 구현)

다형성의 장점

  • 부모객체와 상호작용하도록 만들면 모든 자식과 상호작용 가능
  • 인터페이스와 상호작용하도록 만들면 인터페이스를 구현한 객체와도 상호작용 가능

클래스와 인터페이스 비교

특성클래스 (Class)인터페이스 (Interface)
선언 키워드classinterface
인스턴스 생성직접 인스턴스 생성 가능직접 인스턴스 생성 불가능
멤버필드, 메서드, 생성자 등 포함상수와 추상 메서드만 포함 (Java 8 이후 default, static 메서드 포함)
상속단일 상속만 가능다중 구현 가능
접근 제한자모든 접근 제한자 사용 가능메서드는 기본적으로 public, 필드는 public static final
구현의 유무메서드 구현 포함 가능메서드 구현 불가 (Java 8 이후 default, static 메서드 제외)
사용 목적객체의 속성과 동작 정의클래스 간의 공통된 동작을 정의, 상호작용 규약 설정

인터페이스와 추상 클래스 비교

특성인터페이스 (Interface)추상 클래스 (Abstract Class)
선언 키워드interfaceabstract class
인스턴스 생성직접 인스턴스 생성 불가능직접 인스턴스 생성 불가능
멤버상수와 추상 메서드만 포함 (Java 8 이후 default, static 메서드 포함)필드, 추상 메서드, 구체 메서드 포함
상속다중 구현 가능단일 상속만 가능
접근 제한자메서드는 기본적으로 public, 필드는 public static final모든 접근 제한자 사용 가능
구현의 유무메서드 구현 불가 (Java 8 이후 default, static 메서드 제외)일부 메서드 구현 가능, 일부는 추상 메서드로 정의
사용 목적클래스 간의 공통된 동작을 정의, 상호작용 규약 설정공통된 속성과 동작을 공유, 기본 틀 제공

Abstract

인터페이스?

설계도를 위한 설계도
인터페이스는 모든 메소드가 추상메소드

접점?

  • GUI(Graphic User Interface)
    cf.) Windows OS(Operating System)
    그래픽 환경에서 상호작용
  • CLI(Command Line Interface)
    명령어 통해서 상호작용

상호작용 하기 위한 "약속" -> Interface !

상속(extends)가 아닌 구현(implements)
상속: 부모 특성을 자식이 물려 받음.
공통 특성(Animal, People)
포함 관계가 있다.

  • extends로 인터페이스도 인터페이스 상속 가능함

추상클래스

각 동물은 실체가 있는데
Animal은 관념임
추상 클래스로 만들어~

추상클래스를 구현한 클래스가 추상클래스가 될 수 있음
공통조상도 추상클래스 ㄱㄴ

분기점 나눠놓음
분기점 C라는 클래스가 공통조상
개구리는 분기점 C
분기점 C를 상속받음

부모-자식
조상-자손 ㄱㄴ

인터페이스: 완벽히 추상화된 설계도
모든 메서드가 추상메서드 ㅋㅋ

"접점" 구현하는 거라 public 사용(메서드, 변수)

public abstract + 메서드
public static final + 변수

생략되어있지만 default임ㅋㅋ

raw한 초안이었습니다.
이상입니다.

0개의 댓글