기본형(Primitive Type) Stream 1) boxed().collect(..)- Primitive Type 의 Stream을 Boxing Type 의 Stream으로 변환한다- boxed()의 경우 중간 연산에 속하나 collect() method chaning 방식에 대해 설명하기 위해 추가Stream integerStream = IntStream.of(1, 2, 3, 4, 5).boxed();Stream longStream = LongStream.of(1, 2, 3, 4, 5).boxed();Stream doubleStream = DoubleStream.of(1.1, 2.2, 3.3, 4.4, 5.5).boxed();// List 로 최종연산 처리List integers = integer..
- Copilot 체험판을 사용하여 테스트 코드 작성시 Support 받으려 해보았지만, 원하는 정보 얻지 못해 구독 해지하게 되었습니다- 체험판 한 달 지난 후 자동 결제 처리되므로, 꼭 필요하지 않은 경우 사전에 미리 구독 취소하시는 게 좋습니다. 체험판 구독 해지 방법깃허브 로그인 - 우측 상단 프로필 클릭 - Settings 메뉴 선택 1. 좌측 [Access > Billing and plans > Plans and usage] 메뉴 선택 2. 스크롤을 아래로 내려 [Add-ons] GitHub Copilot 에서 Cancel trial 버튼 누름 3. 간단한 설문 조사 참여 후 하단에 I understand, cancel GitHub Copilot trial 버튼 누르면 구독 해지 완료
Stream 중간 연산1) distinct(): 중복 요소를 제거 Primitive Type 경우 // IntStream.class IntStream distinct();// #예시int[] intStream = new int[] {1, 2, 3, 4, 1, 2, 3, 4};int[] result = Arrays.stream(intStream).distinct().toArray();assertThat(result).hasSize(4); // ok Collection 경우: Person 클래스에 정의한 equals 통해 비교하여 같은 객체인지 판별한다( 동등성 )// Collection.classdefault Stream stream() { return StreamSupport.stream(this...
Collection 인터페이스 Collections 인터페이스 구현체는 stream() 메서드 호출하여 Stream 객체로 변환한다 Stream stream()public interface Collection extends Iterable { //.. default Stream stream() { return StreamSupport.stream(this.spliterator(), false); } //..} 1) ListList people = List.of(new Person("고길동", 30), new Person("마이콜", 20), new Person("고희동", 5));Stream personStream = people.stream(); 2) SetSet ..
목차 Stream ? - Java 8 부터 등장 - 다양한 data source(배열, 콜렉션 자료구조)를 표준화된 방법을 다루기 위한 방법 요약. Java Stream은 데이터를 빠르고 편리하게 대량 처리할 수 있도록 해주는 래퍼 클래스이다. 특징 ① 스트림은 데이터 소스로부터 데이터를 읽기만할 뿐 변경하지 않는다. (Read Only) List source = List.of(6, 4, 2, 3, 1, 5); List sorted = source.stream().sorted().collect(Collectors.toList()); System.out.println(source); // [6, 4, 2, 3, 1, 5] System.out.println(sorted); // [1, 2, 3, 4, 5, ..
Method Reference - Java 8 도입- 하나의 메서드만 호출하는 람다식은 메서드 참조로 간소화하여 표현가능하다 (전달 인자를 생략하여 코드 간결해짐)- 구분자로 :: 사용- 아래의 4가지 유형 있음 아래 코드는 정렬할 때 [클래스 구현 -> 람다 -> 람다 간소화 -> 정적 메서드 참조]에 대한 비교 예시이다// 배열 선언Person[] perons = ...// (1) Comparator 구현 방식 (구 시대적)class PersonAgeComparator implements Comparator { public int compare(Person a, Person b) { return a.age().compareTo(b.age()); }}Arrays.sort(persons,..
NullPointerException(NPE)- Null 상태인 오브젝트를 레퍼런스할 때 발생 - Runtime error 이기 때문에 실행 전까지 발생 여부를 알기 쉽지 않음 Runtime 환경에서 에러가 발생할 경우, 심할 경우 서버 다운까지 가능하므로 발생시 리소스 비용이 만만치 않음 "Null pointer를 발명한 것은 나의 10억불짜리 실수였다" - Tony Hoare (출처 wikipedia)I call it my billion-dollar mistake. It was the invention of the null reference in 1965. At that time, I was designing the first comprehensive type system for references ..
목차 Interface Iterators 컬렉션에 저장된 요소들을 읽어오는 방법을 표준화 - Java 1.2 버전부터 지원 - 기본적으로 Iterators 변환의 경우 1회용이므로 순차조회 완료 시 재생성 해야함 - ListIterator의 경우 양방향으로 요소 접근이 가능하다 ( Enumeration과 Iterator는 단방향 ) 보통 요소가 있는지 확인(hasNext)하고, 요소를 읽는 것이 안전(next)하다 사용 방법 Collection 인터페이스의 iterator() 호출해서 Iterator 구현 객체를 얻어 사용 (1) List @DisplayName("Collection interface 구현체는 iterator 객체를 얻어서 요소 조회가 가능하다") @Test void listIterato..
목차 개인적으로 코딩 테스트, 알고리즘 문제 풀이시 아래의 static method 필수로 알고 있는 것이 좋다고 생각한다 - Arrays.sort() - Arrays.fill() - Arrays.asList() - Arrays.stream() - Arrays.toString() - Arrays.copyOf() - Arrays.copyOfRange() 배열의 동일성 확인 (1) Arrays.equals(A, B) - 두 배열의 equlity(동일성) 확인 - primitive type의 경우 값이 동일, reference type의 경우 참조 주소값이 동일한지 확인 @DisplayName("") @Test void equalsTest() { // given int[] arr1 = {1, 2, 3}; in..
String 클래스 특징 1) char[]와 메서드(기능)을 결합한 것이다 String 클래스 = char[] + 메서드(기능) - char[] : 문자열 배열 - String 클래스 생성시 heap에 실제 값(문자열)이 저장되고 stack 변수에는 참조 주소값을 가짐 2) 내용을 변경할 수 없다 (read only*) 문자의 결합을 하면 새로운 문자로 바뀌고 새로운 참조 주소를 가짐 String 클래스의 주요 메서드 참고. substring(int from, int to) "hamburger".substring(4, 8) returns "urge" "smiles".substring(1, 5) returns "mile" - 문자열 인덱스는 0번 부터 시작 - from : inclusive (포함) - t..
@FunctionalInterface - 단 하나의 추상 메서드(Single Abstract Method) 만을 가지는 인터페이스 - static / default method 선언 가능 (Java 8 부터) - java.lang.Runnable, java.util.Comparator 등 Function R apply(T t); BiFunction R apply(T t, U u); Supplier T get(); Consumer void accept(T t); T타입의 인자를 받아 로직 수행 (리턴 x) BiConsumer void accept(T t, U t); T, U 타입 인자를 받아 로직 수행 (리턴x) Predicate boolean test(T t); Comparator int compare(..
참고. Enum Method ordinal() 은 열거형 상수의 순서에 따라 변경되므로, 열거형 인스턴스의 상수 필드를 사용하는 것을 권장 (아이템 35) 아이템34. 상수 대신 열거 타입을 사용하라 정수 열거 패턴 (안티 패턴)public static final int APPLE_FUJI = 0;public static final int APPLE_PIPPIN = 1;public static final int APPLE_GRANNY_SMITH = 2;public static final int ORANGE_NAVEL = 0;public static final int ORANGE_TEMPLE = 1;public static final int ORANGE_BLOOD = 2;- 타입 안전을 보장할 방법이 없..
1. Enum Month 클래스 생성 - 각 Month 인스턴스는 code와 number 값을 가짐 - Enum Constructor(생성자)는 기본적으로 private 로 생략가능하다. public enum Month { JANUARY("Jan", 1), FEBRUARY("Feb", 2), MARCH("Mar", 3), APRIL("Apr", 4), MAY("May", 5), JUNE("Jun", 6), JULY("Jul", 7), AUGUST("Aug", 7), SEPTEMBER("Sept", 7), OCTOBER("Oct", 10), NOVEMBER("Nov", 11), DECEMBER("Dec", 12); private final String code; private final int number..
Enum values to List 기본적으로 제공하는 values() method를 사용하게 되면 아래와 같이 배열[] 형태로 값이 반환된다. PizzaStatus[] values = PizzaStatus.values(); // [ORDERED, READY, DELIVERED] 개인적으로 values()와 forEach 구문을 활용하여 많이 사용했는데, Array -> List 로 변경하는 방식에 대해 Baeldung 포스팅이 있어서 내용을 정리해본다. 1. 클래스 타입 토큰을 인자로 전달받아 사용하는 static method 경우 static List enumValuesInList(Class enumClass) { T[] arr = enumClass.getEnumConstants(); // Enum ..
요약. 제네릭의 무공변/공변/반공변- 제네릭은 기본적으로 무공변/불공변성을 가진다- 상한 경계(extends) 타입 변수 지정하여 제네릭은 공변성을 가질 수 있다- 하한 경계(super) 타입 변수 지정하여 제네릭은 반공변성을 가질 수 있다 공변은 인터페이스 구현이나 상속(부모-자식 관계)을 생각하고,반공변은 부모-자식관계가 반대로 된 것으로 생각하기 Generics 란?- 클래스 내부에서 사용할 데이터 타입을 외부에서 지정하는 기법- 타입을 클래스 정의하는 시점이 아닌, 실제 사용하는 생성 시점에 결정- Complie(컴파일) 단계에서 타입을 체크함으로써 코드의 안정성을 높임- 코드 중복 줄이고 재활용성 높임- JDK 1.5 부터 도입 Generics을 사용하는 이유Generics 타입 지정함..
자주 사용하는 표준 어노테이션 @Override - 오버라이딩을 올바르게 했는지 컴파일러가 체크 @Deprecated- 앞으로 사용하지 않을 것을 권장하는 필드나 메서드에 붙임 @FunctionalInterface- 함수형 인터페이스는 하나의 추상메서드만 가져야 한다는 제약이 있음- 함수형 인터페이스에 붙이면, 컴파일러가 제대로 작성했는지 체크- 함수형 인터페이스라고 명시적으로 알려줌 @SuppressWarnings- 컴파일러가 경고 메시지가 나타나지 않게 한다. - 명시적으로 경고를 확인하고 억제하기 위해 붙였다는 의미를 나타내기도 함# 한 가지@SuppressWarnings("unchecked")List list = new ArraysList(); // 제네릭 타입 지정하지 않아 발생하는 오류 표시..
문제 링크 https://www.acmicpc.net/problem/10942 10942번: 팰린드롬? 총 M개의 줄에 걸쳐 홍준이의 질문에 대한 명우의 답을 입력으로 주어진 순서에 따라서 출력한다. 팰린드롬인 경우에는 1, 아닌 경우에는 0을 출력한다. www.acmicpc.net 문제 풀이 시간복잡도 - 상향식(Bottom-Up) 풀이시 O(N^2) = O(2000^2) - 하향식(Top-Down) 풀이시 O(N!) = O(2000!) 시간 초과 발생 가능 -> memorization 기법으로 시간내 풀이 가능 *팰린드롬 (PALINDROME) ? - 길이가 1일 때 자기 자신도 팰린드롬이다. (1, 2, 3, ...) - 길이가 2인 경우 두 숫자가 동일할때 팰린드롬이다. (11, 22) - 길이가..
문제 링크 https://www.acmicpc.net/problem/11049 11049번: 행렬 곱셈 순서 첫째 줄에 입력으로 주어진 행렬을 곱하는데 필요한 곱셈 연산의 최솟값을 출력한다. 정답은 231-1 보다 작거나 같은 자연수이다. 또한, 최악의 순서로 연산해도 연산 횟수가 231-1보다 작거나 같 www.acmicpc.net 문제 풀이 백준 11066 파일 합치기와 비슷한 문제였으나 행렬 곱셉을 어떻게 DP 배열로 처리할 지에 대해 파악하기 힘든 문제였다. - 상향식(Bottom-Up)으로 풀 경우 시간 복잡도 O(N^2) - 하향식(Top-Down)으로 풀경우 O(N!) , memorization 기법 활용하여 시간 내에 풀이 가능 - 최대치는 Integer 범위 - 행렬 A (m x k) ,..
