- Java 썸네일형 리스트형 컬렉션 팩토리 리스트 팩토리 - List 생성 - 고정 크기의 리스트로 변경은 되지만 추가, 삭제 불가능 - 리스트 크기를 변경하려고 하면 UnsupportedOperationException 발생 List.of 팩토리 메소드를 이용하여 생성 가능 - 크기 가변 불가능 - 컬렉션이 의도치 않게 변경되는 것을 방지 - but, 요소 자체가 변하는 것은 막을 수 없음 - null요소 유입 방지 - 오버로딩 vs 가변 인수 - List나 Set, Map 인터페이스를 살펴보면 List.of와 같은 다양한 오버로드 버전이 존재 → 가변 인수는 추가 배열을 할당해서 리스트로 감싸기 때문에 배열을 할당하고 초기화하며 가비지 컬렉션을 하는 비용이 발생 → 고정된 숫자의 요소(max=10)로 비용 제거 가능 집합 팩토리 - Set 생.. 더보기 병렬 데이터 처리 스트림으로 데이터 컬렉션 관련 동작을 얼마나 쉽게 병렬로 실행할 수 있는 지 설명 - 자바7 이전 1. 서브파트로 분할 2. 분할된 서브파트를 스레드로 할당 3. 스레드 경쟁상태가 되지 않도록 동기화 4. 마지막으로 부분 결과를 합쳐야함 - 자바 7 포크, 조인 프레임워크 기능 제공 - 자바 8 병렬 스트림 병렬 스트림 컬렉션에 parallelStream을 호출하면 병렬 스트림(parallel stream)이 생성 - EX) 숫자 n을 인수로 받아서 1부터 n까지의 모든 숫자의합계를 반환하는 메서드를 구현 - 순차 스트림에 parallel() 메서드를 호출하면 기존의 함수형 리듀싱 연산(숫자 합계 계산)이 병렬로 처리 - 반면에 sequential() 메서드를 호출하면 순차 스트림으로 변경 - seque.. 더보기 Stream 기능 1. 필터링 - 프레이케이트로 필터링 → 프레디케이트(return boolean)를 인수로 받아 일치하는 모든 요소를 포함하는 스트림을 반환 1 2 3 4 5 6 7 List vegetarianMenu = Dish.menu.stream() .filter(Dish::isVegetarian) .collect(toList()); System.out.println(vegetarianMenu); // [french fries, rice, season fruit, pizza] - 고유 요소 필터링 → 스트림은 고유 요소로 이루어진 스트림을 반환하는 distinct 메서드 지원 1 2 3 4 5 6 7 List numbers = Arrays.asList(1, 2, 1, 3, 3, 2, 4); numbers.strea.. 더보기 Stream 기본 1. 스트림이란 - 자바 8 API에 추가된 기능 - 선언형으로 컬렉션 데이터 처리 → 데이터 처리 임시 구현 코드 대신 질의로 표현 - 스트림은 데이터 컬렉션 반복을 멋지게 처리하는 기능 - 멀티 스레드 코드를 구현하지 않아도 데이터를 투명하게 병렬로 처리 가능 - 고수준 빌딩 블록: filter, sorted, map, collect 등 → 특정 스레딩 모델에 제한되지 않고 자유롭게 어떤 상황에서 사용 가능 - 데이터 처리 과정을 병렬화하면서 스레드와 락을 고려하지 않을 수 있음 - 특징 1. 선언형: 더 간결하고 가독성 향상 2. 조립가능: 유연성 향상 3. 병렬화: 성능 향상 - 스트림이란 데이터 처리 연산을 지원하도록 소스에서 추출된 연속된 요소 - 스트림 중요 특징 1. 파이프라이닝(Pipel.. 더보기 lambda 1. 특징 - 익명: 구현해야 할 코드 감소 - 함수: 메서드와 달리 특정 클래스에 종속되지 않음, 메서드 처럼 파라미터 리스트, 바디, 반환 형식 가능한 예외 리스트를 포함 - 전달: 람다 표현식을 메서드 인수로 전달, 변수로 저장 가능 - 간결성: 코드 간결화 2. 람다 표현식의 구성 - 파라미터 리스트. - 화살표: 람다의 파라미터 리스트와 바디를 구분. - 람다 바디: 반환값. 기본 표현식: (parameters) -> expression 블록 스타일: (parameters)-> { statements; } 3. 람다 사용 3.1 함수형 인터페이스(@FunctionalInterface) 정의: 정확히 하나의 추상 메서드를 지정하는 인터페이스 사용: 전체 표현식을 함수형 인터페이스의 인스턴스로 취급.. 더보기 final / static final - final 마지막이라는 의미로 java에서 final 키워드는 상수, 메소드, 클래스를 정의한 뒤 변경되지 않게 합니다. - static 단어 그대로 정적이라는 의미로 클래스 멤버를 선언할 때 사용합니다. 1. 메소드에 사용 : 오버라이딩 불가능 2. 클래스에 사용 : 상속 불가능 3-1. 상수에 사용 : 선언 후 한번 값을 정의하면 변경 불가능 3-2. 클래스 상수에 사용 클래스에 선언된 상수로 선언 시 값을 초기화해야 합니다. 클래스 상수로 선언 시 static 키워드를 사용하지 않으면, 클래스의 모든 인스턴스에 값이 복제되어 결과적으로 실행 시 필요한 메모리를 증가시킵니다. 또, 정적이 아닐 경우 다른 값을 가질 수 있다는 것을 암시하기 때문에 static 키워드로 동일한 값을 가지도록 강제성을.. 더보기 Map to Json, Json to Map + ObjectMapper + Gson - Map to Json 아래와 같이 Map의 Entry를 이용하여 변환합니다. - Json to Map ObjectMapper를 이용하여 변환했는데, Map Struct도 사용할 기회를 노리고 있습니다. - Map to Json (Gson) gson은 String으로 반환해주어 JSONParser를 사용하여 파싱 했습니다. - Json to Map (Gson) json형태의 String과 type만 있으면 손쉽게 변환이 가능합니다. 아래와 같이 와일드카드로 받아 사용하면 공통으로 사용할 수 있습니다. gson 변환에 필요한 Type과 반환받은 JSONObject에서 필요한 element를 get 하여 사용합니다. 호출 시에는 아래와 같이 이용할 수 있습니다. + @SuppressWarnings는 Map.. 더보기 SimpleDateFormat 사용법 및 UTC 관련 기존에 년-월-일까지 받아서 포맷을 변경했었는데, 추가로 시:분:초까지 처리하게 되어 신규 포맷으로 생성했습니다. 그런데 전달받은 시간이 UTC가 추가되어 있어 simpleDateFormat으로 포맷했을 때는 아래와 같이 정상적으로 변경되지만 fullDateFormat으로 포맷했을 때는 null이 반환되었습니다. UTC 타임을 제거하도록 함수를 만들어 제거해서 사용했습니다. 이러한 현상의 원인은 보시는 바와 같이 simpleDateFormat에서는 시간을 별도로 처리하지 않기 때문에 Date형식으로 출력한 것을 보면 00:00:00으로 지정되어 있어 변환이 되지만 fullDateFormat으로 포맷하려고 할 경우 시간 형태를 SimpleDateFormat이 인식하지 못하여 발생한 문제였습니다. 그냥 Lo.. 더보기 이전 1 2 다음