본문 바로가기

전체 글

(72)
TCP / UDP OSI 7 계층은 네트워크에서 통신이 일어나는 과정을 7단계로 나눈 것을 말한다. 계층을 나눈 이유는 통신이 일어나는 과정을 단계별로 파악할 수 있기 때문이다. 흐름을 한눈에 알아보기 쉽고, 사람들이 이해하기 쉽게끔 만들어 7단계 중에 이상이 생긴다면 다른단계의 장비 및 소프트웨어를 건드리지 않고도 이상이 생긴단계만 고칠 수 있다. 네트워크 계층 중 전송계층에서 사용하는 TCP와 UDP에 대해서 공부해보자. TCP와 UDP는 OSI7계층에서 전송계층에 해당되는 프로토콜이다. 전송계층은 송신자와 수신자를 연결하는 통신 서비스를 제공하고 IP에 의해 전달되는 패킷의 오류를 검사하여 재전송 요구 제어등을 담당하는 계층이다. TCP와 UDP는 포트 번호를 이용하여 주소를 지정하는것과 데이터 오류검사를 위한 체크..
람다식(Lambda Expression) 람다식이란? 람다식(Lambda Expression)이란 함수를 하나의 식(expression)으로 표현한 것이다. 함수를 람다식으로 표현하면 메소드의 이름이 필요 없기 때문에, 람다식은 익명 함수(Anonymous Function)의 한 종류라고 볼 수 있다. 익명함수(Anonymous Function)란 함수의 이름이 없는 함수로, 익명함수들은 모두 일급 객체이다. 일급 객체인 함수는 변수처럼 사용가능하며 매개 변수로 전달이 가능하는 등의 특징을 가지고 있다. 1급 객체란 다음과 같은 것들이 가능한 객체를 의미한다. 변수나 데이터 구조 안에 담을 수 있다. 파라미터로 전달 할 수 있다. 반환값으로 사용할 수 있다. 할당에 사용된 이름과 무관하게 고유한 구별이 가능하다. // 람다 방식 (매개변수, ...
Stream 스트림(Stream)이란? 자바 8에서 추가한 스트림(Streams)은 람다를 활용할 수 있는 기술 중 하나이다. 자바8 이전 방식이라면 for문에서 if조건으로 필터링하고 요소를 하나씩 꺼내어 다루는 방법이였다. 간단한 경우라면 상관없지만 로직이 복잡해질수록 코드의 양이 많아져 여러 로직이 섞이게 되고, 메소드를 나눌 경우 루프를 여러 번 도는 경우가 발생한다. 스트림은 배열 또는 컬렉션 인스턴스에 함수 여러 개를 조합해서 원하는 결과를 필터링된 결과를 얻을 수 있다. 스트림의 특징 원본의 데이터를 변경하지 않는다. Stream API는 원본의 데이터를 조회하여 원본의 데이터가 아닌 별도의 요소들로 Stream을 생성한다. 그렇기 때문에 원본의 데이터로부터 읽기만 할 뿐이며, 정렬이나 필터링 등의 작업..
Serialize(직렬화) Serialize(직렬화)란? 말그대로 객체를 직렬화하여 전송 가능한 형태로 만드는 것을 의미한다. 객체의 상태를 바이트 스트림으로 변환하는데 사용되는 프로세스로, 디스크 / 파일로 유지되거나 네트워크 통신을 통해 실행중인 다른 Java 가상머신으로 전송될 수 있다. 이것은 주로 객체들을 통째로 파일로 저장하거나 전송하고 싶을 때 주로 사용된다. 직렬화는 생성한 클래스를 Serializable 인터페이스를 구현하는 클래스로 만듬으로써 가능하다. 역직렬화(Deserialize) 바이트 스트림을 다시 객체형태로 변환하는 작업을 말한다. 생성된 바이트는 플랫폼에 독립적이며 한 플랫폼에서 직렬화된 객체는 다른 플랫폼에서 역직렬화를 통해 데이터를 받아올 수 있다. serialVersionUID 객체의 해시코드로 ..
Java 입출력 (InputStream/OutputStream) Inputstream, OutputStream을 공부하기 전 Stream에 대해서 먼저 알아보자 Stream 스트림은 '데이터의 흐름'이다. 배열 또는 컬렉션 인스턴스에 함수 여러개를 조합해서 원하는 결과를 필터링하고 가공된 결과를 얻을 수 있다. 데이터 입출력 시 모든 데이터를 형태와 관계없이 일련된 흐름으로 전송하는 것이 스트림 입출력 모델의 기본 개념이다. 특징 스트림은 FIFO 구조이다. FIFO(First In First Out) 구조란, 먼저 들어간 것이 먼저 나오는 형태로 스트림의 데이터는 순차적으로 흘러가며 순차적 접근 밖에 허용되지 않는다. 스트림은 단방향이다. 그렇기 때문에 자바에서 스트림을 사용하는 기능은 읽기와 쓰기가 동시에 이루어지지 않는다. 따라서 읽기 쓰기가 모두 필요하다면 읽..
Hash 나는 Hash를 생각하면 항상 떠오르는 단어가 있다. 바로 해시포테이토!! Hash의 뜻은 으깨다인데 해시포테이토도 생각해보면 으깬감자를 양념해서 뭉쳐놓은 것이다. 컴퓨터쪽으로 생각해보면 원본데이터를 으깨서 일정한 크기의 비트나열로 만든 것이 된다. 잘 이해하기 힘들었던 Hash의 정의를 위와같이 풀어서보면 좀 쉽게 이해할 수있을 거 같아서 적어봤다. Hash 단반향 암호화기법으로 해시함수를 이용해서 고정된 길이의 암호화된 문자열로 바꾸는 것을 의미한다. 원본데이터의 수는 무한대이며 어떤 데이터든 상관이 없다.(정수, 실수, 문자, 문자열 뭐든지!) 매핑전 원래 데이터의 값을 키(key), 매핑 후 데이터의 값을 해시값(Hash Value) 또는 해시코드 라고 하며, 키(key)와 값(value)으로 매..
1장 오브젝트와 의존관계 토비의 스프링 3.1을 읽으며 정리를 해보려한다. 스프링은 자바를 기반으로 한 기술이며 스프링이 자바에서 가장 중요하게 가치를 두는 것은 바로 객체지향프로그래밍이 가능한 언어라는 점이다. 스프링에서 가장 관심을 두는 대상은 오브젝트이다. 토비의 스프링 1장에서는 스프링에 대한 것보다도 스프링이 관심을 갖는 대상인 오브젝트의 설계, 구현, 동작원리에 대해 더 자세히 나와있다. 초난감 DAO DAO Data Access Object의 줄임말로 DB를 사용해 데이터를 조회하거나 조작하는 기능을 전담하도록 만든 오브젝트를 말한다. 자바빈 다음과 같은 두 가지 관례를 따라 만들어진 오브젝트를 말한다. 간단히 빈이라고 부르기도 한다. 디폴트 생성자 : 자바빈은 파라미터가 없는 디폴트 생성자를 갖고 있어야 한다. 툴..
22장 자바 컬렉션 part1 자바에서 컬렉션은 목록성 데이터를 처리하는 자료구조를 통칭한다. 자료구조 영어로 "Data Structure"라고한다. 다시 말해서, 어떤 정보를 담는 것을 의미하는데, 하나의 데이터가 아닌 여러 데이터를 담을 때 사용한다. (ex. 배열) 순서가 있는 목록(List)형 순서가 중요하지 않은 셋(set)형 먼저 들어온 것이 먼저 나가는 큐(Queue)형 키-값으로 저장되는 맵(Map)형 "List", "Set", "Queue"는 컬렉션이라는 인터페이스를 구현하고있다. 이 Collection인터페이스는 java.util패키지에 선언되어있으며, 여러개의 객체를 하나의 객처에 담아 처리할 때 공통적으로 사용되는 여러 메소드들을 선언해 놓았다. 이 목록에서 유일하게 "Map"만이 컬렉션과 관련없는 별도의 인터페..