Computer >> 컴퓨터 >  >> 프로그래밍 >> Java

자바(Java) 클래스와 인터페이스의 차이점 한눈에 정리하기

자바(Java)를 배우다 보면 클래스(Class)인터페이스(Interface)의 차이를 명확히 이해하는 것이 매우 중요합니다. 두 개념은 모두 객체 지향 프로그래밍의 핵심 요소이지만, 역할과 사용 방식에서 뚜렷한 차이가 있습니다. 이 글에서는 클래스와 인터페이스의 특징을 하나씩 살펴보고, 두 개념을 쉽게 비교할 수 있도록 정리해 드립니다.

클래스(Class)란?

클래스는 객체가 가져야 할 속성(변수)동작(메서드)을 정의하는 설계도입니다. 실제 객체를 만들어낼 수 있는 가장 기본적인 단위라고 할 수 있습니다.

  • 객체가 가져야 할 속성과 동작을 정의합니다.
  • 추상 메서드와 일반 메서드를 모두 포함할 수 있습니다.
  • 선언 시 class 키워드를 사용합니다.
  • new 키워드를 통해 인스턴스화(객체 생성)가 가능합니다.
  • 다중 상속을 지원하지 않습니다.
  • 다른 클래스를 상속받을 수 있습니다.
  • 부모 클래스를 상속할 때는 extends 키워드를 사용합니다.
  • 클래스의 멤버는 public, private, protected 접근 제어자를 자유롭게 사용할 수 있습니다.
  • 클래스의 본문은 중괄호 { }로 감싸서 표현합니다.
  • 변수는 일반 변수, static 변수, final 변수 등 다양하게 선언할 수 있습니다.

인터페이스(Interface)란?

인터페이스는 클래스가 구현해야 하는 동작의 목록만을 정의하는 일종의 규약입니다. 즉, 클래스가 '무엇을 해야 하는지'는 알려주지만 '어떻게 해야 하는지'는 정의하지 않습니다.

  • 클래스에 의해 구현될 동작들을 담고 있습니다.
  • 선언 시 interface 키워드를 사용합니다.
  • 인스턴스화(객체 생성)가 불가능합니다.
  • 다중 상속을 지원합니다.
  • 기본적으로 추상 메서드만 포함할 수 있습니다. (참고: Java 8부터는 default 메서드와 static 메서드도 허용됩니다.)
  • 다른 인터페이스를 상속할 때는 extends 키워드를 사용합니다.
  • 모든 변수는 암묵적으로 public static final, 즉 상수로 선언됩니다.
  • 클래스를 상속받을 수는 없습니다.
  • 클래스를 위한 설계도, 즉 청사진(blueprint) 역할을 합니다.
  • 클래스가 반드시 수행해야 할 작업을 정의하되, 그 구현 방법은 강제하지 않습니다.
  • 인터페이스의 모든 멤버는 기본적으로 public입니다.

클래스 vs 인터페이스 핵심 비교

두 개념의 차이를 표로 정리하면 다음과 같습니다.

구분클래스(Class)인터페이스(Interface)
키워드classinterface
인스턴스화가능불가능
다중 상속지원하지 않음지원함
메서드추상 + 일반 메서드기본적으로 추상 메서드만
변수일반, static, final 등 자유롭게 사용모두 public static final(상수)
접근 제어자public, private, protected 사용 가능기본적으로 public
역할객체의 설계도이자 실제 구현체클래스가 구현할 동작의 규약

정리

클래스는 객체를 직접 생성하고 구현을 담당하는 반면, 인터페이스는 클래스가 따라야 할 규칙과 계약을 정의하는 역할을 합니다. 유연하고 확장 가능한 코드를 작성하려면, 공통된 동작을 인터페이스로 추상화하고 세부 구현은 클래스에 맡기는 설계 방식이 권장됩니다. 두 개념의 차이를 정확히 이해하면 자바의 다형성과 객체 지향 설계를 더욱 효과적으로 활용할 수 있습니다.