Java 36

[Java] StringBuilder

StringBuilder StringBuffer와 마찬가지로 문자열 변경이 가능하다. StringBuffer vs StringBuilder의 차이는 뭘까? 가장 큰 차이점은 동기화의 유무이다. StringBuffer는 동기화 키워드를 지원하여 멀티쓰레드 환경에서 안전하다는 점이다. 반대로StringBuilder는 동기화를 지원하지 않기때문에 멀티쓰레드 환경에서 사용하는 것은 적합하지 않다. 하지만 동기화를 고려하지 않는 만큼 단일쓰레드에서의 성능은 StringBuffer 보다 뛰어나다. StringBuffer는 메모리에 할당된 공간이 16이다. 그럼 StringBuilder는? 아래 코드를 보면 동일한 공간을 갖는 것을 알 수 있다. public class Main { public static void ..

Java 2022.10.03

[Java] String VS StringBuffer

String VS StringBuffer String 클래스의 인스턴스는 한 번 생성되면 값을 변경할 수 없다. StringBuffer 클래스는 값을 변경할 수도 있고, 추가할 수도 있다. String은 덧셈(+) 연산자를 이용해 문자열을 결합하면, 내용이 합쳐진 새로운 String인스턴스를 생성한다. 따라서 문자열을 많이 결합할수록 공간을 낭비하고, 속도 또한 느려진다. StringBuffer는 내부적으로 버퍼라는 독립적인 공간을 가진다. 버퍼의 기본 크기는 16개의 문자를 저장할 수 있는 크기이며, 생성자를 통해 크기를 별도로 설정할 수도 있다. 인스턴스 생성 시 사용자가 설정한 크기보다 언제나 16개의 문자를 더 저장할 수 있도록 여유 있는 크기로 생성된다. 따라서 문자열을 바로 추가할 수 있으며,..

Java 2022.10.01

[Java] Map 컬렉션 클래스

Map 컬렉션 클래스의 특징 키와 값을 하나의 쌍으로 저장하는 방식을 사용한다. (key-value) key는 실질적인 값(value)을 찾기 위한 이름의 역할이다. 요소에 순서가 없다. key는 중복을 허용하지 않지만, value의 중복은 가능하다. 대표적인 클래스 HashMap Hashtable TreeMap HashMap Map 컬렉션 클래스에서 가장 많이 사용되는 클래스 해시 알고리즘을 사용하여 검색 속도가 빠르다. 중복된 키 X, 같은 값을 다른 키로 저장하는 것은 가능하다. Hashtable HashMap 클래스와 같은 동작을 하는 클래스지만, 현재에는 기존 코드와의 호환성을 위해서 남아있다한다. 고로 HashMap 클래스를 사용하는 것이 좋다. TreeMap key-value를 이진검색트리(..

Java 2022.09.28

[Java] Set 컬렉션 클래스

Set 컬렉션 클래스의 특징 요소의 저장 순서가 없다. 요소의 중복을 허용하지 않는다. 대표적인 클래스 HashSet TreeSet HashSet 가장 많이 사용되는 클래스로, 해시 알고리즘을 사용하여 검색 속도가 빠르다. 만약 요소의 저장 순서를 유지해야 한다면 JDK 1.4부터 제공하는 LinkedHashSet 클래스를 사용하자. import java.util.HashSet; public class Main { public static void main(String[] args) { HashSet hs = new HashSet(); // add(): 요소 저장 hs.add("해시"); hs.add("셋"); hs.add("hash"); hs.add("set"); hs.add("set"); for (S..

Java 2022.09.25

[Java] Deque

덱은 Double-Ended Queue의 줄임말로 큐의 양쪽에 데이터를 삽입하고 삭제할 수 있는 자료구조다. 하나의 자료구조에 큐(Queue)와 스택(Stack)을 합쳐 놓은 형태라고 생각하면 된다. Deque를 구현하는 클래스 ArrayDeque LinkedList LinkedBlockingDeque ConcurrentLinkedDeque 메소드에 따라 덱의 앞쪽에 요소를 추가, 삭제하거나 덱의 뒤쪽에 요소를 추가, 삭제할 수 있다. 주요 메소드: https://soft.plusblog.co.kr/24

Java 2022.09.24

[Java] Stack & Queue

Stack 마지막에 저장한 데이터를 가장 먼저 꺼내는 LIFO구조(Last In First Out) => 후입선출 Stack클래스는 Vector클래스를 상속받으며, Vector클래스의 메소드 5개를 상속받아 사용한다. import java.util.Stack; public class Main { public static void main(String[] args) { Stack st = new Stack(); // push(): 요소 저장 st.push(10); st.push(20); st.push(30); st.push(40); // peek(): 제일 마지막으로 들어온 요소 반환 System.out.println(st.peek()); // 40 System.out.println(st); // [10,..

Java 2022.09.23

[Java] List 컬렉션 클래스

List 컬렉션 클래스의 특징 요소의 저장 순서가 유지된다. 같은 요소의 중복 저장을 허용한다. 대표적인 클래스 ArrayList LinkedList Vector Stack ArrayList 가장 많이 사용되는 클래스 내부적으로 배열을 이용하여 요소를 저장한다. 배열을 이용하기 대문에 인덱스를 이용해 배열 요소에 빠르게 접근할 수 있다. 하지만 요소의 추가 및 삭제 작업에 걸리는 시간이 길다는 단점이 있다. 크기를 늘리기 위해서 새로운 배열을 생성하고 기존의 요소를 옮기는 과정을 거치기 때문이다. import java.util.ArrayList; import java.util.Collections; public class Main { public static void main(String[] args) ..

Java 2022.09.21

[Java] 컬렉션 프레임워크

컬렉션 프레임워크(collection framework) 다수의 데이터를 쉽고 효과적으로 처리할 수 있는 표준화된 방법을 제공하는 클래스의 집합을 의미한다. 즉, 데이터를 저장하는 자료 구조와 데이터를 처리하는 알고리즘을 구조화하여 클래스로 구현해 놓은 것이다. 컬렉션 프레임워크는 자바의 인터페이스를 사용하여 구현된다. 컬렌션 프레임워크 주요 인터페이스 List 인터페이스(List) 순서가 있는 데이터의 집합으로, 데이터의 중복을 허용한다. 구현 클래스: Vector, ArrayList, LinkedList, Stack, Queue Set 인터페이스(Set) 순서가 없는 데이터의 집합으로, 데이터의 중복을 허용하지 않는다. 구현 클래스: HashSet, TreeSet Map 인터페이스(Map) 키와 값의..

Java 2022.09.19

[Java] 람다식과 함수형 인터페이스

람다식(lambda expression) 람다식이란 메서드를 하나의 식(expression)으로 표현한 것을 뜻한다. 익명 함수라고도 한다. 매개변수로 들어온 값을 더하는 메서드를 람다식으로 표현해보자. // 일반 메서드 int sum(int x, int y) { return x + y; } // 람다식 (매개변수목록) -> {함수몸체} (int x, int y) -> { return x + y } 함수형 인터페이스(functional interface) 람다식을 다루기 위한 인터페이스를 함수형 인터페이스라고 한다. 함수형 인터페이스에는 오직 하나의 추상메서드만 정의되어 있어야한다. // 참조변수의타입이 바로 함수형 인터페이스 참조변수의타입 참조변수이름 = 람다 표현식@FunctionalInterface..

Java 2022.09.17

[Java] 제네릭 generic

제네릭이란 클래스 내부에서 사용할 데이터 타입을 외부에서 지정하는 기법이다. 제네릭 선언 및 생성 // 선언 class MyClass { T element; void setElement(T element) { this.element = element; } T getElement() { return element; } } public class Main { public static void main(String[] args) { // 생성: 예시로 Integer타입 명시함 MyClass mc = new MyClass(); mc.setElement(777); System.out.println(mc.getElement()); // 777 } }// Java SE 7부터 인스턴스 생성 시 타입을 추정할 수 있는..

Java 2022.09.17