백기선 자바 라이브 스터디8: 인터페이스

Hoyoung Jung·2021년 1월 9일
2

소감

  • 제목만 봐도 배가 부른 느낌이다라고 육성으로 소리내서 말했다.

추상 메서드 복습

  • 선언만 있고 구현은 없는 메서드를 추상 메서드라고 한다.
  • abstract 키워드 사용
abstract void foo();

인터페이스

  • 클래스가 블루프린트라면 추상클래스는 미완성 설계도이다. 하나 이상의 추상 메서드를 포함하면 추상클래스가 된다.
  • (스펙) 인터페이스는 자바의 참조 타입 중 하나로, 인스턴스 변수가 없고 보통 하나 이상의 추상 메소드를 포함한다.
  • 추상클래스보다 추상화의 정도가 높다고 말하면 괜찮을까? 자바 8이후로 명확하게 인터페이스는 이것이다라고 정의하기가 어려워졌다.

인터페이스의 선언

스펙

InterfaceDeclaration:
NormalInterfaceDeclaration
AnnotationTypeDeclaration
NormalInterfaceDeclaration:
{InterfaceModifier} interface Identifier [TypeParameters] [ExtendsInterfaces] InterfaceBody
  • 기본적으로 인터페이스는 두가지 방식으로 선언할 수 있다. 일반 인터페이스 선언과 어노테이션 타입 선언이다.
  • 자세한 건 어노테이션 공부를 더 해야할 듯.
  • (내돈 내산 리뷰) 인프런 기선님 더 자바 코드조작의 어노테이션 강의가 짱 좋았다. 책에서 볼 때는 "그래서 어쩌라고?" 느낌이었는데 강의 내용을 보니 "아하! 이거구나!" 이런 느낌. 잘 와 닿았다.

일반 선언

inteface Hello {
	public static final StringCAPTAIN = "whiteship";
    public abstract void sayHello();    
}
  • 모든 멤버변수는 public static final이어야 하며 제어자 생략 가능
  • 모든 메소드는 public abstract여야 하며 역시 제어자 생략 가능

인터페이스의 상속

  • (몰랐던 사실) 인터페이스도 상속 가능하다. 클래스와 달리 다중상속 가능!
interface Talk extends Hello, Goodbye {
//...
}

인터페이스의 구현

  • implements 키워드 사용
  • 추상 메소드를 구현한다.
  • 상속과 동시에 구현도 가능
class Jombie extends Monster implements Walk, Attak {
	@Override
    public void walk() {
    	this.x += getXSpeed(this.speed);
        //...
    }
}

인터페이스의 참조를 통해 구현체 사용

  • 이건 뭘까요? 정확하게 몰라서 스터디 때 잘 들어야겠다.
  • 아래 같은 코드를 말하는 게 아닐까 싶다.
        Hello honux = new Hello() {
            @Override
            public void sayHi() {
                System.out.println("Hello " + CAPTAIN + ". I am honux");
            }
        };
        honux.sayHi();

인터페이스의 기본 메소드 (Default Method), 자바 8

  • 어느 순간 인터페이스에 몸통이 들어갈 수 있게 되었구나라고 생각했는데, 자바 8부터였다.
  • default 메소드도 재정의 가능하다.
    default void pooh() {
        System.out.println("Think, think, ... I am pooh the bear... Am I?");
    }

인터페이스의 static 메소드, 자바 8

  • 역시 자바 8에서 스태틱 메소드가 생겼다.
  • 스태틱 메소드도 바디가 필요하다.
    static void foo() {
        System.out.println("foo bar");
    }
  • [주의] 인터페이스의 스태틱 메소드는 상속이 되지 않는다.
Hello.foo() //ok
honux.foo() //error

인터페이스의 private 메소드, 자바 9

  • 이게 되는구나! 자바9 처음 나왔을 때 응 되는구나 하고 지나갔던 기억이 난다.
  • 메소드 분리에 사용될 수 있다.
  • private static 도 된다.
    private void doh() {
        System.out.println("Doh!");
    }
    private static void re() {
        System.out.println("Re!");
    }

참고문헌

profile
주짓수를 좋아하는 개발자

1개의 댓글

comment-user-thumbnail
2021년 1월 14일

호눅스 velog 놀러왔어요☺ 인터페이스에서도 default를 통해 구현체를 가질 수 있어서 추상 클래스와의 차이점이 뭘까 했는데 인터페이스가 추상화의 정도가 더 높다(?)고 이해할 수 있군요🤔 다중상속이 가능한 것도 차이점이 될 수 있겠네요ㅎㅎ

답글 달기