Java95 [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] 자바 디렉토리(폴더) 생성 및 삭제 예제 자바를 이용해서 파일 시스템에 접근, 파일을 열거나 생성해서 데이터를 읽고, 쓰는 작업은 많이했다. 파일은 파일시트메의 디렉토리 혹은 폴더의 엔트리로 존재한다. 자바로 디렉토리(폴더)를 생성하고 삭제하는 코드를 구현해보자. 디렉토리 생성 특정 경로에 디렉토리가 없을 경우 자동으로 생성해주는 소스코드는 다음과 같다. 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. [Java] Java Unsupported major.minor version 52.0 에러 Java 프로그램을 작성한 다음 클러스터에 배포를 할 때 가끔씩 Java Unsupported major.minor version 52.0 에러를 만나게 된다. 톰캣(Tomcat)이나 하둡 맵 리듀스(MapReduce)처럼 jar 파일로 묶어서 배포하는 경우에 쉽게 만나볼 수 있는 에러다. "Java Unsupported major.minor version 52.0"라는 메시지에서 알 수 있듯이 Java 버전이 맞지 않아서 발생하는 에러다. 정확히는 jar 파일을 생성한 빌드환경과 생성한 jar 파일을 실행하려는 환경이 다른 JDK 버전을 사용하고 있는 경우 발생한다. Java SE 8 (JDK 1.8)에서 빌드한 Jar 파일을 Java SE 7 (JDK 1.7)이 설치되어 있는 환경에서 실행하려고 하면.. 2021. 4. 1. [Java] 람다식(Lambda Expressions) 사용법 및 예제 자바8에서 '람다식(Lambda Expression)'이 지원되면서 자바는 완전히 새로운 언어처럼 보이기 시작했다. 지네릭스(Generics)가 자바을 크게 변화시킨 것처럼 람다식 역시 자바를 어마어마하게 변화시켰다. 람다식의 등장으로 자바는 객체지향 언어의 특징과 함께 함수형 언어의 특성을 갖추게 되었다. 람다식(Lambda expression) 람다식은 1930년대 알론조 처치(Alonzo Church)라는 수학자가 처음 제시한 함수의 수학적 표기방식인 '람다 대수(lambda calculus)'에 그 뿌리를 두고 있다. 람다식을 이용하면 코드가 간결해지고, 지연 연산 등을 통해서 성능 향상을 도모할 수 있다. 반면 모든 엘리먼트를 순회하는 경우에는 성능이 떨어질 수도 있고, 코드를 분석하기 어려워 .. 2021. 3. 31. 이전 1 ··· 6 7 8 9 10 11 다음