캐리지 리턴과 라인 피드의 차이 – 줄 바꿈

carriage return은 줄을 바꾸지 않고 커서나 타자기의 타점을 현재 줄의 맨 앞 즉 왼쪽 끝으로 옮기는 거고 line feed는 좌우로 움직임 없이 줄만 그대로 하나 내리는 거다. 우리가 일반적으로 줄 바꿈이라 하는 건 이들 둘을 합한, 한 줄 내리고 맨 왼쪽에서 출력을 대기하는 상태로 두는 거다. 메모장을 열어 보면 오른쪽 아래에 crlf라고 보이는데 이게 그…

[프로그래밍] 이름을 짓는 고충 – 2009 토요타 자동차 결함의 원인

많은 프로그래머들은 코딩을 할 때 객체와 변수의 이름을 짓는 논리 외적인 문제로 힘들어 한다. 논리적인 문제는 똑똑하면 빨리 처리할 수 있지만 물리적인 문제를 해결하는 데에는 시간이 걸리게 마련이다. 프로그램을 만들다 보면 많은 객체와 변수들을 만들어야 하는데 나도 새로운 객체 선언을 하면서 멍하니 모니터만 보며 무념무상에 빠지는 경우들이 많다. 수준 낮은 프로그래머들은 순간의 고뇌에서 빨리 벗어나려고…

[프로그래밍] 빅 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라는 프라퍼티를 갖기 때문에…

[컴퓨터 프로그래밍] 메떠드 분리 규칙

하나의 개념을 하나의 메떠드로 구현한다. 주석이 없어도 메떠드의 역할을 구체적으로 알 수 있을 정도로 메떠드를 세분한다. 줄 수에 얽매이지 않지만 대부분 모니터 한 화면 안에 들어간다. 하나의 개념 안에서 단순하게 루틴으로서 기능하는 부분은 메떠드 바깥으로 추출하지 않고 nested method로 분리한다.

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

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