Java

[Java] 인터페이스(interface)

quedevel 2020. 12. 30. 23:24
728x90
반응형

Java Document tutorial 에서 보면 인터페이스란?

There are a number of situations in software engineering when it is important for disparate groups of programmers to agree to a "contract" that spells out how their software interacts. Each group should be able to write their code without any knowledge of how the other group's code is written. Generally speaking, interfaces are such contracts.

>> 서로 다른 프로그래머 그룹에서 상호작용하기 위한 일종의 제약

 

처음 인터페이스를 공부할 때 위 내용을 전혀 이해하지 못했다.

공부하고 일하며 느낀 나만의 인터페이스의 정의

메서드 내부의 구현체를 몰라도 상호간의 작업이 원활이 진행되도록 돕는것이라 생각한다.

Ex ) List<E>

public class Main {
    public static void main(String[] args) {
        String str = "example";
        List<String> list1 = new ArrayList<>();
        List<String> list2 = new Vector<>();
        List<String> list3 = new LinkedList<>();
        // ArrayList<E>, Vector<E>, LinkedList<E> 클래스들은 모두
        // List<E> 인터페이스를 구현(implements)하고 있다.

        // 각각 리스트에 문자열 str을 넣는다.
        list1.add(str);
        list2.add(str);
        list3.add(str);

        // 우린 어떤 클래스를 사용하던 자연스럽게 boolean add(E e)를 사용한다.
        // boolean add(E e) 함수는 실제로 List<E>에 선언되어있고
        // 각 클래스의 기능에 맞게 각각 구현되어 있다.
    }
}

 

ArrayList<E>, Vector<E>, LinkedList<E> 클래스들의 각각 add함수가 어떻게 구현되어 있는지 보자.

Ex ) ArrayList<E>

public boolean add(E e) {
    ensureCapacityInternal(size + 1);  // Increments modCount!!
    elementData[size++] = e;
    return true;
}

Ex ) Vector<E>

public synchronized boolean add(E e) {
    modCount++;
    ensureCapacityHelper(elementCount + 1);
    elementData[elementCount++] = e;
    return true;
}

Ex ) LinkedList<E>

public boolean add(E e) {
    linkLast(e);
    return true;
}

>> 이처럼 우리는 boolean add(E e)가 각 클래스에서 어떻게 구현되어있는지 모르지만 자연스럽게 list에 추가가 된다는걸 알고 있다.

728x90
반응형

'Java' 카테고리의 다른 글

[Java] 예외처리  (0) 2021.01.17
[Java] OOP 5대 원칙  (0) 2021.01.10
[Java] 오버로딩 VS 오버라이드  (0) 2020.12.27
[Java] OOP의 특징  (0) 2020.12.27
[Java] 객체지향언어  (0) 2020.12.27