본문 바로가기

자바32

[Java] Stack(스택) 사용법 및 예제 Stack(스택) 사전적으로 Stack(스택)은 '쌓다', '더미'라는 의미를 가지고 있다. 접시를 차곡차곡 쌓아 올리듯이 데이터를 쌓아올리는 형상을 생각하면 된다. Stack(스택)은 Queue(큐)와 함께 자바에서 사용되는 가장 기본적인 자료구조 중 하나다. Stack(스택)은 '마지막에 추가된 데이터가 가장 먼저 나오는' 특징을 가지고 있다. LIFO(Last In First Out) 동작이라고 한다. 함께 많이 사용되는 Queue(큐)의 경우 먼저 추가된 데이터가 먼저 나오는 FIFO(First In First Out) 동작을 갖는것과 비교된다. 일반적으로 스택에 데이터를 추가하는 동작은 'push'라고 하며, 스택에서 데이터를 빼는 동작은 'pop'이라고 한다. pop 메소드를 실행하면 가장 마.. 2021. 5. 23.
[Java] 문자열 to 정수 변환 - valuOf()와 parseInt() 차이 자바 프로그래밍을 하다보면 문자열 형태로 표현된 정수 데이터를 파싱해서 정수타입(int)으로 사용해야하는 경우가 자주 있다. 이 경우 valueOf() 메소드와 parseInt() 메소드를 사용하게 된다. 이 두 메소드의 차이점을 알아보자. int number1 = Integer.valueOf("100"); System.out.println("number1 = " + number1); int number2 = Integer.parseInt("100"); System.out.println("number2 = " + number2); "100"이라는 문자열을 정수타입(int)으로 변환하기 위해서는 위 코드처럼 Integer.valueOf() 메소드와 Integer.parseInt() 메소드를 사용하면 된다... 2021. 5. 18.
[Java] 간단한 Netty Server 예제 코드 앞서 '[Java] Netty 프레임워크 소개'에서 Netty 프레임워크에 대해서 간단하게 알아봤다. 백문이 불여일견이라고 실제로 동작하는 Netty 애플리케이션 코드를 보고 눈으로 확인하는게 더 중요할 수도 있다. 이번 포스트에서는 클라이언트의 입력을 그대로 응답으로 돌려주는 에코(Eco) 서버를 Netty 프레임워크로 구현해보겠다. 동작하는 전체 에코서버 코드는 다음과 같다. 우선 메인 클래스다. package SimpleNettyServer; import java.net.InetSocketAddress; import io.netty.bootstrap.ServerBootstrap; import io.netty.channel.Channel; import io.netty.channel.ChannelFut.. 2021. 5. 15.
[Java] 예외처리 - Throwable, Exception, Error 1. 자바 예외처리(Exception Handling) 자바 프로그램이 동작하면서 다양한 문제들을 만나게 된다. 개발자의 로직에 헛점이 생겨서 발생하는 문제도 있고, 자바 프로그램이 실행되는 JVM에서 문제가 생기는 경우, 사용자가 잘 못된 입력을 하는 경우도 있다. 자바의 예외처리(Exception Handling)은 프로그램의 사소한 문제가 시스템 전체를 망가트리지 않도록하는 안전장치다. 견고한(Robust) 소프트웨어를 작성하기 위해서는 애플리케이션이 실행되면서 만날 수 있는 이런 문제들에 대해서 적당하게 처리하는 것이 필요하다. 1.1 Throwable 클래스 자바는 Throwable 객체에 문제의 상황에 대한 설명과 문제가 발생했을 때의 상황을 저장해서 throw 구문을 통해 상위 메소드로 전달.. 2021. 5. 13.
[Java] 원격 디버깅 사용하기 (IntelliJ, Eclipse) 자바로 만들어진 프로그램은 JVM을 통해서 실행이 된다. JVM은 '원격 디버깅(Remote Debugging)'이라는 매우 편리하면서 강력한 기능을 제공한다. 원격 디버깅 기능을 이용해서 로컬 머신이 아닌 서버에서 동작하는 자바 프로그램을 IntelliJ, Eclipase 같은 IDE를 통해 원격으로 디버깅할 수 있다. 이번 포스트에서는 도커(Docker)를 이용해 컨테이너 환경에서 자바 프로그램을 구동한 다음 호스트 머신에서 원격 디버깅으로 도커 컨테이너 안쪽에서 동작하는 자바 프로그램을 원격 디버깅해보겠다. 도커가 아닌 다른 머신에서 구동하는 자바 프로그램에 대한 원격 디버깅도 크게 다르지 않을 것이다. 실행할 자바 프로그램 우선 다음 자바 프로그램을 도커 컨테이너에서 실행해보자. public cl.. 2021. 5. 5.
[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] OkHttp 커넥션 풀(Connection Pool) 기능 OkHttp 라이브러리는 '커넥션 풀(Connection Pool)' 기능을 제공한다. REST API 서버에 요청을 보낼 때, 매번 연결을 맺는 대신 커넥션 풀(Connection Pool) 기능을 이용해서 동일한 URL로의 커넥션을 풀링하여 다음번 요청때에 재사용하는 기능이다. 커넥션을 새로 빌드하는 동작은 그 하나로는 짧지만 경우에 따라서 무시할 수 없는 오버헤드로 작용할 수 있다. OkHttp 커넥션 풀링 기능 OkHttp 클라이언트 객체를 생성할 때, 기본적으로 커넥션 풀링 기능이 적용되어 있다. OkHttpClient client = new OkHttpClient(); REST API를 이용하고자 할 때, OkHttpClient 객체를 생성했다. 이 생성자의 내부를 들어가보면 Connectio.. 2021. 4. 22.