ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [모각코] 1주차 결과
    카테고리 없음 2022. 7. 9. 22:19

    Collection, Iterator

    Collection

    JAVA에서 Collection은 데이터의 집합, 그룹을 의미한다.

    출처 : https://en.wikipedia.org/wiki/Java_collections_framework

    Collection 인터페이스는 List, Set, Queue의 3개 인터페이스로 구분할 수 있고, Map의 경우 Collection 인터페이스를 상속받고 있지 않지만 Collection으로 구분된다.

    1. Set 인터페이스
      • 순서를 유지하지 않는 데이터의 집합으로, 중복을 허용하지 않는다.
      • HashSet
        • 가장 빠른 임의 접근 속도
      • TreeSet
        • 객체의 정렬에 사용되는 클래스
        • 내부적으로 이진 검색 트리로 구현되어 있음
        • 객체 비교를 위해 Comparable이나 Comparator 인터페이스를 구현해야함
    2. List 인터페이스
      • 순서가 있는 데이터의 집합으로 중복을 허용한다.
      • ArrayList
        • 단방향 포인터 구조로 각 데이터에 대한 인덱스가 있어 조회 성능이 뛰어남
        • 동적으로 크기를 조절할 수 있음
      • LinkedList
        • 양방향 포인터 구조로 데이터의 삽입 삭제시 성능이 뛰어남
      • Vector
        • Thread-safe함
    3. Map 인터페이스
      • Key, Value의 쌍으로 이루어진 데이터의 집합
      • 키의 중복은 허용되지 않으나 값의 중복은 허용된다
      • 내부적으로 hash 방식으로 구현되어있음
      • HashTable
        • HashMap 보다는 느리지만 Thread-safe
        • null 불가
      • HashMap
        • null 가능
      • TreeMap
        • 정렬된 순서로 키와 값을 검색함
        • 정렬을 위해 Comparable, Comparator 인터페이스 구현

    Iterator

    • JAVA의 컬렉션 프레임워크에서 컬렉션에 저장되어 있는 요소들을 읽어오는 방법을 표준화한 것이다.
    • 기능
      • hasNext() : 읽어올 요소가 있는지 확인하는 메소드
      • next() : 다음 데이터를 읽어 반환한다
      • remove() : next()로 읽어온 요소를 삭제한다

    Stream

    Stream

    • 데이터의 연속이다 (System.in / System.out도 스트림이다)
    • 다양한 데이터 소스를 표준화된 방법으로 다루기 위한 것
    // example
    list.stream()
            .sorted()
            .forEach(System.out::println);
    • 특징
      • Read Only, 일회용 이다.
      • 최종 연산 전까지 중간 연산을 수행하지 않는다 (lazy evaluation)
      • 손쉽게 병렬 처리 할 수 있다.
      • 기본형 스트림으로 IntStream, DoubleStream, LongStream이 제공됨
    • 생성
      • Collection의 경우 .stream()으로 스트림 변환
      • 객체 배열로 부터 스트림 생성
      • // example Stream.of("1", "2","3"); Arrays.stream(new String[]{"a", "b", "c"});
      • 람다식 iterate(), generate()
      • // example Stream.iterate(0, n->n*2); // 0, 2, 4... 무한 스트림 Stream.generate(Math::random);
      •  
    • 사용
      • 람다식을 인자로 주어 사용

    Lazy Evaluation

    • 불필요한 연산을 피한다 (반대는 Eager Evaluation)
    final List<Integer> list = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10); 
    System.out.println(    
        list.stream()        
                .filter(i -> {            
                        System.out.println("i < 6");            
                        return i<6;        
                })        
                .filter(i -> {            
                        System.out.println("i%2 == 0");
              return i%2==0;        
                })        
                .map(i -> {
              System.out.println("i = i*10");
              return i*10;        
                })        
                .collect(Collectors.toList()));

    위의 코드를 실행시켰을 때 eager evaluation은

    1. 1 ~ 10번의 요소중 6보다 작은 값을 구한다
    2. 1번에서 구한 요소들 중 짝수인 값을 구한다
    3. 2번에서 구한 요소들에 각각 10을 곱한다

    lazy evaluation은

    1. 6보다 작은지 검사한다 (false이면 2, 3번 패스)
    2. 짝수인지 검사한다 (false이면 3번 패스)
    3. 요소에 10을 곱한다

    Optional

    Optional

    • null을 대신하기 위해 만들어진 클래스로 null이나 null이 아닌 값을 담을 수 있다.
    • 배경 : 자바는 레퍼런스 변수를 많이 사용한다 → Null Pointer Exception(NPE)이 발생할 가능성 높음 → 이를 해결하기 위해 null에 대한 조건문이 많이 필요함 → 이를 피하기 위해 Optional 사용
    • Optional.empty() : 빈 Optional 객체를 생성한다.
    Optional<String> optStr = Optional.empty();
    • Optional.of(value) : value의 값이 null이 아닌 경우 사용한다
    Optional<String> optStr1 = Optional.of("Hello world"); // value가 null이면 NPE 발생
    • Optional.ofNullable(value) : value의 값이 null인지 아닌지 확실하지 않은 경우에 사용한다.
    Optional<String> optStr2 = Optional.ofNullable(null); // null인 경우 empty optional 객체 생성

    Optional 객체에 접근 및 사용 방법

    • ifPresent 함수
      • Optional 객체가 null이 아닐 때 인자로 넘긴 함수를 실행하는 메소드
      • optStr1.ifPresent(s -> System.out.println(s.charAt(0))); // null인 경우 프린트 안됨
    • orElse 함수
      • Optional 객체가 null인 경우에 대신할 수 있는 값을 반환하는 메소드
      • optStr2.orElse("test");
    • orElseGet 함수
      • orElse와 유사하지만 다른점은 메소드를 인자로 받고 함수에서 반환한 값을 반환하는 메소드
      • optStr.orElseGet(() -> System.out.println("null"));
    • orElseThrow 함수
      • 기본 값을 반환하는 대신 예외를 던짐
Designed by Tistory.