java

Homebrew 설치 https://brew.sh 에서 Install Homebrew 설치 명령 복사 % /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" % echo 'export PATH=/opt/homebrew/bin:$PATH' >> ~/.zshrc # PATH 등록 % source ~/.zshrc homebrew 명령어 모음 참고 https://sukvvon.tistory.com/7 Telnet 설치 % brew install telnet git 설치 % brew install git % brew info git Java 11 설치 % brew tap adopt..
Collectors 클래스에 존재하는 정적 팩토리 메서드 (https://docs.oracle.com/javase/8/docs/api/java/util/stream/Collectors.html) 팩토리 메서드 반환 형식 비고 toList List 스트림 항목을 리스트로 수집 toSet Set 스트림 항목을 집합으로 수집 toCollection Collection 스트림의 모든 항목을 발행자가 제공하는 컬렉션으로 수집 counting Long 스트림 항목 수 계산 summingInt Integer 스트림 항목의 정수 프로퍼티 값 더함 averagingInt Double 스트림 항목의 정수 프로퍼티 평균값 계산 summarizingInt IntSummaryStatistics 최댓값, 최솟값, 합계, 평균 등..
자바 8의 함수형을 이용하면 가독성 있는 한 줄의 코드로 그룹화를 구현할 수 있다. 예를 들어 고기를 포함하는 그룹, 생선을 포함하는 그룹, 나머지 그룹으로 메뉴를 그룹화할 수 있다. 팩토리 메서드 Collectors.groupingBy를 이용하자. Map dishesByType = menu.stream().collect(groupingBy(Dish::getType)); {FISH=[parawns, salmon], OTHER=[french fries, rice, season fruit, pizza], MEAT=[pork, beef, chicken]} Dish.Type과 일치하는 모든 요리를 추출하는 함수를 groupingBy 메서드로 전달. 이 함수를 기준으로 스트림이 그룹화되므로 이를 분류 함수(cla..
컬렉터란 무엇인가? Collector 인터페이스 구현은 스트림의 요소를 어떤 식으로 도출할지 지정한다. 명령형 코드에서는 문제 해결하는 과정에서 다중 루프와 조건문을 추가하며 가독성과 유지보수성이 크게 떨어진다. 반면 함수형 프로그래밍에서는 필요한 컬렉터를 쉽게 추가할 수 있다. 고급 리듀싱 기능을 수행하는 컬렉터 collect로 결과를 수집하는 과정을 간단하면서도 유연한 방식으로 정의할 수 있다는 점이 컬렉터의 최대 장점이다. 스트림에 collect를 호출하면 스트림의 요소에 (컬렉터로 파라미터화된) 리듀싱 연산이 수행된다. 내부적으로 리듀싱 연산이 일어나는 모습 명령형 프로그래밍에서는 우리가 직접 구현해야 했던 작업이 자동으로 수행된다. collect에서는 리듀싱 연산을 이용해서 스트림의 각 요소를 ..
자바 5에서 제공하는 Executor 프레임워크와 스레드 풀을 통해 자바는 스레드의 힘을 높은 수준으로 끌어올렸다. 바로 태스크 제출과 실행을 분리하여 제공했기 때문이다. 우리는 스레드 풀을 만들어 놓고, 스레드풀에 태스크만 제출하면 된다! 스레드의 문제점 ㅠㅠ 운영체제에 직접 접근한다. 생성비용이 비싸다. 운영체제 스레드의 숫자는 제한되어 있으며, 이 수를 초과해버리면 자바 애플리케이션이 예상치 못한 방식으로 크래시될 수 있다. (계속 스레드를 생성하는 상황은 절대 나오면 안된다.) 즉, 개발자가 직접 스레드를 다루기에는 신경쓸게 많다는 것이다. 만약에 다양한 기기에서 실행될 수 있는 프로그램을 만든다면 미리 하드웨어 스레드 개수를 추측하지 않는 것이 좋다. 주어진 프로그램에서 사용할 최적의 자바 스레..
로컬 환경 zookeeper 3대(localhost:2181, localhost:2182, localhost:2183) kafka broker 3대(localhost:9092, localhost:9093, localhost:9094) 프로듀서란?? 메시지를 생산(produce)해서 카프카의 토픽으로 메시지를 보내는 역할을 하는 애플리케이션, 서버 등을 모두 프로듀서라고 한다. 주요기능은 각각의 메시지를 토픽 파티션에 매핑하고 파티션의 리더에 요청을 보내는 것이다. 메시지를 보낼 때 키 값을 정해서 메시지를 보낼 수 있는데, 해당 키를 가진 모든 메시지를 동일한 파티션으로 전송할 수 있다. 키 값이 존재하지 않는다면, Round-Robin 방식으로 파티션에 균등 분배하게 된다. 1. 콘솔 프로듀서로 메시지..
2020/12/19 - [프로그래밍 노트/JAVA] - [JAVA] JVM 가상머신 메모리 구조 가비지 컬렉터(GC) 애플리케이션이 생성한 객체의 생존 여부를 판단하여, 더 이상 참조되지 않거나 null인 객체의 메모리를 해제시키며 메모리를 반납한다. (Heap의 재사용) Minor GC New/Young 영역에서 일어나는 Garbage Collection 새로 생성된 객체(Instance)는 Eden 영역에 위치한다. Eden 영역에서 GC가 한 번 발생한 후 살아남은 객체는 Survivor 영역 중 하나로 이동된다. 이 과정을 반복하다가 계속해서 살아남아 있는 객체는 일정시간 참조되고 있다는 뜻이므로 Old영역으로 이동시킨다. Eden 영역에 객체가 가득차게 되면 GC 발생 Survivor0 영역에 ..
Srping Validation Spring에서는 AOP와 같은 방식으로 더 편리하게 유효성검사를 할 수 있다. Validated 스프링에서는 유효성검사에 진입하게되는 지점에 @Validated라는 애노테이션을 사용하는 방법을 제공한다. 필요한 클래스나 메소드에 @Validated 어노테이션을 추가해서 사용한다. @Service @Validated public class UserService{ public User add(@NotNull User user){ } } 만약 제약조건에 위반되면 ConstraintViolationException이 발생하게 된다. (※ @ControllerExceptionHanlder를 사용하여 요긴하게 써먹을 수 있음. ConstrainoViolationException에서..
Vlidation은 데이터를 검증할 때 사용한다. 데이터 검증으 여러 계층에 걸쳐서 이루어지게 되는데, 이 과정으로 인해 문제점이 발생할 수 있다. 코드의 중복 검증로직 불일치로 인한 오류 이 문제를 해결하기 위해서 Java에서는 2009년부터 Bean Validation이라는 데이터 유효성 검사 프레임워크를 제공하고 있다. Bean Validation은 다양한 제약을 어노테이션을 사용하여 데이터를 검증할 수 있게 하였다. Bean Validation 1.0 (JSR-303) Bean Validation 1.1 (JSR-349) Bean Validation 2.0 (JSR-380) Hibernate Validator Hibernate Validator는 Bean Validation 명세에 대한 구현체이다..
링버퍼를 사용하면 디큐(deque)시 발생하는 요소 이동 문제를 해결할 수 있다. 2021/01/05 - [분류 전체보기] - 자바(JAVA)로 큐(Queue) 구현하기 public class IntQueue { private int max; private int num; private int[] que; private int front; private int rear; // 예외 : 큐가 비어 있음 class EmptyIntQueueException extends RuntimeException{ } // 예외 : 큐가 가득 참 class OverflowIntQueueException extends RuntimeException{ } public IntQueue(int capacity){ num = fr..
깡냉쓰
'java' 태그의 글 목록