본문 바로가기
반응형

혼자 공부하는 것들/JAVA15

ConcurrentHashMap의 get(), put() 분석 동시성 문제를 해결할 수 있는 ConcurrentHashMap이 있습니다. 동시성을 지원하며, 여러 스레드가 동시에 안전하게 접근할 수 있는 해시 맵입니다. 내부적으로 세그먼트라고 하는 여러 개의 부분 맵으로 나뉘어져 있습니다. 각 세그먼트는 서로 독립적으로 동작하며, 동시에 여러 스레드가 각각의 세그먼트에 접근할 수 있습니다. 각 세그먼트는 독립적인 잠금을 가지고 있으므로, 동시에 여러 스레드가 다른 세그먼트에 접근하여 작업을 수행할 수 있습니다. public V get(Object key) { Node[] tab; Node e, p; int n, eh; K ek; int h = spread(key.hashCode()); if ((tab = table) != null && (n = tab.length).. 2023. 7. 2.
Objects.requireNonNull은 왜 사용할까? https://github.com/pinpoint-apm/pinpoint GitHub - pinpoint-apm/pinpoint: APM, (Application Performance Management) tool for large-scale distributed systems. APM, (Application Performance Management) tool for large-scale distributed systems. - GitHub - pinpoint-apm/pinpoint: APM, (Application Performance Management) tool for large-scale distributed sys... github.com 오픈소스인 pinpoint의 코드를 분석하던 중 중간중.. 2023. 6. 1.
Java11 람다식에서 VAR를 사용할 수 있다고? 나만 몰랐던 건가.... Var 타입은 JavaScript에서 사용하는 방식입니다. (var만 보면 발작 버튼이.... 부들부들... 최대한 JS var는 지양해야 합니다.) https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/var var - JavaScript | MDN The var statement declares a function-scoped or globally-scoped variable, optionally initializing it to a value. developer.mozilla.org 이 var 형식을 Java11에서 어떻게 사용할 수 있을까? 정확히는 Java10에 도입되었네요. 간단하게 v.. 2022. 7. 2.
가변인수는 신중하게! 이펙티브 자바에서 읽었던 가변 인수에 대한 것을 정리해보았습니다. 가변 인수(varargs) 메서드는 명시한 타입의 인수를 0개 이상 받을수있습니다. 가변 인수 메서드를 호출하면, 가장 먼저 인수의 개수와 길이가 같은 열을 만들고 인수들은 이 배열에 저장하여 가변 인수 메서드에 건네줍니다. 인수가 1개 이상이어야 할 때도 있습니다. 예를 들어 최솟값을 찾는 메서드인데 인수를 0개만 받을 수도 있도록 설계하는 것은 좋지 않습니다. static int min(int... args){ if(args.length ==0){ throw new IllegalStateException("인수가 1개 이상 필요합니다"); } int min = args[0]; for(int i=0;i 2022. 3. 16.
익명 클래스하고 람다식은 어떤 상황일 때 사용해야할까? 이펙티브 자바라는 책을 읽던 중 람다 함수에 대해 궁금하여 정리해보았습니다. 간단하게 문자열을 길이 순으로 정렬하는데, 정렬을 위한 비교 함수로 익명 클래스로 사용한 방법을 확인해봅시다. Collections.sort(words, new Comparator(){ public int compare(String s1, String s2){ return Integer.compare(s1.length(), s2.length()); } }); 전략 패턴처럼 함수 객체를 사용하는 과거 객체지향 디자인 패턴에는 익명 클래스면 충분했습니다. https://ko.wikipedia.org/wiki/%EC%A0%84%EB%9E%B5_%ED%8C%A8%ED%84%B4 전략 패턴 - 위키백과, 우리 모두의 백과사전 전략 패턴(.. 2022. 3. 10.
[동시성 이슈해결] HashMap보다는 ConcurrentHashMap을 쓰자! 인프런 강의를 듣던 중 회원 도메인 설계를 하다가 동시성 이슈 때문에 HashMap보다는 ConcurrentHashMap을 사용한다라고 배웠습니다. 과연 두 개의 차이점은 어떤 점 있는지, 각 각의 장단점을 깊게 파보고 싶어서 정리해보았습니다. 출처: https://javaconceptoftheday.com/hashmap-vs-concurrenthashmap-in-java/ 해외 문서를 찾아보다가 잘 정리되어 있는 문서를 발견하고 정리해보았습니다. HashMap과 ConcurrentHashMap의 차이점 1) Thread Safe 주요 차이점은 ConcurrentHashMap는 내부적 동기화 때문에 스레드가 Safe합니다. HashMap는 내부적으로 동기화되지 않고 스레드로부터 안전하지 않습니다. Has.. 2022. 1. 1.
서블릿의 라이프 사이클 클라이언트의 서블릿 요청 -> init(최초 한 번만 호출) -> service, doget, dopost (반복적 호출 가능) -> destory(마지막 한 번만 호출) init() -> 서블릿이 처음으로 요청이 되어 객체가 생성 될 때 호출되는 메서드 service() -> 클라이언트가 요청이 있을때마다 호출되는 메서드 doget() -> 클라이언트 요청할때 form의 method가 get 방식일 때 호출 dopost() -> 클라이언트 요청할때 form의 method가 post 방식일 때 호출 destroy() -> 서블릿 서비스의 종료 및 재시작, 서블릿 코드가 수정되었을 때 호출되는 메서드 2021. 12. 29.
맥북 자바 버전 변경하는 방법 https://www.oracle.com/java/technologies/downloads/ 사이트로 들어가서 원하는 자바 버전을 다운로드합니다. 저는 자바 14, 자바 11, 자바 8을 프로젝트에 알맞게 변경해서 사용하고 있습니다. 상위 버전은 아직 안정화가 부족하여 버전을 낮춰야 할 경우도 있더라고요 ㅠㅠ 팀원들과 맞추기 위해! 위에 사진처럼 쭉 따라 하시면 됩니다. 커맨드를 간략하게 적어보겠습니다. 콘솔 창에서 $ java -version java version "15.0.1" 2020-10-20 Java(TM) SE Runtime Environment (build 15.0.1+9-18) Java HotSpot(TM) 64-Bit Server VM (build 15.0.1+9-18, mixed mo.. 2021. 12. 10.
JAVA) StringBuffer와 String의 차이점과 쓰는이유 알고리즘 문제를 자바로 풀면서 문득 문자열을 이용할 때 어떻게 하면 조금 더 메모리를 효율적으로 쓸수있을까라는 생각이 들었다. 일단 코드를 보자. StringBuffer를 사용한 코드다. 이런식으로 StringBuffer를 선언해주고 문자열을 넣어주는방식이다. 그냥 String을 사용한 코드를 보자. 이런식으로 String s라는 변수를 선언하여 값을 넣어주었다. 결과형식은 똑같다. 하지만 메모리측면에서는 비효율적이다. StringBuffer 객체는 단 한번만 생성된다. String 자료형은 + 연산이 있을때마다 새로운 String객체가 만들어진다. 저기코드에서는 String 자형 객체가 3번이나 생성된다. String 자료형은 한번 값이 생성되면 그 값을 변경할 수가 없다. 이렇게 값을 변경할 수 없는.. 2020. 12. 6.
반응형