인터페이스

임성혁·2022년 8월 13일

자바 기초

목록 보기
23/32

1. 정의

  • interface 키워드로 선언된 추상 클래스
  • 강제하기 위해서 사용된다

2. 특징

  • 인스턴스 생성 불가
  • upcasting 타입으로 사용 가능
  • 추상 클래스가 발전한 개념
  • 멤버로는 상수, 추상 메소드만 사용
  • 자바의 단일 상속 보완
  • implements로 동시

3. 용도

  • 기능만을 하위 클래스에 강제하기 위해 사용된다
    • 예) 리모델링 법규집
      • 1조 1항 : 모든 건물에는 비상구 존재
      • 1조 2항 : 하나의 화장실 무조건 존재
    • 예) 음료수 자판기 안에 음료수가 아닌 인형이 들어가 있으면 인형이 나올 수 있을까? -> X
interface Unit

4. 다형성

  • 클래스는 객체를 만드는 틀, 인터페이스는 클래스를 만드는 틀

5. 계약

  • 일종의 계약서, 즉 무조건 지켜야 그 명명을 지닐 자격이 된다

6. 상속

  • C++ 다중상속 가능, Java 불가능
class HandPhone {
	void call(){~}
    vodi receive(){~}
}

class Camera{
	void takepicture(){~}
}

class HandPhoneCamera extends HandPhone{
	Camera cm = new Camera();
}

재정리

1. 인터페이스란?

  • 추상클래스, 미완성 설계도보다 추상화 정도가 높음
  • 알맹이 없는 껍데기
  • 클래스 작성에 도움을 줄 목적(클래스 설계를 위한 문법)

2. 인터페이스의 작성

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

interface PlayingCard{
	int SPADE = 4;
    int DIAMOND = 3;
    int HEART = 2;
    int CLOVER = 1;

	String getCardNumber();
    String getCardkind();
}

3. 인터페이스의 상속

  • 인터페이스도 클래스처럼 상속이 가능 (다중 상속 가능)
interface Movale{
	void move(int x, int y)
}

interface Attackable{
	void attack(Unit unit)
}

interface Fightable extends Movable, Attackable{}

4. 인터페이스의 장점

  • 개발 시간 단축
    • 메소드를 호출하는 선언부만 알면 끝
  • 표준화
  • 관계없는 클래스에 관계를 맺음
  • 독립적 프로그래밍 가능

5. 인터페이스의 이해

  • 두 대상의 중간 역할
직접적인 관계의 두 클래스 (A-B)

Class A {
	void method(B b){
    	b.methond();
    }
}

Class B {
	void method(){
    	sout("B class!")
    }
}

void main(){
	A a = new A();
    a.method(new B());
}

간접적인 관계의 두 클래스 (A-I-B)

interface I {void method()}

Class A {
	void Amethod(I i){
    	i.Imethod()
    }
}

Class B implements I {
	Imethod(){
    	sout("B method")
    }
}
profile
열정

0개의 댓글