ArrayList에 요소가 추가되는 과정 살펴보기 최근 배열에 대해 복습하면서 ArrayList에 대해 잘못 이해하고 있었다는 것을 깨달았다. 구체적으로 파헤쳐보기 전에 기본적인 배열 개념에 대해 간략히 정리해봤다. 배열 연속된 메모리 공간에 위치한 같은 타입 요소들의 모음 숫자 인덱스를 통한 랜덤 접근 가능 참조 O(1), 탐색 O(n) 정적 배열 크기가 고정된 배열 동적 배열 동적으로 요소 할당이 가능한 배열 Java에는 ArrayList. 요소를 추가할 때 기존 저장 용량을 초과하면 자동으로 용량이 늘어남 지금까지는 ArrayList도 LinkedList처럼 요소가 포인터로 연결된 형태라고 생각해왔다. 같은 List타입인데다가 중간 삽입/삭제 등의 api가 제공되는 것이 이유였다. (내부 동작은 그..
Java Collection Framework 의 개요 다수의 데이터를 쉽고 효과적으로 처리할 수 있는 표준화된 방법을 제공하는 클래스의 집합 특징 배열과 달리 가변적인 크기를 가짐 데이터 삽입, 탐색, 정렬 등 편리한 API 제공 List, Queue, Set, Map 등의 인터페이스를 제공, 이를 통해 일관된 API를 사용할 수 있음 계층 및 종류 리스트 (List) : 인덱스 순서로 요소를 저장. 중복된 데이터를 저장할 수 있음. 큐 (Queue) : 데이터가 저장된 순서대로 출력되는 선입선출 (FIFO: First In First Out) 의 구조를 갖는 선형 자료구조이다. 집합 (Set) : 순서가 없고, 데이터를 중복하여 저장할 수 없음. 집합 연산 (합집합, 교집합, 차집합 등) 을 지원. ..
Index란? 우리말로 색인, 쉽게 찾아볼 수 있도록 일정한 순서에 따라 놓은 목록 DB의 Index 데이터베이스에서 조회 및 검색 성능을 향상하는 자료구조. where 절 등을 통해 활용된다. DBMS의 인덱스는 항상 정렬된 상태를 유지. 하나의 데이터베이스 객체. 데이터베이스 크기의 약 10% 정도의 저장공간 필요. DB의 스캔 방식 DB의 스캔 방식에는 Full Table Scan과 Index Scan이 있다. Full Table Scan 순차적 접근 테이블에 존재하는 모든 데이터를 읽어 가면서 조건에 맞으면 추출, 맞지 않으면 버림 접근 비용 감소 사용하는 경우 적용가능한 인덱스가 없는 경우 인덱스 처리 범위가 넓은 경우 (인덱스가 있더라도 처리 범위가 넓어 성능상의 이점이 없을 때) 작은 테이블..
데이터베이스 커넥션 애플리케이션과 데이터베이스의 연결을 뜻함 애플리케이션에서 데이터베이스에 접속하고 접속을 종료하는 일련의 과정을 의미. 풀(Pool) 필요할 때마다 개체를 할당하고 파괴하는 대신, 사용 준비된 상태로 초기화된 개체 집합 즉, 데이터베이스 커넥션 풀은 커넥션(개체)을 미리 생성해 사용 준비된 상태로 초기화된 커넥션 집합 자바의 Connection 인터페이스 java.sql 패키지에 정의된 Connection 인터페이스에는 다음과 같이 설명한다. A connection (session) with a specific database. SQL statements are executed and results are returned within the context of a connection. ..
Lock이란? 락(Lock)이란 데이터베이스에서 데이터에 잠금을 걸어 동시성을 제어하는 방법이다. 여러 사용자가 동시에 데이터베이스에 접근하여 데이터를 변경하는 상황에서 충동을 방지하기 위해 사용된다. InnoDB의 Lock MySql 공식 문서에 따르면 InnoDB는 다음과 같은 다양한 종류의 lock을 사용한다. Shared and Exclusive Locks Intention Locks Record Locks Gap Locks Next-Key Locks Insert Intention Locks AUTO-INC Locks Predicate Locks for Spatial Indexes 이 글에서는 다른 DBMS에서도 존재하는 개념인 공유 잠금과 배타 잠금에 대해서만 정리해보겠다. 공유 잠금(Share..
트랜잭션 데이터베이스에서 하나의 논리적 기능을 수행하기 위한 작업의 단위 특징 원자성(Atomicity) 트랜잭션의 작업이 모두 수행되거나, 모두 수행되지 않는 것 트랜잭션 내의 모든 명령은 반드시 완벽히 수행되어야하고, 하나라도 오류가 발생하면 전부 취소되어야 함 일관성(Consistency) 데이터베이스의 상태는 일관되어야 함. 트랜잭션의 처리 전, 후 데이터베이스의 상태는 항상 유효해야 함을 의미 트랜잭션 처리 후 여전히 데이터베이스의 제약조건 및 데이터 규칙에 위배되지 않는 것 격리성(Isolation) 트랜잭션은 다른 트랜잭션으로부터 독립(및 격리)되어있어야 하는 것 여러 개의 트랜잭션은 서로 격리되어 마치 순차적으로 실행되는 것처럼 작동 여러 개의 격리 수준으로 나뉘어 격리성을 보장 지속성(D..
Object의 equals 매개변수로 객체의 참조 변수를 받아서 비교하여 결과를 boolean값으로 반환하는 메서드 참조 변수의 값(주소 값)으로 두 객체가 같은지 다른지 판단 equals()의 오버라이딩 Object의 equals메서드는 두 객체의 주소 값만 비교하기 때문에, 두 객체의 내용이 같아도 주소 값이 다르면 다른 객체로 본다. 따라서 객체 내용을 비교하여 같고 다름을 판단하고 싶다면 해당 클래스에 equals 메서드를 오버라이딩해주어야 한다. 대표적인 예시로 String, Integer 클래스가 있다. String의 equals Object와 같이 두 객체의 주솟값이 같으면 true 반환한다. 차이점은 주솟값이 다르더라도 두 객체의 value를 비교하는 과정이 추가되어 있다는 점이다. Int..
공인 IP 주소와 사설 IP 주소 IP 주소는 공인 IP 주소와 사설 IP 주소로 나뉜다. 공인 IP 주소 인터넷에서 사용되는 주소 IP 주소 할당 기관에 의해 할당된 주소 인터넷 상에서 유일한 주소 사설 IP 주소 인터넷 미연결 TCP/IP 네트워크를 위한 IP 주소 인터넷 IP 주소 관리 대상에 불포함 서로 다른 네트워크에서 중복 사용 가능 인터넷 IP 주소와 엄격하게 구분 (사설 IP 주소 네트워크 인터넷 연결 불가) 사설 IP 주소 범위 클래스 A : 10.0.0.0 - 10.255.255.255 클래스 B : 172.16.0.0 - 172.31.255.255 클래스 C : 192.168.0.0 - 192.168.255.255 공인 IP 주소에는 클래스를 쓰지 않지만 사설에서는 여전히 사용한다. ..