java18 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 (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. GC (Garbage Collector) 지난 시간에는 간략하게나마 JVM의 구성과 동작원리에 대해서 알아보았다. 오늘은 JVM의 구성 중 하나인 GC, 가비지 콜렉터에 대해서 알아보자. Garbage Collector 직역해보자면, 쓰레기를 모으는 친구이다. 1. 뭐하는 친구인가? 가비지 콜렉터는 Heap 영역에서 활동하는 친구이다. 지난 시간에 알아봤듯이, Heap 영역에는 배열과 new 연산자를 통해 생성되는 객체들이 적재되는 메모리 공간이다. 그렇다. 가비지 콜렉터는 이 친구들 중에서 쓰레기가 되는 친구들을 제거하는 역할을 하는 것이다. 2. 그렇다면, 어떤 객체들이 쓰레기가 되는 것일까? 메모리 공간은 한정적이다. 오랜 기간동안 사용되지 않는 객체 친구들은 메모리 공간을 차지하기만 할뿐 프로그램을 실행하는 데 있어 큰 역할을 하지 못한.. 2021. 9. 5. JVM (Java Virtual Machine) 자바 유저라면 자바 프로그램이 어떤 과정을 거쳐 실행되는지와 메모리 구조에 대해서는 알아두는 것이 좋다고 생각이 오늘 이 글을 포스팅한다. JVM이란? 자바 프로그램은 완전한 기계어가 아닌 바이트 코드(.class)이기 때문에 운영체제가 바로 실행할 수 없다. 그렇기 때문에 운영체제를 대신해서 자바 프로그램을 실행해줄 녀석이 필요한데, 그게 바로 JVM이다. Java Application 실행 과정 1. 자바 프로그램을 실행하면 JVM이 해당 프로그램을 실행하는 데 필요한 메모리를 OS로부터 할당 받는다. 2. 자바 컴파일러(javac)가 자바 파일(.java) -> 클래스 파일(.class, 바이트 코드)로 변환한다. 3. 이렇게 변환된 class파일들은 Class Loader에 의해서 JVM 메모리 .. 2021. 9. 1. 이전 1 2 다음