본문 바로가기

반응형

프로그래밍언어

(94)
[JAVA] 쓰레드의 동기화 멀티 쓰레드 프로그램에서는 프로세스의 자원을 여러 쓰레드가 공유한다. 그렇기 때문에 각각의 작업이 다른 작업에게 영향을 끼치게 된다. 이러한 경우 공유 데이터의 변경으로 인해 개발자가 의도했던 결과가 나오지 않을 수 있다. 이러한 문제를 해결하기 위해서 임계영역 (critical section) 과 락 (lock) 개념을 도입하여 한 쓰레드가 작업을 종료할 때까지 다른 쓰레드에게 방해받지 않도록 한다. 공유 데이터를 임계영역으로 지정해놓고, 해당 영역의 lock 을 획득한 쓰레드만이 공유 데이터를 사용할 수 있도록 하여 문제를 해결한다. 이처럼 한 쓰레드가 진행 중인 다른 쓰레드를 방해하지 못하도록 막는 것을 쓰레드의 동기화 (synchronization) 이라고 한다. 자바에서는 synchronized..
[JAVA] 쓰레드 실행제어 1. 쓰레드 우선순위 쓰레드는 우선순위라는 속성을 가지고 있다. 이 우선순위의 값에 따라 쓰레드가 얻는 실행시간이 달라진다. 각 쓰레드가 수행하는 작업의 중요도에 따라 쓰레드의 우선순위를 다르게 지정하여 실행시간을 조절할 수 있다. - 쓰레드의 우선순위 지정 void setPriority(int newPriority) // 쓰레드의 우선순위를 지정한 값으로 변경한다. int getPriority() // 쓰레드의 우선순위를 반환한다. public static final int MAX_PRIORITY = 10; // 최대우선순위 public static final int MIN_PRIORITY = 1; // 최소우선순위 public static final int NORM_PRIORITY = 5; // 보통..
[JAVA] 쓰레드 구현 및 실행 (Thread, Runnable, start(), run()) 1. 쓰레드 구현 쓰레드를 구현하는 방법은 Thread 클래스를 상속받는 방법과 Runnable 인터페이스를 구현하는 방법, 두가지가 있다. 각각의 방식으로 구현은 다음과 같이 할 수 있다. // Thread 클래스 상속 class ThreadClass extends Thread { // Thread 클래스의 run() 을 오버라이딩 public void run() { ... } } // Runnable 인터페이스 구현 class RunnableClass implements Runnable { // Runnable 인터페이스의 추상메서드 run() 을 구현 public void run() { ... } } 둘 간의 큰 차이는 없지만 Thread 클래스를 상속받으면 다른 클래스를 상속받을 수 없기 때문에 ..
[JAVA] 프로세스와 쓰레드 1. Process, Thread 프로세스란 간단히 말해서 실행중인 프로그램을 의미한다. 프로그램을 실행하면 OS 로부터 실행에 필요한 자원, 메모리를 할당받아 프로세스가 된다. 프로세스는 프로그램을 수행하는데 필요한 데이터와 메모리 등의 자원, 그리고 쓰레드로 구성되어 있다. 프로세스의 자원을 이용해서 실제로 작업을 수행하는 것이 바로 쓰레드이다. 모든 프로세스는 하나 이상의 쓰레드를 가지고 있으며, 둘 이상의 쓰레드를 가진 프로세스를 멀티쓰레드 프로세스, multi-threaded process 라고 한다. 하나의 프로세스가 가질 수 있는 쓰레드의 개수는 제한되어 있지 않으나, 쓰레드가 작업을 수행하는데 필요한 메모리가 한계에 다다르면 더이상 쓰레드를 만들 수 없다. - 멀티태스킹과 멀티쓰레딩 현재 ..
[JAVA] Annotation 1. annotation 애너테이션은 주석, 주해, 메모 라는 뜻을 가지고 있다. 자바에서 에너테이션은 소스코드 안에 다른 프로그램을 위한 정보를 미리 약속된 형식으로 포함시킨 것이다. '@' 기호를 붙여서 표현하며, 주석처럼 프로그램에 직접적인 영향을 미치지 않으면서 정보를 제공한다. 대표적인 애너테이션으로 @Override, @Test 등을 사용하곤 하는데, 각각 이후에 나오는 소스코드가 오버라이딩을 위한 메서드, 테스트를 위한 메서드임을 알려주는 역할을 한다. 이와같이 JDK 에서 미리 제공하는 애너테이션들을 표준 애너테이션이라고 하는데, 주로 컴파일러를 위한 것들이다. 이외에도 개발자가 직접 애너테이션을 정의할 수 있는데, 이때 메타 에너테이션을 사용하면된다. 2. 표준 애너테이션 자바에서 제공하..
[JAVA] Enums 1. 열거형, enums 열거형은 JKD1.5 부터 추가된 타입으로 열거형이 갖는 값뿐만 아니라 타입까지 관리하여 논리적인 오류를 줄일 수 있다. C언어의 열거형은 타입을 관리하지 않기 때문에 타입이 달라도 값이 같은 경우에 조건식 결과가 true 로 반환한다. 하지만 자바는 타입에 안전한 열거형, typesafe enum 이기 때문에 값이 같아도 타입이 다른 경우 false 를 반환한다. 2. 열거형의 정의와 사용 열거형을 정의하는 방법은 중괄호 {} 안에 상수의 이름을 나열하기만 하면 된다. 열거형에 정의된 상수를 사용하는 방법은 (열거형이름).(상수명)으로 사용할 수 있다. enum EnumName {CONSTANT1, CONSTANT2, ... } System.out.println(EnumName..
[JAVA] Generics 1. 지네릭스 지네릭스는 다양한 타입의 객체들을 다루는 메서드나 컬렉션 클래스에 컴파일 시의 타입 체크를 해주는 기능이다. 객체의 타입을 컴파일 시에 체크하여 객체의 타입 안정성을 높이고 형변환의 번거로움을 줄여서 코드를 간결하게 유지할 수 있다. 간단하게 얘기하여 ArrayList 와 같은 컬렉션 클래스에 들어갈 수 있는 객체의 종류를 미리 명시해두어 번거로운 형변환을 줄여준다. 2. 지네릭 클래스의 선언 지네릭 타입은 클래스와 메서드에 선언할 수 있는데, 다음과 같이 사용할 수 있다. class Box { T element; void setElement(T element) { self.element = element; } T getElement() { return element; } } 위의 예제에서..
[Python] module, package, library 1. module 코드를 잘 구성하기 위해서는 서로 연관이 있는 코드들을 모아서 그룹화해야한다. 모듈은 일반적으로 하나의 .py 파일에 저장된 연관된 코드 더미를 말한다. 모듈에는 함수, 클래스, 변수 또는 실행 가능한 코드 등을 선택하여 정의할 수 있다. 이렇게 저장된 모듈들을 애플리케이션에서 사용하기 위해서는 import 구문을 사용하여 해당 모듈을 가져와야 합니다. 모듈을 import 한 후에 모듈안에 있는 context 들을 module.context, module.function() 등의 문법으로 사용할 수 있다. 모듈에 있는 특정 요소만 사용하고 싶은 경우에는 from module import item 과 같은 형식으로 사용하여 모듈 전체가 아니라 해당 요소만 import 할 수 있다. # h..

반응형