목록언어 (21)
Monday
1. Optional이란? Optional이란 Null 참조 문제를 해결하기 위해 Java8에 추가된 개념입니다. Optional 형식으로, 어떤 값을 Optional이 감싸고 있는 형태로 사용됩니다. Optional로 감쌌다는 것은 T라는 값이 있을 수도 있고 없을 수도 있다는 의미를 나타냅니다. 즉, 포함할 수 있는 값은 1개 이하이며 T가 null일 수도 있고 null이 아닐 수도 있음을 의미하는데, 이를 적용함으로써 null 참조 오류를 줄일 수 있습니다. 예를 들어, Optional에서 String 값이 null이라면 Optional은 null인 값을 감싸고있는 Optional 객체입니다. 따라서, String 값이 null이라도 개발자는 Optional 객체를 참조하는 것이고, 이를 통해서 n..
1. Stream이란? 스트림(stream)이란 자바8 API에 새로 추가된 기능입니다. 스트림을 이용하면 sql 구문처럼 무엇을해야하는지를 컴퓨터에게 알려주면 결과를 받아볼 수 있습니다. 즉, 내부 구현 방법에는 관심을 갖지 않아도 결과를 얻을 수 있습니다. 이런 방식을 선언형 처리 방식이라고 합니다. 또한, 스트림은 복수 개의 연산(sql로 예를 들면, select, from, where 등)들을 이을 수 있다. 이 뿐만 아니라, 스트림을 이용하면 데이터를 투명하게 병렬로 처리할 수 있습니다. 스트림을 1줄로 표현하면 "데이터 처리 연산을 지원하도록 소스에서 추출된 연속된 요소"라고 할 수 있습니다. 여기서 위 문장의 의미에 대해 더 자세히 살펴보겠습니다. 연속된 요소 : 컬렉션과 마찬가지로 스트림은..
1. 함수형 인터페이스란? 함수형 인터페이스란 "오직 하나의 추상 메소드"를 갖는 인터페이스를 말합니다. 즉, 인터페이스 안에 1개의 추상메소드만 있으면 함수형 인터페이스라고 부를 수 있습니다. 예를 들어, 인터페이스 안에 자바8에 추가된 디폴트 메서드가 있더라도 추상 메소드가 1개면 함수형 인터페이스입니다. 그리고 함수형 인터페이스를 선언 할 때 @FunctionalInterface 어노테이션을 붙여주면 컴파일러가 올바르게 정의되어 있는지 확인해주므로 꼭 붙여주는 게 좋습니다. // 함수형 인터페이스 예제 1 - 추상 메소드가 1개 public interface Adder{ int add(int a, int b); } // 함수형 인터페이스 예제 2 - 디폴트 메소드가 있지만, 추상 메소드가 1개 @F..

1. JDK 설치 (with jabba) jabba(자바 버전 매니저) 툴을 이용하여 편하게 JDK를 설치합니다.[https://github.com/shyiko/jabba] 설치 날짜에 JABBA_VERSION 최신 기준이 0.11.2 버전이라 아래와 같은 스크립트를 이용하여 설치를 진행합니다. export JABBA_VERSION=0.11.2 curl -sL https://github.com/shyiko/jabba/raw/master/install.sh | bash && . ~/.jabba/jabba.sh # adopt jdk 11 설치 jabba ls-remote | grep adopt@ jabba install adopt@1.11.0-11 jabba use adopt@1.11.0-11 jabba a..
자바8 이전까지는 Unsigned가 없었지만, Java 8 이후부터는 Unsigned 관련 메소드가 추가되었습니다. 주의해야 할 점은, Unsigned 자료형이 아닌 메소드란 점입니다. int unsigned = Integer.parseUnsignedInt("230000000"); System.out.println(Integer.toUnsignedString(unsigned)); // 반드시 toUnsigneString를 사용해서 출력해야 함. parseUnsignedInt 와 toUnsignedString을 사용해서 Unsigned를 표현할 수 있습니다. 꼭 메소드를 이용해서 변환해주는 작업이 필요하기 때문에 불편한 점이 존재합니다. 따라서, 큰 값을 사용할 목적이라면 Unsigned 대신 BigInt..
// java.lang.enum public abstract class Enum implements Comparable, Serializable { ... 생략 } 저도 정확한 용어는 모르지만, 위와 같은 구조를 재귀적 타입 바운드(recursive type bound)라고 하는 것 같습니다. 위 구조를 아래와 같이 분리해서 생각하면 좀 이해하기 쉬운 것 같습니다. 1. E extends Enum 2. Enum implements Comparable, serializable 3. 따라서 E는 Comparable하고 Serializable하다 즉, Enum은 Comparable하고 Serializable한 타입만을 받으려고 위와 같은 구조를 만든 것 같습니다. 재귀적 타입 바운드 사용 시기 1. 제네릭한 ..
Java transient이란? transient는 직렬화(Serialize)하는 과정에 제외하고 싶은 경우 선언하는 키워드입니다. 언제 사용하나요? 패스워드와 같은 보안정보를 직렬화(Serialize) 과정에서 제외하고 싶은 경우에 사용할 수 있습니다. 데이터를 전송을 하고 싶지 않을 때 선언할 수 있습니다.

예외 종류 여기서 RuntimeException은 Exception 클래스를 상속하여 Exception의 일종이기도 하지만 자바에서는 RuntimeException과 이를 상속한 클래스를 조금 특별하게 취급합니다. 이 예외는 피할 수 있지만 개발자가 부주의해서 발생하는 경우가 대부분이고, 미리 예측하지 못했던 상황에서 발생하는 예외가 아니기 때문에 굳이 로직으로 처리를 할 필요가 없도록 만들어져 있습니다. 또한, RuntimeException은 예외가 발생한다 해서 코드로 따로 부가적인 처리를 하기 어렵기 때문에 에외 처리를 하지 않아도 사용가능하게 만들어져있습니다.