[JAVA] 인터페이스란(Interface)? - 추상클래스와의 차이

2024. 12. 9. 22:16·JAVA

안녕하세요.

오늘은 자바의 인터페이스(Interface)에 대해 알아보겠습니다.

또한 인터페이스와 추상 클래스의 차이점에 대해서도 알아보겠습니다.

 

 

 

[ 목차 ]

     

     

     

    인터페이스란?

    인터페이스는, 클래스가 반드시 구현해야하는 메서드들의 집합입니다.

    메서드의 선언만 포함합니다. (구현은 포함하지 않습니다.)

     

     

     

     

     

    인터페이스의 특징

    인터페이스 내의 메서드는 public 과 abstract로 선언됩니다.

    java 8부터는 default(인터페이스내 기본 구현 가능)와 static 메서드를 구현할 수 있습니다.

    클래스는 인터페이스 다중상속이 가능합니다.

    인터페이스 내 변수(필드)를 가질 수 있습니다. 필드는 public static final로 고정됩니다.

     

     

     

     

     

     

    추상 클래스

    일부 메서드는 구현할 수 있습니다.

    하지만 인스턴스는 만들 수 없습니다.(= 필드를 가질 수 없습니다.)

    단일 상속만 지원합니다.

     

     

     

     

     

    인터페이스와 추상 클래스: 개념과 차이점

    인터페이스와 추상 클래스는 둘 다 객체 지향 프로그래밍에서 상속과 다형성을 활용해 코드의 재사용성과 확장성을 높이기 위해 사용됩니다. 하지만, 각각의 목적과 특징에서 중요한 차이가 있습니다.


    1. 인터페이스 (Interface)

    정의

    • 인터페이스는 클래스가 반드시 구현해야 하는 메서드의 청사진을 정의합니다.
    • 메서드와 필드를 포함할 수 있지만, 메서드는 기본적으로 추상 메서드이며, 필드는 public static final로 자동 설정됩니다.

    특징

    • 메서드는 기본적으로 구현되지 않으며, 클래스에서 반드시 구현해야 합니다. (Java 8 이상부터는 default와 static 메서드로 구현 가능)
    • 다중 상속이 가능합니다. 하나의 클래스는 여러 인터페이스를 구현할 수 있습니다.
    • 인터페이스의 모든 메서드는 기본적으로 public입니다.
    • 상태(필드)를 가질 수 없고, 오직 상수만 정의할 수 있습니다.

    예제

    java
    코드 복사
    public interface Animal { void eat(); // 추상 메서드 void sleep(); }
    java
    코드 복사
    public class Dog implements Animal { @Override public void eat() { System.out.println("Dog eats bones."); } @Override public void sleep() { System.out.println("Dog sleeps in a kennel."); } }

    2. 추상 클래스 (Abstract Class)

    정의

    • 추상 클래스는 일부 메서드의 구현을 포함하거나, 포함하지 않을 수 있는 클래스입니다.
    • 주로 **공통된 동작(메서드)**과 **특성(필드)**을 공유할 때 사용됩니다.

    특징

    • 추상 메서드를 가질 수 있으며, 구현된 메서드도 포함할 수 있습니다.
    • 상속을 통해서만 사용됩니다. (직접 인스턴스를 생성할 수 없음)
    • 단일 상속만 가능합니다. 한 클래스는 오직 하나의 추상 클래스만 상속받을 수 있습니다.
    • 일반 필드를 포함할 수 있습니다.

    예제

    java
    코드 복사
    public abstract class Animal { private String name; public Animal(String name) { this.name = name; } public String getName() { return name; } public abstract void makeSound(); // 추상 메서드 }
    java
    코드 복사
    public class Dog extends Animal { public Dog(String name) { super(name); } @Override public void makeSound() { System.out.println("Bark!"); } }

    3. 인터페이스와 추상 클래스의 주요 차이점

    특징인터페이스추상 클래스
    목적 행동(메서드) 정의 공통된 동작과 상태(필드)를 정의
    상속 관계 다중 구현 가능 단일 상속만 가능
    메서드 구현 기본적으로 구현 불가 (default, static 예외) 구현 가능
    필드 상수만 포함 (자동으로 public static final) 일반 필드 포함 가능
    생성자 생성자 없음 생성자 포함 가능
    사용 시점 서로 다른 클래스들이 동일한 동작을 구현해야 할 때 클래스 간에 공통된 동작과 상태를 공유해야 할 때

    'JAVA' 카테고리의 다른 글

    [JAVA] 자바의 Map, 그리고 순회  (0) 2024.12.10
    [JAVA] Stack  (0) 2024.12.07
    [JAVA] Deque + 왜 LinkedList보다 ArrayDeque로 구현하는 것이 더 좋을까?  (0) 2024.12.06
    [Java] Queue  (0) 2024.12.05
    'JAVA' 카테고리의 다른 글
    • [JAVA] 자바의 Map, 그리고 순회
    • [JAVA] Stack
    • [JAVA] Deque + 왜 LinkedList보다 ArrayDeque로 구현하는 것이 더 좋을까?
    • [Java] Queue
    hyeblee
    hyeblee
    감자감자
    • hyeblee
      hyeblee
      hyeblee
    • 전체
      오늘
      어제
      • 분류 전체보기
        • PS
          • Programmers
          • BAEKJOON
          • CODETREE
        • ALGORITHM
        • JAVA
        • CS
          • 면접을 위한 CS전공지식
        • SPRING
        • 회고
    • 블로그 메뉴

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

      • 깃허브
    • 공지사항

    • 인기 글

    • 태그

      상한값
      arrays.sort #collections.sort #list.sort #객체정렬 #배열정렬 #timsort #dual pivot quicksort #정렬 #자바
      자바
      java #스프링부트 #자바버전 #자바 버전 충돌 #jvm
      알고리즘
      백트래킹
      흐른 일수 계산
      날짜와 시간 계산
      숨바꼭질3
      하한값
      BOJ
      반닫힌 구간
      java #deque #자바 #덱
      플레이데이터 백엔드 부트캠프
      backjoon
      16954
      플레이데이터 백엔드 부트캠프 후기
      구간 칠하기
      dfs
      탐색
      플레이데이터 백엔드
      spring #스프링 #스프링부트 #springboot #please sign in
      15652
      java
      spring #springboot #스프링 #스프링부트
      BFS
      흐른 시간 계산
      플레이데이터 백엔드 후기
      왔다 갔던 구역2
      백준
    • 최근 댓글

    • 최근 글

    • hELLO· Designed By정상우.v4.10.3
    hyeblee
    [JAVA] 인터페이스란(Interface)? - 추상클래스와의 차이
    상단으로

    티스토리툴바