Iterable / Iterator 인터페이스순회 : 자료 구조에 들어있는 데이터를 차례로 접근해서 처리하는 것각 자료 구조마다 데이터를 접근하는 방법이 모두 다르다. Iterator, Iterable 인터페이스 : 자료 구조 구현과 상관 없이 모든 자료 구조를 동일한 방법으로 순회할 수 있는 일관성있는 방법을 제공하는 인터페이스Iterable : "반복 가능한"의 의미를 가지고 있다.Iterator : "반복자"의 의미를 가지고 있다.Iterable 인터페이스 : Iterator 반복자를 반환한다.자료 구조 클래스에서 Iterator로 순회하기 위해서는 그 대상을 Iterable 인터페이스를 구현해야 한다.Iterable을 구현한 클래스는 Iterator로 순회할 수 있다는 것을 의미한다.iterato..
MapMap : 키(key) - 값(value)의 쌍으로 저장하는 자료 구조이다.키는 맵 내에서 유일해야 하지만 값은 중복될 수 있다.키를 통해 값을 빠르게 검색할 수 있다.순서를 유지하지 않는다.Map에서의 키(key)는 유일하며 순서가 보장되지 않기에 Set 자료 구조에 저장되고 반환된다.값은 순서는 보장하지 않지만 중복되어도 상관 없기에 Collection으로 반환된다.중복을 허용하기에 Set으로 반환하기에도 애매하고 순서를 보장하지 않기에 List로 반환하기도 애매하기에 상위 인터페이스인 Collection으로 반환한다.Map의 내부 인터페이스로 Entry가 존재하며 키와 값의 쌍으로 이루어진 객체이다.Map에 키와 값으로 데이터를 저장하면 Entry 객체를 만들어서 키와 값을 묶어서 저장한다.e..
SetSet : 중복을 허용하지 않고 순서를 보장하지 않는 자료 구조수학에서 집합의 특성을 가지고 있다.HashSetHashSet의 특징해시 자료 구조를 사용해서 요소를 저장한다.해시 함수로 각 데이터의 해시 코드를 구한 후 특정 연산을 통해 해시 인덱스를 구해서 저장한다.요소들은 특정한 순서 없이 저장된다.주요 연산(추가, 삭제, 검색)은 평균적으로 O(1) 소요된다.데이터의 유일성만 중요하고 순서가 중요하지 않은 경우에 사용한다. 해시 기반 자료 구조를 사용하는 경우 통계적으로 입력 데이터 수가 배열 크기의 75%를 넘어서면 해시 충돌이 자주 발생한다.잦은 해시 충돌로 인해 같은 해시 인덱스에 들어간 데이터를 모두 탐색하며 O(n)으로 성능이 나빠진다.데이터의 양이 배열 크기의 75%를 넘어서면 배열..
HashSet해시 함수 (Hash Function) : 임의의 길이의 데이터를 입력받아 고정된 길이의 해시 값(해시 코드)을 출력하는 함수.같은 데이터를 입력하면 항상 같은 해시 코드가 출력된다.다른 데이터를 입력해도 같은 해시 코드가 출력될 수 있다. => 해시 충돌해시 코드 (Hash Code) : 데이터를 대표하는 값을 의미한다.해시 코드는 보통 해시 함수를 통해 만들어진다.해시 인덱스 (Hash Index) : 데이터의 저장 위치를 결정한다.해시 인덱스는 보통 해시 코드를 사용해서 만든다.보통 해시 코드의 결과에 배열의 크기를 나눠 구한다.문자 데이터를 사용하더라도 문자의 고유한 숫자를 통해 해시 함수를 사용해서 정수 기반의 해시 코드로 변환한 덕분에 해시 인덱스를 사용할 수 있다.hashCode..
SetList vs SetList : 요소들의 순차적인 컬렉션으로 순서가 중요하거나 중복을 허용하는 경우 사용된다.순서 유지 - 순서를 가진다.중복 허용인덱스 접근 - 리스트의 각 요소는 인덱스를 통해 접근할 수 있다.Set : 유일한 요소들의 컬렉션으로 중복을 허용하지 않고 요소의 유무만 중요한 경우 사용된다.유일성 - 중복을 허용하지 않는다.순서 미보장 - 순서가 없다.빠른 검색 - 요소의 유무를 빠르게 확인할 수 있도록 최적화되어 있다. Set은 중복된 데이터를 허용하지 않는다. (Set을 효율적으로 만들기 위한 흐름)데이터를 추가할 때마다 중복을 체크해야한다.=> 모든 요소를 다 확인하면서 데이터 중복을 체크하면 O(n)으로 성능이 나쁘다.일일이 중복 체크하는 것이 아닌 입력 데이터 값과 배열 인..
List다형성과 OCP 원칙을 가장 잘 활용할 수 있는 곳 중 하나가 자료구조다.List : 순서가 있고, 중복을 허용하는 자료구조배열과 비슷하지만 크기가 동적으로 변화하는 컬렉션을 다룰 때 사용한다.ArrayList와 LinkedList는 내부 구현만 다를 뿐 같은 기능을 제공하는 List상황에 따라 성능은 다를 수 있지만 사용자 입장에서 보면 같은 기능을 제공한다.Collection 인터페이스 : 컬렉션 프레임워크의 핵심 인터페이스로 다양한 컬렉션 (데이터 그룹)을 다루기 위한 메소드를 정의하는 인터페이스이며 List, Set, Queue와 같은 다양한 하위 인터페이스가 있다. MyList는 인터페이스, MyLinkedList, MyArrayList는 MyList를 구현한 클래스.public clas..
연결 리스트(링크드 리스트) - LinkedListNode : 내부에 데이터와 다음 노드에 대한 참조를 가지고 있다.LinkedList : 각각의 노드를 연결(링크)해서 사용하는 List 자료 구조다.List의 특징인 데이터에 순서가 있고 중복을 허용한다. 각각의 노드가 참조를 통해 연결(링크)되어 있다.데이터를 추가할 때 동적으로 필요한만큼의 노드를 만들어서 연결할 수 있다.배열과 다르게 메모리를 낭비하지 않는다. LinkedList vs ArrayListArrayList는 리스트 내부에서 배열을 사용한다.내부에서 배열을 사용하기에 인덱스로 조회하는데는 O(1)로 빠르게 찾을 수 있다.값을 추가, 삭제하는 등의 변경은 값을 앞 / 뒤로 밀어야하기 때문에 O(n)이 소요된다.데이터를 찾는 것은 빠르지만 ..
컬렉션 프레임워크자료 구조 : 배열과 같이 여러 데이터(자료)를 구조화해서 다루는 것.배열배열의 특징자료를 찾을 때 인덱스를 사용하면 매우 빠르게 자료를 찾을 수 있다.인덱스를 통한 입력, 변경, 조회는 한 번의 계산을 통해 위치를 찾을 수 있다.배열에서 원하는 위치를 찾는 공식배열의 시작 참조 주소 + (자료형의 크기 * 인덱스 위치)ex) arr[3]의 위치 = 100 + (4byte(int) * 3) = x112 배열에 들어있는 데이터를 검색하는 경우인덱스를 이용해서 한 번에 찾을 수 없기 때문에 배열에 들어있는 데이터를 하나 하나 비교해야 한다.평균적으로 배열의 크기가 클수록 시간이 오래 걸린다.배열의 크기가 n이면 연산 횟수도 n만큼 필요하다.배열의 경우 인덱스를 사용하는 경우 O(1), 순차 ..
제네릭 타입 (Generic Type)class GenericClass { private T value;}제네릭 클래스: 클래스 명 옆에 와 안에 타입 매개 변수를 정의한 클래스를 제네릭 클래스다.타입 매개 변수는 클래스 내부에 타입 매개 변수가 필요한 곳에 사용하면 된다.제네릭 클래스를 사용할 때는 타입을 미리 결정하지 않는다.타입 매개 변수는 이후에 다른 타입으로 변할 수 있다.GenericClass integer = new GenericClass(); //타입 직접 입력GenericClass integer2 = new GenericClass(); //타입 추론제네릭 클래스의 인스턴스를 생성하는 시점에 안에 원하는 구체적인 타입을 지정한다.제네릭 클래스의 타입 매개 변수가 지정한 타입으로 변경된..
예외 처리예외 처리 : 자바 프로그램 실행 중 발생할 수 있는 예상치 못한 상황 (예외)을 처리하기 위한 메커니즘프로그램의 안정성과 신뢰성을 높이는데 중요한 역할소스 코드에서 정상 흐름과 예외 흐름이 섞여있는 경우 코드를 한눈에 이해하기 어렵다.정상 흐름과 예외 흐름을 분리하는 방법은?정상 흐름과 예외 흐름을 명확하게 분리하기 위해서 자바 예외 처리가 존재한다.자바의 경우 GC에 의해서 JVM 메모리에 있는 인스턴스는 자동으로 해제할 수 있다.하지만 외부 연결 (네트워크 연결 등등)과 같은 자바 외부의 자원은 자동으로 해제가 되지 않기에 연결 후에는 반드시 해제를 해서 자원을 반납해야 한다. 자바의 예외 처리에서 try, catch, finally, throw, thorws 키워드가 사용된다.예외 계층..