728x90

인터페이스란 설명하기 어렵지만 일종의 명세이다. 

인터페이스에서 구현하라고 선언해 놓은 것들을 하위 클래스에서 구현하는 것이다.

 

아래 사진을 통해 구현 방법을 살펴보자.

 

인터페이스 구현

class와 마찬가지로 interface 예약어를 통해 생성한다.

interface에서 변수는 자동으로 상수로 변환된다.

double PI = 3.14라고 해도 실질적으로는 static final double PI = 3.14가 된다는 뜻이다.

그리고 인터페이스에서의 메서드들은 자동으로 abstract 메소드로 변환된다. 즉 하위 클래스에서 구현해야 한다는 뜻이다.

인터페이스는 추상 클래스와 마찬가지로 인스턴스 생성이 불가능하다.

Calc calc = new Calc() --> 불가능. 

Calc calc = new Complete Calc(); --> 가능

 

인터페이스를 상속받을 땐 class와 달리 extends 가 아닌 implements를 사용한다.

 

인터페이스의 역할

인터페이스는 클라이언트 프로그램에 어떤 메소드를 제공하는지 알려주는, 명세 역할을 한다고 할 수 있다.

클라이언트는 그 인터페이스에 있는 기능들의 상세 구현 내용까지는 몰라도, 정의를 통해 그 객체를 사용할 수 있는 것이다.

예를 들면 Connection이라는 Interface는 JDBC에서 DB와 연결할 때 쓰는 인터페이스인데, 이 인터페이스는 Java에서 명시해 놓지만 그 구현은 Oracle, Mysql, Mssql등의 회사에서 직접하는 것이다. 이런 인터페이스를 사용자는 어떻게 구현했는지는 모르지만 정의를 통해 사용한다.

 

인터페이스의 요소 

상수 : 변수를 선언하면 자동으로 상수화된다.

메소드 : 모든 메소드는 추상 메소드이다.

디폴트 메소드 : 기본적인 구현을 가진 메소드이다. 하위 클래스에서 재정의가 가능하다. (java 8)

정적 메소드 : 인스턴스와 상관없이 인터페이스 타입으로만 호출하는 메소드이다. (java 8)

private 메소드 : 인터페이스 내에서 사용하는 메소드이다. 하위 클래스에서 재정의 할 수 없고 java 9이상에서만 제공하는 기능이다.

 

인터페이스 구현

인터페이스는 여러개의 인터페이스를 구현할 수 있다.

public interface A implements B, C{} 이런식으로 선언한다.

디폴트 메소드가 중복되는 경우 재정의 해야한다.

 

인터페이스 끼리도 상속이 가능하다. 또한 여러 인터페이스를 상속할 수도 있다.

public interface A extends B, C{} 이런 방식으로 상속받는다.

 

인터페이스와 상위 클래스를 동시에 구현하고 상속할 수도 있다.

public interface A extends B implements C {} 이런 식으로 선언한다.

B는 클래스, C는 인터페이스이다.

 

728x90

'프로그래밍 > Java' 카테고리의 다른 글

[Java] String, Wrapper 클래스  (0) 2020.02.04
[Java] Object 클래스  (0) 2020.02.03
[Java] final 예약어  (0) 2020.02.03
[Java] 추상 클래스  (0) 2020.02.03
[Java] 상속과 다형성  (0) 2020.02.01

+ Recent posts