파파비의 블로그

인터페이스 본문

개발/java

인터페이스

N. Dave 2020. 4. 5. 04:51
반응형

인터페이스는 추상메소드만으로 이루어져 있다.

하지만 class는 아니다. 추상메소드와 모양은 비슷하다고 느껴질 수 있다.

 

인터페이스는 추상메소드로만 이루어져 있지만, 

굳이 메소드에 abstract를 쓸 필요는 없다. 자동으로 abstract로 인식된다.

 

인터페이스는 변수도 넣을 수 있다.

이때 역시 자동으로 final static으로 인식된다.

 

인터페이스는 보통 규격을 만들 때 사용되고,

다른말로 말하면 참조변수를 통일시킬 때 사용된다.

 

예를 들어서 OS에서 어떤 이벤트가 발생했을 때, 어떤 객체의 onClick 함수를 실행한다고 해보자.

인터페이스를 활용하면 이벤트가 발생했을 때 마다 다양한 함수를 활용할 수 있다.

 

호출되는 함수는 같지만, 내용이 매번 다른... 

이것이 인터페이스의 매력이다.

말로만 말고 코드로 좀 살펴보자

 

1. 인터페이스 만들기

   - 이클립스 기준으로 class만들 때 처럼 우클릭 - new - interface를 누르면 새로운 파일을 만들 수 있다.


public interface 이름 {

}

 

그러면 이렇게 자동으로 형성된다.

인터페이슨느 추상메소드와 final static 변수로만 이루어져 있다고 했다.

그래서 추상메소드를 만들어놓을 수 있고, 변수들도 만들어 놓을 수 있다.

 


public interface Inter {

     int number = 0;
     public void Function();
}

이렇게 내용을 추가했다.

여기서 주목할 포인트

1. public void Function(); > 추상메소드로 구현을 했지만 abstract를 붙이지 않았다.
 - 물론 붙여도 된다. 하지만 안 붙여도 abstract임을 우리는 알아야 한다.

 

2. int number = 0; -> final static이 생략되어 있다. 하지만 우리는 생략된 것을 알아야 한다.

 - 초기화가 되어 있는데, 만약 초기화를 하지 않는다면? 에러가 난다. 

 - final을 사용하기 위해선 초기화를 해야한다는 사실을 까먹지 말자.

 

 

 

2. 인터페이스 활용하기

- 이제 인터페이스를 만들었으니 활용해보자

 

- 인터페이스는 추상메소드를 갖고 있기 때문에 무조건 클래스의 상속을 통해서 활용할 수 있다.

- class처럼 만들었으니 객체 생성하자! 를 생각하면 안된다. 인터페이스는 클래스가 아니다.

- 상속을 할 때는 class는 extends를 쓰지만 인터페이스는 implements를 사용한다.

 

<구현하기>

class Animal implements Inter{

int animal_num = 0;

public void Sound() {
System.out.println("");
     }

@Override
public void Function() {
// TODO Auto-generated method stub

     }

}

애니멀이라는 클래스를 만들었고, 이 클래스는 위에 만든 Inter이라는 인터페이스를 상속한다.

여기서 주목해야할 포인트

1. 인터페이스는 다중구현이 가능하다. 다른 인터페이스를 만들어서 구현을하고 싶으면

class Animal implements Inter, Inter_2, Inter_3 ....{

}

이렇게 콤마(,)를 활용해서 늘려나가면 된다.

 

 

2. 인터페이스와 함께 class 상속도 가능하다. but 단일상속을 지원하니 한개의 class만 상속가능하다

class Animal extends ClassA implements Inter{

}

이렇게 말이다. 

추가로, implements 뒤에 extends를 쓰면 에러가 난다. 순서는 extends를 먼저 써야 한다.

 

<활용하기>

구현을 완료했으니 이제 사용해볼 차례이다.

주목할만 포인트를 짚어보자.

 

1. 인터페이스를 구현한 것은 class이다. 

  - 해당 class 객체를 통해 인터페이스의 메소드에 접근이 가능하다.

Animal ani = new Animal();
ani.Function();

이렇게 말이다.

하지만 이것은 많이 쓰이지는 않을 것이다. 

 

2. 인터페이스가 구현된 class라면 Interface 객체로 만들 수 있다. (객체가 맞는 표현인지는 모르겠다)

Inter ani = new Animal();

ani.Function();

이게 사실은 인터페이스의 핵심부분이라고 할 수 있다.

 

우리는 인터페이스를 만들어놓고, 특정 상황에 놓일 때, 인터페이스로 함수를 실행시켜놓도록 할 수 있다.

그리고 그때 호출된 메소드가 어떤 액션을 취할지는 다른 개발자에게 토스할 수 있는 것이다.

 

예를 들어 버튼 인터페이스라고 해보자. (Button이라는 인터페이스를 구현해두었다)

버튼이 눌리는 상황에서는 우리는 Button의 onClick() 이라는 함수를 자동으로 실행하게끔 해두었다고 해보자.

그렇다면 우리는 Button 객체가 되어줄 class를 구현하고, Button 객체에 우리가 만든 객체를 연결하고,onClick()의 내용만 채워넣기만 하면 된다.

 

 

 

 

반응형
Comments