💻 IT/📌 Java

(Java) Swing기반 채팅프로그램

GODSU 2019. 7. 31. 09:54
반응형

GUI Swing과 네트워크 소켓(Socket)을 이용해서 채팅 프로그램을 만들어보자!

 

개발하기 전에 Swing GUI, Thread, 네트워크 지식을 간략하게 알아두고 시작하면 좋을 것같다. 

 

1. Swing이란?

   먼저, GUI에 대해서 알아보자 GUI란 Graphical User Interface의 약자로서 이미지 혹은 그래픽을 이용하여 메뉴 등을

   포함하는 화면을 구성하고, 키보드 외 마우스 등의 편리한 입력 도구를 이용하여 사용자가 입력을 편리하게 하도록 작

   성하는 사용자 인터페이스이다.

   스윙은 AWT기술을 기반으로 작성된 라이브러리로 AWT와는 달리 순수하게 자바 언어로 작성되었어요. 스윙 컴포넌

   트는 경량 컴포넌트(light weight component)라고도 불리며, 운영체제에 도움을 받지 않고 구현되기 때문에 운영체

   제와 관계없이 항상 동일하게 작동하며 동일한 모양으로 그려져요.

   Swing의 주요 요소 정리

   1.1)  프레임(JFrame), 컴포넌트(JButton, JPanel, JTextArea, JTextField 등), 배치(FlowLayout, BorderLayout, GridLayout)

   

 

2. Java Network Programming 과 Socket

   - Server : 정보를 제공하는 쪽 / Client : 정보를 요청하는 쪽

     네트워크 : 서버와 클라이언트가 서로 정보를 주고 받을수 있게 통신할 수 있도록 만들어주는 연결망이 필요

   - InetAdress와 URL Class

[InetClass 예제]

   

URL 예제

   - Socket Class

[Socket Sever 예제]
[Socket Client 예제]

3. Thread

    프로세스(process)란?

    프로세스(process)란 단순히 실행 중인 프로그램(program)이라고 할 수 있습니다.

    즉, 사용자가 작성한 프로그램이 운영체제에 의해 메모리 공간을 할당받아 실행 중인 것을 말합니다.

    이러한 프로세스는 프로그램에 사용되는 데이터와 메모리 등의 자원 그리고 스레드로 구성됩니다.

 

    스레드(thread)란? 

    스레드(thread)란 프로세스(process) 내에서 실제로 작업을 수행하는 주체를 의미합니다. 

    모든 프로세스에는 한 개 이상의 스레드가 존재하여 작업을 수행합니다.

    또한, 두 개 이상의 스레드를 가지는 프로세스를 멀티스레드 프로세스(multi-threaded process)라고 합니다.

 

    자바에서 스레드를 생성하는 방법에는 다음과 같이 두 가지 방법이 있습니다.

    1. Runnable 인터페이스를 구현하는 방법

    2. Thread 클래스를 상속받는 방법

 

 

4. 채팅 프로그램

    

 

[채팅프로그램 로직]

   메인 서버(ChatServer)에서는 핸들러(ChatHandler)를 통해서 Client(ChatClient)와 통신을 하게하면된다.

   1. 메인서버(ChatServer) :  핸들러를 저장할 ArrayList를 선언하고, Socket.accept() 함수를 통해 대기한다. Client가 들어오면 리스트에 추가하며 Thread Run()함수 호출!!

   2. 핸들러(ChatHanlder) : 생성자를 통해서 소켓과 데이터 버퍼를 선언해준다. 스트림 형성!!  run 함수를 통해서 ArrayList에 저장된 Client들에게 메세지를 전달해준다.

   3. 클라이언트(ChatClient) : Swing을 이용해서 레이아웃과 컴포넌트를 지정해주며, ActionListener을 이용해 각 이벤트를 처리해준다. Service() 함수를 이용해서 IP를 입력받고 소켓을 만들어 주며, 백앤드 프로세스로 쓰레드를 돌려주며, 서버로부터 메세지를 수시로 받는다.

 

실행시 화면

 

 

5. 채팅 프로그램 코드 : https://github.com/jungsangsu/JavaStudy/tree/master/src/Chatting

반응형