본문 바로가기

언어

(93)
스트림 ※ 스트림이란? Java 8부터는 컬렉션 및 배열의 요소를 반복 처리하기 위해 for문이나 Iterator(반복자) 대신 스트림(Stream)을 사용할 수 있다. 스트림 요소 처리 : 반복문 , 입출력 스트림과는 다름 package ch17.sec01.exam01; import java.util.HashSet; import java.util.Iterator; import java.util.Set; import java.util.stream.Stream; public class StreamExample { public static void main(String[] args) { //Set 컬렉션 생성 Set set = new HashSet(); set.add("홍길동"); set.add("신용권");..
네트워크 예제 4 package ch19.sec04; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.SocketAddress; import java.util.Scanner; public class NewsServer { private static DatagramSocket datagramSocket = null; public static void main(String[] args) throws Exception { System.out.println("--------------------------------------------------------------------"); System.out.println("서버를 종료하려..
서버 멀티 스레드 ※ 클라이언트 별 메인에 의해 서버사이드에 소켓 만들어지고, 새로운 스레드 시작 각각 스레드는 소켓과 연결된 스트림을 통해 데이터 주고받는 구조 초록색 새로운 스레드가 할 일 → 메인스레드 1개 새로운 스레드 3개 생성되서 서버에는 총 4개의 스레드 package com.my.tcp.server; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.EOFException; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.BindException; import java.net.InetA..
네트워크 예제 2 package com.my.tcp.server; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.EOFException; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.BindException; import java.net.ServerSocket; import java.net.Socket; public class ServerTest { public static void main(String[] args) { int port = 5432; // 포트번호 정하기, 0~1024는 예약..
네트워크 예제 1 SocketException : 접속은 됐었는데 그 이후에 소켓이 망가진 것 ConnectException : 아예 접속이 안됨 서버의 소켓 망가져서 클라이언트 소켓도 망가진것을 확인할 수 있음
네트워크 ※ 네트워크(network)는 여러 컴퓨터들을 통신 회선으로 연결한 것 LAN(Local Area Network)은 가정, 회사, 건물, 특정 영역에 존재하는 컴퓨터를 연결한 것 WAN(Wide Area Network)은 LAN을 연결한 것. WAN이 우리가 흔히 말하는 인터넷(Internet) ※ 네트워크에서 유무선으로 컴퓨터가 연결되어 있다면 실제로 데이터를 주고 받는 행위는 프로그램들이 한다. 서비스를 제공하는 프로그램을 일반적으로 서버(server)라고 부르고, 서비스를 요청하는 프로그램을 클라이언트(client)라고 부른다. 서버는 서비스를 하는쪽, 클라이언트는 서비스를 요구하는 쪽 ※ IP(Internet Protocol) 주소 건물주소, Port 건물에 들어가있는 각 사무실 1호 2호 3호 ..
스레드 안전 종료 스레드를 강제 종료시키기 위해 Thread는 stop() 메소드를 제공하고 있으나 이 메소드는 deprecated(더 이상 사용하지 않음) 되었다. stop메서드 사용 권장 X, 스레드를 안전하게 종료하는 방법은 사용하던 리소스들을 정리하고 run() 메소드를 빨리 종료하는 것이다. 아래 예제는 메인 스레드에서 3초 후에 stop 필드값을 true로 설정해서 PrintThread를 종료한다. package ch14.sec07.exam01; public class PrintThread extends Thread { private boolean stop; public void setStop(boolean stop) { this.stop = stop; } @Override public void run() { ..
스레드 동기화 멀티 스레드는 하나의 객체를 공유해서 작업할 수도 있다. 이 경우, 다른 스레드에 의해 객체 내부 데이터가 쉽게 변경될 수 있기 때문에 의도했던 것과는 다른 결과가 나올 수 있다. ↓ : 시간의 흐름 시간의 흐름상 그림은 50이 출력, 내가 의도한 것과 다른 결과가 나올 수 있다 User1Thread는 Calculator 객체의 memory 필드에 100을 먼저 저장하고 2초간 일시 정지 상태가 된다. 그동안 User2Thread가 memory 필드값을 50으로 변경한다. 2초가 지나 User1Thread가 다시 실행상태가 되어 memory 필드의 값을 출력하면 User2Thread가 저장한 50이 나온다. User1Thread에 저장된 데이터가 날아가버림. 스레드가 사용 중인 객체를 다른 스레드가 변경..