Java

· Java
함수형 프로그래밍이란?함수형 프로그래밍(Function Programming, FP)은 상태 변경과 부수 효과(side-effect)를 최소화하는 방식의 프로그래밍 패러다임입니다.이 방식은 순수 함수를 중심으로, 데이터를 불변으로 다루며, 함수를 1급 객체로 취급합니다.Java 8부터 함수형 프로그래밍을 지원하는 람다 표현식, 스트림 API 등이 도입되면서, 코드가 더욱 간결하고 직관적으로 변했습니다.1. 람다 함수(Lambda Function)람다 함수는 익명 함수(anonymous function)로, 함수형 프로그래밍의 핵심 개념 중 하나입니다.간결한 함수 표현을 가능하게 해주며, 매개변수와 반환값을 명시적으로 정의할 수 있습니다.// 람다 함수 예시Runnable runnable = () -> S..
· Java
CompletableFuture는비동기 작업을 만들고(Async), 작업이 끝났을 때 할 일을 등록하고(Callback),여러 비동기 작업을 연결/합치기 위한(Compose/Combine) 도구입니다.기존 Future의 '직접 기다리기(get)만 된다' 한계를 콜백 체이닝 + 예외/타임아웃 처리로 해결합니다.1. 왜 필요한가? (Future의 한계)Future#get()은 블로킹이라 결과가 올 때까지 스레드를 점유합니다. 미래의 결과를 다른 비동기 결과와 조합하거나, 성공/실패에 따라 다른 흐름을 만들기 어렵습니다.타임아웃, 폴백(fallback), 체이닝 같은 고급 패턴을 직접 구현해야 합니다.👉 CompletableFuture는 콜백 기반으로 이 문제를 해결합니다.2. 핵심 용어비동기(Async)..
· Java
자바의 컴파일 과정 1. 소스코드 작성개발자는 Java언어로 작성된 소스파일(.java)을 생성합니다. 이 파일은 사람이 읽을 수 있는 형태의 고급 언어로 작성된 코드입니다.  2. 컴파일 단계 javac 명령어(Java Compiler)를 사용하여 소스 파일(.java)을 컴파일하면, JVM(Java Virtual Machine)이 이해할 수 있는 바이트코드 형태의 파일(.class)이 생성됩니다.  * 이 바이트코드는 플랫폼에 독립적이며, JVM에서 실행될 준비가 된 중간 형태의 코드입니다.  3. 클래스 로딩(Class Loading)JVM의 Class Loader가 생성된 .class 파일을 JVM 메모리로 로드합니다.  * 로드된 클래스는 실행에 필요한 메서드와 변수 등의 메타데이터를 포함하고 ..
· Java
문제 상황Spring과 MyBatis를 사용해 애플리케이션 개발 중,Java의 Map 객체를 PostgreSQL 데이터베이스에 저장하려고 하면 다음과 같은 에러를 만날 수 있습니다:org.postgresql.util.PSQLException: No hstore extension installed. 이 에러는 PostgreSQL에서 hstore 확장이 설치되지 않았거나,Map 객체를 저장할 적절한 방식으로 변환하지 않았기 때문에 발생합니다. responseBody = Map.of( "status", "error", "error_code", e instanceof HttpClientErrorException ? ((HttpClientErrorException) e).getStatusCode().v..
· Java
1000만 건의 데이터 크롤링을 할 때, 사용한 자바의 멀티스레드 방식입니다:) 처음에 사이트도 느리고, 데이터의 총량도 가늠할 수 없었던 작업이었는데, 크롤링하다 보니, 사이트에 자꾸 요청을 보내서 서버 다운되기도 했고,그래서 사이트 운영자가 서버 업그레이드도 해주고.. 생각해보니, 정말 재밌던 작업이었어요 :)  이번 글은 이 작업에서 사용한 Java의 멀티스레드 방식을 정리해보려 합니다.  ExecutorService와 Future는 Java에서 병렬 작업을 효율적으로 관리하기 위한 도구입니다. 이 글에서는 Future.get()을 활용하여 작업의 결과를 처리하고 동기화하는 방법을 예제와 함께 설명하겠습니다. ExecutorService스레드 풀을 생성하고 관리하는 Java의 인터페이스입니다.비동기..
· Java
JIT 컴파일러란?JIT(Just-In-Time) 컴파일러는 Java Virtual Machine(JVM)의 실행 엔진의 한 부분으로,바이트코드를 프로그램 실행 중에 기계어(Machine Code)로 변환하여 실행 속도를 높이는 역할을 합니다.JIT 컴파일러의 동작 과정바이트코드 해석 시작: JVM은 프로그램을 실행할 때, 바이트코드를 인터프리터를 통해 한 줄씩 해석합니다.프로파일링(Profile): JVM은 실행 중 자주 호출되거나 반복적으로 실행되는 핫스팟(Hotspot) 코드를 식별합니다.예: 반복문, 자주 호출되는 메서드 등.JIT 컴파일 시작: 핫스팟으로 식별된 코드는 JIT 컴파일러가 기계어로 컴파일하여 변환합니다.변환된 기계어는 캐싱되어 이후에는 인터프리터 없이 바로 실행됩니다.최적화: JI..
· Java
HashSet은 중복을 허용하지 않는 데이터 저장과 빠른 검색이 필요한 경우에 유용합니다.HashSet은 내부적으로 해싱(Hashing)을 사용하여 데이터를 관리하므로, 다음과 같은 특징과 장점을 가지고 있습니다.HashSet의 주요 특징중복된 값 저장 불가:동일한 값이 추가될 경우 무시됩니다.중복을 자동으로 제거해야 하는 경우 적합합니다.빠른 데이터 조회:내부적으로 해싱(Hashing)을 사용하여 데이터를 저장하고 검색하기 때문에, 평균적으로 O(1)의 시간 복잡도로 데이터를 검색할 수 있습니다.배열이나 리스트에서 탐색이 O(n)인데 비해 훨씬 효율적입니다.순서가 없음:HashSet은 순서를 유지하지 않으므로, 저장된 데이터의 순서는 보장되지 않습니다.데이터의 순서가 중요하지 않은 경우 적합합니다.Ha..
· Java
Java에서는 숫자의 진법 변환을 매우 간단하게 처리할 수 있는 내장 메서드를 제공합니다.특히, 8진수, 10진수, 16진수와 같은 다양한 진법을 다룰 때 효율적입니다.이번 글에서는 Integer 클래스의 주요 메서드들을 활용해 진법 변환을 정리하겠습니다.1. Integer.parseInt(String s, int radix)parseInt 메서드는 문자열로 주어진 숫자를 지정된 진법(기수)으로 해석하여 10진수 정수로 변환합니다.사용법int decimal = Integer.parseInt("17", 8); // 8진수 '17'을 10진수로 변환System.out.println(decimal); // 출력: 15매개변수s: 변환하려는 숫자를 나타내는 문자열.radix: 숫자가 표현된 진법 (2, 8, 1..
이진유진
'Java' 카테고리의 글 목록