학습/CS

· 학습/CS
백엔드 개발을 하면서 Optional이 자주 쓰인다. 기능들에 대해 잘 아는 것도 좋지만, Optional에 대해 어느 정도의 이해도를 가지고 용도에 맞게 사용하는지도 중요하다는 생각이 들어서 정리해보겠다. Optional이란?Optional은 Java8 버전부터 도입되었으며, '값이 없는 경우'를 표현하기 위한 용도로 사용되는 클래스이다. Optional 클래스는 Java 제네릭을 사용하여 만들어져 있으므로, 어떤 타입의 객체라도 값이 없을 수 있는 겨우에 Optional을 사용하여 표현할 수 있다. 그러면, Optional이 왜 만들어졌고, 어떨 때 사용하면 되는지 알아보자. Optional 사용 목적API 공식 문서에 보면 Optional을 만든 의도가 다음과 같이 적혀있다. API Note :Op..
· 학습/CS
서버가 클라이언트를 인증하는 방식은 대표적으로 쿠키, 세션, 토큰 3가지 방식이 있다. 각각의 특징에 대해서 간단하게 살펴보자. 1. Cookie (쿠키) 쿠키는 Key-Value 방식으로 저장되는 문자열이다. 클라이언트가 어떤 웹 사이트를 방문하면, 그 사이트에 연결되어 있는 서버를 통해 클라이언트의 브라우저에 저장되는 작은 기록 장치이다. 각각 사용자의 브라우저에 저장되니 고유 정보 식별이 가능한 것이다. 동작 순서 1. 브라우저(클라이언트)가 서버에 접속 요청 2. 서버는 클라이언트의 요청에 대한 응답을 작성하고, 응답 헤더에 클라이언트의 정보를 담아서 보낸다. 3. 이 후, 클라이언트는 서버에 요청을 보낼 때마다 저장된 쿠키를 요청 헤더에 담는다. => 서버는 쿠키에 담긴 정보를 바탕으로 클라이언..
· 학습/CS
>>>>>>> 소스코드.git 이중 연결 리스트 이중 연결 리스트를 구현한 MyLinkedList 클래스는 단일 연결 리스트를 사용한다. 즉, 각 요소는 다음 요소에 대한 참조만 포함하고 MyLinkedList 객체 자체는 첫 번째 노드에 대한 참조만 가지고 있다. 하지만 여기에서 LinkedList 클래스에 대한 문서를 읽어보면 다음과 같은 내용이 나온다. List와 Deque 인터페이스를 구현하는 이중 연결 리스트 구현⋯⋯ 모든 연산은 이중 연결 리스트와 같이 동작합니다. 리스트의 인덱스를 활용하는 연산은 시작 또는 끝부터 리스트를 순회합니다. 이때 어느 것이든 특정 인덱스에서 가까운 것을 선택합니다. 이중 연결 리스트를 잘 모른다면 요약한 다음 내용을 확인하자. 각 노드는 다음 노드와 이전 노드에 ..
· 학습/CS
>>>>>>> 소스코드.git 시작에 요소를 추가하는 연산은 LinkedList 클래스가 ArrayList 클래스보다 빠르다. 하지만 요소를 끝에 더하는 것은 LinkedList가 더 느리다. 여기에서는 전체 리스트를 순회하여 끝에 요소를 추가하며 선형이다. 따라서 n번 추가하는 연산의 전체 시간은 이차가 되리라 기대한다. 하지만 그렇지 않다. 소스 코드를 보자. public static void profileLinkedListAddEnd() { Timeable timeable = new Timeable() { List list; public void setup(int n) { list = new LinkedList(); } public void timeMe(int n) { for (int i = 0; ..
· 학습/CS
>>>>>>> 소스코드.git 연결 리스트에서는 기존 요소를 시프트할 필요 없이 시작에 새로운 요소를 추가할 수 있다. 따라서 LinkedList 시작에 n번 추가하는 연산의 전체 시간은 선형이다. public static void profileLinkedListAddBeginning() { Timeable timeable = new Timeable() { List list; public void setup(int n) { list = new LinkedList(); } public void timeMe(int n) { for (int i = 0; i < n; i++) { list.add(0, "a string"); } } }; int startN = 128000; int endMillis = 2000;..
· 학습/CS
>>>>>>> 소스코드.git ArrayList의 시작에 새로운 요소를 추가하는 연산의 성능을 테스트한다. 앞의 분석(ArrayListAddEnd)에 근거하여 각 메서드는 선형이여야 한다. 이는 다른 요소들을 오른쪽으로 시프트하기 때문이다. 따라서 n번 추가 연산은 이차가 된다. public static void profileArrayListAddBeginning() { Timeable timeable = new Timeable() { List list; public void setup(int n) { list = new ArrayList(); } public void timeMe(int n) { for (int i = 0; i < n; i++) { list.add(0, "a string"); } } }..