Java의 HashMap과 HashTable이 어떻게 동작하며 성능이 어떠한지 공부하던중 엄청 자세한 글을 찾았다. Java HashMap은 어떻게 동작하는가? 해당 글은 위의 글을 기반으로 내가 이해한 내용들을 정리한 글이다. 연관배열 (Associative array) 연관배열이란 키(key) 1개와 값(value) 1개가 1:1로 연관되어 있는 자료구조이다. 해시테이블 (Hash table) 해시테이블은 Hash를 이용하여 연관배열을 구현한 자료구조 이다. 해시함수를 사용하여 키를 해시값으로 매핑하고, 이 해시값을 인덱스 혹은 주소 삼아 데이터의 값(value)을 키와 함께 저장하여 검색을 빠르게 하기 위한 자료 구조이다. Hash가 뭔데 ? Hash(hash code)를 이해하기 위해서는 Key,..

Object클래스와 equals(), hashCode(), toString() 메소드에 대해 간단하게 알아보자. 모든 클래스의 조상 Object는 java.lang패키지에 존재하는 클래스인데 import문 없이도 Object클래스를 사용할 수 있다. 모든 클래스들이 Object클래스를 자동으로 상속받기 때문이다. 그런 점에서 Object클래스는 모든 클래스의 조상이라고 할 수 있다. 그렇다면 다른 클래스를 extends로 상속받으면 다중상속이 되는것일까? 자바에서는 다중상속을 허용하지 않는다. 따라서 최상위의 부모클래스가 Object클래스를 상속받게 된다. 결국 어떠한 클래스라도 Object를 상속받게 되는 것이다. 이렇게 하면 다형성을 활용하는데 이점이 있으며, 모든 클래스가 공통으로 사용할 수 있는 ..

이전에 포스팅한 String클래스와 Constant Pool에 이어서 String, StringBuffer, StringBuilder의 차이에 대해 설명한 글이다. String vs StringBuffer vs StringBuilder Java에서는 문자열 객체를 생성하기 위해 String, StringBuffer, StringBuilder이라는 3가지 클래스를 제공한다. 세 클래스 모두 문자열을 관리하기 위한 클래스이지만 불변(Immutable)한지, Thread-safe한지에 따라 조금씩 차이가 있다. String은 불변하며, 객체를 빠르고 작은 메모리로 생성할 수 있기 때문에 메모리 관리를 효율적으로 처리할 수 있다는 장점이 있었다. 하지만 불변하기 때문에 성능이 저하되는 문제도 가지고 있다. St..

Java에서는 문자열 객체를 생성하기 위해 String, StringBuffer, StringBuilder이라는 3가지 클래스를 제공한다. 세 클래스 모두 문자열을 관리하기 위한 클래스이지만 불변(Immutable)한지, 동기화를 지원하는지에 따라 조금씩 차이가 있다. 우선 String부터 살펴보겠다. (String, StringBuffer, StringBuilder의 차이점에 대해 포스팅하려다 String 내용이 많아서 분리했다.) String은 특별하다 String클래스는 다른 클래스들과는 조금 다르다. (String is Special) Reference Type임에도 불구하고 Primitive Type처럼 사용할 수 있다. String을 초기화할때 Primitive Type처럼 직접 문자열 리터럴..
String, StringBuffer, StringBuilder의 차이에 관한 포스팅을 하면서 떠오른 클래스들이 있다. HashMap, HashTable, ConcurrentHashMap 클래스들이다. 무슨 공통점이 있을까? 각각의 클래스들의 차이를 설명하기 위해서는 Thread-safe라는 키워드가 필요하다. Thread-safe란 쉽게 말해서 멀티 스레드 환경에서 안정성을 보장한다는 것인데, 동기화를 지원한다고 보면 된다. (위키를 참고했다.) 위에서 언급한 클래스들 중에서는 String, StringBuffer, HashTable, ConcurrentHashMap이 Thread-safe하다. 멀티 스레드 환경에서 동기화문제를 신경쓰지 않아도 된다. 그렇다면 StringBuilder와 HashMap은..