오늘은 자바의 추상 클래스와 인터페이스에 대해 알아보고
추상 클래스와 인터페이스의 차이점에 대해 알아보려고 합니다.
최대한 쉽게 설명하고자 하여,
자세한 내용은 생략하고 간단하게 개념과 예제 정도로
기본 개념을 알아보겠습니다.
추상 클래스란?
이 그림을 보면 무슨 생각이 떠오르시나요?
아마도 모두 동물이라는 점을 떠올리실 겁니다.
추상 클래스는 이러한 구조와 비슷합니다.
사슴과 새, 상어의 공통점인 동물이라는 점은 추상 클래스라 할 수 있고,
동물에서 좀 더 구체화된 사슴과 새, 상어는 실체 클래스라 할 수 있습니다.
다시 설명하자면,
각 클래스의 공통적인 특성을 추출해 선언한 클래스를 추상 클래스라고 부릅니다.
사슴과 새와 상어가 모두 동물을 뿌리로 하듯이
실체 클래스도 추상 클래스를 뿌리로 하기 때문에
추상 클래스와 실체 클래스는 상속 관계입니다.
위에 내용을 다음과 같이 정리할 수 있습니다.
- 추상 클래스는 실체 클래스의 공통적인 특성을 추출해 선언한 클래스이다.
- 추상 클래스와 실체 클래스는 상속 관계를 갖는다.
- 실체 클래스는 추상 클래스의 모든 특성을 갖고, 추가적인 특성을 가질 수 있다.
abstract
추상 클래스는 그것이 추상 클래스임을 나타내기 위하여
'abstract'키워드를 붙여 클래스를 선언합니다.
1
2
3
|
public abstract class determination{
}
|
cs |
추상 메소드
추상 메소드는 메소드 실행 내용인 중괄호{} 없이 선언되는 메소드입니다.
만약 모든 동물이 같은 메소드 실행 내용을 갖는다면
추상 메소드를 사용할 필요가 없습니다.
하지만 각 동물마다 같은 메소드에 대한 실행 내용이 다르다면 어떨까요?
예를 들어보겠습니다.
모든 동물은 모두 소리를 냅니다.
하지만 모든 동물이 같은 소리를 내는 것은 아닙니다.
이러한 차이를 만약 자바로 구현할 때
추상 클래스에서 일반 메소드로 구현한다면
모든 동물이 같은 소리를 내게 됩니다.
이러한 문제점을 해결하기 위한 것이 '추상 메소드'입니다.
추상 메소드는 메소드가 선언만 되어 있고,
반드시 자식 메소드에서 오버라이드 되어야 하는 메소드입니다.
자식 메소드에서 실행 내용을 달리할 수 있는 것입니다.
앞서 동물의 울음소리로 예를 들자면,
소리를 낸다는 메소드를 추상 메소드를 선언하고
강아지 클래스에서 추상 메소드를 오버라이드 하여
실행 내용을 "왈왈"로 바꿀 수 있는 것입니다.
추상 메소드도 추상 클래스와 마찬가지로 'abstract' 키워드를 사용해
추상 메소드라는 것을 나타냅니다.
1
2
3
4
5
|
public abstract class determination{
public abstract void Sound(); //중괄호가 없고 메소드 실행 내용이 없다.
}
|
cs |
추상 클래스는 이러한 추상 메소드를 한 개 이상 가져야 합니다.
인터페이스란?
그렇다면 인터페이스는 무엇일까요?
쉽게 말해, 인터페이스는 추상 클래스보다 더욱 추상화된 클래스입니다.
보통 추상 클래스를 설계도에 비교하곤 하는데요,
추상 클래스가 덜 완성된 설계도에 필요에 따라 옵션을 붙여서 설계를 할 수 있는 설계도라면,
인터페이스는 완성된 게 아무것도 없는 기본 설계도에 가깝습니다.
따라서 인터페이스는 일반 클래스와 달리
추상 메소드와 상수 필드만을 갖습니다.
인터페이스를 정리하자면 다음과 같습니다.
- 추상 클래스처럼 다른 클래스 작성에 도움이 되는 클래스이다.
- 추상 메소드와 상수 필드만을 가질 수 있다.
- 상수 필드는 인터페이스에 고정된 값이라 public static final로 선언된다.
- 인터페이스의 메소드는 모두 추상 메소드이다.
추상 클래스와 인터페이스의 공통점과 차이점
추상 클래스와 인터페이스의 공통점
- 두 클래스 모두 실체 클래스를 구성하는데 도움이 되는 목적으로 작성하는 클래스이다.
- 두 클래스 모두 인스턴스화, 즉 객체를 생성할 수 없다.
- 추상 메소드가 사용된다.
추상 클래스와 인터페이스의 차이점
- 추상 클래스는 단일 상속만 가능하지만 인터페이스는 다중 상속이 가능하다.
- 추상 클래스에서는 필드나 일반 메소드 등이 생성 가능하지만 인터페이스에서는 불가능하다.
앞선 내용들을 정리하여
간단하게 공통점과 차이점을 정리해봤습니다.
그렇다면 크게 다를 것 없어 보이는 두 클래스를 왜 따로 사용하는 것일까요?
이는 두 클래스의 사용 목적을 봐야 합니다.
추상 클래스는 부모 자식 간의 상속관계에 초점이 맞춰져 있습니다.
즉, 객체의 공통점이 부모 클래스에 추상화되어 있고,
자식 클래스에서는 부모 클래스의 모든 특성을 이어받으며
자신만의 독특한 특성을 갖기도 합니다.
반면, 인터페이스는 기능에 초점을 맞추고 있습니다.
상속과 큰 관련 없이 특정 기능을 객체에서 구현해야 할 때
즉, 구현 객체가 같은 동작을 할 수 있게 만드는 것이 인터페이스의 사용 목적입니다.
추상 클래스와 인터페이스에 대해 알아봤습니다.
잘못된 내용이나 오류 발견 시
댓글이나 메일 주시면 감사하겠습니다. 🙇♂️
'내가 공부하려고 올리는 > 자바' 카테고리의 다른 글
자바 - 자료구조 / Java Collection Framework(JCF) 초간단 쉽게 알아보기 (0) | 2021.11.15 |
---|---|
자바 - 자바 초짜 프로젝트 MVC 패턴으로 수정하기 (1) | 2021.10.23 |
자바 - 배열로 석차 구하기 (0) | 2021.10.13 |
자바 - 클래스 타입변환 (0) | 2021.09.14 |
댓글