반응형

프로그래밍 언어/자바(JAVA) 13

Collectors.toUnmodifiableList() 불변 리스트

.toUnmodifiableList() 란? .toUnmodifiableList는 자바 10부터 추가된 기능 중 하나로, java.util.stream.Stream 인터페이스에서 제공하는 메소드 중 하나입니다. 이 메소드는 스트림에서 요소를 수집하여 변경 불가능한 리스트(java.util.List)로 반환합니다. 반환된 리스트는 요소를 추가, 수정, 삭제할 수 없으므로, 불변성을 보장합니다. 다음과 같이 스트림을 생성하고, toUnmodifiableList 메소드를 호출하여 변경 불가능한 리스트를 생성할 수 있습니다. toList() 메소드는 스트림에서 수집한 요소를 리스트로 반환합니다. 하지만 toList() 대신 toUnmodifiableList()를 호출하면, 반환된 리스트는 변경할 수 없습니다. ..

자바(JAVA) - Scanner & BufferedReader

자바(JAVA) - Scanner & BufferedReader 자바를 처음 배울 때 사용자(키보드) 입력받기 위해 보통 Scanner 클래스를 사용합니다. 하지만 알고리즘을 풀기 시작하면서 백준에서 Scanner를 사용하여 입력을 받으면 시간초과가 발생하는 경험을 하게 됩니다. 그래서 다른 방법을 찾다 보면 BufferedReader를 접하게 됩니다. Scanner와 BufferedReader 클래스는 둘 다 사용자(키보드) 입력을 받을 수 있는 기능을 제공합니다. 두 클래스가 가지고 있는 함수들에도 많은 차이가 있지만 가장 큰 차이는 속도입니다. Scanner와 BufferedReader의 사용법 import java.util.Scanner; public class Input { public stat..

자바(JAVA) - Interface default & static method

jdk 1.8(java 8)부터 인터페이스에 default method와 static method가 추가되었습니다. 이전 버전에서는 인터페이스는 오직 추상 메서드만 가질 수 있었습니다. default method 인터페이스에 새로운 메서드를 추가하거나 변경하게 되면 해당 인터페이스를 구현하는 모든 클래스들이 해당 메서드를 새로 구현해야 하는 불편함이 존재하였습니다. 그래서 이를 해결하기 위해 인터페이스에 default 메서드 기능을 추가하였습니다. 인터페이스는 추상 메서드만을 갖는 원칙이 있었습니다. 여러 인터페이스들간의 충돌을 방지하기 위해 추상 메서드만을 사용하도록 하였습니다. 하지만 default 메서드는 추상 메서드가 아닌 인스턴스 메서드로 '{ }' 바디를 가질 수 있습니다(구현될 수 있다). ..

자바(JAVA) - Optional

Optional은 jdk 1.8(java 8)부터 추가된 기능입니다. Optional 클래스는 제네릭 타입의 클래스이며 타입 파라미터로 T 타입을 사용되며 T 타입의 참조 변수 value가 있습니다. public final class Optional { private final T value; ... } 제네릭 타입은 데이터 형식에 의존하지 않고, 모든 데이터 타입을 갖도록 하는 방법입니다. 클래스에서 미리 타입을 지정하지 않고 사용자에 의해 지정됩니다. 제네릭을 사용하게 되면 컴파일 타임에 강한 타입 체크가 가능하며, 외부에서 타입을 지정하여 캐스트가 불필요한 장점 등이 있습니다. 성능 향상을 위해 기본타입은 OptionalInt, OptionalDouble과 같은 래퍼 클래스들을 사용하는 것이 좋습니..

자바(JAVA) - 람다식(Lambda Expression)

람다식(Lambda Expression) 람다식은 자바에서 제공하는 함수형 프로그래밍(Functional Programming) 방식입니다. 자바의 객체지향 프로그래밍(Object Oriented Programming) 이지만, JDK 1.8 Java 8)부터 함수형 프로그래밍 기능을 추가하였습니다. 람다식은 익명 함수(Anonymous functions)를 지칭하는 용어로 함수(메서드)를 간단한 식(expression)으로 표현하는 방법입니다. 하지만 자바에서 람다식은 익명 함수가 아니라 익명 객체입니다. 자바에서는 함수만 존재할 수 없으므로 객체 형식으로 존재해야합니다. 본래는 익명 객체를 사용하는 것을 람다식을 사용하여 표현할 수 있습니다. 익명 객체란 이름이 없는 일회용 클래스로 선언과 생성을 동..

자바(JAVA) - 익명 클래스 (Anonymous class)

익명 클래스란 이름이 없는 일회용 클래스입니다. 일회용으로만 사용하기 때문에 이름이 필요 없으며 객체 생성 시에 클래스 정의와 생성을 동시에 합니다. 보통의 자바 클래스는 클래스를 정의하고 클래스명으로 객체를 생성합니다. // 클래스 정의 class MyClass { ... } // 객체 생성 MyClass myClass = new MyClass(); 객체를 생성해주는 new 연산자 뒤에 부모 클래스(인터페이스)의 이름을 사용하여 생성하며, {} 안에 함수를 정의합니다. 하나의 부모 클래스를 상속받거나 단 하나의 인터페이스만을 구현할 수 있습니다. // 생성과 정의를 동시에 Object myClass = new Object() { void myMethod() { ... } }; 학생 클래스의 배열을 나이..

자바(JAVA) - Char to Int : 문자를 숫자로 변환하기

자바에서 문자 타입의 char를 정수 타입의 int로 변환하는 방법입니다. 1. 자동 형변환, 강제 형변환 (X) char c = '1'; int n = c; // == int n = (int)c; System.out.println(n); // 결과: 49 자동 형변환이나 강제 형변환으로 char를 int로 변경하면 문자 '1'의 아스키 코드인 49가 출력되어 올바른 방법이 아닙니다. 2. '0'을 빼주기 (ASCII code 사용) (O) char c = '1'; int n = c - '0'; // == int n = (int)c - '0'; 49 - 48 = 1 System.out.println(n); // 결과: 1 아스키 코드 표를 살펴보면 문자 0 ~ 9는 48 ~ 57의 순서로 되어있습니다. ..

자바(JAVA) - FileReader, FileWriter 파일 읽기, 쓰기

자바(JAVA) - FileReader, FileWriter 파일 읽기, 쓰기 자바에서 텍스트 파일을 읽고 쓰기 위한 FileReader와 FileWriter 클래스가 있습니다. FileReader와 FileWriter 클래스는 문자 스트림으로 텍스트 파일을 읽고 쓰는데 사용됩니다. 자바의 입출력 스트림은 문자 스트림과, 바이너리 스트림 두 종류가 존재합니다. 문자 스트림은 문자만 입출력하는 스트림으로 문자가 아닌 다를 데이터는 스트림에서 처리하지 못함니다. 만약 동영상, 오디오 등의 바이너리 데이터를 읽고 쓴다면 바이너리 스트림을 사용하여야 합니다. FileReader FileReader는 파일 입력 스트림을 생성하고 파일을 열어 스트림과 연결합니다. FileReader 객체가 생성될 때에 파일과 직접..

자바(JAVA) - 입출력 스트림

자바(JAVA) - 입출력 스트림 입출력 스트림이란? 스트림(Stream)을 한글로 번역하면 개울, 시내, 줄기, 줄줄 흐르다로 번역됩니다. 입출력 스트림에서 스트림은 순서가 있는 데이터의 연속적인 흐름이라 할 수 있습니다. 입출력 스트림은 입출력 장치와 자바 응용 프로그램을 연결하는 역할입니다. 기본 단위는 바이트 이며, 단방향 스트림과 선입선출의 구조를 가집니다. 입력 스트림 : 입력 장치(키보드 등)으로 부터 받은 입력 값을 자바 응용 프로그램으로 전달하는 객체입니다. 자바 응용 프로그램은 입력 장치로부터 직접 데이터를 읽지 않고 입력 스트림을 통해 데이터를 읽습니다. 출력 스트림 : 자바 응용프로그램으로 부터 출력 장치(화면 등)으로 데이터를 보내는 객체입니다. 입력 스트림과 마찬가지로 직접 데이..

자바(JAVA) - 폴더 파일명 변경

자바를 사용해서 원하는 폴더의 모든 파일명을 변경하는 방법입니다. 이 글과 보시는 분의 목적이나 방법이 다를 수 있습니다. 저는 알고리즘 폴더의 파일명들을 변경하고 싶어 이 코드를 작성하여 파일명을 변경하였습니다. 원하는 폴더의 절대 경로를 가져와 저장합니다 String path = "/Users/dlee/Desktop/Algorithm_Study/backjoon/"; 절대 경로를 가져오는 방법은 워낙 다양해서 편한 방법으로 찾았다고 가정하겠습니다. 폴더를 가져오기 위해 java.io에 있는 File 클래스를 사용할 것입니다. import java.io.File; File클래스의 생성자 중 File(String pathname)으로 생성하면 입력한 pathname 경로 파일의 객체를 생성합니다. File..

반응형