전체 글

우아한테크코스 5기 BE 에단 Github : https://github.com/cookienc
[자료구조] 해시 1. 해시 데이터를 빠르게 추가하거나 제거하도록 하는 데이터 구조 키(key)와 값(value)를 가지고 있음 → 키가 주어지면 평균 O(1)의 속도로 값을 찾을 수 있음 2. 해시함수 속도가 빠름 데이터의 속성 두개가 같으면 같은 값을 반환해야 함 동일한 상황일 때 항상 같은 값을 반환해야 함 새로 실행하면 객체가 같아도 다른 값이 나올 수 있음 → 객체들은 실행할 때마다 다른 주소에 저장되기 때문 충돌(collison)이 발생하지 않도록 만들어야 함 충돌: 서로 다른 값을 가진 키가 일치하는 경우 해시의 크기를 홀수로 설정(% 연산으로 다양한 값이 나오게 함) 해시의 크기를 소수로 설정 해시 함수의 반환 값을 hashcode라고 함 → 해시 테이블의 인덱스를 결정 해시코드는 최대한 ..
[자료구조] 연결 리스트(Linked List) 1. 정의 포인터를 사용하여 여러 개의 노드를 연결하는 자료 구조 배열의 단점(데이터 추가, 삭제시 shift 비용 발생)을 해결 각각의 노드들은 다음 노드를 가리키는 포인터, 자신의 값을 가지고 있는 데이터를 가리키는 포인터 2개로 구성 마지막 노드의 다음 노드는 없으므로 null을 가리키게 된다. head라는 포인터는 첫번째 노드의 주소를 가지고 있다. 힙에서는 연결 리스트의 head만 알고 있기 때문에 head.next를 이용하여 연결리스트를 탐색한다. 1.1 배열과 비교 배열 논리적 저장 순서와 물리적 저장 순서가 일치 찾고자 하는 원소의 인덱스를 알고 있으면 O(1)으로 원소에 접근 가능 → Random Access 가능 삭제와 삽입시 빈 공간이 ..
[자료구조] 스택과 큐 1. 정의 1. 스택 Stack : 쌓는다는 의미 → 차곡차곡 쌓는 자료구조 LIFO : Last In First Out 구조 top에 있는 자료가 가장 최신의 자료 한쪽에서 자료의 삽입과 삭제가 반복 됨 1.2 큐 Queue : 줄서서 기다린다는 의미 → 먼저 들어오는게 먼저 나가는 자료 구조 FIFO : First In First Out 구조 큐의 양끝에서 자료 추가와 삭제가 이루어짐 2. 구현 2.1 스택 class Stack { static class Node { private T data; private Node next; public Node(T data) { this.data = data; } } private Node top; //데이터 제거 public T pop(..
Chapter5 제네릭 1. 로 타입은 사용하지 말라 제네릭 타입은 로 효현 하며, 제네릭 타입을 정의하면, 동시에 로타입도 같이 형성된다. ex) List, List 가 없는 로 타입을 사용했을 때는 컴파일 시에 오류가 잡히지 않고, 런타임 때 오류가 잡힌다 오류는 빨리 잡힐 수록 좋기 때문에 되도록이면 제네릭 타입을 사용해야 한다. 제네릭 타입은 로 타입보다 안정성이 뛰어나다. 2. 비검사 경고를 제거하라 비검사 경고는 런타임에 ClassCastException이 발생할 수 있음을 알려준다. 최대한 없애도록 노력하고, 경고가 발생했는데 없애는 방법을 모른다면 @SuppressWarings("unchecked")를 사용하여 경고를 숨겨라 @SuppressWarings은 최대한 좁은 범위에서 쓰여야 한다..
Chapter4 클래스와 인터페이스 1. 클래스와 멤버의 접근 권한을 최소화하라 접근 권한을 최소화 함으로써 소프트웨어의 재사용성을 높이고, 성능 최적화에 도움을 줌. public 같은 경우, 외부 API가 되기 때문에 쉽게 고치기가 어려운 반면 private는 내부 구현이므로 언제든지 수정이 가능 함 따라서 최소한의 public API를 설계해야 함 2. public 클래스에서는 public 필드가 아닌 접근자 메서드를 사용하라 public class에서는 인스턴스 필드를 private로 바꾸고 메서드를 통해 접근을 해야 한다. /* public class Point { public double x; public double y; //생성자 생략 } */ public class Point { priva..
Chapter3 모든 객체의 공통 메서드 1. equals는 일반 규약을 지켜 재정의하라 반사성(reflexitivy) : null이 아닌 모든 참조값 x에 대해, x.equals(x)는 true이다. 대칭성(symmetry) : null이 아닌 모든 참조값 x, y에 대해, x.equals(y)가 true이면 y.equals(x)도 true이다. 추이성(transitivity) : null이 아닌 모든 참조값 x, y, z에 대해, x.equals(y)가 true이고, y.equals(z)가 true이면, x.equals(z)가 true이다. 일관성(consistency) : null이 아닌 모든 참조값 x, y에 대해, x.equals(y)를 반복해서 호출하면 항상 true를 반환하거나 항상 fals..
Oauth와 SpringBoot 이 책을 실습하던 중에 에러가 생겼다. 바로 구글 소셜로그인을 Oauth로 구현을 했는데, 다음과 같은 오류가 발생했다. 아니 왜?? 구글링을 해보니 controller가 같은 주소로 요청하는게 있어서 그렇다는데, 눈을 씻고 찾아봐도 안보였다. 삽질을 계속하길 2시간 째, 어딘가 오타가 있는데 내가 못찾는거 같아서, 최후의 방법으로 다른 블로거 리뷰에 나온 코드를 복붙!!을 해보았다. 하지만 기대와는 달리 실패... 그러다가 문득 로그가 생각나서 한번 찾아보니 다음과 같은 내용이 기록되어 있었다. ( 왜 이제 봤지? ) 2022-02-04 21:54:46.115 WARN 17604 --- [nio-8080-exec-5] o.h.engine.jdbc.spi.SqlExcept..
Chapter2 객체 생성과 파괴 1. 생성자 대신 정적 팩터리 메서드를 고려하라 1.1 장점 이름을 가질 수 있음 → 반환될 객체의 특성을 쉽게 묘사할 수 있음 호출될 때마다 인스턴스를 새로 생성하지는 않아도 됨 → 객체의 생성 비용을 줄일 수 있음 반환 타입의 하위 타입 객체를 반환할 수 있음 → 유연성↑ 반환 타입의 하위 타입이기만 하면, 입력 매개변수에 따라 매번 다른 클래스의 객체를 반환할 수 있음 → 유연성↑ 정적 팩터리 메서드를 작성하는 시점에는 반환할 객체의 클래스가 존재하지 않아도 됨 → interface안에 static 메서드를 구현하여 가능하게 함 1.2 단점 상속을 하려면 public이나 protected 생성자가 필요하므로 정적 팩터리 메서드만으로 하위 클래스를 만들 수 없음. 정..
쿠엔크
기러기는 기록기록