티스토리 뷰

study/Java

인터페이스 (interface)

xoxowo 2022. 12. 26. 17:21

인터페이스 (interface)

추상을 미완성 설계도라고 본다면 인터페이스는 설계도이며, 보통(?) 다른 클래스를 쓸 때 도움을 주기 위해 사용된다.

모든 멤버변수는 상수와 추상 메서드만 가질 수 있다

jdk1.8 부터 static 메서드 디폴트(default) 메서드도 가질 수 있게 되었다.

다중 상속이 가능하다.

 

클래스 작성과 같이 인터페이스 이름 앞에 키워드 'interface'를 작성하면 된다.

interface 인터페이스이름 {
        public static final 타입 상수이름 = 값 ; // 상수
        public abstract 메서드 이름(매개변수 목록); // 추상메서드이기 때문에 {} 없음
}

인터페이스는 인스턴스 생성이 안되며 implements로 다른 클래스에서 구현한다.

interface 인터페이스이름 {void method(int a);}

class 클래스이름 implements 인터페이스이름 {
}

 

인터페이스의 장점

개발시간 단축

인터페이스를 먼저 작성하게되면 메서드를 선언부만 알 수 있으면 메서드를 호출하는 쪽에서도 작업이가능하다.

 

표준화 가능

기본 틀(설계)를 인터페이스로 작성한 다음 인터페이스를 구현하여 프로그램을 작성하도록 하여 일관되고 정형화된 프로그램의 개발이 가능하다.

 

서로 관계없는 클래스들에게 관계를 맺어 줄 수 있다.

→ 서로 상속관계에 있지도않고, 같은 조상클래스를 가지고 있지 않은 아무런 관계없는 클래스들에게 하나의 인터페이스를 공통적으로 구현하도록 함으로써 관계를 맺어 줄 수 있다.

 

독립적인 프로그래밍이 가능

클래스의 선언과 구현을 분리시킬 수 있어 실제ㄱ 구현에 독립적인 프로그램을 작성하는 것이 가능하다.

 

간단한 예제

interface Parseable {
    // 추상 메서드 public abstract 생략 
    void parse(String fileName);
}

class ParserManager { 
    // 리턴타입이 Parseable 인터페이스이다.
    // getParser 메서드는 main 클래스에 보면 있다. !!
    public static Parseable getParser(String type){
        // 매개변수 type의 값에 따라 반환타입이 다름
        if (type.equals("XML")) {
            return new XMLparser();
        } else {
            Parseable p = new HTMLparser();
            return p;
            // 위 두줄을 줄이면 return new HTMLparser();
        }
    }
}
// XMLparser와 HTMLparser 클래스에서 인터페이스 Parseable 구현 (메서드 내용 구현)
class XMLparser implements Parseable {
    public void parse(String fileName) {
        System.out.println(fileName + "XML parsing completed.");
    }
}
class HTMLparser implements Parseable {
    public void parse(String fileName) {
        System.out.println(fileName + "HTML parsing completed.");
    }
}
class ParseableRest {
    public static void main(String[] args) {
        Parseable parser = ParserManager.getParser("XML");
        parser.parse("docment.xml");
        parser = ParserManager.getParser("HTML");
        parser.parse("docment2.html");
    }    
}

/* 실행 결과
docment.xmlXML parsing completed.
docment2.htmlHTML parsing completed.
 */

 

'study > Java' 카테고리의 다른 글

람다 (Lambda)  (0) 2023.02.03
쓰레드 (Thread)  (0) 2023.01.02
추상 클래스 & 메서드  (0) 2022.12.22
제어자 (modifier)  (0) 2022.12.20
오버라이딩 (overriding)  (0) 2022.12.17
댓글