$ sudo mysql_secure_installation Would you like to setup VALIDATE PASSWORD plugin? N New password: rada Re-enter new password: rada Remove anonymous users? Y Disallow root login remotely? N Remove test database and access to it? Reload privilege tables now? Y
MySQL 패스워드 설정
1 2 3 4 5 6
$ sudo mysql mysql> SELECT user,authentication_string,plugin,host FROM mysql.user; mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITHmysql_native_password BY 'rada'; mysql> FLUSH PRIVILEGES; mysql> SELECT user,authentication_string,plugin,host FROM mysql.user; mysql> exit
설정한 패스워드를 입력하여 접속
1 2
$ mysql -u root -p Enter password: rada
외부접속 설정
1
$ sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf
bind-address를 127.0.0.1을 0.0.0.0 으로 변경
bind-address = 0.0.0.0 (모든 IP에서 접속가능)
외부접속 패스워드 설정
1
mysql> grant all privileges on *.* to root@'%' identified by 'rada';
@SuppressWarnings(value = {"unused", "rawtypes"})// 키 = 값 배열 @SuppressWarnings(value = "unused")// 값이 하나인 경우 배열 생략 가능 @SuppressWarnings({"unused", "rawtypes"})// 속성이 value 하나인 경우 키 생략 가능
@CustomAnnotation(key1 = "value1", key2 = {"value2", "value3"})// 속성이 여러개인 경우 키를 여러개 사용
Target 설정
애노테이션을 사용할 수 있는 대상을 설정
ElementType 열거형 상수 사용
ElementType
범위
TYPE
클래스, 인터페이스, 애노테이션, 열거형
FIELD
필드(멤버 변수), 열거형 상수
METHOD
메소드
PARAMETER
메소드의 파라미터
CONSTRUCTOR
생성자
LOCAL_VARIABLE
로컬 변수
ANNOTATION_TYPE
애노테이션
PACKAGE
패키지
Retention 설정
애노테이션 정보를 언제까지 유지할 것인지 설정
RetentionPolicy 열거형 상수 사용
reflection: java.lang.reflect API
RetentionPolicy
범위
SOURCE
컴파일러가 사용. 빌드된 .class 파일에는 포함되지 않음
CLASS
.class 파일에 포함되나, VM이 사용하지 않으며 reflection에 정보를 포함하지 않음
publicstaticvoidmain(String[] args){ File src = new File("C:/Windows/explorer.exe"); File dst = new File("C:/temp/explorer.exe"); try (FileInputStream in = new FileInputStream(src); FileOutputStream out = new FileOutputStream(target); BufferedInputStream buffIn = new BufferedInputStream(in); BufferedOutputStream buffOut = new BufferedOutputStream(out);) { long start = System.nanoTime(); copyStream(in, out); System.out.println(System.nanoTime() - start);
boolean allMatch(Predicate<? super T> predicate) : 스트림의 모든 요소가 Predicate를 만족하면 true를 반환
boolean anyMatch(Predicate<? super T> predicate) : 스트림의 요소 중 하나라도 Predicate를 만족하면 true를 반환
boolean noneMatch(Predicate<? super T> predicate) : 스트림의 요소 중 하나라도 Predicate를 만족하지 않으면 true를 반환
집계
기본 집계 메소드
기본형 스트림의 통계 : count(), sum(), average(), min(), max()
T 타입 스트림의 통계 : count(), min(), max() (min, max의 경우 Comparator 필요)
reduce() 메소드
Optional<T> reduce(BinaryOperator<T> accumulator) : accumulator를 수행하고 Optional<T> 타입 반환
T reduce(T identity, BinaryOperator<T> accumulator) : identity를 초기값으로 하여, accumulator를 이용해 집계 연산
<U> U reduce(U identity, BiFunction<U, ? super T, U> accumulator, BinaryOperator<U> combiner) : combiner를 이용해 병렬 스트림 결합
java.util.Optional<T>
T 타입 객체의 null 여부에 따라 다르게 동작하는 Wrapper 클래스
Optional 클래스의 정적 메소드를 이용해 Optional 객체 생성
public static <T> Optional<T> of(T value) : value가 null인 경우 NullPointerException을 발생시키는 Wrapping 메소드
public static <T> Optional<T> ofNullable(T value) : value가 null인 경우 empty()의 결과를 리턴하는 Wrapping 메소드
public static <T> Optional<T> empty() : 값이 비어있는 Optional 객체를 리턴
Optional 객체를 처리하는 메소드
public T get() : Optional의 값을 리턴하며, null일 경우 NullPointerException 발생
public void ifPresent(Consumer<? super T> consumer) : Optional 값이 null이 아닐 경우 consumer를 이용해 소비한다.
public T orElse(T other) : Optional의 값이 null일 경우 other를 반환한다.
public T orElseGet(Supplier<? extends T> other) : Optional의 값이 null일 경우 Supplier를 통해 공급받은 값을 반환한다.
public <X extends Throwable> T orElseThrow(Supplier<? extends X> exceptionSupplier) throws X : Optional의 값이 null일 경우 exceptionSupplier에서 공급받은 예외를 throw
반복
forEach() 메소드로 스트림 요소를 순차적으로 Consumer<T>를 이용해 소비
void forEach(Comsumer<? super T> action) : 스트림의 각 요소를 action으로 소비
조사
첫번째 요소 또는 아무 요소를 조사하는 최종 처리 메소드. 필터링 등으로 인해 스트림에 요소가 남아있는지 확인할 수 있다.
Optional<T> findFirst() : 스트림의 첫 요소 또는 empty Optional 객체를 반환
Optional<T> findAny() : 스트림의 아무 요소나 가지는 Optional 객체를 반환
수집
필요한 요소를 수집하여 새로운 Collection으로 구성하여 반환하는 메소드
collect() 메소드
<R, A> R collect(Collector<? super T, A, R> collector) : collector를 이용해 새로운 Collection R에 담아 반환
<R, A> R collect(Supplier<R> supplier, BiConsumer<R, ? super T> accumulator, BiConsumer<R, R> combiner) : supplier를 통해 공급된 컨테이너 R에 accumulator를 이용해 T값을 저장. 병렬처리 스트림에 사용될 경우 combiner를 이용해 스레드별 컨테이너 R을 통합
public static <T, K> Collector<T, ?, Map<K, List<T>>> groupingBy(Function<? super T, ? extends K> classifier) : classifier를 key값으로, 해당하는 값의 목록을 List인 value로 가지는 Map으로 스트림을 수집하는 Collector를 반환
public static <T, K, A, D> Collector<T, ?, Map<K, D>> groupingBy(Function<? super T, ? extends K> classifier, Collector<? super T, A, D> downstream) : List 대신 downstream collector로 수집
public static <T> Collector<T, ?, Map<Boolean, List<T>>> partitioningBy(Predicate<? super T> predicate) : predicate 결과를 key로, 해당하는 값의 목록을 List value로 가지는 Map으로 스트림을 수집하는 Collector를 반환
public static <T, A, D> Collector<T, ?, Map<Boolean, D>> partitioningBy(Predicate<? super T> predicate, Collector<? super T, A, D> downstream)) : List 대신 downstream collector로 수집