본문 바로가기

분류 전체보기

(80)
JAVA Lambda, Functional Interface Lambda란 우리는 이전에 Stream API를 살펴봤었다. 그 포스트에서 알 수 있었듯이, Stream 연산들은 매개변수로 람다식을 사용했다. 그 이유는 Stream 연산들은 함수형 인터페이스를 받도록 되어있고 람다식은 함수형 인터페이스를 반환하기 때문이다. 우리는 Stream API를 확실하게 사용하기 위해서는 람다(Lambda)와 함수형 인터페이스(Functional Interface)에 대해서 알아야하기 때문에 중요하다고 할 수 있다. ​ 람다식은 JDK 1.8부터 추가되었다. 람다식의 도입으로 인해 자바는 객체지향언어인 동시에 함수형 프로그래밍 언어가 되었다. (람다식과 함수형 인터페이스의 이해를 위해 함수형 프로그래밍 언어에 대해서 알아볼 필요가 있다.[함수형 프로그래밍 링크] ) 우리는 이..
JAVA Exception 예외란 우리는 Exception에 대해 다루기 전에 Exception과 Error에 대해 명확히 짚고 넘어가려고 한다. Exception은 애플리케이션에서 참조하고 있는 값이 올바르지 않은 경우, 처리가 불가능한 경우 등 정상적인 프로그램의 구동 과정 중 어긋 난 경우에 나타난다. 그래서 우리는 이에 대한 처리를 직접 진행할 수 있다. Error는 어떤 무언가에 의해 비정상적인 프로그램의 구동이 발생할 때 나타난다. 우리는 이에 대한 처리를 애플리케이션에서 발생하는 부분이 아니라 JVM에서 발생하는 에러로 시스템 레벨에서 처리가 가능하다. 그렇다면, 자바에서의 예외 클래스 구조에 대해서 살펴보자. Exception과 Error 모두 Throwable클래스를 상속받아 구현되어있다. 그림에서 확인할 수 있듯..
Java Optional Optional이란 우리가 개발을 할 때 상당히 자주 마주치는 예외 중 하나가 바로 NPE(NullPointerException)일 것이다. 이러한, NPE를 피하기 위해서는 null인지를 체크해주는 로직을 "필히" 넣어주어야 한다. 하지만, if 문을 통해 null을 검사하는 것은 코드의 복잡성을 유발하고 가독성을 해칠 가능성이 크다. ​ 간단한 예를 하나 살펴보자. 만약, 학생의 이름과 나이를 저장할 수 있는 Student 객체가 있다고 하자. 학생은 이름은 필수로 입력해야하지만, 나이의 입력은 선택이라고 한다. 그리고 수업에 참가한다는 AttendClass()라는 메소드가 존재하고 이 메소드의 리턴 값으로 참여한 학생들의 나이들을 출력한다고 하자. 그렇다면, 수업에 참가하는 학생이 있고 학생들의 나..
Java Stream Stream이란 (1) Stream? Stream이란, 데이터 처리 연산을 지원하도록 소스에서 추출된 연속된 요소이다. Stream은 순차적으로 혹은 병렬적으로 실행하여 데이터를 처리할 수 있다. Stream은 Collection, 배열, I/O 자원 등의 데이터 제공 소스로부터 데이터를 소비한다. Stream은 Collection과 마찬가지로, 특정 요소 형식으로 이루어진 연속된 값 집합 인터페이스를 제공한다. Collection의 경우 요소의 저장 및 접근 연산 중심이며, Stream의 경우에는 filter, sorted, map, distinct과 같은 데이터 처리 중심이다. ​ (2) Stream 특징 1.Stream은 수직적으로(위에서 아래로) 동작한다. arr.stream() .filter(...
TDD, BDD, DDD TDD (Test Driven Development) TDD를 직역하면 테스트 주도 개발이다. TDD는 매우 짧은 개발 서클의 반복에 의존하는 소프트웨어 개발 프로세스이다. 새로운 기능에 대해 자동화된 테스트 케이스를 먼저 작성하고 테스트 케이스를 통과하는 최소한의 코드를 작성한다. 그 이후, 코드에 대한 리팩토링을 진행한다. 우리가 흔히 새로운 기능에 대한 코드를 짠 후, Test 코드를 짜는 것과 대비되는 모습을 보여준다. TDD는 "테스트 케이스 작성 -> 기능 구현 -> 리팩토링"의 단계를 반복하여 좋은 코드를 작성하기에 유리하다. 각 기능마다 테스트를 통해 기능의 안정성을 보장할 수 있다. 하지만, 테스트 케이스를 작성해야한다는 점으로 인해 절대적인 코드량이 늘어날 수 밖에 없어 프로젝트 개발의..
[Spring] API Exception (With Validation) HTTP API Exception 이전에 웹에서 웹페이지로 오류를 처리하는 것을 살펴보았다. 우리는 API json을 통해서도 Error를 처리할 수 있어야 한다. 그에 따라, API에서 오류를 처리하는 방법을 알아보려고 한다. 이를 살펴보기 위해 간단한 예제를 가져왔다. @Getter @AllArgsConstructor public class Person { @NotBlank private String id; @NotBlank private String pw; @NotBlank private String pwConfirm; } 값을 필히 입력해야하는 아이디가 존재한다. 값을 필히 입력해야하는 패스워드가 존재한다. 값을 필히 입력해야하는 패스워드 확인 값이 존재한다. @RestController publ..
[Spring] 오류 페이지 오류페이지란? 우리는 클라이언트 혹은 서버에서 잘못된 요청 혹은 응답을 할 경우 오류페이지를 보게된다. 우리가 흔히 볼 수 있는 예를 들면 400 Bad Request, 404 Not Found, 500 Internal Server Error 등이 존재한다. 그 중 우리가 가장 흔히 볼 수 있는 404 Not Found를 예로하여 이를 살펴보자. 우리가 개발중인 웹에서는 /qwe라는 API를 지원하지 않는다. 그런데, 우리가 이를 호출하게 되면 당연히 이에 대한 처리를 찾을 수 없어 404 Not Found를 내보낼텐데 이를 클라이언트 사용자에게 명시해줘야한다. 이게 어떻게 가능한 일일까? 이는 BasicErrorController에서 처리해준다. 이에 대해 자세히 살펴보자. 오류페이지 - BasicEr..
[Spring] 필터, 인터셉터 필터, 인터셉터란? 우리는 공통 비지니스 로직이 있다고 했을 때, 이 로직이 필요한 모든 클래스에 진행한다면 무수한 중복이 생길 것이고 책임이 커져 좋지 않은 상황이 발생할 것이다. 우리는 이를 해결하기 위해 공통 비지니스 로직을 따로 빼서 관리하는 방식으로 진행하면 좋을 것이다. 이를 할 수 있는 방법을 말하자면 필터, 인터셉터, AOP가 존재한다. AOP에 대해서는 다뤄본적이 있으니 필터, 인터셉터에 대해서 알아보고자 한다. 전체적인 구조를 그림으로 살펴보면 다음과 같다. 필터는 서블릿이 관리하고 Dispatcher Servlet 앞단에서 공통된 로직을 처리한다. 인터셉터는 스프링이 관리하고 필터가 진행된 후 Dispatcher Servlet 뒷단에서 공통된 로직을 처리한다. AOP는 인터셉터와 마찬..