이숭간 공부기록
[Java] 추상클래스와 인터페이스의 차이 본문
728x90
추상클래스와 인터페이스는 둘다 다형성을 구현하는데 쓰인다는 공통점이 있지만 개념적으로 차이가 있다.
상속은 "같은 종류의 하위 클래스를 만드는 기술"이라면
인터페이스는 "사용방법이 동일한 클래스를 만드는 기술" 이라는 점에서 차이가 있다.
추상클래스란?
- 미완성 설계도
- abstract 키워드로 선언된 클래스
- 추상메서드를 최소 한개 이상 가진다.
- 추상메서드가 없어도 abstract키워드로 선언된 클래스면 추상클래스이다.
추상클래스의 구현
- 서브(자식)클래스에서 슈퍼(부모)클래스의 모든 추상 메서드를 오버라이딩하여 실행가능한 코드로 구현한다.
추상클래스의 목적
- 상속을 위한 클래스로, 객체생성을 위한 클래스가 아니다.
- 단지 여러 클래스의 공통된 부분을 추상화(추출)하여 상속받는 클래스에게 구현을 강제하기 위한것 (메소드의 동작을 구현하는 자식클래스로 책임을 위임
인터페이스란?
- 기본설계도
- 추상메서드와 상수만 가지며, 데이터를 저장하지않는 개발코드와 객체의 통신접점을 의미한다.
- interface키워드로 선언되며 인터페이스는 다중상속이 가능하다
인터페이스의 구현
- 인터페이스의 모든 추상메소드를 구현한 구현클래스를 작성한다.
- implements키워드를 사용해서 구현한다.
- 만약 구현하는 인터페이스가 어떤 상위 인터페이스를 상속하고 있는경우 구현클래스는 상위인터페이스의 모든 추상메소드까지 전부 구현해야한다.
인터페이스의 목적
- 상속받을 서브클래스에게 구현할 메서드의 원형을 알려주고, 이를 구현하도록 하여 클래스의 동작방식을 일치시킨다.
- 구현객체의 같은 동작을 보장하기위한 목적
- 예를들어, 서로 관련없는 클래스에서 공통적으로 사용하는 방식이 필요하지만, 기능은 각각 구현해야할 필요가 있는경우 사용한다.
- EX) JPA의 crud와같은 데이터를 조회,추가, 삭제하는경우 어떤 데이터베이스를 사용하던 crud라는 기능은 같지만 그 구현에는 차이가 있으므로 이럴때 인터페이스를 사용할 수 있다.
추상클래스와 인터페이스의 공통점
- 인스턴스를 생성할 수 없다.
- 자식클래스 또는 구현클래스가 추상 메서드의 구체적인 동작을 구현하도록 책임을 위임한다.
추상클래스와 인터페이스의 차이점
- 애초에 목적이 다르다.
- 추상클래스는 추상메서드를 자식이 구체화하여 그 기능을 확장하는데 목적이 있다.(is kind of) (ex) 가전제품 - TV, 냉장고)
- 인터페이스는 구현 객체의 같은 동작을 보장하는데 목적이 있다.(can do this) ( ex) 날수있다 - 비행기, 새)
- 추상클래스는 클래스이지만 인터페이스는 클래스가 아니다.
- 추상클래스는 단일상속이지만 인터페이스는 다중상속이 가능하다. ( 추상클래스는 일반메소드도 포함하기 때문)
추상클래스 사용 시기 : 상속 관계를 쭉 타고 올라갔을때 같은 조상클래스를 상속하는데 기능까지 완변히 똑같은 기능이 필요한 경우 ( 사람 만이 할수있는 기능을 사람이라는 추상클래스에 선언한다.)
인터페이스 사용 시기 : 상속 관계를 쭉 타고 올라갔을때 다른 조상클래스를 상속하는데 같은 기능이 필요할 경우 인터페이스 사용 ( 말할 수 있다라는 기능을 talkable인터페이스에 선언하고 사람과 동물이 이를 모두 사용한다.)
출처
https://myjamong.tistory.com/150
https://github.com/WeareSoft/tech-interview/blob/master/contents/java.md#클래스-객체-인스턴스의-차이
'공부공부 > Java' 카테고리의 다른 글
[Java] String, StringBuilder, StringBuffer에 대해 알아보자 (0) | 2021.08.02 |
---|---|
[Java] 자바는 Call by Value일까 Call by Reference일까? (0) | 2021.08.02 |
[Java] OOP 객체지향 프로그래밍 (0) | 2021.07.13 |
[Java] Wrapper class란? (0) | 2021.07.13 |
[Java] Optional이란? (1) | 2021.05.24 |