목록전체 글 (42)
끄적끄적
ArrayList - 동적으로 증가하는 배열. 초기 배열의 크기는 10. 크기가 차면 기존 배열 크키*1.5로 증가시켜 값을 복사한다. - 탐색 시 O(1)의 시간복잡도를 가진다. - 추가, 삭제 시 원소들을 옮기는데 시간이 걸린다. LinkedList - 내부적으로 양방향의 연결리스트로 이루어져 있다.(앞의 값, 뒤의 값, 원소의 값) - 추가 삭제에는 빠르지만 탐색 시 head부터 해당 까지 하나하나 검색하기에 O(n)의 시간복잡도를 가진다. 참조) https://devlog-wjdrbs96.tistory.com/64
TreeMap - Key-value 쌍을 내부적으로 RedBlack Tree로 저장된다. Key값 기준으로 정렬된다. - O(log N) - 레드 블랙 트리 부모노드보다 작은 값을 가지는 노드는 왼쪽, 큰값을 가지는 노드는 오른쪽으로 배치하여 균형을 맞춘 이진탐색 트리 루트는 블랙, 레드의 자식노드 양쪽은 언제나 블랙이다. 어떤 노드부터 그에 속한 하위 리프 노드에 도달하는 모든 경로에는 리프 노드 제외 모두 같은 블랙 노드가 있다. LinkedHashMap - 입력된 순서를 기억한다. Node 클래스 내부에 before, after 멤버를 갖는 이중 연결리스트 구조로 되어있다. - O(1) but Linked-list를 유지하는 비용이 발생할 수 있다.
해시맵과 해시테이블 해시 테이블은 JDK1.0부터있던 자바 api이고 해시맵은 java2부터 자바 collection 프레임워크에 속한 api이다. 보조 해시함수를 사용하여 해시 테이블보다 해시 충돌이 덜발생하나 기능은 거의 같다. 다만 해시맵은 지속적으로 개선하고 있으나 해시테이블은 거의 동일하다. 해시맵은 병렬처리를 하지 않고 null 값을 허용한다. 해시테이블은 병렬 처리 하고 null을 허용한다. 해시맵의 정의 키에 대한 해시 값을 이용하여 값을 저장하고 조회하며, 키-값 쌍의 수에 따라 동적으로 크기를 증하가하는 associate array(=Map, Dictionary, Symbol)이다.(해시 맵에서는 assiciate array를 저장하기 위해 map이라는 용어를, 해시테이블에서는 Dict..
흔히 우리가 rest api라고 부르는것은 Http API인 경우가 많다고 한다. restAPI라고 부르기 위해서 따라야하는 제약조건이 무엇인지 Naver d2 강의를 보며 정리해 보았다. RestAPI란 - Rest 아키텍처에 따르는 API * 아키텍처: 제약조건의 집합. 제약조건을 모두 따라야 아키텍처이다. 그렇다면 Rest API의 제약조건은 무엇일까 Rest를 구성하는 스타일 - clinet-server - stateless - cache - uniform Interface - layered System - code-on-demand -> 대부분 잘 지켜지지만 uniform interface는 잘 지켜지지 않는다. Uniform Interface identification of resources ..
람다 캡처링 - 람다는 외부에 있는 변수를 참조할 수 있다. -> 이때의 변수를 자유 변수라 한다. 람다 캡처링의 제약 조건 1. 지역변수는 final로 선언되어야 한다. 2. final로 선언되어 있지 않아도 값이 재할당이 일어나선 안된다. 메모리와 람다(람다캡처링의 제약조건이 있는 이유) - 쓰레드는 힙을 공유하고 별도의 스택을 생성하므로, 지역변수는 공유되지 않고 인스턴스 변수는 공유한다. - 람다는 별도의 쓰레드에서 실행한다. 캡처하고 있는 변수가 있는 쓰레드가 사라저 해당 지역변수가 사라지면 오류가 날것 같지만 나지 않는다. - 지역변수에 직접 접근하는 것이 아니라 변수를 자신의 스택으로 복사하여 동일한 값을 참조한다. 람다의 유효범위 - 람다 표현식의 중촉 블록 내의 유효 범위 = 람다 표현식..
람다식 - Stream 연산들은 매개변수로 함수형 인터페이스를 받도록 되어있다. 람다식은 반환식으로 함수형 인터페이스를 반환한다. - 람다식: 함수를 하나의 식으로 표현한 것. 메서드의 이름이 필요 없기 때문에 익명 함수의 한 종류이다. -익명 함수: 함수의 이름이 없는 함수로, 모두 일급 객체이다. 일급 객체인 함수는 변수처럼 사용 가능하며 매개 변수로 전달이 가능하다는 특징이 있다. 1급 객체/1급 시민 - 변수나 데이터를 할당할 수 있다. - 메서드의 인자로 사용할 수 있다. - 리턴값으로 사용할 수 있다. 람다식의 특징 - 람다식 내에서 사용하는 지역 변수는 final을 붙이지 않아도 상수로 간주 - 람다식으로 선언된 변수명은 다른 변수명과 중복할 수 없다. 람다식의 장점 - 코드를 간결하게 만들..
thread: 한 프로세스 안에서 동작하는 실행 단위 Thread의 생성 1. Thread 클래스로부터 직접 생성 - Runnable 인터페이스를 implements 클래스 객체를 사용. Runnable 인터페이스는 run메서드를 무조건 구현해야함 public static void main(String args[]){ Runnable task = () =>{ int sum=0; for(int i=0;i 동기화 /lock - 어떤 스레드가 진행 중인 작업을 다른 스레드가 간섭하지 못하도록 하는 작업 - 간섭하지 못하게 하는 영역을 임계영역(critical section)으로 설정 => synchronized 키워드 사용 - synchronized 키워드가 붙은 메서드가 호출된 시점부터 해당 메서드가 포함된..
static이란? 어떤 값이 메모리에 한번 할당 되어 프로그램이 끝날때까지 그 메모리에 값이 유지된다는 것을 의미 static 변수 - 그 클래스를 상속받는 모든 인스턴스에서 같은 값을 갖는 변수가 있다면 static을 사용하여 메모리의 이점을 얻을 수 있다. - static으로 설정하면 같은 곳의 메모리 주소만 바라보기 떄문에 인스턴스끼리 같은 값을 공유한다. static 메서드 - 객체 생성 없이 클래스를 통해 직접 메서드를 호출할 수 있다. static의 초기화 시점 - 인스턴스의 생성과 상관 없이 초기화되는 변수로, JVM이 실행과정에서 필요한 클래스의 정보를 메모리에 로딩할때 static변수가 초기화 된다. 참조) https://codedragon.tistory.com/4606