심심한잉여의 잡동사니

[JAVA] 추상 클래스 VS 인터페이스 본문

코딩일기/Java

[JAVA] 추상 클래스 VS 인터페이스

심심한잉여 2022. 3. 31. 19:51
반응형

추상 클래스란?
추상 메소드가 1개 이상 있는 클래스이다.

클래스를 설계도라고 했을 때 추상 클래스는 미완성 클래스이다.

추상메소드란?
선언부만 작성하고 구현부는 작성하지 않은 채로 남겨 둔 것이 추상메서드이다.
추상 메서드는 상속받는 클래스에 따라 달라질 수 있다.

추상 클래스 규칙
1. 추상 클래스는 키워드 abstract를 붙여 사용한다.
2. 추상 메서드를 포함하지 않은 클래스에서도 abstract를 붙여 추상 클래스로 지정이 가능하다.
3. 클래스를 abstract를 붙여 추상 클래스로 지정하면 new를 통해 객체를 직접 생성이 불가능하다.
4. 메소드에 abstract를 사용할 경우 interface의 메소드와 같이 구현 부분은 없다.
5. abstract로 선언한 메소드를 자식 클래스에서 반드시(강제) 구현해야한다.(오버라이딩)
6. extends를 사용하여 상속받는다.

 


인터페이스란?
일종의 추상클래스로 볼 수 있으며 추상 메소드를 가지지만
추상클래스보다 추상화 정도가 높다.
추상클래스와 달리 몸통을 갖춘 일반 메서드, 멤버변수를 구성원으로 가질 수 없다
(1.8버전부터 default를 사용해 가질 수 있다.)

추상 클래스는 미완성 클래스라고 했을 때 밑그림만 있는 기본 설계도로 볼 수 있다.

인터페이스 규칙
1. 추상 클래스처럼 완전한 것이기 때문에 그 자체만으로 사용되기 보다
   다른 클래스를 작성하는 데 도움을 줄 목적으로 작성된다.
2. 구현 메소드를 가질 수 없다.(1.8버전부터 가능함)
3. 모든 멤버 변수는 public static final이어야 하며, 이를 생략할 수 있다.
4. 모든 메서드는 public abstract이어야 하며, 이를 생략할 수 있다.
5. 다중상속이 가능하다.
6. implements를 사용하여 상속받는다.

public static final을 사용하는 이유
인터페이스 변수는 아무 인스턴스도 존재하지 않는 시점이기 때문에 스스로 초기화 될 권한이 없다.
때문에 public static final를 사용해 구현 객체의 같은 상태를 보장한다.


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


 

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

 

반응형

'코딩일기 > Java' 카테고리의 다른 글

[Java] 리플렉션 Class 클래스  (0) 2022.04.11
[JAVA]POJO, DTO, DAO, VO  (0) 2022.04.07
[JAVA] DTO와 VO  (0) 2022.03.30
[JAVA] 디자인패턴 - 싱글톤  (0) 2022.03.20
[JAVA] JAVA8 버전과 JAVA 11 버전의 특징  (0) 2022.03.15