< interface >
인터페이스는 메소드들을 abstract ( 구현하지 않은 상태 ) 로 선언만 해두고,
뒷방에서 열일하는 클래스들이 인터페이스를 implements 해서 실제로 구현시킨다.
서비스를 제공할 때, 고객들에게는 이 interface 만을 제공하고, 실제 class 는 숨겨놓을 수 있는,
객체지향의 특징 중에 하나이기도 하다.
"고객님은 그저 편하게 쓰세요! 뒷방에서 뭔 일이 벌어지는지는 신경 안쓰셔도 됩니다! "
- interface 에서는
1. 메소드 [ abstract + public ]
( interface 메소드에는 자동으로 "abstract public" 숨어서 붙어있다 )
- abstract => 메소드는 선언만 해둔다. (구현 X)
- public => 기본이 public 레벨이므로
=> 상속해서 override 할 때 "public" 꼭 붙여줘야 한다.
( override 는 modifier 범위 같거나 더 넓어야함 )
2. 변수 [ public + static + final ]
( interface 변수에는 자동으로 "public static final" 숨어서 붙어있다.)
- final => interface 안에서 값을 꼭 줘야 한다. (선언 + "할당")
(public static final) Double pi = 3.14;
- static => 기본이 static 으로 만들어지므로, Interface명으로 직접 소환가능 ( 객체 생성X )
static 이므로 구분할필요없을 땐, 그냥 변수명 그대로 가져다 쓰면되고,
변수명 겹쳐서 구분 해야할때는, Interface명으로 직접 소환해서 구분
(public static final) String name = "June";
3. 정상적 class 에서 implements 로 "상속" 한다. ( implements 는 "상속" + "구현" )
interface 에 있는 메소드들은 반드시 모두 구현해야 한다. (@override)
+ 추가로 만들고 싶은거 만들기
4. interface 특징
- interface 는 객체 생성 X ( 상속=>구현 은 필수 )
- 생성자가 아예없다. ( 기본생성자도 X )
- class 입장에서 다른 클래스 상속하면서, 동시에 인터페이스 implements 할 수 있다.
class A extends B implements C{ } ( 쉼표없이 띄어쓰기로 잇는다. )
- class 는 interface 여러개를 implements 할 수 있다.
각 interface 의 모든 메소드를 구현해야 겠지.
- 하나의 interface 를 여러 class 들이 각자 implements 할 수 있다.
=> 각자 다르게 구현 => 다형성
- interface는 다른 interface를 extends 상속할 수 있고, 다중상속 할 수 있다.
---
(참고)
// jdk 1.8 이상 인터페이스 문법 추가
< interface 인데, 메소드 구현해놓는 문법 >
interface A{
void ma( ); // 오버라이딩 구현 필수
default void mb( ){ 이건 니들이 다 공통으로 쓸 것 같다.
여기서 구현해놀게 가져다 써라.
단, 오버라이딩 하고싶으면 바꿔서 쓰고 }
=> 이 기능이 1.8 이후에 가능해졌다. (아직 1.8 안된 환경 많음 )
static void mc( ){ 스태틱으로 줘도 가능 }
class B implements A{
public void ma( ) { 구현 필수 }
main{
B b1 = new B( ) ;
b1.mb( ) ; ( O )
b1.ma( ) ; ( O )
B가 인터페이스 A를 implements(상속)한거니까,
미리 구현해놓은 interface 메소드 사용 가능
static 으로 구현해둔거는
sout ( B.mc( ); ) class로 바로 소환가능
//
'Back to the Java' 카테고리의 다른 글
String 메소드 / subString / charAt / split / contains / indexOf / matches / Tokeni (0) | 2022.07.04 |
---|---|
Exception 예외처리 / try-catch / throws / throw는 생성 (0) | 2022.07.01 |
A a1 = new B( ); 객체 형변환 , 자동 / 명시적 (0) | 2022.06.30 |
abstract 클래스-메소드 / super 메소드-생성자 (0) | 2022.06.27 |
상속과 Override, 상속을 막는 final 메소드와 final 클래스. (0) | 2022.06.27 |