[Java] hashCode와 Equals를 함께 재정의하는 이유
·
JAVA-기초/JAVA기본
Set과 Map의 타입이 Wrapper Class가 아닌 Object를 받을 때 중복 검사는 어떻게 진행하는가?➕ hashCode() 메서드를 오버라이딩하여 리턴된 해시코드 값이 같은지 판단합니다. 값이 다르다면 다른 객체로 판단하고, 해시코드 값이 같다면 equals()메서드를 오버라이딩 하여 다시 비교합니다.위의 개념을 위해서는 동일성과 동등성을 먼저 알아야한다. **동일성** : 두 개의 객체가 완전히 하나의 같은 객체인지 판단하는 것. 즉 , 메모리에 저장된 주소공간이 완전히 같을 경우 동일성이 보장된다.  **동등성** : 두 객체의 주소공간이 달라도 단순히 가지고 있는 값만 같다면 동등성이 보장된다. 이는 단순 문자열(원시형)과 객체로 생성한 값 사이의 차이점과 동일하다.그 다음으로는 equa..
[백준 2164-Java ] 카드2 + Queue에 대한 설명
·
문제 풀이/백준 문제풀이
위 문제는 Java의 Queue관련 메서드를 공부한 사람이라면 간단히 풀 수 있는 문제다. 내가 먼저 정리해둔 Queue인터페이스의 메서드를 알아보자. LinkedList와 ArrayDeque는 Deque 인터페이스의 상속을 받아 양쪽에서 접근이 가능하다. 주로 LinkedList를 사용하여 큐를 구현하며 ArrayDeque가 더 효율이 좋은 경우도 있다. LinkedList는 LinkedArray처럼 모든 인덱스가 노드(위치)와 밸류(값)을 갖고 있어 중간에 값을 추가하거나 삭제할 때 더 효율적이다. ArrayDeque는 순차적인 검색을 할 때 더 효율적이다. 이를 알고 사용하면 더 효율적인 코드를 만들어 낼 수 있을 것이다. 그럼 문제를 살펴보자. 이번 문제는 매우 단순하다. https://www.a..
[백준 - 11659/ Java] 구간합 구하기
·
문제 풀이/백준 문제풀이
문제를 풀기 전에 우선 구간합을 구하는 방법을 알아야한다. 하지만 또! 구간합을 구하기 전에 합 배열을 만들줄 알아야 한다. ㅎㅎ 알아야하는 이유는 다음과 같다. 반복문으로 해당 문제를 풀었을때에는 시간 초과가 발생했다. 주어진 질의의 개수가 최대 10만개이다. 수의 개수도 최대 10만개이다. 최악의 경우에는 10만개의 수를 가진 배열안에서 10만번의 질의를 반복문을 돌려야한다. 이때 반복문을 통한 시간복잡도 O(n^2)로는 해결할 수 없다. 이 때 구간합으로 문제를 해결한다면 누적배열합을 생성하는데 O(N)이 들고 M번 반복하므로 O(N+M)의 시간복잡도를 갖는다. 해당 문제는 1초안에 풀어야하는데 구간합 알고리즘을 모른다면 반복문으로 통해 최악의경우 1억회이상의 연산을 하기때문에 시간내에 풀기 힘들것..
[Java - Spring Security6] Authentication(인증)과 관련된 Provider와 manager
·
Spring/Security6
이전의 내용에서는 1번 Config파일에서 인증을 거쳐야 하는 경로를 지정하거나 6번에서 비밀번호를 암호화하여 비밀번호 일치여부를 확인하는 과정에 대해서 배웠다! 오늘 공부해볼 내용은 3,4 과정이다. 유저는 로그인 하기 위한 세가지 방법을 진행할 수 있다. 첫 번째, 유저의 아이디와 비밀번호로 인증 요청 두 번째, OAuth2를 인증 요청 세 번째, OTP인증 요청 요청은 Security Filter가 인터셉트하여 인증을 위한 ProviderManager의 authenticate 메서드를 호출한다. ProviderManager는 Audentication Provider를 Implement한 클래스들을 모두 호출하여 인증성공을 반환하는 클래스가 있는지 확인한다. 우리는 Authentication Prov..
[Java - Spring Security6] PasswordEncoder와 BCryptPasswordEncoder, 그 이외의 암호화 클래스들
·
Spring/Security6
목차 1. 암호화 표준 2. 비밀번호 검증 순간의 코드 3. 해싱과 PasswordEncoder로 비밀번호가 인증되는 과정 4. PasswordEncoder의 메서드들 5. PasswordEncoder의 다양한 Encoder들 6. BCryptPasswordEncoder적용하기 1. 암호화 표준 암호화 표준 - 어느 것이 적합할까? Encoding 데이터를 한 형식에서 다른 형식으로 변환 어떠한 기밀성도 포함하지 않는다. 누구든지 디코딩 가능, 완전 가역적 비밀번호 관리에는 적합하지 않다. 예시 ) ASCII, BASE64, UNICODE Encryption 기밀성을 보장 데이터를 암호화하려고 할 때 특정 알고리즘을 따르고 비밀 키를 제공한다. 복호화하는데 필요한 것이 비밀 키다. 또한 동일한 알고리즘이..
[Java - Spring Security6] Config파일 해석 및 직접 FilterChain만들기
·
Spring/Security6
우선 내 컨트롤러 다이어그램을 먼저 보여주자면! Controller Diagram 모든 컨트롤러는 REST API로 호출하는 방식이며 Spring Security 프레임워크가 적용되어있다. 모든 API호출 경로는 Security에서 인증 및 인가를 받아야 정상적인 응답을 받을 수 있다. Security는 Filter를 통해 코드가 구현되어 있다. 위 컨트롤러의 경로로 요청을 보낼 경우 나타나는 Security의 기본 창 아이디와 비밀번호를 자격 인증을 요구하고 있다. 위와 같이 이루어지는 Security 6에서 제공하는 기본 샘플을 먼저 살펴보자. 이 중 1번의 과정이 아래의 코드에 구현되어 있다. @Configuration(proxyBeanMethods = false) @ConditionalOnDefa..