HTTP는 Connectionless, Stateless 하다는 특징이 있습니다. Connectionless는 클라이언트가 요청을 한 후 응답을 받으면 연결을 끊어버린다. Stateless는 클라이언트의 상태 정보를 가지지 않는다. 클라이언트와 첫 번째 통신에서 데이터를 주고받았다 해도, 다음에 이전 데이터를 유지하지 않는다. 우리가 페...
[Java] 람다(Lambda) 표현식과 스트림(Stream)
Java 8부터 추가된 람다와 스트림에 대해서 알아보겠습니다. 람다 표현식(Lambda expression) 익명 함수 모든 메서드는 객체를 생성해야만 메서드를 호출할 수 있는데 이 람다식을 사용해서 메서드의 역할을 할 수 있다. 람다식으로 인해 메서드를 변수처럼 다룰 수 있게 되었다. ...
[Java] 싱글톤 패턴(Sigleton Pattern)
싱글톤 패턴(Singleton Pattern)이란? 객체의 인스턴스가 오직 1개만 생성되는 패턴입니다. 싱글톤 패턴은 생성 패턴(Creational Pattern) 중 하나입니다. 생성 패턴은 인스턴스를 만드는 절차를 추상화하는 패턴입니다. 객체를 생성, 합성하는 방법이나 객체의 표현 방법을 시스템과 분리해줍니다. 개발을 할 때 단 하나의...
[Web] 일급 함수(First-class function)
일급 함수란? 일급 함수(First-class function)는 함수를 일급 시민(First-class citizens)으로 취급한다는 것입니다. 프로그래밍 언어에서 일급 함수를 가질 때, 함수들이 변수처럼 다루어질 수 있습니다. (일급 객체는 객체를 변수처럼 다룰 수 있습니다.) 이 때 일급 시민의 조건은 아래와 같습니다. 변...
[Java] TCP/IP 프로토콜과 전송계층 프로토콜 비교(TCP, UDP)
TCP/IP 프로토콜은 Ethernet, IP, TCP, HTTP 등의 개념을 포함하고 있습니다. 통신모델 최초의 개념으로 OSI 모델부터 시작하였습니다. OSI 모델 데이터를 처음으로 전송하는 호스트는 응용 계층부터 물리 계층까지 데이터를 캡슐화합니다. 그리고 물리 계층에서는 통신 회선을 통해 이웃하는 네트워크 장치에게 전달합니다. ...
[Java] HashMap은 어떻게 동작할까?
HashMap에 객체가 들어갔을 때 서로 다른 키로 저장되고, get()을 통해 값을 가져오는 내부적인 과정을 알아보려고 한다. 이 글은 Java 7, Java 8 기준이다. Java에서는 Map 인터페이스를 구현한 클래스로 HashMap과 HashTable이 있고 제공하는 기능이 같다. HashMap과 HashTable을 정의한다면 ‘키에 대...
[Java] Thread-Safe
스레드는 프로세스의 하위 개념으로써 프로세스에 할당된 자원을 공유한다. 프로그램을 스레드로 분리하여 실행하면 프로세스 내의 자원을 공유하기 때문에 프로세스에 비해 자원 할당 비용이 적게들고 Context switch 비용도 적게 든다. 하지만 자원을 공유하기 때문에 동기화 문제가 발생할 수 있다. Thread-safe 란? 멀티 스레드 프로그...
[Java] 제네릭 타입 소거
Generic(제네릭)이란 클래스나 메소드에서 사용할 내부 데이터 타입을 컴파일 시 미리 지정하는 방법입니다. 자세한설명 그래서 컴파일 타임에 타입 체크를 하기 때문에 런타임에서 ClassCastException과 같은 UncheckedException을 보장 받을 수 있다는 장점이 있습니다. 만약 제네릭 클래스를 로타입(Raw Type)으로 타...
[Java] 네트워크 프로그래밍
자바로 TCP 통신을 할 경우 자바에서 제공하는 API를 사용하면 된다. Socket 클래스 자바에서 TCP 통신을 수행할 때 사용하는 클래스이다. 데이터를 보내는 쪽(보통 클라이언트)에서 객체를 생성하여 사용한다. 데이터를 받는 쪽(보통 서버)에서 클라이언트 요청을 받으면, 요청에 대한 Socket 객체를 생성하여 처리한다. 👉 원...
[Java] NIO
NIO (New IO) JDK 1.4부터 속도 때문에 생겼다. 지금까지 사용한 스트림Stream을 사용하지 않고, 채널Channel과 버퍼Buffer를 사용한다. 입력받거나 출력해야 할 데이터를 항상 Buffer에 저장한다. 이를 채널이 관장하는 방식으로 진행된다. 파일 쓰기 public void writeFile(String fileName,...