전체 글 (69) 썸네일형 리스트형 LinkedBlockingDeque란? 연결 리스트 기반으로 구현된, "블로킹(Blocking)" 기능이 있는 양방향 큐(Deque)멀티스레드 환경에서 여러 스레드가 데이터를 안전하게 주고받을 때 쓰는 자료구조 "블로킹(Blocking)"이 핵심 무슨 뜻인가?일반 큐 : 비어있는데 꺼내려고 하면 예외가 나거나 null이 반환Deque normalQueue = new ArrayDeque();Integer value = novalQueue.pollFirst(); // 비어있으면 그냥 null 반환하고 끝 블로킹 큐 : 비어있으면 데이터가 들어올 때까지 그 스레드가 멈춰서(block) 기다린다.LinkedBlockingDeque blockingQueue = new LinkBlockingDeque();Integer value = blockingQue.. 실무에서는 Stack 클래스보다 Deque 인터페이스의 ArrayDeque를 스텍으로 쓰는 게 더 권장? 왜 Stack 클래스를 잘 안 쓰나?1. Stack은 사실 Vector을 상속받은 "레거시" 클래스public class Stack extends Vector { ...} Vector는 java 초창기(1.0)에 만들어진 클래스로, 지금은 거의 안 쓰인다. Stack이 이걸 상속받다 보니, 스택에는 필요 없는 기능들까지 전부 딸려온다. 스택은 원래 " 맨 위에서만 push/pop"하는게 정체성인데, Vector를 상속해서 get(index), add(index, value)처럼 스택 원칙을 깨는 기능도 다 열려버린다. 2. Vector는 내부적으로 동기화(Synchronized) 되어 있음멀티스레드 환경에서 안전하라고 모든 메서드에 락(lock)이 걸려 있는데, 대부분의 경우 멀티스레드 동기화가 필요 .. 락(lock)과 교착상태(Dead lock) 락(lock)이란?동시접근으로 인한 데이터 오염(Race Condition) 방지가 주 목적 예로 은행 계좌에서 잔액을 1증가시키는 코드를 생각해보자int balance = 0;void increment() { balance = balance + 1; // 3단계 과정으로 쪼개짐}// 1. balance 값을 읽는다 (0)// 2. 1을 더한다. (0 + 1 = 1)// 3. 결과를 balance에 저장한다. 두 스레드가 동시에 increment()를 호출하면스레드 A : balance 읽음 (0)스레드 B : balance 읽음 (0) 스레드 A : 0 + 1 = 1 계산, balance에 저장 (balance = 1)스레드 B : 0 + 1 = 1 계산, balance에 저장 (balance = 1.. Stack 스택(Stack)이란?마지막에 넣은 것이 가장 먼저 나오는 자료구조로 LIFO(Last in, First Out)라고 부른다. 가장 좋은 비유는 접시 쌓기로, 접시를 쌓을 때는 위에서부터 하나씩 쌓고, 꺼낼 때도 맨 위에 있는 것부터 꺼내기 떄문에, 맨 밑에 있는 접시를 꺼내려면 위에 있는 걸 다 치워야 합니다. 스택의 핵심 연산연산 의미 시간복잡도push맨 위에 데이터 추가O(1)pop맨 위 데이터 꺼내면서 제거O(1)peek (또는 top)맨 위 데이터를 제거 없이 확인만O(1)isEmpty비어있는지 확인O(1) 왜 항상 O(1)인가?배열이었다면 맨 앞에 넣고 뺼 떄마다 전체를 밀어야 했지만, 스택은 항상 "맨 위(head)"에서만 작업하니 연결 리스트의 추가/삭제 방식과 완벽하게 맞아떨어진다. c.. 연결 리스트 (Linked List) 연결 리스트(Linked LIst)란?각 데이터가 "다음 데이터가 어디 있는지"를 가리키는 화살표(참조)를 들고 있고, 그 화살표를 따라가면 줄줄이 이어지는 자료구조" 각 상자를 "노드(Node)"라고 부르고, 노드는 두 부분으로 이루어진다.- 데이터(data) : 실제 값- 다음 노드를 가리키는 참조(next) : 다음 노드의 주소- 마지막 노드의 next는 null -> "더 이상 다음이 없다"는 뜻 1. 노드 클래스 만들기class Node { int data; // 데이터 Node next; // 다음 노드를 가리키는 참조 Node(int data) { this.data = data; this.next = null; // 처음엔 다음이 없음 }} 2. .. 데이버베이스 발전 과정 파일 시스템 시대 (1950 ~ 1960)- 초기 컴퓨터에서는 데이터를 별도의 데이터베이스 없이 파일 형태로 저장 예)학생.dat회원.txt상품.csv 파일 형식 설명.dat특정 프로그램이 실행하는데 필요한 데이터를 저장하는 데이터 전용 파일 형식(사용자가 직접 열어보는 용도보다는, 소프트웨어 내부에서 데이터를 주고받거나 임시 저장할 떄 사용) 문제점1. 데이터 중복- 각 파일마다 동일한 데이터 저장 -> (데이터 중복 발생, 수정 시 여러 파일 수정, 데이터 불일치 발생 가능)2. 검색 속도 문제- 파일 전체를 처음부터 읽음3. 동시성 문제- 두 명이 동시에 수정하면 데이터 손상, 유실 가능 저장장치자기테이프(Magnetic Tape), 플로피 디스크(Floppy DIsk) 이후 HDD(Hard Di.. java: package org.junit.jupiter.api does not exist 원인JUnit가 프로젝트에 의존선이 추가되지 않았을 때 발생하는 오류 아래 코드가 있는지 확인Gradledependencies { testImplementation 'org.springframework.boot:spring-boot-starter-test'} Maven org.springframework.boot spring-boot-starter-test test react native + expo / android, ios 폴더가 없는 상황 초기 프로젝트 생성 시 아래 명령어를 사용해서 만들면 android 및 ios 폴더 구조가 함께 생성된다.npx react native init [PROJECT NAME] 그 다음으로 Expo를 설치npm install expo 만약 이미 생성 된 프로젝트가 있는 경우아래 명령어를 통해 각 폴더를 생성1. android 폴더 구조 생성npx expo run:android 2. iOS 폴더 구조 생성npx expo run:ios 이전 1 2 3 4 ··· 9 다음