Java 44

[Java] 내부 클래스 사용을 주의해야 하는 이유(내부 클래스 static 권장 이유)

내부 클래스는 외부 참조가 발생하게 됨 -> 숨은 참조 발생숨은 참조에 의해 GC 대상이 안됨 -> 메모리 누수내부 클래스에서 static을 사용하면 참조 발생 X 단, 내부 클래스에서 static을 사용하면 인스턴스를 생성할 때마다 새롭게 static 영역에 할당됨 (원래는 한 번만 할당됨) -참고 블로그 글https://rlaehddnd0422.tistory.com/190

Java 2025.08.23

[Java] Iterator와 ListIterator

[ Iterator 인터페이스 ]컬렉션의 각 요소에 접근 가능 >>> but, 향상된 for 문 권장![ ListIterator 인터페이스 ]컬렉션의 요소의 대체, 추가, 인덱스 검색 등을 위한 작업에서 양방향 이동 지원 void add(E e)해당 리스트에 전달된 요소 추가. (선택적 기능)boolean hasNext()순방향 순회에서 다음 요소가 있으면 true, 가지고 있지 않으면 false 반환.boolean hasPrevious()역방향 순회할에서 다음 요소가 있으면 true, 가지고 있지 않으면 false 반환.E next()다음 요소를 반환하고, 커서의 위치를 순방향으로 이동.int nextIndex()다음 next() 메소드를 호출하면 반환될 요소의 인덱스 반환.E previos()이전 ..

Java 2025.06.07

[Spring] @AfterEach, @BeforeEach

스프링부트에서 테스트를 위해 @Test 어노테이션을 붙인 메서드들을 한꺼번에 실행할 때, 메서드의 순서는 보장되지 않는다. 따라서 다음과 같은 작업을 해주어야 한다. 테스트에 사용되는 데이터는 각 테스트가 종료되면 같이 지워져야 다음 테스트에서 오류가 안난다. 테스트가 종료되면 생성한 데이터를 모두 삭제하는 코드를 @AfterEach가 붙은 메서드에 넣어주면 된다.@AfterEachpublic void afterEach() { // 삭제하는 코드} 반대로 테스트에 사용되는 데이터가 미리 존재해야하는 경우 테스트가 실행되기 전에 실행되어야 하는 코드를 @BeforeEach가 붙은 메서드에 넣어주면 된다.@BeforeEachpublic void beforeEach() { // 테스트 전 실행되어야 하는 코드..

Java 2025.06.03

[Java] AtomicLong

AtomicLong (java.util.concurrent.atomic.AtomiLong)멀티스레드 환경에서 안전하게 Long 값을 다룰 수 있도록 해주는 Wrapper 클래스원자적 연산을 제공해준다.AtomicLong은 여러 스레드가 동시에 값을 읽고 변경할 때,동기화 없이도 안전하게 값을 조작할 수 있도록 만들어졌다.내부적으로는 CPU의 CAS(Compare-And-Swap) 명령어를 이용해 원자성 보장.언제 사용하는지?멀티스레드 환경에서 카운팅, 인덱싱, 유일한 ID 생성 등synchronized 키워드보다 더 나은 성능이 필요한 경우volatile보다 더 복잡한 상태 변경이 필요한 경우 주요 메서드get()현재 값을 반환set(long newValue)값을 강제로 설정getAndSet(long n..

Java 2025.06.03

[Java] ConcurrentHashMap

Map의 구현체 중 다음 세가지의 차이를 알아보자.HashMapHashTableConcurrentHashMap ConcureentHashMapHashMapHashTable동기화 보장(Thread-safe)O (Entry단위 Lock)(비교적 빠름)XO(Map 전체에 Lock)(느림)key, value 에 null값 허용여부X (NullPointerException)OX (NullPointerException) https://velog.io/@alsgus92/ConcurrentHashMap%EC%9D%98-Thread-safe-%EC%9B%90%EB%A6%AChttps://parkmuhyeun.github.io/woowacourse/2023-09-09-Concurrent-Hashmap/

Java 2025.06.03

[Java] split와 정규식

공백 (줄바꿈, 탭 등 모두)split( "\\s+" )공백 (스페이스바)split( "[ ]+" ). (마침표)split( "\\.")+ (플러스)split( "\\+" )숫자split( "[0-9]" ) / 1개 이상: "[0-9]+"알파벳 대문자split( "[A-Z]" ) / 1개 이상: "[A-Z]+"알파벳 소문split( "[a-z]" ) / 1개 이상: "[a-z]+"? (물음표)split( "\\?" )여러개split( "A|BB" ) (구분자가 A와 BB) 아래는 정규식 표현^문자열 시작$문자열 종료.임의의 한 개의 문자a*a가 0개 이상a+a가 한 개 이상a?a가 있을 수도, 없을 수도 있[ ]문자의 집합 또는 범위a{n}a가 n개a{n,}a가 n개 이상a{n,m}a가 n개 이상,..

Java 2025.05.31

[Java] next() & nextLine()

Scanner에서 입력값을 받을 때 next() (nextInt(), nextDouble()) 와 nextLine()이 있는데 이 둘 메소드는 비슷하면서도 차이점이 있다. next()구분자 : 공백(white space), tab(\t), 개행문자(Enter)(\n)문자열 내에 구분자는 포함되지 않는다.nextLine()구분자 : 개행문자(Enter)(\n) 문자열 내에 개행문자가 포함된다. 개행문자가 포함되는지 않되는지를 잘 구분해야 아래와 같은 오류를 피할 수 있다.import java.util.Scanner;public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); ..

Java 2025.05.27

[Java] HashMap의 key에 클래스를 사용하면?

equals와 hashCode는 같의 재정의 하자※hash 값을 사용하는 Collection(HashSet, HashMap, HashTable)은 hashCode 메서드가 작동하기 때문!※ public boolean equals(Object object) { ... } Object 타입의 매개변수여야 오버라이딩됨!!https://tecoble.techcourse.co.kr/post/2020-07-29-equals-and-hashCode/ equals와 hashCode는 왜 같이 재정의해야 할까?equals와 hashCode는 같이 재정의하라는 말을 다들 한 번쯤 들어봤을 것이다. 대부분의 IDE Generate 기능에서도 equals와 hashCode를 같이 재정의해주며 lombok에서도 EqualsA..

Java 2025.05.26

[Java] Optional 클래스

Optional 클래스란?null이 올 수 있는 값을 감싸는 컨테이너 클래스 (Wrapper class)Java 8부터 도입.NullPointerException을 방지하고, 명시적으로 "값이 있을 수도, 없을 수도 있음"을 표현. Optional name = Optional.of("홍길동");Optional empty = Optional.empty();Optional.of(value) : 값이 무조건 존재함을 보장 (null 넣으면 예외)Optional.ofNullable(value) : 값이 있을 수도 없을 수도 있음Optional.empty() : 빈 Optional 객체 메서드설명isPresent()값이 존재하는지 여부(true/false)get()값을 꺼냄(값 없으면 예외 발생)orElse(de..

Java 2025.05.21

[IntelliJ] 단축키

환경설정에서 shortcut 등록 가능! [ 윈도우 ] + 해당 부분의 속성창 + constructor, getter, setter 등 자동 생성 + + b해당 인터페이스를 사용하고 있는 클래스 목록 + + n변수 정리 (코드 리팩토링) + + m해당 코드 메소드로 생성 + + v리턴값 자동 완성 + + → / ←앞뒤로 이동 + b해당 메소드, 클래스를 사용하고 있는 곳으로 이동 및 목록 생성 + ehistory (코드 왔다갔다 할 때 유용) + o메소드 등록 + '/'// 주석 처리 + + '/'/**/ 주석 처리 + 현재 클래스의 메소드 목록 보기 + + 코드 한 줄 자동완성 + + 리컴파일 (보통 devtools와 함께 사용) + + 현재 코드 실행 + + t해당 클래스의 tes..

Java 2025.05.11