Java Study

인터페이스(Interface)

Z00_HWAN_99 2024. 7. 2. 17:14
728x90
반응형

다형성 보장 4가지 전제 조건

  1. 상속
  2. 업캐스팅
  3. 오버라이드
  4. 동적 바인딩

추상 클래스 : 실체로 구현하는 구현 클래스가 아님. 디자인을 위한 템플릿 클래스

  • 클래스 상속
  • 부모 생성자 호출 : super()
  • protected, public 접근 제한의 의미
  • final, static final (멤버, 클래스, 메서드)
  • 타입 변환(upcasting, downcasting)
  • 객체 타입 확인 작업 : instanceOf
  • 다형성을 제공하는 방법 : 멤버 타입, 메서드 호출

인터페이스의 개념?

  • 추상 클래스와 마찬가지로 인터페이스는 그 자체의 객체를 만들 수 없음.
  • 추상 클래스는 추상 메서드와 일반 메서드를 포함할 수 있지만 인터페이스는 추상 메서드만 포함할 수 있음.
  • 두 객체를 연결하는 역할 & 다형성 구현에 주된 기술.

인터페이스 사용 이유

  • 완전한 추상화를 구현할 수 있음.
  • 다중 상속을 구현할 수 있음.
  • 느슨한 결합 관계를 형성할 수 있음.

인터페이스의 선언

  • 인터페이스는 interface 키워드를 사용하여 선언.
  • 인터페이스 내부에 있는 모든 메서드는 추상 메서드, 즉 본문이 없는 메서드임.
  • 접근 제한자로는 클래스와 마찬가지로 같은 패키지 내에서만 사용 가능한 default, 패키지와 상관없이 사용하는 public을 붙힐 수 있음.
  • 인터페이스 메서드
    • 추상 메서드처럼 본문이 없이 전급제한자, 이름, 반환 유형, 메서드에 대한 매개변수만을 포함하고, 인터페이스를 구현하는(상속받는) 클래스에서 모든 메서드를 구현해야 함.
    • 인터페이스 메서드는 기본적으로 public과 abstract이므로 명시적으로 선언하지 않아도 되며, 인터페이스 내에서 private 또는 abstract가 아닌 메서드를 정의하면 오류가 발생.

구현 클래스 선언

  • 인터페이스에 정의된 추상 메서드에 대한 실행 내용이 구현.
  • implements 키워드는 해당 클래스가 인터페이스를 통해 사용할 수 있다는 표시이며, 인터페이스의 추상 메서드를 재정의한 메서드가 있다는 뜻.

변수 선언과 구현 객체 대입

  • 인터페이스는 참조 타입에 속하므로 인터페이스 변수에는 객체를 참조하고 있지 않다는 뜻으로 null 대입 가능.
  • 인터페이스를 통해 구현 객체를 사용하려면, 인터페이스 변수에 구현 객체의 번지를 대입해야 함.

상수 필드

  • 인터페이스는 public static final 특성을 갖는 불변의 상수 필드 멤버를 가질 수 있음.
  • 인터페이스에 선언된 필드는 모두 public static final 특성을 갖기 때문에 public static final을 생략해도 자동으로 컴파일 과정에서 붙음.
  • 상수명은 대문자로 작성하되, 서로 다른 단어로 구성되어 있을 경우에는 언더바(_)로 연결.

추상 메서드

  • 리턴 타입, 메서드명, 매개변수만 기술되고 중괄호 {}를 붙히지 않는 메서드.
  • public abstract을 생략하더라도 컴파일 과정에서 자동으로 붙음.
  • 추상 메서드는 객체 A가 인터페이스를 통해 어떻게 메서드를 호출할 수 있는지 방법을 알려주는 역할.

디폴트 메서드

  • 인터페이스에는 완전한 실행 코드를 가진 디폴트 메서드를 선언할 수 있음.
  • 추상 메서드는 실행부(중괄호{})가 없지만 디폴트 메서드는 실행부가 있음.
  • default 키워드가 리턴 타입 앞에 붙음.
  • 디폴트 메서드의 실행부에는 상수 필드를 읽거나 추상 메서드를 호출하는 코드를 작성할 수 있음.

정적 메서드

  • 구현 객체가 없어도 인터페이스만으로 호출할 수 있음.
  • 선언 시 public을 생략하더라고 자동으로 컴파일 과정에서 붙음.
  • 정적 실행부를 작성할 때 상수 필드를 제외한 추상 메서드, 디폴트 메서드, private 메서드 등을 호출할 수 없음.

private 메서드

  • 인터페이스의 상수 필드, 추상 메서드, 디폴트 메서드, 정적 메서드는 모두 public 접근 제한을 가짐.
  • public을 생략하더라도 항상 외부에서 접근이 가능.
  • 인터페이스에 외부에서 접근할 수 없는 private 메서드 선언도 가능.
구분 설명
private 메서드 구현 객체가 필요한 메서드
private 정적 메서드 구현 객체가 필요 없는 메서드
  • private 메서드는 디폴트 메서드 안에서만 호출이 가능.
  • private 정적 메서드는 정적 메서드 안에서만 호출이 가능.

다중 인터페이스

  • 구현 객체는 여러 개의 인터페이스를 통해 구현 객체를 사용할 수 있음.
  • 구현 클래스는 인터페이스 A와 인터페이스 B를 implements 뒤에 쉼표로 구분해서 작성하여, 모든 인터페이스가 가진 추상 메서드를 정의.

인터페이스 상속

  • 인터페이스도 다른 인터페이스를 상속할 수 있음. 다중 상속을 허용.
  • extends 키워드 위에 상속할 인터페이스들을 나열.
  • 자식 인터페이스의 구현 클래스는 자식 인터페이스의 메서드뿐만 아니라 부모 인터페이스의 모든 추상 메서드를 재정의.
  • 구현 객체는 다음과 같이 자식 및 부모 인터페이스 변수에 대입될 수 있음.
  • 단일 상속
    • 추상 클래스와 마찬가지로 인터페이스도 인스턴스를 만들 수 없기 때문에 상속을 사용.
    • 인터페이스의 상속에는 implements 키워드를 사용하고 상속받은 클래스를 인터페이스를 구현하는(상속받는) 클래스 또는 인터페이스 구현체라고 부름.
    • 인터페이스를 구현하는 클래스는 반드시 인터페이스 내에 선언된 모든 메서드를 구현해야 함.
  • 다중 상속
    • 단일 클래스가 둘 이상의 클래스를 상속할 수 없어 다중 상속이 불가능하기 때문에 인터페이스를 사용하여 다중 상속을 구현함.

자동 타입 변환

  • 자동으로 타입 변환이 일어나는 것.
  • 부모 클래스가 인터페이스를 구현하고 있다면, 자식 클래스도 인터페이스 타입으로 자동 타입 변환될 수 있음.

강제 타입 변환

  • 캐스팅 기호를 사용해서 인터페이스 타입을 구현 클래스 타입으로 변환시키는 것.
  • 구현 객체가 인터페이스 타입으로 자동 변환되면, 인터페이스에 선언된 메서드만 사용 가능.

다형성

  • 사용 방법은 동일하지만 다양한 결과가 나오는 성질.
  • 인터페이스 역시 다형성을 구현하기 위해 재정의와 자동 타입 변환 기능을 이용.

매개변수의 다형성

  • 매개변수 타입을 인터페이스로 선언하면 메서드 호출 시 다양한 구현 객체를 대입할 수 있음.

https://github.com/bottomsUp-99?tab=repositories

 

bottomsUp-99 - Overview

Backend Developer. bottomsUp-99 has 10 repositories available. Follow their code on GitHub.

github.com

 

 

728x90
반응형

'Java Study' 카테고리의 다른 글

JDBC 라이브러리  (0) 2024.07.07
예외 처리(Exception Handling)  (1) 2024.07.07
추상화  (3) 2024.07.01
@Override가 있고 없고의 차이  (2) 2024.06.30
상속(Inheritance)이란?  (0) 2024.06.28