본문 바로가기
Backend/JAVA

JAVA 인터페이스 interface

by YERIEL_염주둥 2020. 4. 29.
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

댓글