1. Stream이란? JAVA 8에서 함수형 인터페이스, 람다를 활용할 수 있는 기술 중 하나다. 배열과 컬렉션의 변환, 필터링, 정렬 등을 간소화된 코드로 작성할 수 있게 해준다. 일련의 과정을 하나의 스트림 파이프라인으로 구현해, 코드의 가독성 또한 높일 수 있다는 장점이 있다. 다만, 자바 인 액션의 말을 빌리면 stream의 비용은 비싸다고 한다. 또한 parallelStream으로 쓰레드를 이용한 병렬처리도 제공한다. 2. Stream 생성 stream 자체 객체도 있지만, 일반적으로는 List, Set과 같은 Collection에서 주로 사용하고 Array를 대상으로 생성할 수 있다. 객체명.sream() 으로 생성 가능하다. 2-1 List(Collection) ArrayList list ..
1. 함수형 인터페이스란? 스트림을 쓰다보면 매개변수로 아래와 같이 Predicate, Collector, Supplier 등을 파라미터로 받는 것들을 확인할 수 있다. 이 스트림에서 사용되는 파라미터들은 일반적인 프리미티브 타입이나 객체가 아닌 Java 8에서 처음 등장한 함수형 인터페이스이다. 대표적으로 위와와 같은 것들이 있고, 추가적으로는 더 많은 함수형 인터페이스들을 제공한다. java.util.function 클래스에서 확인할 수 있다. 함수형 인터페이스는 @FunctionalInterface 어노테이션을 통해 구현할 수 있으나 자바에서 제공하는 것만 사용해도 충분하다. 2. 자바에서 제공하는 함수형 인터페이스 자바에서는 다양한 함수형 인터페이스를 제공하지만, 내가 자주 사용하고 있는 것들만 ..
JAVA8 이후에 시간을 조정하는데 쓰이는 클래스다. 사용법도 편하고 직관적이며, 제공하는 API도 많으니 JAVA8 이후엔 TemporalAdjusters를 사용하는게 권장된다. LocalDate, LocalDateTime 등 시간관리 클래스로 날짜를 지정하고 지정된 날짜를 조정하는데 쓰인다. with와 함께 쓰인다. 아래는 현재일 기준 직전 월요일을 찾는다. LocalDateTime currentDateTime = LocalDateTime.now(); LocalDateTime targetDateTime = currentDateTime .with(TemporalAdjusters.firstDayOfYear()) // 이번 년도의 첫 번째 일(1월 1일) .with(TemporalAdjusters.last..
자바에서 데이터를 핸들링하기 위해서는 객체화를 해주는게 편하다. 하지만 네이티브나 프론트엔드에서 원하는대로 데이터가 넘어오는 경우는 드물다. 물론 연동규격서가 서로 오고가는 정규 개발에서는 요청하는대로 보내주기는 하지만, 모든 상황이 그렇지 못하다보니 객체화를 편하게 하기 위한 방법이 필요하다. 다행히 자바에서는 ObjectMapper라는 클래스가 있다. JSON 처리를 위한 라이브러리인 Jackson의 일부이지만, 정말 널리 사용되고 있다. 이 ObjectMapper의 사용법 일부를 소개해 보고자 한다. 1. 설치 Jacskon 라이브러리의 일부이므로 Jackson을 설치한다. pom.xml과 gradle 설치 방법 com.fasterxml.jackson.core jackson-databind 2.11..
서버사이드에서 개발하다보면, 객체 컨벤션이 중요하다고 느끼는 시점이 온다.(내가 그 시점인 것 같다..) 가장 먼저 눈에 띄는건 DAO, DTO, VO인데, 세 가지의 객체의 분류가 꽤나 애매하다. 따로 표준화 되어 있지도 않고 POJO라고 불리는 일반적인 자바 객체로 만들어지기 때문이다. 간단하게 내용을 한번 정리하고 가보려 한다. 1. DAO(Data Access Object) 사실 DAO의 역할은 명확하다. 이름부터가 Data Access Object인 것을 보면 알 수 있듯이, 실제로 DB에 접근하는 역할을 하는 객체 생성 디자인 패턴이다. 데이터베이스에 추출 및 저장하는 방법에 대한 세부 정보를 객체로 추상화하는데 사용되며 JDBC를 통해 구현할 경우 CRUD를 처리하는 매서드를 가지고 있는 경..
1. 문제 https://school.programmers.co.kr/learn/courses/30/lessons/120922 2. 풀이 수학문제를 조금 풀어본 적이 있다면, 보자마자 점화식 관련 문제인지 파악할 수 있었을 것이다. 2 x 2 = 3 2 x 3 = 5 3 x 2 = 5 3 x 3 = 8 4 x 2 = 7 4 x 3 = 11 5 x 2 = 9 5 x 3 = 14 조건에서 M >=N 일 때, N x (M -1) + (N -1) 이라는 결과를 도출해 낼 수 있어야한다. 3. 코드 class Solution { public int solution(int M, int N) { int answer = 0; int up = M; int down = N; if( M
1. 문제 https://school.programmers.co.kr/learn/courses/30/lessons/120956 2. 풀이 문자열을 어떻게 다루면 좋을까를 묻는 문제. 처음봤을 때는 옹알이가 나오는 모든 경우의 수를 생각하는 거였는데, 구현방식이 잘 떠오르지도 않았다. 다행히 옹알이 문자가 포함관계에 있는게 없어서 치환으로 풀었다. 나는 1로 치환했는데, 다른거로 치환해도 된다. 처음엔 ""으로 치환했었는데, 다행히 반례가 문제 중에 있어서 쉽게 해결했다. 없었으면 찾는데 좀 걸렸을 듯 3. 코드 import java.util.*; import java.util.stream.Collectors; class Solution { public int solution(String[] babblin..
1. 문제 https://school.programmers.co.kr/learn/courses/30/lessons/131705 2. 풀이 이 문제를 보자마자 떠올려야할 게 있다. 조합(Combination) 문제라는 것. 때문에 대략적인 시행 횟수를 예측할 수 있다. 주어진 조건을 보면 3 ≤number의 길이 ≤ 13 을 보면 최대 시행 횟수는 13C3 = 286인 걸 알 수 있다. 조건만 맞추면 다중 for문을 마음껏 써도된다는 뜻이다. 모든 조건을 탐색하기 때문에 Brute Force 문제라고도 할 수 있겠다. 3. 코드 class Solution { public int solution(int[] number) { int answer = 0; for(int i =0; i
- Total
- Today
- Yesterday
- 후쿠오카
- JWT
- 람다
- AOP
- Kotlin
- Log
- springboot
- CloudFront
- openAI API
- cache
- 스프링부트
- Spring
- serverless
- OpenFeign
- 오블완
- OpenAI
- AWS EC2
- S3
- docker
- elasticsearch
- 티스토리챌린지
- java
- EKS
- MySQL
- Elastic cloud
- ChatGPT
- terraform
- lambda
- AWS
- GIT
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |