본문 바로가기

# 02/Java

[윤성우 열혈자바] 17-1. 인터페이스의 기본과 그 의미

반응형

추상 메소드만 담고 있는 인터페이스


interface Printable {

public void print(String doc);            // 추상 메소드

}

인터페이스의 정의! 메소드의 몸체를 갖지 않는다.

따라서 인스턴스 생성 불가! 참조변수 선언 가능!



class Printer implements Printable {

public void print(String doc) {

System.out.println(doc);

}

}

인터페이스를 구현하는 클래스!

구현하는 메소드와 추상 메소드 사이에도 메소드 오버라이딩 관계 성립, 따라서 @Override 붙일 수 있음




Printable prn = new Printer();

prn.print( "Hello" );


인터페이스형 참조변수 선언 가능


Printer 클래스안에 메서드를 정의하고 싶을때 

인터페이스인 Printable에 메소드를 정의하고 Printer 클래스에서 구현하는 형태로 정의하는 이유


-> 이 클래스 인스턴스를 생성해서 접근할때에는 인터페이스를 통해서 접근을 하라는 뜻임.

Printable prn = new Printer();

인터페이스 안의 추상 메서드를 통해서만 인스턴스의 기능을 활용하라는 뜻임.


즉, 인터페이스는 인스턴스의 사용 방법으로 활용 가능한 것임!









상속과 구현


class Robot extends Machine implements Movable, Runnable { ... }


Robot 클래스는 Machine 클래스를 상속한다.


이렇듯 상속과 구현 동시에 가능!


Robot 클래스는 Movable과 Runnable 인터페이스를 구현한다.


이렇듯 둘 이상의 인터페이스 구현 가능!









인터페이스의 본질적 의미


MS에서 제공하는 인터페이스 - 해당 클래스를 사용하기 위한 방법을 제시하는 것임!

interface Printable {

public void print ( String doc );

}


class SPrinterDriver implements Printable {

@Override

public void print( String doc ) { ... }

}


class LPrinterDriver implements Printable {

@Override

public void print( String doc ) { ... }

}


interface Printable {                        // MS가 정의하고 제공한 인터페이스

public void print(String doc);

}


class SPrinterDriver implements Printable {

@Override

public void print(String doc) {

System.out.println("From Samsung printer");

System.out.println(doc);

}

}


class LPrinterDriver implements Printable {

@Override

public void print(String doc) {

System.out.println("From LG printer");

System.out.println(doc);

}

}


public static void main (String[] args ) {

String myDoc = "This is a report about . . . ";


// 삼성 프린터로 출력

Printable prn = new SPrinterDriver();

prn.print(myDoc);

System.out.println();


// LG 프린터로 출력

prn = new LPrinterDriver();

prn.print(myDoc);

}





반응형