자바 8에는 다양한 기술들을 살펴보려고 하는데, 그 아홉 번째는 Metaspace이다. GC 관련 중요한 변경 사항이 있다. PermGen이라는 영역이 사라지고 그 영역을 Metaspace로 대체되었다. PermGen PermGen에 있는 young Generation과 old Generation은 다른 글에서 자세히 알아보자. Permanent Generation의 약자 자바 8 이전까지 클래스 메타 데이터를 담는 곳 Heap 영역의 일부 기본값으로 제한된 크기를 가진다. 이 영역의 크기는 예측하기가 어려웠다. 자바에서는 클래스의 메타데이터를 읽고 해당 메타데이터를 통해 객체를 생성할 수 있다. 그 때문에 아래와 같은 에러가 종종 발생했다. java.lang.OutOfMemoryError: PermGe..
자바 8에는 다양한 기술들을 살펴보려고 하는데, 그 여덟 번째는 CompletableFuture이다. 그 전에 이 글들을 먼저 살펴보고 오자. 2022.02.07 - [Computer Science/JAVA] - java에서 멀티쓰레드 [1] Thread와 Runnable java에서 멀티쓰레드 [1] Thread와 Runnable CompletableFuture를 알기 전에 Concurrent 프로그래밍을 꼭 알아야 한다. Concurrent 소프트웨어란 말 그대로 동시에 여러 작업을 할 수 있는 소프트웨어를 뜻한다. 자바에서는 다음과 같은 Concurrent 프로그 kkoon9.tistory.com 2022.02.07 - [분류 전체보기] - java에서 멀티쓰레드 [2] Executors와 Exec..
자바 8에는 다양한 기술들을 살펴보려고 하는데, 그 일곱 번째는 Date와 Time API이다. 등장 배경 그 전까지는 java.util.Date 클래스나 java.util.Calendar 클래스를 사용했다. 위 클래스에는 다음과 같은 문제점이 있다. mutable 하기 때문에 thread safe 하지 않다. 클래스 이름이 Date임에도 불구하고 시간(Time)까지 가진다. 월이 0부터 시작하여 버그를 초래할 가능성이 높다. 그렇기 때문에 Calendar 클래스 내에 있는 상수를 사용해야 한다. 이펙티브 자바에서 나오는 [아이템 50]에서도 Date 클래스는 절대 사용하지 말라고 나와 있다. 자바 8에서 제공하는 시간 API 이펙티브 자바에서 나오는 [아이템 50]에서도 언급하지만 Date 대신 불변인..
자바 8에는 다양한 기술들을 살펴보려고 하는데, 그 여섯 번째는 Optional이다. 등장 배경 자바에서는 NullPointerException을 종종 보게 된다. 그 이유는 말 그대로 null 체크를 깜빡했기 때문이다. Student 클래스를 예로 들어보자. public class Student { private int id; private String name; private String subject; public Student() { } public void setId(int id) { this.id = id; } public void setName(String name) { this.name = name; } public void setSubject(String subject) { this.su..
자바 8에는 다양한 기술들을 살펴보려고 하는데, 그 다섯 번째는 Stream이다. 데이터를 담고 있는 저장소(컬렉션)이 아니다. 연속된 데이터를 처리하는 operation의 모임이라고 생각하면 된다. 스트림으로 처리하는 데이터 소스를 변경하지 않는다. 즉, 어느 컬렉션에 스트림 API를 쓰더라도 컬렉션 내 데이터는 변경되지 않는다. 스트림 API를 중개 오퍼레이션과 종료 오퍼레이션이 존재한다. 중개 오퍼레이션이 lazy하다는 의미는 종료 오퍼레이션이 실행될 때까지 중개 오퍼레이션은 실행을 하지 않는다. ⇒ 중개 오퍼레이션은 정의만 한다고 생각하면 된다. 손쉽게 병렬 처리가 가능하다. 스레드를 만들고 병렬처리하는 + 컨텍스트 스위칭을 고려할 때에는 더 오래 걸릴 수 있다. 엄청 방대한 데이터일 경우에만 사..
자바 8에는 다양한 기술들을 살펴보려고 하는데, 그 네 번째는 default 메서드와 static 메서드다. 자바 8부터 인터페이스의 추가할 수 있는 새로운 기능이다. API이나 스프링 코드가 이 기능 덕분에 많은 변화가 있었다고 한다. 간단한 예시 인터페이스(GreetingInterface)와 그를 구현한 클래스를 살펴보자. public interface GreetingInterface { void printName(); } import java.util.Arrays; public class App implements GreetingInterface { @Override public void printName() { } } GreetingInterface를 구현했을 때 제공해주는 공통 인스턴스를 추가하..
자바 8에는 다양한 기술들을 살펴보려고 하는데, 그 세 번째는 메서드 레퍼런스이다. 람다가 하는 일이 기존 메서드 또는 생성자를 호출하는 거라면, 메서드 레퍼런스를 사용해서 매우 간결하게 표현할 수 있다. 메서드 레퍼런스 실습을 위해 간단한 클래스를 작성하였다. public class Greeting { private String name; public Greeting() { } public Greeting(String name) { this.name = name; } public String hello(String name) { return "hello " + name; } public static String hi(String name) { return "hi " + name; } public Str..
자바 8에는 다양한 기술들을 살펴보려고 하는데, 그 두 번째는 람다 표현식이다. 람다 표현식의 기본 형태는 다음과 같다. 🐻 (인자 리스트) → (바디) 앞에서 봤던 함수형 인터페이스 예시 코드에도 람다 표현식이 등장했다. public class UseDoSomething { public static void main(String[] args) { DoSomething doSomething = () -> System.out.println("eric test"); doSomething.print(); } } 인자 리스트 인자가 없을 때 : () ⇒ 대개 Supplier에 해당한다. 인자가 하나 일 때 : (value) 또는 value 인자가 여러 개 일 때 : (value1, value2) 컴파일러가 추론..
- Total
- Today
- Yesterday
- Java
- BAEKJOON
- kotest
- 클린 아키텍처
- 객체지향
- 정규표현식
- Spring Boot
- 알고리즘
- Spring
- Kotlin
- C++
- 이펙티브 자바
- 프로그래머스
- Olympiad
- 클린 코드
- JPA
- AWS
- MSA
- BOJ
- 테라폼
- 디자인 패턴
- 디자인패턴
- programmers
- node.js
- Effective Java
- Algorithm
- 백준
- 이팩티브 자바
- kkoon9
- 코테
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |