[Java & SpringBoot로 시작하는 웹 프로그래밍] 3주차 학습 - 4 (인터페이스)

진문장·2021년 9월 11일
0

인터페이스

인터페이스란?

  • 클래스들이 구현해야 하는 동작을 지정하는데 사용되는 추상 자료형
  • 인터페이스를 지정함으로써 해당 클래스가 어떤 역할을 하고 어떤 구현을 해야할지 알 수 있다.

인터페이스의 요소

  • 상수 : 인터페이스에서 지정한 값
  • 추상 메서드: 구현해야될 메서드 ( 해당 인터페이스의 역할 )
  • 디폴트 메서드: 인터페이스에서 기본 제공되는 메서드 ( 오버라이딩 가능 )
  • 정적 메서드: 인터페이스에 제공하는 메서드 ( 오버라이딩 불가능 )
public interface Calc {
	/* 상수 */
    dobule PI = 3.14;  
    
    /* 추상 메서드 */
    int add(int num1, int num2); 
    
    /* 디폴트 메서드 */
    default void display(int num1, int num2) {
    	System.out.println(num1 + "\t" + num2);
    }
    
    /* 정적 메서드 */
    static void showInfo() {
    	System.out.println("This is calc");
    }
}

인터페이스의 역할은?

  • 인터페이스는 클라이언트 프로그램에 어떤 메서드를 제공하는지 알려주는 명세(specification) 또는 약속
  • 한 객체가 어떤 인터페이스의 타입이라 함은 그 인터페이스의 메서드를 구현했다는 의미
  • 클라이언트 프로그램은 실제 구현내용을 몰라도 인터페이스의 정의만 알면 그 객체를 사용할 수 있음
  • 인터페이스를 구현해 놓은 다양한 객체를 사용함 - 다형셩

인터페이스와 strategy pattern

  • 인터페이스를 활용하면 다양한 정책이나 알고리즘을 프로그램의 큰 수정 없이 적용, 확장할 수 있음
  • 아래와 같이 Sort 인터페이스를 만들었을 경우 인터페이스를 활용하여 원하는 정렬으로 자유자재로 바꿀 수 있다.
public interface Sort {
  public List<T> sort(List<T> list);
}
/* 전략 1 버블 정렬 */
pulbic class BubbbleSort implements Sorting {
  @Override
  public List<T> sort(List<T> list)l {
     // bublesort 로직
     ...
     return list
  }
}

/* 전략 2 퀵 정렬 */
pulbic class QuickSort implements Sorting {
  @Override
  public List<T> sort(List<T> list)l {
     // bublesort 로직
     ...
     return list
  }
}
/* 전략 3 힙 정렬 */
pulbic class HeapSort implements Sorting {
  @Override
  public List<T> sort(List<T> list)l {
     // bublesort 로직
     ...
     return list
  }
}

0개의 댓글