Memo 49

[Spring] @RestControllerAdvice

@ExceptionHandler @Target(ElementType.METHOD) @Retention(RetentionPolicy.RUNTIME) @Documented public @interface ExceptionHandler { ... } @ExceptionHandler은 던져진 예외를 잡아서(catch) 처리해주는 메서드에 붙는 애너테이션이다. @ControllerAdvice @Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) @Documented @Component public @interface ControllerAdvice { ... } @ExceptionHandler, @ModelAttribute, @InitBinder 가 적용된 ..

Memo/짧은 메모 2022.10.26

[JAVA] Final keyword

final 상수를 의미하는 키워드. 하지만 final이 붙는 곳에 따라 세부적인 의미가 조금은 달라진다. 변수 변수에 final 키워드가 붙으면 '한 번 할당된 값은 변경 불가'라는 의미를 갖는다. 클래스 클래스에 final 키워드가 붙으면 '확장 불가, 즉 상속 불가'의 의미가 생긴다. 메서드 메서드에 final 키워드가 붙으면 '확장 불가, 즉 오버라이딩 불가'의 의미가 생긴다.

Memo/짧은 메모 2022.10.24

[Algorithm] 효율적인 피보나치 수열 구하기(DP)

1. 반복문 혹은 재귀함수를 이용하여 같은 문제 해결을 반복함. (재귀는 꼬리 재귀 형식으로 최대한 이용하자) 2. 해결된 문제의 답들을 저장해 둘 자료구조를 준비한다. ArrayList가 인덱스가 존재하여 가장 만만하다. 3. 반복문의 심층에서 탈출할 수 있도록 조건을 구성하고 미리 나올 심층 결과를 ArrayList에 넣어 탈출에 추가적으로 이용한다. 4. 심층부터 반복문을 탈출하며 ArrayList에 답을 저장해간다. 아래 코드의 시간 복잡도는 O(n)이 된다. (재귀함수를 이용한 기본 피보나치 함수는 O(2^n)이다.) public class Solution { public int fibonacci(int num) { //구한 값을 저장해둘 List 생성 ArrayList remember = ne..

Memo/짧은 메모 2022.10.23

[JAVA] Optional

Optional >NPE(NullPointerException) 말 그대로 null 값이 할당되면 안되는 곳에 예상하지 못한 null 값이 할당되는 경우 발생하는 예외이다. 이를 방지하기 위해서는 null 값이 할당될 경우를 막아야하는데, 변수가 많을 경우 코드가 굉장히 복잡해진다. 다른 방법으로 아예 null을 할당할 수 있는 타입을 사용하면 NPE를 피할 수 있다. Wrapper 클래스가 null을 할당할 수 있는 대표적인 타입이며, 그중에서도 Optional 클래스를 알아두면 좋다. >Optional 객체 생성 -Optional.empty() : 값이 null인 경우 해당 메서드로 Optional의 객체를 생성할 수 있다. -Optional.of() : 값이 null이 절대 아닌 경우, 해당 메서드..

Memo/짧은 메모 2022.10.23

[Algorithm] 분할 정복법(Divide Conquer)

>분할 정복법 최종 해를 구하기 위해서 최종 해의 절반씩 분할해가며 값을 구하는 방법 >거듭 제곱 구하기에 응용 Math.pow를 사용하지 않고 거듭제곱을 구하려면, 기본적으로 반복문을 exponent만큼 실행시켜 base를 곱해주면 될 것이다. 따라서 시간 복잡도는 O(n)이 될 것이다. 하지만 분할 정복법을 응용하여 문제를 해결한다면 시간 복잡도를 O(lonN)으로 획기적으로 단축시킬 수 있다. >그림 설명 아래 처럼 지수가 홀수일 때, 짝수일 때로 경우가 나뉠 수 있다. 기본적으로는 최종 해의 지수의 절반인 해를 두 개 구하는 것이다. (분할 정복법) 이를 구현하기 위해서는 재귀 함수가 적합할 것이다. 참고 링크 https://about-tech.tistory.com/entry/Algorithm-%..

Memo/짧은 메모 2022.10.19

[JAVA] boxed()_Stream

>boxed( ) Stream의 중간 연산에 사용되는 메소드이다. 기본 자료형을 Wrapper 클래스 형으로 만들때 우리는 박싱(boxing)이라고 한다. boxed()메서드도 마찬가지이다. 기본 자료형을 요소로하는 IntStream 따위를 Wrapper 클래스 형을 요소로 하는 Stream로 전환하는 것이다. Array to List 혹은 List to Array로 변환하는 방법에 Stream을 사용한다면 많이 접할 것이다. Collection에는 기본 자료형을 담지 못하고 Wrapper 클래스로 변환하여 담을 수 있기 때문이다. 참고 링크 https://okky.kr/articles/1004937

Memo/짧은 메모 2022.10.19

[JAVA] indexOf, contains의 시간복잡도 문제(미해결)

궁금증 : 알고리즘 문제를 풀다보면 주어진 조건이 시간 복잡도를 제한한다는 것을 암시하는 경우가 있다. : 때문에 이중 반복문으로 문제를 풀어야하지만 이중 반복문을 못 쓸 때가 있다. : 그런데 이런 경우에 indexOf() 메서드나 contains() 메서드를 문제가 해결된다. : indexOf(), contains() 모두 다 메서드 내부적으로 순회를 해야하는 것이라고 생각했고 내가 아는 한에서는 시간 복잡도 또한 O(n)이라고 알고 있다. : 그런데 왜 해결되는 것일까?? List.indexOf( ) : 인자로 주어진 값이 List에 존재하면 해당 인덱스를, 존재하지 않으면 -1을 반환하는 메서드 : indexOf 메서드를 조건식의 조건으로 쓰는 경우, IDE는 보통 contains( ) 메서드를 ..

Memo/짧은 메모 2022.10.19