기본 콘텐츠로 건너뛰기

Collection들의 특징

1. Collection 인터페이스는 객체의 그룹으로, 중복을 허용한다.

2. Set 인터페이스는 Collection 객체를 상속했고, 저장되는 값의 중복이 불가능하다.
1) HashSet 동기화 X 가장 빠른 집합, HashMap보다 느림
2) TreeSet 동기화 X HashSet 보다 느림, 키가 정렬됨
3. List 인터페이스는 Collection 객체를 상속했고, 저장되는 값의 중복이 가능 하고, 저장된 Index 번호를 통한 접근이 가능하다.
1) ArrayList 동기화 X 가장빠름, null 허용
2) LinkedList 동기화 X 느림
3) Vector 동기화 O ArrayList 보다 느림
4) Stack 동기화 O Vector와 동일한 속도, LIFO 가능
4. Map 인터페이스는 Set 또는 Collection 어느것도 상속하지 않는 독불장군(?) 이다.
1) HashMap 동기화 X 가장 빠름, null 값 허용
2) Hashtable 동기화 O HashMap보다 느림, 동기화, null 값 허용안함
3) TreeMap 동기화 X Hashtable과 HashMap보다 느림, 키가 정렬됨

5. 선택의 기준
1) 중복 허용 여부
2) 동기화 지원 여부 : Multithreaded 환경
3) 검색 속도

에서의 선택 - ArrayList ? Vector ?
ArrayList 와 Vector 의 차이점은 동기화를 지원하느냐의 여부다. 동기화가 필요한 곳에는 Vector를 사용하면 되고, 대부분의 경우는 ArrayList를 사용하면 된다. 사용자가 동기화 처리한 ArrayList 보다는 Vector 가 빠르다.

Map 에서의 선택 - HashMap ? Hashtable ?
HashMap 과 Hashtable 도 ArrayList 와 Vector와 유사하다. 동기화가 필요한 곳에는 Hashtable 을 사용하고, 대부분의 경우는 HashMap을 사용하면 된다. 사용자가 동기화 처리한 HashMap 보다는 Hashtable이 빠르다.

댓글

이 블로그의 인기 게시물

Cron expression

초 0-59 , - * / 분 0-59 , - * / 시 0-23 , - * / 일 1-31 , - * ? / L W 월 1-12 or JAN-DEC , - * / 요일 1-7 or SUN-SAT , - * ? / L # 년(옵션) 1970-2099 , - * / * 모든 값 ? 특정 값 없음 - 범위 지정에 사용 , 여러 값 지정 구분에 사용 / 초기값과 증가치 설정에 사용 L 지정할 수 있는 범위의 마지막 값 W 월~금요일 또는 가장 가까운 월/금요일 # 몇 번째 무슨 요일 2#1 => 첫 번째 월요일 예제) Expression Meaning 초분시일월주(년) "0 0 12 * * ?" 아무 요일, 매월, 매일 12:00:00 "0 15 10 ? * *" 모든 요일, 매월, 아무 날이나 10:15:00 "0 15 10 * * ?" 아무 요일, 매월, 매일 10:15:00 "0 15 10 * * ? *" 모든 연도, 아무 요일, 매월, 매일 10:15 "0 15 10 * * ? 2005" 2005년 아무 요일이나 매월, 매일 10:15 "0 * 14 * * ?" 아무 요일, 매월, 매일, 14시 매분 0초 "0 0/5 14 * * ?" 아무 요일, 매월, 매일, 14시 매 5분마다 0초 "0 0/5 14,18 * * ?" 아무 요일, 매월, 매일, 14시, 18시 매 5분마다 0초 "0 0-5 14 * * ?" 아무 요일, 매월, 매일, 14:00 부터 매 14:05까지 매 분 0초 "0 10,44 14 ? 3 WED" 3월의 매 주 수요일, 아무 날짜나 14:10:00, 14:44:00 "0 15 10 ? * MON-FRI" 월~금, 매월, 아무 날이나 10:15:00 "0 15 10 15 * ?...

AWS ELB 504 Error

AWS EC2  운영 중 가끔씩 볼 수 있는 에러가 있습니다. 대표적으로 다음의 세가지 502, 503, 504 입니다. 이 중에서 이번에 알아볼 문제는 HTTP 504 에러입니다 .  타임 아웃이 되어   Request 를 처리하지 못하는 상황이 됩니다 .   해결 방법부터 이야기 하자면 다음과 같이 웹서버의 Time-out 시간을 60 초 이상으로 늘리는 것입니다 . Web Server & Application Time-out >= 60 sec 그 이유는 다음과 같은 ELB의 특성 때문입니다. ELB는 클라이언트와 EC2 서버 양쪽으로 커넥션을 유지하고 있습니다. ELB는 클라이언트와  EC2 서버간의 커넥션을 관리하는 역할을 맡고 있습니다. 그래서 유효한 커넥션만을 남겨놓습니다. 이를 위해서 Time-out 시간을 가지고 이 시간동안 데이터가 송수신되지 않으면 연결을 끊습니다.  기본적으로 Elastic Load Balancing는 두 연결 모두에 대해 Time-out(유휴 시간) 시간을 60초로 되어 있습니다. 그렇기 때문에 HTTP 또는 HTTPS를 사용할 경우 "KeppAlive" 옵션을 사용하여 커넥션을 재활용해야 합니다. 이 때  ELB 커넥션도 재사용되기 때문에 CPU 사용률을 줄일 수 있습니다. Browser Time-out Opera 11.11 120 sec IE 9 60 sec Chrome 13 300 sec FireFox 4 115 sec 서버 로직 중에서 60초 이상 실행될 수 있는 부분이 있는 경우 504 에러를 자주 볼 수 있을 것입니다. 문제 해결을 위해서는 Web Server는 물론  Tomcat 설정 또한 60초 이상으로 변경해주어야 합니다. ...

Spring Data Projection 기능 활용

Projection Spring Data REST에서는 Projection 기능을 제공하고 있습니다. Spring Data란?   Data Access Layer에 대한 추상화 기능을 제공하는 프레임워크입니다. 간단히 설명하자면 기존에는 Database에 데이터를 저장하고 읽어오기 위해서는 Database의 종류, 스키마를 고려하여 SQL Query를 사용해서 데이터를 저장하고 읽어왔습니다. 그러나 Spring Data를 이용하게 되면 이 과정을 ORM을 사용하여 함수를 사용하여 쉽게 처리할 수 있습니다. ORM(Object Relational Mapping)란?   데이터베이스가 테이블, 필드간 상관 관계를 통해 도메인 데이터를 표현하였다고 한다면,  ORM은 Object, 클래스 간의 상관 관계를 통해 도메인 데이터를 표현하는 것을 말합니다. 다음의 링크는 Spring Data REST Documentation 중에서 Projection 부분입니다.               8. Projections and Excerpts 그러나 실제 "Projection" 기능을 사용하는데는 한가지 문제점이 있습니다. 레거시 웹서비스를 쓰고 있다거나, Spring Data  REST를 이용하지 않는다면 "Projection" 기능을 활용하는 것이 힘들다는 것입니다. Spring Data REST의 경우 데이터  Response Type이 json-hal 타입만을 지원하기 때문입니다. JSON-HAL 타입으로 경우 웹서비스 제공 입장에서 최선의 선택일 수 있습니다. 그러나 실제 프로젝트에서는 이를 쓰려는 클라이언트가 없을 경우 사용할 수 없게 될 것입니다. 그렇다면 Projection 기능만을 사용할 수 있는 방법이 없을까요? 있습니다. ProjectionFactory 를 직접 사용하는 것입니다. 다음과 같이 Spr...