반응형

언어(Language) 109

[Java] 자바 스트림 파이프라인 개념 정리 및 활용

리덕션(Reduction) 대량의 데이터를 가공하여 축소하는 것을 리덕션이라 한다. 데이터의 합계, 평균값, 카운팅 등 연산의 결괏값을 나타내는 것이 리덕션의 결과물이라 할 수 있다. 그러나, 컬렉션의 요소를 리덕션의 결과물로 바로 집계할 수 없을 때에는 필터, 매핑, 정렬, 그룹화와 같은 중간 연산이 필요하다. 파이프라인(Pipelines) 리덕션의 결과물을 위해 중간 연산과 최종 연산을 수행하도록 하기 위해 파이프라인을 사용한다. 파이프라인은 여러 개의 스트림이 연결되어 있는 것을 뜻한다. 연결된 스트림에서 최종 연산을 제외하고는 모두 중간 연산 스트림이다. 중간 스트림이 생성될 때 요소들이 바로 중간 연산이 되는 것은 아니다. 최종 연산이 시작되기 전까지는 지연되며, 최종 연산이 시작되는 시점부터 ..

[Java] 자바 스트림(Stream) 개념 정리 및 활용

스트림이란? (Stream) 스트림(Stream)은 다양한 데이터 소스(배열, 컬렉션)를 표준화하여 다루는 방식으로 통합된 방식으로 데이터 핸들링이 가능하다. 배열, 컬렉션의 저장 요소를 하나씩 참조해서 람다식으로 처리할 수 있도록 해주는 반복자이다. 스트림을 사용하면 List, Set, Map 등 다양한 데이터 소스로부터 스트림을 만들 수 있고, 이를 표준화된 방법으로 다룰 수 있다. 즉, 스트림은 데이터 소스를 다루는 풍부한 메서드를 제공한다. 스트림의 특징 1. 선언형으로 데이터 소스를 처리한다 스트림을 이용하면, 선언형으로 데이터 소스를 처리할 수 있다. 선언형 프로그래밍이란 “어떻게” 수행할지 보다 “무엇을” 수행할 지에 관심을 두는 프로그래밍 패러다임이다. 명령형 프로그래밍 방식에서는 절차적으..

[Java] 자바 메서드 레퍼런스(Method Reference) 개념 정리 및 활용

메서드 레퍼런스란? (메서드 참조 : Method Reference) 메서드 레퍼런스는 람다식에서 불필요한 매개변수를 제거할 때 주로 사용한다. 즉, 람다식으로 더욱 간단해진 익명 객체를 보다 더 간단하게 사용할 수 있도록 하는 것이다. 람다식은 기본으로 내장된 람다식을 단순히 호출만 하는 경우가 많다. (num1, num2) -> Math.max(num1, num2); 이와 같이 람다식을 활용하여 자바 라이브러리에서 제공하는 클래스 메서드를 활용하는 것이다. 이러한 경우, 입력값과 출력 값의 반환 타입을 쉽게 유추할 수 있기 때문에 입력값과 출력 값을 적는 것이 크게 중요하지 않게 되었다. 메서드 레퍼런스를 이용하면 이를 더욱 간결하게 처리할 수 있다. // 클래스이름 :: 메서드이름 Math :: m..

[Java] 자바 람다식과 함수형 인터페이스 (Lambda Expression & Functional Interface)

람다식이란? (Lambda Expression) 람다식은 함수형 프로그래밍 기법을 지원하는 자바의 문법 요소이다. 람다 계산법이 프로그래밍 언어에 도입하면서 사용되기 시작했다. 람다식은 메서드를 하나의 식(Expression)으로 표현한 것으로, 코드를 간결하면서 명확하게 표현할 수 있는 장점이 있다. 자바는 JDK 1.8 이후 람다식을 도입하여 객체지향 프로그래밍과 함수형 프로그래밍을 혼합하여 사용할 수 있게 되었다. 람다식의 장단점 장점 코드를 간결하고 가독성 있게 작성할 수 있다. 메서드를 만드는 과정 없이 한 번에 처리가 가능하다. 병렬 처리가 용이하다. 단점 익명 함수의 재사용이 불가능하다. 재귀함수의 구현이 어렵다. 재사용이 불가능하므로 비슷한 함수 구현이 잦을 수 있다. 디버깅이 어렵다. 즉..

[Java] 자바 메타 어노테이션 정리 및 활용

메타 어노테이션 (Meta Annotation) 메타 어노테이션은 어노테이션에 붙이는 어노테이션이다. 즉, 사용할 어노테이션을 정의하는 데 사용한다. 메타 어노테이션은 사용할 어노테이션의 적용대상 또는 어노테이션을 유지하는 시간 등을 규정한다. @Target @Target 어노테이션은 사용할 어노테이션을 적용할 대상을 지정하는 데 사용한다. @Target 어노테이션의 옵션은 java.lang.annotation.ElementType 에 정의되어 있으며, 이를 사용하기 위해서는 import를 해주어야 한다. @Target 어노테이션의 사용 방법 @Target 어노테이션을 사용하여 지정할 수 있는 옵션과 대상의 타입은 다음과 같다. @Target(ElementType.ANNOTATION_TYPE) : 어노테..

[Java] 자바 표준 어노테이션 정리 및 활용

표준 어노테이션이란? 자바 표준 어노테이션은 자바에서 기본적으로 제공하는 어노테이션이다. 대부분의 어노테이션은 자바 컴파일러에게 정보를 제공하는 역할을 하지만, 용도에 걸맞지 않은 어노테이션을 사용한다면 컴파일 에러가 발생할 수 있다. 표준 어노테이션은 여러 가지가 있지만, 그중에서도 @Override, @Deprecated, @SuppressWarning, @FunctionIInterface 네 가지 어노테이션이 가장 많이 사용된다. @Override @Override 어노테이션은 메서드 앞에만 붙일 수 있는 어노테이션이다. 선언한 메서드가 상위 클래스의 메서드를 오버라이딩하는 메서드라는 것을 컴파일러에게 알려주는 역할을 한다. @Override 어노테이션을 사용하는 이유 만약, 다음과 같이 상위 클래..

[Java] 자바 사용자 정의 어노테이션(Custom Annotation) 개념 정리 및 활용

사용자 정의 어노테이션 (Custom Annotation) 사용자가 직접 정의하여 사용하는 어노테이션이다. 프레임워크나 API 등을 만들어 사용할 때 주로 사용한다. 사용자 정의 어노테이션 정의 사용자 정의 어노테이션을 사용하기 위해 @interface를 통해 어노테이션 클래스를 작성할 수 있다. 어노테이션은 내부에 값을 가질 수 있으며, 값을 설정할 수 있다. 값을 설정하기 위해서는 default 값 형태로 설정한다. import java.lang.annotation.*; // 메타 어노테이션을 활용하여 사용자 정의 어노테이션 선언 @Target(ElementType.TYPE) // 어노테이션 적용 대상 Type으로 설정 @Retention(RetentionPolicy.RUNTIME) // 런타임 시까..

[Java] 어노테이션(Annotation) 개념 정리 및 종류

Intro 프로그래밍에서 주석은 개발자의 입장에서 더 직관적이고 코드를 이해하기 쉽게 하며, 다른 사람에게 설명할 수 있도록 정보를 제공하는 역할이다. 어노테이션 또한 주석과 비슷한 역할을 담당한다고 할 수 있다. 즉, 주석은 사람에게 정보를 제공하는 것이라면, 어노테이션은 특정 코드를 사용하는 프로그램에게 정보를 전달한다. 어노테이션이란? (Annotation) 어노테이션은 다른 프로그램에게 유용한 정보를 제공하기 위해 사용되는 것으로 주석과 같은 의미를 가진다. 어노테이션의 역할 컴파일러에게 문법 에러를 체크하도록 정보를 제공한다. 프로그램을 빌드할 때 코드를 자동으로 생성할 수 있도록 정보를 제공한다. 런타임에 특정 기능을 실행하도록 정보를 제공한다. 어노테이션은 @를 사용하여 작성하며, 해당 타겟..

[Java] 자바 TreeMap 개념 정리 및 활용

트리맵 (TreeMap) TreeMap은 TreeSet과 동일하게 이진 탐색 트리 형태로 데이터를 저장한다. 하지만, Set 인터페이스의 특성과는 달리 Map 특성을 사용하기 때문에 키(Key)와 값(Value)으로 이루어진 Entry 객체 형태로 저장한다. 이진 탐색 트리(Binary Search Tree)는 하나의 부모 노드가 최대 두 개의 자식 노드와 연결된 형태로 데이터를 저장한 자료 구조이다. 이진 탐색 트리는 이진 트리(Binary Tree)의 일종으로 정렬과 검색에 특화된 자료 구조이다. 최상위 노드를 루트 노드라 하며 그림의 10에 해당된다. 이진 탐색 트리는 모든 왼쪽 자식의 값이 루트나 부모 노드보다 작고, 모든 오른쪽 자식의 값은 루트나 부모 노드보다 큰 값을 가지는 것이 특징이다. ..

[Java] 자바 HashTable 개념 정리 및 활용

HashTable HashTable은 HashMap과 내부 구조가 동일하며, 사용 방법 또한 매우 유사하다. HashMap과 마찬가지로 키는 중복이 안되지만, 값은 중복을 허용한다. HashTable과 HashMap의 차이점은 스레드와 관련이 있다. HashTable의 경우 병렬 프로그래밍을 지원하여 병렬 처리를 하면서 자원의 동기화를 고려해야 하는 상황일 때 사용하기 적합하다. 그 외 병렬 처리를 하지 않거나 동기화를 고려하지 않는 상황이라면 HashMap을 사용한다. 또한, HashMap은 값으로 null이 입력이 가능하지만, HashTable에서는 null 입력이 불가능하다. 다음은 HashTable의 간단한 예제이다. import java.util.*; public class HashTableEx..

반응형