공부한 기록 110

Java - 스트림 Stream

스트림 Stream 스트림은 사전적 의미로 '흐르다'라는 의미를 가진다. 프로그래밍 분야에서는 이는 '데이터의 흐름'을 일컫는다. 스트림에서는 스트림 데이터와 스트림 연산의 개념을 모두 포함한다.  JDK 8에서 새롭게 추가된 기능이라고 하며, 데이터 집합체를 반복적으로 처리할 때 사용한다. 가장 중요한 점은 데이터 소스가 무엇이든 같은 방식으로 다룰 수 있다는 것이다. 컬렉션이나 배열 뿐만 아니라 파일의 데이터도 같은 방식으로 다룰 수 있다. 스트림은 데이터를 읽기만 한다. 따라서 데이터소스를 변경하거나 하지 않는다.  컬렉션과 달리 일회용이며, 일시적인 저장공간을 필요로 하지 않는다. 컬렉션이 재사용이 가능하다. 스트림은 내부반복 Internal iteration으로 작업을 처리한..

Java - 컬렉션 프레임워크 Collection Framework

컬렉션 동일 객체를 여러 개 저장하고 조작할 때가 자주 있다. 요소를 하나 추가한다고 했을 때 배열은 고정된 크기이므로 새로운 크기의 배열을 생성하고 다시 요소를 순서대로 집어넣는 과정이 필요하다. 그런데 이러한 과정은 성능이 좋지 않다. 컬렉션이란, 데이터를 한 곳에 모아서 편하게 저장 및 관리하는 가변 크기의 객체 컨테이너이다. 동일하거나 유사한 객체 집단을 저장 및 조작하기 위한 코드가 필요했기 때문에 생겨났다. 컬렉션 프레임워크는 이러한 객체를 모아 효율적으로 관리할 수 있도록 해준다.   List, Queue, Set 차이는 다음과 같다.  첨언하자면, Map에서는 반복자가 제공되지 않는다.   여러 컬렉션 인터페이스List 컬렉션위의 설명처럼 객체 순서가 있..

Java - 람다식과 함수형 인터페이스(Predicate, Consumer, Supplier, Function, Operator)

함수형 프로그래밍 먼저 프로그래밍 패러다임에 대한 분류를 보자. 명령형 프로그래밍 : 무엇을 어떻게 하라고 지시함. 선언적 프로그래밍 : 무엇을 하라고만 지시함. 어떻게 하라고 지시하진 않음. 보이다시피 선언적 프로그래밍은 "해야 할 일"에 집중한다. 따라서 ‘무엇을 어떻게 해야할지’ 일일이 명령할 필요가 없고, ‘무엇을’ 하라고만 지시하면 된다. 즉, 짧고 편하게 무언가를 할 수 있다는 것이다. 각 패러다임으로 샌드위치를 만든다고 했을 때 예를 들면 다음과 같다. 명령형 프로그래밍 - 샌드위치 재료를 하나하나 언급하며 이를 만들어 달라고 한다. 선언적 프로그래밍 - 각각 정해진대로 샌드위치를 만들어 달라고 한다. 이런 선언적 프로그래밍 내에 함수형 프로그래밍이 있고, 이는 명령문을 일일이 읽어들이는 것..

Java - 인터페이스와 특수 클래스(추상 클래스)

Java Java와 Java에 대한 특징(컴파일러, JVM의 인터프리팅) 같은 자세한 정보는 시중의 책이나 타 블로그 글에 자세히 나와있으니 언급하지 않고, 여기서는 고급 Java에 대해 공부한 내용만 다룰 계획이다.  추상 클래스 추상 클래스는 상속계층에서 자식 멤버(필드, 메소드)의 이름을 통일하기 위해 사용한다.자체적으로 객체를 생성할 수 없다.추상 클래스에는 아예 없거나 하나 이상 있는 추상 메소드가 포함된다. 이 추상 메소드는 ‘무엇을 할지’ 선언하지, ‘어떻게 할지’ 선언하지는 않는다.추상 클래스의 기본적인 예제를 보자.abstract class 클래스 이름{ //필드 ...int a, b; //생성자 ... a(){} //메소드 ...일반덕으로 하나 이상의 ..

REST AP란?

개요 나는 작년 12월 중순, 프로젝트를 진행하기 전까지 기능 구현과 서버 구축에 대해서 공부했다. 그런데 배우는 것까지는 좋았다. 그러나 배운 것을 '왜' 써야 하는지와 이것이 '무엇'인지에 대해 알지 못했다. 그렇기에 이번에는 내가 느낀 의문 중 하나인 REST API에 대해 간단히 알아보고자 한다. REST? API? 먼저 API에 대해서 정리해보자. API (Application Programming Interface) 프로그램을 작성하기 위한 일련의 부프로그램, 프로토콜 등을 정의하여 상호 작용을 하기위한 인터페이스를 말한다. 예를 들어 보자. 자신이 앱을 하나 만들었다. 이 앱은 날씨를 알려주는 서비스를 제공한다. 그런데 날씨에 대한 정보는 어디에서 받아올까? 현재로선, 스마트폰에 기상청에서 ..

Google Cloud Storage + Spring boot - 이미지 파일

팀 프로젝트에서 메인 기능 내에 이미지 처리를 포함하려고 했다. 사용자의 설문 조사 정보를 받아서 그에 맞는 식단을 이미지와 함께 제공한다. 필자는 이번에 진행하는 프로젝트가 첫경험이기 때문에 하나하나 배워야 했다. 가장 처음 떠오른 의문은 이렇다. 이미지를 어디에 저장할 것인가? 다행이 이 의문에 대한 답은 다음 글에 잘 나와 있다. https://hs-archive.tistory.com/42 이미지는 어디에 저장해야 할까 웹 서비스를 만들다 보면 이미지를 저장해야 할 때가 오는데 이미지는 어디에 저장해야 될까요? 얻어갈 지식 이미지 저장은 어디에? 이미지 저장 웹 서비스를 만들다 보면 이미지를 저장해야 될 hs-archive.tistory.com 글의 내용을 요약하면 이렇다. 파일 시스템에 저장 이미..

네트워크 프로그래밍

네트워크 network 네트워크란? 서로 데이터를 주고 받을 수 있는 컴퓨터 및 장치들의 집합이다. 네트워크 내에서 통신의 주체가 되는 장비를 ‘노드(node)’라고 한다. 노드는 컴퓨터, 프린터, 라우터, 브릿지, 게이트웨이와 같은 네트워크 장비이기도 하다. 노드 중에서 일반적인 컴퓨터를 호스트라고 부른다. 네트워크 주소 network address 모든 네트워크 노드(장비)들은 각각의 고유한 네트워크 주소를 갖고 있다. Java 프로그래밍에서 네트워크 주소 네트워크 주소는 바이트 목록(byte[])이다. Java의 기본 숫자 타입(int, long, float)은 네트워크 주소를 저장하기에 적당하지 않다. Java의 int 타입 변수는 4바이트이지만 바이트의 순서는 big-endian이기 때문이다. ..

네트워크(11) - 전송층

전송층은 네트워크층과 응용계층 사이에 위치해 있다. 이는 네트워크층으로부터 서비스를 제공받고 응용계층에게 서비스를 제공할 의무가 있다. 전송층 서비스 전송층은 다음과 같은 서비스를 제공한다. 프로세스 대 프로세스 통신 제공 전송층 서비스를 사용하는 실행중인 프로그램이다. 메시지를 적절한 프로세스에 전달할 책임을 갖는다. 포트번호 프로세스끼리는 클라이언트/서버로 통신한다. 프로세스 통신을 위해서는 로컬호스트, 로컬프로세스, 원격호스트, 원격프로세스가 필요하다. 전송층은 프로세스 통신에서 포트번호의 역할을 한다. 로컬호스트와 원격호스트는 IP주소를 사용하고 프로세스는 포트번호를 사용한다. 소켓 주소 : 각 종단점을 연결하기 위해 필요한 주소이다. IP주소 + 포트 번호를 합해서 만든다. 흐름제어 단어 그대로..

네트워크(10) - 인터넷 제어 메시지 프로토콜 ICMP

이전에 IP 프로토콜에서는 문제점이 있었다. 신뢰성이 없고 비연결형 데이터그램을 전달하고, 최선의 노력만 하며, 오류 보고 및 수정 기능과 오류제어와 해결 매커니즘이 없다. 또한 라우터나 다른 호스트가 동작하고 있는지 알 필요가 있다. 이 모든 문제를 보완하기 위해 설계된 것이 ICMP다. ICMP의 메세지는 두 가지 유형으로 나뉜다. 오류 보고 메시지 : 라우터나 호스트가 IP패킷을 처리하는 중에 발견되는 문제를 보고한다. 질의 메시지 : 호스트나 네트워크 관리자가 다른 라우터나 호스트로부터 특정 정보를 획득할 때 사용한다. 8바이트 헤더와 가변 길이의 데이터 부분을 가지고 있다. 코드 code 필드는 메시지의 유형의 이유를 지정한다. 헤더의 나머지 부분은 각 메시지 별로 다르다. 데이터 부분은 오류와..

네트워크(9) - 인터넷 프로토콜 IP

IP는 TCP/IP 프로토콜이 사용하는 전송 메커니즘으로, 신뢰성이 없고 최선의 노력으로 전달 서비스를 제공한다. 이 말인 즉슨, 데이터 전달에 최선을 다하기는 하나 오류가 생기거나 폐기되는 것에 대해 책임을 지지 않는다는 의미다. 데이터 그램 방식의 패킷 교환망을 위해 설계된 비연결형 프로토콜이기도 하다. 네트워크층에서 경로설정, 주소지정 등의 역할을 한다. 데이터그램 IP계층의 패킷을 의미한다. 길이는 가변적이며, 헤더와 데이터 부분으로 구성되었다. 헤더는 20~60바이트이며, 경로지정과 전달에 필요한 정보를 포함하고 있다. TCP/IP에서는 4바이트 단위로 표시한다. 헤더 내 필드는 다음과 같다. 버전 VER : 4비트로 구성되었으며, IP의 버전을 표시 헤더 길이 HLEN : 4비트로 구성, 데이..

728x90
반응형