본문 바로가기

Java57

[JAVA] Callable과 Future로 비동기 작업 이해하기 비동기 프로그래밍은 현대 애플리케이션 개발에서 필수적인 기술입니다. 자바에서는 비동기 작업을 효율적으로 처리하기 위해 Callable과 Future라는 인터페이스를 제공합니다. 이 글에서는 비동기의 개념부터 Callable과 Future를 활용한 실질적인 예제까지 차근차근 설명하겠습니다.비동기란 무엇인가?비동기 작업이란 작업을 실행한 후 해당 작업이 완료될 때까지 기다리지 않고 다른 작업을 수행할 수 있는 방식을 말합니다. 이는 멀티쓰레드 환경에서 특히 유용하며, 다음과 같은 특징을 갖습니다:병렬 처리: 여러 작업을 동시에 실행하여 처리 속도를 높임.작업 대기 최소화: 작업 완료를 기다리지 않고 다른 작업을 수행 가능.효율성: 시스템 자원을 효율적으로 활용.자바에서는 이러한 비동기 작업을 구현하기 위해 .. 2025. 4. 3.
[Java] ScheduledExecutorService로 JVM 메모리 사용량 모니터링하기 안녕하세요 오늘은 JVM 의 현재 메모리 사용량을 3초 간격으로 출력하여 확인해보도록 하겠습니다.현대 소프트웨어 환경에서는 대부분 동시에 여러작업을 처리해야하는 상황이 늘 생깁니다. 예를 들어, 웹 서버가 여러 사용자의 요쳥을 동시에 처리한다거나, 채팅 앱이 백그라운드로 메시지를 계속 주고 받을 때,앱이 ui 는 유지하면서 백그라운드 작업을 해야할때 반드시 멀티 스레딩이나 비동기 프로그램이 필요합니다. 자바에서는 Thread 클래스, Runnable 인터페이스 구현을 지원하지만 이는 스레드를 직접 관리해야하며, 메모리 낭비로 이어지기 쉽습니다. 이를 보완하기 위해 오늘날 자바에는 java.util.concurrent 패키지를 제공합니다. 해당 패키지를 통해 병렬처리, 스케줄링, 스레드 풀 자동 관리,비동.. 2025. 4. 2.
[Java] Stack 구현 예제 1. Stack 구현 1.1. Stack의 개념Stack은 후입선출(LIFO, Last In First Out) 방식의 자료구조로, 마지막에 삽입된 요소가 가장 먼저 삭제됩니다. 일상적인 예로는 책 더미를 생각할 수 있습니다. 책을 하나씩 쌓을 때, 맨 위에 쌓은 책을 먼저 꺼내게 되죠. 1.2. 구현 방법배열을 사용하여 Stack을 구현할 수 있습니다. 배열을 사용하면 고정 크기의 Stack을 만들 수 있으며, Stack의 삽입(push), 삭제(pop), 확인(peek) 연산을 구현할 수 있습니다. 1.3. Stack의 기능push(value): Stack에 값을 추가.pop(): Stack에서 값을 제거하고 반환.peek(): Stack의 맨 위 값을 확인(삭제하지 않음).isEmpty(): Sta.. 2025. 3. 31.
[Java][Android] ChipGroup에 Chip 동적 추가하기 (+ 버튼) 안녕하세요,  오늘은  ChipGroup 에 +버튼을 만들고, 동적으로 Chip 을 추가하는 예제를 만들어보도록 하겠습니다.  activity_main.xml MainActivity.javapublic class MainActivity extends AppCompatActivity { private ChipGroup chipGroup; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); chipGroup = findViewById(R.id.chipGro.. 2025. 3. 30.
[JAVA] HttpURLConnection을 활용한 HTTP 통신과 REST API 이해하기 안녕하세요.이번 글에서는 자바에서 HttpURLConnection을 활용해 HTTP 통신을 구현하는 방법과, 이를 통해 자주 사용되는 REST API의 개념을 알아보겠습니다. REST API는 현대 웹 개발에서 필수적인 기술로, HttpURLConnection을 활용해 RESTful 서비스와 통신하는 기본적인 방법을 살펴볼 것입니다. 1. REST API란?REST란?REST(Representational State Transfer)는 웹의 리소스를 HTTP 프로토콜을 통해 관리하는 아키텍처 스타일입니다. REST는 클라이언트와 서버 간의 상호작용을 단순화하고, 일관된 인터페이스를 제공하는 데 중점을 둡니다.REST의 주요 특징리소스 기반:모든 데이터(사용자, 게시물 등)는 고유한 URI로 식별됩니다.예.. 2025. 3. 27.
[Java] nanoTime 사용해서 경과 시간 측정하기 안녕하세요 오늘은 nanoTime 자바 메서드를 사용하여 경과 시간을 측정하는 기능을 구현해보도록 하겠습니다. 알고리즘 성능 테스트, 타자 속도 측정 게임 등에 응용해볼 수 있습니다.   이번에 사용할 System.nanoTime() 은 자바 기본 클래스인 System 에 포함된 내장 메서드 입니다해당 메소드는 나노초(ns -> 1초 = 1,000,000,000 나노초) 단위로 경과 시간을 측정할 수 있으며 현재 시간을 제공하지는 않습니다.   1. 경과 시간 측정 (nanoTime 버전)public class NanoTimeExample { public static void main(String[] args) { long startTime = System.nanoTime(); // 시.. 2025. 3. 26.
[Java] Swing을 사용하여 간단한 계산기 만들기 Swing이란?Swing은 자바에서 GUI(그래픽 사용자 인터페이스)를 만들 수 있도록 제공하는 JFC(Java Foundation Classes) 라이브러리 중 하나입니다.다양한 버튼, 텍스트 필드, 패널, 메뉴 등의 컴포넌트를 제공하며, 크로스 플랫폼에서 동일한 UI를 구현할 수 있습니다. Swing은 언제 사용할까요?1. 간단한 데스크탑 애플리케이션 (예: 계산기, 메모장, 파일 탐색기 등)2. 내부 관리 시스템, 데이터 시각화 툴 그럼 왜 사용할까요?자바 표준 라이브러리로 포함하여 사용하여 편리합니다.Windows, macOS, Linux에서 동일한 코드로 실행 가능.  예제코드// Swing 패키지 및 이벤트 처리를 위한 패키지 임포트import javax.swing.*;import java.a.. 2025. 3. 24.
[JAVA] ExecutorService로 Thread Pool 구현하기 안녕하세요.이전 글에서 자바에서 쓰레드를 사용하는 방법에 대해 이야기했습니다. 쓰레드는 다양한 작업을 동시에 처리할 수 있도록 해주는 강력한 도구입니다.하지만 자바의 쓰레드는 JVM에서 관리되며, 실제로 운영체제의 네이티브 쓰레드와 매핑되어 실행됩니다. 이는 운영체제의 리소스를 직접적으로 사용하는 구조이기 때문에 관리와 사용에 주의가 필요합니다. 1. 쓰레드 사용 시 문제점쓰레드를 잘못 관리할 경우 다음과 같은 문제가 발생할 수 있습니다.메모리 누수생성한 쓰레드를 제대로 해제하지 않으면, JVM의 가비지 컬렉터(GC)가 쓰레드를 해제하지 못해 메모리가 계속 점유되는 문제가 발생할 수 있습니다.컨텍스트 스위칭 오버헤드컨텍스트 스위칭은 CPU가 여러 쓰레드를 전환하며 발생하는 작업으로, 이 과정에서 레지스터.. 2025. 3. 20.
[Java] 컬렉션(Collection) 기초 개념과 List, Set, Map 차이 안녕하세요 오늘은 자바의 자료구조 프레임워크인 컬렉션(Collection)의 개념과List, Set, Map 세 가지 인터페이스의 차이를 알아보겠습니다.   1. 컬렉션(Collection) 이란? 컬렉션(Collection)은 데이터를 효율적으로 저장하고 관리하는 자료구조를 제공하는 자바의 프레임워크입니다. 쉽게 말해, 여러 개의 데이터를 한 번에 다룰 수 있도록 도와주는 도구입니다. 컬렉션을 사용하면 데이터를 효율적으로 추가, 삭제, 검색할 수 있고 자료구조를 직접 구현하지 않고 편리하게 사용 가능합니다. 또한 코드 재사용성이 증가하고 유지보수가 쉬워진다는 장점이 있습니다.   2. 컬렉션 프레임워크의 주요 인터페이스1) List - 순서 유지, 중복 허용 (ArrayList, LinkedList) .. 2025. 3. 19.