Programming Language/Java

[Java] 인터페이스(interface)

LeeJaeJun 2023. 12. 31. 01:37
728x90
반응형
abstract class 클래스이름 implements 인터페이스이름 {
    // 인터페이스 일부 구현
}

인터페이스(interface)

- 일종의 추상클래스. 하지만 추상클래스를 부분적으로 완성된 '미완성 설계도'이지만 인터페이스는 구현된 것이 아무 것도 없고 밑그림만 그려져 있는 '기본 설계도'라고 생각하면 됨.

- 추상클래스처럼 추상메서드를 갖지만 추상클래스보다 추상화 정도가 높아서 추상클래스와 다르게 몸통을 갖춘 일반 메서드 또는 멤버변수를 구성원으로 가질 수 없다.

- 접근제어자로 public 또는 default를 사용할 수 있다.

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

- 일반적인 클래스의 멤버들과 달리 인터페이스의 멤버들은 다음과 같은 제약사항이 있다.

1) 모든 멤버변수는 public static final 이어야 하며, 이를 생략할 수 있다.

2) 모든 메서드는 public abstact 이어야 하며, 이를 생략할 수 있다. (단, static메서드와 디폴트 메서드는 예외)

- 인터페이스는 인터페이스로부터만 상속받을 수 있으며, 클래스와는 달리 다중상속, 즉 여러 개의 인터페이스로부터 상속 받는 것이 가능하다.

- 클래스의 상속과 마찬가지로 자손 인터페이스(Fightable)는 조상 인터페이스(Movable, Attackable)에 정의된 멤버를 모두 상속받는다.

interface Movable {
    void move();
}

interface Stopable {
    void stop();
}

interface Car extends Movable, Stopable {}

- 인터페이스도 추상클래스철머 그 자체로는 인스턴스를 생성할 수 없다.

- 인터페이스는 키워드 'implements'를 사용하여 인터페이스를 구현한다.

class 클래스이름 implements 인터페이스이름{
    // 인터페이스에 정의된 추상메서드 구현
}

- 인터페이스의 메서드 중 일부만 구현한다면, abstarct를 붙여서 추상클래스로 선언해야 한다.

abstract class 클래스이름 implements 인터페이스이름 {
    ///
}

- 상속과 구현을 동시에 할 수도 있다.

class 클래스이름 extends 조상클래스이름 implements 인터페이스이름{
    ///
}

* 인터페이스의 이름은 주로 able로 끝나는 것이 많다. (~을 할 수 있는) 그 이유는 어떠한 기능 또는 행위를 하는데 필요한 메서드를 제공한다는 의미를 강조하기 위해서이다.

- 리턴타입이 인터페이스라는 것은 메서드가 해당 인터페이스를 구현한 클래스의 인스턴스를 반환한다는 것을 의미한다.

* 인터페이스의 장점

1) 개발시간을 단축시킬 수 있다.

2) 표준화가 가능하다.

3) 서로 관계없는 클래스들에게 관계를 맺어 줄 수 있다.

4) 독립적인 프로그래밍이 가능하다.

728x90
반응형

'Programming Language > Java' 카테고리의 다른 글

[Java] AND와 OR의 연산자 우선순위  (0) 2023.12.31
[Java] 프로그램 오류  (0) 2023.12.31
[Java] 다형성(polymorphism)  (0) 2023.12.31
[Java] 제어자(modifier)  (0) 2023.12.31
[Java] 오버라이딩(overriding)  (1) 2023.12.30