본문 바로가기

Java38

[Java] 데이터를 Thread에서 공통으로 사용하는 방법 예제 안녕하세요 이번 포스팅에서는 오늘은 자바를 사용하여 두 개의 쓰레드가 공통 데이터를 어떻게 공유하는지 보여주는 예제를 함께 살펴보려고 합니다. 이 예제의 목표는 1부터 1,500,000,000까지의 합계를 계산하는 쓰레드와, 그 결과를 출력하는 쓰레드가 어떻게 동작하고 상호 작용하는지 이해하는 것입니다. 먼저, 쓰레드는 독립적인 실행 흐름을 가진 프로그램의 한 부분입니다. 여러 쓰레드가 동시에 동작하면서 효율적으로 자원을 사용할 수 있습니다. 하지만, 이렇게 병렬 처리를 할 때 여러 쓰레드가 동일한 메모리나 데이터를 동시에 접근하면 문제가 발생할 수 있습니다. 이 문제를 해결하기 위한 방법 중 하나로 데이터를 안전하게 공유하는 방식을 사용할 것입니다. 이 예제에는 크게 세 개의 클래스가 있습니다. 이 클.. 2023. 10. 17.
[JAVA] 소켓을 활용한 간단한 에코 서버와 클라이언트 EchoClient.java, EchoServer.java를 실행하면 클라이언트와 서버가 메시지를 주고 받는 간단한 프로그램을 작성할 수 있습니다. EchoClient.java import java.io.*; import java.net.*; public class EchoClient { // 서버 주소와 포트 번호를 상수로 설정 private static final String SERVER_ADDRESS = "localhost"; private static final int SERVER_PORT = 4444; public static void main(String[] args) { // try-with-resources를 사용하여 자원을 자동으로 닫게 설정 // 소켓, 출력 스트림, 입력 스트림을 초기.. 2023. 10. 14.
[JAVA] Netty에 SSL 적용하기 안녕하세요 이번 시간에는 Netty WebSocket 서버에 SSL 을 적용해보겠습니다. Netty로 WebSocket 서버를 만드는 방법은 다음 글을 참고해주세요. 1. SSL 인증서 가져오기 2. /etc/ssl 디렉토리에 넣기 예제에서는 다음과 같이 넣었습니다. /etc/ssl/ca_bundle.crt /etc/ssl/certificate.crt /etc/ssl/private/private.key 3. 다음 명령어로 private.key 의 PKCS8 형식 파일을 만들어줍니다. 예제에서는 private_netty.key 파일을 따로 만들었습니다. openssl pkcs8 -topk8 -inform PEM -outform PEM -nocrypt -in private.key -out private_ne.. 2023. 10. 13.
[Java] Netty로 WebSocket 통신하기 안녕하세요 이번 시간에는 네트워크 애플리케이션 프레임워크인 Netty로 간단한 WebSocket 에코 서버를 만들어보겠습니다. 1. Netty 환경 세팅 Ubuntu 20.04.6 LTS에서 실행했습니다. Netty 프로젝트를 빌드하기 위해 Maven을 설치해보겠습니다. Maven 란 자바 프로젝트 빌드 자동화 도구이고 Apache 소프트웨어 재단에서 관리하고 있습니다. 다음 명령어를 실행하여 maven을 설치합니다. sudo apt update sudo apt install maven 다음 명령어를 실행해서 잘 설치 됐는지 확인할 수 있습니다. mvn -version # 잘 설치됐으면 아래와 같이 출력됩니다. # Apache Maven 3.6.3 # Maven home: /usr/share/maven .. 2023. 10. 2.
[JAVA] Swing을 이용한 스케치 기능 구현 안녕하세요 이번 게시글에서는 JAVA에서 Swing을 이용해 스케치 기능을 구현해보겠습니다. 우선 Java Swing이란 Java에서 제공하는 그래픽 사용자 인터페이스(GUI) 툴킷 중 하나입니다. 윈도우, 버튼, 체크박스, 텍스트 필드와 같은 기본적인 유저 인터페이스 요소를 만드는데 사용됩니다. 결론적으로 해당 기능 시연영상부터 보여드리겠습니다. 다음은 전체적인 코드입니다. 주석으로 코드별 설정을 달아놓았으니 참고하시길 바랍니다. import javax.swing.*; import java.awt.*; import java.awt.event.MouseEvent; import java.awt.event.MouseMotionAdapter; // 해당 클래스는 JFrame 상속받고 있음. // JFrame .. 2023. 9. 12.
[Java] awt 테트리스 모듈화 - SquareBoard 저번 글 1: https://stickode.tistory.com/822 저번 글 2: https://stickode.tistory.com/835 저번 글 3: https://stickode.tistory.com/852 저번 글 4: https://stickode.tistory.com/866 저번 글 5: https://stickode.tistory.com/875 안녕하세요. 저번 시간에 이어서, 오늘은 SquareBoard 코드에 대한 설명을 업로드하겠습니다. 주석으로 설명을 달아두었습니다. import javax.swing.*; import java.awt.*; import java.util.Hashtable; /** * 테트리스 스퀘어 보드입니다. 보드는 직사각형이며, 색상으로 구성된 격자를 포함합.. 2023. 8. 16.
[Java] awt 테트리스 모듈화 - Game 저번 글 1: https://stickode.tistory.com/822 저번 글 2: https://stickode.tistory.com/835 저번 글 3: https://stickode.tistory.com/852 저번 글 4: https://stickode.tistory.com/866 안녕하세요. 저번 시간에 이어서, 오늘은 Game 코드에 대한 설명을 업로드하겠습니다. 주석으로 설명을 달아두었습니다. import java.awt.*; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; import java.beans.PropertyChangeListener; import java.beans.PropertyChangeSupport;.. 2023. 7. 26.
[Java] Thread와 Swing으로 디지털 시계 만들기 안녕하세요! 오늘은 Java에서 Swing과 Thread를 이용해 디지털 시계를 구현해보겠습니다. 우선 Thread 와 Swing에 대해 설명하겠습니다. Thread란? 우선 예시를 들어 설명하면 한 사람이 음악을 들으며 책을 읽는 상황이라고 가정할 때 음악 듣기와 책을 읽는 것은 동시에 진행되는 별개의 작업이라고 할 수 있습니다. 이때 음악 듣기와 책 읽기를 각각 한명의 사람이 처리한다고 생각하면 쉽습니다. 자바의 스레드도 마찬가지입니다. 하나의 프로세스 안에서 여러 개의 스레드가 동시에 실행될 수 있습니다. 각 스레드는 독립적으로 작업을 수행하면서 프로세스의 자원을 공유합니다. 스레드는 동시에 처리되어야 하는 작업을 분리해 독립적으로 실행함으로써 프로그램의 호율성을 높이는 역할을 합니다. 또는 다양한.. 2023. 7. 16.
[Java] awt 테트리스 모듈화 - Configuration 저번 글 1: https://stickode.tistory.com/822 저번 글 2: https://stickode.tistory.com/835 안녕하세요. 저번 시간에 이어서, 오늘은 Configuration코드에 대한 설명을 업로드하겠습니다. 주석으로 설명을 달아두었습니다. Configuration.java import java.awt.*; import java.util.Hashtable; /** * 프로그램 구성을 나타내는 클래스입니다. 이 클래스는 구성 매개변수의 읽기를 간소화하기 위한 정적 메서드를 제공합니다. * 또한 문자열 값을 더 유용한 객체로 변환하는 몇 가지 메서드를 제공합니다. * */ public class Configuration extends Object { /** * 내부 구.. 2023. 7. 2.