본문 바로가기
반응형

프로그래밍13

C# 프로그램 진입점 Main함수가 static인 이유 C# 예제 프로젝트를 생성하면 매번 맞이하는 오류해당 질문에 대해서 고민해 본 적이 있는가? 물론 고민하지 않아도 된다고 생각한다. 이런 질문을 하지 않고도 무수히 많은 코드를 작성하고 프로그램을 만들 수 있기 때문이다. 하지만 매번 Main() 함수가 static이기 때문에 Main 함수에서 함수를 호출하려면 해당 함수도 static 함수여야 한다는 컴파일 오류를 매번 마주한다. 그래서 Main() 함수에서 static 키워드를 제거하면 또 다른 오류가 발생한다.using System;class Program{ public int Factorial(int num) { if (num == 0) { return 0; } if .. 2024. 11. 19.
스레드 생성 이후에 언제 Handle을 반환해야 할까? 스레드를 생성하고 반환받은 Handle 언제 반환해야 할까?스레드를 생성하고 나면 스레드에 대한 Handle을 반환받는다. 그리고 스레드 객체를 다 사용하고 나면 해당 핸들을 ::CloseHandle() 매소드를 통해서 반환한다. 그런데 IOCP 소켓 프로그래밍 관련으로 공부하다가 해당 예제를 발견했다.쓰레드를 생성하고 받은 hThread 핸들을 생성하자마자 바로 아래에서 ::CloseHandle() 매소드로 바로 반환한다. //클라이언트로부터 문자열을 수신함.hThread = ::CreateThread(NULL, //보안속성 상속 0, //스택 메모리는 기본크기(1MB) ThreadComplete, //스래드로 실행할 함수이름 (LPVOID)NULL, // 0, //생성.. 2024. 8. 7.
스칼라(Scala) 리스트에 대해서 알아보자 스칼라(Scala) 리스트스칼라에서는 다음과 같이 List라는 키워드를 사용하여 리스트를 정의할 수 있다. > val a = List(1, 2, 3)a: List[Int] = List(1, 2, 3) 출력을 해보면 List[Int] 라고 출력되어 Int로 구성된 리스트가 만들어진 것을 알 수 있다. 또한, 다음과 같이 여러 종류의 타입으로 구성된 리스트를 만드는 것도 가능하다. > val b = List(1, "2", 3.0)b: List[Any] = List(1, 2, 3.0) 참고로,  Any는 모든 스칼라 타입의 부모이기 때문에 Any 타입의 변수에는 모든 타입의 값을 담는 것이 가능하다. > val a:Any = 1> val a:Any = "1"> val a:Any = 2.0> val a:Any .. 2024. 7. 23.
일급 함수(First-class function) vs 고차 함수(Higher-order function) 일급 함수(First-class Function) 프로그래밍 언어에서 함수(Function)를 일급 시민(First-class Citizen)으로 취급하는 것을 말한다. 즉, 함수를 변수에 할당하거나 파라미터로 전달하고 반환값으로 함수를 반환하는 등을 할 수 있는 언어를 말한다. 이러한 언어로 C#, C++, python, javascript 등이 있다. 고차 함수(Higher-order Function) 고차 함수는 하나 이상의 함수를 인자로 받거나 함수를 결과로 반환하는 함수를 말한다. 즉, 다른 함수에서 작용하는 함수이다. 고차 함수(Higher-order Function) 예제 map() function => select() function using System; using System.Coll.. 2024. 3. 25.
함수형 프로그래밍 관련 개념 정리 함수형 프로그래밍에 대해서 함수형 프로그래밍은 다음과 같은 테크닉들을 사용하는 것이라고 여겨지고 있다. 일급 함수(First-class function) 익명 함수(Lambda function) 클로져(Closure) 커링(Curring) 대수적 데이터 타입(Algebraic datatype) 다른 자료형의 값을 가지는 자료형 대수적 데이터 타입에는 곱타입(product type)과 합타입(sum type)이 존재함 부분으로 전체를 나타내는 타입 불변성(Immutable) 재귀 함수(Recursive function) 참조 투명성(Referential transparency) 순수 함수(Pure function) 고차 함수(Higher-order function) 지연 평가(Lazy evaluation).. 2024. 3. 22.
배열(Array)에 대해서 순서 있게 값을 저장 배열의 가장 중요한 특징은 값을 인덱스(index)를 사용하여 순서 있게 저장한다는 것이다. 그래서 이 인덱스를 통해서 특정 위치에 저장되어 있는 값을 상수 시간(O(1))에 읽고 쓸 수 있다. 예를 들어, 다음과 같은 형태로 값이 저장되어 있는 배열 'arr'가 있을 때, value: A B C D E F G H I J index: 0 1 2 3 4 5 6 7 8 9 인덱스 3에 있는 값을 'D'에서 'K'로 변경해 보겠습니다. print(arr[3]) # 'D' arr[3] = 'K' # 인덱스 3에 있는 값을 'D'에서 'K'로 변경 print(arr[3]) # 'K' 이와 같이 대부분 프로그래밍 언어에서는 배열이 가리키고 있는 변수명 뒤에 대괄호를 붙여서 'arr [i]'와 .. 2023. 9. 20.