Programming/JAVA (139) 썸네일형 리스트형 멀티 스레드(2) - 작업 스레드 개념 : Thread 하위 클래스로부터 생성 1 앞선 아티클까지 우리는 작업(워커) 스레드가 실행한 작업을 Runnable 인터페이스를 통해서 선언했습니다. 그리고 이 구현 객체를 Thread 생성자의 파라미터로 전달했지요. 이번에는 작업 스레드가 실행할 작업 내용을 Runnable을 사용하지 않고, Thread의 하위 클래스를 통해 작업 스레드를 정의하는 방법을 알아보겠습니다. 작업 스레드 클래스는 우선 Thread 클래스를 상속하고 run 메서드를 오버라이딩해서 스레드가 실행할 코드를 선언해주면 됩니다. 그리고나서 Thread 객체를 선언할 때 (Thread의 자식 클래스인) 작업 스레드 클래스를 대입해주면 됩니다. 앞의 아티클에서는 Runnable을 Thread 객체 선언 시 파라미터로 전달하는 것이 주요 포인트였죠? 워커 스레드를 선언하는 .. 멀티 스레드(2) - 작업 스레드 개념 : Thread 클래스로부터 생성 2 앞서서 작업 스레드를 사용하지 않고 비프음을 내는 예제를 살펴보았었습니다. import java.awt.Toolkit;public class ExampleMain { public static void main(String[] args) { Toolkit toolkit = Toolkit.getDefaultToolkit(); for(int i = 0; i 위의 예제는 [메인 스레드]만을 사용한 예제라는 것을 이제 이해하셨을 겁니다. 위와 똑같은 작업을 [작업 스레드]까지 사용해서 비프 사운드와 텍스트 "띵~"이 동시에 출력되도록 만들어 보겠습니다. // BeepTask.javaimport java.awt.Toolkit;public class BeepTask implements Runnabl.. 멀티 스레드(2) - 작업 스레드 개념 : Thread 클래스로부터 생성 1 앞선 아티클에서 우리는 Thread 클래스로부터 작업 스레드를 선언하는 방식을 살펴보았습니다. 일단 기본적으로 Thread 클래스를 사용해서 작업 스레드 인스턴스를 생성해야 하는데, 이 때 호출하는 생성자는 인터페이스 Runnable을 파라미터로 갖습니다. Runnable이란 네이밍에서 우리는 이것이 '작업 스레드가 실행할 수 있는 코드'를 갖고 있다는 점을 유추하면 되겠습니다. Thread thread = new Thread(Runnable target); 여기서 인터페이스 Runnable은 메서드 run( )이 선언되어 있습니다. 즉, Runnable 구현 클래스는 run( )을 오버라이드해서 작업 스레드가 실행할 실제 코드를 선언해줘야 합니다. 여기서 Runnable 구현 클래스는 작업 내용만 .. 멀티 스레드(1) - 멀티 스레드 개념 : 프로세스와 스레드 2 기본적으로 JAVA의 어플리케이션은 메인 스레드(main thread)가 main() 메서드를 실행하면서 시작됩니다. 당연하지만 main() 메서드의 코드를 순차적으로 실행해서 마지막 코드 또는 return문을 만나면 실행을 종료하게 되죠. 그런데 여기서 메인 스레드가 필요에 의해서 병렬로 작업 스레드를 통해 코드를 실행할 수 있습니다. 이것이 멀티 스레드를 생성해 진행하는 멀티 태스킹입니다. 위의 그림과 같이 메인 스레드가 메인 스레드가 작업 스레드 1을 생성하고 실행한 다음, 작업 스레드 2를 또하나 생성해 실행하는 방식이 되겠네요. 싱글 스레드 어플리케이션에서는 스레드는 메인 스레드 하나밖에 없습니다. 그래서 메인 스레드가 종료되면 어플리케이션 자체가 종료됩니다. 하지만 멀티 스레드는 다르죠... 멀티 스레드(1) - 멀티 스레드 개념 : 프로세스와 스레드 1 ○ 프로세스, 스레드 OS에서 실행되는 하나의 어플리케이션을 기본적으로 프로세스(process)로 칭합니다. OS로부터 메모리를 할당 받고, 코드를 실행하는 단위죠. 하나의 프로세스가 중복으로 실행되어 다중 프로세스를 이루기도 합니다. 간단하게, 크롬을 두 번 실행시키면 크롬이 두 개가 뜨죠? chrome.exe가 두 개가 양립하는 상황입니다. ○ 멀티 태스킹 - 멀티 프로세스, 멀티 스레드 흔히 얘기하는 멀티 태스킹(multi tasking)은 두 가지 이상의 작업을 동시에 처리한다는 아주 친숙한 개념입니다. 위에서 말한 다중(멀티) 프로세스가 이에 해당하겠죠? 하지만 멀티 태스킹은 멀티 프로세스에 한정되지 않는 개념입니다. 즉, 하나의 프로세스인 한 개의 어플리케이션 내에서 다중 작업이 가능하기 .. 컬렉션 프레임워크(5) - 검색 강화 컬렉션 2 : TreeSet 이제 앞서서 살펴본 기본 이진트리(binary tree)를 기반으로 한 Set 컬렉션인 TreeSet을 살펴보도록 하겠습니다. TreeSet에서 기본적으로 하나의 노드는, 노드 값인 value 그리고 왼쪽/오른쪽 자식 노드 참조를 위한 두 개의 변수로 구성됩니다. 이 TreeSet에 객체를 저장하게 되면 정렬은 자동으로 진행되는데, 이진트리 개념에서 배운 것처럼 부모 값보다 낮은 것은 왼쪽 자식 노드에, 높은 것은 오른쪽 자식 노드에 저장하게 됩니다. 본격적으로 들어가기 앞서 기억이 잘 나지 않는다면 Set 개념도 다시 한번 복습해 보겠습니다. 컬렉션 프레임워크(3) - Set 컬렉션 1 : Set의 개념 List와 차별화되는 Set 컬렉션의 가장 큰 특징은, 수학의 집합과 유사한 성질을 갖는다는 것입니.. 컬렉션 프레임워크(5) - 검색 강화 컬렉션 1 : 이진트리 구조 검색 기능을 강화한 컬렉션 프레임워크는 대표적으로 TreeSet과 TreeMap이 존재합니다. 당연히 각각 Set 컬렉션, Map 컬렉션이겠죠? 그런데 이 두 개의 컬렉션 프레임워크를 알아보기 전에 이진트리 구조(binary tree)를 이해해야 합니다. 왜냐하면 이 컬렉션들의 구조 자체가 이 이진트리를 이용해 계층적 구조(tree architecture)를 형성하기 때문입니다. ○ 이진 트리 구조 그럼 기본적으로 이 '이진트리 구조'가 무엇을 의미하는지부터 살펴보겠습니다. 이 이진트리 구조에 대한 이해가 있어야지 우리가 앞으로 살펴볼 TreeSet과 TreeMap과 같은 컬렉션이 왜 "검색 기능이 강화된 컬렉션"인지를 이해할 수 있기 때문이죠. 이진트리 구조는 여러 개의 노드(node)가 트리 모양으로.. 컬렉션 프레임워크(4) - Map 컬렉션 4 : Properties Properties는 Hashtable의 하위 클래스이기 때문에, Hashtable의 모든 특징을 그대로 가지고 있습니다. 다만, 차이점은 key와 value를 String 타입으로 제한한다는 점 입니다. ㅇ그렇기 때문에 Properties는 애플리케이션 옵션 / DB 연결 정보 / 다국어 정보가 저장된 프로퍼티 파일(~.properties) 파일을 읽을 때 사용하게 됩니다. 그럼 여기서 말하는 프로퍼티 파일이란 무엇일까요? 프로퍼티 파일은 key와 value가 = 기호로 연결된 텍스트 파일입니다. 이는 ISO 8859-1 문제셋으로 저장하게 되죠. 그런데, 한글은 해당 문자셋으로 직접 표현이 불가합니다. 그래서 한글은 유니코드로 변한하여 저장하게 되죠. 예를 들어 아래와 같이 country와 langu.. 이전 1 2 3 4 5 6 7 8 ··· 18 다음