ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 인터페이스
    컴퓨터 공부/JAVA 2020. 3. 26. 14:12

    인터페이스 (규격 선언 -> 서로 다르게 구현 ; 다형성)

    ¤ 클래스가 구현해야 할 메소드들이 선언되는 추상형

    ¤ 인터페이스 선언

    인터페이스

    인터페이스의 구성 요소들

     

    ¤ 상수

    public만 허용, public static final 생략

     

    ¤ 추상 메소드

    public abstract 생략 가능

     

    ¤ default 메소드

    인터페이스에 코드가 작성된 메소드

    인터페이스를 구현하는 클래스에 자동 상속

    public 접근 지정만 허용. 생략 가능

     

    ¤ private 메소드

    인터페이스 내에 메소드 코드가 작성되어야 함

    인터페이스 내에 있는 다른 메소드에 의해서만 호출 가능

     

    ¤ static 메소드

    npublic, private 모두 지정 가능. 생략하면 public

     

    인터페이스 객체 생성 불가!

    인터페이스 타입의 레퍼런스 변수 선언 가능

     

    인터페이스 상속 -> 모든 추상 메소드 반드시 구현 implements (동시 여러개 가능)

    다중 상속 가능

    다른 인터페이스 상속 가능 extends

     

    class SamsungPhone implements PhoneInterface { // 인터페이스 구현

      // PhoneInterface의 모든 메소드 구현 --> public 선언!

      public void sendCall() { System.out.println("띠리리리링"); }

      public void receiveCall() { System.out.println("전화가 왔습니다."); }

      // 메소드 추가 작성

      public void flash() { System.out.println("전화기에 불이 켜졌습니다."); }

    }

     

    ex) 인터페이스를 구현하고 동시에 클래스를 상속받는 사례

    interface PhoneInterface { // 인터페이스 선언
    	final int TIMEOUT = 10000; // 상수 필드 선언
    	void sendCall(); // 추상 메소드
    	void receiveCall(); // 추상 메소드
    	default void printLogo() { // default 메소드
    		System.out.println("** Phone **");
    	}
    }
    interface MobilePhoneInterface extends PhoneInterface {
    	void sendSMS();
    	void receiveSMS();
    }
    interface MP3Interface { // 인터페이스 선언
    	public void play();
    	public void stop();
    }
    class PDA { // 클래스 작성
    	public int calculate(int x, int y) {
    		return x + y;
    	}
    }
    // SmartPhone 클래스는 PDA를 상속받고,
    // MobilePhoneInterface와 MP3Interface 인터페이스에 선언된 추상 메소드를 모두 구현한다.
    class SmartPhone extends PDA implements MobilePhoneInterface, MP3Interface {
    	// MobilePhoneInterface의 추상 메소드 구현
    	@Override
    	public void sendCall() {
    		System.out.println("따르릉따르릉~~");
    	}
    	@Override
    	public void receiveCall() {
    		System.out.println("전화 왔어요.");
    	}
        	@Override
    	public void sendSMS() {
    		System.out.println("문자갑니다.");
    	}
    	@Override
    	public void receiveSMS() {
    		System.out.println("문자왔어요.");
    	}
    	// MP3Interface의 추상 메소드 구현
    	@Override
    	public void play() {
    		System.out.println("음악 연주합니다.");
    	}
    	@Override
    	public void stop() {
    		System.out.println("음악 중단합니다.");
    	}
    	// 추가로 작성한 메소드
    	public void schedule() {
    		System.out.println("일정 관리합니다.");
    	}
    }
    public class InterfaceEx {
    	public static void main(String [] args) {
    	SmartPhone phone = new SmartPhone();
    	phone.printLogo();
    	phone.sendCall();
    	phone.play();
    	System.out.println("3과 5를 더하면 " +
    		 phone.calculate(3,5));
    	phone.schedule();
    	}
    }
    
    

    추상 vs 인터페이스 

    추상 클래스 -> 메서드 구현 가능, public 없으면 무조건 구현되어야 함, 다중 상속 불가

    인터페이스 -> 추상화가 높음, 진짜 설계만, 구현 불가!!, 다중 상속 가능

    '컴퓨터 공부 > JAVA' 카테고리의 다른 글

    ArrayList vs. LinkedList vs. Vector, 제너릭 함수  (0) 2020.03.28
    Object, Wrapper class  (0) 2020.03.27
    추상 메소드와 추상 클래스  (0) 2020.03.26
    상속  (0) 2020.03.26
    접근 지정자, static  (0) 2020.03.26
Designed by Tistory.