컬렉션
-
람다와 스트림 - 중간 연산 part 1백엔드/자바 2023. 2. 11. 07:08
람다와 스트림 - 스트림의 정의와 특징 스트림의 정의와 그 필요성 한마디로 말하면 컬렉션이나 배열을 다루기 쉽게 만든 것이다. 기존의 컬렉션 프레임웍을 보면 위와 같이 List, Set, Map의 인터페이스로 구성된 것을 알 수 있다. 이 중 sgcomputer.tistory.com 지난 번 람다와 스트림의 정의와 특징을 설명하면서 다음과 같은 그림을 보여준 적이 있다. 간단히 이야기하자면 컬렉션의 스트림 생성 및 연산에 관한 그림이었다. 오늘은 이중에서 중간 연산에 대해서 설명하고자 한다. 중간연산이란? 중간 연산은 컬렉션을 스트림화 한 후 사용자의 필요에 따라 스트림의 데이터들을 재가공하는 과정을 말한다. 중간 연산을 통해서 데이터를 자르거나 조건에 따라 거르거나 정렬하는 등의 다양한 작업을 할 수 ..
-
람다와 스트림 - 스트림 만들기백엔드/자바 2021. 11. 9. 21:49
2021.09.15 - [백엔드/자바] - 람다와 스트림 - 스트림의 정의와 특징 람다와 스트림 - 스트림의 정의와 특징 스트림의 정의와 그 필요성 한마디로 말하면 컬렉션이나 배열을 다루기 쉽게 만든 것이다. 기존의 컬렉션 프레임웍을 보면 위와 같이 List, Set, Map의 인터페이스로 구성된 것을 알 수 있다. 이 중 sgcomputer.tistory.com 이전 파트에서는 스트림의 정의와 특징에 대해서 알아봤다. 간단히 복습해보자면 스트림이란 컬렉션의 데이터를 쉽게 다루기 위해 만들어진 인터페이스다. List든 Set이든 Map이든 형태에 구애받지 않고 데이터만 뽑아서 스트림 속에 넣고 가공할 수있다. 그렇다보니 스트림은 원본 데이터에 영향을 주지 않고 데이터만 손쉽게 뽑아 가공이 가능하다. 물론..
-
람다와 스트림 - 컬렉션과 함수형 인터페이스백엔드/자바 2021. 9. 1. 19:38
JDK 1.8부터는 함수형 인터페이스가 추가됐고, 그와 더불어 컬렉션 프레임웍을 편하게 사용할 수 있도록 컬렉션의 인터페이스에 디폴트 메서드가 추가됐다. 그 중 일부는 함수형 인터페이스를 사용하는데 이번 파트에서 그러한 메서드들에 대해 설명한다. 인터페이스 메서드 설명 Collection boolean removeIf(Predicate filter) 조건에 맞는 요소 삭제 List void replaceAll(UnaryOperator operator) 모든 요소를 변환하여 대체 Iterable void forEach(Consumer action) 모든 요소에 작업 action을 수행 Map V compute(K key, BiFunction f) 지정된 키의 값에 작업 f를 수행 V computeIfAbs..
-
지네릭스(Generics)와 Iterator & HashMap백엔드/자바 2021. 5. 22. 18:10
지네릭스와 Iterator 위와 같은 Student라는 일반 클래스가 있다고 가정해보자. 그리고 Student 클래스의 객체를 리스트에 저장한 다음 Iterator()메서드를 이용해서 Iterator 객체를 호출해서 리스트에 저장된 Student 객체의 이름을 출력하는 코드가 있다고 가정하자. 이때 Iterator객체의 next() 메서드는 Object 자료 타입으로 객체를 반환한다. 그렇기 때문에 Student의 변수인 s에 객체를 저장할 때 별도로 Student로 캐스팅을 한 것이다. 그런데 Iterator 객체를 호출할 때 지네릭스를 쓴다면 코드를 간결하게 쓸 수 있다. 위와 같이 미리 Iterator 객체를 호출할 때 지네릭스를 써서 이용할 객체를 미리 써두면 캐스팅이 필요없다. 그래서 훨씬 간결..
-
컬렉션 - Collections 클래스와 메서드백엔드/자바 2021. 5. 20. 19:37
Collections란? Arrays가 배열 관련 메서드를 제공하는 것처럼 Collections는 컬렉션과 관련된 메서드를 제공한다. Arrays, Collections, Objects와 같은 클래스들은 모두 Static 메서드를 제공한다. 그래서 객체 생성없이도 편리하게 다양한 기능을 이용할 수 있다. fill(), copy(), sort(), binarySearch() 등 기본 기능이 있으나 Arrays의 클래스의 메서드들과 기능이 동일하다. 동기화 - synchronizedXXX() 과거 Vector, Hashtable와 같은 자료구조 클래스들은 동기화가 처리되어있었다. 그래서 무슨 자료구조를 사용하든 기본적으로 동기화가 되었었다. 하지만 모든 프로그램이 멀티 쓰레드 프로그래밍을 하는 것이 아니다...
-
컬렉션 - Arrays 클래스와 메서드백엔드/자바 2021. 5. 20. 16:56
Arrays 클래스는 배열을 다루는데 유용한 메서드들이 정의되있다. 모든 메서드가 모든 Static으로 별도로 객체를 생성없이도 언제든 사용이 가능하다. 배열의 복사 - copyOf(), copyOfRange() copyOf()는 배열 전체를 복사해서 새로운 배열을 만들어서 반환한다. 반면 copyOfRange()는 지정한 범위만큼 복사를 해서 새로운 배열을 반환한다. 이때 copyOfRange()에 지정된 범위의 끝은 포함하지 않는다. public static void main(String[] args) { int arr [] = {0, 1, 2, 3, 4}; int arr1 [] = Arrays.copyOf(arr, arr.length); // {0, 1, 2, 3, 4} int arr2 [] = A..
-
컬렉션 - Comparable와 Comparator백엔드/자바 2020. 8. 17. 04:01
Comparable와 Comparator는? 객체의 정렬에 필요한 메서드(정렬 기준 제공)을 정의한 인터페이스. Comparable은 특정 클래스의 기본 정렬 기준(디폴트)를 구현하기 위해 사용된다. 반면 Comparator는 기본 정렬이 아닌 그 이외의 정렬을 사용하고자 할 때 사용된다. Comparable과 Comparator는 모두 인터페이스로 이를 클래스에 구현해서 정렬 순서를 정할 수 있다. Comparable을 구현할 경우는 compareTo() 메서드를 구현해야 한다. Comparator를 구현할 경우는 compare() 메서드를 구현해야 한다. Comparable의 compareTo() 메서드는 1개 객체를 매개변수로 받는다. 즉 compareTo()는 해당 메서드를 호출한 객체와 매개변수..
-
컬렉션 - iterator, Listiterator, Enumeration백엔드/자바 2020. 8. 17. 02:44
iterator, ListIterator, Enumeration이란? 컬렉션에 저장된 데이터에 접근하는데 사용되는 인터페이스. Enumeration은 iterator의 구 버전으로서 현재는 주로 iterator가 사용된다. 다만 오래된 코드들의 지원을 위해 Enumeration은 여전히 지원하고 있다. 그래서 실제 학습은 itertor만으로 충분하다. 해당 인터페이스들의 필요성 컬렉션에서 전체 데이터를 한 번에 읽어올 때 다소 번거로운 감이 있다. List, Set, Map의 자료 구조가 모두 다르고, 읽어오는 방법도 제각각이기 때문이다. 그래서 등장한 것이 바로 iterator 계열의 인터페이스다. iterator 계열의 인터페이스들은 컬렉션에 저장된 요소들을 읽어오는 방법을 표준화한다. 이를 이용하면..