자바 인터페이스 안에 abstract가 아닌 메서드를 포함할 수 있는가?

초월차선·2023년 2월 19일

Java

목록 보기
8/14

자바8버전 이전에는 불가능했다. 그 이후 부터는 가능하다

먼저 인터페이스가 무엇인지 알아보자

인터페이스의 정의

추상메서드를 갖는 추상클래스보다 추상화 정도가 높아, 추상클래스와 달리 body를 갖춘 일반 메서드와, 멤버변수를 구성원으로 가질 수 없는 것을 인터페이스라고 한다.

인터페이스의 목적

인터페이스를 implements 하는 즉, 인터페이스를 상속받는 클래스에 구현을 강제 할 수 있기 때문에, 규칙을 정해주었기 때문에 그 규격에 맞춰 개발하기에 적합하다. 비유적인 예를 들자면, 정부에서 모든 아파트 건축물에 대해 내진설계를 진행해야한다고 모든 건설사들에게 규정을 내려주었다. 그러면, 이 정부하에 있는 건설사들은 이 규정에 무조건 따라야 하는 것이다. 여기서 정부가 내린 규정을 interface이고, 이 규정을 implements하는 건설사들은 클래스라고 보면된다. 이처럼 interface를 잘 사용하면 굉장히 유용한 도구가 될 수 있다.

그러면 인터페이스 안에 abstract가 아닌 메서드를 포함할수 있는가?

A: 자바 8버전전 까지는 불가능했다. 인터페이스라는 것 자체가 어떤 메서드에 대해 body를 가질수없이, 규정만 정할수있는 형태이다. 실제 interface의 예를 보자면,

인터페이스 안에 메서드들은 모두 abstract 메서드이다. 즉, 모두 body를 가질 수 없는 형태인것이다. public void atest(); 또한 abstract가 생략된 것일뿐 경고 메시지를 보면 추상메서드라는 것을 알 수 있다.

그러나, 자바8 버전 이후 부터는 새로운 유형의 메서드가 있다. 자바8 부터는 default 및 static키워드를 사용해서 구현된 메서드를 인터페이스에 직접 추가할 수 있다.

0개의 댓글