티스토리 뷰

Java

Java - 인터페이스

장진혁 2023. 1. 28. 21:38

인터페이스

  • 추상 메서드의 집합
  • 구현된 것이 전혀 없는 설계도. 껍데기 (모든 멤버가 public)
  • 추상메서드만 존재
  • 추상클래스는 미완성 설계도라고 한다면 인터페이스는 구현된것 아무것도 없고 밑그림이다.
interface 인터페이스이름 { // 구현없음 껍데기만!!
        public static final 타입 상수이름 = 값; // 상수만 OK (iv,cv, 생성자 = NO)
        public abstract 메서드이름(매개변수목록); // 추상메서드
}
  • 모든 멤버변수는 public static final 이여야 하며, 생략할 수 있다.
  • 모든 메서드는 public abstract 이여야 하며, 생략할 수 있다.

인터페이스의 상속

  • 다중상속가능
  • 인터페이스 조상은 인터페이스만 가능(Object가 최고 조상 아님)

인터페이스의 구현

interface Fightable { // 인터페이스 미완성 설계도
        void move(int x, int y);
        void attack(Unit u);
}

class fighter implements Fightable { // 인터페이스 미완성 설계도 완선 (구현)
        public void move(int x, int y) {}
        public void attack(Unit u) {}
  • 인터페이스의 추상메서드 몸통{} 만들기
  • 인터페이스도 추상클래스처럼 인스턴스 생성 불가
  • 인터페이스에 정의된 추상 메서드를 모두 구현
class 클래스이름 implements 인터페이스이름 {
        public void move(int x, int y) {}
        public void attack(Unit u) {}
}
  • 일부만 구현하는 경우, 클래스 앞에 abstract를 붙여야함
abstract class 클래스이름 implements 인터페이스이름 {
        public void move(int x, int y) {}
}

추상클래스와 인터페이스의 공통점

  • 추상메서드를 가지고 있다.(미완성 설계도)

추상클래스와 인터페이스의 차이점

  • 인터페이스는 인스턴스 변수(iv)를 가질 수 없다.

인터페이스를 이용한 다형성

interface Fightable {
        public void move(int x, int y) {}
        public void attack(Fightable f) {}
                                                // Fightable 인터페이스를 구현한 클래스의 인스턴스만 가능
}
  • 인터페이스를 메서드의 리턴타입으로 지정가능
  • 리턴타입이 인터페이스라는 것은 메서드가 해당 인터페이스를 구현한 클래스의 인스턴스를 반환한다는 것을 의미한다. (중요)
Fightable method() { // 반환타입이 Fightable인터페이스이다. 반환타입 일치해야
        Fighter f = new Fighter(); 
        return f; // Fightable를 구현한 Fighter 객체반환
}

class Fighter extends Unit implements Fightable { //(1) Fighter는 Fightable를 구현했다.
        public void move(int x, int y) {}
        public void attack(Fightable f) {}
}

인터페이스의 장점

  • 두 대상(객체)간의 ‘연결’, ‘대화’, ‘소통’ 을 돕는 “중간역할”을 한다.
  • 선언(설계)와 구현을 분리시킬 수 있게 한다.
  • 느슨한 결합 변경에 유리하고 유연

'Java' 카테고리의 다른 글

JAVA - 기본형과 참조형  (0) 2023.02.13
JAVA - 상수(constant)와 리터럴(literal)  (0) 2023.02.13
Java - 추상메서드  (0) 2023.01.28
Java - 접근제어자  (0) 2023.01.27
Java - 메서드 정리  (0) 2023.01.27
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/06   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
글 보관함