2017년 6월 8일 목요일

인터페이스 ( interface )


■ 인터페이스는 일종의 추상클래스이다. 인터페이스는 추상클래스처럼 추상메서드를 갖지만 추상클래스보다 추상화 정도가 높아서 추상클래스와 달리 몸통을 갖춘 일반 메서드 또는 멤버변수를 구성원으로 가질 수 없다. 오직 추상메서드와 상수만을 멤버로 가질 수 있으며, 그 외의 다른 어떠한 요소도 허용하지 않는다.

■ 인터페이스의 작성
키워드로 class 대신 interface를 사용한다.

interface 인터페이스이름{
 public static final 타입 상수이름 = 값;
 public abstract 메서드이름 ( 매개변수 목록 ) ;
}

interface에도 클래스와 같이 접근제어자로 public 또는 default를 사용할 수 있다.

일반적인 클래스의 멤버들과 달리 인터페이스의 멤버들은 다음과 같은 제약이 있다.
- 모든 멤버변수는 public static final 이어야 하며, 이를 생략할 수 있다.
- 모든 메서드는 public abstract 이어야 하며, 이를 생략할 수 있다.

인터페이스에 정의된 모든 멤버에 예외없이 적용되는 사항이기 때문에 제어자를 생략할 수 있는것이며, 편의상 생략하지만, 생략된 제어자는 컴파일 시에 컴파일러가 자동적으로 추가해 준다.


■ 인터페이스의 상속

인터페이스는 인터페이스로 부터만 상속받을 수 있으며, 클래스와는 달리 다중상속, 즉 여러개의 인터페이스로 부터 상속을 받는 것이 가능하다.
 [참고] 인터페이스는 클래스와 달리 Object클래스와 같은 최고 조상이 없다.

interface Movable{
  void move(int x, int y);
}

interface Attackable{
  void attack(Unit u);
}

interface Fightable extends Movable, Attackable{ }


■ 인터페이스의 장점

- 개발시간을 단축 시킬 수 있다.
 인터페이스가 작성되면, 이를 사용해서 프로그램을 작성하는 것이 가능하다.
메서드를 호출하는쪽에서는 메서드의 내용에 관계없이 선언부만 알면 되기 때문이다.
 그리고 동시에 다른 한 쪽 에서는 인터페이스를 구현하는 클래스를 작성하도록 하여, 인터페이스를 구현하는 클래스가 작성될 때 까지 기다리지 않고도 양쪽에서 동시에 개발을 진행 할 수 있다.

- 표준화가 가능하다.
 프로젝트에 사용되는 기본 틀을 인터페이스로 작성한다음, 개발자들에게 인터페이스를 구현하여 프로그램을 작성하도록 함으로써 보다 일관되고 정형화된 프로그램의 개발이 가능하다.

- 서로 관계없는 클래스들에게 관계를 맺어 줄 수 있다.
서로 상속관계에 있지도 않고, 같은 조상클래스를 가지고 있지 않은 서로 아무런 관계도 없는 클래스들에게 하나의 인터페이스를 공통적으로 구현하도록 함으로써 관계를 맺어 줄 수 있다.

- 독립적인 프로그래밍이 가능하다.
 인터페이스를 이용하면 클래스의 선언과 구현을 분리시킬 수 있기 때문에 실제구현에 독립적인 프로그램을 작성하는 것이 가능하다. 클래스와 클래스간의 직접적인 관계를 인터페이스를 이용해서 간접적인 관계로 변경하면, 한 클래스의 변경이 관련된 다른 클래스에 영향을 미치지 않는 독립적인 프로그래밍이 가능하다.

댓글 없음:

댓글 쓰기

JavaScript_함수의 역할

◎ 자바스크립트 함수의 역할 ■ 자바스크립트 함수와 메서드는 전혀 다른 개념이다. - 자바스크립트 함수는 메서드 역할을 할 수 있지만, 객체지향 프로그래밍의 메서드는 자바스크립트의 함수 역할을 할 수 없다. - 메서드와는 다르게 ...