Backend/Java
Scanner Scanner는 사용자로부터의 입력을 읽기 위한 클래스이며. 주로 키보드 입력을 읽거나 파일에서 데이터를 읽을 때 사용된다. 코딩 테스트를 비롯한 PS 문제에서 BufferedReader와 함께 입력을 받기 위해서 많이 사용된다. Scanner은 BufferedReader에 비해서 사용하기 용이한 메서드들을 클래스에서 많이 제공한다. 따라서 BufferedReader에 비해서 자료형을 처리하거나 간단하게 입력을 처리하기에 용이하다. 그렇지만 데이터를 파싱하기 위해서 내부적으로 정규 표현식 등을 사용하여 BufferedReader에 비해 내부적으로 복잡한 과정을 거쳐 처리 시간이 더 오래 걸린다. 따라서 입력량이 고정되어 있고, 그 양이 많지 않은 경우에는 Scanner를 사용하여 편리하게 ..
정렬 Java에서 배열과 컬렉션과 같은 데이터의 집합을 정렬하는 방법들에 대해서 살펴보겠다. 기본적인 정렬 방법부터, Comparator과 Comparable의 개념과, 둘의 사용 목적에 대해서 살펴보려고 한다. 추가적으로 Java에서 사용되는 정렬 알고리즘에 대해서 알아보자. 배열 : 기본 정렬 방법 int[] array = {5, 2, 8, 1, 9}; // 배열 오름차순 정렬 Arrays.sort(array); System.out.println(Arrays.toString(array)); // [1, 2, 5, 8, 9] 기본적으로 정렬 시, Arrays.sort(data) 메서드를 이용한다. 이는 따로 리턴 타입이 있지 않고, 메서드 내부에서 집합을 정렬하여 재배치하게 되기 때문에 array 변수..
Collection Framework(컬렉션 프레임워크) 자바에서는 데이터를 저장하고 관리할 수 있는 다양한 방법을 제공한다. 컬렉션 프레임워크는 자료를 구조화하여 데이터를 쉽게 사용할 수 있도록 도와준다. 계층 구조로 살펴보는 Collection의 종류 Collection : 대부분의 컬렉션 클래스의 상위 인터페이스. 컬렉션의 기본 동작을 정의한다. Set : 중복된 요소를 허용하지 않는 컬렉션 인터페이스. 구현체로는 HashSet,, TreeSet 등 List : 순서가 있는 요소들의 컬렉션 인터페이스. 인덱스에 의해 접근이 가능하다. 구현체로는 ArrayList, LinkedList, Vector(Extend -> Stack) 등 Queue : FIFO를 따르는 컬렉션 인터페이스. 구현체로는 Lin..
Java에서는 문자열을 다룰 수 있는 다양한 메서드 및 기능들을 제공한다. 해당 기능들은 프로그래밍에서도 유용하게 사용할 수 있으며, 문자열을 다루는 것은 코딩 테스트를 비롯한 PS에서 빈출 문제이다. 문자열의 다양한 메서드들 1. 문자열 탐색 및 추출 String str = "Hello, world!"; char ch = str.charAt(1); // 'e' int length = str.length(); // 13 String substr1 = str.substring(7); // "world!" String substr2 = str.substring(7, 12); // "world" int index1 = str.indexOf(","); // 5 int index2 = str.lastIndexOf..
Stream API Java 8에서 소개된 Stream API는 컬렉션, 배열 등의 데이터 소스로부터 데이터를 받아와서 원하는 형태로 가공하거나 필터링할 수 있는 기능을 제공한다. Stream API를 사용하면 데이터 처리 작업을 병렬로 수행할 수 있어서 멀티스레드 환경에서의 성능을 향상시킬 수 있다.또한 데이터 처리 과정을 람다식과 함께 사용하여 한 줄로 간결하게 표현할 수 있어 가독성을 높여준다. https://sjh9708.tistory.com/190 [Java] 람다식(Lambda Expression)과 함수형 프로그래밍람다식(Lambda Expression) 람다식은 함수형 프로그래밍에서 사용되는 개념으로, 간결하고 명확한 방식으로 익명 함수를 표현하는 방법이다. 자바 8부터 도입되었으며, 함수..
람다식(Lambda Expression) 람다식은 함수형 프로그래밍에서 사용되는 개념으로, 간결하고 명확한 방식으로 익명 함수를 표현하는 방법이다. 자바 8부터 도입되었으며, 함수형 인터페이스의 구현을 간단한 방법으로 할 수 있다. 람다식의 기본적인 표현 식은 다음과 같다. () 안에 파라미터들을 선언하고 ->(화살표)로 이은 후 {} 안에 동작 혹은 리턴을 작성한다. (parameter1, parameter2, ...) -> { body } (String s) -> { System.out.println("Hello World") } (int a, int b) -> { return a + b; } 이는 다음의 함수를 표현한 것과 같다. void sayHello(String s){ System.out.pr..
내부 클래스 내부 클래스(inner class)는 다른 클래스 내부에 선언된 클래스를 의미한다. 내부 클래스는 클래스의 멤버로 간주되며, 속해있는 클래스의 멤버 변수와 메서드에 쉽게 접근할 수 있다. 외부 클래스라는 단어가 나올 텐데 내부 클래스가 속해있는 클래스를 칭하는 단어라고 생각하면 된다. 내부 클래스의 종류에는 크게 네 가지가 있다. 멤버 내부 클래스(Member Inner Class): 외부 클래스의 멤버 변수와 메서드와 동일한 수준에서 선언된 클래스. 외부 클래스의 인스턴스에 종속적이며, 따라서 외부 클래스의 인스턴스가 생성되어야만 사용할 수 있다. 정적 내부 클래스(Static Inner Class): 내부 클래스가 정적으로 선언된 경우이다. 외부 클래스의 인스턴스와 독립적으로 동작하며, ..
Generic Type 제네릭(Generic) 타입은 자바에서 클래스 또는 메서드를 정의할 때, 타입을 파라미터화하는 기능이다. 사용 목적은 다음과 같다. 1. 어떤 값이 하나의 참조 자료형이 아니라 여러개의 참조 자료형을 사용할 수 있도록 프로그래밍 할 수 있다. 2. 참조 자료형이 변환될 때 검증을 컴파일러가 하기 때문에 안정적이다. 우리가 많이 사용하는 컬렉션 프레임워크도 제네릭 타입을 사용하는 대표적인 예시이다. List list = new ArrayList(); 컬렉션은 제네릭 타입을 사용하여 List가 여러가지 타입의 Element를 받을 수 있도록 설정할 수 있어 클래스 사용의 유동성이 매우 높다. 또한 제네릭을 사용하여 List를 선언함으로써 해당 List가 어떤 타입의 요소를 다루는지 명..