JAVA 추상클래스 및 인터페이스

MINJU KIM·2023년 11월 13일

추상클래스

  1. 실체클래스의 공통적인 부분(변수,메서드)를 추출해서 선언한 클래스
  2. 추상클래스는 객체를 생성할 수 없다! 실체성이 없고 구체적이지 않기 때문.
  3. 추상클래스와 실체클래스는 상속관계!
  4. 공통된 필드와 메서드를 통일할 목적으로 사용된다.
public abstract class 클래스명{

  //필드
  //생성자
  //메서드
  //추상메서드
  }

추상메서드

앞에 abstract 키워드가 붙고, 구현부(중괄호{} 로 감싸져 있는 부분)를 없앤 메서드

abstract 리턴타입 메서드이름();

abstract class Player { // 추상 클래스
    abstract void play(int pos); // 추상 메서드
    abstract void stop(); // 추상 메서드
}

class AudioPlayer extends Player {
    void play(int pos) { ... }; // 추상 메서드를 구현
    void stop { ... }; // 추상 메서드를 구현
}

abstract class AbstractPlayer extends Player {
    void play(int pos) { ... } // 추상 메서드를 구현
}

인터페이스

일종의 추상클래스.
추상메서드와 상수(변하지 않는 값)만을 멤버로 가질 수 있다.

public interface 인터페이스명 {
    // 상수
    타입 상수명 =;
    
    // 추상 메소드
    타입 메소드명(매개변수, ...);
    
    // 디폴트 메소드
    default 타입 메소드명(매개변수, ...) {
        ...
    }
    
    // 정적 메소드
    static 타입 메소드명(매개변수, ...) {
        ...
    }
}

인터페이스의 역할

  • 인터페이스는 객체의 사용 방법을 정의한 타입
  • 인터페이스는 객체의 교환성을 높여주기 때문에 다형성을 구현하는데 매우 중요한 역할
  • 인터페이스는 개발 코드와 객체가 서로 통신하는 접점 역할. 서로 관계 없는 클래스들에게 관계를 맺어줄 수 있다.
  • 개발 코드가 인터페이스의 메소드를 호출하면 인터페이스는 객체의 메소드를 호출

인터페이스의 구성요소

상수 필드 (Constant Field)

[public static final] 타입 상수명 =;
  • 인터페이스는 런타임 시 데이터를 저장할 수 있는 필드(인스턴스, 정적필드)를 선언할 수 없습니다.
  • 상수를 선언할 때는 반드시 초기값을 대입.
  • 인터페이스 상수 필드는 static {} 블록으로 초기화할 수 없기 대문에 반드시 선언과 동시에 초기값을 지정해야 합니다.
  • public static final을 생략가능

추상 메소드 (Abstract Method)

[public abstract] 리턴타입 메소드명(매개변수, ...);
  • 추상 메소드는 리턴타입, 메소드명, 매개 변수만 기술되고 중괄호 {}를 붙이지 않는 메소드입니다.
  • 구현 클래스에서 구현해야 하는 메소드입니다.
  • public abstract 선언 생략가능.

디폴트 메소드 (Default Method)

[public] default 리턴타입 메소드명(매개변수, ...) { 
    // ... (실행 내용)
}
  • default 키워드가 리턴 타입 앞에 붙습니다.
  • 디폴트 메소드는 인스턴스 메소드이므로 구현 객체가 있어야 사용할 수 있습니다.
  • 디폴트 메소드는 인터페이스의 모든 구현 객체가 가지고 있는 기본 메소드
  • 구현 클래스 작성 시 디폴트 메소드를 오버라이딩해서 해당 구현 클래스에 맞게 수정할 수 있습니다.
  • 디폴트 메소드는 public 특성을 갖기 때문에 public을 생략가능.

정적 메소드 (Static Method)

[public] static 리턴타입 메소드명(매개변수, ...) { 
    // ... (실행 내용)
}
  • static 키워드가 리턴 타입 앞에 붙습니다.
  • 객체가 없어도 인터페이스만으로 호출이 가능합니다.
  • 정적 메소드는 public 특성을 갖기 때문에 public을 생략가능

인터페이스의 구현(implement)

public class 구현클래스명 implments 인터페이스명 {
	// 인터페이스에 선언된 추상 메소드의 실체 메소드 선언
}
  • implements 키워드
  • 인터페이스에 선언된 추상 메소드의 실체 메소드 선언

다형성

여러가지 형태를 가질 수 있는 능력.
조상 클래스 타입의 참조변수로 자손클래스의 인스턴스를 참조할 수 있도록 하는 것.


[JAVA] 자바 추상클래스란?
https://limkydev.tistory.com/188
[Java] 객체의 다형성 구현 (인터페이스)
https://veneas.tistory.com/entry/Java-%EA%B0%9D%EC%B2%B4%EC%9D%98-%EB%8B%A4%ED%98%95%EC%84%B1-%EA%B5%AC%ED%98%84-%EC%9D%B8%ED%84%B0%ED%8E%98%EC%9D%B4%EC%8A%A4
[JAVA] 인터페이스란? (다형성, 추상클래스, implements)
https://doozi0316.tistory.com/entry/JAVA-%EC%9D%B8%ED%84%B0%ED%8E%98%EC%9D%B4%EC%8A%A4%EB%9E%80-%EB%8B%A4%ED%98%95%EC%84%B1-%EC%B6%94%EC%83%81%ED%81%B4%EB%9E%98%EC%8A%A4-implements

0개의 댓글