인터페이스는 클래스와는 달리 다중상속을 허용한다.
인터페이스를 상속을 받았으면 인터페이스가 가지고 있는 추상 메소드를 모두 구현해야한다.
그렇지 않다면 본인도 인터페이스가 되어야 한다.
인터페이스를 구현하는 클래스에서는 추상 메소드를 구현할 때 public 접근 제한자를 붙이지 않으면 에러가 난다.
부모가 가지고 있는 접근 제한보다 더 강하게 접근 제한을 할 수 없기 때문이다.
자바 7까지는 인터페이스는 상수 필드와 추상 메소드만을 구성 멤버로 가졌지만 자바 8부터는 default와 static 메소드, 자바 9부터는 private 메소드도 가질 수 있게 되었다.
default키워드를 갖는 default 메소드의 접근 제한은 public으로 접근 제한자를 붙이지 않으면 컴파일러가 자동으로 생성해준다.
인터페이스는 자기 자신의 객체를 생성할 수 없지만 static 메소드를 사용할 수 있게 되면서 인터페이스명.static메소드()를 실행하여 구현 객체를 만들지 않고도 원하는 기능을 구현할 수 있다.
인터페이스가 메소드의 매개변수 타입으로 사용될 경우, 메소드 호출시, 구현 객체를 매개값으로 대입할 수 있다.=>어떤 구현객체를 매개값으로 주느냐에 따라서 printSound()메소드의 실행결과는 다르게 나온다!=>다형성을 구현한 것!
인터페이스: 객체의 사용 방법을 정의한 타입이며 개발 코드와 객체가 서로 통신하느 접점 역할을 한다.
개발 코드가 인터페이스의 메소드를 호출하면 인터페이스는 객체의 메소드를 호출시킨다.
구성 멤버는 상수 필드와 추상 메소드이다.
상수 필드: 인터페이스의 상수 필드는 기본적으로 public static final 특성을 갖는다.
관례적으로 필드 이름은 모두 대문자로 작성해야 하며, 선언 시 초기값을 대입해야 한다.
추상 메소드: 인터페이스에 선언된 메소드는 public abstract가 생략되고 메소드 선언부만 있는 추상 메소드이다.
구현 클래스는 반드시 추상 메소드를 재정의해야 한다.
implements: 구현 클래스는 어떤 인터페이스로 사용 가능한지(어떤 인터페이스를 구현하고 있는지)를 기술하기 위해 클래스 선언 시 implements 키워드를 사용한다.
인터페이스 사용: 클래스를 선언할 때 인터페이스는 필드, 생성자 또는 메소드의 매개 변수, 생성자 또는 메소드의 로컬 변수로 선언될 수 있다.
인터페이스 사용: 클래스를 선언할 때 인터페이스는 필드, 생성자 또는 메소드의 매개 변수, 생성자 또는 메소드의 로컬 변수로 선언될 수 있다.
1)인터페이스가 필드 타입으로 사용될 경우: 필드에 구현 객체를 대입할 수 있다.
2)인터페이스가 생성자의 매개 변수 타입으로 사용될 경우: new 연산자로 객체를 생성할 때 구현 객체를 생성자의 매개값으로 대입할 수 있다.
3)인터페이스가 로컬 변수 타입으로 사용될 경우: 변수에 구현 객체를 대입할 수 있다.
4)인터페이스가 메소드의 매개 변수 타입으로 사용될 경우: 메소드 호출 시 구현 객체를 매개값으로 대입할 수 있다.
대입이 된 후에는 재정의된 구현 객체의 메소드를 호출할 수 있다.
메소드의 매개변수 타입으로 인터페이스를 사용 가능 (실제 구현할 때에는 구현 객체를 매개변수로 넣어준다)
instanceof를 이용해 실제 객체가 속해있는지부터 확인하는것이 좋다.
'Java > information' 카테고리의 다른 글
[자바/JAVA] 익명 객체 (0) | 2023.05.15 |
---|---|
[자바/JAVA] 중첩클래스 (0) | 2023.05.11 |
[자바/JAVA] 추상 클래스와 인터페이스 (0) | 2023.05.04 |
[자바/JAVA] 추상 클래스 (0) | 2023.05.02 |
[자바/JAVA] 다형성 (0) | 2023.04.28 |