반응형

언어(Language)/Java 94

[Java] 자바 파일 입출력 스트림 FileInputStream과 FileOutputStream 개념 정리 및 활용

InputStream과 OutputStream 자바에서는 입출력을 다루기 위한 InputStream과 OutputStream이 있다. 스트림은 단방향으로만 데이터를 전송할 수 있기 때문에, 입력과 출력을 동시에 처리하기 위해서는 각각의 스트림이 필요하다. 입출력 스트림은 어떤 대상을 다루느냐에 따라 종류가 나뉜다. 예를 들어 파일(File)을 다룰 때에는 FileInputStream과 FileOutputStream을 사용하고, 프로세스를 다룰 때에는 PipedInputStream과 PipedOutputStream을 사용한다. FileOutputStream 먼저 FileInputStream을 활용하기 전, 자바 프로그래밍으로 파일을 생성하여 저장한다. import java.io.FileOutputStrea..

[Java] 자바 옵셔널(Optional) 개념 정리 및 활용

Optional 옵셔널(Optional)은 NPE(NullPointerException) 문제를 해결할 수 있는 방법을 제공한다. 즉, null 값으로 인해 에러가 발생하는 현상을 효율적으로 방지하는 것이다. 연산 결과를 Optional에 담아서 반환하는 것으로, 따로 조건문을 작성하지 않아도 NPE가 발생하지 않도록 할 수 있다. 옵셔널 클래스(Optional Class) 옵셔널 클래스는 모든 타입의 객체를 담을 수 있는 래퍼 클래스이다. Optional 객체를 생성하려면 of() 메서드 또는 ofNullable() 메서드를 사용한다. 참조 변수의 값이 null일 가능성이 있다면, ofNullable() 메서드를 사용한다. isPresent() isPresent() 메서드는 Optional 객체의 참조..

[Java] 자바 스트림 생성과 중간 연산, 최종 연산의 개념 정리 및 활용

스트림 자바의 스트림은 데이터를 연속적으로 전달하는 통로로 표현할 수 있다. 스트림(Stream)은 다양한 데이터 소스(배열, 컬렉션)를 표준화하여 다루는 방식으로 통합된 방식으로 데이터 핸들링이 가능하다. 컬렉션 또는 배열에서 스트림을 생성하고, 중간 연산을 거친 뒤 최종 연산에 도달할 수 있다. 스트림 생성 Collection 인터페이스에는 stream() 메서드가 정의되어 있다. 따라서 Collection 인터페이스를 구현한 객체(List, Set 등)들은 stream() 메서드를 통해 스트림을 생성할 수 있다. public class StreamCreate { public static void main(String[] args) { List list = Arrays.asList("a", "b", ..

[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) // 런타임 시까..

반응형