[자바의 정석] 인터페이스

강신현·2022년 6월 2일
0

자바의 정석

목록 보기
15/15

✅ 인터페이스 ✅ interface ✅ implements

인터페이스

다른 클래스를 작성하는데 도움을 주는 목적으로 사용된다.
미리 정해진 규칙에 맞게 구현하도록 표준을 제시하는데 사용된다.

  • 일종의 추상클래스로, 추상클래스보다 추상화 정도가 높다.
  • 오직 추상메서드와 상수만을 멤버로 가진다.
  • 인스턴스를 생성할 수 없다.
  • interface 키워드를 붙인다.

- 작성

  • 모든 멤버변수는 public static final이며, 생략 가능하다.
  • 모든 메서드는 public abstract이며, 생략 가능하다.
  • 생략된 제어자는 컴파일러가 자동적으로 추가해줌

- 상속

인터페이스는 인터페이스로부터만 상속받을 수 있다.
클래스와 달리 다중상속이 가능하다.

- 구현

  • 인터페이스를 구현하는 것은 클래스를 상속 받는 것과 같다.
  • 인터페이스에 정의된 추상메서드를 구현해야 한다.
  • implements 키워드 사용
class 클래스이름 implements 인터페이스이름{
	// 인터페이스에 정의된 추상메서드를 구현해야 한다.
}
class Fighter implements Fightable{
	public void move(){(구현)} // public 붙여야 함
   	public void attract(){(구현)} // public 붙여야 함
}

interface Fightable{
	void move(int x, int y); // public abstract 생략
   	void attract(Unit u); // public abstract 생략
}
  • 위 예시에서, 오버라이딩 할때 조상클래스에 선언된 접근제어자보다 좁은 의미의 접근제어자로 바꿀 수 없으므로 추상메서드를 구현할때 public을 꼭 붙여줘야 한다.
  • 인터페이스의 메서드 중 일부만 구현한다면, abstract를 붙여서 추상클래스로 선언해야 한다.

- 다형성

  • 자손클래스의 인스턴스를 조상타입의 참조변수로 참조하는 것처럼
    인터페이스 타입의 변수로 인터페이스를 구현한 클래스의 인스턴스를 참조할 수 있다.
class Fighter extends Unit implements Fightable{
	public void move(int x, int y){(구현)};
   	public void attract(Fightable f){(구현)};
}

Fighter f = new Fighter();
Fightable f = new Fighter(); // 가능
  • 인터페이스를 메서드의 매개변수 타입으로 지정할 수 있다.
void attack(Fightable f){

}

Fightable 인터페이스를 구현한 클래스의 인스턴스를 매개변수로 받았다는 뜻이다.

  • 동일하게 리턴 타입으로도 지정할 수 있다.

- 장점

  1. 개발시간을 단축할 수 있다.
    -> 인터페이스를 이용하면 메서드의 내용에 관계 없이 선언부만 알면 되기 때문에 인터페이스를 구현하는 클래스가 작성될 때까지 기다리지 않고 양쪽에서 동시에 개발을 진행할 수 있다.
  2. 표준화가 가능하다.
    -> 인터페이스로 기본 틀을 작성하면 일관되고 정형화된 프로그램 개발이 가능하다.
  3. 서로 관계없는 클래스들에게 관계를 맺어줄 수 있다.
    -> 아무 관계없는 클래스들에게 하나의 인터페이스를 공통적으로 구현하게 하여 관계를 맺어줄 수 있고, 다형성을 이용할 수 있는 장점이 생긴다.
  4. 독립적인 프로그래밍이 가능하다.
    -> 인터페이스로 클래스의 선언과 구현을 분리시켜, 클래스들의 직접적인 관계를 간접적인 관계로 변경할 수 있다. 따라서 클래스의 변경이 관련된 다른 클래스에 영향을 미치지 않는다.
profile
땅콩의 모험 (server)

0개의 댓글