읽은 책들/자바로 배우는 핵심 자료구조와 알고리즘

[자바로 배우는 핵심 자료구조와 알고리즘] 1장 인터페이스

today is ? 2025. 3. 20. 00:21

인터페이스

리스트가 두 종류인 이유

  • 왜 자바는 List 인터페이스에 두 가지 구현을 제공?
  • 둘 중에 어느 것을 선택?
  • 어느 것이 더 좋을지는 수행하는 동작에 달려 있음

자바 interface

  • 자바 interface는 메서드 집합을 의미
    • ex) Comparable interface
      public interface Comparable<T> {
      public int compareTo(T o);
      }
      • interface는 타입 파라미터인 T를 사용하여 Comparable이라는 제네릭 타입을 정의
        • 이 interface를 구현하려면 클래스는 다음과 같아야 함
          • T 타입을 명시해야 함
          • T 타입의 객체를 인자로 받고 int를 반환하는 compareTo() 메서드를 제공해야 함
    • ex
      public int compareTo(Integer anotherInteger) {
          int thisVal = this.value;
          int anotherVal = anotherInteger.value;
          return (thisVal<anotherVal ? -1 : (thisVal==anotherVal ? 0 : 1));
      }
      • compareTo() 메서드를 구현할 때 종종 삼향 연산자 사용

List interface

  • JCF는 List라는 interface를 정의하고 ArrayList와 LinkedList라는 두 구현 클래스를 제공
  • interfae는 List가 된다는 의미란?
    • add, get, remove 등 약 20가지 메서드를 포함한 특정 메서드 집합을 제공해야 함
    • ArrayList와 LinkedList 클래스는 이러한 메서드를 제공하므로 상호교환할 수 있음
  • 예제코드
import java.util.LinkedList;   
    public class ListClientExample {
        private List list;
    
        public ListClientExample() {
            list = new LinkedList<>();
        }
        
        private List getList() {
            return list;
        }
        
        public static void main(String[] args) {
            ListClientExample lce = new ListClientExample();
            List list = lce.getList();
            System.out.println(list);
        }
    }

 

  • ListClientExample 클래스는 유용한 동작을 하지 않지만, List를 캡슐화하는 클래스의 필수 요소를 가지고 있음
    • 즉, List형의 인스턴스 변수를 가지고 있음
  • 이러한 스타일을 인터페이스 기반 프로그래밍 또는 인터페이스 프로그래밍이라고 함
    • 인터페이스는 자바 interface가 아닌 일반적인 개념의 인터페이스를 말함
  • 라이브러리를 사용할 때 코드는 오직 List와 같은 인터페이스만 의존하고 ArrayList 클래스와 같은 특정 구현에 의존해서는 안 됨
  • 나중에 구현이 변경되어도 인터페이스를 사용하는 코드는 그대로 사용할 수 있음
  • 인터페이스가 변경되면 인터페이스를 의존하는 코드는 변경되어야 함
    • 라이브러리 개발자가 인터페이스를 변경하지 않는 이유