본문 바로가기

Java24

[Java] Stack vs Deque 공식 문서는 이렇게 말하고 있다. 더욱 완전하고 일관된 LIFO Stack 작업은 Deque 인터페이스 및 해당 구현을 사용하여 구현하는 것이다. 즉, Stack 대신 Deque의 구현체인 ArrayDeque 사용을 제안하고 있다. Java에서 Vector는 특정 상황에서 효율적이지 않기 때문에 Thread Safe 않다고 할 수 있다. 그렇기 때문에 Vector를 상속 받은 Stack은 다음과 같은 단점이 존재한다. 초기 용량 설정을 지원하지 않는다. 모든 작업에 Lock이 사용된다. 단일 스레드 실행 성능이 저하될 수 있다. 단순한 Iterator의 탐색 작업에서도 get() 메서드 실행시 매번 Lock이 발생하게 되므로 오버헤드가 커진다. Stack은 Vector를 상속 받았기 때문에 다중 상속을 .. 2022. 7. 25.
[Java] Mutable과 Immutable에 관하여 1. Mutable 생성된 이후 수정 가능 이미 존재하는 객체에 재할당(값 변경) 값을 변경할 수 있는 메소드 제공 Mutable class일 경우 Getter와 Setter 존재 thread safe하지 않을 수 있음(병렬처리시 값 보장할 수 없게 됨) StringBuffer, StrinfBuilder, java.util.Date 등이 해당 a. Mutable : 대표적인 StringBuffer, StringBuilder 문자열 연산에서 클래스를 한번 생성하고 연산이 필요할 때 크기를 변경하여 문자열을 변경한다. 문자열 연산이 자주 있을 때 사용하는 것이 적절하다. b. StringBuffer 동기화 키워드를 지원하여 멀티스레드 환경에서 안전하다. 즉, 문자열 연산이 많고 멀티스레드 환경일 경우 사용하.. 2022. 7. 24.
[Java] 자료구조 Stack에 관하여 1. Stack Stack이라는 단어는 더미 혹은 쌓다 라는 의미의 단어로, 단어의 뜻 그대로 데이터를 쌓아 올린 형태의 자료구조이다. 가장 마지막에 들어온 자료가 가장 먼저 빠져나가는 선형구조이며, 후입선출(Last In First Out, 나중에 들어간 값이 먼저 나온다) 자료구조를 구현한 자바 클래스이다. List Collection의 Vector를 상속 받은 Stack 메모리 구조의 클래스를 제공한다. 배열 기반 데이터 구조로 인덱스로 요소에 액세스 할 수 있다. 2. 특징 먼저 들어간 데이터가 나중에 빠져나가는 Last In First Out 인터럽트 처리, 수식의 계산, 서브 루틴의 복귀 번지 저장 등에 쓰인다. 그래프의 깊이 우선 탐색(DFS) 알고리즘에 사용된다. 재귀적(Recursion).. 2022. 7. 23.
[Java] 큰 숫자(정수) 다루기(BigInteger 클래스 사용) 1. BigInteger를 사용해야 하는 이유 int 타입의 메모리 크기는 4byte로 표현할 수 있는 -2,147,483,648 ~ 2,147,483,647까지의 범위를 가졌고, long 타입의 메모리 크기는 8byte로 표현할 수 있는 -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807까지의 범위를 가졌다. 그 범위를 넘어서게 되면 모두 0으로 출력이 되며, 숫자의 범위가 int 타입의 범위와 long 타입의 범위를 넘는 경우가 잘 없겠지만 항상 최악의 상황을 고려해야 하므로 무한 정수가 들어갈 수 있는 가능성이 존재한다면 BigInteger 클래스를 활용하는 것이 효율적이다. BigInteger 클래스는 문자열 형태로 이루어져 있어 숫자의 범위가 무한하.. 2022. 7. 20.
[Java] 자료구조 Map 에 관하여 1. Map과 HashMap의 차이 둘의 가장 큰 차이는 특정 키에 대한 값을 찾는 과정에서 HashMap은 이름 그대로 HashTable을 이용하여 키-값 관계를 유지하며, Map은 red-black tree 알고리즘을 이용한다. 일반적으로 Java Code에서 HashMap을 선언하여 사용한다고 할 때 아래와 같이 선언하여 사용할 수 있으며, 그 둘은 동일하게 HashMap을 사용할 수 있도록 선언한 코드에 해당한다. HashMap map1 = new HashMap(); Map map2 = new HashMap(); HashMap으로 받을 때와 Map으로 받을 때의 차이를 알아보자. 위 코드에서 두번째 라인 Map은 "HashMap이 구현하는 인터페이스" 개념으로 이해하면 된다. 그렇기 때문에 실질적.. 2022. 7. 19.
[Java] HashSet 컬렉션 1. HashSet이란 HashSet은 Set 인터페이스를 구현한 클래스다. 그렇기 때문에 Set의 성질을 그대로 상속받는다. Set은 객체를 중복해서 저장할 수 없고 하나의 null값만 저장할 수 있다. 또한 저장 순서가 유지되지 않는다. 만약 요소의 저장 순서를 유지해야 한다면 LinkedHashSet을 사용해야 한다. Set 인터페이스를 구현한 클래스로는 HashSet과 TreeSet이 있는데 HashSet의 경우 정렬을 해주지 않고 TreeSet의 경우 자동정렬을 해준다는 차이점이 있다. Set의 가장 큰 장점은 중복을 자동으로 제거해준다는 점이다. 만약 한 편의점에서 오늘 방문한 손님의 총 숫자를 계산하고 싶을 경우도 있을 것이다. 이럴 경우 오늘 하루 동안 편의점을 여러번 방문한 손님은 한번으.. 2022. 5. 1.
[Java] 엑셀 파일 업로드 & DB 저장하기 1. *.xlsx 파일 Logger log = Logger.getLogger(this.getClass()); @Autowired private insertDAO insertMapper; public int readExcelFile(MultipartFile file, String siteCode) { File destFile = null; int resultCode = -1; try { String resUploadPath = configService.getConfigValue("PATH"); // 임시 디렉토리 경로 String yearDir = DateUtil.toString(new Date(), "yyyy"); // 연 별 디렉토리 생성 String monthDir = DateUtil.toString.. 2022. 4. 30.
[Java] 배열 자르기 1. copyOfRange() Arrays.copyOfRange(arr, i, j) arr 배열을 i부터 j까지 자르려면 위와 같은 방법을 사용할 수 있다. public class Code { public static void main(String[] args) { int[] array = {1, 5, 2, 6, 3, 7, 4}; int[][] commands ={{2, 5, 3} ,{4, 4, 1} ,{1, 7, 3}}; System.out.println(Arrays.toString(solution(array, commands))); System.out.println(Arrays.toString(solution1(array, commands))); System.out.println(Arrays.toSt.. 2022. 4. 28.
[Java] ArrayList 정렬(오름차순, 내림차순) 1. Collections.sort() import java.util.ArrayList; import java.util.Collections; public class Test { public static void main(String[] args) { ArrayList list = new ArrayList(); list.add("A"); list.add("B"); list.add("C"); list.add("a"); list.add("b"); list.add("c"); // 오름차순 Collections.sort(list); System.out.println("오름차순 : " + list); // 내림차순 Collections.sort(list, Collections.reverseOrder()); Sys.. 2022. 4. 28.