[TIL] 8/4 데브코스 W1D3

.·2021년 8월 5일
0

자바 Interface 이야기

구현부가 아닌, 구현 코드를 호출하고 실행하는 부분 = 호스트 코드
호스트 코드 쪽으로 모든 결정을 미뤄라.

  • 장점:
    • 호출하는 쪽에서 원하는 동작을 바꿔가면서 실행 가능
    • 구현 부분을 건드리지 않아도 됨. -> 안정적인 코드

2. Default Method(디폴트 메소드)

  • dafault 키워드로 interface가 구현 메소드를 가질 수 있게 한다.
  • 꼭 override할 필요 없다.

3. Functional Interface(함수형 인터페이스)

  • 한 개의 추상 메소드만 가진 인터페이스
  • 여기서의 추상 메소드가 함수이다. (네이밍의 특별한 이유는 없음..)
  • default method와 static method 유무는 상관 없다
  • 예시
@FunctionalInterface
public interface Runnable {
    void run();	// 추상 메소드, 함수
    
    static void printHi() {
        System.out.println("Hi");
    }

    default void printBye() {
        System.out.println("Bye");
    }
}

4. 람다 표현식

* 익명 클래스 & 익명 메소드

  • 익명 클래스는 추상 메소드 여러 개 가능
  • 익명 메소드는 함수형 인터페이스(추상 메소드 하나만 존재)여야 한다.
    • () -> {구현부};로는 메소드 하나만 구현 가능하기 때문.
    • 익명 클래스 생성 부분에서 없어도 되는 부분을 지운다.
// 여기서 Runnable은 Functional Interface
// 1. 익명 클래스
Runnable runnable1 = new Runnable() {
    @Override
    public void run() {
        System.out.println("run run~");
    }
};
runnable1.run();

// 2. 익명 메소드를 사용해서 표현하는 방법: 람다 표현식
// 익명 클래스 부분에서 뻔한 부분을 지운다.
Runnable runnable2 = () -> System.out.println("run run~");
runnable2.run();
  • 삭제하는 부분
    • new ~() : interface type이 명시되어있고 이 타입으로 인스턴스 만들것.
    • @Override : interface이기 때문에 override해주는 것은 당연함.
    • public void run : functional interface이기 때문에 추상 메소드가 하나이다. 어떤 메소드인지 이미 알고 있다.
  • 남겨두는 부분
    • () : 메소드의 인자 부분
    • {~}; : 구현부
  • -> : 선언 부분과 {메소드 구현 부분}을 구분

궁금점

  1. default 메소드를 가진 interface와 abstract class의 차이는??
    • 추측) implements는 여러 개 할 수 있지만 extends는 하나밖에 못 해서 그런것 같기도 하고.

오늘도 모르는 내용 투성이였다. 새로 안 내용들을 TIL에 적기에는 너무 많을 것 같아서 따로 정리를 또 해야겠다.

0개의 댓글