Java 14

Stream - 최종연산

최종 연산은 스트림의 요소를 소모해서 결과를 만들어낸다. 그래서 최종 연산후에는 스트림이 닫히게 되고 더 이상 사용할 수 없다. 최종 연산의 결과는 스트림 요소의 합과 같은 단일 값이거나, 스트림의 요소가 담긴 배열 또는 컬렉션일 수 있다. forEach() forEach()는 peek()과 달리 스트림의 요소를 소모하는 최종연산이다. 반환 타입이 voi이므로 스트림의 요소를 출력하는 용도로 많이 사용된다. 조건검사 - allMatch(), anyMatch(), noneMatch() 스트림의 요소에 대해 지정된 조건에 모든 요소가 일치하는 지, 일부가 일치하는지 아니면 어떤 요소도 일치하지 않는지 확인하는데 사용할 수 있는 메서드 들이다. 이 메서드들은 모두 매개변수로 Predicate를 요구하며, 연산..

Java 2023.09.22

Stream - 중간연산

스트림 자르기 - skip(), limit() skip()과 limit()은 스트림의 일부를 잘라낼 때 사용한다. skip(3)은 처음 3개의 요소를 건너뛰고, limit(5)는 스트림의 요소를 5개로 제한한다. List list = List.of(1, 2, 3, 4, 5, 6, 7, 8, 9, 10); System.out.print("skip: "); list.stream().skip(3).forEach(x -> System.out.print(x + " ")); System.out.println(); System.out.print("limit : "); list.stream().limit(5).forEach(x -> System.out.print(x + " ")); --- 결과 --- skip: 4 5..

Java 2023.09.20

Stream

Stream이란 컬섹션에 저장되어있는 엘리먼트들을 하나씩 순회하면서 데이터를 처리할 수 있는 코드패턴이다. 람다식과 함께 사용되어 컬렉션에 들어있는 데이터에 대한 처리를 매우 간결한 표현으로 작성할 수 있다. 또 한, 내부 반복자를 사용하기 때문에 병렬처리가 쉽다. Stream을 사용하기 전과 후의 코드를 확인 해보자 List list = List.of(1, 2, 3, 4, 5, 6); // 스트림 사용 이전 for (int i : list) { System.out.println("i = " + i); } for (int i : list) { if( i % 2 ==0 ){ System.out.println("even = " + i); } } System.out.println(); // 스트림 사용 이후 ..

Java 2023.09.20

함수형 인터페이스

함수형 인터페이스란? 람다식을 다루기 위한 인터페이스를 '함수형 인터페이스'라고 한다. interface MyFunction { int sum(int a, int b); } 위와 같은 인터페이스가 정의되어있다고 하자. 그러면 이 인터페이스를 구현한 익명 클래스의 객체는 다음과 같이 생성할 수 있다. MyFunction f = new MyFunction() { public int sum(int a, inb b) { return a+b; } }; f.sum(1,2); 위와같이 사용 할수 있으며 MyFunction인터페이스에 정의된 메서드 sum()은 람다식 '(a,b) -> a+b' 과 일치 하므로 아래와 같이 수정할 수 있다. MyFunction f = (a, b) -> a + b; f.sum(1,2); ..

Java 2023.09.13

람다식

람다식이란? 람다식은 간단히 말해서 메서드를 하나의 식으로 표현한 것이다. 람다식은 함수를 간략하면서도 명확한 식으로 표현할 수 있게 해준다. 메서드를 람다식으로 표현하면 메서드의 이름을 반환값이 없어지므로, 람다식을 '익명함수' 이라고도 한다. int arr[] = new int[5]; Arrays.setAll(arr, (i) -> (int)(Math.random() * 5 ) + 1 ); 위 코드에서 '(i) -> (int)(Math.random() * 5 ) + 1)' 이 람다식이다. 위의 람다식을 메서드로 표현하면 다음과 같다. int method() { return (int) (Math.random() * 5) + 1; } 위의 메서드보다 람다식이 간결하면서도 이해하기 쉽다. 람다식은 메서드의 ..

Java 2023.09.12

날짜와 시간 - parse

문자열을 날짜와 시간으로 파싱하기 문자열을 날짜 또는 시간으로 변환하려면 static메서드 parse()를 사용하면 된다. 날짜와 시간을 표현하는데 사용되는 클래스에는 이 메서드가 거의 다 포함되어 있다. parse()는 오버로딩된 메서드가 여러 개 있는데, 그중에서 다음의 2개가 자주 쓰인다. static LocalDateTime parse(CharSequence text); static LocalDateTime parse(CharSequence text, DateTimeFormatter formatter); LocalDateTime parse = LocalDateTime.parse("2023-09-07 23:12:04", DateTimeFormatter.ofPattern("yyyy-MM-dd HH:m..

Java 2023.09.11

날짜와 시간 - DateTimeFormatter

날짜와 시간을 원하는 형식으로 출력하는 방법에 대해서 확인해보자. 형식화 관련된 클래스들은 java.time.format패키지에 들어있는데, 이중에서 DateTimeFormatter가 핵심이다. 이 클래스에는 자주 쓰이는 다양한 형식들을 기본적으로 정의하고 있으며, 그 외의 형식이 필요하다면 직접 정의해서 사용할 수도 있다. LocalDate localDate = LocalDate.now(); String formatLocalDate = localDate.format(DateTimeFormatter.ISO_LOCAL_DATE); String formatLocalDate2 = DateTimeFormatter.ISO_LOCAL_DATE.format(localDate); System.out.println("f..

Java 2023.09.11

날짜 계산 - TemporalAdjusters

TemporalAdjusters클래스는 자주 쓰일만한 날짜 계산들을 대신 해주는 머서드를 정의해놓은 클래스 이다. 예를 들어 이번 달의 3번째 금요일은 며칠일까? 다음주 월요일은 며칠일까? 유용한 메서드 메서드 인자 설명 firstDayOfNextYear() void 다음 해의 첫 날 firstDayOfNextMonth() void 다음 달의 첫 날 firstDayOfYear() void 올 해의 첫 날 firstDayOfMonth() void 이번 달의 첫 날 lastDayOfYear() void 올 해의 마지막 날 lastDayOfMonth() void 이번 달의 마지막 날 FirstInMonth(DayOfWeek dayOfWeek) DayOfWeek 이번 달의 첫 번째 (?)요일 LastInMont..

Java 2023.09.11

날짜와 시간 - LocalDateTime, ZonedDateTIme

날짜와 시간 비교 - LocalDateTime isAfter() 주어진 날짜를 기준으로 인자로 들어온 파라미터 값을 비교하여, 주어진 날짜가 파라미터보다 앞서있다면 true를 반환한다. LocalDateTime plusDays = LocalDateTime.now().plusDays(1); // 2023-09-12 LocalDateTime now = LocalDateTime.now(); // 2023-09-11 LocalDateTime now2 = LocalDateTime.now(); // 2023-09-11 System.out.println(now.isAfter(plusDays)); // false -> now(2023-09-11) > plusDays(2023-09-12) 와 같음 System.out.p..

Java 2023.09.11

제네릭스

제네릭스란? 제네릭스는 다양한 타입의 객체들을 다루는 메서드나 컬렉션 클래스에 컴파일시 타입 체크를 해주는 기능이다. 객체의 타입을 컴파일 시에 체크하기 때문에 객체의 타입 안정성을 높이고 형변환의 번거로움이 줄어든다. 타입 안정성 의도하지 않은 타입의 객체가 저장되는 것을 막고, 저장된 객체를 꺼내올 때 원래의 타입과 다른 타입으로 잘못 형변환되어 발생할 수 있는 오류를 줄여준다. ArrayList integers = new ArrayList(); integers.add(1); integers.add("1"); // Error : Integer 타입만 Add 할수 있음 integers.add(2); integers.add(3); Integer integer = integers.get(0); Intege..

Java 2023.09.06