CH8. 인터페이스 (1)

a.rubz·2023년 1월 11일
0

이것이 자바다

목록 보기
11/15
post-thumbnail
post-custom-banner

📝 정리

8.1 인터페이스 역할

📌 인터페이스 (Interface)

  • 두 객체를 연결하는 역할

  • 객체A <=(메소드 호출 또는 리턴값)=> 인터페이스 <=(메소드 호출 또는 리턴값)=> 객체B

  • 인터페이스는 연결된 객체의 메소드를 호출해주거나 결과값을 리턴해줌

  • 인터페이스의 사용으로 객체의 교체가 일어나도 그 객체를 사용하는 다른 객체의 추가 작업이 필요 없게 됨 (객체B가 객체C로 바껴도 객체 A는 인터페이스만 이용하므로 신경 쓸 필요 없음)

  • 인터페이스는 다형성 구현에 주된 기술로 이용됨



8.2 인터페이스와 구현 클래스 선언

📌 인터페이스 선언

  • interface 키워드 사용

  • default, public 사용 가능

interface 인터페이스명 {...}
public interface 인터페이스명 {...}

📌 인터페이스의 멤버

  • 인터페이스 선언 시, 중괄호 안에 들어갈 수 있는 멤버들

  • public 상수 필드

  • public 추상 메소드

  • public 디폴트 메소드

  • public 정적 메소드

  • private 메소드

  • private 정적 메소드


📌 구현 클래스 선언

  • 인터페이스에 선언된 추상 메소드와 동일한 선언부를 가진 (재정의된) 메소드 필요

  • 재정의된 메소드를 가진 객체 => 구현(implement) 객체

  • 선언부에 implements 키워드로 명시

public class 구현클래스 implements 인터페이스명 {...}

📌 implements

  • 해당 클래스가 인터페이스를 통해 사용할 수 있다는 의미

  • 인터페이스의 추상 메소드를 재정의한 메소드가 있다는 의미


📌 변수 선언과 구현 객체 대입

  • 인터페이스는 참조 타입

  • 객체를 참조하고 있지 않다는 뜻으로 null 대입 가능

  • 인터페이스를 통해 구현 객체를 사용하려면, 인터페이스 변수에 구현 객체 대입해야 함

  • 인터페이스 변수를 통해 메소드 호출 => 실제 실행되는 것은 구현 클래스에 재정의된 메소드

인터페이스 변수;
인터페이스 변수 = null; //null 대입 가능

인터페이스 변수 = 구현클래스(); //구현 객체 대입을 통해 인터페이스 사용
변수.인터페이스메소드(); //인터페이스 메소드 호출 => 구현 클래스에 재정의된 메소드 실행


8.3 상수 필드

📌 인터페이스의 상수 필드

  • 인터페이스는 public static final 특성을 갖는 상수 필드를 멤버로 가질 수 있음

  • public static final 생략 가능 (컴파일 과정에서 자동 생성)

  • 상수명은 대문자, 언더바(_) 연결

  • 구현 객체와 관련 없는 인터페이스 소속 멤버로 인터페이스에서 바로 접근 가능

public interface 인터페이스명 {
    [ public static final ] 타입 상수명 =;
}


8.4 추상 메소드

📌 인터페이스의 추상 메소드

  • 인터페이스는 public 추상 메소드를 멤버로 가질 수 있음

  • public abstract 생략 가능 (컴파일 과정에서 자동 생성)

  • 인터페이스에는 호출 방법만 기술, 구현 클래스에 재정의된 메소드 실행

  • 구현 클래스에서 public보다 더 낮은 접근 제한으로 제정의 불가

  • 인터페이스 변수로 추상 메소드 호출

public interface 인터페이스명 {
    [ public abstract ] 리턴타입 메소드명(매개변수, ...);
}

💡 인터페이스 변수는 참조 타입이기 때문에 구현 객체가 대입되면 구현 객체의 번지를 저장



8.5 디폴트 메소드

📌 인터페이스의 디폴트 메소드

  • 인터페이스에서는 완전한 실행 코드를 가진 디폴트 메소드를 선언할 수 있음

  • 추상 메소드와 달리 실행부가 있음 (중괄호 내부에 로직 있음)

  • 실행부에는 상수 필드를 읽거나 추상 메소드를 호출하는 코드 작성 가능

  • (인터페이스의 디폴트 메소드) default 키워드가 리턴 타입 앞에 붙음

  • 구현 클래스는 디폴트 메소드를 재정의 가능

  • (구현 클래스) 재정의 시, public 접근 제한자 반드시 붙이고 default 키워드 생략해야 함

public interface 인터페이스명 {
    [ public ] default 리턴타입 메소드명(매개변수, ...) { ... }
}


8.6 정적 메소드

📌 인터페이스의 정적 메소드

  • 인터페이스에는 정적 메소드 선언이 가능

  • 구현 객체가 없어도 인터페이스만으로 호출 가능

  • public을 생략하더라도 컴파일 과정에서 자동 생성

  • 실행부(중괄호 안)에 상수 필드를 제외한 추상 메소드, 디폴트 메소드, private 메소드 등을 호출할 수 없음

  • 위의 메소드들은 구현 객체가 필요하기 때문

public interface 인터페이스명 {
    [ public | private ] static 리턴타입 메소드명(매개변수, ...) { ... }
}


8.7 private 메소드

📌 인터페이스의 private 메소드

  • 인터페이스에는 외부에서 접근할 수 없는 private 메소드 선언 가능

  • private 메소드 : 구현 객체가 필요한 메소드 (디폴트 메소드 안에서만 호출 가능)

  • private 정적 메소드 : private 범위인 정적 메소드, 구현 객체가 필요 없는 메소드 (디폴트 메소드, 정적메소드에서 호출 가능)

  • private 메소드의 용도는 디폴트와 정적 메소드들의 중복 코드를 줄이기 위함

profile
🔥 개발 공부 🔥
post-custom-banner

0개의 댓글