Optional이란? Optional Class는 Integer나 Double Class처럼 'T'타입의 객체를 포장해 주는 Wrapper Class이자 컨테이너 객체입니다. 컨테이너 안에 값이 들어 있을 수도 있고, 값이 없어 비어있는 컨테이너 일수도 있습니다. 해당 Optional은 Java 11 기준으로 설명하겠습니다. Optional 특징 값이 비어있을 수도 있다는 가정하에 사용하므로 직관성이 좋습니다. Null 값을 직접 사용하지 않아 NullPointerException 예외에 대하여 유연해집니다. Null 체크 기능을 직접 구현 안 해도 됩니다. Optional 생성 1. static Optional of(T value) 명시된 값을 가지는 Optional 객체를 반환합니다. 명시된 값이 아..
Stream이란? 다량의 데이터를 읽어온 다음, 사용자가 원하는 데이터로 가공하여 보여주는 객체입니다. 원본 데이터는 수정하지 않으며, Terminal Operation이 끝날 경우 소실됩니다. Stream 구조 0 또는 다수의 Intermediate Operation(중개 연산)과 1개의 Terminal Operation(최종 연산)으로 구성되어 있습니다. Intermediate Operation은 새로운 Stream을 반환하고 항상 Lazy(게을러)하여 Terminal Operation이 실행될 때까지 시작되지 않습니다. Stream의 특징 원본 데이터를 수정하지 않습니다. 손쉽게 병렬 처리를 할 수 있습니다. 함수형 인터페이스를 지원합니다. Stream은 일회성입니다. Stream 작업은 내부 반복..
함수형 인터페이스(Functional Interface)란? 추상 메소드를 단 하나만 가지고 있는 SAM (Single Abstract Method) 인터페이스입니다. @FuncationInterface 애노테이션을 가지고 있습니다. 함수형 인터페이스를 더 알아보기 전에 우선 람다 표현식 및 메소드 레퍼런스부터 알아보겠습니다. 람다 표현식(Lambda Expressions)이란? 함수형 인터페이스의 인스턴스를 만드는 방법으로 쓰일 수 있습니다. 메소드 매개변수, 리턴 타입, 변수로 만들어 사용할 수도 있습니다. 그리고 코드를 확연히 줄일 수 있습니다. RunSomething runSomething = new RunSomething() { @Override public int doIt(int number)..
인터페이스란? 클래스들이 구현해야 하는 동작들을 추상적으로 선언하는 추상 자료형입니다. Interface라는 키워드를 사용하여 선언합니다. 강제적으로 구현해야 하는 추상 메소드가 있으며, static과 final이 둘 다 선언되는 상수가 있습니다. 자바 8버전부터, default 메소드와 static 메소드를 인터페이스에 구현할 수 있습니다. 기존 자바 7버전 이하에서는 추상화 클래스에서 공통코드를 구현체 메소드로 구현하여 상속 할 경우 추상화 클래스만 상속 받을 수 있기 때문에 더 이상 상속이 불가능하였습니다. 하지만, 자바 8버전부터는 인터페이스에서 default 메소드와 static 메소드가 추가되어 상속에 대하여 자유가 생겼습니다. 기본 메소드(Default Method) 인터페이스에 메소드를 구..
Annotation Processor란? Annotation Processor는 컴파일 단계에서 Annotation에 정의된 일렬의 프로세스를 동작하게 하는 것을 의미합니다. 컴파일 단계에서 실행되기 때문에, 빌드 단계에서 에러를 출력하게 할 수 있고, 소스코드 및 바이트 코드를 생성할 수도 있습니다. 사용하는 예로 자바의 @Override가 있으며, Lombok(롬북)이라는 라이브러리도 있습니다. Lombok은 자주 사용하는 라이브러리로 한번 살펴보겠습니다. Lombok이란? @Getter, @Seteer, @Builder 등의 Annotation과 Annotation Processor를 제공하여 표준적으로 작성해야 할 코드를 개발자 대신 생성해주는 라이브러리 입니다. 컴파일 시점에 Annnotatio..
프록시 패턴이란? 리얼 서브젝트는 자신이 해야 할 일만 하면서 프록시를 사용하여 부가적인 기능을 제공할 때 쓰는 패턴입니다. 프록시와 리얼 서브젝트가 공유하는 인터페이스(서브젝트)가 있고, 클라이언트가 해당 인터페이스(서브젝트) 타입으로 프록시를 사용합니다. 클라이언트는 프록시를 거쳐서 리얼 서브젝트를 사용하기 때문에 프록시는 리얼 서브젝트에 대한 접근을 관리하거나 부가기능을 제공하거나, 리턴값을 변경할 수도 있습니다. 그럼 프로젝트를 생성해서 간단히 살펴보겠습니다. package me.whiteship; public class Book { private Integer id; private String title; public Integer getId() { return id; } public void ..
- Total
- Today
- Yesterday
- 깃 기초
- Reflection
- classloder
- optional api
- Annotation Processor
- 애노테이션 프로세서
- Java Reflection
- 프록시패턴
- javassist
- 애노테이션
- 실행 엔진
- java
- 클래스로더
- jvm
- dromos
- 자바 프록시 패턴
- 리플렉션
- java abstractprocessor
- 바이트 코드
- java optional
- 람다표현식
- JRE와 JDK의 차이점
- 자바 리플렉션
- Functional Interface
- javaagent
- JVM 구조
- java proxy pattern
- java11 optional
- 코드 커버리지
- bytebuddy
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 29 | 30 | 31 |