프로그래밍/Java

    Java Stream(스트림)은 원본 데이터를 변경할 수 있다!?

    나의 의문점을 말하기전에, 스트림이 무엇인지 간단하게 살펴보자. 1. 스트림(Stream) 이란? Java 8부터 도입된 데이터 처리 기능 데이터 소스에서 데이터를 추상화하여 처리할 수 있도록 도와줌 컬렉션, 배열, 파일 등의 데이터 소스에서 데이터를 읽고, 중간 처리 및 최종 처리하여 원하는 결과를 만듦 스트림은 기존 데이터 소스의 요소를 가져와 중간 처리 연산을 수행하고 새로운 Stream으로 반환함 중간 처리 연산은 lazy evaluation 방식으로 동작하기에 최종 처리 연산이 호출될 때만 수행됨 즉, 중간 처리 연산을 호출해도 즉각적인 연산이 되지 않음 최종 연산이 수행되어야 스트림의 요소들이 중간 처리 연산을 거쳐 최종 연산에서 소모됨 함수형 프로그래밍 개념을 적용하여 작성했기에 가독성과 유..

    자바에서 String을 조심해야하는 이유

    자바에서 String을 조심해야하는 이유

    String 클래스는 잘 사용하면 상관없지만, 잘못 사용하면 메모리에 많은 영향을 주기 때문이다. 그렇다면 잘못 사용한 사례를 살펴보자. String 클래스를 잘 못 사용한 사례 보통 서버에서는 DB 데이터를 갖고와서 그 데이터를 화면에 출력하는 시스템을 가지고 있다. 쿼리 문장을 만들기 위해 String 클래스 결과를 처리하기 위한 Collection 클래스 위 두 클래스를 가장 많이 사용하게 된다. 일반적으로 사용되고 가장 단순하게 만드는 쿼리 작성 문장을 살펴보자. String sql = ""; sql += "select * "; sql += "from ( "; sql += "select A_column, "; sql += "B_column ,"; // 생략된 쿼리 (약 400라인) ... ... ..

    JVM(자바가상머신)이란? - Part5, Garbage Collection

    JVM(자바가상머신)이란? - Part5, Garbage Collection

    22/10/14 게시글 등록 22/10/15 내용 수정 및 추가 JVM(자바가상머신)이란? - Part 1, 소개 JVM(자바가상머신)이란? - Part 2, Execution Engine JVM(자바가상머신)이란? - Part 1 자바를 쓰는 개발자라면 누구나 들어봤을 JVM(Java Virtual Machine)을 알아보려고 한다. 자바 바이트코드가 JRE에서 동작을.. ssdragon.tistory.com JVM(자바가상머신)이란? - Part 2, Execution Engine JVM(자바가상머신)이란? - Part 1, 소개 자바를 쓰는 개발자라면 누구나 들어봤을 JVM(Java Virtual Machine)을 알아보려고 한다. 자바 바이트코드가 JRE에서 동작을 하는데, 이 JRE에서 가장 중..

    JVM(자바가상머신)이란? - Part4, Runtime Data Area

    JVM(자바가상머신)이란? - Part4, Runtime Data Area

    22/09/29 - 게시글 등록 22/10/13 - PermGen에 관한 Heap 영역 수정 및 추가 JVM(자바가상머신)이란? - Part 1, 소개 자바를 쓰는 개발자라면 누구나 들어봤을 JVM(Java Virtual Machine)을 알아보려고 한다. 자바 바이트코드가 JRE에서 동작을 하는데, 이 JRE에서 가장 중요한 요소는 자바 바이트코드를 해석하고 실행하 ssdragon.tistory.com JVM(자바가상머신)이란? - Part 2, Execution Engine JVM(자바가상머신)이란? - Part 1 자바를 쓰는 개발자라면 누구나 들어봤을 JVM(Java Virtual Machine)을 알아보려고 한다. 자바 바이트코드가 JRE에서 동작을 하는데, 이 JRE에서 가장 중요한 요소는 자..

    [Java] sort와 parallelSort 비교

    [Java] sort와 parallelSort 비교

    백기선님의 자바 8 강의에서 정렬을 학습하다가 궁금해서 적게되었다. (정리한 깃허브) 자바 8 이전에는 Arrays.sort()를 사용하여 정렬을 하였다. 자바 8 이후 sort()를 개선한 새로운 메소드인 Arrays.parallelSort()가 나왔다. 특히 parallelSort에 대해 간단하면서도 내부적으로 동작하는 설명이 없어서 직접 찾아보고 작성하게 되었다. 1. Arrays.sort()란? 객체 또는 기본타입의 배열(array of objects or primitives)을 정렬하기 위해 나왔다. 여기에 사용된 정렬 알고리즘은 Dual-Pivot Quicksort 이다. 즉, 더 좋은 성능을 내기위해 Quicksort 알고리즘을 커스터마이징한 것이다. 이 방법은 싱글 쓰레드(Single-Th..

    Java - 값이 null,공백 등 Blank인지 확인하기

    Java - 값이 null,공백 등 Blank인지 확인하기

    Spring(스프링)또는 Java 언어로 값을 입력받았는데 이게 정상적인 값인지 확인을 하고 싶을 때가 있다. 그럴 땐 어떻게 해야할까? 이 때 직접 메서드를 만들어주면 된다. StringUtils 클래스 활용 예시는 아래와 같다. White Space란? white space는 공백, 스페이스, 탭, 줄바꿈, 백스페이스 등을 의미한다. CharSequence란? char값을 읽을 수 있는 시퀀스이다. 마크업 문자를 사용해서 변형과 가공이 가능한 문자열이다. Character.isWhitespace(char ch) 메서드란? 말 그대로 white space인지 확인하여 true 또는 false로 결과를 내준다. 매개변수 타입은 char 타입으로 넣어줘야한다. https://blog.jiniworld.me..

    Map 인터페이스

    Map 인터페이스

    🧐 Map Interface란? Map 인터페이스는 키(key)와 값(value)을 하나의 쌍으로 묶어서 저장하는 컬렉션 클래스를 구현하는데 사용된다. 키는 중복될 수 없지만 값은 중복을 허용한다. 만약 중복된 키와 값을 저장한다면 기존의 값은 없어지고, 저장된 값이 남는다. 📝 Map의 대표적인 메서드 Map을 사용해서 출력할 때 보통 entrySet() 또는 keySet()메서드를 활용하여 Map의 객체를 반환받아 출력한다. entrySet()은 key와 valeu 모두 필요할 경우 사용한다. keySet()은 key 값만 필요할 경우 사용하는데 key값을 받고 get(key)를 활용하여 value도 출력할 수 있다. 이럴 경우 key를 찾고 value를 찾는 과정에서 시간이 많이 소요되므로 많은 양..

    Set 인터페이스

    Set 인터페이스

    🧐 Set Interface란? Set 인터페이스는 중복을 허용하지 않고, 저장순서가 유지되지 않는 컬렉션 클래스를 구현하는데 사용된다. (LinkedHashSet은 Set을 상속받음에도 불구하고 입력 순서대로의 저장순서를 보장하고 있다. 그러나 중복은 아니다.) 기본적으로 List 계열은 index(Node)로 관리하기에 add()같은 메서드를 쓰면 순서대로 저장이 되었다. Queue 계열 또한 PriorityQueue(우선순위 큐)를 제외하고는 입력 순서대로 객체가 연결되어 있다. 하지만 Set의 경우 일반적으로 입력받은 순서와 상관없이 데이터를 집합시키기 때문에 입력받은 순서를 보장할 수 없다. 이러한 순서 보장을 개선하기 위해 만들어진 것이 LinkedHashSet이다. 만약 중복은 허용하고 싶지..