[Scala] 1. 스칼라 소개
·
Java
0. 시작하면서 개인적으로 업무를 하면서, Apache Spark를 많이 사용하는 입장에서 Scala 언어에 대해서는 꼭 필요한 내용이 될 것이라 생각됩니다. 물론 Java 나 Python 으로도 Spark를 실행할 수 있지만, 기본적으로 Scala 를 기반으로 하였고, Java 와 같이 JVM을 활용하기 때문에 기존에 자바를 공부하시던 분들에게도 조금 더 익숙하게 다가오지 않을까 합니다. 이번 주제인 Scala 와 관련해서는 아래 책 2권을 참고하여 포스트를 작성할 예정이며, 좀 더 궁금하신 분들은 책에 대한 링크를 남겨 둘테니 참고하시면 좋겠습니다. [프로그래밍 인 스칼라 4판]https://product.kyobobook.co.kr/detail/S000001804990 Programming in S..
[Java Design Pattern] 42. Singleton
·
Java
1. 디자인 패턴이란?프로그래밍에서 디자인 패턴이란, 자주 사용하는 설계 패턴을 정형화해서 이를 유형별로 가장 최적의 방법으로 개발하도록 정해둔 설계를 의미한다. 여기서의 패턴패턴이라 함은 각기 다른 소프트웨어 모듈이나 기능을 가진 다양한 응용 소프트웨어 시스템들을 개발할 때도 서로 간에 공통되는 문제가 있으며, 이를 처리하는 해결책 간의 유사점이라고 할 수 있다. 때문에 알고리즘과 유사할 수 있지만, 명확하게 정답이 있는 것이 아니며, 사용되는 프로젝트별 상황에 맞게 적용할 수 있다. 1.1 디자인 패턴 구조디자인 패턴은 크게 컨텍스트(Context), 문제(Problem), 해결(Solution)이라는 3가지 요소를 갖는다.① 컨텍스트 (Context)문제가 발생하는 여러 상황을 기술한 것으로 패턴이..
[Java Basic] 41. ThreadPool
·
Java
1. ThreadPool마지막으로 스레드 풀에 대해서 알아보도록 하자. 병렬처리 작업이 많아지게 되면, 그만큼 실행되는 스레드의 개수도 많아지고, 스레드의 생성과 스케쥴링으로 인해 CPU의 처리량이 많아지게 되서 결과적으로 메모리 사용량이 증가한다. 이는 애플리케이션의 성능 저하에 주요 원인이 된다. 따라서 스레드의 양이 급증하는 상황이 많다면, 이를 막기 위해 사용해야되는 것이 스레드 풀(Thread Pool)이다. 스레드 풀은 작업 처리에 사용되는 스레드를 제한된 개수만큼으로 정해 놓고 작업 큐에 들어오는 작업들을 하나씩 스레드로 맡아서 처리하는 방법이다. 때문에 작업 처리 요청이 폭증해도 스레드 전체 개수가 늘어나는 것은 아니기 때문에, 애플리케이션의 성능이 급격히 저하되지 않는다. 자바에서는 스레..
[Java Basic] 40. 스레드 상태 제어
·
Java
1. 스레드 상태스레드 객체를 생성하고, start() 메소드를 호출하게 되면 스레드가 실행된다고 앞서 언급했었다. 하지만, 바로 실행되는 것이 아니라 실행 대기 상태가 된다. 여기서 말하는 실행대기 상태란, 아직 스케쥴링이 되지 않아서 실행을 기다리는 상태를 의미한다. 실행 대기 상태에 있는 스레드 중에서 스레드 스케쥴링으로 선택된 스레드가 CPU를 점유하고 run() 메소드가 실행되면 그제서야 스레드가 실행되는 것이다. 이 때의 상태를 실행(Running) 상태라고 말한다. 또한 현재 실행 상태에 있는 스레드는 run() 메소드를 모두 실행하기 전에 스레드 스케쥴링에 의해 다시 실행 대기 상태로 돌아갈 수도 있다. 해당 스레드가 실행 대기 상태로 돌아가면, 그 외의 다른 스레드들 중에 하나가 선택되어..
[Java Basic] 39. 스레드 우선순위와 동기화
·
Java
1. 동시성과 병렬성멀티 스레드는 동시성(Concurrency) 또는 병렬성(Parallelism) 으로 실행되기 때문에 2가지 용어에 대해서는 확실하게 아는 것이 좋다. 먼저 동시성이란 멀티 작업을 위해 하나의 코어에서 멀티 스레드가 번갈아가며 실행하는 성질을 의미한다. 병렬성은 멀티작업을 위해 멀티 코어에서 개별 스레드를 동시에 실행하는 성질을 의미한다. 만약, 싱글 코어 CPU에서 멀티 스레드를 수행한다고 가정해보면, 겉으로 보기엔 병렬적으로 실행되는 것처럼 보일 수 있지만, 사실 작업을 번갈아가면서 수행되는 동시성 작업이다. 다만, 워낙 빠른 속도로 번갈아가면서 하기 때문에 병렬적으로 보일 수 있다. 스레드의 개수가 코어수 보다 많을 경우, 스레드를 어떤 순서에 의해 동시성으로 실행할 것인가를 결..
[Java Basic] 38. 스레드 (Thread)
·
Java
1. 프로세스와 스레드스레드에 대해 알아보기 전에, 프로세스에 대해서 먼저 알아보도록 하자. 프로세스(Process) 란, 운영체제에서 실행 중인 하나의 애플리케이션을 의미한다. 사용자는 애플리케이션을 실행하면 운영체제로부터 실행에 필요한 메모리를 할당받아 애플리케이션의 코드를 실행하는 일련의 동작으로 볼 수 있다. 하나의 애플리케이션은 여러 개의 프로세스를 생성하기도 하며, 이처럼 여러 가지의 작업을 동시에 처리하는 작업을 멀티 태스킹 (Multi - tasking) 이라고 부른다. 운영체제에서는 이러한 멀티 태스킹이 가능하도록 CPU 와 메모리 자원을 프로세스마다 적절하게 할당해주고, 병렬로 실행시킨다. 그렇다면 어떻게 2가지 이상의 작업을 동시에 처리할 수 있을까? 이에 대한 해답은 바로 멀티 스레..
[Java Basic] 37. 보조 스트림
·
Java
1. 보조 스트림보조 스트림이란 다른 스트림과 연결하여 여러가지 편리한 기능을 제공해주는 스트림을 의미한다. 보조 스트림은 다른 말로 필터(Filter) 스트림이라고도 부르는데, 이유는 보조 스트림의 일부가 FilterInputStream, FilterOutputStream 클래스의 하위클래스이기 때문이다. 보조 스트림의 경우 자체적으로 입출력을 수행할 수 없기 대문에 입력 소스와 바로 연결되는 InputStream, FileInputStream, OutputStream, FileOutputStream, Reader, FileReader, Writer, FileWriter 등에 연결해서 입출력을 수행한다. 보조 스트림을 사용하는 경우는 주로 문자 변환, 입출력 성능향상, 기본 데이터 타입 입출력, 객체 ..
[Java Basic] 36. 파일 입출력
·
Java
1. File 클래스IO 패키지에서 제공하는 클래스 중 하나이며, 파일과 관련된 입출력을 위해 사용하는 클래스가 File 클래스이다. 해당 클래스에서는 파일의 크기, 속성, 이름 등의 정보를 얻어내고, 파일 생성, 조회 및 삭제를 하는 기능이 포함되어 있다. 하지만, 파일의 데이터를 읽거나 쓰는 기능은 제공하지 않으며, 파일 입출력 시에는 반드시 스트림을 사용해야 한다는 점을 유의하자. 또 하나 주의할 사항으로는 운영체제마다 구분자가 다르다는 점이다. 예를 들어, 윈도우의 경우에는 \ 지만, 유닉스나 리눅스에서는 / 를 디렉터리 구분자로 사용한다. 만약 사용하는 운영체제의 구분자를 확인하고 싶다면, File.separator 상수를 출력해서 확인해보면 될 것이다. 만약 본인이 \ 를 구분자로 사용하고 싶..
[Java Basic] 35. 입출력 스트림 Ⅱ : 콘솔 입출력
·
Java
1. 콘솔 입출력콘솔은 시스템을 사용하기 위해 키보드로 입력을 받고, 화면으로 출력하는 소프트웨어를 의미한다. 대표적으로 유닉스, 리눅스에서의 터미널이나, Windows 에서의 명령 프롬포트를 의미한다. 앞선 장에서 바이트 스트림을 설명할 때 언급했던 것처럼, 자바에서는 이러한 콘솔로부터 데이터에 대한 처리를 할 때, System 클래스를 사용하게 되며, 콘솔에서 입력 받을 때는 System.in 을 사용하고, 콘솔에 데이터를 출력할 때는 System.out 을 사용한다. 만약 에러가 발생한 경우라면, System.err 을 사용한다. 이번 장에서는 표준 입출력 클래스인 System 에 대해서 좀 더 자세히 살펴보도록 하자.2. System.in 필드조금 전에 말했듯이, 자바는 프로그램이 콘솔로부터 데이..
[Java Basic] 34. 입출력 스트림 Ⅰ : 표준 입출력
·
Java
1. I/O 패키지 일반적으로 프로그램에서는 데이터를 외부에서 읽고, 다시 외부로 출력하는 작업이 많이 발생한다. 데이터는 사용자가 키보드에 입력하는 내용이 될 수도 있고, 외부의 파일 혹은 네트워크를 통해서 전달되는 내용일 수도 있다. 이렇게 입력된 내용을 모니터로 출력해서 보여줄 수도 있고, 다시 파일로 저장하거나, 저장 후 네트워크를 통해 다른 사용자에게 전달할 수도 있다. 자바에서는 위와 같은 내용을 스트림으로 입출력된다. 여기서 중요한 건, 바로 이전까지 이야기 했던 스트림과 지금부터 다룰 입출력 스트림은 서로 다른 내용이라는 점을 이해하기 바란다. 때문에 지금부터 이야기할 입출력 스트림은 장치와 상관없이 자바에서의 입출력과 연관된 내용이다. 1.1 입출력 스트림그렇다면, 입출력 스트림은 무엇일..
SLYK1D
'Java' 카테고리의 글 목록