본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성하였습니다.
Ch 6. 인터페이스와 API
1. 인터페이스란 무엇인가?
컴퓨팅 분야에서 인터페이스는 두 개 이상의 분리된 컴퓨터 시스템 구성 요소가 정보를 교환하는 공유 경계를 의미합니다. 이는 하드웨어, 소프트웨어, 사용자 인터페이스 등 다양한 수준에서 존재합니다.
- 하드웨어 인터페이스: 다양한 버스, 저장 장치, 기타 I/O 장치와 같은 많은 구성 요소에 존재합니다.
- 소프트웨어 인터페이스: 운영 체제가 하드웨어와 상호 작용하거나, 응용 프로그램 내에서 객체들이 메서드를 통해 상호 작용할 필요가 있을 때 사용됩니다.
- 사용자 인터페이스 (UI): 컴퓨터와 인간 사이의 상호 작용 지점으로, 그래픽, 소리, 위치, 움직임 등 다양한 상호 작용 방식을 포함하며 사용자로부터 컴퓨터 시스템으로 데이터가 전송됩니다.
객체 지향 프로그래밍(OOP)에서 인터페이스는 클래스의 추상화 역할을 하는 데이터 타입입니다. 이는 메서드 시그니처의 집합을 설명하며 , 특정 프로토콜에 나열된 메서드를 제공하는 클래스는 해당 프로토콜을 채택하거나 인터페이스를 구현한다고 합니다. 객체가 완전히 캡슐화되어 있다면, 인터페이스는 다른 객체가 해당 객체에 접근할 수 있는 유일한 방법입니다.
2. 자바 인터페이스의 특징 및 역할
자바 프로그래밍 언어에서 인터페이스는 클래스가 반드시 구현해야 하는 동작을 선언하는 데 사용되는 추상 타입입니다. 이는 프로토콜과 유사하며 , interface 키워드를 사용하여 선언됩니다. 자바 8 이전에는 인터페이스가 메서드 시그니처와 상수 선언 (즉, static 및 final로 선언된 변수)만 포함할 수 있었습니다. 자바 8부터는 default 메서드와 static 메서드를 포함할 수 있게 되어 기능이 확장되었습니다.
자바 인터페이스의 주요 역할:
- 추상화 구현: 인터페이스는 특정 기능에 대한 "계약"을 정의하며, 이를 구현하는 클래스는 해당 계약을 이행해야 합니다.
- 다중 상속의 대안: 자바는 클래스의 다중 상속을 허용하지 않지만, 인터페이스는 여러 인터페이스를 구현함으로써 다중 상속과 유사한 효과를 얻을 수 있습니다.
- 느슨한 결합(Loose Coupling) 지원: 인터페이스를 사용하면 구현 클래스에 직접 의존하지 않고 인터페이스에 의존하여 코드를 작성할 수 있어, 시스템의 유연성과 확장성을 높입니다.
- 표준화: 특정 기능을 수행하는 클래스들이 공통된 메서드 집합을 갖도록 강제하여 코드의 일관성을 유지할 수 있습니다. 예를 들어, Java Collections Framework는 List, Set, Map과 같은 인터페이스를 통해 다양한 구현체들이 일관된 방식으로 사용될 수 있도록 합니다.
3. 인터페이스와 구현체: Collection 프레임워크 사례
Java Collections Framework는 인터페이스와 구현체의 관계를 명확하게 보여주는 좋은 예시입니다. 여기서는 변수 선언은 인터페이스로 하고 , 객체 생성은 반드시 클래스로 하며 , 객체 사용은 인터페이스로 하는 일관성을 활용합니다. 자료 구조 내부 알고리즘은 숨겨집니다.
예시: List와 ArrayList
List는 순서가 있는 컬렉션을 나타내는 인터페이스이며 , ArrayList는 이 List 인터페이스를 구현한 클래스입니다.
import java.util.ArrayList;
import java.util.List;
public class InterfaceExample {
public static void main(String[] args) {
// 변수 선언은 인터페이스로 (List)
// 실제 객체는 구현체(ArrayList)로 생성
List<String> myList = new ArrayList<>();
myList.add("Apple"); // List 인터페이스의 add() 메서드 사용 [cite: 128]
myList.add("Banana");
myList.add("Cherry");
System.out.println("My List: " + myList);
// Map 인터페이스와 HashMap 구현체 예시 [cite: 115, 119, 120]
// private static Map<Integer, Order> orderMap;
// orderMap = new HashMap<Integer, Order>();
// orderMap.put(++orderNo, newOrder);
}
}
UML 클래스 다이어그램 표기법
- List (인터페이스): boolean add(E e)와 Iterator<E> iterator()와 같은 추상 메서드를 정의합니다. 인터페이스의 메서드는 본문이 없습니다 (추상 메서드).
- ArrayList (클래스): List 인터페이스를 구현하며 (implements 키워드) , add(E e) 및 iterator() 메서드를 실제로 구현합니다. UML에서는 인터페이스를 클래스가 "realize" (실현) 한다고 표현합니다.
4. 인터페이스 기반 프로그래밍 (Interface-based Programming)
인터페이스 기반 프로그래밍은 객체 지향 프로그래밍 언어에서 모듈형 프로그래밍을 컴포넌트 수준에서 구현하기 위한 아키텍처 패턴입니다. 이는 특히 모듈 시스템이 없는 언어에서 유용합니다.
인터페이스 기반 프로그래밍은 다음과 같은 장점을 제공합니다:
- 모듈화: 각 컴포넌트가 인터페이스를 통해 통신하므로, 특정 구현에 얽매이지 않고 독립적으로 개발하고 테스트할 수 있습니다.
- 유연한 확장: 새로운 구현체를 추가할 때 기존 코드를 수정할 필요 없이 인터페이스만 구현하면 됩니다.
- 테스트 용이성: 인터페이스를 사용하여 모의 객체(Mock Object)를 쉽게 생성하고 테스트할 수 있습니다.
5. API 아키텍처 스타일과 인터페이스
인터페이스 개념은 넓게 보면 API (Application Programming Interface)와도 밀접하게 연결됩니다. API는 응용 프로그램이 다른 시스템과 상호 작용하는 방법을 정의하는 규칙 집합입니다. 네트워크의 발전과 함께 다양한 API 아키텍처 스타일이 발전하여 분산 API 양상을 보여줍니다.
스타일 | 주요 특징 | 주요 사용 사례 |
SOAP | XML 기반 | 엔터프라이즈 애플리케이션용 |
RESTful | 리소스 기반 | 웹 서버용 |
GraphQL | 쿼리 언어 | 네트워크 부하 감소 |
gRPC | 고성능 | 마이크로서비스용 |
WebSocket | 양방향 | 낮은 지연 시간 데이터 교환용 |
Webhook | 비동기 | 이벤트 기반 애플리케이션용 |
6. 자바 8 이후 인터페이스의 변화
자바 8부터 인터페이스는 default 메서드와 static 메서드를 포함할 수 있게 되었습니다. 이는 인터페이스에 새로운 기능을 추가할 때 기존에 인터페이스를 구현하고 있던 모든 클래스를 수정할 필요 없이 호환성을 유지하면서 기능을 확장할 수 있도록 돕습니다.
default 메서드 예시:
public interface MyInterface {
void abstractMethod(); // 추상 메서드
// default 메서드: 구현 클래스에서 오버라이드 가능
default void defaultMethod() {
System.out.println("This is a default method in the interface.");
}
}
public class MyClass implements MyInterface {
@Override
public void abstractMethod() {
System.out.println("Implementing the abstract method.");
}
// defaultMethod()를 오버라이드하지 않아도 사용 가능
}
public class Main {
public static void main(String[] args) {
MyClass obj = new MyClass();
obj.abstractMethod();
obj.defaultMethod(); // default 메서드 호출
}
}
static 메서드 예시:
public interface MyUtilityInterface {
// static 메서드: 인터페이스 이름으로 직접 호출 가능
static void utilityMethod() {
System.out.println("This is a static utility method in the interface.");
}
}
public class MainStatic {
public static void main(String[] args) {
MyUtilityInterface.utilityMethod(); // 인터페이스 이름으로 직접 호출
}
}
default 메서드는 인터페이스에 새 기능을 추가하면서 하위 호환성을 유지하는 데 유용하며, static 메서드는 인터페이스와 관련된 유틸리티 기능을 제공하는 데 사용될 수 있습니다.
오늘의실습
오늘의 느낀점
인터페이스는 실제로 MVC 모델로 개발을 할 때 service 를 구현하는 부분에서 종종 사용했었다. 객체지향에서 중요한 개념 중 하나인 추상화와 다형성에 맞는 중요한 메커지늠 중 하나라 추후에도 다시 복습을 통해서 정리하려고 한다. interface method 구현을 과제로 내주셨는데 아직 못했다. 처음 자바를 배울 때 아는 사람이 자바 자체에 있는 LinkedList 말고 실제로 구현을 해보라고 했었는데, 이번 과제를 마치면 그부분도 가능하지 않을까 싶다.
https://fastcampus.info/4n8ztzq
(~6/20) 50일의 기적 AI 환급반💫 | 패스트캠퍼스
초간단 미션! 하루 20분 공부하고 수강료 전액 환급에 AI 스킬 장착까지!
fastcampus.co.kr
'개발공부 > Java' 카테고리의 다른 글
패스트캠퍼스 환급챌린지 23일차 : 한 번에 끝내는 컴퓨터 공학 & 인공지능 복수전공 초격차 패키지 강의 후기 (3) | 2025.07.23 |
---|---|
패스트캠퍼스 환급챌린지 22일차 : 한 번에 끝내는 컴퓨터 공학 & 인공지능 복수전공 초격차 패키지 강의 후기 (1) | 2025.07.22 |
패스트캠퍼스 환급챌린지 20일차 : 한 번에 끝내는 컴퓨터 공학 & 인공지능 복수전공 초격차 패키지 강의 후기 (0) | 2025.07.20 |
패스트캠퍼스 환급챌린지 19일차 : 한 번에 끝내는 컴퓨터 공학 & 인공지능 복수전공 초격차 패키지 강의 후기 (0) | 2025.07.19 |
패스트캠퍼스 환급챌린지 18일차 : 한 번에 끝내는 컴퓨터 공학 & 인공지능 복수전공 초격차 패키지 강의 후기 (0) | 2025.07.18 |