모던 자바 인 액션 - 회고록
·
PL/모던 자바 인 액션
지난 2023 여름방학, GDSC에서 열린 자율 자바 심화 스터디인 모던 자바 인 액션 스터디에 참여하였다. 두 달끝에 지난 10월 9일 마무리 되었고 조금 늦었지만 회고록을 써볼까 한다. 참여동기 아래와 같이 모집 공고가 올라왔는데, 약 두 달에 걸쳐서 자바8을 정복하는 스터디라 하였다. 무엇보다도 진행 방식이 마음에 들었다. 모두가 동일하게 처음부터 같이 공부하는 스터디를 몇 번 진행해봤는데, 초심자들끼리 막히는 부분을 헤쳐나가고 공유하며 성장하는 부분은 매력적이었지만, 공부하다 모두가 모르는 내용이 나올 때 최적의 피드백을 찾기가 어려웠다. 그런면에서 이 스터디는 멘토님이 있다는 점에서 막히는 내용이 있을때 조언을 얻을 수 있을 수 있을 것 같다는 생각에 마음에 들었고, 또한 구두로 퀴즈를 진행한다..
모던 자바 인 액션 - Chap12
·
PL/모던 자바 인 액션
LocalDate, LocalTime Instant, Duration, Period 클래스 LocalDate, LocalTime 사용 LocalDate는 시간을 제외한 날짜를 표현하는 객체로, 시간 정보를 포함하지 않는다. 정적 팩토리 메서드 of를 사용해 아래와 같이 인스턴스를 만들 수 있다. 또한 다양한 메서드로 날짜정보에 관한 값을 얻을 수 있다. LocalDate date = LocalDate.of(2023,10,09);//인스턴스 생성 int year = date.getYear(); Month month = date.getMonth(); int day = date.getDayOfMonth(); DayOfWeek dow = date.getDayOfWeek();// 요일 -> 월요일 반환 int l..
모던 자바 인 액션 - Chap11
·
PL/모던 자바 인 액션
이번 장은 Optional에 대해서 다룬다. Optional은 null을 대체하기 위해 등장한 클래스이다. null의 등장 배경은 컴파일러의 자동확인 기능으로 참조를 안전하게 사용할 수 있을 것이란 생각에서 시작되었다고 한다. 하지만, null을 만든 토니 호어는 이를 십억 달러짜리 실수라고 이야기했다. null에서 발생하는 문제는 뭐가 있을까 값이 없는 상황 차, 사람, 보험에 대한 클래스가 존재할때 다음 코드를 실행한다고 해보자. public String getInsuranceName(Person person){ return person.getCar().getInsurance().getName(); } 아무 문제 없이 실행될 것 같지만, 차를 소유하지 않은 사람이 있다면? getInsurance()를..
자바 병렬 프로그래밍 5.2 병렬 컬렉션
·
PL/모던 자바 인 액션
자바5 이전엔, 동기화된 컬렉션 클래스는 내부 변수에 접근하는 경로를 일련화해 스레드 안전성을 확보했다. 하지만 이 경우 동시 사용성에서 큰 손해를 볼 수 밖에 없었다. 자바 5 에서 등장한 병렬 컬렉션은 여러 스레드에서 동시에 사용될 수 있도록 설계되었다. ConcurrentHashMap 기존에 동기화된 컬렉션 클래스는 연산을 수행하는 시간동안 항상 락을 가지고 있어야했다. 그러나, 이경우 `HashMap.get` 또는 `List.contains`와 같은 일부 연산은 최악의 경우 모든 객체를 대상으로 메서드를 호출해야할 수도 있고 그 과정에선 다른 스레드는 내부의 값을 접근할 수 없었다. ConcurrentHashMap은 해시를 기반으로 하는 Map으로 lock Striping이라는 세밀한 동기화 기법..
모던 자바 인 액션 7주차 - Chap 08
·
PL/모던 자바 인 액션
이번 장에서는 컬렉션 API 8.1 컬렉션 팩토리 자바 9에선 작은 컬렉션 객체를 쉽게 만들 수 있는 몇가지 방법들이 제공되었다. 친구 3명의 이름을 컬렉션에 Array형태로 저장하는 두가지 방법들을 보자. 방법1: ArrayList활용 List friends = new ArrayList(); friends.add("Kim"); friends.add("Min"); friends.add("Jae"); 방법2: 팩토리 메서드 Arrays.asList사용 List friends = Arrays.asList("Kim","Min","Jae"); 방법1의 경우, 3개의 문자열을 저장함에도 많은 코드가 필요하지만, 방법2 `Arrays.asList()`라는 팩토리 메서드를 사용하면 코드 길이를 줄일 수 있다. 다만,..
모던 자바 인 액션 6주차 - Chap07
·
PL/모던 자바 인 액션
지금까지는 스트림을 통해 컬렉션을 선언형으로 제어하는 방법을 살펴봤다. 이번 장에선 `병렬 데이터 처리와 성능`에 대해 다룰 계획이다. 병렬 스트림 앞서, 4장에선 스트림 인터페이스를 이용하면 아주 간단하게 요소를 병렬로 처리할 수 있다고 이야기했다. `병렬 스트림`이란 각각의 스레드에서 처리할 수 있도록 스트림 요소를 여러 청크로 분할한 스트림이다. 여러 청크로 분할되어있으니 모든 멀티코어 프로세서가 각각의 청크를 할당받아 처리할 수 있다. 숫자 n을 인수로 받아 1~n까지 모든 숫자의 합을 반환하는 ㅁ네서드를 구현할때 우선 스트림으로 구현하면 다음과 같이 무한스트림을 받아 크기를 제한하는 방식으로 구현할 수 있다. public static long sequentialSum(long n) { retur..
자바 병렬 프로그래밍 - 3장
·
PL/모던 자바 인 액션
지난, 2장에서는 공유하는 데이터를 여러 곳에서 사용할 때 동기화하는 방법을 알아봤다. 이번 3장에서는 여러 스레드에서 특정 객체를 동시에 사용할 때 섞이지 않고 안전하게 동작하도록 객체를 공유하고 공개하는 방법을 알아볼 계획이다. 가시성(Visibility) 메모리 가시성이란, 멀티 스레드 환경에서 특정 공유변수를 참조하는 여러 스레드가 있을 때 하나의 스레드에서 데이터를 변경했는지 여부를 알 수 있느냐의 문제를 이야기한다. (동기화를 파악할 수 있느냐?) 이러한 가시성 문제는 직관적으로 이해할 수 있는 문제가 아니기에 쉽게 파악하고 코드를 작성하기 어렵다. 아래 코드를 보자. public class NoVisibility{ private static boolean ready; private stati..
자바 병렬 프로그래밍 - 2장
·
PL/모던 자바 인 액션
보호되어 있는 글입니다.
자바 병렬 프로그래밍 - 1장
·
PL/모던 자바 인 액션
보호되어 있는 글입니다.
모던 자바 인 액션 5주차 - Chap06
·
PL/모던 자바 인 액션
보호되어 있는 글입니다.
유쓰응
'PL/모던 자바 인 액션' 카테고리의 글 목록