추상 클래스란 미완성된 설계도로, 하나 이상의 추상 메서드(abstract method)를 포함하는 클래스입니다.
추상 메서드: 선언부만 있고 구현부({})가 없는 메서드를 의미합니다.
특징:
abstract 키워드를 사용하여 선언합니다.목적: 여러 자식 클래스들이 가지는 공통적인 속성과 기능을 미리 정의하고, 각 자식 클래스에서 달라져야 하는 부분만 추상 메서드로 남겨두어 자식들이 각자의 상황에 맞게 구현하도록 유도합니다.
abstract class Shape { // 추상 클래스
// 일반 메서드
void draw() {
System.out.println("도형을 그립니다.");
}
// 추상 메서드 (구현부가 없음)
abstract double getArea();
}
class Circle extends Shape {
double r;
// 추상 메서드를 반드시 구현해야 함
@Override
double getArea() {
return Math.PI * r * r;
}
}
인터페이스는 "순수한 설계도"로, 오직 추상 메서드와 상수(static final 변수)만으로 구성됩니다.
특징:
interface 키워드를 사용하여 선언합니다.class MyClass implements A, B, C)목적: 구현 객체의 동일한 동작을 보장하기 위한 "규약" 또는 "명세"의 역할을 합니다. 특정 인터페이스를 구현한 클래스는, 그 인터페이스에 정의된 모든 메서드를 가지고 있음을 보장합니다. 이를 통해 다형성을 극대화하고, 객체 간의 결합도를 낮출 수 있습니다.
| 구분 | 추상 클래스 (Abstract Class) | 인터페이스 (Interface) |
|---|---|---|
| 키워드 | abstract class / extends | interface / implements |
| 상속/구현 | 단일 상속만 가능 | 다중 구현 가능 |
| 멤버 | 일반 변수, 일반 메서드, 추상 메서드 모두 가능 | 상수, 추상 메서드만 가능 (Java 8부터 default, static 메서드 추가) |
| 목적 | 상속을 통한 기능 확장 (IS-A 관계) | 동일한 동작을 보장하기 위한 규약 정의 (HAS-A, CAN-DO 관계) |
컬렉션 프레임워크는 다수의 데이터를 쉽고 효과적으로 처리할 수 있는 자료구조들을 표준화된 방식으로 제공하는 클래스의 집합입니다. (e.g., 동적 배열, 연결 리스트, 해시 테이블 등)
주요 인터페이스: List, Set, Map
List 인터페이스ArrayList: 내부적으로 배열을 사용하여 데이터를 관리합니다.LinkedList: 내부적으로 노드(node)들을 연결하여 데이터를 관리합니다.Set 인터페이스HashSet: 가장 일반적인 Set 구현체. 순서를 전혀 보장하지 않습니다.TreeSet: 데이터를 자동으로 정렬된 상태로 저장합니다.Map 인터페이스특징: 키(Key)와 값(Value)을 하나의 쌍으로 묶어 관리합니다. 키는 중복될 수 없지만, 값은 중복될 수 있습니다. 순서는 보장되지 않습니다.
주요 구현 클래스:
HashMap: 가장 일반적인 Map 구현체. key-value 쌍을 저장하며, key를 통해 매우 빠른 속도로 value를 조회할 수 있습니다.TreeMap: 키(Key)를 자동으로 정렬된 상태로 저장합니다.// List 예시
List<String> arrayList = new ArrayList<>();
arrayList.add("Java");
arrayList.add("Python");
arrayList.add("Java"); // 중복 허용
System.out.println(arrayList.get(0)); // "Java"
// Set 예시
Set<String> hashSet = new HashSet<>();
hashSet.add("Java");
hashSet.add("Python");
hashSet.add("Java"); // 중복 허용 안 됨, 무시됨
// hashSet은 ["Java", "Python"] 또는 ["Python", "Java"]
// Map 예시
Map<String, Integer> hashMap = new HashMap<>();
hashMap.put("Apple", 1000);
hashMap.put("Banana", 2000);
System.out.println(hashMap.get("Apple")); // 1000
List는 순서가 있고 중복을 허용하는 자료구조로, 조회에는 ArrayList, 추가/삭제에는 LinkedList가 유리합니다.Set은 순서가 없고 중복을 허용하지 않는 자료구조입니다.Map은 Key-Value 쌍으로 데이터를 저장하며, Key를 통해 매우 빠른 조회가 가능합니다.