본문 바로가기

포스트464

[Java] Iterable을 컬렉션(Collection)으로 바꾸는 방법 자바 라이브러리를 사용하다보면 Iterable 객체를 받아와서 컬렉션(Collection) 객체로 바꿔 쓰고 싶은 경우가 많다. 그냥 일반적인 자바 소스코드로 작성해서 사용하는 방법도 있고, 구아바(Guava), Apache Commons 라이브러리를 이용한 방법이 있다. Plain Java 코드 우선 Java8 이상의 JDK를 사용하는 경우 다음을 사용할 수 있다. List result = new ArrayList(); iterable.forEach(result::add); iterable 객체에서 제공하는 forEach() 메소드를 이용해서 list를 채워서 사용한다. 혹은 Spliterator 클래스를 이용해서 생성할 수도 있다. List result = StreamSupport.stream(ite.. 2021. 4. 29.
[Java] 깊은복사(Deep Copy)와 얕은복사(Shallow Copy) 차이점 자바에서 객체를 복사하는데 꼭 알아둬야 할 개념이 '깊은복사(Deep Copy)'와 '얕은복사(Shallow Copy)'의 차이점이다. 이 두 개념의 차이를 명확하게 알고 있어야 예기치 못 한 버그를 발생시키기 않을 수 있다. 우선 깊은복사와 얕은복사의 정의는 다음과 같다. 얕은복사(Shallow Copy) 객체를 복사할 때, 객체가 가지고 있는 필드의 값들을 단순히 복사한다. 기본형(Primitive Type) 값들은 복사가 될 것이고, 참조형 변수는 같은 객체를 가리키게 된다. 깊은복사(Deep Copy) 객체를 복사할 때, 객체가 가지고 있는 필드의 값을 복사해준다. 이 때, 기본형 값들은 그대로 복사가 되며 참조형 변수의 경우 변수가 참조하는 객체에 대해서도 새롭게 복사해서 만들어준다. 깊은 복사.. 2021. 4. 26.
[Java] OkHttp 사용법 - Java REST API 예제 OkHttp는 REST API, HTTP 통신을 간편하게 사용할 수 있도록 만들어진 자바 라이브러리다. "Square"라는 회사가 만든 OkHttp 라이브러리는 어쩌면 더 잘 알려져있는 Retrofit이라는 라이브러리의 기본이 된다. OkHttp 라이브러리를 이용하면 간편하게 몇 줄의 코드로 REST API, HTTP 기반의 요청, 응답을 처리할 수 있다. OkHttp 라이브러리는 오픈소스로 공개된 소프트웨어다. (링크 : OkHttp github) 문제가 생기거나 내부 동작이 궁금하면 코드를 열어볼 수 있다. OkHttp 메이븐(Maven) 의존성 설정 아마도 메이븐 프로젝트를 많이 사용할 텐데, 메이븐 프로젝트에서 OkHttp를 사용하기 위해서는 pom.xml 파일에 다음 의존성을 추가하면 된다. 버.. 2021. 4. 25.
[Java] 배열 정렬하기 - Arrays.sort() 자바 프로그래밍을 하면서 데이터들을 정렬할 일이 많다. 자바에서 배열 형태로 저장되어 있는 데이터를 Arrays.sort() 메소드를 제공하고 있어 이 메소드를 이용해 따로 정렬 메소드를 구현하지 않고 데이터를 정렬할 수 있다. Arrays 클래스에는 배열에 대한 복사, 정렬, 검색 등의 유틸리티 메소드들이 구현되어 있다. 배열의 정렬 Arrays.sort() 메소드를 이용해 정렬을 수행하면 기본적으로 오름차순으로 정렬된다. 오름차순이란 작은 값이 앞에 오도록 정렬된 순서를 의미한다. 숫자 배열 정렬 숫자에 대한 정렬을 수행하는 예제는 다음과 같다. import java.util.Arrays; public class Example { public static void main(String[] args) .. 2021. 4. 24.
[Java] OS 환경변수 불러오기 자바 프로그램을 실행시킬 때 Bash 스크립트를 통해 실행시키는 경우가 많다. 이 때, Bash에서 환경변수들을 설정해두고 자바 프로그램을 실행할 때 값들을 넘겨서 자바 로직에 사용하고 싶은 경우가 있다. 자바 프로그램에 인자형태로 넘겨주거나 파일 형태로 설정값들을 넘겨줘도 되지만 운영체제의 환경변수를 읽는 작업은 여전히 유효하다. 운영체제에서 환경변수는 환경변수 이름(Name)과 값(Value) 쌍으로 관리된다. 자바에서는 JVM이 실행되는 환경 변수 값을 System.getenv() 메소드를 통해 얻어온다. System.out.println("Environment Variables : " + System.getenv()); System.out.println("JAVA_HOME : " + System... 2021. 4. 23.
[Java] OkHttp 커넥션 풀(Connection Pool) 기능 OkHttp 라이브러리는 '커넥션 풀(Connection Pool)' 기능을 제공한다. REST API 서버에 요청을 보낼 때, 매번 연결을 맺는 대신 커넥션 풀(Connection Pool) 기능을 이용해서 동일한 URL로의 커넥션을 풀링하여 다음번 요청때에 재사용하는 기능이다. 커넥션을 새로 빌드하는 동작은 그 하나로는 짧지만 경우에 따라서 무시할 수 없는 오버헤드로 작용할 수 있다. OkHttp 커넥션 풀링 기능 OkHttp 클라이언트 객체를 생성할 때, 기본적으로 커넥션 풀링 기능이 적용되어 있다. OkHttpClient client = new OkHttpClient(); REST API를 이용하고자 할 때, OkHttpClient 객체를 생성했다. 이 생성자의 내부를 들어가보면 Connectio.. 2021. 4. 22.
[Java] OkHttp id-password를 사용한 기본 인증 예제 (Basic Authentication Example) 자바로 REST API를 사용할 때 OkHttp 라이브러리를 자주 사용한다. REST API 중에는 가장 '기본 인증(Basic Authentication)' 방법으로 사용자의 아이디와 비밀번호를 요구하는 경우가 있다. 터미널에서 curl 명령으로 REST API를 사용할 때에는 -u 옵션으로 아이디와 비밀번호를 입력할 수 있다. curl -u userId:userPassword {...} OkHttp 라이브러리를 사용하는 자바 프로그램에서는 어떻게 '기본 인증(Basic Authentication)'을 요구하는 REST API 서버에 인증을 진행하는지 예제를 통해서 알아보겠다. BasicAuthenticator 구현 OkHttp 클라이언트는 OkHttp3.Authenticator라는 인터페이스를 구현한.. 2021. 4. 21.
[Java] 문자열 비교하기 - equals() 메소드와 == 연산 비교 자바에서 가장 오묘한 자료형은 문자열이다. 자바 프로그래머들은 문자열을 기본자료형(Primitive Type)처럼 인식하고 쓰는 경우가 많이 있지만 사실은 객체다. 때문에 두 객체의 정확한 값을 비교하는 equals() 메소드를 써야한다. == 연산으로 두 문자열을 비교할 경우 문자열의 내용이 아니라 문자열 객체의 참조값(주소값)을 비교하기 때문에 정확히 동일한 문자열이라도 다르다고 판단할 수 있다. 문자열의 비교 '==' 연산 vs 'equals()' 메소드 문자열의 내용이 동일하더라도 JVM 메모리에서 각자 다른 객체로 존재한다면 '==' 연산은 다르다고 판단할 것이다. 다음 코드를 보자. public class Example { public static void main(String[] args) .. 2021. 4. 20.
[Java] 자바 디렉토리(폴더) 생성 및 삭제 예제 자바를 이용해서 파일 시스템에 접근, 파일을 열거나 생성해서 데이터를 읽고, 쓰는 작업은 많이했다. 파일은 파일시트메의 디렉토리 혹은 폴더의 엔트리로 존재한다. 자바로 디렉토리(폴더)를 생성하고 삭제하는 코드를 구현해보자. 디렉토리 생성 특정 경로에 디렉토리가 없을 경우 자동으로 생성해주는 소스코드는 다음과 같다. import java.io.File; public class MakeDirectory { public static void main(String[] args) { // 생성할 디렉토리 경로 String path = "/tmp/testDir1"; File dir = new File(path); // 디렉토리가 존재하는지 체크 if (!dir.exists()) { try{ // 생성 boolean.. 2021. 4. 20.