TIL - 20251027

juni·2025년 10월 26일

TIL

목록 보기
165/316

1027 Java 기초 복습 (4/4): 추상화와 자료구조 (컬렉션)


✅ 1. 추상 클래스 (Abstract Class)

  • 추상 클래스미완성된 설계도로, 하나 이상의 추상 메서드(abstract method)를 포함하는 클래스입니다.

  • 추상 메서드: 선언부만 있고 구현부({})가 없는 메서드를 의미합니다.

  • 특징:

    1. abstract 키워드를 사용하여 선언합니다.
    2. 미완성된 설계도이므로, 스스로 객체(인스턴스)를 생성할 수 없습니다.
    3. 추상 클래스를 상속받는 자식 클래스는, 부모의 모든 추상 메서드를 반드시 오버라이딩(구현)해야만 객체를 생성할 수 있습니다. (구현 강제)
    4. 추상 메서드뿐만 아니라, 일반적인 멤버 변수와 구현된 메서드도 포함할 수 있습니다.
  • 목적: 여러 자식 클래스들이 가지는 공통적인 속성과 기능을 미리 정의하고, 각 자식 클래스에서 달라져야 하는 부분만 추상 메서드로 남겨두어 자식들이 각자의 상황에 맞게 구현하도록 유도합니다.

    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;
        }
    }

✅ 2. 인터페이스 (Interface)

  • 인터페이스"순수한 설계도"로, 오직 추상 메서드상수(static final 변수)만으로 구성됩니다.

  • 특징:

    1. interface 키워드를 사용하여 선언합니다.
    2. 인터페이스도 스스로 객체를 생성할 수 없습니다.
    3. 클래스는 인터페이스를 구현(implements)하며, 해당 인터페이스에 선언된 모든 추상 메서드를 반드시 구현해야 합니다.
    4. Java는 클래스의 다중 상속을 지원하지 않지만, 인터페이스는 다중 구현이 가능합니다. (class MyClass implements A, B, C)
  • 목적: 구현 객체의 동일한 동작을 보장하기 위한 "규약" 또는 "명세"의 역할을 합니다. 특정 인터페이스를 구현한 클래스는, 그 인터페이스에 정의된 모든 메서드를 가지고 있음을 보장합니다. 이를 통해 다형성을 극대화하고, 객체 간의 결합도를 낮출 수 있습니다.

➕ 추상 클래스 vs 인터페이스

구분추상 클래스 (Abstract Class)인터페이스 (Interface)
키워드abstract class / extendsinterface / implements
상속/구현단일 상속만 가능다중 구현 가능
멤버일반 변수, 일반 메서드, 추상 메서드 모두 가능상수, 추상 메서드만 가능 (Java 8부터 default, static 메서드 추가)
목적상속을 통한 기능 확장 (IS-A 관계)동일한 동작을 보장하기 위한 규약 정의 (HAS-A, CAN-DO 관계)

✅ 3. 컬렉션 프레임워크 (Collection Framework)

  • 컬렉션 프레임워크는 다수의 데이터를 쉽고 효과적으로 처리할 수 있는 자료구조들을 표준화된 방식으로 제공하는 클래스의 집합입니다. (e.g., 동적 배열, 연결 리스트, 해시 테이블 등)

  • 주요 인터페이스: List, Set, Map

➕ 3-1. List 인터페이스

  • 특징: 순서가 있는 데이터의 집합이며, 데이터의 중복을 허용합니다.
  • 주요 구현 클래스:
    • ArrayList: 내부적으로 배열을 사용하여 데이터를 관리합니다.
      • 장점: 인덱스를 통한 데이터 조회(get)가 매우 빠릅니다.
      • 단점: 데이터 추가/삭제 시, 뒤따르는 모든 데이터를 이동시켜야 하므로 느립니다.
    • LinkedList: 내부적으로 노드(node)들을 연결하여 데이터를 관리합니다.
      • 장점: 데이터 추가/삭제가 매우 빠릅니다. (연결만 바꾸면 됨)
      • 단점: 특정 데이터를 찾으려면 처음부터 순차적으로 탐색해야 하므로 조회가 느립니다.

➕ 3-2. Set 인터페이스

  • 특징: 순서를 유지하지 않으며, 데이터의 중복을 허용하지 않습니다.
  • 주요 구현 클래스:
    • HashSet: 가장 일반적인 Set 구현체. 순서를 전혀 보장하지 않습니다.
    • TreeSet: 데이터를 자동으로 정렬된 상태로 저장합니다.

➕ 3-3. 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순서가 없고 중복을 허용하지 않는 자료구조입니다.
  • MapKey-Value 쌍으로 데이터를 저장하며, Key를 통해 매우 빠른 조회가 가능합니다.

0개의 댓글