반응형

[광고 누르면 오늘의 행운 상승!!]

자바의 인터페이스는 다중상속을 지원하기 위하여 만들었다.
인터페이스에서 public하게 최소의 메소드만 공개를 시킨다.

interface

interface IFlyer{
	int i =11;
	public static final int j =22; 	
}
//아래 위로 같은 코드이다 int i = 11과 같은 방식으로 작성하면 자동으로 아래의 코드로 바꿔준다.

 

public static final int i = 11; 전역상수

public        final int i = 22; 인스턴스상수

public static       int i = 33; 전역변수

public              int i = 44; 인스턴스변수

public static final int i =11;
int j =22; //컴파일러가 알아서 public static final을 붙여줌

public abstract void fly();
void land(); // 컴파일러가 알아서 public abstract 를 붙여줌

class Airplane implements IFlyer{ //에러 발생) 인터페이스 메소드를 구현하지 않아서
	
}

abstract class Airplane implements IFlyer{ //에러 발생) 인터페이스 메소드를 구현하지 않아서
	
}

자바 개발자들은 클래스 상속 관계(is a relationship)가 의존관계라서 별로 좋아하지 않는다.
의존성이 낮은 인터페이스 상속 관계를 더 좋아한다.

B -------> A 를
B -------> IA 관계로 바꿔서 캡슐화 한다.

인터페이스에서 Public 하게 최소한의 메소드만을 공개하고 인터페이스는 캡슐화 되어있는 A의 
함수를 실행시킨다. (A는 사용자가 볼 수 없으며 개발자가 자유롭게 업데이트 가능하다. 물론 
B에게 큰 영향을 끼치지 않는다.)

추후에 팩토리 메소드? 를 사용하면 IFlyer를 상속받는 bird, airplane등의 클래스 명들을 
숨길 수 있다.(캡슐화)

abstract , Interface 를 API라고 보면 된다.

인터페이스로 설계 하지 못하는 3가지 경우

1. 하위 클래스에 메소드가 중복이 되어진다. -> 슈퍼로 올려야한다. -> 인터페이스는 구현부가 없다.
-> 중간에 
2. 하위 클래스에 변수가 중복이 되어진다. -> 인터페이스는 상수밖에 두지 못한다. ->중간에 abstract
클래스를 끼우고 그 위에 올린다.
3. A클래스를 상속받는 B클래스 --? 제대로 못들음

abstract 클래스는 객체를 생성할 수 없기 때문에 super 클래스로 만들어야한다.

클래스에 마우스 오른쪽 - 리펙터 - 인터페이스 추출로 인터페이스 생성

인터페이스 메소드에 Ctrl + 마우스 올리면 구현부로 갈지 선언부로 갈지 정할 수 있다

자바5.0 부터 오토박싱, 오토언박싱이 되기 때문에 int 에 integer값을 넣어도 알아서 들어간다..
반응형

'3. 자바 > 2. Class' 카테고리의 다른 글

중첩 클래스  (0) 2020.03.02
Overriding  (0) 2020.03.02
this, super  (0) 2020.03.02
생성자  (0) 2020.03.02
제한자  (0) 2020.03.02

+ Recent posts