Java - Collection

지우·2023년 1월 26일
0

CNU SW 아카데미 2기

목록 보기
8/10

Collection

정의

여러 데이터의 묶음. 추상체.

  • List
    • ArrayList

    • LinkedList

      List<Integer> list = new linkedLsist<>();

Iterator

정의

여러 데이터의 묶음을 풀어서 하나씩 처리할 수 잇는 수단 제공

Iterator<String> iter = list.iterator();
iter.next();
System.out.println(iter.next());
// 하나만 출력됨

next 통해 다음 데이터 조회 가능, 역으로는 불가.

if(iter.hasNext()) iter.next(); //다음이 있다면 다음으로 넘어간다.

while(iter.hasNext()) {
	System.out.println(iter.next());
}
//데이터 순회 방법에서 주로 사용된다.

사용

Stream

정의

데이터의 연속. iterator와 비슷. System.inSystem.out 이 이에 해당한다.

filter, map, forEach 같은 고차함수(함수를 인자로 받는 함수)가 제공된다.

사용

//주사위를 100번 던져서 6이 나올 확률
        Random r = new Random();
        var count = Stream.generate(() -> r.nextInt(6) + 1)
                .limit(100)
                .filter(n -> n == 6)
                .count();
        System.out.println(count);

() -> r.nextInt(6) + 1로 매개변수 없이 리턴값만 정해준다. 리턴값은 1 ~ 6 값이 나오도록 조정한다. 100번 제한을 두고, n == 6일 때만 걸러서 count하는 코드를 작성한다.

Stream.generateStream.iterateStream 생성 가능.

연속된 데이터에 대해서 풍부한 고차함수들을 사용하여 강력한 기능을 간결하게 표현할 수 있다.

Optional

NPE : Null Poionter Exception - 가장 많이 발생하는 에러 중 하나

자바에서는 거의 모든 것이 레퍼런스 → 거의 모든 것이 null이 될 수 있다. 따라 이를 확인할 필요가 있다.

요즘은 null을 쓰지 않는 방법을 사용하는 추세.

  1. 값이 없는 상수 객체 (EMPTY)를 생성
public class User {
    public static final User EMPTY = new User(0, "");

    private int age;
    private String name;

    public User(int age, String name) {
        this.age = age;
        this.name = name;
    }
}

User 객체를 생성하고 싶을 때, null 대신 빈 값을 가진 객체를 생성하여 활용한다.

User user = User.EMPTY;
User user2 = getUser();
// if (user2 == null) {}
if (user2 == User.EMPTY) {}

후에 이런 식으로 null 대신 EMPTY 객체를 활용하여 NPE를 막을 수 있다.

  1. Optional 사용

    코드가 없다면 EMPTY가 있는지 알 수 없다. 따라 값이 없을 때 null 리턴 대신 null이 담긴 Optional을 리턴하여 해결한다.

    Optional<User> optionalUser = Optional.empty();
    //null 데이터
    optionalUser = Optional.of(new User(1, "2"));
    //데이터 넣어줌
    
    optionalUser.isEmpty(); //없으면 true
    optionalUser.isPresent(); //있으면 true

    데이터가 없을 때, 있을 때 전부 처리 가능하다는 장점이 있다.

profile
기록용

0개의 댓글