반응형 IT 개인 공부95 [Java] 스레드 풀(Thread Pool)(2) 이번 글에서는 스레드 풀이 처리한 작업 결과를 애플리케이션에게 전달하는 작업 완료 통보 받기에 대해 알아보자. 작업 완료 통보 받기는 블로킹 방식의 작업 완료 통보 받기, 작업 완료 순으로 통보 받기, 콜백 방식의 작업 완료 통보 받기, 3가지의 방법이 존재한다. 먼저 블로킹 방식의 작업 완료 통보 받기이다. 블로킹 방식은 요청한 결과가 올 때까지 기다리는 방식을 의미한다. 작업을 요청하는 메서드 중 submit() 메서드는 작업 처리 결과를 반환한다고 하였다. 이때 Future라는 객체를 반환한다. Future 객체는 작업 결과가 아니라 지연 완료(pending completion) 객체라고 불리며 작업이 완료될 때까지 기다렸다가 최종 결과를 얻기 위해서 사용된다. get() 메서드를 호출하면.. 2021. 7. 22. [Java] 스레드 풀(Thread Pool)(1) 일반적으로 하나의 프로세스는 하나의 스레드를 가지고 작업을 수행하게 되지만 다수의 작업이 요청되면 CPU는 이를 보다 효율적으로 처리하기 위해서 멀티 스레드 방식이라고 부르는 다수의 스레드를 생성하여 병렬 작업으로 처리하게 된다. 문제는 매번 작업이 요청될 때마다 스레드를 생성하고 작업에 스케줄링하는 것은 CPU가 바빠지며, 메모리 사용량이 늘어나기 때문에 애플리케이션의 성능이 급격히 저하된다는 점이다. 이러한 문제를 해결하기 위해서 스레드 풀(Thread Pool)이라는 것을 사용한다. 스레드 풀은 스레드를 미리 생성해놓은 공간이라고 생각하면 쉽다. 작업 요청이 있을 때마다 매번 스레드를 생성하지 말고 제한된 개수만큼 스레드를 미리 생성해놓고 작업 큐(Queue)에 들어오는 작업들을 하나씩 스레드.. 2021. 7. 22. [Java] 싱글톤 패턴(Singleton Pattern) 구현 방법 싱글톤 패턴은 생성(Creational) 패턴 중 하나로써 객체를 오직 하나만 생성하여 생성된 객체를 프로그램 어디에서나 접근하여 사용할 수 있도록 하는 패턴이다. 간단히 말해서 애플리케이션 전체에서 단 하나의 객체만 생성하고 필요할 때마다 이 객체에 접근하여 사용하겠다는 의미이다. 이번 글은 싱글톤 패턴을 구현하는 방법을 중점으로 정리할 것이기 때문에 싱글톤 패턴에 대해 좀 더 자세히 알고 싶다면 다음 글을 참고하길 바란다. https://sorjfkrh5078.tistory.com/107 싱글톤 패턴(Singleton Pattern) 싱글톤 패턴은 생성(Creational) 패턴 중 하나로써 객체를 오직 하나만 생성하여 생성된 객체를 프로그램 어디에서나 접근하여 사용할 수 있도록 하는 패턴이다. .. 2021. 7. 21. 싱글톤 패턴(Singleton Pattern) 싱글톤 패턴은 생성(Creational) 패턴 중 하나로써 객체를 오직 하나만 생성하여 생성된 객체를 프로그램 어디에서나 접근하여 사용할 수 있도록 하는 패턴이다. 간단하게 얘기하면 필요할 때마다 똑같은 객체를 매번 생성하지 말고 기존에 생성한 하나의 객체를 활용하도록 하는 디자인 패턴이다. 싱글톤 패턴의 구조는 다음과 같다. Singleton : 하나의 객체만 생성하도록 보장해주며 getInstance() 메서드를 통해서만 다른 클래스에서 객체에 접근할 수 있도록 해주는 클래스 간단한 예시를 통해 싱글톤 패턴을 이해해 보자. 회사에서 직원들이 모두 사용하는 정수기가 있다고 하자. 정수기의 이름을 간단하게 A라고 하겠다. 정수기를 사용할 때마다 정수기의 물의 양을 1만큼 감소한다고 하자. 이를 코드.. 2021. 7. 21. [Java] 초기화 블록(Initialization Block) Java에선 클래스 변수, 인스턴스의 변수의 초기화가 복잡하거나 공통된 부분이 많을 경우 초기화 블록을 사용하면 코드를 간결하게 할 수 있다. 초기화 블록의 종류로는 Static Block과 Instance Block이 존재한다. 초기화 블록은 다음과 같이 클래스 내에 선언하여 사용하면 된다. static { //Static Block } { //Instance Block } 너무 간단한 내용이라서 다음 코드의 실행 결과를 보면 초기화 블록이 어떤 것인지 이해할 수 있을 것이다. class InitializationBlock { static String staticBlock; String instanceBlock; static { //Static Block staticBlock = "클래스 로딩 시 한.. 2021. 7. 21. [Java] 예외의 종류 프로그램 개발을 하다 보면 다양한 오류가 발생할 수 있다. Java에서는 오류가 발생하면 어떤 오류인지를 개발자에게 알려줘서 오류를 처리할 수 있도록 기능을 지원해 준다. Java에서의 예외는 크게 Error, RuntimeException, OtherException, 3가지의 종류가 존재한다. 이들에 대해서 알아보도록 하자. 먼저 Error이다. Error는 메모리 부족(OutOfMemoryError), 스택오버플로우(StackOverFlowError)처럼 자바 가상 기계(JVM)나 하드웨어 등 시스템의 문제로 발생하는 것을 의미한다. 즉, 개발자가 처리할 수 있는 영역이 아니기 때문에 Error가 발생하면 프로그램을 종료시키는 것이 보통이다. 다음으로 Exception이다. Error와 .. 2021. 7. 19. [Java] try-with-resources : 자원을 할당하는 방법 Java에선 Stream이나 DB Connection처럼 다양한 자원을 외부에서 사용할 수 있다. 하지만 어떤 언어든지 간에 자원을 사용한 후 더 이상 사용할 필요가 없다면 자원의 효율성을 위해 반환해 줘야 한다. 예를 들어 입력을 받기 위해 다음과 같은 객체들을 사용한다고 하자. 입출력 관련 객체를 사용할 때는 다양한 예외 처리를 위해 보통 try-catch 문으로 감싸서 사용한다. BufferedReader br = null; try { br = new BufferedReader(new InputStreamReader(System.in)); //br 객체를 사용 br.close(); } catch (Exception e) { //Exception 처리 } 하지만 위 코드는 문제가 존재한다. tr.. 2021. 7. 19. [Java] BigInteger : 큰 수를 표현하는 방법 Java에서 정수를 표현하는 자료형은 byte, short, int, long이 존재한다. 이들은 각각 다음과 같은 크기의 정수를 표현할 수 있다. 즉, 최대 범위인 long으로 표현할 수 있는 -9223372036854775808 ~ 9223372036854775807 내의 정수밖에 표현할 수 없다. 그렇다면 long 범위를 벗어나는 수를 표현하고 싶다면 어떻게 해야 할까? 예를 들어 10000000000000000000을 표현하고 싶다고 하자. 일단 long으로는 이 수를 표현할 수 없다. 하지만 문자열로 표현한다면 이 수를 표현할 수 있다. 일단 수를 표현하는 데까지는 성공하였다. 하지만 이 수를 이용해서 다양한 연산을 할 수 있어야 한다. 학창 시절 수학 문제를 풀 때 두 수를 덧셈하는 방.. 2021. 7. 19. [Java] 접근 제한자 Java는 클래스들로 이루어져 있으며 클래스는 필드, 메서드 등 멤버들을 가지고 있다. 이렇게 클래스에서 연관 있는 멤버들을 묶어서 가지고 있는 작업을 캡슐화(Encapsulation)라고 한다. 캡슐화의 특징 중 하나는 보안과 관련된 정보 은닉이다. 클래스의 멤버들 중 외부로 노출되어도 되는 것도 있지만 외부로 노출해서는 안 되는 것들도 존재할 수도 있다. 예를 들어 사람의 정보를 가진 클래스가 존재할 경우 이름이나 나이 같은 것들은 외부에 노출되어도 괜찮지만 주민등록번호 같은 민감한 정보는 외부에 노출되면 안 된다. 따라서 클래스 내의 멤버에 접근할 경우 범위를 제한해 줄 수 있어야 한다. 이를 가능하게 해주는 친구가 바로 접근 제한자이다. Java에서는 public, protected, .. 2021. 7. 16. 이전 1 ··· 5 6 7 8 9 10 11 다음 반응형