[JAVA] 추상클래스와 인터페이스
추상이란?
실체들 간에 공통되는 특성을 추출한 것
새 사자 고양이 -> 동물
사과 딸기 귤 -> 과일
추상 클래스(Abstract Class)
하나 이상의 추상 클래스(구현 되지 않은 메서드)를 포함하는 클래스
인스턴스화 될 수 없다, 상속 받은 하위 클래스가 추상 메서드를 구현해야 인스턴스화 가능
추상클래스는 왜 쓰는가?
상속 계층에서 자식 멤버의 이름을 통일할 수 있다.
실체 클래스 작성 시 시간절약 가능하다.
실체 클래스 설계 구격을 만들 수 있다.
추상클래스는 어떻게 사용하는가
abstract 키워드 사용 하위는 extends로 상속 받고 추상 메서드 구현 후 사용
추상 메서드 1개 이상 사용 + 실체 메서드 포함 가능 + 정적 메서드 포함 가능
필드(속성) 포함 가능
생성자 소멸자 포함 가능(하위에서 super()로 접근)
하위 클래스는 단 하나의 추상 클래스만 상속가능
인터페이스
클래스가 구현해야 하는 메서드의 집합을 정의, 모든 메서드는 추상메서드이며, 구현X
인터페이스를 통해 동일한 규격을 가지게 할 수 있다.
인터페이스는 어떻게 사용하는가
interface 키워드를 통해 사용
모든 멤버 변수: public static final -> 모든 필드는 상수로 사용해야한다.
모든 메서드(디폴트, 정적 제외): public abstract -> 추상메서드로
디폴트 메서드 포함가능: 구현 제공 -> 객체 생성 후 사용가능
정적 메서드 포함가능: -> 인터페이스로 직접 호출, 구현한 모든 클래스가 공유하는 메서드
클래스는 복수의 인터페이스 상속이 가능하다.
class 자식 extends 추상클 implements 인터페이스1, 인터페이스2 {}
추상 클래스, 인터페이스 비교
구분 | 추상 클래스 | 인터페이스 |
목적 | 클래스의 공통적인 동작을 정의하고 상속받아 재사용하기 위해 사용 | 클래스가 구현해야 하는 동작을 명시적으로 규약(Contract)하기 위해 사용 |
키워드 | abstract | interface |
메서드 | 추상 메서드와 구체 메서드 모두 포함 가능 | 디폴트 메서드와 정적 메서드 외에는 구체 메서드 포함 불가 |
변수 | 인스턴스 변수와 정적 변수 포함 가능 | 상수(public, static, final)만 포함 |
상속 | 단일 상속만 가능 (클래스 다중 상속 불가) | 다중 상속 가능 |
구현 | 서브 클래스에서 extends 키워드 사용 | 클래스에서 implements 키워드 사용 |
생성자 | 생성자를 가질 수 있음 | 생성자를 가질 수 없음 |
사용 용도 | 클래스 간의 공통된 행동이나 상태를 정의하기 위해 사용 | 클래스가 반드시 구현해야 하는 메서드를 정의하기 위해 사용 |
접근 제한자 | 메서드와 변수에 다양한 접근 제한자 사용 가능 | 인터페이스의 메서드는 기본적으로 public (디폴트 메서드 포함) |
다형성 | 제한된 다형성 지원 (단일 상속) | 더 유연한 다형성 지원 (다중 상속) |
추가 가능 기능 | 자바 8부터 디폴트 메서드와 정적 메서드 포함 가능 | 자바 8부터 디폴트 메서드와 정적 메서드 포함 가능 |
이 둘 모두 객체지향의 중요한 부분인 느슨한 결합, 다형성, 의존성 주입을 도와준다.
아직 이런 부분이 와닿진 않아 일단 정리만 해봐야겠다.
다음 포스팅으로..