지난번 글에서 스트림은 크게 세 가지 과정으로 나뉜다고 했다. 스트림 생성하기 중간 연산 - 데이터의 가공 최종 연산 - 결과 만들기 또한 스트림을 사용할 때 주의해야 할 점도 있었는데, 스트림은 데이터 소스로부터 데이터를 읽기만 할 뿐 변경하지 않는다(Read-only) 스트림은 일회용으로, 사용시마다 새로 생성해야 한다. 가 그것이다. 이 글에선 위의 세 가지 과정 중심으로 스트림에 대해 알아본다. 스트림 생성 스트림은 주로 컬렉션과 배열을 이용해 얻는다. 그중에서도 컬렉션에는 아예 stream()이 정의되어 있기 때문에, 간단하게 스트림을 얻을 수 있다. // List로부터 스트림을 생성 List list = Arrays.asList("a", "b", "c"); Stream listStream = ..
스트림(Stream)은 부터 지원하기 시작한 기능이다. 람다를 이용해 배열과 컬렉션의 요소들을 순회하며 처리할 수 있는 반복자라고 보면 된다. 스트림(Stream)은 또한 '흐름'이라는 뜻을 가지고 있는데, 자바에서는 '데이터의 흐름'이라고 생각하면 편하다. 배열, 컬렉션에서 데이터의 흐름(스트림)을 생성해 원하는 대로 필터링하고 가공해서 결과를 얻는 로직이라는 뜻이다. 이 과정에서 람다가 사용되어 코드의 길이를 줄이게 된다. 스트림은 크게 세 가지 과정으로 나뉘는데, 스트림 생성하기 중간 연산 - 데이터의 가공 최종 연산 - 결과 만들기 가 그것이다. 과정에 들어가기에 앞서, 스트림의 특징에 대해 조금 더 알아보자. 스트림의 특징 선언형 프로그래밍 스트림의 가장 큰 특징은 데이터를 선언형으로 처리한다는..
람다 표현식(Lambda Expression) 혹은 줄여서 람다식은 함수형 프로그래밍 기법을 지원하는 자바의 문법요소이다. 간단하게 말해서 메서드를 하나의 식으로 표현한 것이라고 할 수도 있는데, 메서드를 람다식으로 표현하면 클래스와 객체를 생성하지 않고도 메서드를 사용할 수 있다. 따라서 람다 함수는 익명 함수와 동의어이며, 더 정확하게는 익명 객체라 볼 수 있다. 또한 이 익명 객체를 사용하기 위해 뒤에 살펴볼 함수형 인터페이스(Functional Interface)가 만들어지게 되었다. 람다식의 기본 문법 람다식의 가장 큰 장점은 코드의 직관성과 간결성이다. //기존 메서드 표현 방식 void sayhello() { System.out.println("HELLO!") } //위의 코드를 람다식으로 ..
열거형(enum) 열거형(enum)은 Enumerated Type에서 왔다. 말 그대로 열거형. 열거형은 변하지 않는 한정된(연관된) 상수 데이터를 다루는 데 최적화된 타입이다. 이나 처럼 말이다. enum 타입을 정의하는 방법은 간단하다. enum Seasons { SPRING, SUMMER, FALL, WINTER } enum Frameworks { DJANGO, SPRING, NEST, EXPRESS } 자바에서 상수는 관례적으로 대문자로 표기하도록 되어 있고, 배열의 경우와 비슷하게 자동으로 0부터 시작하는 정수값이 할당된다. enum Seasons { SPRING, //정수값 0 할당 SUMMER, //정수값 1 할당 FALL, //정수값 2 할당 WINTER //정수값 3 할당 } 또한 열거형..
Map Map 인터페이스는 Collection 인터페이스와는 다른 저장방식을 가진다. 키(key)와 값(value)을 하나의 쌍으로 저장하는 방식(key-value 방식)이 그것인데, 여기서 키(key)란 실질적인 값(value)을 찾기 위한 이름의 역할을 한다고 할 수 있다. 여기서 중요한 사실은 키는 중복저장될 수 없지만 값은 중복저장이 가능하다는 점이다. 만약 기존의 키와 같은 키에 다른 값을 저장하면, 값이 대체되는 효과가 발생한다. Map 인터페이스를 구현한 클래스는 HashMap, HashTable, TreeMap, SortedMap등이 있고, 공통으로 사용할 수 있는 메서드는 다음과 같다. HashMap HashMap 클래스는 Map 컬렉션 클래스에서 가장 많이 사용되는 클래스이다. Hash..
Set Set 인터페이스를 구현할 앞으로의 모든 Set 컬렉션 클래스는 다음과 같은 공통점을 갖는다. 데이터의 순서가 유지되지 않는다. 데이터의 중복 저장을 허용하지 않는다. Set 컬렉션에 속하는 클래스는 다음과 같다. HashSet TreeSet 또한, 위 클래스에서 공통으로 사용할 수 있는 메서드는 다음과 같다. 추가로, 앞서 살펴보았던 List 클래스와 마찬가지로 컬렉션 인터페이스의 메서드를 상속받아 사용한다. HashSet HashSet 클래스는 Set 클래스 중에 가장 많이 사용되는 클래스이다. Set 인터페이스를 물려받아 데이터의 순서가 유지되지 않고, 중복 저장을 허용하지 않는다. 해시 알고리즘(Hash Algorithm)을 사용하여 검색 속도가 매우 빠르다는 장점이 있으며, 내부적으로는 ..
Iterator는 반복자라는 뜻을 갖는다. 컬렉션에 저장된 요소들을 순차적으로 읽어오는 역할을 하며, Collection 인터페이스 안에는 iterator 인터페이스의 iterator()메서드가 정의되어 있다. 즉 iterator()를 호출하면 Iterator 타입의 인스턴스가 반환된다. 따라서 List와 Set 인터페이스를 구현한 클래스들은 공통으로 iterator() 메서드를 사용할 수 있다. iterator()를 통해 만들어진 인스턴스는 아래의 메서드를 사용할 수 있다. next()메서드를 사용시 hasNext()를 통해 다음 객체가 있는지 확인하는 것이 좋다. 구체적인 사용 방법은 다음과 같다. List list = ...; Iterator iterator = list.iterator(); whi..
List List 인터페이스를 구현할 앞으로의 모든 List 컬렉션 클래스는 다음과 같은 공통점을 갖는다. 데이터의 순서가 유지된다(인덱스로 관리된다). 데이터의 중복 저장을 허용한다. List 컬렉션에 속하는 클래스는 다음과 같다. ArrayList LinkedList Vector Stack 이어서 위 클래스에서 공통으로 사용 가능한 메서드를 보자. 또한 앞서 살펴보았던 컬렉션 인터페이스의 메서드 또한 상속받아 사용할 수 있는데, 이는 다음과 같다. ArrayList ArrayList는 가장 많이 사용되는 컬렉션 클래스로서, 내부적으로 배열을 이용하여 요소를 정리한다. 따라서 추가된 객체는 인덱스로 관리되지만, 배열과는 달리 ArrayList는 크기(용량)가 고정되지 않는다는 차이점이 있다. 또한 앞서..
자바에서 컬렉션이란 데이터의 집합, 혹은 그룹, 자료 구조를 의미한다. 컬렉션 프레임워크는 그 컬렉션을 구현하기 위한 메서드, 클래스와 인터페이스의 집합이라고 할 수 있으며 자료 구조와 데이터처리 알고리즘을 클래스로 구현한 것이라고 이해해도 된다. 컬렉션 프레임워크는 주요 인터페이스로 다음의 세 가지를 제공하는데, List 인터페이스 Set 인터페이스 Map 인터페이스 이 중에서 List와 Set 인터페이스는 Collection 인터페이스를 상속받으며 Map은 구조상의 차이가 있다. 각각의 특징을 조금 더 살펴보면 다음과 같다. List 데이터의 순서가 유지되며, 중복 저장이 가능한 컬렉션을 구현하는데 사용된다. Arraylist, Vector, Stack, LinkedList등이 List 인터페이스를 ..
제네릭(Generic) 제네릭(Generic)은 '일반적인'이라는 뜻을 지니고 있다. 자바에서 제네릭이란 타입을 내부에서 지정하는 것이 아닌 외부에서 사용자가 지정하는 것을 말한다. 필요에 의해 지정할 수 있는 일반(Generic) 타입을 사용한다는 의미이다. 예를 들면, 아래 Basket 클래스는 오직 String 타입만을 저장할 수 있다. 따라서 여러 타입의 데이터를 저장할 수 있는 객체를 만들려면, 그 수만큼 클래스를 생성해야 한다. class Basket { private String item; Basket(String item) { this.item = item; } public String getItem() { return item; } public void setItem(String item..
- Total
- Today
- Yesterday
- 맛집
- 중남미
- Backjoon
- 리스트
- Python
- 여행
- 면접 준비
- 기술면접
- 유럽여행
- 세모
- 남미
- BOJ
- 스트림
- 알고리즘
- 지지
- 야경
- spring
- 백준
- 자바
- 세계일주
- RX100M5
- 유럽
- 동적계획법
- 파이썬
- 스프링
- 칼이사
- Algorithm
- a6000
- java
- 세계여행
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |