전체 글
  • 도입 모든 자바 애플리케이션은 컬렉션을 만들고 처리하는 과정을 포함한다. 컬렉션은 대부분의 프로그래밍 작업에 사용될 정도로 어디서든 사용되어지고있다. 하지만 컬렉션을 많이 사용함에도 불구하고 완벽한 컬렉션 연산을 지원하기에는 아직까지도 부족하다. 많은 요소를 포함하는 컬렉션은 어떻게 처리해야할까? 성능을 높이려면 멀티코어 아키텍처를 활용하여 병렬로 컬렉션의 요소를 처리해야한다. 하지만 병렬 처리 코드를 구현하는 것은 단순 반복 처리 코드에 비해 복잡하고 어렵다. 이러한 복잡한 코드는 디버깅도 어렵다. 프로그래머가 귀중한 시간을 절약하고, 편리한 삶을 누릴 수 있도로 자바 언어 설계자들이 내린 결정이 바로 스트림이다. 스트림이란? 스트림은 자바 8 API에 새로 추가된 기능이다. 스트림은 데이터 컬렉션 반..

    Read more
  • 메서드 참조 메서드 참조를 이용하면 기존의 메서드 정의를 재활용해서 람다처럼 전달할 수 있다. inventory.sort(Apple a1, Apple a2) -> a1.getWeight().compareTo(a2.getWeight())); 위 코드를 메서드 참조와 java.util.Comparator.comparing을 활용한 코드로 바꿔보자. // 메서드 참조의 사용 // Apple 클래스에 정의된 getWeight의 메서드 참조 // 실제로 메서드를 호출하는 것이 아니므로 괄호 생략 // 결과적으로 (Apple a) -> a.getWeight()를 축약한 것 inventory.sort(comparing(Apple::getWeight)); // = (Apple a) -> a.getWeight() 위 생..

    Read more
  • 도입 람다로 함수형 인터페이스의 인스턴스를 만들 수 있다. 하지만 람다 표현식 자체에는 어떤 함수형 인터페이스를 구현하는지의 정보가 포함되어있지 않으므로 람다의 실제 형식을 제대로 파악해야한다. 형식 검사 람다가 사용되는 context를 이용해서 람다의 형식을 추론할 수 있다. 어떤 context에서 기대되는 람다 표현식의 형식을 대상 형식이라고 부른다. 예를 들면 람다가 전달된 메서드 파라미터나 람다가 할당되는 변수에서 추론하는 것이다. List heightThan160cm = filter(inventory, (Height height) -> height.getHeight() > 160); 위 예제는 아래 순서로 형식 확인 과정을 거친다. (1) filter 메서드의 선언을 확인한다. (2) filte..

    Read more
  • 함수형 인터페이스의 사용 함수형 인터페이스는 오직 1개의 추상 메서드를 지정하고, 이 추상 메서드는 람다 표현식의 시그니처를 묘사한다. 함수형 인터페이스의 추상 메서드의 시그니처를 함수 디스크립터라고 한다. 다양한 람다 표현식을 사용하려면 공통의 함수 디스크립터를 기술하는 함수형 인터페이스 집합이 필요하다. 자바 API에 Comparable, Runnable, Callable 등의 다양한 함수형 인터페이스가 있지만 자바 8에 새로 추가된 함수형 인터페이스에 대해 알아보자. Predicate java.util.function.Predicate 인터페이스는 test라는 추상 메서드를 정의하며 test는 제네릭 형식 T의 객체를 인수로 받아 boolean 타입을 반환한다. 따로 정의할 필요 없이 바로 사용이 ..

    Read more
  • 생성자의 단점 생성자에는 제약이 하나 있는데, 선택적 매개변수가 많을 경우에 대응이 어렵다. 예를들어, 받아오는 매개변수에 따라 계속해서 생성되는 생성자의 코드를 보았을때 매개변수의 개수에 따라 호출되는 생성자를 짐작하기가 매우 혼잡해진다. 또는 생성자 호출을 위해서 설정하길 원하지않는 매개변수의 값까지 지정해줘야하는 불편함이 있다. 한 두개 정도는 괜찮을 수 있겠지만, 매개변수의 수가 늘어나게되면 걷잡을 수 없을정도가 된다. 코드를 읽을 때 각 값의 의미가 무엇인지 헷갈린다. 매개변수가 몇개인지 세어보며 항상 확인해야한다. 타입이 같은 매개변수가 연속으로 있으면 버그 발생 가능성이 높아진다. 실수로 매개변수의 순서가 바뀌더라도 컴파일러가 해당 에러를 잡지 못하여 런타임 에러로 이어지게된다. 자바빈즈 패..

    Read more
  • 함수 디스크립터 함수형 인터페이스의 추상 메서드 시그니처 = 람다 표현식의 시그니처 이다. 람다 표현식의 시그니처를 서술하는 메서드를 함수 디스크립터라고 부른다. 여기서 메서드 시그니처란, 메서드명/파라미터 순서/파라미터 타입/파라미터 개수를 의미한다. 왜 함수형 인터페이스를 인수로 받는 메서드에만 람다 표현식을 사용할 수 있을까? 언어 설계자들은 언어를 더 복잡하게 만들지 않는 방법을 선택했다. 대부분의 자바 프로그래머가 하나의 추상 메서드를 갖는 인터페이스에 이미 익숙하다. @FunctionalInterface 함수형 인터페이스에 @FunctionalInterface 어노테이션이 추가되었다. 해당 어노테이션을 선언하면 인터페이스가 함수형 인터페이스가 아니라면 컴파일 에러가 발생한다. 함수형 인터페이스..

    Read more
  • 람다표현식이란? 람다표현식은 JAVA 8에 등장하였다. 익명 클래스처럼 이름이 없는 함수이면서, 메서드를 인수로 전달할 수 있다. 메서드로 전달할 수 있는 익명함수를 단순화한 것이다. 람다 표현식에는 이름은 없지만, 파라미터 리스트, 바디, 반환 형식, 발생할 수 있는 예외 리스트를 가질 수 있다. 람다표현식의 특징 익명 = 메서드의 이름이 없다. 함수 = 메서드처럼 특정 클래스에 종속되지 않는다. 전달 = 람다 표현식을 메서드 인수로 전달하거나 변수로 저장될 수 있다. 간결성 = 익명 클래스처럼 많은 자질구레한 코드를 구현할 필요가 없다. 람다를 이용해서 간결한 방식으로 코드를 전달할 수 있다. 람다가 기술적으로 자바 8 이전의 자바로 할 수 없었던 일을 제공하는 것은 아니지만, 동작 파라미터를 이용할..

    Read more
  • 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..

    Read more
  • 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란 라이브러리나 프레임워크에 상관없이 데이터 스트림을 비동기로 다룰 수 있는 공통 메커니즘..

    Read more
  • 리액티브 프로그래밍의 관찰자 패턴 관찰자 패턴은 리액티브 프로그래밍의 기초이다. 관찰자 패턴은 관찰자라고 불리는 자손의 리스트를 가지고 있는 주체(subject)를 필요로한다. 주체는 자신의 메서드 중 하나를 호출하여 관찰자에게 상태 변경을 알린다. 관찰자 패턴은 이벤트 처리를 기반으로 시스템을 구현할 때 필수적이다. MVC(Model-View_Controller) 패턴의 중요한 부분으로, 거의 모든 UI 라이브러리가 내부적으로 이 패턴을 사용한다. 관찰자 패턴의 구현 Observer(관찰자)는 Subject(주체)에 등록되고 Subject 로부터 알림을 받는다. 위에서 설명한 상태변경을 알린다. 라는 말이 이에 해당한다. Observer (관찰자) 2개 Subject (주체) 1개 Subject 인터페..

    Read more
  • 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...

    Read more
  • NullPointerException NullPointerException은 개발자가 한번이라도 만나봤을 에러이다. 그정도로 흔하게 일어나는 에러로, 이는 “자바의 모든 객체는 NULL일 수 있다.”” 라는 말을 확인시켜준다. NullPointerExcpetion이 발생하는 경우를 예시로 보자. public static getCarInsurancename(Person pserson) { return person.getCar().getInsurance().getName(); } 위 코드에서 getCar()를 실행한 후의 값이 NULL이라면? 차가 없는 사람은 존재할 수 있다. person.getCar()의 값이 NULL인데 getInsurance()가 실행되면 여기서 NullPointerException이..

    Read more
  • 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..

    Read more
  • 데이터 링크 계층의 역할과 이더넷 랜에서 데이터를 주고받으려면 데이트 링크 계층의 기술이 필요하다. 데이터 링크 계층은 네트워크 장비 간에 신호를 주고받는 규칙을 정하는 계층이다. 랜에서 데이터를 정상적으로 주고받기 위해 필요하다. 이더넷 그 규칙중 대표적인것이 ‘이더넷‘ 이다. 이더넷은 허브와 같은 장비에 연결된 컴퓨터와 데이터를 주고받을때 사용한다.허브를 사용했을때에는 모든 포트에 들어오는 데이터를 그대로 보내므로, 컴퓨터 여러대가 동시에 데이터를 보내면 ‘충돌’이 일어날 수 있다. 이더넷은 여러 컴퓨터가 동시에 데이터를 전송해도 충돌이 나지 않는 구조로 되어있다. 데이터가 보내는 시점을 조절한다. 이더넷에서 이처럼 시점을 늦추는 것을 ‘CSMA/CD‘ 라고 한다. CSMA/CD (Carrier Se..

    Read more
  • 물리 계층 물리 계층은 데이터를 전기 신호로 변환하기 위해 필요하다. 네트워크를 통해 데이터를 주고 받을때는 0과 1의 비트열을 전기 신호로 변환해야한다. 전기 신호의 종류에는 아날로그 신호와 디지털 신호가 있다. 물결 모양의 전기 신호 : 아날로그 신호 (전화 회선이나 라디오 방송에 사용되는 신호) 데이터는 어떻게 전기 신호로 변환되는 것일까? 데이터 송신 측 컴퓨터가 전송하는 0과 1의 비트열 데이터는 전기 신호로 변환되어 네트워크를 통해 수신 측 컴퓨터에 도착한다. 수신 측 컴퓨터에서는 전기 신호를 0과 1의 비트열 데이터로 복원한다. 그런데 0과 1을 어떻게 전기신호로 변환을 할까? 컴퓨터는 네트워크를 통해 데이터를 송수신할 수 있도록 랜 카드가 메인 보드에 포함되어 있는 내장형 랜 카드나 별도의..

    Read more
  • Copyright 2024. GRAVITY all rights reserved