programming

  • [프로그래밍] 빅 O의 아규먼트가 크다고 꼭 느린 건 아니다 – O(n)

    컴퓨터 프로그래밍을 하다 보면 컬렉션을 다룰 때 O(1)이나 O(n)이라는 표기를 흔히 접하게 된다. 이를 흔히 Big O라 하며 Big-O, Big O Notation, 빅 오 표기법, 점근표기법 등으로 부르기도 한다. big은 o를 대문자로 표기한다는 뜻이고 o는 순서라는 뜻의 독일어 Ordnung을 뜻한다. 독일 사람들은 명사의 첫 글자를 대문자로 표기한다. 쉽게 설명하면 괄호 안의 수는 작을수록 좋다. 이…

  • ls증권의 api에 쓰이는 애스키 dc 문자

    애스키 17부터 20까지는 dc1부터 dc4이다. device control의 약자이다. 예전에 원격 제어 장비 이용에 쓰였던 것들이다. ls증권의 api를 이용하다 보면 이게 나온다. 원래의 용도로 쓰인 건 아니고 인 블록의 애트리뷰트 값에 의미 없는 걸 넣을 때 이게 들어간다. 데브센터에서 트랜잭션을 실행해서 보면 애트리뷰트가 있는 인 블록의 경우 그 값으로 이게 들어 있는 걸 확인할 수 있다.

  • LoadLibrary 오류 처리 방법

    LoadLibrary에 대한 자세한 설명은 따로 했다. LoadLibrary는 제대로 작동하지 않으면 그 이유를 정수 형태의 에러 메시지로 반환한다. 그러나 이러한 반환을 위해서는 아래와 같이 DllImportAttribute.SetLastError를 true로 설정해야 한다. 로드가 되지 않으면 Marshal.GetLastWin32Error 메떠드를 이용하여 아래와 같이 원인을 확인한다. GetLastWin32Error는 LoadLibrary를 실행한 바로 뒤에 실행해야 하는 거에 유의한다. 아래의 코드는 제대로 작동하지 않아 0을 반환한다. 그 이유는…

  • LinkedList를 써야 할 때

    LinkedList를 공부하면서 이게 배열이나 List와 어떻게 다른가는 복잡하게 익히지만 정작 이걸 언제 쓰는 게 좋은지에 대해서는 모르는 사람들이 많다. LinkedList는 이터래이트를 하면서 컬렉션의 아이템을 추가하고 없앨 때 제격이다. 배열이나 List로는 이를 제대로 구현할 수 없다. 아래는 정수로 이뤄진 컬렉션에서 홀수들을 찾아 없애는 c# 예제다. 여느 컬렉션들의 item을 LinkedList에서는 node라 한다. 노드는 next라는 프라퍼티를 갖기 때문에…

  • [프로그래밍] 쉬운 인터패이스 설명 – interface와 class 비교

    interface는 클래스와 비슷하여 c#의 경우 type system 항목에 같이 설명되어 있다. 아래의 예제는 인터패이스 안에 하나의 메떠드를 선언한 뒤 두 개의 서로 다른 내용으로 실행되게 하는 거다. 클래스 안에서는 메떠드를 선언하고 실행부까지 코딩할 수 있지만 인터패이스에선 그렇게 할 수 없다. 대신 클래스가 인터패이스를 상속하여 자유롭게 실행부를 코딩할 수 있다. 심지어 여러 인터패이스들을 동시에 상속할 수도…

  • 메모리 매핑과 가상 메모리에 대한 쉬운 설명

    memory mapping에서 동사 map은 어려운 단어다. ‘지도로 나타낸다’는 뜻이 아니라 correspond 즉 ‘대응시킨다’라는 뜻이다. 뭐를 뭐에다 대응시킨다는 말일까? 메모리 매핑을 이해하려면 먼저 가상 메모리에 대해 알아야 한다. 물리적 메모리에는 한계가 있다. 그 용량이 물리적 드라이브에 비해 작고 하도 여기저기에서 썼다 지웠다를 반복하다 보니 대이터가 뒤죽박죽으로 어질러져 있다. 이걸 fragmented 즉 ‘파편화’되어 있다고 한다. 이렇게 되면…

  • encrypt와 hash의 차이 – 패쓰워드 저장에 있어서

    encrypt는 암호로 바꾼다는 뜻의 동사다. 반대말로 decrypt 암호를 푼다는 동사가 있다. encrypt는 decrypt를 전제로 한다. 정보를 암호로 만들기만 해 놓으면 쓸모가 없다. hash는 엉망으로 만든다는 의미의 동사다. 프로그래밍에서 해쉬는 encrypt와 비슷하다. 정보를 그 자체로는 아무 의미가 없는 무언가로 바꾸어 놓는다. 하지만 encrypt와의 차이라면 해쉬된 결과물은 원래의 정보로 돌려 놓을 수가 없다는 거다. 예를 들어 네트워크에서…

  • [c#] 그냥 닷넷과 닷넷 프레임워크의 차이

    .net framework는 예전 꺼고 그냥 .net이라고만 하는 건 요새 꺼다. 전자를 다운로드하려 마이크로소프트 웹사이트에 접속하면 그냥 닷넷을 이용하라는 안내가 나온다. 닷넷 프레임워크는 이제 더 이상 버전 업이 되지 않는다. 닷넷 프레임워크가 버전 업 되던 시기에는 닷넷 코어라는 이름으로 서로를 구별했다. 이제 전자는 사라져 가게 되어 굳이 서로를 구별할 필요가 없게 되었다. 후자에서 코어라는 이름을 떼어…

  • 애플리케이션보다 system 프로세스의 cpu 부하를 높이는 ui 작업

    ui를 잦은 빈도로 업데이트하면 이 작업이 실행되는 프로세스 말고도 ‘system’ 프로세스의 cpu 사용이 는다. 예를 들면 모니터 크기 정도의 닷넷 DataGridView를 여러 스레드들에서 동시에 빠르게 반복하여 수정하는 경우다. 이러면 정작 이 작업이 실행되는 애플리케이션의 cpu 부하보다 시스템 프로세스의 그것이 더 높아진다. ui 작업의 상당 부분을 윈도우즈가 나눠서 처리하기 때문이다. 실행하는 애플리케이션의 cpu 부하만 보면 전체적인…