프로그래밍 정리/자바

일반적인 인터페이스의 구조

주누다 2013. 6. 19. 12:04
반응형

- 인터페이스를 만들기 위해서는 class라는 키워드 대신에 interface라는 키워드를 사용.

그리고 인터페이스 내에는 몸체가 없는 추상 메서드만을 추가시키면 됨.


============================================================================================================



public interface IRemoteControl {

void powerOn(); // 추상 메서드

void powerOff(); // 추상 메서드

void channelUp(); // 추상 메서드

void channelDown(); // 추상 메서드

/*

* public abstract void powerOn(); // 추상 메서드

* public abstract void powerOff(); // 추상 메서드

* public abstract void channelUp(); // 추상 메서드

* public abstract void channelDown(); // 추상 메서드

*/

}



============================================================================================================


- 인터페이스도 하나의 클래스이지만 메서드의 구현 자체가 없을 뿐. 인터페이스의 메서드들은 전부 abstract 메서드이기 때문에 메서드 앞에 abstract 키워드는 생략. 디폴트로 abstract이기 때문에 굳이 붙이지 않는 것. 그리고 인터페이스 내의 모든 메서드들은  구현을 목적으로 하기 때문에 디폴트로 public 멤버 속성을 가지고 있음.


- 인터페이스의 특징

-> 인터페이스의 모든 메서드는 묵시적으로 public abstract임.

-> 인터페이스는 abstract 메서드를 포함하고 있기 때문에 객체를 생성할 수 없음.


- 묵시적이라는 말은 메서드 앞에 public abstract를 붙이지 않아도 무조건 public abstract이라는 것. 인터페이스를 구현하는 것은 상속으로 구현하는 것과 비슷하지만 일반 클래스와 인터페이스를 구별하기 위해서 일반 클래스와 추상 클래스의 상속은 extends 키워드를 사용하며, 인터페이스에서는 implements 키워드를 사용해서 추상 메서드를 구현.


- 인터페이스(interface)의 구현(implementation)

-> 일반 클래스와 추상 클래스는 extends를 사용해서 상속을 하며, 인터페이스는 implements를 이용해서 구현.


- 보통 인터페이스를 말할 때 구현(implementation)을 목적으로 하는 클래스라고 부르기도 함. 그 자체로 객체를 생성할 수 없고, 구현을 해야만 객체를 생성할 수 있기 때문.


============================================================================================================




public abstract class RemoteTV implements IRemoteControl{

protected int nChannel = 0;

protected boolean bPower = false;


@Override

public void powerOn() { // 추상 메서드 재정의

// TODO Auto-generated method stub

bPower = true;

System.out.println("TV 전원 On!");

}


@Override

public void powerOff() { // 추상 메서드 재정의

// TODO Auto-generated method stub

bPower = false;

System.out.println("TV 전원 Off!");

}


@Override

public void channelUp() { // 추상 메서드 재정의

// TODO Auto-generated method stub

nChannel++;

System.out.println("TV Channel Up " + nChannel);

}


}


============================================================================================================


- 인터페이스를 구현하기 위해서 implements 키워드를 사용.


- implements IRemoteControl

-> 인터페이스 내의 모든 메서드를 구현한 것이 아님. channelDown() 추상 메서드를 구현하지 않았음.

인터페이스의 일부만 구현하고 일부는 구현하지 않았다면 해당 클래스는 다시 추상 클래스가 되어야함.

그렇기 때문에 클래스의 선언부에 다음과 같이 abstract를 명시하고 있음.


- public abstract class RemoteTV implements IRemoteControl{...}

-> 인터페이스의 모든 추상 메서드를 구현해야만 하나의 클래스로서 객체를 생성할 수 있음. 만약 인터페이스의 추상 메서드를 모두 구현하지 않는다면 그 자체는 추상 클래스가 될 수 밖에 없음.그렇다면 다시 상속받아서 구현하지 않은 메서드를 모두 구현해야만 객체를 생성할 수 있음.


============================================================================================================


public class LGRemoteTV extends RemoteTV{

// 추상 메서드 재정의

@Override

public void channelDown() {

// TODO Auto-generated method stub

nChannel--; // nChannel은 protected로 선언

System.out.println("TV Channel Down " + nChannel);

}

public static void main(String[] args) {

LGRemoteTV tv = new LGRemoteTV();

tv.powerOn();

tv.channelUp();

tv.channelDown();

tv.powerOff();

}

}


============================================================================================================


- LGRemoteTV는 RemoteTV 클래스에서 구현하지 않았던 channelDown() 메서드를 구현함으로써 추상 클래스가 아닌 완전한 클래스가 되었음. 완전한 클래스가 되었다는 말은 객체를 생성한 후 메서드를 호출할 수 있게 되었다는 의미.


반응형

'프로그래밍 정리 > 자바' 카테고리의 다른 글

쓰레드(Thread)  (0) 2013.07.06
인터페이스에서 사용할 수 있는 멤버 변수  (0) 2013.06.19
인터페이스란?  (0) 2013.06.19
System.in  (0) 2013.06.18
표준 출력  (0) 2013.06.18