IT/JAVA 28

동기화 vs 원자적 연산

멀티스레드 환경에서 데이터 일관성과 충돌 방지는 반드시 고려해야 할 중요한 주제이다.동기화(synchronization)와 원자적 연산(atomic operation)은 모두 이를 다루는 방법이지만, 그 목적과 동작 방식이 다르다. 동기화 (Synchronization)공유 자원(변수, 객체, 컬렉션 등)에 여러 스레드가 동시 접근할 때 충돌을 막기 위한 보장 수단Java에서는 synchronized 키워드 또는 Lock 인터페이스를 통해 구현✅ 예시class Counter { private int count = 0; public synchronized void increment() { count++; }}이 코드에서는 increment() 메서드 전체가 임계 구역(critical sectio..

IT/JAVA 2025.07.24

ConcurrentHashMap – 멀티스레드 환경에서 안전하게 Map 사용하기

Java에서 HashMap은 단일 스레드에서는 빠르게 작동하지만, 멀티스레드 환경에서는 안전하지 않다.여러 스레드가 동시에 put()이나 get()을 호출하면 데이터 손상, ConcurrentModificationException, 무한 루프 같은 심각한 문제가 발생할 수 있다. HashMap의 멀티스레드 한계Map map = new HashMap();스레드 간 동기화가 없기 때문에 동시 접근 시 데이터 충돌 가능성이 있다최악의 경우 Iterator 사용 중 ConcurrentModificationException이나 무한 루프도 일어난다. ConcurrentHashMap – 안전하고 빠른 멀티스레드 Map스레드 안전(Thread-safe): 여러 스레드가 동시에 접근해도 안전높은 병렬성: 내부적으로 버..

IT/JAVA 2025.07.24

Java String 클래스

String 클래스의 메서드들을 계속 잊어버려 복습겸 다시 정리해보았다. 🔖String 클래스- Java에서 문자열을 다룰 때 가장 기본이 되는 클래스- String 클래스는 문자열 데이터를 다루기 위한 불변(Immutable) 객체이다 - 한 번 생성된 문자열은 변경할 수 없으며, 문자열을 수정하는 것처럼 보이는 작업은 모두 새로운 문자열 객체를 생성하는 방식으로 처리된다 👉🏼 실제로는 새로운 문자열 객체가 생성된다 String str = "hello";str = str + " world"; 불변성 (Immutable)문자열을 수정할 수 없으며, 수정 시 새로운 객체가 생성된다객체 생성 방식문자열 리터럴로 생성하거나, new String()으로 생성할 수 있다 문자열 상수 풀 (String Po..

IT/JAVA 2025.04.15

JMH (JMH 라이브러리를 활용한 Java 코드 성능테스트)

JMH 란?- Java Microbenchmark Harness- Java 공식 성능 측정 도구- OpenJDK 팀에서 만든 라이브러리로, 마이크로 벤치마크를 정밀하게 측정할 수 있게 도와준다.특징- JIT(Just-In-Time) 최적화 고려- 워밍업 시간, 반복 횟수 조정 가능- 평균/최댓값/표준편차 등 정밀 통계 제공- GC와 캐시 등 JVM 영향 최소화 ( 실행 환경 )Gradle 8.10.2Java 17VS CodeWindows 11 ✅ Gradle 프로젝트 생성 더보기VS Code 에서  단축키  Ctrl+Shift+PCreate Java Project 선택 Gradle 선택 Groovy 선택프로젝트명 입력   ✅ build.gradle 설정/* * This file was generated ..

IT/JAVA 2025.04.11

ArrayList vs LinkedList

|  컬렉션 프레임워크- 자바에서 데이터를 구조적으로 저장하고 관리학 위한 인터페이스 + 클래스 모음- 인터페이스로 기능을 정의하고  =>  클래스에서 구체적으로 구현한다  |  핵심 인터페이스 구조Map은 Collection을 상속하지 않는다 ※|  주요 인터페이스 + 대표 구현 클래스 ✅ List (순서 O, 중복 O)구현체특징ArrayList배열 기반, 인덱스 접근 빠름LinkedList노드 기반, 삽입/삭제 빠름VectorArrayList와 유사하지만 동기화됨StackVector 상속, LIFO 구조 ✅ Set (순서 X, 중복 X)구현체특징HashSet순서 없음, 빠름LinkedHashSet입력 순서 유지TreeSet자동 정렬 (Comparable or Comparator) ✅ Queue / D..

IT/JAVA 2025.04.08

코드 실행시간 비교

프로그래머스 문제를 풀다가 코드 실행 시간을 비교해 보고 싶었다.  📝  Java에서 성능 측정을 위한 헬퍼 클래스작업을 여러 번 실행하여 평균 실행 시간을 측정하고 결과를 출력제네릭을 사용하여 다양한 타입의 작업을 처리 package Java.helpers;public class BenchmarkHelper { /** * 작업을 여러 번 실행하여 평균 실행 시간 측정하고 결과를 출력한다. * @param name : 벤치마크 테스트 이름 * @param iteration : 작업 반복 횟수 * @param task : 벤치마크 테스트에서 실행할 작업 */ public static void runBenchmark (String name, int it..

IT/JAVA 2025.03.26

HashSet

HashSet 은 Set 인터페이스에서 지원하는 구현 클래스이다. => Set의 특징을 그대로 상속받는다. ✏️ Set- Java에서 중복을 허용하지 않는 컬렉션을 나타내는 인터페이스 - Key의 중복을 허용하지 않는다- Key로 null을 허용하지 않는다. - 중복을 자동으로 제거해준다.- 비선형 구조로 순서 없이 Key로만 데이터를 저장한다. => 인덱스X- 요소의 저장 순서를 유지해야 한다면 JDK1.4부터 제공하는 LinkedHashSet 클래스를 사용하면 된다.- 성능이 빠르고 검색 속도가 우수하다- 추가나 삭제시 Set 내부에 있는지 검색한 뒤 해야하므로 List구조에 비해 속도가 느리다  주요 구현 클래스HashSet :  가장 많이 사용되는 Set 구현체 (빠른 검색 속도, 순서X) Tre..

IT/JAVA 2025.03.20

Pattern, Matcher Class

Java에는 정규식을 활용해 문자열을 검증, 탐색을 돕는 Pattern, Matcher 클래스가 있다Java API  java.util.regex 패키지에 포함되어 있다.  Pattern 클래스  (java.util.regex.Pattern)- 정규 표현식을 정의하는 클래스- 정규 표현식을 컴파일하여 Pattern 객체를 생성한다 📝 matches() 메서드  :  검증 후 대상문자열이 정규표현식과 일치하면 true, 그렇지 않다면 false값을 리턴import java.util.regex.Pattern;public class RegexExample { public static void main(String[] args) { String pattern = "^[0-9]*$"..

IT/JAVA 2025.02.25

StringBuilder

String 객체끼리 더하는 방법은 메모리 할당과 해제를 발생시키는데 덧셈 연산 많아진다면 성능적으로 좋지 않다많은 문자열을 연결하면 중간 문자열 객체가 생성되어 비효율적인 코드가 생성된다 Java에서 String  객체는 변경이 불가능하다. (불변 객체 (immutable) )한 번 생성되면 내용을 바꿀 수 없다.따라서 하나의 문자열을 다른 문자열과 연결하면 새 문자열이 생성되고, 이전 문자열은 가비지 컬렉터로 들어간다. (JVM의 GC가 처리)StringBuilder 는 변경 가능한 문자열을 만들어 주기 때문에, String 을 합치는 작업 시 하나의 대안이 될 수 있다. StringBuilder        ( java.lang.StringBuilder )mutable한 성질.  값이 변할 수 있다..

IT/JAVA 2025.01.19

IntStream

IntStreamJava8의 Stream API에서 기본 타입 int를 처리하기 위해 제공되는 Stream 클래스박싱(Integer)없이 숫자 데이터를 효율적으로 처리할 수 있다int에 대한 순차 및 병렬 집계 연산 수행하는데 사용반복문 없이도 배열이나 컬렉션의 데이터를 처리할 수 있다불필요한 박싱/언박싱 작업을 줄여 성능을 향상시킨다숫자와 관련된 연산을 쉽게 처리할 수 있다import java.util.stream.IntStream;생성방법IntStream.of(values): 개별 값을 사용하여 스트림 생성.Arrays.stream(int[]): 배열을 기반으로 스트림 생성.IntStream.range(start, end): 시작값부터 끝값 전까지 연속된 숫자 생성.IntStream.rangeClos..

IT/JAVA 2025.01.04

Stream

Stream스트림(Stream)은 Java 8에서 도입된 기능으로, 컬렉션(예: 리스트, 배열) 등의 데이터 소스를 처리하고 변환하는 데 사용된다.스트림은 데이터의 흐름을 추상화한 것으로, 데이터를 필터링, 매핑, 축소 등의 작업을 통해 처리할 수 있다.불변 데이터 흐름 : 데이터 소스를 변경하지 않고 처리한다.선언적: 스트림 API는 선언적 스타일을 사용하여 데이터 처리 작업을 표현한다. 이는 코드의 가독성을 높이고 유지보수를 쉽게 한다.더보기더보기명령형 스타일 명령형 스타일은 데이터 처리 작업을 수행하는 방법을 단계별로 명시적으로 작성하는 방식이다. 이는 반복문과 조건문을 사용하여 데이터를 처리하는 전통적인 방식이다.  int[] numbers = {1, 2, 3, 4, 5}; int sum = 0;..

IT/JAVA 2025.01.03

Java 란

- 객체 지향 프로그래밍 언어로, "한 번 작성하면, 어디서나 실행된다 (Write Once, Run Anywhere)"라는 특징을 가지고 있다.- 자바로 작성된 프로그램이 JVM을 통해 운영체제와 관계없이 동일한 자바 어플리케이션을 실행할 수 있어 다양한 환경에서 일관된 동작을 보장한다.- 객체 지향 언어로, 코드의 재사용성, 유지보수성, 확장성을 높이기 위해 클래스와 객체, 상속, 다형성, 캡슐화와 같은 원칙을 따른다. 이러한 객체 지향 특성 덕분에 복잡한 시스템을 모듈화하고 관리하기 용이하다.- 강력한 메모리 관리와 가비지 컬렉션이다. 자동으로 메모리를 관리하며, 더 이상 사용되지 않는 객체를 가비지 컬렉터가 자동으로 제거해 주어 메모리 누수를 방지한다.- 멀티스레딩을 기본적으로 지원하여, 병렬 처..

IT/JAVA 2024.12.27

MyBatis Log4j Error

### Error updating database.  Cause: java.lang.IllegalArgumentException: Mapped Statements collection does not contain value for ProfessorMapper.insert = 매핑된 컬렉션에 ProfessorMapper.insert 값이 포함되어 있지 않다= ProfessorMapper 인터페이스에서 insert 메서드에 대한 매핑이 정의되어 있지 않다 원인 )- MyBatis 설정에서 매핑 파일의 경로가 잘못되었거나, 매핑 파일이 로드되지 않았을 수 있다- 매핑 파일에 정의된 ID와 인터페이스 메서드의 이름이 일치하지 않는 경우에 이 오류가 발생할 수 있다    => Mapper의 기능명(id)와 Jav..

IT/JAVA 2024.10.10

JDBC

- Java에서 데이터베이스와 상호작용할 수 있도록 해주는 API- JDBC는 데이터베이스 독립적인 API를 제공하여, Java 애플리케이션이 다양한 데이터베이스 시스템과 쉽게 연결되고 SQL 쿼리를 실행할 수 있게 해준다- 데이터베이스 연결:JDBC는 Java 애플리케이션에서 데이터베이스와의 연결을 설정하는 방법을 제공한다연결을 설정한 후 SQL 명령을 통해 데이터를 삽입, 삭제, 갱신, 조회할 수 있다 - SQL 실행:JDBC는 SQL 쿼리를 실행하기 위한 메서드를 제공하여 데이터베이스의 테이블에서 데이터를 가져오거나 변경하는 등의 작업을 수행할 수 있다SQL 문은 Statement, PreparedStatement, CallableStatement와 같은 객체를 통해 실행된다 - 데이터베이스 독립성..

IT/JAVA 2024.10.08

CRUD

JSON 예제 ▽  폴더구조 - Lombok을 사용한 데이터 모델 클래스 또는 엔티티 클래스- 일반적으로 데이터베이스의 테이블 구조와 매핑되기도 한다@Data 어노테이션:- Lombok 라이브러리에서 제공하는 어노테이션- 자동으로 getter, setter, toString, equals, hashCode 메서드를 생성해준다 > model > Department.java ▽package com.hyeon.model;import lombok.Data;@Datapublic class Department { private int id; private String dname; private String loc;} - Retrofit 라이브러리를 사용한 API 인터페이스 메서드 정의- servic..

IT/JAVA 2024.10.01

Java Exception Error

MissingFormatArgumentException- String.format() 또는 System.out.printf() 와 같은 메서드에서 사용된 포맷 문자열의 포맷 지정자에 맞는 인자가 부족할 때 발생  UnsupportedEncodingException - 이 예외는 요청한 인코딩이 지원되지 않을 때 발생한다- 예를 들어, 문자열을 바이트 배열로 변환할 때 사용하려는 인코딩이 잘못되었거나 Java에서 지원하지 않는 경우에 발생한다- content.getBytes("utf-8");  메서드를 사용할 때 "utf-8" 에 오타가 있다거나 FileNotFoundException - 이 예외는 지정한 파일을 찾을 수 없거나 접근할 수 없을 때 발생한다- 파일이 존재하지 않거나 파일 경로가 잘못된 경우..

IT/JAVA 2024.09.30

Lombok (Gradle)

- Java 프로그래밍 언어에서 코드의 보일러플레이트( 프로그램이나 코드에서 반복적으로 나타나는 고정된 구조나 코드 ex: getter,setter, 데베접근, API호출 등 )를 줄여주는 라이브러리- getter, setter, 생성자, toString, equals, hashCode 메서드를 자동으로 생성해주어, 코드의 가독성과 유지보수성을 높여준다- Lombok을 사용하면 코드가 더 간결해지고, 개발자가 실제 로직에 더 집중할 수 있다주요 어노테이션@Getter: 해당 필드에 대한 getter 메서드를 생성한다@Setter: 해당 필드에 대한 setter 메서드를 생성한다@ToString: 객체의 문자열 표현을 자동으로 생성한다@EqualsAndHashCode: equals() 및 hashCode(..

IT/JAVA 2024.09.30

for-each

Java의 for-each 구문- 컬렉션이나 배열에 있는 모든 요소를 순차적으로 반복할 때 사용된다- 이 구문은 **향상된 for문(enhanced for loop)** 라고도 부른다for (타입 변수 : 배열이나 컬렉션) { // 반복할 코드} - "변수"  : - 배열이나 컬렉션에서 각 요소를 담을 변수- 각 반복마다 변수에 배열에서 하나씩 순차적으로 요소가 저장된다- "배열이나 컬렉션  :- 반복 대상이 되는 배열 또는 컬렉션- 이 배열이나 컬렉션에 있는 요소들이 반복문을 통해 하나씩 "변수"에 할당된다String[] items = {"Apple", "Banana", "Cherry"};for (String item : items) { System.out.println(item);} - 간..

IT/JAVA 2024.09.30

Gson(Maven)

- Google에서 개발한 Java 라이브러리로, Java 객체와 JSON(JavaScript Object Notation) 간의 변환을 쉽게 할 수 있도록 한다- Gson을 사용하면 Java 객체를 JSON 문자열로 직렬화(Serialization)하고, JSON 문자열을 Java 객체로 역직렬화(Deserialization)하는 작업을 간단하게 수행할 수 있다   - Apache Software Foundation에서 개발한 자바 프로젝트 관리 자동화 툴 - Maven은 Spring 프로젝트에 국한되지 않고 모든 종류의 자바 프로젝트에 사용될 수 있는 범용적인 도구로 설계되었다- Java를 사용하는 모든 프로젝트에서의 빌드, 의존성 관리, 문서화를 간소화하고 표준화하는 데 초점을 맞추고 있기 때문에 ..

IT/JAVA 2024.09.27
반응형