본문 바로가기

JAVA

(24)
[JAVA8] Lambda(람다)에서 지역변수 사용하기 람다 표현식에서는 익명 함수가 하는 것처럼 자유 변수(파라미터로 넘겨진 변수가 아닌 외부에서 정의된 변수)를 사용할 수 있다. 이와 같은 동작을 람다 캡처링이라고 부른다. 람다에서는 인스턴스 변수와 정적 변수는 제약없이 캡처하여 사용할 수 있다. 즉 자신의 바디 영역에서 언제든지 사용할 수 있다는 의미이다. 하지만 지역 변수는 제약 사항이 있다. final로 선언되어 있거나 실질적으로 final로 선언된 변수와 똑같이 사용되어야 한다. 즉 한번 할당한 지역 변수를 두번 할당하지 않는 지역변수만 람다에서 사용가능하다는 뜻이다. 아래 내용은 가능함. int message = "hi"; Runnable r = () -> System.out.println(message); 아래 내용은 가능하지 않음. int m..
[JAVA8] 함수형 인터페이스 정리 함수형 인터페이스는 오직 하나의 추상 메서드를 지정한다. 함수형 인터페이스의 추상 메서드는 람다 표현식의 시그너처를 묘사한다. 함수형 인터페이스의 추상 메서드 시그너처를 함수 디스크립터라고 한다. 자바8 라이브러리에서 제공하고 있는 function패키지에 함수형 인터페이스를 알아보자. function 패키지에서 지원하고 있는 함수형 인터페이스는 별도에 인터페이스 정의 없이 바로 개발자가 사용할 수 있다. 1. Predicate Predicate 인터페이스는 test라는 추상 메서드를 정의하고 test는 제네릭 형식 T의 객체를 인수로 받아 boolean을 반환한다. @FunctionInterface public interface Predicate { boolean test(T t); } *기본형 특화형 ..
[JAVA] OkHttp로 REST API 호출하기 Android에서 많이 사용하고 있는 OkHttp에 대해 알아보자. OkHttp는 Square에서 제공하는 오픈소스 프로젝트이며 동기, 비동기 방식을 각각 제공해줌으로서 개발자가 선택하여 사용할 수 있다. [GET 동기]public void get(String requestURL) { try { OkHttpClient client = new OkHttpClient(); Request request = new Request.Builder() .addHeader("x-api-key", RestTestCommon.API_KEY) .url(requestURL) .build(); //GET Request //동기 처리시 execute함수 사용 Response response = client.newCall(requ..
[JAVA] HttpClient로 REST API 호출하기 이번 페이지에서는 Apache에서 제공하고 있는 HttpClient 라이브러리를 이용해 REST API를 호출하는 방법을 알아보자.  [GET]public void get(String requestURL) { try { HttpClient client = HttpClientBuilder.create().build(); // HttpClient 생성 HttpGet getRequest = new HttpGet(requestURL); //GET 메소드 URL 생성 getRequest.addHeader("x-api-key", RestTestCommon.API_KEY); //KEY 입력 HttpResponse response = client.execute(getRequest); ..
[JAVA] HttpURLConnection로 REST API 호출하기 이번 페이지에서는 HttpURLConnection을 이용해 REST API를 호출하는 방법을 알아보자. [GET] public void get(String strUrl) { try { URL url = new URL(strUrl); HttpURLConnection con = (HttpURLConnection) url.openConnection(); con.setConnectTimeout(5000); //서버에 연결되는 Timeout 시간 설정 con.setReadTimeout(5000); // InputStream 읽어 오는 Timeout 시간 설정 con.addRequestProperty..
[JAVA] REST API Client Library 알아보기 in Java Project 시스템 서비스 규모가 커지고 마이크로서비스 개념이 확산되어가면서 많은 프로젝트에서 서비스간에 통신 방식으로 REST API를 선호 하고 있다. 이 페이지에서는 REST API 사용자 입장(Client)에서 활용할 수 있는 JAVA Library를 알아보고자 한다. REST API Client에 JAVA Library로는 HttpURLConnection, HttpClient, OkHttp, Retrofit, RestTemplate를 대표적으로 들 수 있다. 이것 이외에도 수많은 Library가 존재하지만 많은 개발자가 선택하고 사용하고 있는 4가지 Library에 대해 간략하게 알아보자. 1. HttpURLConnection - 기본 JDK에 포함되어 있음. (jdk1.2부터 내장되어 있으며 java.ne..
[JAVA 8] 메서드 레퍼런스 알아보기! 메서드 레퍼런스는 특정 메서드만을 호출하는 람다의 축약 표현이라고 생각할 수 있다. 람다가 특정 메서드를 직접 호출하게 된다면 메서드를 어떻게 호출해야 하는지 설명을 참조 하기 보다 메서드 명을 직접 참조 하도록 하는 것이다. 메서드 레퍼런스를 이용한다면 기존 메서드 구현으로 람다 표현식을 만들 수 있다. 이때 명시적으로 메서드명을 참조 하게 됨으로서 가독성을 높일 수 있는 장점이 있다. 메서드 레퍼런스는 메서드명 앞에 구분자 (::)를 붙이는 방식으로 사용된다. Car :: getPrice (== (Car c) -> getPrice())는 Car 클래스의 getPrice의 메서드 레퍼런스를 뜻한다. [예제] (Car c) -> c.getPrice() =========> Car :: getPrice ()..
[JAVA 8] 형식 검사, 형식 추론, 제약 람다로 함수형 인터페이스의 인스턴스를 만들 수 있으며 람다 표현식에는 람다가 어떤 함수형 인터페이스를 구현하는지 정보를 가지고 있다. 따라서 람다 표현식을 더 제대로 이해하려면 람다의 실제 형식을 파악해야 한다. 1. 형식 검사 - 람다에 사용되는 내용을 바탕으로 람다의 형식을 추론할 수 있다. - 대상 형식 ? 람다가 전달될 파라미터나 람다가 할당되는 변수 등에서 기대되는 람다 표현식의 형식을 대상 형식이라 부른다. (예: Predicate) - filter() 함수의 정의를 보면 파라미터로 Predicate로 정의 되어 있다. - 즉, Predicate라는 대상 형식에 만족하는 람다 함수를 기대하는 것이다. 1-1.같은 람다, 다른 함수형 인터페이스 - 대상 형식이라는 특징 때문에 같은 람다 표현식이..