[Java] Chap8 인터페이스

Seunghee Lee·2023년 2월 15일
0

Java

목록 보기
4/9

1. 인터페이스의 역할

인터페이스(interface)는 객체의 사용 방법을 정의한 타입이다.

인터페이스는 개발 코드와 객체가 서로 통신하는 접점 역할을 한다.

- 개발 코드가 인터페이스의 메소드를 호출하면 인터페이스는 객체의 메소드를 호출시킨다.

개발 코드와 객체 사이에 인터페이스를 두는 이유 ?

개발 코드를 수정하지 않고, 사용하는 객체를 변경할 수 있도록 하기 위해서
풀어서 얘기하자면, 인터페이스는 하나의 객체가 아니라 여러 객체들과 사용이 가능하다.
즉, 어떤 객체를 사용하느냐에 따라서 실행 내용과 리턴값이 다를 수 있다.
따라서 코드 변경 없이 실행 내용과 리턴값을 다양화를 위해 인터페이스를 사용한다.


2. 인터페이스 선언

🚩 .java 소스파일로 작성되고 컴파일러를 통해 .class 형태로 컴파일된다.

✅ 선언
- interface 키워드를 사용해 선언한다.

[ public ] interface 인터페이스명 { ... }		// public 생략 가능

- 인터페이스는 상수와 메소드만을 구성 멤버로 가진다.
- 인터페이스는 객체로 생성할 수 없기 때문에 생성자를 가질 수 없다.
= 인터페이스는 데이터를 저장할 수 없기 때문에 데이터를 저장할 인스턴스 or 정적 필드를 선언할 수 없다.

상수 필드 (Constant Field)

인터페이스는 객체 사용 설명서와 같다. 때문에 런타임 시 데이터를 저장할 수 있는 필드를 선언할 수 없다. 그러나 상수 필드 선언은 가능하며, 이때 상수는 인터페이스에 고정된 값으로 값을 변경할 수 없다. 또한 상수를 선언할 때에는 반드시 초기값을 대입해야 한다.

- 상수는 public static final로 선언한다.
... public, static, final 을 생략하더라도 자동적으로 컴파일 과정에서 붙게 된다.

[ public static final ] 타입 상수명 =;

- 상수명은 대문자로 작성하되, 서로 다른 단어로 구성되어 있을 경우에는 언더바(_)로 연결하는 것이 좋다.

- 인터페이스 상수는 static {} 블록으로 초기화할 수 없기 때문에 반드시 선언과 동시에 초기값을 지정해야 한다.

public interface RemoteControl {
	public int MAX_VOLUME = 10;
    public int MIN_VOLUME = 0;
}

추상 메소드 (Abstract Method)

추상 메소드는 객체가 가지고 있는 메소드를 설명하는 메소드를 말한다. 이 메소드는 호출할 때 어떤 매개값이 필요하고, 리턴 타입이 무엇인지만 알려준다. 실제 실행부는 객체(구현 객체)가 가지고 있다.

- 추상 메소드는 리턴 타입, 메소드명, 매개 변수만 기술되고, 중괄호 {}를 붙이지 않는 메소드를 말한다.
- public abstract 특성을 갖기 때문에 public abstract 를 생략하더라도 자동적으로 컴파일 과정에서 붙게 된다.

public interface RemoteControl {
	//상수
	public int MAX_VOLUME = 10;
    public int MIN_VOLUME = 0;
    
    //추상 메소드 ... 메소드 선언부만 작성, public 생략 가능
    public void turnOn();
	public void turnOff();
    public void setVolume(int volume);
}

디폴트 메소드 (Default Method)

디폴트 메소드는 인터페이스에 선언되지만 사실은 객체(구현 객체)가 가지고 있는 인스턴스 메소드라고 생각하면 된다.

※ Java8 이상부터 허용한다.

- 형태는 클래스의 인스턴스 메소드와 동일한데, default 키워드가 리턴 타입 앞에 붙는다.

[ public ] default 리턴타입 메소드명(매개변수, ...) { ... }

- 디폴트 메소드는 public 특성을 갖기 때문에 public을 생략하더라도 자동적으로 컴파일 과정에서 붙게 된다.

public interface RemoteControl {	
	... 
    
    //디폴트 메소드 ... 실행 내용까지 작성
    default void setMute(boolean mute) {
    	if(mute) {
        	System.out.println("무음 처리");
        } else {
	        System.out.println("무음 해제");
        }
    }
}

정적 메소드 (Static Method)

정적 메소드는 디폴트 메소드와 달리 객체가 없어도 인터페이스만으로 호출이 가능하다.

※ Java8 이상부터 허용한다.

- 형태는 클래스의 정적 메소드와 완전 동일하다.

[ public ] static 리턴타입 메소드명(매개변수, ...) { ... }

- 정적 메소드는 public 특성을 갖기 때문에 public을 생략하더라도 자동적으로 컴파일 과정에서 붙게 된다.

public interface RemoteControl {	
	... 
    
    //정적 메소드
    static void setMute(boolean mute) {
    	System.out.println("건전지 교환");
    }
}
profile
자라나라 개발개발 ~..₩

0개의 댓글