비트를 쪼개는 개발자

allen321@naver.com

2024/06 6

C# - Struct 와 Class의 차이점

구조체란?  우선 프로그래밍 언어에서는 변수를 선언할때 이 변수를 담아두는 그릇인 자료형을 먼저 선언하게 된다. 이 변수들을 한 곳에 모아놓고 싶을 때 같은 자료형의 변수라면 배열로 선언할 수 있겠지만 나중에 해당 변수들을 쉽게 가져오거나 혹시나 다른 자료형을 가진 변수들도 모아 놓고 싶다면 코드 관리가 점점 어려워진다.    구조체는 이러한 점을 해결하기 위해 초기 기존의 C 언어에서 만들어진 기능이다. 구조체는 데이터, 즉 하나 이상의 변수들을 모아놓고 새로운 자료형을 정의하는 도구로써 작동한다.  키워드로는 struct를 사용하여 선언해주며 내부에는 원하는 자료형을 자유롭게 사용하여 선언해 주면 된다.   struct의 데이터는 값 타입(call by Value)으로 저장되며 스택 메모리에 할당된다..

C# 2024.06.21

C# - 스레드(Thread)

스레드(Thread) 란?   운영체제가 CPU에 시간을 할당하는 기본 단위이다. (운영체제가 CPU에 일을 시키는 최소 단위) 스레드를 설명하기 위해서는 먼저 운영체제와 프로세스가 무엇인지 알아야 한다.    운영체제  컴퓨터의 하드웨어와 소프트웨어 자원을 관리하고 컴퓨터 프로그램의 실행을 제어하는 시스템 소프트웨어다. 프로세스 관리, 메모리 관리, 파일 시스템 관리, 접근 제어 등의 업무를 담당한다. 리눅스, 윈도우, ios등이 있다.  프로세스 운영체제가 자원을 할당시키고 관리하는 기본 단위이다. 프로그램이 메모리에 로드되어 실행되는 상태이다. 운영체제 안에서 돌아가는 프로그램을 담당한다고 생각하면 된다. 프로그램 상태, 코드, 제어 블록, 메모리 등으로 구성되어 있다. 프로세스는 반드시 하나 이상..

C# 2024.06.18

C# - 동기와 비동기 (Synchronous/Asynchronous)

코드를 동기적으로 작동시키는 것과 비동기적으로 작동시키는 것은 리소스 최적화와 관련해서 매우 중요하다. 특별한 지시가 없다면 C#은 코드를 동기적으로 작동시키며 동기적이라는 것은 명령문을 순차적으로, 즉 하나의 작업이 완료되지 않았다면 다음 작업을 실행하지 않는다.    동기 (Synchronous)  동기적으로 코드를 실행하는것은 다음 키워드들로 설명할 수 있다.  단일 흐름: 작업이 완료될 때까지 현재 쓰레드가 다른 일을 하지 못하고 기다려야 한다. 차단(Blocking): 작업이 완료될 때까지 호출한 쓰레드*가 차단된다. 단순성: 구현이 상대적으로 단순하며, 코드의 흐름이 직관적이고 읽기 쉽습니다.  쓰레드*란? : 프로세스 내에서 실행되는 작은 실행 단위이다. 쓰레드가 차단된다는 것은 어떤 작업이..

C# 2024.06.13

C# - System / Collections / Generic Collection

C#으로 코딩할 때 맨 상단에 위치하는 using ~~~ 지시문은 해당 네임스페이스를 가져와서 사용하겠다는 의미로 사용한다.   내가 별도로 만든 프로젝트 파일의 네임스페이스를 가져와서 사용하기도 하지만 C#에서 자체적으로 지원하는 .NET의 기본 네임스페이스를 보통 많이 사용한다.  System using System; 지시문을 사용해 선언한다. ms 공식 문서에는 using System에 포함된 수많은 클래스가 나와있다. (https://learn.microsoft.com/ko-kr/dotnet/api/system?view=net-8.0) using System 내에서 범용적으로 사용하는 클래스나 네임스페이스는 다음과 같다.  System.Console: 콘솔 입출력에 사용되는 클래스.System.S..

C# 2024.06.11

C# - 가비지 컬렉션(Garbage Collection)

가비지 컬렉션 이란 ? 가비지 컬렉션(Garbage Collection, GC)은 메모리 관리를 자동화하는 기능. 더 이상 사용되지 않는 객체를 자동으로 찾아서 메모리를 해제하는 역할을 함. 스택 메모리의 경우 함수의 실행 순간부터 종료까지 공간 사용량을 추적한다. 하지만 힙 메모리는 C++과 같은 경우에는 메모리 관리가 수동으로 이루어지기 때문에 생성자와 소멸자를 명시적으로 정의해야 함. C#은 가비지 컬렉션을 통해 자동으로 메모리를 관리하기 때문에 생성자는 필요하지만, 소멸자는 대부분의 경우 필요하지 않다.       가비지 컬렉션의 동작 방식  마킹(Marking) : 가비지 컬렉터는 루트 참조부터 시작하여 모든 접근 가능한 객체를 마킹함.분류, 재배치 (Relocate) : 사용되지 않는 개체들을..

C# 2024.06.07

알고리즘 - 동적 계획법(Dynamic Programming)

동적 계획법이란 ?  동적 계획법은 어떤 문제가 여러 단계의 반복되는 부분 문제로 이루어져 있을때, 각 단계의 부분 문제의 답을 기반으로 전체 문제의 답을 구하는 방법이다.복잡한 하나의 문제를 간단한 하위 문제들로 나눠서 푸는 최적화 기법이다.동적 계획법을 사용하려면 문제의 유형이 최적 부분 구조(Optimal Substructure) 이거나,중복되는 부분 문제(Overlapping Subproblems) 로 이루어 져야 한다.  동적 계획법과 분할 정복의 차이점  동적 계획법과 분할 정복은 큰 문제를 작은 여러 문제로 나눈다는 점에서는 비슷하다.하지만 문제 접근 방식이나 사용되는 문제의 유형에 있어서는 확연한 차이를 보여준다. 요소동적 계획법(DP)분할 정복(Divide and Conquer)하위 문제..

알고리즘 2024.06.04