Java에서 Class와 Interface는 객체지향 프로그래밍의 핵심 구성 요소
두 개념 모두 추상화를 제공하지만 목적과 사용방법에서 차이가 있음
클래스(Class)
- 정의:
클래스는 객체의 설계도 또는 틀로 간주됨. 클래스는 객체의 상태(속성)와 행동(메소드)을 정의함
- 상속:
클래스는 다른 클래스로 부터 상속(extends)받을 수 있음, 이를 통해 코드 재사용과 확장성을 증가시킴.Java에서 클래스는 단일 상속만을 지원함, 하나의 클래스는 오직 하나의 다른 클래스로 부터만 상속받을 수 있음
- 인스턴스화:
클래스는 인스턴스화될 수 있으며, 이 과정을 통해 메모리에 객체가 생성됨MyClass obj = new MyClass(); //이는 MyClass 타입의 객체를 생성함
- 접근 제어자:
클래스는public,private,protected와 같은 접근제어자를 사용해 데이터 캡슐화와 보안을 제공함
인터페이스(Interface)
1.정의:
인터페이스는 메소드의 시그니처만을 정의하는 타입임.
구현이 전혀 없거나(Java8부터는) 디폴트 메소드 및 정적 메소드를 포함할 수 있음
- 구현:
인터페이스는 클래스에 의해 '구현(implemented)'됨.
클래스는 인터페이스에 정의된 모든 메소드를 구현해야 함.
Java에서 클래스는 여러 인터페이스를 구현할 수 있음
- 다중 상속:
인터페이스는 다중 상속을 지원함.
하나의 인터페이스는 다른 인터페이스로 부터 상속받을 수 있음
- 추상화 수준:
인터페이스는 보다 높은수준의 추상화를 제공함.
인터페이스는 클래스가 '할 수 있는것(what it can do)'에 집중하고
클래스는'어떻게 하는지(how it does)'에 집중함
클래스
차이점
- 상속 vs 구현:
클래스는 상속을 통해 다른 클래스의 속성과 행동을 확장함.
인터페이스는 구현을 통해 클래스에 새로운 행동을 추가함
- 메소드 정의 :
클래스는 메소드의 실제 구현을 포함하지만,
인터페이스는 주로 메소드 시그니처(반환 타입, 이름, 매개변수)만을 정의함
- 생성자 :
클래스는 생성자를 가질 수 있지만,
인터페이스는 생성자를 가질수 없음
- 인스턴스 변수:
클래스는 상태(인스턴스 변수)를 가질수 있지만,
인터페이스는 상태를 가질수 없음(단, 상수는 예외).
- 다중 상속:
클래스는 다중 상속을 지원하지 않음,
인터페이스는 지원함