본문 바로가기

java

[JAVA 개념] 추상클래스와 인터페이스의 차이점 ( + 상속과 구현)

JDK8 부터 인터페이스에 Default 메서드가 추가 되었다.

 

 

추상 클래스와 인터페이스의 큰 차이점은 두가지이다. 

1. 추상 클래스는 멤버 변수를 가질 수 있지만 인터페이스는 멤버 변수를 가질 수 없다. 

(물론 인터페이스도 static 으로 정의된 변수를 내부적으로 선언할 수 있지만 멤버 변수를 선언할 수 없다) 

 

2. 클래스를 구현 할 때 오직 하나의 클래스만을 상속 받을 수 있는 반면에 인터페이스는 여러개를 상속 받거나 구현 할 수있다.

 

 

 대부분의 멤버 변수는 그 객체의 속성을 담아두기 위한 용도로 사용한다. 메서드 내에 선언한 변수는 메서드가 종료되면 그 상태를 잃어버리는 반면, 클래스의 멤버 변수는 객체가 살아있는 한 속성을 유지 할 수 있으며 값을 변경 할수도 

있다. 이렇게 중요한 기능을 수행하는 멤버 변수가 인터페이스에 존재하지 않는 것은 인터페이스 자체를 객체화 할 수 없다는 의미이다. 그리고 속성도 없고 그 값을 유지할 수 있다. 이렇게 변수 선언에 제약을 둠으로써 인터페이스를 다른 클래스와 구별 할 수 있는 큰 차이를 유지 할수 있다. 

 

자바는 다중 상속을 허용하지 않는다.  하지만 여러개의 인터페이스를 구현할 수 있다는 것은 하나의 클래스에 여러개의 인터페이스의 명세가 있으며 여러 개의 유형으로 활용 할수 있다는 것이다.

( 인터페이스는 명세서 역할을 한다. 일관된 접근 경로를 제공하고 클래스의 캡슐화를 돕는역할로 한정하는 것이 안정적은 소스 코드 작성에 도움이 된다. )

 

 다중상속을 지원하지 않는 이유는 코드를 복잡하게 하여 프로그램을 취약하게 만들고, 버그를 유발하고 소프트웨어를 유지, 보수 하기 어렵게 하는 나쁜 기능이라고 생각하기 떄문이다. 그래서 인터페이스를 통해 다중 상속과 유사한 접근을 할 수 밖에 없다. 자바에서는 상위클래스 혹은 인터페이스를 상속/ 구현 하기 위해 다음 두개의 키워드를 제공한다.

+  extends : 상속, 클래스가 상위 클래스를 상속 받을때 사용하며 인터페이스가 상위 인터페이스를 상속 받을때도 사용할 수있다. 

+ implement : 구현을 의미한다. 클래스가 인터페이스를 구현할때)

 

자바의 상속이란 인터페이스를 implemets 키워드로 구현했을 때를 의미 하지 않고 클래스가 상위 클래스를 확장 하고자 할때 extends 키워드를 이용해서 정의 하는 것을 의미한다. 

 

 

반응형