Web/Java19 Collections Framework (6) HashMap, TreeMap HashMap - Map을 구현한 클래스로, 키와 값을 묶어 하나의 데이터(entry)로 저장한다. - 해싱을 이용해 많은 양의 데이터를 검색하는 데 있어 뛰어나다. Hashing & Hash Function [해싱] : 해시 함수를 이용해 데이터를 해시테이블에 저장하고 검색하는 기법이다. [해시 함수] : 데이터가 저장되어 있는 위치를 알려준다. 해싱을 사용하는 자료구조는 배열과 LinkedList의 조합으로 이루어져 있다. 데이터를 저장하는 과정은 다음과 같다. 1. 저장할 데이터의 키를 해시 함수에 넣으면 배열의 한 요소를 얻게 된다. 2. 해당 요소에 연결되어 있는 LinkedList에 데이터를 저장한다. 데이터를 검색하는 과정은 다음과 같다. 1. 검색하고자 하는 value의 key로 해시 함수.. 2022. 2. 21. Collections Framework (5) HashSet, TreeSet HashSet Set 인터페이스를 구현한 대표 컬렉션으로 요소를 중복해서 저장할 수 없고, 저장 순서를 유지하지 않는다. 저장 순서를 유지하고자 한다면, LinkedHashSet를 사용하면 된다. HashSet(int initalCapacity, float loadFactor) 위 생성자는 초기용량과 load factor를 지정하는 생성자인데, load factor란 컬렉션 클래스에 저장공간이 가득 차기 전에 미리 용량을 확보하기 위한 역할을 한다. 기본 값은 0.75로, 저장 공간의 75%가 채워졌을 때 용량이 두 배로 늘어난다. add 메서드는 새로운 요소를 추가하기 전에 이미 저장되어 있는 요소와 같은 것인지를 판별하기 위해 추가하려는 요소의 equals()와 hashCode()를 호출한다. 따라.. 2022. 2. 21. Collections Framework (4) Comparator, Comparable Comparator, Comparable 이 둘은 모두 인터페이스로, 컬렉션을 정렬하는데 필요한 메서드를 정의하고 있다. Arrays.sort()를 통해서 정렬이 가능한 클래스들의 경우 모두 Comparable 인터페이스를 구현하고 있다. 대표적으로 Wrapper 클래스들과 String, Date, File과 같은 클래스들이 있다. public interface Comparator { int compare(Object o1, Object o2); } public interface Comparable { int compareTo(Object o); } compareTo()의 경우 비교하는 두 객체가 같으면 0, 비교하는 값보다 작으면 음수, 크면 양수를 반환하도록 구현해야 한다. compare()의 경우.. 2022. 2. 17. Collections Framework (3) Arrays Arrays 말 그대로 배열을 다루는 데 유용한 메서드들을 정의해놓은 클래스이다. sort(), binarySearch() sort()는 배열을 정렬할 때 사용되고, binarySearch()는 요소를 검색할 때 사용되는 메서드이다. 이진 탐색의 경우 배열이 우선적으로 정렬이 되어있어야 사용할 수 있다. asList(Object... ary) 배열을 List에 담아서 반환하는 메서드이다. 전달인자의 타입이 가변인수라서 배열을 생성하지 않고 요소들만 나열해 사용할 수 있다. List list = Arrays.asList("hello", "world"); 단, asList()를 통해 반환된 List는 크기를 변경할 수 없다. 따라서 추가 또는 삭제가 불가능하다. (변경은 가능) 크기를 변경할 수 있는 Li.. 2022. 2. 16. Collections Framework (2) Iterator, ListIterator, Enumeration Iterator 컬렉션에 저장된 각 요소에 접근할 수 있는 기능을 제공하는 인터페이스이다. Collection 인터페이스에는 Iterator를 반환하는 iterator() 메서드를 정의하고 있다. List와 Set은 Collection의 자손 클래스이므로 각 컬렉션의 특징에 알맞게 iterator()가 정의되어 있다. Map인터페이스를 구현한 클래스들의 경우 key와 value가 쌍으로 저장되기 때문에 keySet(), entrySet()과 같은 메서드를 통해 key와 value를 따로 Set의 형태로 반환 받은 후에 iterator()를 사용한다. public Interface Iterator { boolean hasNext(); Object next(); void remove(); } 정의되어 있는.. 2022. 2. 15. Collections Framework (1) ArrayList, LinkedList ArrayList List 인터페이스를 구현하는 클래스이다. 따라서, 데이터의 저장 순서가 유지되고 데이터의 중복을 허용한다. public class ArrayList extends AbstractList implements List, RandomAccess, Cloneable, java.io.Serializable { ... transient Object[] elementData; ... } ArrayList는 Object[] 타입의 elementData 멤버변수를 가지고 있는데, 이 변수에 데이터가 저장된다. 또한, Object 배열로 모든 객체를 담을 수 있다. 데이터를 읽어오거나 저장하는 효율은 좋지만, 크기를 변경해야 하는 경우에는 새로운 배열을 생성하고 기존 배열에 저장된 내용을 복사해야하기.. 2022. 2. 8. 직렬화와 역직렬화 직렬화, 역직렬화 직렬화란, 객체를 데이터 스트림으로 만드는 것을 뜻한다. 이를 풀어서 말하면, 객체에 저장된 데이터(인스턴스 변수)를 연속적인 데이터로 변환하는 것을 말한다. 역직렬화란, 직렬화와 반대로 스트림으로부터 데이터를 읽어 객체를 만드는 것을 말한다. 직렬화, 역직렬화 방법 직렬화 - ObjectOutputStream 사용 역직렬화 - ObjectInputStream 사용 // 직렬화 FileOutputStream fos = new FileOutputStream("sample.txt"); ObjectOutputStream out = new ObjectOutputStream(fos); out.writeObject(new Sample()); // 역직렬화 FileInputStream fis = n.. 2022. 2. 7. Reflection Reflection API란? 구체적인 클래스 타입을 알지 못하더라도 해당 클래스의 정보(타입, 필드, 메서드 등)에 접근할 수 있도록 해주는 Java에서 제공하는 API이다. 예시 public class Member { private String name; private void setName(String name) { this.name = name; } public String getName() { return name; } } 위와 같은 클래스가 존재할 때, 외부에서 Member class 필드인 name의 값을 직접 수정할 수 없다. 하지만 reflection API를 사용한다면, private 필드와 메서드를 이용할 수 있다. public class Main { public static void.. 2022. 1. 25. Statement vs PreparedStatement Statement와 PreparedStatement는 JDBC를 통해 SQL를 실행하기 위해서 사용되는 객체이다. PreparedStatement와 Statement의 가장 큰 차이는 캐시를 사용하느냐에 있다. 이 두 객체는 SQL을 실행할 때 3단계를 거치게 된다. 1) SQL 문장 분석 - 문법 검사 - 의미 검사 - 권한 검사 2) 컴파일 3) 실행 Statement를 사용하는 경우, SQL을 실행할 때마다 1 ~ 3단계를 모두 거치게 된다. 반면에, PreparedStatement를 사용하는 경우에는 처음 실행하는 경우에만 3단계를 거치고 캐시에 올려둔다. 이후에는 캐시에 올라가 있는 것을 재사용하게 된다. Statement Connection connection = DBConnection.get.. 2021. 10. 11. 이전 1 2 3 다음