본문 바로가기

Language/Java

(14)
[Java] Synchronized 키워드를 알아보겠습니다. Synchronized 키워드Java 는 synchronized 키워드를 사용하여 멀티 스레드 환경에서 스레드 간 동기화와 상호 배제를 보장하기 위해 모니터 락(Monitor Lock)을 내부적으로 사용합니다. 이 락은 하나의 스레드만 임계 구역에 접근하도록 하여 데이터의 무결성을 보장합니다. 이 과정에서 JVM 은 다음 작업을 수행합니다.락을 얻기 위한 경쟁 처리락 상태 업데이트락 소유자가 해제될 때 다른 대기 중인 스레드에게 락을 전달synchronized 키워드는 다음과 같은 경우에 사용할 수 있습니다.synchronized methodstatic synchronized methodsynchronized block1. Synchronized methodSynchronized Method는 인스턴스 ..
[Java] 정렬 기준 Comparator과 Comparable 에 대해 알아보겠습니다. Comparator과 Comparable의 필요성정렬을 하기 위해서는 '기준'이 필요합니다. 기본적으로 int, double 과 같은 primitive 타입의 변수는 자연스럽게 대소 관계가 존재하기 때문에 정렬 기준을 쉽게 설정할 수 있습니다. 예를 들어, 1  하지만 객체는 정렬 기준이 자동으로 존재하지 않습니다. 예를 들어, 아래와 같은 Person 클래스를 정의했다고 가정해보았습니다.public class Person{ int age; int phoneNumber; public Person(int age, int phoneNumber){ this.age = age; this.phoneNumber = phoneNumber; }}Person p1 = ne..
[Java] 배열을 정렬해보겠습니다. 배열 정렬Java 에서 배열을 정렬하기 위해서는 Arrays.sort() 메서드를 사용합니다. 이 메서드를 통해 int 형 배열을 오름차순으로 정렬할 수 있습니다. 이때, 정렬된 배열은 새로 반환되는 것이 아니라, 원본 배열 자체가 정렬됩니다.int[] arr = new int[]{34, 100, 50, 27};Arrays.sort(arr);System.out.println(Arrays.toString(arr)); //[27, 34, 50, 100] Arrays.sort() 메서드는 내부적으로 Dual-Pivot QuickSort 알고리즘을 사용하여 배열을 정렬합니다.public static void sort(int[] a) { DualPivotQuicksort.sort(a, 0, a.len..
[Java] Queue 인터페이스 Queue 자료구조 (추후 블로깅 예정) Queue interface 사용법 Queue 선언 Queue 인터페이스는 Collection 프레임워크를 상속받으며, LinkedList, PriorityQueue 클래스 등으로 구현할 수 있다. import java.util.Queue; public interface Queue extends Collection Queue queue = new LinkedList(); Queue 메소드 목록 큐의 메소드는 두가지 형태로 되어있다. 하나는 만약 연산에 실패하게 된다면 예외를 던지고, 다른 하나는 특별한 값(null값이나 false)를 리턴한다. Queue 값 추가 queue는 FIFO 구조이기 때문에 rear(뒤)부터 값이 추가된다. public boolean a..
[Java] Stack 클래스 Stack 자료구조 (추후 블로깅 예정) Stack class 사용법 Stack 선언 Stack 클래스는 Vector 클래스를 상속받는다. (당연히 vector 클래스의 메소드를 사용할 수 있다.) Stack 생성 시 제네릭 부분에는 사용할 객체를 담으며 되며 생성되면 어떤 원소도 포함하지 않는다. import java.util.Stack; public class Stack extends Vector Stack stack = new Stack(); //Integer 스택 선언 Stack 값 추가 public E push(E item) stack은 LIFO 구조이기 때문에 다음과 같이 stack에 쌓이게 된다. Integer element1 = stack.push(1); //element1 == 1 Int..
[Java] Set 인터페이스 Set 인터페이스수학에서의 집합과 비슷하다.요소의 중복을 허용하지 않고, 저장 순서를 유지하지 않는 컬렉션기능리턴 타입메소드설명객체 추가booleanadd(Object element)주어진 객체를 추가하고, 성공하면 true를 중복 객체면 false를 반환한다.객체 검색booleancontains(Object o)주어진 객체가 Set에 존재하는지 확인한다. booleanisEmpty()Set이 비었는지 확인한다. IteratorIterator()저장된 객체를 하나씩 읽어오는 반복자를 리턴한다. intsize()저장되어 있는 전체 객체의 수를 리턴한다.객체 삭제voidclear()Set에 저장된 모든 객체를 삭제한다. booleanremove(Object o)주어진 객체를 삭제한다. HashSetSet 인..
[Java] List<E> 인터페이스 List 인터페이스배열과 같이 객체를 일렬로 늘어놓은 구조를 가지고 있다.객체를 저장하면 자동으로 인덱스가 부여되고, 인덱스로 객체를 검색, 추가, 삭제할 수 있는 등의 여러 기능을 제공한다.List 인터페이스를 구현한 클래스에는 LinkedList, ArrayList, Stack, Vector 등이 있다. List 인터페이스 메소드Collection 인터페이스의 메소드 또한 상속받아서 사용이 가능하다. ArrayListArrayList 객체명 = new ArrayList(초기 저장 용량);//초기 용량이 인자로 전달되지 않으면 기본적으로 10으로 지정된다.기능적으로 Vector와 동일하고 이를 개선한 것이다. 리스트 계열 자료구조의 특성을 이어받아 데이터가 연속적으로 존재한다.(데이터의 순서 유지) 배..
[Java] Map 인터페이스 Map 인터페이스Map 인터페이스는 키(key)와 값(value)으로 구성된 객체인 Entry 객체를 저장하는 구조로 되어있다. Entry 객체는 키와 값을 각각 Key 객체와 Value 객체로 저장한다. 즉, key, value 값은 기본형일 수 없다.키는 중복으로 저장될 수 없지만, 값은 중복 저장이 가능하다. Map 인터페이스를 구현한 클래스에는 HashMap, Hashtable, TreeMap, SortedMap 등이 있다. Map 인터페이스 메소드 HashMap해시 함수를 통해 키와 값이 저장되는 위치를 결정하므로, 사용자는 그 위치를 알 수 없고 삽입되는 순서와 위치 또한 관계가 없다. 해싱을 사용하기 때문에 많은 양의 데이터를 검색하는데에 있어서 뛰어난 성능을 보인다.HashMap의 개별 요..