Java 클래스 초기화 순서: 정적 블록, 인스턴스 초기화 블록, 생성자의 실행 메커니즘

생성자 (Constructor) 생성자는 객체가 메모리에 생성될 때 자동으로 호출되는 특수한 메서드입니다. 주요 목적은 객체의 초기 상태를 설정하는 것이며, 객체 하나당 정확히 한 번만 실행됩니다. 반면 일반적인 메서드는 객체가 존재하는 동안 여러 번 호출될 수 있습니다. public class UserAccount { // 생성자 public UserAccount() { System.out.print ...

8월 3일 15:32에 게시됨

Java 원격 Access 데이터베이스 연결 방법 두 가지

1. RmiJDBC를 활용한 Access 데이터베이스 원격 접속 일반적으로 SQL Server, Oracle, MySQL 같은 DBMS는 서버에서 서비스로 실행되며, Java는 JDBC를 통해 원격 연결이 쉽습니다. 하지만 소규모 프로젝트나 특수 상황에서는 이러한 무거운 DBMS 대신 Access가 더 적합할 수 있습니다. 원격에서 Java로 Access 데이터베이스에 접근해야 할 때 RmiJDBC 라이브러리를 사용할 ...

8월 3일 13:49에 게시됨

Java 객체 동등성 비교 및 해시 코드 활용

자바에서 객체의 동등성을 비교하고 컬렉션에서 효율적으로 객체를 관리하기 위해 equals()와 hashCode() 메서드를 올바르게 이해하고 구현하는 것은 매우 중요합니다. 특히 Collection 프레임워크의 remove(), contains()와 같은 메서드들은 객체의 동등성 판단에 이 두 메서드를 활용합니다. ArrayList에서의 equals() 활용 ArrayList와 같은 순차적인 컬렉션은 객체를 ...

8월 3일 08:28에 게시됨

Java 클래스 설계: 메서드 시그니처, 생성자 및 배열 활용

메서드 정의와 시그니처의 이해 자바에서 메서드의 고유성을 결정하는 요소는 메서드 이름과 매개변수 리스트를 합친 '시그니처(Signature)'입니다. 반환값은 시그니처에 포함되지 않으므로, 메서드를 구분할 때 반환 타입만으로는 부족합니다. 오버로딩 (Overloading): 하나의 클래스 내에서 동일한 이름을 가지되, 매개변수의 개수나 타입이 서로 다른 메서드를 선언할 ...

8월 1일 09:59에 게시됨

Neo4j 그래프 데이터베이스 및 Cypher 쿼리 언어 학습 및 활용

Neo4j는 Java 기반의 그래프 데이터베이스이며, 실행을 위해서는 JVM 프로세스를 시작해야 하므로 Java SE JDK가 설치되어 있어야 합니다. Linux 환경 Neo4j 다운로드: https://neo4j.com/download/other-releases/#releases (커뮤니티 에디션은 무료) 압축 해제 후 Neo4j 설정 파일(neo4j.conf)을 수정합니다. dbms.directories.import: load csv 시 파일 경로를 임의의 ...

8월 1일 06:07에 게시됨

Redisson 분산 락을 이용한 SMS 중복 발송 제한 구현

개요 사용자가 인증 번호 요청 버튼을 여러 번 클릭하거나 악의적인 요청을 보낼 때, 동일한 번호로 짧은 시간 내에 여러 건의 SMS가 발송되는 것을 방지해야 합니다. 이를 위해 Redis 기반의 Redisson 분산 락을 활용하여 1분간 발송을 제한하는 로직을 구성합니다. 의존성 설정 프로젝트의 pom.xml에 분산 락을 위한 Redisson과 알리운(Aliyun) SMS API 라이브러리를 추 ...

7월 31일 18:59에 게시됨

Java 애플리케이션 진단을 위한 강력한 JVM 분석 도구, Arthas

Arthas는 알리바바(Alibaba)에서 오픈소스로 공개한 Java 진단 도구로, 운영 중인 서비스의 가동을 중단하지 않고도 실시간으로 JVM의 상태를 확인하거나 코드를 분석할 수 있는 기능을 제공합니다. 복잡한 마이크로서비스 환경이나 직접적인 디버깅이 어려운 운영 환경에서 발생하는 다양한 기술적 난제를 해결하는 데 최적화되어 있습니다. Arthas가 해결하는 주요 시나 ...

7월 31일 17:53에 게시됨

Java String 클래스 소스 코드 분석

Java String 클래스 소스 코드 분석 package java.lang; 코드 블록 1 public final class String implements Comparable<String>, CharSequence { // 1. 핵심 기본 배열: 문자열 각 문자 저장 private final char[] value; // 2. 해시값 캐시, 기본값 0 private int hash; // 기본 생성자: 빈 문자열 생성 public String() { ...

7월 31일 11:04에 게시됨

스레드 풀(Thread Pool) 거부 정책 선정 가이드: 작업 유실 없는 고가용성 시스템 설계

스레드 풀 거부 정책이 실행되는 메커니즘 Java의 ThreadPoolExecutor에서 거부 정책(RejectedExecutionHandler)이 활성화되는 시점은 단순히 '바쁠 때'가 아닙니다. 정확히는 시스템의 처리 용량이 한계에 도달했을 때이며, 다음 세 가지 조건이 모두 충족될 때 발생합니다. 코어 스레드 풀 포화: 설정된 corePoolSize 만큼의 스레드가 모두 실행 중일 때. 대기 ...

7월 31일 10:38에 게시됨

BigDecimal divide 메서드의 예외 발생 원인 분석

BigDecimal를 사용할 때 두 숫자의 나눗셈 연산에서 예외가 발생하는 경우가 있다. 일반적으로 정수나 실수 타입에서는 문제가 없지만, BigDecimal는 특수한 내부 구조로 인해 예상치 못한 ArithmeticException가 발생할 수 있다. 예제 코드를 살펴보면: BigDecimal orderAmount = new BigDecimal(2312.23); BigDecimal customerCount = new BigDecimal(35); BigDecimal pr ...

7월 31일 07:42에 게시됨