함수 디스크립터 함수형 인터페이스의 추상 메서드 시그니처 = 람다 표현식의 시그니처 이다. 람다 표현식의 시그니처를 서술하는 메서드를 함수 디스크립터라고 부른다. 여기서 메서드 시그니처란, 메서드명/파라미터 순서/파라미터 타입/파라미터 개수를 의미한다. 왜 함수형 인터페이스를 인수로 받는 메서드에만 람다 표현식을 사용할 수 있을까? 언어 설계자들은 언어를 더 복잡하게 만들지 않는 방법을 선택했다. 대부분의 자바 프로그래머가 하나의 추상 메서드를 갖는 인터페이스에 이미 익숙하다. @FunctionalInterface 함수형 인터페이스에 @FunctionalInterface 어노테이션이 추가되었다. 해당 어노테이션을 선언하면 인터페이스가 함수형 인터페이스가 아니라면 컴파일 에러가 발생한다. 함수형 인터페이스..
람다표현식이란? 람다표현식은 JAVA 8에 등장하였다. 익명 클래스처럼 이름이 없는 함수이면서, 메서드를 인수로 전달할 수 있다. 메서드로 전달할 수 있는 익명함수를 단순화한 것이다. 람다 표현식에는 이름은 없지만, 파라미터 리스트, 바디, 반환 형식, 발생할 수 있는 예외 리스트를 가질 수 있다. 람다표현식의 특징 익명 = 메서드의 이름이 없다. 함수 = 메서드처럼 특정 클래스에 종속되지 않는다. 전달 = 람다 표현식을 메서드 인수로 전달하거나 변수로 저장될 수 있다. 간결성 = 익명 클래스처럼 많은 자질구레한 코드를 구현할 필요가 없다. 람다를 이용해서 간결한 방식으로 코드를 전달할 수 있다. 람다가 기술적으로 자바 8 이전의 자바로 할 수 없었던 일을 제공하는 것은 아니지만, 동작 파라미터를 이용할..
LocalDateTime 클래스 / parse 메소드 LocalDateTime getDate = LocalDateTime.parse("20191022041", DateTimeFormatter.ofPattern("yyyyMMddHHmm")); LocalDateTime getDate2 = LocalDateTime.parse("201910302041", DateTimeFormatter.ofPattern("yyyyMMddHHmm")); 위 처럼, parse 메소드를 통해 String 문자열을 ‘yyyyMMddHHmm’ pattern으로 LocalDateTime 변수에 저장할 수 있다. until 메소드 long minute= getDate.until(getDate2, ChronoUnit.MINUTES); Str..
Reactuve Streans를 들어가기 이전 Reactive Streams 포스팅을 들어가기전, Reactive Spring의 개념에 대해 알아야한다. 포스팅 바로가기 : devfunny.tistory.com/314?category=820617 Reactive Spring / Reactive Programming Reactive 의 예시 Reactive의 뜻은 반응형이다. 리액티브를 이해하기 위해서, 하나의 상황을 예로 들어보자. 한 어플리케이션에서 시간당 평균 약 1,000명의 사용자가 방문한다고 가정해보자. 톰캣을 devfunny.tistory.com Reactive Streams Reactive Streams란 라이브러리나 프레임워크에 상관없이 데이터 스트림을 비동기로 다룰 수 있는 공통 메커니즘..
리액티브 프로그래밍의 관찰자 패턴 관찰자 패턴은 리액티브 프로그래밍의 기초이다. 관찰자 패턴은 관찰자라고 불리는 자손의 리스트를 가지고 있는 주체(subject)를 필요로한다. 주체는 자신의 메서드 중 하나를 호출하여 관찰자에게 상태 변경을 알린다. 관찰자 패턴은 이벤트 처리를 기반으로 시스템을 구현할 때 필수적이다. MVC(Model-View_Controller) 패턴의 중요한 부분으로, 거의 모든 UI 라이브러리가 내부적으로 이 패턴을 사용한다. 관찰자 패턴의 구현 Observer(관찰자)는 Subject(주체)에 등록되고 Subject 로부터 알림을 받는다. 위에서 설명한 상태변경을 알린다. 라는 말이 이에 해당한다. Observer (관찰자) 2개 Subject (주체) 1개 Subject 인터페..
SpringBatch 사용을 위한 스프링 설정 (1) 의존성 추가 org.springframework.boot spring-boot-starter-batch (2) 스프링부트 Application 파일에 어노테이션 추가 @EnableBatchProcessing // 배치 사용을 위한 선언 @SpringBootApplication public class BatchApplication { public static void main(String[] args) { SpringApplication.run(BatchApplication.class, args); } } SpringBatch 의 Job 등록 import com.backend.batch.day01.dto.TempLibraryDto; import com...
NullPointerException NullPointerException은 개발자가 한번이라도 만나봤을 에러이다. 그정도로 흔하게 일어나는 에러로, 이는 “자바의 모든 객체는 NULL일 수 있다.”” 라는 말을 확인시켜준다. NullPointerExcpetion이 발생하는 경우를 예시로 보자. public static getCarInsurancename(Person pserson) { return person.getCar().getInsurance().getName(); } 위 코드에서 getCar()를 실행한 후의 값이 NULL이라면? 차가 없는 사람은 존재할 수 있다. person.getCar()의 값이 NULL인데 getInsurance()가 실행되면 여기서 NullPointerException이..
ResponseEntity 요즘 RESTFul API 가 많이 사용되고있는데, Restful API에서 return Type으로 사용되고있는 ResponseEntity 에 대하여 알아보자. 설명 예시 HTTP 상태코드 제어 ResponseEntity.status(HttpStatus.OK).body(testVO) 결과 데이터를 body에 담아 return ResponseEntity.status(HttpStatus.OK).body(testVO) ResponseEntity는 @ResponseBody 어노테이션과 같은 의미로, ResponseEntity를 return Type으로 지정하면 JSON (default) 또는 Xml Format으로 결과를 내려준다. 200 OK 1) return ResponseEnt..
Before WM_CONCAT() 사용 전의 select 조회 select * from dept; DNAME AA BB CC After WM_CONCAT() 사용 후의 select 조회 select WM_CONCAT(DNAME) from dept; DNAME AA,BB,CC 위 결과를 보았을때, WM_CONCAT() 함수를 사용하여 원하는 컬럼의 여러 데이터를 하나의 행으로 표현할 수 있다.
서브쿼리란? 1. 정의 - 하나의 SQL문안에 포함되어 있는 또 다른 SQL문을 말한다. 2. 주의점 - 괄호로 감싸서 사용한다. - 단일 행(Single Row) 또는 복수 행(Multiple Row) 비교 연산자와 함께 사용 가능하다. - 단일 행 비교 연산자는 서브쿼리의 결과가 반드시 1건 이하이어야 하고, 복수 행 비교 연산자는 서브쿼리의 결과 건수와 상관 없다. - ORDER BY를 사용하지 못한다. ORDER BY절은 SELECT절에서 오직 한 개만 올 수 있기 때문에 ORDER BY절은 메인쿼리의 마지막 문장에 위치해야 한다. 3. 서브쿼리가 사용가능한 절 - SELECT 절, FROM 절, WHERE 절, HAVING 절, ORDER BY 절, INSERT문의 VALUES 절, UPDATE..
조인의 개요 1. 정의 - 두 개 이상의 테이블 들을 연결 또는 결합하여 데이터를 출력하는것 - JOIN은 관계형 데이터베이스의 가장 큰 장점이면서 대표적인 핵심 기능이라고 할 수 있다. - 일반적인 경우 행들은 PRIMARY KEY(PK)나 FOREIGN KEY(FK) 값의 연관에 의해 JOIN이 성립된다. - 하지만 어떤 경우에는 이러한 PK, FK의 관계가 없어도 논리적인 값들의 연관만으로 JOIN이 성립 가능하다. 2. 주의할점 - FROM 절에 여러 테이블이 나열되더라도 SQL에서 데이터를 처리할 때는 단 두 개의 집합 간에만 조인이 일어난다는 것이다. +예시) Equi Join 1. 정의 - 두 개의 테이블 간에 칼럼 값들이 서로 정확하게 일치하는 경우에 사용되는 방법이다. - 대부분 PK ↔..
Reactive 의 예시 Reactive의 뜻은 반응형이다. 리액티브를 이해하기 위해서, 하나의 상황을 예로 들어보자. 한 어플리케이션에서 시간당 평균 약 1,000명의 사용자가 방문한다고 가정해보자. 톰캣을 웹 서버로 실행하고, 500개의 스레드로 톰캣 스레드 풀을 구성했다. 위 상황에서, 사용자 요청에 대한 평균 응답 시간은 약 0.250ms이다. 그럼 1초에 2,000명의 사용자의 요청을 처리할 수 있다. 그렇다면 평균 약 1,000명의 사용자가 들어오는 위 어플리케이션의 웹 서버는 평균 부하를 처리하기에 매우 충분하다. 요악하면 이 경우는 처리 능력을 기준으로 애플리케이션을 구성한 것이다. 그런데 만약, 특정 할인날에 폭발적인 고객 증가로 서버 부하가 발생했다고 가정해보자. 스레드 풀에 사용자 요..