본문 바로가기

Java10

[Java] HashMap 저번 시간을 통해 hash 함수로 hashCode를 구하고, hashCode로 hashIndex를 구하는 과정을 대략적으로 보았습니다.실제 hashMap은 어떻게 구현 했는지 살펴 보겠습니다.key 값으로 String이 들어온 경우 hashCode를 어떻게 구하는지 알아 보겠습니다. [String hashCode]public static int hashCode(byte[] value) { int h = 0; int length = value.length >> 1; for (int i = 0; i  String은 값 자리의 char값을 통해 hashCode를 구합니다.각자리의 char 값을 통해 hash를 누적 하며 31과 곱해 주는것을 볼수 있습니다.왜 31을 곱할까요?그 이유는 짝수를 .. 2025. 1. 23.
[Java] Hash ( eqauls, hashCode ) [ equals /  hashCode ]  해쉬 자료구조를 사용 하려면 equals, hashCode를 오버라이딩 해야 합니다.오버라이딩 하지 않으면 어떤 문제가 발생 하는지 알아 보겠습니다.회원 객체를 Set 자료구조에 저장 하는 예제 입니다.public class HashSetTest { public static void main(String[] args) { Set memberSet = new HashSet(); Member member1 = new Member("1번", 10); Member member2 = new Member("2번", 20); Member member3 = new Member("1번", 10); memberS.. 2025. 1. 17.
[Java] enum 왜 쓰는 걸까? Enum 이란? Enumeration 의 약자로 열거라는 뜻을 가지고 있으며 관련있는 상수들의 집합을 의미 합니다.enum은 왜 만들어졌을까요? 간단한 예시를 통해 알아보겠습니다. 과일 할인 정책파라미터로 과일을 입력 하면 과일의 할인 퍼센트를 알려 주는 함수가 있습니다.public static int fruitDiscountPercent(String fruit){ if(fruit.equals("banana")){ return 10; } if(fruit.equals("apple")){ return 20; } if(fruit.equals("grape")){ return 25; } return 0;} 만약에 개발자가 비교하는 과일의 스펠링을 잘못쓰면 어떻.. 2024. 11. 27.
[Java] 생산자 소비자 문제 생산자 소비자 문제 생산 하는 스레드 / 소비 하는 스레드를 나누어 생각해 보겠습니다.생산 스레드는 파일에 데이터를 읽는 역할을 하고소비 스레드는 읽은 데이터를 처리 하는 역할을 합니다.이렇게 처리 하려면 어딘가 데이터를 보관하는 자료 구조가 필요 합니다.자료 구조를 Queue 로 만들고 이름을 버퍼 라고 하고 버퍼의 크기를 2개로 설정 하겠습니다.  Bounded Queue는 여러 스레드에서 접근 할수 있기 때문에 synchronized가 걸려 있습니다.생산자 스레드만 먼저 실행 해보겠습니다.  생산자 1번 스레드가 락을 획득해 버퍼에 데이터를 넣고 락을 반납 하였습니다.2,3 번 스레드는 락을 획득 하지 못해 락 대기 집합에서 blocked 상태로 있습니다.  2번 스레드가 락을 획득해 버퍼에 데이터.. 2024. 11. 25.
[Java] LockSupprot, ReentrantLock LockSupprot 자바 1.5 부터 synchronized 단점을 해결 하기 위해 java.util.concurrent 패키지가 추가 되었습니다.ReentrantLock를 알기 위해선 LockSupport에 대한 정보가 필요한데LockSupport는 자신을 Waiting 상태로 바꾸거나 인터럽트 없이 다른 스레드를 깨울 수 있는 기능을 제공 합니다.간단한 예제를 통해서 알아 보겠습니다.main 스레드 작업 : unpark를 통해 thread -1 번을 깨웁니다.thread -1 작업 :  park를 통해 자신 스레드를 waiting 상태로 바꿉니다.public static void main(String[] args) { Thread thread1 = new Thread(new ParkTe.. 2024. 11. 19.
[Java] 메모리 가시성, 임계 영역 메모리 가시성 메모리 가시성을 알아 보기 위해 예제를 만들었습니다.스레드A의 작업 : while( flag )만약 메인 스레드에서 스레드A의 flag 값을 바꾼다면 작업이 중단 될까요?public static void main(String[] args) { RoofTask task = new RoofTask(); Thread thread = new Thread(task, "Thread-A"); log("스레드-A 시작" + task.flag); thread.start(); sleep(1000); log("스레드-A 루프 종료 요청"); task.flag = false; log("task.flag = " +.. 2024. 11. 15.