본문 바로가기

프로그래밍/Java

(10)
Effective Java 독서 (1) 보호되어 있는 글입니다.
Properties와 Collections에 대해 보호되어 있는 글입니다.
HashMap과 TreeMap에 대해 Map- 순서가 없고 키는 중복을 허용하지 않으나, 값은 중복을 허용한다.- 데이터를 키와 값의 쌍으로 저장한다.- Map을 구현한 컬렉션 클래스 : Hashtable, HashMap, LinkedHashMap, TreeMap HashMap- Map인터페이스를 구현한 대표적인 컬렉션 클래스- HashMap(동기화되어있지 않음)은 Hashtable(동기화되어있음)의 신버전이다.- 저장 순서를 유지하고 싶으면 LinkedHashMap 클래스를 사용하면 된다.- 해싱(hashing)기법을 이용해 데이터를 저장하여 데이터가 많아도 검색이 빠르다는 장점이 있다.- 같은 키로 값을 저장하게 되면 나중에 저장된 값이 이전 값을 덮어씌운다.- HashMap은 HashMap클래스의 내부 클래스인 Entry의 배열에 저장..
Arrays, Comparable, Comparator에 대해 Arrays- 배열을 다루기에 편리한 메소드들(static)을 제공한다. Arrays 클래스의 메소드- toString()배열을 출력한다. boolean[], byte[], char[] 등 여러 자료형들에 대한 출력을 폭넓게 지원한다.- deepToString(), equals(), deepEquals()다차원 배열에서 비교와 출력을 할 때 쓰인다. deepToString과 deepEquals는 다차원배열에서 각각 출력과 비교를 담당하며 equals는 1차원 배열에서의 비교를 수행한다.- copyOf(), copyOfRange()배열을 복사할 때 쓰인다. copyOf는 처음부터 지정된 곳까지 저장을 하며 copyOfRange는 지정된 곳부터 지정된 곳까지 저장을 한다. 만일 기존 배열의 크기를 넘어서는 ..
Iterator와 Enumeration, ListIterator에 대해 Enumeration, Iterator, ListIterator- 컬렉션에 저장된 데이터에 접근하는데 사용되는 인터페이스들이다.- Enumeration은 컬렉션이 도입되기 전에 존재하던 Iterator 구버전이다. Iterator의 메소드- boolean hasNext()일거 올 요소가 남아있는지 확인해 있으면 true, 없으면 false를 반환한다.- Object next()다음 요소를 읽어온다. next()를 호출하기 전에 hasNext()를 호출해 읽어 올 데이터가 있는지 먼저 확인하는 것이 오류가 발생하지 않는 안전한 방법이다.- void remove()next()로 읽어 온 요소를 삭제한다. next()를 호출한 후 remove()를 호출해야 한다. 그렇지 않으면 예외가 발생하게 된다. 이 메소..
Stack과 Queue에 대해 Stack과 Queue- 단순하면서도 유용한 자료구조(Data Structure)이기 때문에 컴퓨터 시스템 전반에 다양하게 쓰이고 있다.- 스택과 큐를 구성하는 명령어가 get이나 put등이 아닌 push, pop, offer, pool인 이유는 이 두 자료구조는 자바가 개발되기 이전부터 쓰이던 방식이었기 때문에 다른 프로그래밍 언어에서도 쓰이던 명령어 형식을 따라서이다. 스택- LIFO(Last In First Out)의 후입 선출 방식 구조를 가지고 있다. 이것은 마지막에 저장된 것을 가장 먼저 꺼낸다는 의미이다.- 스택은 양 옆이 막혀있는 박스방식이어서 중간에 있는 데이터를 꺼내거나 중간에 데이터를 넣을 수 없고 마지막 데이터만 꺼내거나 넣을 수 있다.- 수식계산, 수식괄호검사, undo / red..
Collection framework에 대해 (3) ArrayList의 장점과 단점- 장점배열은 구조가 간단하고 데이터를 읽는 데 걸리는 시간(Access time)이 짧다.- 단점크기를 변경할 수 없어 크기를 변경해야 할 때 새로운 배열을 생성 후 데이터를 복사하는 방식으로 크기를 변경해야 한다. 이러한 작업은 메모리 비용이 많이 들기 때문에 가급적이면 피해야 한다.크기 변경을 피하기 위해서 큰 배열을 생성하게 될 경우 메모리 낭비가 발생하게 된다.비순차적인 데이터의 추가 및 삭제에 시간이 오래 걸린다.데이터를 추가하거나 삭제하기 위해서 관련이 없는 다른 데이터들까지 이동시켜야 한다.순차적인 데이터를 추가(끝에 추가) 및 삭제(끝부터 삭제)하게 될 경우 속도가 빠르다. LinkedList-배열의 단점을 보완하기 위해 고안되었다.- LinkedList는 ..
Collection framework에 대해(2) Vector와 ArrayList - ArrayList는 기존의 Vector를 개선한 것으로 구현원리와 기능적으로 동일하다고 할 수 있다.- Vector는 Collection framework가 도입되기 이전부터 존재하던 구버전이며, ArrayList는 framework가 도입된 후 생긴 클래스이다.- Vector는 자체적으로 동기화(멀티 스레드)처리가 되어 있으나 ArrayList는 그렇지 않다는 큰 차이가 있다. 하지만 싱글 스레드의 프로그램을 만들려고 할 때는 ArrayList가 더 효율적이라 할 수 있다.- Vector와 ArrayList 모두 List인터페이스를 구현하기 때문에 저장순서가 유지되며 중복을 허용하고 있다. 또한 데이터의 저장 공간으로 배열을 사용하는 배열 기반 클래스이다.- Arra..