본문 바로가기
반응형

학습146

Array vs ArrayList 개요 Array와 ArrayList의 차이점을 알아보겠습니다. ArrayList는 내부적으로 Array로 구현합니다. 1. Array는 길이가 고정된 자료구조인 반면, ArrayList는 가변 컬렉션 클래스입니다. Array는 한번 만들어지면 길이를 변경할 수 없지만, ArrayList는 용량이 다 차면 스스로 사이즈를 늘립니다. (엄밀히 말해서 Array는 length이고, ArrayList는 size입니다.) ArrayList에서 사이즈를 늘리는 것은 성능이 다소 저하됩니다. ArrayList의 내부가 Array로 구현되어 있는데, 새로운 Array를 만들고 이전 값들을 모두 새로운 Array로 복사하기 때문입니다 2. Array에서 Generics를 사용 할 수 없습니다. 타입이 정해져 있으며, 변.. 2022. 10. 17.
HashSet은 내부가 어떻게 구현이 되어 있는가? 개요 HashSet의 내부 구조를 알아보겠습니다. HashSet은 구현 시, HashMap을 이용합니다. HashSet 특징 HashSet 클래스는 Set 인터페이스를 구현하고, 내부적으로 hash table을 사용합니다(실제로는 HashMap입니다.) set의 저장 순서가 보장되지 않습니다. null 요소를 허용합니다 해쉬 함수가 버킷에 요소를 적절하게 분배한다면, add, remove, contains, size 등에 시간 성능이 좋습니다. HashSet 순회는 요소의 개수와 버킷의 용량을 합친 만큼 시간이 듭니다. 따라서, 순회 성능이 중요하다면, 초기에 너무 높은 용랑을 설정하지 않도록 합니다. HashSet은 동기화가 되지 않습니다. 멀티 쓰레드 환경에서 동시에 접근하고, 최소한 1개의 쓰레드가.. 2022. 10. 15.
ConcurrentHashMap vs Hashtable vs Synchronized Map 개요 멀티쓰레드 자바 어플리케이션에서 Hashtable, Vector는 병목현상이 되었습니다. 따라서 JDK 1.5는 대용량, 짧은 대기 시간에 매우 효율적인 몇 가지 우수한 동시 컬렉션을 도입했습니다 3가지 컬렉션이 모두 쓰레드 안전하고 멀티 쓰레드, 동시성 자바 어플리케이션에서 사용합니다. 하지만, 쓰레드 안전 구현에 차이가 있습니다. Hashtable은 JDK 1.1에 등장한 레거시 클래스로 동기화 메서드를 사용해 동기화 안전을 보장합니다. Hashtable의 모든 메서드들은 동기화되어 있으므로 쓰레드가 증가할 때마다 느려집니다. Synchronized Map은 Hashtable처럼 동시성 자바 프로그램 사용합니다. 하지만 Hastable과 달리 레거시 클래스가 아니고 Collections.sync.. 2022. 10. 15.
equals() 와 hashCode()는 왜 재정의 해야 할까? 개요 롬복으로 equals()를 재정의하면 항상 hashCode()도 같이 재정의하도록 안내하고 있습니다. 어노테이션도 @EqualsAndHashCode입니다. 이는 Map, Set 등의 자바 컬렉션 클래스가 equals, compareTo, hashCode를 사용하기 때문입니다. equals와 hashCode를 같이 재정의 하지 않으면 원하는 대로 동작하지 않을 수도 있습니다.(해쉬 테이블에서 키로 사용할 때 기준입니다) 따라서 이번 시간에는 equals와 hashCode를 알아보겠습니다.. equals() 자바의 equals() 와 hashCode()는 Object 클래스에 있기 때문에, 모든 자바 클래스는 기본적으로 equals()와 hashCode() 구현체를 가집니다. equals() 자바 공식.. 2022. 10. 14.
HTTP Method for Restful Services 개요 REST(Representational State Transfer) 란 웹 서비스를 개발하는 아키텍쳐 스타일입니다. REST 사용의 가장 큰 장점은 인터넷 HTTP를 사용하는 사람들에게 친숙한 구성을 사용해 REST 기반으로 상호작용하는 것입니다. REST에서 가장 까다로운 작업 중 하나는 올바른 HTTP 메서드 선택입니다. 대부분 개발자은 GET, POST, PUT, DELETE 등의 메서드를 압니다. 그러나 이따금 잘못 사용합니다. 각 HTTP Method의 특징, 안전한 메서드(Safe methods), 멱등성 메서드(Idempotent Methods)을 알아보겠습니다. 안전한 메서드(Safe methods)란? 안전한 메서드(Safe methods)는 서버에 있는 자원들을 변경시키지 않는 H.. 2022. 10. 14.
sort merge join 개요 테이블 조인의 경우 nested loop join, hash join, sort merge join 3가지가 있습니다. 이번 시간에는 sort merge join을 알아보겠습니다. sort merge join sort merge join은 내부적으로 정렬을 하고 조인을 하는 방식으로, not equal join에서 성능 향상을 위해 사용할 수 있는 방법입니다. non equal join이란 아래와 같이, where e.sal between s.losal and s.hisal 처럼 '='으로 이루어지지 않은 조인 형식을 말합니다. 아래와 같이, emp 테이블은 DEPTNO를 정렬해서 조인합니다. 따라서 dept 테이블은 emp테이블에 모든 행을 매번 접근하는 것이 아니라, 정렬에 따라서 종료된느 시점.. 2022. 10. 10.
hash join 개요 오라클에서 조인의 방법은 총 3가지가 있습니다. nested loop join, hash join, merge join 중에서 hash join을 알아보겠습니다. hash join hash join은 선행 테이블을 해쉬 테이블로 설정하여 ROWID 대신, 해쉬값을 사용해서 대용량 데이터를 빠르게 처리하기 위한 방법입니다. nested loop join는 대용량 테이블을 조회할 때 적합하지 않습니다. for문 형식으로 계속 반복조회하기 때문입니다. nested loop join는 ROWID를 찾아서 다른 테이블과 조인했습니다. hash join은 선행 테이블을 해쉬 테이블이라 하며, 해쉬값을 저장하고 있으며, 오라클의 PGA에 저장됩니다. ROWID를 쓰지 않고 새로운 해쉬값을 할당받아 저장되므로, .. 2022. 10. 10.
인덱스 스캔 7가지 종류 개요 오라클에서 인덱스 스캔 방식이 많이 있는데 7가지를 정리해 보겠습니다. 오라클 옵티마이저가 자신이 판단할 때 최선의 선택을 하겠지만, 가끔 비효율적인 인덱스 스캔을 한다면 7가지를 알아두고 적절한 인덱스 스캔을 적용하면 개선할 수 있습니다.  그전에 먼저 인덱스가 적용되기 위한 WHERE 절 가공에 대한 사전 지식을 알아보겠습니다. WHERE절의 좌변을 가공하지 마라인덱스 칼럼이 제대로 적용이 되기 위해서는 WHERE 절의 좌변을 절대로 가공해서는 안됩니다. 우변을 가공해야 합니다.  숫자형 컬럼 인덱스 가공SELECT ename, sal*12 FROM emp WHERE sal * 12 = 36000; (X)-> SELECT ename, sal*12 FROM emp WHERE sal = 36000/.. 2022. 10. 8.
커밋 메세지 본문은 "어떻게"보다 "무엇을", "왜"에 맞춰 작성하기 커밋 메세지 작성의 중요성 개발자의 개발 능력 못지 않게, 협업 능력이 중요하다는 것은 이제 모든 개발자들이 공감하는 부분 일 것입니다. 좋은 협력이란 핵심을 딱딱 짚는 좋은 커뮤니케이션 능력과 부드럽고 협조적인 대화스킬도 있겠지만, 커밋 메세지 작성의 견고함도 포함된다고 생각합니다. 코드로 승부하는 IT 세계에서, 다른 동료들과 협업할 때 나의 작업물의 의도를 커밋메세지로 잘 드러내는 것 만큼, 다른 동료들의 업무 향상성을 높이는 길이 없습니다. 좋은 커밋 메세지를 작성하기 위한 여러가지 가이드라인이 있습니다. 대표적으로 Chris Beams의 How to Write a Git Commit Message 글에서 7가지를 소개하고 있는데, 그 중에 커밋 메세지의 본문은 어떻게보다 무엇을, 왜에 맞춰 작성.. 2022. 9. 8.
반응형