본문 바로가기

Language53

개발 용어 정리 일급시민(first-class-citizen) : 전달될 수 있는 값.(String, new Integer, new HashMap...) 변수에 담을 수 있음 함수의 인자로 전달 가능 함수의 반환값으로 전달 가능 이급시민은 전달할 수 없는 구조체를 뜻함 2022. 12. 11.
[Java] Garbage Collection(GC) 가비지 컬렉션 Garbage Collection이란 Java Application은 JVM위에서 구동되고, JVM이 Java Application에서 사용되는 메모리들을 관리한다. 이 JVM의 기능 중 하나로 더 이상 사용하지 않는 메모리를 청소하여 메모리 공간을 확보하는 GC라는 작업이 있다. GC(Garbage Collection)은 JVM이 주기적으로 heap영역에 할당된 객체들 중 사용하지 않는 객체들을 정리해주는 작업이다. GC 과정 GC를 알기 전에 'stop-the-world'를 알아야한다. stop-the-world GC를 실행하기 위해 JVM이 어플리케이션의 실행을 멈추는 것을 의미한다. stop-the-world가 발생하면 GC를 실행하는 쓰레드를 제외한 나머지 쓰레드는 모두 작업을 멈춘다. GC 작.. 2022. 4. 3.
[Java] 자바 스트림(stream) 사용법 3 - 최종 연산 forEach() 스트림 내 요소를 매개변수 내용을 실행. void forEach(Comsumer 2022. 3. 16.
[Java] 자바 스트림(stream) 사용법 2 - 스트림의 중간연산, Optional 스트림 자르기 - skip(), limit() skip(n)은 n만큼 요소를 건너뛰는 것이고, limit(n)은 n만큼 요소의 개수를 제한한다. IntStream intStream = IntStream.rangeClosed(1,10); // 1~10의 요소를 가진 스트림 intStream.skip(3).limit(5).forEach(System.out::print); // 1,2,3건너뛰고 4~8까지 5개 출력 스트림 요소 걸러내기 -filter(), distinct() distinct()는 스트림에서 중복된 요소들을 제거하고, filter()는 주어진 조건에 맞지 않는 요소를 걸러낸다. IntStream int Stream = IntStream.of(1,2,2,3,3,3,4,5,6); intStream.. 2022. 3. 16.
[Java] 자바 스트림(stream) 사용법 1 - 특징과 생성 스트림이란 스트림은 자바 8에 추가된 데이터 소스를 추상화하고, 데이터를 다루는데 자주 사용되는 메서드들을 정의해놓은 기술이다. 스트림을 사용하면 코드가 간결해지고 이해하기 쉽고, 재사용성이 높아진다. // 서로 다른 타입의 데이터 소스 String[] strArr = {"arr", "ddd", "ccc" }; List strList = Arrays.asList(strArr); //정렬 출력 기존 방식 Arrays.sort(strArr); for(String str: strArr){ System.out.println(str); } Collcections.sort(strList); for(String str: strList){ System.out.println(str); } // 스트림 방식 Stream 2022. 3. 16.
[Java] 람다식(Lambda expression)과 함수형 인터페이스(Functional Interface) 람다식이란 람다식은 메서드를 하나의 '식(expression)'으로 표현한 것이다. 메서드를 람다식으로 표현하면 메서드의 이름과 반환타입이 없어지므로, '익명함수(anonymous function)'이라고도 한다. int[] arr = new int[5]; Arrays.setAll(arr ,(i) -> (int)(Math.random()*5) +1); 위의 문장에서, () -> (int)(Math.random()*5) +1); 부분이 람다식이다. 이러한 람다식을 통해 보다 간결하고 이해하기 쉬워졌고, 메서드를 변수처럼 다루는 것이 가능해진다. 람다식 작성하기 반환타입 메서드이름 (매개변수 선언){ 문장들 } // 람다 (매개변수 선언) -> { 문장들 } 반환 타입과 메서드이름을 없애고, 매개변수가 수행.. 2022. 3. 16.
[Java] 쓰레드 8 - fork & join 프레임 워크 fork & join 프레임워크 이 프레임워크는 멀티쓰레드 프로그래밍을 구현하기 위해 하나의 작업을 작은 단위로 나눠서 여러 쓰레드가 동시에 처리하는 것을 쉽게 만들어준다. 수행할 작업에 따라 아래의 두 클래스 중에서 하나를 상속받아 구현한다. RecursiveAction : 반환값이 없는 작업을 구현할 때 사용 RecursiveTask : 반환값이 있는 작업을 구현할 때 사용 두 클래스 모두 compute()라는 추상 메서드를 가지고 있고, 이 추상 메서드를 구현하면 된다. 1) compute()에 작업을 수행하기 위한 코드 넣기 2) 쓰레드풀과 수행할 작업 생성 3) invoke()로 작업 시작. 쓰레드풀은 지정된 수의 쓰레드를 생성해서 미리 만들어 놓고 반복해서 재사용할 수 있게 한다. 쓰레드를 반.. 2022. 3. 14.
[Java] 쓰레드 7 - volatile volatile 코어는 메모리에서 읽어온 값을 캐시에 저장하고 캐시에서 값을 읽어서 작업한다. 다시 같은 값을 읽어올 때는 먼저 캐시에 있는지 확인하고 없을 때만 메모리에서 읽어온다. 그러다보니 도중에 메모리에 저장된 변수의 값이 변경되었는데도 캐시에 저장된 값이 갱신되지 않아서 메모리에 저장된 값이 다른 경우가 발생한다. 그럴 때 변수 앞에 volatile을 붙이면, 코어가 변수의 값을 읽어올 때 캐시가 아닌 메모리에서 읽어온다. boolean suspended = false; // volatile volatile boolean suspended = false; volatile을 붙이는 대신에 synchronized블럭을 사용해도 같은 효과를 얻을 수 있다. 쓰레드가 블럭에 들어갈 때와 나올 때, 캐시.. 2022. 3. 14.