[Java, Stack] 왜 Stack이 아닌 Deque로 스택을 구현해야 할까?
·
Backend/Java
Stack 클래스가 상속하고 있는 Vector가 문제가 되기 때문에 Deque 사용을 권장한다. ❌ Stack stack = new Stack();⭕ Deque stack = new ArrayDeque(); Vector는 자바 버전 1부터 있었던 굉장히 오래된 클래스이기 때문에 여러모로 취약점이 많다. 1️⃣Stack은 Vector를 상속받아 구현되어 있다.상속으로 부모 메서드를 공유하기 때문에 Stack을 사용자가 잘못되게 사용할 수 있는 문제가 발생한다.Vector에는 원하는 index에 객체를 끼워 넣을 수 있는 insertElementAt이라는 메서드가 존재한다.문제는 Stack이 Vector를 상속받았기 때문에 insertElementAt 사용이 가능하다는 점이다.후입 선출이 보장되어야 하..
[Java] StringTokenizer 란?
·
Backend/Java
1️⃣StringTokenizer이란문자열을 구분자를 이용하여 분리할 때 사용한다.공백 혹은 컴마를 기준으로 문자열을 분리하고 싶을 때, 아니면 특정 문자열을 나누고 싶을 때 StringTokenizer을 사용한다.주로 BufferedReader를 사용할 때 활용한다. 2️⃣생성하는 방식1. 띄어쓰기를 기준으로 문자열을 분리StringTokenizer st = new StringTokenizer(문자열);// StringTokenizer st = new StringTokenizer("aa bb cc");2. 구분자를 기준으로 문자열을 분리StringTokenizer st = new StringTokenizer(문자열, 구분자);// StringTokenizer st = new StringTokenizer..
[Java] BufferedReader, BufferedWriter 란?
·
Backend/Java
0️⃣사용 시 주의사항(1) 클래스를 import해주어야 한다.import java.io.IOException;(2) main 클래스 옆에 throws IOException를 작성한다.public static void main(String[] args) throws IOException {}1️⃣BufferedReader의 특징사용자가 요청할 때마다 데이터를 읽어 오는 것이 아닌 일정한 크기의 데이터를 한번에 읽어와 Buffer에 보관,사용자의 요청이 있을 때 버퍼에서 데이터를 읽어오는 방식대량의 입력 값에 대해 속도가 향상되고 시간 부하가 적다는 장점을 가진다.라인 단위로 입력값의 경계를 인식하기 때문에 공백의 경우에도 String으로 인식한다.입력받은 데이터 타입이 String타입이므로 다른 데이터 ..
[Java] 정렬 알고리즘 정리
·
Backend/Java
정렬선형 자료구조는 순서가 중요하다.정렬이란 순서를 바꾸는 것오름차순 정렬 ascending내림차순 정렬 descending알고리즘 별 성능표namebestaverageworstbubblenn^2n^2insertionnn^2n^2selectionn^2n^2n^2quicknlognnlognn^2mergenlognnlognnlogn1) bubble sort 버블정렬개념for문을 통해 가장 작은 값을 찾고, 맨 앞자리와 교환다음 for문에선 맨 앞자리 값을 제외한 값 중 가장 작은 값을 찾고, 두번째 앞자리와 교환이 작업을 최대 n - 1 번 반복하면 정렬 완료시간복잡도 : O(n^2)ex) 3 1 5 2 4 를 정렬한다고 가정1번째 loop ⇒ 31524 / 13524 / 13524 / 13524 1확정2번..
[EffectiveJava] Item 14. Comparable을 구현할지 고려하라
·
Backend/Java
Comparable특정 클래스의 인스턴스들 간에 순서를 정할 수 있는 기준을 제공합니다.compareTo라는 유일한 메서드를 구현해야 합니다.자연스러운 순서(natural order)가 있는 값들(예: 숫자, 문자열, 날짜 등)을 처리하기에 적합합니다.단순 동치성 비교에 더해 순서까지 비교할 수 있으며 제네릭하다public interface Comparable { int compareTo(T t);}compareTox.compareTo(y)compareTo는 기준 객체와 주어진 객체를 비교하고 정렬 기준을 나타내는 정수 값을 반환한다.기준 객체와 비교할 수 없는 타입의 객체가 주어지면 ClassCastException을 던진다 ClassCastException : 특정 클래스의 객체를 호환되..
[EffectiveJava] Item 55. 옵셔널 반환은 신중히 하라
·
Backend/Java
💡요약1. 반환 값이 없을 수 도 있고 클라이언트가 이를 특별히 처리해야 하는 경우Optional 을 활용해보자. - 성능 저하가 뒤따르니 성능에 민감한 메서드라면 null 반환이나 예외 처리를 고려2. 반환 값 이외의 용도는 쓰는 경우는 매우 드물고 굳이 쓸 이유가 없다. 1. 개요자바 8 이전에는 메서드가 특정 조건에서 값을 반환할 수 없을 때취할 수 있는 선택지가 두 가지 있었다. 바로 예외를 던지거나 null 값을 반환하는 것이다하지만 두 가지 방법에는 허점이 존재했는데1️⃣예외를 던진다정말 예외적인 상황에 쓰여야 할 예외 처리가 null 처리에 쓰이게 된다예외를 생성할 때 스택 추적 전체를 캡처하므로 이에 대한 비용 문제가 발생한다.Stack Trace란?더보기Stack Trace자바 프로그..