java
-
인스턴스(Instance)란?Design Pattern/객체지향 2024. 4. 10. 20:49
인스턴스(instance)는 객체 지향 프로그래밍(OOP)의 핵심 개념 중 하나로, 클래스로부터 생성된 객체를 의미합니다. 클래스는 객체의 설계도 같은 역할을 하며, 인스턴스는 이 설계도를 바탕으로 생성된 실체를 말합니다. 클래스 정의에 따라 메모리에 할당된 인스턴스는 실제 프로그램에서 사용되는 데이터와 메서드(함수)를 포함합니다. 인스턴스를 통해 클래스에 정의된 속성과 기능을 실제로 사용할 수 있습니다. 인스턴스의 특징 유일성: 하나의 클래스로부터 여러 인스턴스를 생성할 수 있으며, 각 인스턴스는 독립된 메모리 영역을 가지고 서로 다른 상태를 유지할 수 있습니다. 클래스와의 관계: 인스턴스는 특정 클래스의 구조를 따르며, 해당 클래스의 속성(attribute)과 메서드(method)를 가지게 됩니다. ..
-
기아상태(Starvation)란?Computer Science/OS 2024. 4. 6. 17:22
기아상태(Starvation)는 멀티스레딩 환경에서 특정 스레드가 CPU 시간이나 필요한 자원을 충분히 할당받지 못해 원하는 작업을 수행하지 못하는 상태를 말합니다. 이는 일반적으로 우선순위가 높은 작업에 자원이 계속 할당되어 우선순위가 낮은 작업이 무한히 대기 상태에 머무르게 될 때 발생합니다. 1. 기아상태란? 기아상태는 시스템 내의 자원 할당 정책으로 인해 발생할 수 있습니다. 예를 들어, 특정 스레드나 프로세스가 자원을 오랜 시간 동안 독점하고 있을 때, 다른 스레드는 그 자원을 사용할 기회를 얻지 못할 수 있습니다. 특히, 멀티스레딩 환경에서 스레드에 우선순위를 할당하여 작업을 스케줄링할 때 기아상태가 발생하기 쉽습니다. 2. 기아상태 코드 예시 Java 예시: Java에서는 Thread 클래스..
-
컴파일(Compile)과 런타임(Runtime)이란?Computer Science/OS 2024. 4. 5. 10:04
1. 컴파일이란? 컴파일은 고수준 프로그래밍 언어로 작성된 코드를 기계가 이해할 수 있는 저수준 언어(보통 기계어나 바이트코드)로 변환하는 과정을 말합니다. 컴파일러는 이러한 변환 과정을 수행하는 프로그램입니다. 컴파일 과정은 일반적으로 여러 단계를 거칩니다. 소스 코드가 토큰으로 분해되고, 구문 분석을 통해 구문 트리가 생성되며, 최적화가 수행되고, 마지막으로 타겟 코드(기계어 코드)가 생성됩니다. 2. 런타임이란? 런타임은 프로그램이 실행되고 있는 시간을 의미합니다. 더 구체적으로는, 프로그램의 코드가 컴퓨터의 프로세서에 의해 실행되고 있는 상태를 말합니다. 런타임 동안, 프로그램은 메모리를 할당받고, 데이터를 처리하며, 사용자의 입력을 받고, 결과를 출력할 수 있습니다. 런타임 환경은 프로그램이 실..
-
라이브락(Livelock)이란?Computer Science/OS 2024. 4. 4. 21:59
1. 라이브락이란? 라이브락은 프로세스가 '진행 중' 상태이지만 실제로는 어떠한 유용한 작업도 수행하지 않는 상태를 말합니다. 이는 프로세스가 상호작용하는 방식 때문에 발생하며, 특정 조건을 만족시키기 위해 반복적으로 상태를 변경하지만, 결국은 원하는 결과를 달성하지 못하는 경우에 발생합니다. 데드락과 달리, 라이브락 상태의 프로세스는 실행 중인 상태를 유지하지만, 유용한 일을 하지 못합니다. 2. 라이브락 예시코드 구현에 앞서 라이브락을 명확히 보여주는 코드 예시는 데드락보다 구현하기 어렵습니다. 라이브락의 상황을 설명하기 위해, 두 개의 스레드(또는 고루틴)가 서로의 상태 변경을 지속적으로 감지하고, 그에 따라 자신의 상태를 변경하는 예를 들 수 있습니다. 이 과정에서 양쪽 모두 진행을 멈추지 않고 ..
-
데드락(Deadlock)이란?Computer Science/OS 2024. 4. 3. 23:09
1. 데드락이란? 데드락이란, 두 개 이상의 프로세스나 스레드가 서로 상대방이 점유한 자원의 해제를 무한히 기다리게 되어, 아무런 진행도 할 수 없는 상태를 말합니다. 이러한 상태가 발생하면, 해당 프로세스들은 영원히 진행되지 못하고 멈춰 있는 상태가 됩니다. 2. 데드락 예시코드 Java: public class DeadlockExample { private static final Object lock1 = new Object(); private static final Object lock2 = new Object(); public static void main(String[] args) { Thread thread1 = new Thread(() -> { synchronized (lock1) { Sys..
-
프로토타입 패턴(Prototype Pattern)이란?Design Pattern/생성 디자인 패턴 2024. 4. 2. 22:35
1. 프로토타입 패턴이란? 프로토타입 패턴은 생성 디자인 패턴의 한 종류로, 기존 객체를 복제하여 새 객체를 생성하는 방식입니다. 이 패턴은 특히 객체 생성 비용이 크거나 복잡한 경우, 또는 클라이언트가 객체의 타입을 미리 알 수 없는 경우에 유용합니다. 프로토타입 패턴은 원본 객체의 정확한 복사본을 제공함으로써, 새 객체의 생성과 초기화 과정을 단순화합니다. 2. 프로토타입 패턴은 주로 어디에 쓰이나? 프로토타입 패턴은 다음과 같은 상황에서 주로 사용됩니다: 객체 생성 비용이 높고, 비슷한 객체가 여러 개 필요한 경우 객체의 타입이 런타임에 결정되는 경우 클론을 지원하여 객체의 상태를 쉽게 복제할 수 있는 경우 이 패턴은 게임 개발에서 캐릭터, 아이템 등의 인스턴스를 만들 때나, 소프트웨어 개발에서 설..
-
빌더 패턴(Builder Pattern)이란?Design Pattern/생성 디자인 패턴 2024. 4. 1. 23:15
1. 빌더 패턴이란? 빌더 패턴은 복잡한 객체의 생성 과정과 그 표현 방법을 분리함으로써 동일한 생성 과정에서 서로 다른 표현 결과를 만들 수 있게 하는 디자인 패턴입니다. 이는 객체가 가질 수 있는 여러 옵션들을 명확하게 설정할 수 있게 하며, 최종 객체가 생성될 때까지 변경 불가능(immutable) 상태를 유지할 수 있도록 도와줍니다. 2. 빌더 패턴과 팩토리 패턴의 차이점 빌더 패턴과 팩토리 패턴은 모두 객체 생성을 추상화하는 패턴이지만, 주 사용 시나리오가 다릅니다. 팩토리 패턴은 생성할 객체의 타입이 서브클래스에 의해 결정되는 경우에 사용되며, 주로 객체 생성 로직을 캡슐화할 때 사용됩니다. 반면, 빌더 패턴은 하나의 복잡한 객체를 단계별로 생성해야 할 때 사용되며, 최종적으로 조립하는 방식으..
-
팩토리 패턴(Factory Pattern)이란?Design Pattern/생성 디자인 패턴 2024. 3. 31. 18:16
1. 팩토리 패턴이란? 팩토리 패턴(Factory Pattern)은 객체 생성을 위한 인터페이스를 제공하며, 서브클래스가 인스턴스화할 클래스를 결정하게 합니다. 이를 통해 객체 생성을 캡슐화하고, 클라이언트 코드가 특정 클래스에 의존하지 않도록 도와줍니다. 이 패턴은 객체 생성 로직과 클라이언트 코드를 분리하여, 코드의 유연성과 확장성을 향상시킵니다. 2. 팩토리 패턴의 종류 팩토리 패턴에는 주로 세 가지 종류가 있습니다: a. 단순 팩터리 패턴 (Simple Factory Pattern) 단순 팩터리 패턴은 팩토리 클래스가 객체 생성의 전체 로직을 처리합니다. 클라이언트는 팩토리 클래스를 통해 필요한 객체를 요청합니다. Java 예시: public class ShapeFactory { public Sh..