본문 바로가기

Programming/Java

(13)
[Java] 병렬 데이터 처리(병렬 스트림, 포크/조인 프레임워크) 병렬 처리(Parallel Operation)란 멀티 코어 환경에서 하나의 작업을 분할해 각각의 코어가 병렬적으로 처리하는 것이다. 자바7 이전에는 데이터 컬렉션을 병렬 처리하기 위해서는 데이터를 분할하고 각각의 스레드로 할당 해야한다. 하지만 스레드는 경쟁 상태(race condition)가 발생할 수 있어 동기화가 필요하고, 마지막에는 각 스레드에서 발생한 부분 결과를 하나로 합치는 과정이 필요하다. 하지만 병렬 스트림과 포크/조인 프레임워크를 사용하면 쉽게 병렬 처리가 가능하다 동시성과 병렬성 둘 다 멀티 스레드의 동작 방식이라는 점은 동일하지만 목적이 다르다. 동시성(Concurrency) 멀티 작업을 위해 멀티 스레드가 번갈아가며 실행하는 성질이다. 싱글 코어 CPU를 이용한 멀티 작업은 병렬적..
[Java] String.replaceAll() 활용하기 자바에서 replaceAll(regex, replacement)는 문자열에서 정규식과 일치하는 문자열을 찾아 replacement로 바꾸어주는 메소드이다. replaceAll()은 내부적으로 Matcher.appendReplacement()를 사용하는데 Matcher에서 사용했던 것과 유사하게 그룹핑을 통해 일치하는 문자열을 골라 커스텀이 가능하다. ([Java] Pattern, Matcher Class 사용법과 메소드 정리) System.out.println("abcdefg".replaceAll("\\w", "*")); // ******* 기본적으로 사용하면 String.replaceAll()을 사용한다면 위와 같은 형태로 출력이 가능하다. 주어진 \\w과 일치하는 문자열을 모두 찾아 *로 변환하는 것..
[Java] 스트림(Stream) 활용 필터링 filter filter 메소드는 Predicate를 인수로 받아 true를 반환하는 요소만을 포함하는 스트림을 반환한다 List numbers = Arrays.asList(1, 2, 3, 4, 5); numbers.stream() .filter(i -> i % 2 == 0) .forEach(System.out::println); // 2 // 4 distinct 중복을 제거한 요소를 반환한다. 중복 여부는 객체의 hashCode(), equals() 메소드로 판별한다. List numbers = Arrays.asList(1, 1, 2, 2, 3); numbers.stream() .distinct() .forEach(System.out::println); // 1 // 2 // 3 슬라이싱 Pre..
[Java] 스트림(Stream) 스트림 스트림(Stream)은 Java8부터 추가된 컬렉션(배열 포함)의 요소를 하나씩 참조해 람다식으로 처리할 수 있도록 하는 반복자이다. 데이터 처리 연산을 지원하도록 소스에서 추출된 연속된 요소 List list = Arrays.asList("A", "B", "C", "D"); // 스트림 사용❌ Iterator iter = list.iterator(); while(iter.hasNext()){ String name = iter.next(); System.out.println(name); } // 스트림 사용⭕ Stream stream = list.stream(); list.stream().forEach(name -> System.out.println(name)); 특징 선언형 선언형으로 코드를 구..
[Java] 람다(lambda) 람다(lambda)란? 람다 표현식은 메서드로 전달할 수 있는 익명 함수(anonymous function)을 생성하기 위한 식이다. 매개 변수를 가진 코드 블럭이지만 런타임시에는 익명 구현 객체를 생성한다 // 인터페이스의 익명 구현 객체 Runnable runnable = new Runnable() { public void run() { ... } } // 람다식 Runnable runnable = () -> { ... }; 인터페이스 변수명 = 람다식; 자바는 메소드만 단독으로 생성이 불가능하고 항상 클래스의 구성 멤버로 선언해야 한다. 따라서 람다는 메소드를 선언하는 것이 아닌 메소드를 가진 익명 구현 클래스를 생성하는 것이다. 람다식은 인터페이스 변수에 대입하고 대입될 인터페이스에 따라 작성법이..
[Java] Boxing, Unboxing 자바는 참조형(Refernce Type)이거나 기본형(Primitive Type)이다. 하지만 제네릭 타입은 참조형만 사용이 가능하기 때문에 자바에서는 기본형을 참조형으로 변환하는 기능을 제공해준다. 이러한 기능을 박싱(boxing), 반대를 언박싱(unboxing)이라고 한다. Prmitive Type==== boxing =====>Wrapper Type Integer Integer number = new Integer(100); int sum = 10 + number; // Integer -> int 하지만 이러한 변환 과정은 비용이 소모된다. 또한 박싱된 값은 Heap영역에 저장되기 때문에 보다 많은 메모리를 소모하고 가져올 때에도 메모리 탐색 과정이 필요하다.
[Java] 어노테이션(Annotation) 자바에서 어노테이션(Annotation)은 메타데이터(metadata)라고 볼 수 있다. 💡 메타데이터 애리케이션이 처리해야 할 데이터가 아닌 컴파일 과정과 실행 과정에서 코드를 어떻게 컴파일하고 처리할 것인지 알려주는 정보. 데이터를 위한 데이터. 데이터를 설명해주는 데이터 컴파일러에게 문법 에러를 체크하거나, 코드를 자동으로 생성하도록 정보를 제공하거나, 실행 시 특정 기능을 실행하는 정보를 제공, 자동으로 파일을 생성하는 용도 등으로 사용할 수 있다. 어노테이션의 대표적인 예는 @Override가 있다. 컴파일러가 정확히 오버라이드가 되지 않았다면 에러를 발생시키게 하는 것이다. 생성하기 public @interface MyAnnotation { // 타입 엘리먼트명() [default 디폴트값];..
[Java] Java란? Java의 특징 Java란? 1995년 썬 마이크로시스템즈에서 발표한 프로그래밍 언어이다. C++에 비해 메모리와 CPU를 많이 사용해 윈도우 프로그래밍 언어로 부적합했지만, 인터넷이 활성화되며 웹 애플리케이션 구축 언어로 급부상 초기의 자바는 가전 제품에 탑재할 언어로 개발되었지만, 현재는 엔터프라이즈 기업환경에서 실행되는 서버 애플리케이션을 개발하는 중추적인 언어 ❓ 프로그래밍 언어란? 사람이 컴퓨터에 명령을 내릴 때에도 언어가 필요하지만 컴퓨터가 이해할 수 있는 언어는 기계어(machine language)이다. 0과 1로 이루어진 이진 코드이기 때문에 사람이 이해하기 어렵기 때문에 사람의 언어와 기계어의 다리 역할을 하는 프로그래밍 언어가 필요하다! 프로그래밍 언어는 고급 언어와 저급 언어로 구분된다. 저급 언어..