[Java] Interface란? 클래스와 다른 점은?

2025. 8. 3. 05:01·개발 (Development)/Java

Java를 공부하다 보면 interface라는 개념이 등장합니다. 처음에는 추상 클래스와 비슷하게 느껴질 수 있지만, 인터페이스는 Java에서 매우 중요한 설계 도구입니다. 이번 글에서는 interface의 정의부터 사용 예시, 특징까지 정리해 보겠습니다.

1. 인터페이스란 무엇인가요?

Java에서 interface는 클래스가 구현해야 할 메서드의 목록을 명세한 일종의 규격서입니다. 실제 동작(구현)은 포함하지 않고, 메서드 이름과 매개변수 등 구조만 정의합니다. 클래스가 이 인터페이스를 implements로 구현하면, 반드시 해당 메서드들을 정의해야 합니다.

public interface Animal {
    void sound();
}

Animal 인터페이스를 구현하는 클래스는 sound() 메서드를 반드시 정의해야 합니다.

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

2. 인터페이스의 주요 특징

항목 설명
모든 메서드는 기본적으로 abstract 구현 없이 선언만 존재함 (단, Java 8 이후부터는 default, static 메서드 허용)
모든 필드는 자동으로 public static final 즉, 상수만 선언 가능
다중 구현 가능 하나의 클래스가 여러 인터페이스를 동시에 구현할 수 있음
구현 강제 인터페이스를 구현한 클래스는 모든 메서드를 반드시 정의해야 함

3. 클래스와의 차이점

구분 클래스 인터페이스
상속 가능성 단일 상속만 가능 여러 개 구현 가능
메서드 구현 포함 가능 구현 불가 (default 메서드 제외)
목적 상태와 동작을 모두 가짐 오직 동작(기능)의 명세만 가짐

4. 인터페이스의 장점과 활용

  • 다형성(polymorphism): 여러 클래스가 같은 인터페이스를 구현하면, 해당 인터페이스 타입으로 처리 가능
  • 결합도 낮추기: 코드가 구현체가 아닌 인터페이스에 의존하도록 하여 유연한 설계 가능
  • 전략 패턴, 템플릿 패턴 등 디자인 패턴의 기반: 다양한 패턴에서 인터페이스가 핵심 역할

예시: 결제 전략을 인터페이스로 정의

public interface PaymentStrategy {
    void pay(int amount);
}

public class CardPayment implements PaymentStrategy {
    public void pay(int amount) {
        System.out.println("카드로 " + amount + "원 결제");
    }
}

5. 마무리

Java의 인터페이스는 객체지향 설계에서 빠질 수 없는 중요한 개념입니다. 인터페이스를 잘 활용하면 코드의 확장성과 유지보수성을 높일 수 있습니다. 실무에서도 다양한 라이브러리나 프레임워크에서 인터페이스를 적극적으로 활용하므로, 인터페이스의 원리와 특징을 제대로 이해하는 것이 중요합니다.

반응형

'개발 (Development) > Java' 카테고리의 다른 글

[Java] JPA에서 DTO는 Interface로 구현할까? Class로 구현할까?  (4) 2025.08.03
[Java] MyBatis와 JPA 속도 비교: 어떤 상황에 어떤 선택이 더 나을까?  (0) 2025.08.03
[Java] MyBatis만 쓰던 내가 JPA를 처음 접했을 때 이해한 구조 정리  (0) 2025.08.03
[Java] Spring Boot 프로젝트에서 MyBatis와 JPA를 함께 사용하는 방법과 오류 해결 과정  (0) 2025.08.03
[Java] Spring Boot 2.x + Java 11 환경에서 JPA Native Query와 DTO 매핑 문제 해결 기록  (4) 2025.08.03
'개발 (Development)/Java' 카테고리의 다른 글
  • [Java] JPA에서 DTO는 Interface로 구현할까? Class로 구현할까?
  • [Java] MyBatis와 JPA 속도 비교: 어떤 상황에 어떤 선택이 더 나을까?
  • [Java] MyBatis만 쓰던 내가 JPA를 처음 접했을 때 이해한 구조 정리
  • [Java] Spring Boot 프로젝트에서 MyBatis와 JPA를 함께 사용하는 방법과 오류 해결 과정
LoopThinker
LoopThinker
모르는 것을 알아가고, 아는 것을 더 깊게 파고드는 공간
  • LoopThinker
    CodeMemoir
    LoopThinker
  • 전체
    오늘
    어제
    • 분류 전체보기 (216) N
      • 개발 (Development) (151) N
        • Algorithm (1)
        • Angular (1)
        • AWS (4)
        • DeepSeek (2)
        • Docker (7)
        • Git (3)
        • Java (30)
        • JavaScript (4)
        • Kafka (5)
        • Kubernetes (4)
        • Linux (6)
        • PostgreSQL (37) N
        • Python (26)
        • React (3)
        • TypeScript (3)
        • Vue.js (5)
        • General (10)
      • 데이터 분석 (Data Analysis) (1)
      • 알고리즘 문제 풀이 (Problem Solving.. (27)
      • 자격증 (Certifications) (24)
        • ADsP (14)
        • 정보처리기사 (4)
        • Linux Master (5)
        • SQLD (1)
      • 기술 동향 (Tech Trends) (10)
      • 기타 (Others) (3)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    오답노트
    DevOps
    PostgreSQL
    springboot
    백준온라인저지
    JPA
    백준자바
    deepseek
    AWS
    Linux
    ADsP
    timescaledb
    javascript
    Kubernetes
    MyBatis
    typescript
    python
    Linux master
    데이터분석
    docker
    Kafka
    리눅스 마스터 2급 2차
    Vue.js
    백준알고리즘
    JSON
    java
    리눅스 마스터 2급
    백준
    pandas
    자바
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
LoopThinker
[Java] Interface란? 클래스와 다른 점은?
상단으로

티스토리툴바