일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 백준
- SpringBoot
- 토비의 스프링
- gradle
- Kotlin
- IntellJ
- thread
- spring
- 쿠버네티스
- Stack
- 보조스트림
- JPA
- 스프링
- 이스티오
- K8s
- 자바
- OS
- 토비의 스프링 정리
- redis
- Java
- list
- Stream
- MSA
- GC
- jvm
- mysql
- 자바 ORM 표준 JPA 프로그래밍
- Collection
- Real MySQL
- 스트림
- Today
- Total
목록Java (58)
인생을 코딩하다.
ColpletableFuture 2014년에 발표된 java8에소 처음 도입 비동기 프로그래밍 지원 Lambda, Metho reference 등 java 8의 새로운 기능 지원 Method reference :: 연산자를 이용해서 함수에 대한 참조를 간결하게 표현 method reference statuc method reference instance method reference constructor method reference ColpletableFuture 클래스 CompletableFuture Future CompletionStage 비동기적인 작업을 수행 비동기적인 작업을 수행 해당 작업이 오한료되면 결과를 반환하는 인터페이스 해당 작업이 완료되면 결과를 처리하거나 다른 CmpletionSt..
공부한 것 기록하기.. Blocking의 종류 blocking은 thread가 오랜 시간 일을 하거나 대기하는 경우 발생 CPU-bound blocking: 오랜 시간 일을 한다. IO-bound blocking: 오랜 시간 대기한다. CPU-bound blocking thread가 대부분의 시간 CPU 점유 연산이 많은 경우 추가적인 코어를 투입 IO-bound blocking thread가 대부분의 시간을 대기 파일 일기/쓰기, netowrk 요청 처리, 요청 전달 등 IO-bound non-blocing 가능하다. Blocking의 전파 하나의 함수에서 여러 함수를 호출하기도 하고, 함수 호출은 중첩적으로 발생 callee는 caller가 되고 다시 다른 callee를 호출 blocking한 함수를..
공부한 것 기록하기 함수 호출 관점에서 동기와 비동기 함수형 인터페이스 함수형 프로그래밍을 지원하기 위해 java8 부터 도입 1개의 추상메서드를 갖고 있는 인터페이스 함수를 1급 객체로 사용할 수 있다. 함수를 변수에 할당하거나 인자로 전달하고 반환값으로 사용 가능 Function, Consumer, Suppier, Runnable등 함수형 인터페이스를 구현한 익명 클래스를 람다식으로 변경 가능 함수형 인터페이스는 호출한 쓰레드에서 실행된다. 두 모델의 차이점 A 모델 B 모델 main는 getResult의 결과에 관심이 있다. main은 getResult의 결과에 관심이 없다. main은 결과를 이용해서 다음 코드를 실행한다. getResult는 결과를 이용해서 함수형 인터페이스를 실행한다. 동기 비..
상수 풀(String Pool)은 GC가 될까요? JVM 내부구조를 다시 보던 중에, 문득 "상수 풀은 GC가 될까?" 라는 생각이 떠올랐습니다. 자바에서 보통 static은 GC가 되지 않는데, 상수풀도 GC가 안되려나? 자바에서 보통 string 객체의 사용량이 가장 큰데 상수풀이 GC가 되지 않는다면 메모리에 큰 이슈가 발생하지 않을까? 큰 이슈가 발생할 수도 있으니, JVM에서 상수풀이 GC가 되도록 최적화하는 옵션을 설정해두지 않았을까? 하는 생각들을 했었습니다. https://www.baeldung.com/java-string-pool에서 답을 얻을 수 있었습니다. Before Java 7, the JVM placed the Java String Pool in the PermGen space,..
스레드 안전성이란 무엇일까요? 여러 스레드가 클래스에 접근할 때, 실행 환경이 해당 스레드들의 실행을 어떻게 스케줄하든 어디에 끼워 넣든, 호출하는 쪼에서 추가적인 동기화나 다른 조율 없이도 정확하게 동작하면 해당 클래스는 스레드 안전(Thread-Safe) 하다고 말할 수 있습니다. 간단히 말해서 여러 스레드가 클래스에 접근할 때 계속 정확하게 동작하면 해당 클레스는 스레드에 안전하다고 말할 수 있습니다. 특히, 멀티 스레드를 사용할때 스레드 안전성을 잘 고려하여 설계해야합니다. 객체 지향 프로그램에서 멀티 스레드를 잘 활용하면 훨신 좋은 성능의 프로그램을 설계할 수 있지만, 멀티 스레드를 활용할떄는 주의할 점이 있습니다. 여러 스레드가 변경할 수 있는 하나의 상태 변수를 적절한 동기화 없이 접근하면 ..
프로그램을 제대로 돌아가게 작성하는 일은 어렵습니다. 하지만 여러 작업을 동시에 실행하는 프로그램을 제대로 돌아가게하는 것은 더 어렵습니다. 다시 말해 여러 작업을 동시에 실행하는 작업은 순차적으로 실행하는 프로그램보다 오류 발생 가능성이 높습니다. 그럼에도 우리는 왜 작업을 동시에 실행하는 문제에 신경을 써야 할까요? 스레드는 자바 언에에서 피할 수 없는 특성이고 복잡한 비동기 코드를 더 단순한 순차적 코드로 바꿔 복잡한 시스템을 단순하게 개발하 수 있게 해주기 떄문입니다. 게다가 스레드는 멀티프로세서 시스템의 능력을 최대한 끌어낼 수 있는 가장 쉬운 방법입니다. 프로세서 개수가 늘어날수록 여러 작업을 동시에 실행하는 일은 더욱 중요합니다. 스레드는 각기 별도의 프로그램 카운터, 스택 , 지역 변수를 ..
객체 생성과 파괴 (2장) Item2 : 생성자에 매개변수가 많으면 빌더를 고려하라 점층적 생성자 패턴 매개변수를 늘려가는 점층적 생성자 패턴을 쓸 수는 있지만, 매개변수 개수가 많아지면 클라이언트 코드를 작성하거나 읽기가 어렵다. 코드를 읽을 떄 각 값의 의미가 무엇인지 헷갈릴 것이고, 매개변수가 몇 개인지도 주의해서 세어 보아야 할 것이다. 타입이 같은 매개변수가 연달아 늘어서 있으면 찾기 어려운 버그로 이어질 수 있다. 클라이언트가 실수로 매개변수의 순서를 바꿔 건네줘도 컴파일러는 알아채지 못하고, 결국 엉뚱한 동작을 하게 된다. 선택 매개변수가 많을 때 활용할 수 있는 두 번째 대안인 자바빈즈패턴(JavaBeanspattern) 매개변수가 없는 생성자로 객체를 만든 후, 세터 메서드들을 호출해 원..
객체 생성과 파괴 (2장) 개요 이 책에서는 아래와 같이 개념을 정의한다. API를 사용하는 프로그램 작성자(사람)를 그 API의 사용자라고 한다. API를 사용하는 클래스(코드)는 그 API의 클라이언트라고 한다. Item1 : 생성자 대신 정적 팩토리 메서드(static factory method)를 고려하라. public 생성자를 사용하여 객체를 생성하는 전통적인 방법 외에도 static factory method를 이용하여 객체(인스턴스)를 생성 할 수있다. static factory method의 장점과 단점을 알아보자. 장점 1 : 이름을 가질 수 있다. 생성자에 넘기는 매개변수와 생성자 자체만으로 반환될 객체의 특성을 제대로 설명하지 못한다. 정적 팩터리는 이름만 잘 지으면 반환될 객체의 특..