본문 바로가기

CS

추상클래스와 인터페이스

추상 클래스 - 객체들의 공통 특성들을 모아놓은 클래스

추상 클래스는 여러 자식들이 가지고 있는 공통된 속성들을 뽑아서 하나의 클래스를 만들어 놓은 것을 뜻한다. 그래서 하위 클래스에서도 상속이라는 키워드를 사용하여 이 추상 클래스를 상속받아 객체를 구체화시켜간다. 이때 상속의 의미는 ~의 한 종류라는 의미를 가지게 된다.

  • 하위 클래스들의 공통점들을 모아 추상화하여 만든 클래스
  • 다중 상속이 불가능하여 단일 상속만 허용합니다
  • 추상 메소드 외에 일반클래스와 같이 일반적인 필드, 메서드, 생성자를 가질 수 있습니다.
  • 추상화(추상 메서드)를 하면서 중복되는 클래스 멤버들을 통합 및 확장을 할 수 있습니다.
  • 클래스간의 연관 관계를 구축하는 것에 초점을 둡니다.

인터페이스 - 객체 생성을 위한 설계도

객체가 아니라 추상 자료형입니다. 객체가 아니기에 생성자도 사용할 수 없습니다. 오로지 상수와 추상 메서드만 가질 수 있고 이것을 다른 객체가 구현합니다. 그래서 자바에서 구한하다(implement)라는 키워드를 사용하는것입니다. 이때 구현의 의미는 ~할 수 있는이라는 의미를 가집니다.

  • 내부의 모든 메서드는 public abstract로 정의(default 메소드 제외)
  • 내부의 모든 필드는 public static final 상수
  • 클래스에 다중 구현 지원을 지원합니다.
  • 인터페이스 끼리는 다중 상속 지원합니다.
  • 하위 멤버의 중복 메서드 통합을 어느정도 할 수는 있겠지만, 필드는 상수이기 때문에 중복 필드 통합은 불가능 합니다.
  • 공통 기능이 필요할 때마다 추상 메서드를 정의해놓고 구현(implement)하는 식으로 추상클래스보다 자유롭게 붙였다 뗏다 사용됩니다.
  • 인터페이스는 클래스와 별도로 구현 객체가 같은 동작을 한다는 것을 보장하기 위해 사용하는 것에 초점을 맞춥니다.
  • 다중 구현이 된다는 점을 이용해, 내부 멤버가 없는 빈 껍데기 인터페이스를 선언하여 마커 인터페이스로서 이용 가능합니다.

추상클래스 생각할 때에는 복제를 떠올리고, 인터페이스를 생각할 때에는 계약서, 설계도 라고 생각하면 될 것 같다. 예를 들어서 집을 만든다고 할 때, 집에 전체적인 부분은 추상클래스로 복제하고, 문이나 창문, 굴뚝 등은 인터페이스를 참고해 변경시켜준다고 생각하면 이해가 쉽다.

추상 클래스와 인터페이스의 차이점을 정확히 알아야하는 이유는 두 개의 사용처가 완전히 다르기 때문이다. 추상 클래스는 많은 객체를 생성해야 할 때 각각의 객체에 공통점과 개발의 효율성을 위해 생성하지만, 인터페이스는 수많은 개발자가 함께 협업을 할 때 객체 간의 통일성을 강제하기 위한 용도로 많이 사용된다.

공통점

둘 다 하위 클래스에서 추상 클래스를 모두 구현해야 한다.

차이점

추상 클래스(Abstract Class) 인터페이스(Interface)
상속하여 공통된 기능을 만들고, 확장하기 위함 구현하는 객체들이 같은 동작을 보장하기 위함
다중상속 불가능 다중상속 가능
생성자와 일반변수 모두 가질 수 있다. 생성자와 일반변수를 가질 수 없다.
메서드를 부분적으로 구현할 수 있다. 메서드 선언만 가능하다
extends 키워드를 사용한다. implements 키워드를 사용한다.

추상화 클래스

  • 관련성이 높은 클래스 간에 코드를 공유하고 싶은 경우
  • 추상 클래스를 상속 받을 클래스들이 공통으로 가지는 메소드와 필드가 많거나, public이외의 접근자 선언이 필요한 경우
  • 각 인스턴스에서 상태 변경을 위한 메소드가 필요한 경우

인터페이스

  • 서로 관련성이 없는 클래스들이 인터페이스를 구현하게 되는 경우.
  • 특정 데이터 타입의 행동을 명시하고 싶은데, 어디서 그 행동이 구현되는지는 신경쓰지 않는 경우.
  • 다중상속을 허용하고 싶은 경우

참고한 사이트

'CS' 카테고리의 다른 글

Git과 Github  (0) 2023.01.12
트랜잭션 (Transaction)  (0) 2023.01.11
UDP/TCP의 특징  (0) 2023.01.11
객체지향 5원칙(SOLID)  (0) 2023.01.10
디자인 패턴  (0) 2023.01.09