golang
-
캡슐화(encapsulation)란?Design Pattern/객체지향 2024. 4. 10. 23:22
캡슐화는 객체 지향 프로그래밍(OOP)의 네 가지 주요 원칙 중 하나로, 데이터(객체의 상태)와 데이터를 조작하는 메소드를 하나로 묶는 것을 말합니다. 1. 캡슐화란? 캡슐화는 객체의 세부 구현 내용을 숨기고, 사용자에게는 필요한 기능만을 제공하는 기술입니다. 즉, 객체의 데이터를 직접적으로 접근하는 대신 메소드를 통해 접근하게 함으로써 데이터의 무결성을 유지할 수 있습니다. 이를 통해 객체의 구현과 사용을 분리하고, 변경에 유연하게 대응할 수 있는 코드를 작성할 수 있습니다. 2. 캡슐화 코드 예시 JAVA public class Employee { private String name; private int age; private double salary; public Employee(String na..
-
기아상태(Starvation)란?Computer Science/OS 2024. 4. 6. 17:22
기아상태(Starvation)는 멀티스레딩 환경에서 특정 스레드가 CPU 시간이나 필요한 자원을 충분히 할당받지 못해 원하는 작업을 수행하지 못하는 상태를 말합니다. 이는 일반적으로 우선순위가 높은 작업에 자원이 계속 할당되어 우선순위가 낮은 작업이 무한히 대기 상태에 머무르게 될 때 발생합니다. 1. 기아상태란? 기아상태는 시스템 내의 자원 할당 정책으로 인해 발생할 수 있습니다. 예를 들어, 특정 스레드나 프로세스가 자원을 오랜 시간 동안 독점하고 있을 때, 다른 스레드는 그 자원을 사용할 기회를 얻지 못할 수 있습니다. 특히, 멀티스레딩 환경에서 스레드에 우선순위를 할당하여 작업을 스케줄링할 때 기아상태가 발생하기 쉽습니다. 2. 기아상태 코드 예시 Java 예시: Java에서는 Thread 클래스..
-
클로저(Closure)란?Back-End/Language 2024. 4. 5. 11:33
Go 언어에서의 클로저(Closure)는 JavaScript의 클로저와 유사한 개념을 가지고 있습니다. 둘 다 외부 함수로부터 생성된 내부 함수가 그 외부 함수의 스코프에 있는 변수에 접근할 수 있게 해주는 프로그래밍 기능입니다. 하지만 언어의 특성과 구현 방식에서는 차이가 있을 수 있습니다. 공통점 변수의 스코프 유지: 클로저는 내부 함수가 외부 함수의 실행 컨텍스트가 종료된 후에도 외부 함수의 변수에 접근할 수 있게 해줍니다. 이를 통해 특정 함수 호출이 종료된 이후에도 변수의 상태를 유지할 수 있습니다. 데이터 은닉과 캡슐화: 클로저는 데이터를 함수 내부에 은닉하고, 특정 함수를 통해서만 데이터에 접근할 수 있게 함으로써 캡슐화를 제공합니다. 차이점 언어적 특성: JavaScript는 프로토타입 기..
-
컴파일(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..
-
golang: 포인터(Pointer)란?Back-End/Golang 2024. 3. 30. 12:34
Go 언어에서 포인터는 변수의 메모리 주소를 저장합니다. 포인터를 사용하면, 변수의 메모리 주소를 통해 직접 변수의 값을 읽거나 수정할 수 있습니다. 이는 데이터를 효율적으로 처리할 수 있게 하며, 특히 큰 데이터 구조를 다룰 때나 함수 간에 데이터를 전달할 때 유용합니다.포인터의 기본 개념:포인터 선언: * 키워드를 사용해 포인터 타입을 선언합니다. 예를 들어, var p *int는 정수형 변수의 메모리 주소를 저장할 수 있는 포인터 p를 선언합니다.주소 연산자 &: 변수 앞에 &를 붙여 해당 변수의 메모리 주소를 얻습니다.역참조 연산자 *: 포인터 앞에 *를 붙여 포인터가 가리키는 메모리 주소의 실제 값을 얻습니다.코드 예시: 포인터 사용하기아래 코드는 포인터를 사용하여 변수의 값이 함수에 의해 어떻..
-
golang: 컨텍스트(Context)란?Back-End/Golang 2024. 3. 30. 12:13
Go 언어에서 context 패키지는 고루틴 간에 데이터, 취소 신호, 타임아웃 등을 전파하는 데 사용됩니다. context.Context 인터페이스는 요청 처리에 필요한 모든 정보를 담고, 고루틴의 실행 제어를 가능하게 합니다. 이는 주로 API 호출, 데이터베이스 요청 등의 작업을 취소하거나, 작업의 마감 시간(deadlines)을 설정하고, 요청 스코프의 값(value)을 전달하는 데 유용합니다. Context의 주요 사용 사례: 요청 취소: 사용자 요청 취소나 타임아웃 시, 모든 관련된 작업을 중단시킵니다. 타임아웃 설정: 특정 작업에 대한 최대 실행 시간을 지정합니다. 값 전달: 요청 스코프에 있는 데이터를 여러 고루틴 사이에서 전달합니다. Context 사용 예제: 아래 예제에서는 contex..