Network 정리
김영한님의 IO, Network, Reflection의 강의에 대해 수강했다.
이중 중요하다고 생각하고 느꼈던 것에 대해 정리한다.
1. IO
자바에서 Input과 Output은 Stream(추상)클래스를 통해 이루어진다.
IO Stream은 Stream에 보조기를 Chaining 형식으로 연결하여 사용하는것이 일반적이다.
ex) BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); // System.in은 InputStream의 구현체이다
ex) BufferedWriter wr = new BufferedWriter(new InputStreamWriter(System.out)); // System.out은 OutputStream의 구현체이다
이는 다음과 같은 진행방식으로 이루어진다.
문자 입력 -> System.in → InputStreamReader → BufferedReader
문자열 -> System.out → OutputStreamWriter → BufferedWriter
Reader Class는 문자를 처리하기 위한 클래스이다.
Data가 Byte형식으로 들어오면, 이를 문자로 바꾸어준다.
이때, Charset을 지정해야하는데, 자바에서는 전 세계적으로 많이 사용하는 UTF-8이 Default CharSet으로 사용된다.
그러나 특정 CharSet으로 데이터가 전송되어 오거나, 전송해야 한다면 정상적으로 사용하기 위해 인코딩,디코딩을 해야한다
참고) UTF-8은 유니코드라고 부른다.
2. NetWork
네트워크는 IP와 PORT, 프로토콜 3가지에대해 알아야한다.
쉽게 설명하기위해 다음과 같이 예를들겠다.
IP : 아파트 주소,
PORT : 아파트 동
프로토콜 : 택배 방식
123.213.111.123.80
우리가 인터넷상에서 특정 웹사이트를 접속한다는 의미는 특정 쇼핑몰에서 상품을 구매하는 것과 같다.
상품을 구매할때 나의 집 주소, 상세 집주소와 대면수령, 비대면수령 등 방법을 정해야한다.
123.213.111.123 == 서울특별시 서초구 ...
80 == 2014동 3013호
TCP == 직접수령
// 내 집은 하나의 아파트 전체라고 가정한다.
IP의 경우 현재 내가 살고있는 아파트를 알려주는 주소이다.
PORT의 경우 몇동 몇호로 시켰는지 번호를 알려주는 주소이다.
프로토콜의 경우 직접 수령, 비대면 수령 등 수령방법을 나타낸다.
나의 아파트까지는 누구나 찾아올 수 있다.
그러나 내가 문을 열어놓지 않는다면 집 안으로 들어올 수는 없다.
이때 경비실에서 체크하는 것이 방화벽이며
집 현관문은 PORT의 오픈여부이다.
경비실에 허락을 받지 않았다면 아파트에 들어올 수 조차 없고,
PORT를 열지 않았다면 택배가 도착해도 받을 수 없다.
이떄 프로토콜은 TCP, UDP 두가지가 존재하는데 TCP는 직접수령, UDP는 비대면수령이라고 보면된다.
EX) UDP는 TCP에 비해 신뢰성이 낮고 유실될 수 있음
아래는 TCP의 연결에 사용되는 3-way-hand-shake, 종료에 사용되는 4-way-hand-shake이다.
3. Reflection
리플렉션이란 Java의 JVM을 활용하여 동적으로 클래스 정보를 읽어와 객체를 생성하거나 동적인 로직을 동작하는 기술을 의미한다.
이를 발전시켜 나온 기술이 어노테이션이다. // @Override, @Suppressed, @Deprecated 등
메타데이터를 이용해서 해당 클래스,메소드,필드에대한 특정 정보를 기술하고 로직을 사용할 수 있다.