목록Backend/Java (44)
elevne's Study Note

네트워크는 여러 대의 컴퓨터를 통신 회선으로 연결한 것을 말한다. 지역 네트워크는 회사, 건물, 특정 영역에 존재하는 컴퓨터를 통신 회선으로 연결한 것, 인터넷은 이러한 지역 네트워크들을 통신 회선으로 연결한 것을 말한다. 컴퓨터의 고유한 주소 역할을 IP, Internet Protocol 이 해준다. IP 주소는 네트워크 어댑터 (Lan 카드) 마다 할당되는데, 한 개의 컴퓨터에 두 개의 네트워크 어댑터가 장착되어 있다면 두 개의 IP 주소를 할당할 수 있는 것이다. 프로그램은 DNS (Domain Name System) 을 통해 연결할 컴퓨터의 IP 주소를 찾는다. 대중에게 서비스를 제공하는 대부분의 서버는 도메인 이름을 가지고, IP 주소를 등록한다. (e.g., www.naver.com : 222..

Stream 을 사용할 때 Optional, OptionalDouble, OptionalInt, OptionalLong 클래스를 사용할 수 있다. 이들은 저장하는 값의 타입만 다를 뿐 제공하는 기능은 거의 동일하다. Method Description isPresent() 값이 저장되어 있는지 여부 orElse() 값이 저장되어 있지 않을 경우 디폴트 값 지정 ifPresent() 값이 저장되어 있을 경우 Consumer 에서 처리 컬렉션의 요소는 동적으로 추가되는 경우가 많은데, 가령 컬렉션의 여러 요소들을 통해 하나의 집계값을 산출하려 할 때 컬렉션의 요소가 추가되지 않아 저장된 요소가 없을 경우 NoSuchElementException 예외가 발생할 수 있다. 이럴 때 Optional 클래스들을 사용..

보조 스트림이란다른 스트림과 연결되어 여러가지 편리한 기능을 제공해주는 스트림을 말한다. 보조스트림을 필터 스트림이라고 부르기도 하는데, 이는 보조스트림의 일부가 FilterInputStream, FilterOutputStream 의 하위클래스이기 때문이다. 보조스트림은 그 자체만으로는 입출력을 수행할 수 없다. 입력 소스와 바로 연결되는 InputStream, FileInputStream, OutputStream, Writer 등에 연결해서 입출력을 수행하게 된다. 보조스트림은 문자 변환, 입출력 성능 향상, 기본 데이터 타입 입출력, 객체 입출력 등의 기능을 제공한다. 보조스트림을 생성할 때는 자신이 연결될 스트림을 아래와 같이 생성자의 매개값으로 받게된다. 보조스트림 변수 = new 보조스트림(연결..

프로그램에서는 데이터를 외부에서 읽고 다시 외부로 출력하는 작업이 빈번하게 일어난다. Java 에서 데이터는 Stream 을 통해 입출력되므로 Stream 의 특징을 잘 알아야한다. Stream 은 단일 방향으로 연속적으로 흘러가는 것을 뜻한다. 프로그램이 데이터를 입력받을 때는 InputStream, 데이터를 보낼 때에는 OutputStream 이라고 한다. 입력스트림의 출발지는 키보드, 파일, 네트워크 상의 프로그램 등이 될 수 있고, 출력스트림의 도착지는 모니터, 파일, 네트워크 상의 프로그램이 될 수 있다. 프로그램이 네트워크 상의 다른 프로그램과 데이터 교환을 하기 위해서는 양쪽 모두 입력스트림과 출력스트림이 따로 필요하다. 기본적인 데이터 입출력 API 는 java.io 패키지에서 제공한다. ..

Stream 은 Java 8 부터 추가된 컬렉션 (+ 배열) 의 저장 요소를 하나씩 참조해서 Functional Style 로 처리할 수 있도록 해주는 반복자이다. Stream 은 Iterator 과 비슷한 역할을 하는 반복자이지만, 람다식으로 요소 처리 코드를제공하는 점과 내부 반복자를 사용하므로 병렬처리가 쉽다는 점, 중간처리와 최종처리 작업을 수행할 수 있다는 점에서 차이가 있다. java.util.Stream 패키지에서 Stream API 들을 확인해볼 수 있다. Stream 은 데이터의 필터링, 매핑, 그루핑, 정렬 등의 중간처리와 합계, 평균, 카운팅, 최대값, 최소값 등의 최종처리를 파이프라인으로 해결한다. 파이프라인은 여러 개의 스트림이 연결되어 있는 구조를 말한다. 스트림이 생성될 때 바..

애플리케이션을 개발하다 보면 다수의 객체를 저장해두고 필요할 때마다 꺼내서 사용하는 경우가 많다. 이 때 배열을 사용할 수도 있지만, 배열은 저장할 수 있는 객체의 수가 배열을 생성할 때 결정되기 때문에 불특정 다수의 객체를 저장하기에는 문제가 있다. 또, 배열을 사용했을 때의 문제점으로 객체를 삭제했을 때 해당 인덱스가 비게 된다. Java 에서는 이러한 배열 대신 Collection 프레임워크의 다양한 자료구조들을 사용해볼 수 있다. ArrayList ArrayList 는 List 의 구현클래스이다. 기본 생성자로 ArrayList 객체를 생성하면 내부에 10 개를 저장할 수 있는 초기 용량을 가지게 된다. 저장되는 객체 수가 늘어나면 용량이 자동으로 증가하지만, 처음부터 크게 잡고 생성할 수도 있다..

병렬 작업 처리가 많아지면 스레드 개수가 증가되고, 그에 따른 스레드 생성과 스케줄링으로 인해 CPU 가 바빠져 메모리 사용량이 늘어난다. 갑작스런 병렬 작업의 폭증으로 인한 스레드의 폭증을 막기 위해 ThreadPool 을 사용할 수 있다고 한다. 이는 작업처리에 사용되는 스레드를 제한된 개수만큼 정해두고 작업 Queue 에 들어오는 작업들을 하나씩 스레드가 맡아서 처리하는 것이다. Java 는 스레드풀을 생성하고 사용할 수 있도록 java.util.concurrent 패키지에서 ExecutorService 인터페이스와 Executors 클래스를 제공한다. ExecutorService executorService = Executors.newCachedThreadPool(); ExecutorService..

이번 시간에는 Daemon Thread 라는 것에 대해 알아보았다. Deamon 스레드는 주 스레드의 작업을 돕는 보조적인 역할을 수행하는 스레드이다. 보조적인 역할의 데몬 스레드는 주 스레드가 종료되면 데몬 스레드는 강제 종료된다는 점 외에는 일반 스레드와 큰 차이가 없다고 한다. 데몬 스레드의 대표적인 예로는 워드의 자동 저장, 가비지 컬렉터 등이 있다. (해당 기능들 또한 마찬가지로 워드, JVM 등이 종료되면 같이 종료된다) Java 에서 스레드를 생성하고 데몬으로 만들기 위해서는 setDaemon(true); 메서드를 사용해주면 된다. 이 때, 스레드의 start() 메서드를 호출하고 나서 setDeamon() 을 사용하면 IllegalThreadStateException 이 발생하기 뒤기에 s..