# 추상클래스와 인터페이스



추상화란 형태를 잡는 것이다.

미술에서 추상화는 구체적인 형상을 나타내는 것이 아니라

점, 선, 면, 색과 같은 순수한 조형 요소로 표현한 것이다.

프로그래밍에서 추상화도 마찬가지이다.

구체적인 코드를 짜는 것이 아니라

기본 틀을 잡고 가는 것이다.


추상클래스와 인터페이스는 모두 추상화에 포함된다.

추상클래스는 메소드의 내용을 구현할 수 있는 것과 달리

인터페이스는 명시만 되어있다.

인터페이스가 추상클래스보다 더 추상화된 형태라고 보면 된다.


그렇다면 왜 추상화란 개념이 프로그래밍에 적용이 될까?

바로 다른 사람과의 커뮤니케이션 때문이다.


같이 프로그램 코드를 짜고 있는 상황에서

다른 사람이 어떤 이름의 객체, 메소드를 만드는 지 모른다면

다른 사람의 만든 객체를 내가 쓸 수 없다.

혹은 다른 사람의 일이 다 끝나야 내가 코드를 완성시킬 수 있다.


그러나 인터페이스를 이용하여 먼저 약속을 해놓으면

상대방의 코드 내용을 알지 못해도

나는 내 코드를 완성시킬 수 있다.

일반적으로는

인터페이스 -> 추상클래스 -> 구현클래스

이 3단계로 프로그램 코드를 완성했다.

그러나

자바 8버전 부터는 인터페이스에 디폴트 메소드가 생겼다.

인터페이스도 제한적이지만 메소드를 구현할 수 있게 되면서

추상클래스를 꼭 만들 필요성이 없어졌다.

그렇다면 추상클래스를 이제 쓸 필요가 없어졌는가?

아니다.

인터페이스가 추상클래스의 역할 전부를 대체할 수 없다.

인터페이스는 여전히 상수변수만을 쓸 수 있다.

그렇기에 객체변수를 선언할 필요가 있는 경우엔

추상클래스가 필요하다.


참고로 자바 8버전부터 디폴트 메소드로 인해

스프링에서 몇몇 추상클래스가 Deprecated 되었다.

한마디로 더이상 못쓴다는 것이다.


예를 들어,

WebMvcConfigurerAdapter라는 추상클래스가 있다.


자바 8버전을 베이스로 만든 스프링 5버전 부터는 쓸 수 없다고 나온다.

이 추상클래스가 Deprecated 된 이유는

앞서 말했듯이 바로 디폴트 메소드의 추가로 인해 생겼다.

혹여나 옛날 코드를 참고해 코드를 짜면 에러가 생길 수 있으므로 참고하길 바란다.


To be continued.........




Made by 꿩



'IT > Java' 카테고리의 다른 글

Spring Boot와 JSP  (0) 2019.08.02
다형성  (0) 2018.11.03
object vs instance vs class  (3) 2018.10.24

+ Recent posts