언어/Java

추상클래스와 interface 의 차이?

DH_PARK 2024. 9. 23. 21:40

추상클래스 & 추상메서드

이때까지 사용한 일반적인 클래스는 구체적 으로 데이터를 담아 인스턴스화 하여 직접 다루는 클래스이다.

그 반대로 추상클래스는 구체적이지 않은 추상적인(abstract) 데이터를 담고 있는 클래스이다.

그래서 추상클래스는 일반 클래스와 다르게 인스턴스화가 불가능하다.

추상 클래스는 클래스에 추상화를 접목 시켜 구조적이게 객체를 설계하고 , 그 프로그램의 유지보수성을 올려주며

만일 프로그램에 어떠한 기능을 업그레이드 한다고 하면 수정/추가에 대해 유연하게 만들어주며 더 퀄리티가 높은 프로그램을 개발할 수 있게 해준다.

그렇기에 추상 클래스는 개별 프로젝트 보다는 범용 라이브러리나 프레임워크 시스템을 설계하는데 많이 사용된다.

 


추상클래스 & 추상메서드 기본문법

클래스명과 메서드명 앞에 abstract 예약어를 붙여줌으로써 컴파일러에 추상메서드와 추상클래스임을 알린다.

추상메서드는 로직은 따로 안에 들어있지 않고 이름만 있는 빈 메서드라고 보면 된다.

즉 미완성인 메서드라고 할 수도 있다.(메소드의 바디부분인 중괄호가 없는 상태이다)

이럴 때 문법적인 측면으로 하나 이상의 추상 메소드를 포함하는 클래스를 추상클래스라고 정의한다.

 

interface :

동일한 목적하에 동일한 기능을 보장하게 하기 위한 개념.

다향성을 극대화하여 코드 수정을 줄이고 프로그램 유지보수성을 높이기 위해 사용함.

여기서는 메서드를 선언만 하고 따로 기능은 구현하지 않는다.

설계도이지만 매우 추상적인 설계도 라고 보면 될것같다.

(다중 상속이 된다고 한다)

상수 , 추상메서드만 선언이 가능했지만 !

java 8버전부터는 디폴트메서드 , 정적메서드를 추가해서 사용가능하게 만들었다.

interface 는 메서드가 기본적으로 추상 형태이기 때문에 꼭 abscract를 명시해주지 않아도 된다 !

 

implements(구현) :

상속과 비슷하지만 약간 다름.

상속에 비해 부모클래스에서는 선언만 하고

자식 클래스에서 메서드나 변수를 정의함.

(느슨한 결합)

 

디폴트메서드란 ?

추상메서드만 사용하면 모든 상속받는 클래스에서 일일히 오버라이딩을 해야하기 때문에 디폴트메서드라는 것을 사용하는데 .

간단히 말하자면 interface 안에서도 로직이 포함된 메소드를 만들 수 있는 메서드이다.

기존에 존재하던 인터페이스를 이용하여서 구현된 클래스를 만들고 사용하고 있는데 인터페이스를 보완하는 과정에서 추가적으로 구현해야 할 혹은 필수적으로 존재해야 할 메소드가 있다면, 이미 이 인터페이스를 구현한 클래스와의 호환성이 떨어 지게 됩니다. 이러한 경우 default 메소드를 추가하게 된다면 하위 호환성은 유지되고 인터페이스의 보완을 진행 할 수 있습니다.

 

'언어 > Java' 카테고리의 다른 글

접근한정자란?  (0) 2024.09.30
업캐스팅 , 다운캐스팅이란?  (0) 2024.09.25
생성자란?  (0) 2024.09.23
Java 의 기본 . Class  (0) 2024.09.23
getter 와 setter 란?  (0) 2024.09.23