백엔드/자바
-
지네릭스(Generics) - 지네릭 소개, 지네릭 클래스백엔드/자바 2021. 5. 21. 11:13
지네릭스란(Generics)란? 다양한 타입의 객체를 다루는 메서드, 컬렉션에 입력 가능한 객체를 제한하게 하는 기능이다. 좀 더 직관적으로 쓰자면 특정 메서드나 컬렉션에 들어가는 자료형을 제한하는 것이다. 지네릭스의 필요성 예를 들어 위와 같이 String 객체만 들어가길 원하는 ArrayList가 있다고 가정해보자. 기존에 잘 모를 때는 지네릭스 없이 위와 같은 형식으로 객체를 생성하고 사용했다. 하지만 이렇게 생성할 경우 코드는 줄지만 반대로 여러가지 문제점 있다. 예를 들어 위와 같은 상황처럼 데이터를 입력받고, 이걸 변수에 저장한 뒤 출력하는 코드를 가정해보자. 컴파일러가 실행(런타임) 전에 확인할 때는 어떠한 오류도 없다. 우선 실행 결과를 보도록 하자. 컴파일러는 문제가 없다고 했지만, 실제..
-
컬렉션 - Collections 클래스와 메서드백엔드/자바 2021. 5. 20. 19:37
Collections란? Arrays가 배열 관련 메서드를 제공하는 것처럼 Collections는 컬렉션과 관련된 메서드를 제공한다. Arrays, Collections, Objects와 같은 클래스들은 모두 Static 메서드를 제공한다. 그래서 객체 생성없이도 편리하게 다양한 기능을 이용할 수 있다. fill(), copy(), sort(), binarySearch() 등 기본 기능이 있으나 Arrays의 클래스의 메서드들과 기능이 동일하다. 동기화 - synchronizedXXX() 과거 Vector, Hashtable와 같은 자료구조 클래스들은 동기화가 처리되어있었다. 그래서 무슨 자료구조를 사용하든 기본적으로 동기화가 되었었다. 하지만 모든 프로그램이 멀티 쓰레드 프로그래밍을 하는 것이 아니다...
-
컬렉션 - Arrays 클래스와 메서드백엔드/자바 2021. 5. 20. 16:56
Arrays 클래스는 배열을 다루는데 유용한 메서드들이 정의되있다. 모든 메서드가 모든 Static으로 별도로 객체를 생성없이도 언제든 사용이 가능하다. 배열의 복사 - copyOf(), copyOfRange() copyOf()는 배열 전체를 복사해서 새로운 배열을 만들어서 반환한다. 반면 copyOfRange()는 지정한 범위만큼 복사를 해서 새로운 배열을 반환한다. 이때 copyOfRange()에 지정된 범위의 끝은 포함하지 않는다. public static void main(String[] args) { int arr [] = {0, 1, 2, 3, 4}; int arr1 [] = Arrays.copyOf(arr, arr.length); // {0, 1, 2, 3, 4} int arr2 [] = A..
-
컬렉션 - Comparable와 Comparator백엔드/자바 2020. 8. 17. 04:01
Comparable와 Comparator는? 객체의 정렬에 필요한 메서드(정렬 기준 제공)을 정의한 인터페이스. Comparable은 특정 클래스의 기본 정렬 기준(디폴트)를 구현하기 위해 사용된다. 반면 Comparator는 기본 정렬이 아닌 그 이외의 정렬을 사용하고자 할 때 사용된다. Comparable과 Comparator는 모두 인터페이스로 이를 클래스에 구현해서 정렬 순서를 정할 수 있다. Comparable을 구현할 경우는 compareTo() 메서드를 구현해야 한다. Comparator를 구현할 경우는 compare() 메서드를 구현해야 한다. Comparable의 compareTo() 메서드는 1개 객체를 매개변수로 받는다. 즉 compareTo()는 해당 메서드를 호출한 객체와 매개변수..
-
컬렉션 - iterator, Listiterator, Enumeration백엔드/자바 2020. 8. 17. 02:44
iterator, ListIterator, Enumeration이란? 컬렉션에 저장된 데이터에 접근하는데 사용되는 인터페이스. Enumeration은 iterator의 구 버전으로서 현재는 주로 iterator가 사용된다. 다만 오래된 코드들의 지원을 위해 Enumeration은 여전히 지원하고 있다. 그래서 실제 학습은 itertor만으로 충분하다. 해당 인터페이스들의 필요성 컬렉션에서 전체 데이터를 한 번에 읽어올 때 다소 번거로운 감이 있다. List, Set, Map의 자료 구조가 모두 다르고, 읽어오는 방법도 제각각이기 때문이다. 그래서 등장한 것이 바로 iterator 계열의 인터페이스다. iterator 계열의 인터페이스들은 컬렉션에 저장된 요소들을 읽어오는 방법을 표준화한다. 이를 이용하면..
-
컬렉션 - MAP 출력 방법백엔드/자바 2020. 8. 17. 02:25
컬렉션에서 List와 Set은 데이터를 읽어오기가 간편하다. 반면 Map의 경우 데이터가 키(key), 값(value)로 나뉘다보니 상대적으로 읽기가 까다롭다. 그래서 이번 포스트에선 Map 데이터를 읽어오는 방법에 대해 정리하고자 한다. forEach + keySet( ) 이용하기 keySet( ) 함수를 이용해서 key만 따로 Set 형태로 저장한다. 그 뒤 for-each 문을 이용해서 추출한 key를 get( ) 메서드를 써서 값(value)을 얻어내면 된다. public static void main(String[] args) { Map player = new TreeMap(); player.put("야구", "류현진"); player.put("축구", "손흥민"); player.put("피겨"..
-
컬렉션 Map - TreeMap백엔드/자바 2020. 8. 17. 01:45
TreeMap이란? TreeMap은 Map 인터페이스를 구현한 클래스다. TreeMap은 키(key), 값(value)로 이뤄진 Entry객체를 이진탐색트리 형태로 저장한다. TreeSet과의 차이라면, TreeSet은 일반객체를 저장하고 TreeMap은 Entry객체를 저장한다. HashMap과의 차이라면, HashMap은 해싱을 통해 해시테이블(배열+연결리스트) 형태로 Entry객체를 저장한다. 반면, TreeSet은 이진 탐색 트리 형태로 Entry객체를 저장한다. 일반 탐색은 HashMap이 TreeMap에 비해 유리하고, TreeMap은 범위탐색, 정렬에 유리하다. TreeMap사용하기 TreeMap은 이전에 올린 HashMap과 큰 차이가 없다. 또한 이진 탐색 트리로 자료가 저장되므로, 범위..
-
컬렉션 Map - HashMap백엔드/자바 2020. 8. 17. 00:58
HashMap이란? Map 인터페이스를 구현한 클래스로 Map의 특징을 그대로 갖는다. Map은 키(key)와 값(value) 한쌍으로 구성된 자료구조를 말한다. HashMap은 해싱 기법을 사용해 Map의 형태로 자료를 저장하게 된다. 이때 Map의 형태로 저장할 때 key객체와 value객체를 멤버로 가진 Entry 객체를 이용한다. 간단히 저장되는 방식을 그림을 보자면 아래와 같다. 데이터를 Map의 형태로 저장하면 위 그림처럼 키, 값으로 나눠진다. (HashMap 뿐 아니라 TreeMap도 위와 같은 방식으로 객체에 데이터를 저장한다.) 이때 알아둬야 할 것은 값(value)는 중복되어도 상관없지만, 키(key)는 중복되선 안된다. 만약 키가 중복될 경우에는 기존에 있던 키의 값은 새로 입력한 ..