𝑷𝒓𝒐𝒈𝒓𝒂𝒎𝒎𝒊𝒏𝒈/𝐽𝐴𝑉𝐴

𝑷𝒓𝒐𝒈𝒓𝒂𝒎𝒎𝒊𝒏𝒈/𝐽𝐴𝑉𝐴

[JAVA] Collection - Set (LinkedHashSet + HashSet)

이전 HashSet 포스팅 맨 아래에 적었던 것 처럼, HashSet은 정렬을 지원하지 않는다고 했는데 정렬이 되는 경우가 있었다. 그리고 왜 이렇게 되는 것인지에 대해 의문이 들었다. 그래서 이러한 궁금증에 알아볼 겸 오늘은 LinkedHashSet과 HashSet에 대해 알아보자! 먼저 Set의 종류들에 대해 다시 한 번 살펴보자. HashSet 순서를 보장하지 않는다 TreeSet보다 삽입, 삭제가 빠르다 (해시 테이블에 원소를 저장하여, 성능 면에서 가장 우수함) 내부적으로 HashMap을 사용한다 LinkedHashSet 입력된 순서를 보장한다 TreeSet 이진 탐색 트리 (Red-Black Tree)를 기반으로 한다 따라서 값에 따라 순서가 결정된다 (오름차순 정렬) 데이터의 삽입 / 삭제에..

𝑷𝒓𝒐𝒈𝒓𝒂𝒎𝒎𝒊𝒏𝒈/𝐽𝐴𝑉𝐴

[JAVA] Collection - Set (SortedSet, TreeSet)

이전 포스팅에서는 HashSet에 대해 정리해보았다. TreeSet에 대해서는 이전에 코딩테스트 문제를 풀면서 접해본 적이 있다. HashSet을 정렬하는 방법을 찾아보다가 발견했었는데, 오늘 그 자료구조에 대해 드디어 정리를 하게 되었다 ㅎㅎ TreeSet / SortedSet TreeSet은 이진검색트리 구조 (root와 node)이기 때문에 HashSet과는 다르게 추가적인 메소드들이 존재한다. TreeSet에 대해 얘기해보기 전에, 먼저 SortedSet에 대해 알아봐야할 것 같다. SortedSet 인터페이스는 Collection이기도 하며 Set이기도 하다 (Set을 상속한 인터페이스). SortedSet은 말그대로 원소들이 정렬되어있는 Set이다. SortedSet 객체 생성 시, 원소 정렬..

𝑷𝒓𝒐𝒈𝒓𝒂𝒎𝒎𝒊𝒏𝒈/𝐽𝐴𝑉𝐴

[JAVA] Collection - Set (HashSet)

얼마 전, 프리온보딩 Kotlin 과정을 신청했는데 사전과제 중 하나가 List, Set, Map에 대해서 설명하는 것이었다. 나는 코딩테스트를 풀 때 HashSet을 굉장히 많이 사용하는 편이라 Set에 대해서 자세히 알고있다고 생각했는데, 적다보니 막상 몇 줄 못적겠더라... 그래서 Set에 대해 한 번 정리하는 기회가 필요하다고 느꼈다. Set Set은 데이터의 집합이며, List와 다르게 순서가 보장되지 않고, 데이터의 중복값을 가질 수 없다. Set 인터페이스를 구현한 클래스로는 HashSet, LinkedHashSet, TreeSet이 존재한다. HashSet 인스턴스의 해시값을 기준으로 저장하기 때문에 순서를 보장하지 않는다. Null 값을 허용한다. 중복된 값을 허용하지 않는 특징이 있기 ..

𝑷𝒓𝒐𝒈𝒓𝒂𝒎𝒎𝒊𝒏𝒈/𝐽𝐴𝑉𝐴

[JAVA] Collection - List (Vector)

오늘은 List 인터페이스의 마지막! Vector에 대해서 알아보자. Vector(벡터)는 컬렉션 프레임워크(Collection Framework) 의 존재 이전에 추가된 레거시 클래스 중 하나이다. 현재는 Generic을 지원할 수 있도록 재설계 되었다. 내부에 배열을 가지고 있으며, 순서대로 값들이 저장된다. Vector와 ArrayList는 유사한 클래스이며, 크기가 가변적으로 변한다. 동기화를 제공하기 때문에 멀티스레드 환경에서 안전(Thread Safe)하다. 하지만 동기화로 인해 ArrayList보다 낮은 성능을 가지고 있다. (따라서 동기화가 필요하지 않을 때는 ArrayList를 사용한다) Vector 선언 방법 Vector vector1 = new Vector(); Vector vecto..

𝑷𝒓𝒐𝒈𝒓𝒂𝒎𝒎𝒊𝒏𝒈/𝐽𝐴𝑉𝐴

[JAVA] Collection - List (LinkedList)

저번 포스팅에서 ArrayList 를 정리해봤다. 사실 면접 질문에서 ArrayList와 LinkedList의 차이에 대해 질문 받은 적이 있다. 그때는 LinkedList에 대해서 정확히 정리가 안된 상태여서 제대로 답을 하지 못했다ㅠㅠ 앞으로 다시 같은 질문을 받으면 제대로 답할 수 있도록, 정리해봤다! LinkedList LinkedList는 ArrayList 와 장단점이 비교되는 리스트이다. ArrayList에서 빈번하게 중간 인덱스에서 데이터의 삽입이나 삭제가 발생할 경우, 인덱스를 조정하기 위해 그 뒤의 원소들을 하나씩 옮겨줘야하는 작업이 문제가 될 수 있다 (효율성이 떨어진다!). 이런 경우에는 양방향 연결 리스트(Doubly Linked List - 다음 원소와 이전 원소를 가리킴)로 구현..

𝑷𝒓𝒐𝒈𝒓𝒂𝒎𝒎𝒊𝒏𝒈/𝐽𝐴𝑉𝐴

[JAVA] Collection - List (ArrayList)

코딩테스트를 풀이 중, 나는 자료구조를 변경하는 일이 나에겐 종종 생긴다. 왜 처음부터 딱 맞는 자료구조를 고르지 못할까? 하는 생각이 들었다. 그 이유가 제대로 이해를 하지 못하고 있어서라고 생각했고, 자료구조에 대해 한 번 더 정리하기 위해 포스팅을 하려한다! Collection 이란? 컬렉션이란, 객체의 그룹을 조작하고 저장할 수 있는 자료구조 이다. 각각 제너릭을 통해 특정 타입의 컬렉션을 생성할 수 있고, 각 특징에 알맞은 상황에 적합한 것을 골라 쓰는 것이 좋다. 먼저 컬렉션의 종류는 굉장히 많은데, 크게 List, Queue, Set 으로 나뉜다. List List는 배열처럼 흔히 쓰이는 순서(인덱스)를 가지는 원소들의 모임으로, 중복값을 가질 수 있다. ArrayList, LinkedLis..

𝑷𝒓𝒐𝒈𝒓𝒂𝒎𝒎𝒊𝒏𝒈/𝐽𝐴𝑉𝐴

[디자인패턴] 프록시(Proxy) 패턴

특정 객체에 대한 접근을 제어하거나 기능을 추가할 수 있는 패턴이다. 요청을 proxy라는 대리인을 거쳐서 쓰는 패턴이다 = 초기화 지연, 접근 제어, 로깅, 캐싱, 액세스 권한 확인 등 사용 가능 → 성능 향상 클라이언트 → realSubject (X) 클라이언트 → Proxy → realSubject (O) 기존에 생성된 class 코드를 변경하지 않고 사용 하는 방법 기존에 작성된 GameService의 startGame()의 실행시간까지 알고 싶을 때 GameService를 상속받은 GameServiceProxy를 생성 (재정의 하여 사용) public class GameService { public void startGame() { System.out.println("이 자리에 오신 여러분을 진..

𝑷𝒓𝒐𝒈𝒓𝒂𝒎𝒎𝒊𝒏𝒈/𝐽𝐴𝑉𝐴

[디자인패턴] 싱글톤(Singleton) 패턴

싱글톤 패턴은 객체의 인스턴스가 오직 1개만 생성 되는 패턴 이다. 시스템 런타임, 환경세팅에 대한 정보 등, 인스턴스가 여러개 일 때 문제가 생길 수 있는 경우가 있다. 인스턴스를 오직 한개만 만들어 제공하는 클래스가 필요하다. 예를 들어, 설정 화면은 딱 하나의 인스턴스에서만 변경할 수 있게 해야한다. 어떤 설정에서는 엔터가 저장이고, 다른 설정에서는 클릭이 저장이면 헷갈릴 것이다. 이러한 경우 처럼 딱 하나만 필요한 경우가 존재하기 때문에 싱클톤 패턴이 존재한다. 싱글톤 패턴을 사용하는 이유 메모리 측면 (한번의 new를 통해 고정된 메모리 영역을 사용) → 속도 향상의 이점 데이터 공유가 쉽다 (싱글톤 인스턴스가 전역으로 사용되는 인스턴스이기 때문에 다른 클래스의 인스턴스들에서 접근하여 사용 가능..

기누
'𝑷𝒓𝒐𝒈𝒓𝒂𝒎𝒎𝒊𝒏𝒈/𝐽𝐴𝑉𝐴' 카테고리의 글 목록 (2 Page)