본문 바로가기

언어공부/Java

(83)
자바 - 스트림의 연산, 스트림의 최종 연산 forEach() 자바 - 스트림의 연산, forEach()에 대해서 알아보자. 스트림의 연산 스트림이 제공하는 다양한 연산을 이용하면 복잡한 작업들을 간단히 처리할 수 있다. 스트림에 정의된 메소드 중에서 데이터 소스를 다루는 작업을 수행하는 것을 연산(operation)이라고 한다. 스트림이 제공하는 연산은 중간 연산과 최종 연산으로 분류할 수 있는데, 중간 연산은 연산결과를 스트림으로 반환하기 때문에 중간 연산을 연속해서 연결할 수 있다. 반면에 최종 연산은 스트림의 요소를 소모하면서 연산을 수행하므로 단 한번만 연산이 가능하다. 중간 연산 : 연산 결과가 스트림인 연산. 스트림에 연속해서 중간 연산할 수 있음 최종 연산 : 연산 결과가 스트림이 아닌 연산. 스트림의 요소를 소모하므로 단 한번만 가능 stream.d..
자바 - 스트림(stream), 스트림의 특징 자바 - 스트림(stream), 스트림의 연산, forEach()에 대해서 알아보자. 스트림(stream) 컬렉션이나 배열에 데이터를 담고 원하는 결과를 얻기위해 for문과 Iterator를 이용해서 코드를 작성하는데 이러한 코드는 길고 알아보기 어려워 재사용성이 떨어진다. 또 다른 문제는 데이터 소스마다 다른 방식으로 다뤄야 한다. Collection이나 Iterator와 같은 인터페이스를 이용해서 컬렉션을 다루는 방식을 표준화하긴 했지만, 각 컬렉션 클래스에는 같은 기능의 메소드들이 중복해서 정의되어 있다. 예를 들어 List를 정렬할 때는 Collections.sort()를 사용해야 하고, 배열을 정렬할 때는 Arrays.sort()를 사용해야한다. 이러한 문제점들을 해결하기 위해서 만든 것이 '스..
자바 - 멀티 스레드를 이용한 에코 서버 & 클라이언트 작성 자바 - 멀티 스레드를 이용한 에코 서버 & 클라이언트 작성에 대해서 알아보자 멀티 스레드를 이용한 에코 서버 & 클라이언트 스레드는 main스레드와 EchoServerThread 스레드로 나뉘게 된다. main 스레드: 클라이언트의 접속 요청을 기다리는 스레드 EchoServerThread 스레드 : 클라이언트와 연결된 소켓 객체로부터 io를 얻어 데이터 송수신을 하는 스레드 에코서버의 메인스레드는 accept()로 대기하고 있다가 클라이언트가 접속하게 되면 accept하면서 socket객체를 반환한다. 반환한 소켓을 EchoServerThread의 생성자로 넘겨주면서 EchoServerThread 객체를 생성하고 에코 서버의 메인 스레드는 다시 accept()로 대기하고 있는다. 여기서 생성된 Ech..
자바 - TCP를 이용한 에코 서버 & 클라이언트 작성 자바 - TCP를 이용한 에코 서버&클라이언트 작성에 대해서 알아보자 TCP를 이용한 에코 서버 & 클라이언트 1. 서버 측의 ServerSocket이 먼저 특정 포트 번호를 열고 대기하고 있는다. 2. 클라이언트 측 Socket 클래스가 생성할 때 서버 측 IP주소와 지정한 포트 번호를 지정하면 3. 서버 측 프로그램에서는 대기 중인 ServerSocket의 accept 메소드가 접속을 요청한 클라이언트 측 소켓 객체를 반환한다. 서버 측 프로그램에서 이렇게 반환된 Socket 객체로 클라이언트 측의 Socket객체와 통신을 한다. ServerSocket 클래스의 주요 메소드 ServerSocket(int port) : 클라이언트 요청을 받아들일 포트번호를 갖고 ServerSocket 객체 생성 Soc..
자바 - TCP 소켓 프로그래밍, Socket과 ServerSocket 자바 - TCP 소켓 프로그래밍, Socket과 ServerSocket에 대해서 알아보자 TCP 소켓 프로그래밍 앞서 살펴본 것과 같이 TCP소켓 프로그래밍은 클라이언트와 서버간의 일대일 통신이다. 먼저 서버 프로그램이 실행되어 클라이언트 프로그램의 연결요청을 기다리고 있어야한다. 서버프로그램과 클라이언트 프로그램간의 통신과정을 단계별로 보면 아래와 같다. 서버 프로그램에서는 서버소켓을 사용해서 서버 컴퓨터의 특정 포트에서 클라이언트의 연결요청을 처리할 준비를 한다. 클라이언트 프로그램은 접속할 서버의 IP주소와 포트 정보를 가지고 소켓을 생성해서 서버에 연결을 요청한다. 서버소켓은 클라이언트의 연결요청을 받으면 서버에 새로운 소켓을 생성해서 클라이언트의 소켓과 연결되도록 한다. 이제 클라이언트의 소켓과..
자바 - 소켓(socket) 프로그래밍, TCP와 UDP 자바 - 소켓(socket) 프로그래밍, TCP와 UDP에 대해서 알아보자 소켓(socket) 프로그래밍 소켓 프로그래밍은 소켓을 이용한 통신 프로그래밍을 뜻한다. 소켓(socket)이란 프로세스 간의 통신에 사용되는 양쪽 끝단(endpoint)을 의미한다. 프로세스간의 통신을 위해서는 그 무언가가 필요한데 그게 바로 소켓이다. 자바에서는 java.net패키지를 통해서 소켓 프로그래밍을 지원하는데, 소켓통신에 사용되는 프로토콜에 따라 다른 종류의 소켓을 구현하여 제공한다. TCP와 UDP TCP/IP 프로토콜은 이기종 시스템간의 통신을 위한 표준 프로토콜로 프로토콜의 집합이다. TCP와 UDP모두 TCP/IP프로토콜(TCP/IP protocol suites)에 포함되어 있으며, OSI 7계층의 전송계층(..
자바 - InetAddress 클래스와 URL(Uniform Resource Locator) 자바 - InetAddress 클래스에 대해서 알아보자. InetAddress 클래스 자바에서 IP주소를 다루기 위한 클래스로 InetAddress를 제공하며 아래와 같은 메소드가 정의되어 있다. byte[] getAddress() : IP주소를 byte배열로 반환한다. static InetAddress[] getAllByName(String host) : 도메인명(host)에 지정된 모든 호스트의 IP주소를 배열에 담아 반환한다. static InetAddress getByAddress(byte[] addr) : byte배열을 통해 IP주소를 얻는다. static InetAddress getByName(String host) : FQND(Fully Qualified Domain Name)을 반환한다. ..
자바 - IP주소(IP Address), 네트워크 주소, 호스트 주소 자바 - IP주소(IP Address), 네트워크 주소, 호스트 주소에 대해서 알아보자 IP주소(IP Address) IP주소는 컴퓨터(호스트, host)를 구별하는데 사용되는 고유한 값으로 인터넷에 연결된 모든 컴퓨터는 IP주소를 갖는다. IP주소는 4byte(32bit)의 정수로 구성되어 있으며, 4개의 정수가 마침표를 구분자로 'a.b.c.d'와 같은 형식으로 표현된다. 여기서 a, b, c, d는 부호없는 byte값, 즉 0~255사이의 정수이다. (ex. 192.168.10.100) IP주소는 다시 네트워크 주소와 호스트 주소로 나눌 수 있는데, 32bit(4 byte)의 IP주소 중에서 네트워크 주소와 호스트 주소가 각각 몇 bit를 차지하는 지는 네트워크를 어떻게 구성하는 가에 따라 달라진다..