230223 TIL #16 리팩토링/추상클래스와 인터페이스의 차이점

김춘복·2023년 2월 23일
0

TIL : Today I Learned

목록 보기
16/571

230223 Today I Learned

오늘은 java에서 지네릭스와 JVM에 대해 공부했다. 오늘 TIL에는 어제 TIL에 해야할 것으로 적어놨던 것들중 두 가지에 대해 정리해보려 한다.


리팩토링


인터페이스와 추상클래스의 차이

참고사이트1
참고사이트2
참고사이트3

  • 추상클래스 : 미완성설계도. 추상메서드를 선언해 상속으로 자손클래스가 완성하도록 유도하는 클래스. 추상메서드가 있다는 것 외에는 일반 클래스와 다를 바가 없다. 다중상속 불가능.

  • 인터페이스 : 기본설계도. 인터페이스끼리 다중상속가능. 다른클래스 작성에 도움주는 목적으로 작성. 생성자와 일반변수는 가질 수 없다. 일반적으로 ~able의 형용사형으로 네이밍.

공통점

  1. 추상메서드를 가지고 있다.
  2. 인스턴스화 할 수 없다.
  3. 상속받아 구현한 구현체의 인스턴스를 사용해야 한다.
  4. 구현, 상속한 클래스는 추상메소드를 반드시 구현해야 한다.

차이점

  1. extends / implements
  2. 다중상속 불가능 / 다중상속 가능
  3. 생성자와 일반변수 사용가능 / 생성자와 일반변수 불가능하고 상수만 사용가능

사용 예

  • 추상클래스는 상속관계에서 그대로 자신의 기능을 하위로 확장시키는 느낌으로 사용. 클래스간의 상속 관계 구축에 초점을 맞춘다.
    상속받을 클래스들이 공통으로 가지는 메소드와 필드가 많아 중복 멤버의 통합을 할 때.
    상속할 객체들의 공통점을 찾아 추상화시킬 때. 명확한 계층 구조가 필요할 때.

  • 인터페이스는 상속관계에 얽매이지 않고 공통기능이 필요할 때 마다 추상메서드를 정의해두고 구현(implements)하는 식으로 추상클래스보다 자유롭게 붙였다 떼며 사용.
    구현 객체가 같은 동작을 한다는 것을 보장하는 기능에 초점.
    다중구현이 가능하기 때문에 빈 껍데기 인터페이스를 선언해 마커 인터페이스로도 이용 가능.
    서로 관련이 없는 클래스를 묶어주고 싶을 때.

  • 정리 : 추상클래스는 상하관계, 상속관계에 집중해 물려줄 것이 많을 때 사용하고,
    인터페이스는 기능 구현에 집중해 추상클래스보다 좀 더 자유롭게 사용.


해야할 것

profile
Backend Dev / Data Engineer

0개의 댓글