TreeSet이란? JDK 1.2부터 제공되고 있는 TreeSet은 HashSet과 마찬가지로 Set 인터페이스를 구현한 클래스로써 객체를 중복해서 저장할 수 없고 저장 순서가 유지되지 않는다는 Set의 성질을 그대로 가지고 있습니다. 하지만 HashSet과는 달리 TreeSet은 이진 탐색 트리(BinarySearchTree) 구조로 이루어져 있습니다. 이진 탐색 트리는 추가와 삭제에는 시간이 조금 더 걸리지만 정렬, 검색에 높은 성능을 보이는 자료구조입니다. 그렇기에 HashSet보다 데이터의 추가와 삭제는 시간이 더 걸리지만 검색과 정렬에는 유리합니다. TreeSet은 데이터를 저장할 시 이진탐색트리(BinarySearchTree)의 형태로 데이터를 저장하기에 기본적으로 nature ordering..
HashSet이란? HashSet은 Set 인터페이스의 구현 클래스입니다. 그렇기에 Set의 성질을 그대로 상속받습니다. Set은 객체를 중복해서 저장할 수 없고 하나의 null 값만 저장할 수 있습니다. 또한 저장 순서가 유지되지 않습니다. 만약 요소의 저장 순서를 유지해야 한다면 JDK 1.4부터 제공하는 LinkedHashSet 클래스를 사용하면 됩니다. Set 인터페이스를 구현한 클래스로는 HashSet과 TreeSet이 있는데 HashSet의 경우 정렬을 해주지 않고 TreeSet의 경우 자동정렬을 해준다는 차이점이 있습니다. Set의 가장 큰 장점은 중복을 자동으로 제거해준다는 점입니다. 만약 한 편의점에서 오늘 방문한 손님의 총숫자를 계산하고 싶을 경우도 있을 것입니다. 이럴 경우 오늘 하루..
Vector란? Vector는 ArrayList와 동일한 내부구조를 가지고 있습니다. ArrayList와 마찬가지로 Vector내부에 값이 추가되면 자동으로 크기가 조절되며 그다음 객체들은 한 자리씩 뒤로 이동됩니다. 하지만 모든 것이 다 똑같은 것은 아니고 Vector와 Arraylist의 한가지 다른 점이 있는데 Vector는 동기화된 메소드로 구성되어 있기 때문에 멀티 스레드가 동시에 이 메소드들을 실행할 수 없고, 하나의 스레드가 실행을 완료해야만 다른 스레드들이 실행할 수 있습니다. 그래서 멀티 스레드 환경에서 안전하게 객체를 추가하고 삭제할 수 있습니다. Vector의 단점 (ArrayList와의 비교) 벡터는 항상 동기화되는 장점이자 단점을 가지고 있습니다. 스레드가 1개일때도 동기화를 하기..
LinkedList란? 연결 리스트(LinkedList)는 각 노드가 데이터와 포인터를 가지고 한 줄로 연결되어 있는 방식의 자료구조입니다. 데이터를 담고 있는 노드들이 연결되어 있고, 노드의 포인터가 이전 노드와 다음 노드와의 연결을 담당합니다. Node는 LinkedList에 객체를 추가하거나 삭제하면 앞뒤 링크만 변경되고 나머지 링크는 변경되지 않습니다. 중간에 데이터를 추가나 삭제하더라도 전체의 인덱스가 한 칸씩 뒤로 밀리거나 당겨지는 일이 없기에 ArrayList에 비해서 데이터의 추가나 삭제가 용이하나, 인덱스가 없기에 특정 요소에 접근하기 위해서는 순차 탐색이 필요로 하여 탐색 속도가 떨어진다는 단점이 있습니다. 그러므로 탐색 또는 정렬을 자주 하는 경우엔 배열을 사용하고 데이터의 추가/삭제..
ArrayList란? ArrayList는 List 인터페이스를 상속받은 클래스로 크기가 가변적으로 변하는 선형리스트입니다. 일반적인 배열과 같은 순차리스트이며 인덱스로 내부의 객체를 관리한다는점등이 유사하지만 한번 생성되면 크기가 변하지 않는 배열과는 달리 ArrayList는 객체들이 추가되어 저장 용량(capacity)을 초과한다면 자동으로 부족한 크기만큼 저장 용량(capacity)이 늘어난다는 특징을 가지고 있습니다. ArrayList 사용법 ArrayList 선언 ArrayList list = new ArrayList();//타입 미설정 Object로 선언된다. ArrayList members = new ArrayList();//타입설정 Student객체만 사용가능 ArrayList num = n..
컬렉션 프레임워크란? 배열을 사용하다 보면 여러가지 비효율적인 문제가 생깁니다. 가장 큰 문제점은 크기가 고정적이라는 것입니다. 배열의 크기는 생성할 때 결정되며 그 크기를 넘어가게 되면 더이상 데이터를 저장할 수 없습니다. 또 데이터를 삭제하면 해당 인덱스의 데이터는 비어있어 메모리가 낭비되는 등 여러 문제점들이 발생합니다. 그렇기에 자바는 배열의 이러한 문제점을 해결하기 위해, 널리 알려져 있는 자료구조를 바탕으로 객체나 데이터들을 효율적으로 관리(추가, 삭제, 검색, 저장)할 수 있는 자료구조들을 만들어 놓았습니다. 이러한 자료구조들이 있는 라이브러리를 컬렉션 프레임워크라고 합니다. 대표적으로는 List, Set, Map, Stack, Queue 등이 있습니다. List 컬렉션 컬렉션 프레임워크를 ..
자바에서 배열이나 리스트를 정렬하려고 한다면 java.util.Arrays 클래스의 sort() 메서드를 사용하시면 따로 정렬 로직을 짜지 않아도 한번의 메소드 호출로 간편하게 배열이나 리스트를 정렬할 수 있습니다. Arrays클래스는 배열의 복사, 항목 정렬, 검색과 같은 배열을 조작 기능을 가지고 있습니다. 배열의 오름차순 정렬 Arrays.sort()메서드의 매개값으로 기본 타입 배열이나 String배열을 지정해주면 자동으로 오름차순 정렬이 됩니다. 기본타입 배열 오름차순 정렬 import java.util.Arrays; public class Sort{ public static void main(String[] args) { int arr[] = {4,23,33,15,17,19}; Arrays.s..
자바에서 객체를 복사하는 유형으로 깊은 복사와 얕은 복사가 있습니다. 깊은 복사의 경우 객체의 실제값을 새로운 객체로 복사하는 것이고 얕은 복사는 단순히 객체의 주소 값만을 복사하는 것입니다. 이 두가지 방식은 각각의 장단점이 있습니다. 먼저 얕은 복사의 경우 여러 객체가 같은 주소를 참조하기 때문에 하나의 값을 변경해버리면 다른 대상의 값 또한 바뀌어 버리는 문제 등이 발생합니다. 하지만 깊은 복사의 경우 실제로 대상이 두개가 생기므로 이러한 문제에서는 자유로울 수 있겠습니다. 반대로 메모리 측면에서 본다면 한 객체로 할 수 있는 일은 하나로 끝내는것이 좋습니다. 쓸데없이 두개 세개가 되면 그야말로 메모리 측면에서 본다면 비효율적이게 됩니다. 이렇듯 얕은 복사로 객체가 복사된다면 실제로는 하나의 주소 ..
래퍼 클래스란(Wrapper Class)? 자바의 자료형은 크게 기본 타입(primitive type)과 참조 타입(reference type)으로 나누어집니다. 대표적으로 기본 타입은 char, int, float, double, boolean 등이 있고 참조 타입은 class, interface 등이 있는데 프로그래밍을 하다 보면 기본 타입의 데이터를 객체로 표현해야 하는 경우가 종종 있습니다. 이럴 때에 기본 자료타입(primitive type)을 객체로 다루기 위해서 사용하는 클래스들을 래퍼 클래스(wrapper class)라고 합니다. 자바는 모든 기본타입(primitive type)은 값을 갖는 객체를 생성할 수 있습니다. 이런 객체를 포장 객체라고도 하는데 그 이유는 기본 타입의 값을 내부에..
자바에서는 문자열을 다루는 클래스로 String, StringBuffer, StringBuilder이라는 3가지 클래스가 있습니다. 위 3가지 클래스는 모두 문자열을 저장하고 관리하는 클래스이며 각 클래스 간에는 조금의 차이가 있습니다. String과 StringBuffer, StringBuilder의 차이점 String 객체는 한번 생성되면 할당된 공간이 변하지 않지만 StringBuffer나 StringBuilder의 경우 객체의 공간이 부족해지는 경우 버퍼의 크기를 유연하게 늘려줍니다. 이러한 특징을 일컬어 String은 불변(immutable)하고 StringBuffer와 StringBuilder는 가변(mutable)하다라고 합니다. StringBuffer와 StringBuilder의 차이점 S..
오늘은 갤럭시 탭 S6 사용후기에 대해 포스팅해보려 합니다. 갤럭시 탭 S6는 2019년 7월에 삼성에서 공개한 태블릿 PC이며 갤럭시 탭 S 시리즈의 여섯 번째 모델입니다. iOS에 아이패드가 있다면 안드로이드에는 삼성 갤럭시탭 시리즈가 대표라고 할 수 있습니다. 세계 태블릿PC 점유율에도 애플이 1위 삼성전자가 2위를 하고 있습니다. 갤럭시 탭의 판매율이 많이 떨어지긴했지만 애플대비 저렴한 가격으로 충분히 매리트가 있다고 생각됩니다. 국내 시장만 보면 거의 반반인 것 같습니다. ※ 갤럭시탭 S6은 아래 링크에서 쿠팡 최저가로 구매하실 수 있습니다. 삼성 갤럭시 탭 S6 사용 후기 갤럭시 S6의 전면 사진은 위와 같습니다. 적당한 크기도 좋고 개인적으로 버튼이 하나도 없는 풀스크린이 가장 마음에 듭니다..
오늘은 얼마전 친동생이 구매한 아이패드 에어 3세대를 리뷰해보려 합니다. 동생이 전자기기에 큰 관심이 없는 줄 알았는데 뜬금없이 산다고 해서 조금 의외였습니다. 동생의 취미생활은 유튜브 & 넷플릭스, 트위치 같은 영상 시청인데 아무래도 작은 핸드폰 화면으로 장시간 시청하기에는 무리가 있다고 생각한 듯합니다. 실제로 동생 아이패드를 몇 번 써보니 침대에서 영상 같은 것 보는 목적이라면 제가 가지고 있는 노트북 그램보다 아이패드가 훨씬 보기 편했습니다. 부가적으로 공부와 노트필기를 주로 하시는 분이라면 노트북보다 아이패드를 구매하여 필기를 하는 것도 좋습니다. 제 동생은 그렇게 하더라고요. ※ 아이패드 에어는 아래 링크에서 쿠팡 최저가로 구매하실 수 있습니다. 아이패드 에어의 장점 1. 가벼운 무게와 큰 화..
얼마 전 제가 잘 사용하고 있었던 저의 무선 이어폰 갤럭시 버즈를 분실하고 말았습니다. 갤럭시 버즈를 굉장히 만족하면서 사용하였었기에 재구매를 하려 했는데 갤럭시 버즈의 개선작인 갤럭시 버즈 플러스가 나왔더군요. 가격은 갤럭시 버즈보다 약 2~3만 원 정도 더 비싸기는 하지만 이미 샀었던 것을 또 사기도 그렇고 성능상으로 얼마나 개선되었을까 하는 궁금증에 갤럭시 버즈 플러스를 구매하게 되었습니다. ※ 갤럭시 버즈 플러스는 아래 링크에서 쿠팡 최저가로 구매하실 수 있습니다. 갤럭시 버즈 플러스 색상 선택 갤럭시 버즈 플러스는 위의 사진과 같이 블랙, 화이트, 블루, 레드 이렇게 4가지 색상이 있습니다. 무난하게 쓸것이라면 검은색 혹은 흰색같이 무채색을 추천드리지만 (무채색이 옷과 매치가 잘됩니다.) 저는 ..