[Section 1] 컬렉션 (열거형, 제네릭, 예외 처리, 컬렉션 프레임워크)

dohyoungK·2023년 5월 1일
0

컬렉션 (Collection)

  • 열거형 (Enum: Enumerated Type)

    : 여러 상수들을 편리하게 선언하기 위한, 연관된 상수들의 집합

    • 열거형 정의

      enum 열거형이름 {상수명1, 상수명2, ...} // 상수값은 자동으로 0부터 할당됨
    • 장점

      • 상수 명 중복 해결 가능
      • 타입 안정성 보장 가능
      • 코드의 단순화, 가독성 향상
      public static final int SPRING = 1;
       public static final int SUMMER = 2;
       
       public static final int DJANGO = 1;
       public static final int SPRING = 2; // 계절 상수 이름과 중복, 컴파일 에러
       
       enum Seasons {SPRING, SUMMER}
       enum Frameworks {DJANGO, SPRING}
    • 사용 메서드

      리턴 타입메서드설명
      Stringname()열거 객체의 문자열(상수 이름)을 리턴
      intordinal()열거 객체의 순번(0부터 시작)을 리턴
      intcompareTo(비교값)입력받은 값과의 순번 차이를 리턴
      열거 타입valueOf(String name)입력받은 문자열의 열거 객체를 리턴
      열거 배열values()모든 열거 객체를 배열로 리턴

  • 제네릭 (Generic)

    : 타입을 구체적으로 지정하지 않고, 추후에 지정할 수 있도록 해두는 것

    • 제네릭 클래스

      : 클래스 명 뒤에 처럼 꺽쇠 안에 타입 매개변수를 작성함으로써 클래스 내부에서 타입 매개변수 T를 선언 가능

      class Basket<T> {
         private T item;
         // static T item2; 클래스 변수는 사용 불가
      }
      
      class Main {
         public static void main(String[] args) {
            
            Basket<Integer> basket1 = new Basket<Integer>(1);
            Basket<String> basket2 = new Basket<String>("abcd");
            
         }
      }
      interface Plant {...}
      class Flower implements Plant {...}
      class Rose extends Flower implements Plant {...}
      
      class Basket<T extends Plant> { // 꺽쇠 안 extends로 제네릭 타입의 범위를 제한 가능
         private T item;
         // static T item2; 클래스 변수는 사용 불가
      }
      
      class Main {
         public static void main(String[] args) {
            
            Basket<Flower> basket1 = new Basket<>();
            Basket<Rose> basket2 = new Basket<>();
         }
      }

    • 제네릭 메서드

      : 메서드 반환타입 앞에 처럼 꺽쇠 안에 타입 매개변수를 작성함으로써 메서드 내에서 타입 매개변수 사용가능

      class Basket {
         ...
         
         public <T> void add(T element) {
            ...
         }
         
         static <T> void setPrice(T element) { // 제네릭 메서드는 static 메서드로도 사용가능
            ...
         }
      }
      
      class Main{
         public static void main(String[] args){
            Basket<String> basket = new Basket<>();
            basket.add(10);
            basket.add("abc");
         }
      }

  • 예외 처리 (Exception Handling)

    : 예기치 못한 에러에 대응하는 코드를 미리 작성해 프로그램의 비정상 종료를 방지하고, 정상적인 실행 상태를 유지하기 위한 것

    • 오류의 종류

      • 외부적인 요인: 하드웨어 문제, 네트워크 문제, 조작 오류 등
      • 내부적인 요인: 코드 작성 에러
        • 컴파일 에러(Complie Time Error): 컴파일할 때 생기는 에러로, 주로 문법적인 문제인 신택스(Syntax) 오류로부터 발생함
        • 런타임 에러(Run Time Error): 프로그램이 실행될 때, 런타임에 발생하는 에러로, 주로 컴퓨터가 수행할 수 없는 작업을 코드로 작성했을 때 발생함.
    • 에러, 예외

      • 에러(Error): 복구하기 어려운 수준의 오류
      • 예외(Exception): 상대적으로 미약한 수준의 오류로, 코드 수정을 통해 수습 가능한 오류
    • try - catch 문

      try {
         // 예외가 발생할 가능성이 있는 코드
      }
      catch (예외타입 e){
         // 예외타입의 예외가 발생했을 때 실행할 코드
      }
      finally {
         // 예외 발생 여부와 상관없이 무조건 실행할 코드
      }
    • throws

      : 예외를 호출한 곳으로 예외를 넘기기 위한 구문

      반환타입 메서드명(매개변수) throws 예외클래스1, ... {
         ...
      }
      
      void throwsException() throws NullPointerException {
         ...
      }

  • 컬렉션 프레임워크

    컬렉션이란, 여러 데이터를 그룹으로 묶어놓은 것을 의미한다. 이러한 컬렉션을 편리하게 다루기 위한 메서드들을 정의해놓은 것을 컬렉션 프레임워크라 한다.

    • List

      : 배열처럼 객체를 일렬로 늘어놓고, 객체를 인덱스로 관리하는 구조

      기능리턴 타입메서드설명
      객체 추가voidadd(int index, Object element)주어진 인덱스에 객체 추가
      객체 추가booleanaddAll(int index, Collection c)주어진 인덱스에 컬렉션 추가
      객체 추가Objectset(int index, Object element)주어진 인덱스에 객체 저장
      객체 검색Objectget(int index)주어진 인덱스에 저장된 객체를 반환
      객체 검색intindexOf(Object o), lastIndexOf(Object o)순방향, 역방향으로 탐색해 객체 위치 반환
      객체 검색ListIteratorlistIterator(), listIterator(int index)List의 객체를 탐색할 수 있는, 객체를 인덱스부터 탐색할 수 있는 ListIterator 반환
      객체 검색ListsubList(int fromIndex, int toIndex)fromIndex부터 toIndex에 있는 객체 반환
      객체 삭제Objectremove(int index)주어진 인덱스에 저장된 객체를 삭제 후 삭제된 객체 반환
      객체 삭제booleanremove(Object o)주어진 객체를 삭제
      객체 정렬voidsort(Comparator c)주어진 비교자(comparator)로 List 정렬
      • ArrayList

        : List 인터페이스를 구현한 클래스로 가장 많이 사용. 객체를 인덱스로 관리하고, 자동으로 저장용량이 늘어나며, 데이터의 순서가 유지됨.
      • LinkedList

        : 데이터가 불연속적으로 존재하며 데이터가 서로 연결되어 있는 구조. 데이터를 자주 추가, 삭제할 때 사용

    • Set

      : 요소의 중복을 허용하지 않고, 저장 순서를 유지하지 않는 구조

      기능리턴 타입메서드설명
      객체 추가booleanadd(Object o)주어진 객체를 추가하고, 성공 여부 리턴
      객체 검색booleancontains(Object o)주어진 객체가 존재하는지 확인
      객체 검색booleanisEmpty()Set이 비어있는지 확인
      객체 검색IteratorIterator()저장된 객체를 하나씩 읽어오는 반복자 리턴
      객체 검색intsize()저장된 전체 객체 수 리턴
      객체 삭제voidclear()Set에 저장된 모든 객체 삭제
      객체 삭제booleanremove(Object o)주어진 객체 삭제
      • HashSet

        : Set 인터페이스를 구현한 가장 대표적인 클래스. 중복 값을 허용하지 않으며, 순서 유지하지 않음.
      • TreeSet

        : 이진 탐색 트리 형태로 데이터 저장하고, 왼쪽 자식의 값이 부모 노드 값보다 작고, 오른쪽 자식의 값이 부모보다 큰 트리 구조. 정렬과 검색에 특화된 자료 구조.
    • Map

      : 키와 값으로 구성된 Entry 객체를 저장하는 구조. 키는 중복값 불가, 값은 중복 가능.

      기능리턴 타입메서드설명
      객체 추가Objectput(Object key, Object value)주어진 키로 값을 저장. 새로운 키라면 null 리턴, 기존 키라면 새로운 값으로 대체하고 기존 값을 리턴
      객체 검색booleancontainsKey(Object key)주어진 키가 있으면 true, 없으면 false 리턴
      객체 검색booleancontainsValue(Object value)주어진 값이 있으면 true, 없으면 false 리턴
      객체 검색SetentrySet()키와 값의 쌍으로 구성된 모든 Entry 객체를 Set에 담아서 리턴
      객체 검색Objectget(Object key)주어진 키에 해당하는 값 리턴
      객체 검색booleanisEmpty()컬렉션이 비어있는지 확인
      객체 검색SetkeySet()모든 키를 Set 객체에 담아 리턴
      객체 검색intsize()저장된 전체 Entry 객체 수 리턴
      객체 검색Collectionvalues()저장된 모든 값을 컬렉션에 담아 리턴
      객체 삭제voidclear()모든 Entry 삭제
      객체 삭제Objectremove(Object key)주어진 키와 일치하는 Entry 삭제하고 값 리턴
      • HashMap

        : Map 인터페이스를 구현한 대표적인 클래스. 키와 값으로 이루어진 Entry 객체로 구성된 구조. 많은 양의 데이터를 검색하는 데 효율적인 구조

0개의 댓글