Java

· Java
비트마스킹 기본 연산1.1 특정 비트 확인 (Check)boolean isSet = (mask & (1 `1 `&` 연산을 통해 i번째 비트가 1인지 0인지 확인 가능.1.2 특정 비트 세팅 (Set)mask |= (1 i번째 비트를 1로 설정한다.1.3 특정 비트 해제 (Clear)mask &= ~(1 i번째 비트를 0으로 만든다.1.4 특정 비트 뒤집기 (Toggle)mask ^= (1 i번째 비트를 1이면 0, 0이면 1로 바꾼다.  /2 대신 >> 1, *2 대신 `/2` 연산은 `>> 1`로 대체 가능`*2` 연산은 `컴파일러가 대부분 최적화하므로 큰 체감은 없을 수 있으나, 간단한 비트 연산을 직접 사용하면 의도를 더 명확히 드러낼 수 있음.  방문 배열(visited) 대체 개념기존에는 bo..
· Java
개요일반적으로, 우리는 자바 HashMap이 평균적으로 O(1)의 시간 복잡도를 가진다고 배웁니다. 하지만 “해시 충돌(Hash Collision)”이 심해지면 성능이 급격히 떨어질 수 있다는 사실은 자칫 놓치기 쉽습니다. 또한, CPU 캐시 구조와 “참조 지역성(Reference Locality)”을 이해하면, 왜 이 문제가 현실에서 더 크게 체감되는지 알 수 있습니다. 이 주제는 백준 7453 번 문제를 풀다가 경험하게 되었는데https://www.acmicpc.net/problem/7453 C++,C 에서는 기존의 방법처럼 2개씩 쌍으로 묶어서 계산한다음에 한쪽 값을 해시 맵에 넣어두고 0을 만들기 위한 보수가 존재하는지 hash key 탐색으로 풀렸지만 자바의 경우에는 그렇지 않았다. 탐색 길이인..
· Java
개요자바 8에서 람다 표현식은 기존의 익명 클래스 방식과 다르게1. 익명 클래스를 생성하지 않고2. 바이트코드 수준에서 최적화된다.그럼에도 불구하고 람다를 배우면 항상 그냥 순회하는게 성능이 더 좋아~ 오버헤드가 발생해~ 로만 대강 알고있던 성능저하가 존재한다고 알고있었다. 그럼에도 불구하고 개발자들이 람다라는 표현식의 성능 최적화를 위해 어떻게 이를 구현했는지 바이트코드 분석을 통해 알아보자. 요약디슈거링(Desugaring)이 수행되며, 람다 표현식은 일반적인 정적 메서드로 변환된다.이후, 실행 시점에서 `invokedynamic` 바이트코드를 활용하여 동적으로 `MethodHandle`을 참조하게 된다.  디슈거링(Desugaring) 개념자바 8에서 람다 표현식은 내부적으로 익명 클래스를 생성하지..
· Java
개요자바 8의 핵심 기능 중 하나인 람다 표현식과 함수형 인터페이스의 개념을 살펴본데에 이어,@FunctionalInterface 구현체의 작성법과 생략 가능한 메서드 등을 통해서 람다 표현에 대해 익숙해진다.  또한 람다 표현식의 간소화가 어떻게, 왜 가능한지에 대해서도 확인해보자  또한, 이펙티브 자바 7장 아이템 44에서는 함수형 인터페이스를 직접 만들 경우 @FunctionalInterface 애너테이션을 반드시 사용하라고 권장한다. 그 이유는 다음과 같다.의도 명확성 – 해당 인터페이스가 람다 용도로 설계되었음을 명확히 알린다.컴파일러 검증 – 인터페이스가 정확히 하나의 추상 메서드만 가지도록 강제한다.유지보수성 향상 – 실수로 메서드를 추가하는 것을 방지하여, 코드의 안정성을 높인다.  꼭 직..
· Java
개요자바 8의 핵심 기능 중 하나인 람다 표현식과 함수형 인터페이스의 개념을 살펴본다. 이를 통해 코드의 간결화 및 유지보수성 향상의 이유를 이해하고, 자바 아키텍처 관점에서의 변화도 함께 분석한다. 배경: 익명 클래스에서 람다 표현식으로 자바 8 이전에는 특정 동작을 전달하기 위해 익명 클래스를 사용해야 했다. 예를 들어, `Comparator`를 활용하여 정렬을 수행하는 방식은 다음과 같다. 하지만 이 방식은 코드가 장황하고 보일러플레이트 코드가 많다. 자바 8부터는 람다 표현식을 활용하여 이를 간결하게 줄일 수 있다. 람다 표현식을 사용하면 불필요한 클래스 선언 없이 직관적으로 동작을 표현할 수 있다.  함수형 인터페이스와 `@FunctionalInterface`람다 표현식을 적용할 수 있는 함수형..
· Java
문제 1: 추상 클래스에서 static 메서드?abstract class Parent { static void show() { System.out.println("Parent 클래스"); } abstract void display();}class Child extends Parent { void display() { System.out.println("Child 클래스"); }}public class Test { public static void main(String[] args) { Parent.show(); }} Q1: 실행 결과는?"Parent 클래스""Child 클래스"컴파일 에러 발생런타임 예외 발생더보기✅ 정답:..