728x90
인터페이스
- interface라는 키워드로 선언이 가능하다.
- class 키워드 대신 interface 키워드가 붙는다.
- 추상메서드롸 상수를 가질 수 있다.
- 인터페이스를 상속 받을 시에는 implements 키워드로 상속 받는다.
- 인터페이스를 상속받는 클래스는 다중 상속이 가능하다. 다중 상속을 남발하면 좋지는 않지만 대형 프로젝트에는 필요하다
package kr.or.ksmart;
interface SampleInterface{
public void show();
}
interface SampleInterface2{
public void print();
}
class Sample implements SampleInterface, SampleInterface2{
@Override
public void print() {
}
@Override
public void show() {
}
}
public class JavaBasic02 {
public static void main(String[] args) {
//약결합 - 다형성이 없음
Sample s = new Sample();
s.show();
s.print();
//강결합
SampleInterface ims1 = s; //업캐스팅 - 다형성
ims1.show();
SampleInterface2 ims2 = s; //업캐스팅 - 다형성
ims2.print();
}
}
인터페이스 확장하기
- 인터페이스끼리 확장이 가능하며, extends로 확장한다.
- extends는 일반 클래스의 상속과 다르게 extends 키워드로 다중 상속이 가능하다.
package kr.or.ksmart;
interface Sample1{
public void show();
}
interface Sample2{
public void print();
}
interface Sample3 extends Sample1, Sample2{
public void view();
}
class SampleIm implements Sample3{
@Override
public void show() {
}
@Override
public void print() {
}
@Override
public void view() {
}
}
마커 인터페이스
- 인터페이스 확장시 확장 받은(상속받은) 인터페이스에 메서드가 없는 인터페이스를 마커 인터페이스라고 한다. 객체화를 한번만 진행하면 된다.
추상 클래스와 인터페이스 결합하기
package kr.or.ksmart;
interface DocumentProcess{
public int writeProcess(); // 문서를 올리기 위한 인터페이스
public Object view();
}
interface DocumentApproval{
public int approvalProcess(); //결재를 하기 위한 인터페이스
public int cancelProcess();
}
abstract class DocumentCommon{
protected String documentKey;
public int approvalProcess() {
System.out.println("추상클래스에서 approvalProcess 구현");
return 1;
}
public int cancelProcess() {
System.out.println("추상클래스에서 cancelProcess 구현");
return 1;
}
public abstract void setDocumentKey(String key);
public final String getDocumentKey(String key) {
return documentKey;
}
}
class DocumentA extends DocumentCommon implements DocumentProcess,DocumentApproval{
/**
* 개발자가 직접 구현할 메서드
*/
@Override
public int writeProcess() {
System.out.println("@Override writeProcess 메서드");
return 0;
}
@Override
public Object view() {
System.out.println("@Override view 메서드");
return null;
}
@Override
public void setDocumentKey(String key) {
super.documentKey = key;
System.out.println("@Override setDocumentKey 메서드");
}
}
public class JavaBasic04 {
public static void main(String[] args) {
//결합된 클래스를 슈퍼클래스 참조타입으로 업캐스팅 하기
DocumentA da = new DocumentA();
da.setDocumentKey("key");
//설계자가 아래의 참조타입으로 공통 로직 처리
DocumentProcess process = da;
process.writeProcess();
DocumentApproval approval = da;
approval.approvalProcess();
approval.cancelProcess();
}
}
반응형
'Backend > JAVA' 카테고리의 다른 글
MVC Servlet - controller 작성하기 - 1 (0) | 2020.05.13 |
---|---|
MVC (model view controller) 패턴 (0) | 2020.05.13 |
JAVA instanceof 연산자 (0) | 2020.04.29 |
JAVA equals( ) 메서드 (0) | 2020.04.29 |
JAVA - hashCode( ) (0) | 2020.04.29 |
댓글