처리해야 할 공백 문자가 있다면, 꼭 고려해야 할 ‘ZERO WIDTH SPACE’

Code 값 32는 가장 흔히 볼 수 볼 수 있는 공백문자. 160도 공백문자인데, nbsp(Non-breaking Space) 문자라고 한다. 여기에 하나더 Code 값 8203이 있는데 이 값 역시 공백문자이다. 그런데 공백을 차지 하지 않는 공백문자, ‘ZERO WIDTH SPACE’라고 한단다. 보이지 않는 공백문자, 다른 말로 공백이 아닌 공백 문자이다. 참고로 유니코드 문자셋이다.

아래의 코드는 Javascript에서 Space 문자를 제거하는 코드이다.

let address = '공백 문자를 포함하는 문장';
let arrAddress = [];
for (let i = 0; i < address.length; i++) {
    let charCode = address.charCodeAt(i);
    if (charCode === 8203 /* Unicode Character 'ZERO WIDTH SPACE' */ || 
        charCode === 160 /* nbsp(non-breaking space) */ || 
        charCode === 32 /* Space */) {
        // skips all space chars
    } else {
        arrAddress.push(address[i]);
    }
}
address = arrAddress.join("");

이 글에서 언급하는 Space 문자로 3개 언급했는데.. 또 있다면 코드에 반영해야 할 것이다. 참고로 Javascript에서 문자열의 실행중 변경은 배열을 사용해야 한다. 즉, Java의 StringBuilder의 용도와 동일하다.

Python의 Thread API

Python의 언어적 한계로 Thread 기능의 지원이 적합하진 않다고 하지만, 문제점을 최대한 개선하여 GIL이라는 장치를 통해 지원한다고 합니다. GIL은 Global Interpreter Lock의 약자입니다. 코드는 다음과 같습니다.

import threading

class T(threading.Thread):
    def __init__(self):
        threading.Thread.__init__(self)
        pass

    def run(self):
        for i in range(100):
             print(self.name, i)

13번 줄의 코드인 self.name은 Thread-n과 같은 스레드의 내부 이름이며, 여기에서 n은 내부 번호입니다. 앞서 정의한 스레드 T의 사용은 다음과 같습니다.

ts = [T() for i in range(4)]

for t in ts:
    t.start()

총 4개의 스레드를 생성하고 start 매서드를 통해 스레드를 시작합니다.