유블로그

[Java] Interface - 추상화 본문

Java

[Java] Interface - 추상화

yujeong kang 2020. 8. 10. 15:41
  • Interface : 추상 method들의 집합
  • 한 Class가 여러 개의 interface를 구현(implements)할 수 있다.
  • interface에는 관련된 method들을 기술하는데, 선언부만 기술하고 구현부는 없다.
  • 상속은 본질적으로 재사용을 위함이고, 인터페이스는 규정, 약속을 위함이다.
  • 상속은 자식 Class가 부모 Class의 멤버변수와 메소드들을 그대로 자동으로 받지만,
  • interface는 선언만 되어있는 추상 method들을 클래스 내에 반드시 구현해야 한다.
  • 실제 구현 코드는 숨기고 기능만 제공하고자 할 때 적합하다.
  • .jar 파일이 대표적인 interface이다.

+ java 8버전 부터 default method라는 method가 interface에 추가되었다. 원래 interface와 조금 달라진 것.

 

< 추상 클래스 >

  • class와 interface의 중간 역할.

<instanceof>

현재 reference 되고 있는 객체가 상속 관계에서 어떤 객체인지를 확인할 필요가 있다.

 

interface Folder {
	public void fold();
	public void open();
	
	default public void powerOn() {
		System.out.println("power on");
	}
}

class FolderblePhone extends Phone implements Folder {
	
	private int width;
	private int height;
	
	public int getWidth() {
		return width;
	}
	
	public void setWidth(int width) {
		this.width = width;
	}
	
	public int getHeight() {
		return height;
	}
	
	public void setHeight(int height) {
		this.height = height;
	}
	
	public int getSmallSize() {
		return (this.width/2) * this.height;
	}
	
	public int getLargeSize() {
		return this.width * this.height;
	}
	
	@Override
	public void fold() {
		System.out.println("fold");		
	}
	
	@Override
	public void open() {
		System.out.println("open");
	}
	
}

public class inter {
	public static void main(String[] args) {

		
		// interface Folder의 default method(powerOn) Test
		Folder folder = new FolderblePhone();
		
		folder.powerOn();
		folder.open();
		folder.fold();
		
		
		
		// instanceof Test
		Folder f = new FolderblePhone();
		
		if( f instanceof Folder ){
			System.out.println("instanceof Folder");
		}
		
		if( f instanceof Object ){
			System.out.println("instanceof Object");
		}
		
		if( f instanceof Phone ){
			System.out.println("instanceof Phone");
		}
		
		Phone p = new Phone();
		
		if( p instanceof FolderblePhone ) {
			System.out.println("instanceof FolderblePhone");
		}
		
	}
}

'Java' 카테고리의 다른 글

[Java] Collections (+Generic)  (0) 2020.08.11
[Java] Inner class  (0) 2020.08.10
[Java] 다형성, 상속  (0) 2020.08.10
[Java] 상속과 접근제한자  (0) 2020.08.10
[Java] 입출력 처리 - Scanner, BufferedReader  (0) 2020.08.10