|
|
제목:한적한 밤거리
인터페이스란
일종의 추상클래스
추상메서드를 갖지만 추상 클래스보다 추상화 정도가 높다
추상메서드와는 달리 몸총을 갖춘 일반메서드 또는 멤버변수를 구성원으로 가질 수 없다.
오직 추상 메서드의 상수만 멤버로 가짐
추상클래스 부분적으로 완성된 '미완성 설계도'
인터페이스 구현된것은 아무것도 없고 밑그림만 그려져 있는 '기본 설계도'
인터페이스는 다른 클래스를 작성하는데 도움을 줄 목적으로 작성
인터페이스 작성
class → interface
interface 인터페이스이름{
public static final 타입 상수 이름= 값;
public abstract 메서드 이름(매개 변수 목록);
}
제약사항
모든 멤버변수는 public static final 이어야 하며 생략 가능
모든 메서드는 public abstract 이어야 하며 생략 가능
생략된 제어자는 컴파일러가 자동으로 추가해줌
인터페이스 상속
인터페이스는 → 인터페이스 끼리만 상속가능
클래스와 달리 다중상속 가능
interface A{
void x();
}
interface B{
void y();
}
interface C extends A,b{}
인터페이스 구현
자체 인스턴스 생성X
정의돈 추상 메서드가 몸총을 만들어주는 클래스를 작성
인터 페이스를 구현한다는 의미의 키워드 'implements'를 사용
class A implements B{}
class A implements B{
public void x(){ 구현내용}
public void y(){ 구현내용}
}
인터페이스도 일부만 구현하면 추상클래스로 선언 되어야 함
abstract class A implements B{
public void x(){ 구현내용}
}
상속과 구현을 동시에 할수 있다.
class A extends C implements B{
public void x(인자값1,인자값2){ 구현내용}
public void y(인자값1){ 구현내용}
}
오버라이딩시 조상 메서드보다 넓은 범위의 접근 제어자를 지정해야함
인터페이스 상속시
인터페이스상의
public abstract가 생략되있음
그렇기 때문에 상속받는 클래스는 public void~ 접근제어자를 반드시 public으로
인터페이스를 이용한 다중상속
이름이 같고 메서드 선언부가 일치 구현 내용이다르면 누구의 것을 상속받는지 알수 없다 그렇기 때문에 단점이 더커 다중상속은 자바에서 하지않음
C++은 다중상속을 하기 때문에 그에 대한 대응으로 '자바도 인터페이스를 이용한다면 다중상속이 가능하다'라는 것일뿐 자바에서 인터페이스로 다중상속을하는 경우는 거의없다.
인터페이스를 이용한 다형성
다형성
B b=(B)new A();
B b=new A();
인터페이스 다형성
void B(A a){}
매게 변수의 타입으로 사용될 수 있다.
자손을 호출할때는 매개변수로 인터페이스를 구현한 클래스의 인스턴스를 넘겨줘야함
메서드의 리턴 타입으로 인터페이스의 타입을 지정하는것도 가능
B method(){
return new B();
}
A a=B.get메소드("명");
public static A get메소드(타입 명){
if(명.equals("명"){
return new B();
}else{
A a=new B();
return a;
}
}
위결과는 A a=new B(); tngodehlsrjtrhk rkxdma
분산환경 프로그래밍에서 위력을 발휘 사용자 컴퓨터의 설치된 프로그램을 변경x
서버측의 변경만으로도 사용자가 새로 개정된 프로그램을 사용가능
인터페이스의 장점
1.개발시간의 단축
하나의 인터페이스로 여러사람이 작업가능
2.표준화가 가능
기본틀을 먼저 인터페이스로 작성후 일관되고 정형화된 프로그램의 개발가능
3.서로 관계없는 클래스를 관계를 맺어줌
서로 아무런 관계도 없는 클래스들에게 하나의 인터페이스를 공통적으로 구현 함으로 관계를 맺어줌
4.독립적인 프로그래밍이 가능
클래스의 선언과 구현을 분리 시킬수 있다.
클래스와 클래스의 직접적인 관게를 인터페이스를 이용 간접적인 관계로 변경하면 다른클래스에 영향을 미치지 x
void A(class명 b){}
void A(class명 c){}
void A(class명 B[b의 상위클래스]){}
void A(class명 C[c의 상위클래스]){}
같은행동을 하여도 적용하는 대상이 다르면 그때마다 적용해야함
인터페이스 적용 후
interface a{}
class x extends B implements a{}
class y extends B implements a{}
class z extends C implements a{}
각기 맞게 상속후 공통 사용 인터페이스를 다시 적용가능
void A(a 명){}
ex) 총해야할 행동 1,2,3,4 가 있고
각기 객체 마다 해야할 할동이 다를경우
중간처리 할곳으로 연결시켜주는게 인터페이스
interface 명{
해야할일1();
해야할일2();
해야할일3();
해야할일4();
}
class 처리단 implement 명 {
해야할일1(){할일};
해야할일2(){할일};
해야할일3(){할일};
해야할일4(){할일};
}
class a extends A implments 처리단{
처리단 명=new 처리단();
할일1;
할일2;
할일3;
할일4;
a만 할일1;
}
class b extends A implments 처리단{
처리단 명=new 처리단();
할일1;
할일2;
할일3;
할일4;
b만 할일1;
}
이렇다면 처리단만 수정하면 전부 적용가능
인터페이스의 이해
클래스를 사용하는 user와 클래스를 제공하는 privider가 있다.
메서드를 호출하는 user에서는 사용하는 메서드 privider의 선언부만 알면 된다 ( 내용은 몰라도됨)
A클래스에서 B클래스의 메서드를 실행하는 관계에서
한쪽만 변경되도 다른쪽도 변경이되어야 한다. A-B관계
but 인터페이스는 A-I-B 관계를 만들어버림으로서 한쪽이 변경되도 서로 영향이 미치지 않도록하는것
'코딩 > Java' 카테고리의 다른 글
| java.long 패키지 (0) | 2016.03.30 |
|---|---|
| 예외처리(excption handling) (0) | 2016.03.29 |
| 추상클래스(abstract class) (0) | 2016.03.22 |
| 다형성(polymorphism) (0) | 2016.03.21 |
| 제어자(modifier) (0) | 2016.03.16 |