북한의 한글 서체

북한에서 만든 한글 서체의 중요한 특징 중 하나:
ㅌ을 E 모양이 아니라 ㅡ+ㄷ 모양으로 쓰는 걸 선호한다! 즉, 위의 가로줄을 아래의 몸통과 분리해서 따로 적는다는 뜻이다.

사용자 삽입 이미지

물론, 북한 서체 중에도 E자 모양인 물건이 없는 건 아니다.
그러나 일단 북한의 굴림-바탕-돋움-궁서에 해당하는 4대 기본 글꼴인 천리마-청봉-광명-붓글이 모두 ㅌ이 ㅡ+ㄷ모양이니, 북한에서는 이걸 ㅌ의 공식적인 기본형으로 간주하는 듯하다.

남한에서 쓰는 글꼴 중에는 ㅌ이 그렇게 돼 있는 물건은 진짜 궁서체밖에 없지 싶다.
북한이야 원래 문화가 196, 70년대-_-의 복고풍을 추구하고 서체도 순명조 내지 붓글씨 계열을 쓰는 걸 좋아하는 동네이긴 하지만, 명조 계열 서체까지 ㅌ을 그렇게 적는 관행은 남한에서는 좀체 찾아볼 수 없다.

북한과 한글 서체라는 두 분야에 모두 평균 이상으로 관심이 많은 나조차 이걸 눈치채는 데 시간이 굉장히 오래 걸린 이유는, 역시 ㅌ이 자주 쓰이는 자음이 아니기 때문이어서인 것 같다.

두음법칙만큼이나 한글의 자형의 미세한 차이도 남북의 문화 차이를 나타낼 수 있는 잣대가 된 듯하다.
원래 ㅌ의 모양은 ㅡ+ㄷ이 맞다는 설명도 옛날에 본 것 같으나, 그 근거를 모르겠다. 당장 훈민정음해례 같은 엄청 옛날 문헌을 봐도 ㅌ은 E 모양으로 그려져 있는데?

Posted by 사무엘

2013/07/23 08:36 2013/07/23 08:36
, ,
Response
No Trackback , 4 Comments
RSS :
http://moogi.new21.org/tc/rss/response/858

철도 사진 분석 - 2

1. 다음 사진은 현직 초등학교 교사인, 본인의 모 지인이 최근에 보내 준 것이다. (내가 철도광이라는 걸 알고 친히..ㅠㅠ ㄱㅅㄱㅅ!)
애들이 보는 교과서가 아니라 교사용 지도서라서 사진이 흑백이라고 한다.

사용자 삽입 이미지

철덕이라면 철도 관련 사진을 보는 순간 눈에 불꽃이 튀면서 일반인들이 보지 못하는 주변 정보를 모조리 상상하고 유추해 낼 수 있어야 마땅하다.

1번은 대전 국립 중앙 과학관과 엑스포 과학 공원을 잇는 자기 부상 열차이다. 딱 보자마자 알아보시겠는가?

2번은 미카나 파시 같은 기관차는 아니고, 관광용으로 국내에서 최후에 도입했다가 지금은 운행 중지+정태보존 상태로 바뀐 '901호 증기 기관차'이다. 보일러의 양옆에 흰색 금속줄이 놓여 있는 걸 보면 바로 분간 가능하다.
현재 얘는 중앙선 풍기 역에 놓여 있지만, 주변 배경으로나 저 사진이 촬영되던 시기를 감안하면 저 사진은 더 옛날에 경북선 점촌 역에서 촬영된 것이다.

3번은 외형이 워낙 특이하니 인천 지하철 전동차임을 쉽게 분간할 수 있을 것이다. 지상 구간인 귤현-계양 사이에서 촬영되었을 것이다.

기관차라고 이름을 붙여 놓고는 동차를 소개해 놓은 건 3번뿐만 아니라 4번도 마찬가지다.
새마을호 전후동력형 디젤 동차인 건 더 말하면 입만 아플 것이고, 촬영 장소는 아마 승강장의 천장 모양으로 보건대 그냥 서울 역이 아닌가 싶다.

난 그 지인에게 부탁했다.
혹시 가르치는 아이들 중에 철도에 대해 에디슨 같은 호기심과 비범함을 보이는 미래의 꿈나무가 있다면, 날 생각해서라도 최대한 자상하게 지도하고 철덕으로 이끌어 달라고 말이다. ^____^;;

2. 다음 지도를 꺼내서 여기저기 지형을 살펴보고 있었다.
불과 몇 달 전까지만 해도 국내외 주요 지도 사이트들은 신경주 역 주변의 항공 사진이 업데이트되지 않아서 현재의 모습과 지도의 모습이 맞지 않은 듯했는데 지금은 다들 개선되었다.

그런데, 부산 역 주변을 보니 선로에 KTX 한 편성이 놓인 게 보였다. (산천 말고, 1세대 TGV-K 차종)
요놈의 길이를 재 봤더니.. 역시나 진짜로 딱 388m가 맞았다.
항공 사진이란 게 있어서 이런 것도 확인이 가능하다. ^^

사용자 삽입 이미지
 오른쪽의 KTX 제원은 한국어 위키백과 페이지의 화면 캡처이다.

인천 역은 승강장이 두단식일 정도로 진짜 선로의 말단에 자리잡고 있는 반면, 오늘날의 부산 역은 승강장 이남으로도 거의 1km에 가깝게 선로가 더 뻗어 있다.
이것은 원래 부산 역은 지금의 부산 역보다 더 남쪽에 있었기 때문에 그렇다. 지금의 부산 역은 초량 역이었다.
그러던 것이 1953년에 부산 역 대화재 사건이 발생하면서 그 역이 없어지고, 초량 역이 있던 자리에 부산 역이 새로 세워진 것이다.

3. 이건 내가 찍은 사진은 아니다만,
딱 보면.. KTX 경부 고속선 서울-대전 구간이고, 역방향 좌석에서 찍은 것임을 알 수 있다.
전자는 좀 guessing이 가미된 요소이지만, 후자는 사람이 보통 사진을 찍는 방향을 생각했을 때 명확하다.

사용자 삽입 이미지

4. 지금은 수도권 전철 1호선에 [노량진] - 대방 - 신길 - [영등포] - 신도림 - 구로 - 가산디지털단지 - 독산 - [금천구청](구 시흥)으로 역이 무진장 많이 있지만, 경부선 개통 당시에는 [ ]친 역밖에 없었으며 그 구도가 1960년대까지 계속되었다.
노량진과 영등포는 아예 경인선 개통 당시부터 있었던 역이요, (since 1899) 시흥은 부산역과 같이 개통하여 경부선 개통 초기부터 있어 왔다(since 1908).

사용자 삽입 이미지

그러니 1968년에 구로공단에서 제1회 한국 무역 박람회가 개최되었을 때는 '박람회 역'이라는 임시 승강장이 잠시 만들어지기도 했을 정도였다. 주변에 하도 역이 없어서..

대방, 구로, 가리봉(지금의 가산디지털단지) 역은 수도권 전철 1호선과 함께 개통했으며(since 1974)
신도림은 잘 알다시피 서울 지하철 2호선과 함께 환승역으로 개통(since 1984).
신길은 서울 지하철 5호선과 함께 환승역으로 개통(since 1998)했고 독산역도 이때 같이 개통했다.

사진을 보면 영등포-시흥 사이의 역간거리 숫자가 5인지 6인지 8인지 좀 희미한 편인데, 저건 8.2km이다. 어떻게 아냐고? 철도 영업거리표를 찾아보면 된다. 서울 기점으로 영등포가 9.1km이고 금천구청은 17.3km 지점이다.

Posted by 사무엘

2013/07/20 08:37 2013/07/20 08:37
,
Response
No Trackback , 2 Comments
RSS :
http://moogi.new21.org/tc/rss/response/857

3. 더 기괴하고 잉여력마저 의심되는 오버로딩

(1) 비트 연산자도 아니고 논리 연산자 && || !는 오버로딩할 일이 거의 없으며, 각종 C++ 디자인 패턴 책에서도 오버로딩을 권하지 않는 물건들이다. 그 연산자를 건드릴 게 아니라 개체를 건드리는 게 순리이다. 논리 연산자들이 취급할 수 있는 정수나 boolean 값으로 형변환하는 연산자를 제공하는 게 이치에 맞다.

굳이 논리 연산자를 오버로딩해 버리면, 일단 언어가 원래 제공하는 단축연산 기능이 사라지게 된다. 즉, A && B에서 A가 이미 false이면 B의 값은 아예 계산하지 않고 함수를 호출하지도 않는 것 말이다. 오버로딩된 함수는 논리 연산자라도 언제나 A와 B의 값을 먼저 계산한 뒤에 실행된다.

(2) 어떤 개체가 메모리에 차지하는 주소를 얻어 오는 기능은 그 어떤 타입이나 클래스에 대해서도 절대불변으로 동작해야 하는 기능이지 않은지? 마치 개체의 고정된 크기를 얻어 오는 sizeof 연산자처럼 말이다.
그럼에도 불구하고 C++의 단항 & (address-of) 연산자는 오버로딩 가능하다!

class Foo {
    //...
public
    int operator&() { return 0; }
};

void Bar(Foo *p)
{
    //...
}

이렇게 선언하거나 더 얄밉게 연산자 함수를 아예 private로 감춰 버리고 나면,
지역변수나 클래스/구조체의 멤버로 직접 선언된 Foo 개체는 Bar라는 함수에다 넘겨주는 게 불가능해진다. =_=;;;

Foo a; Bar(&a);

이런 테크닉이 무슨 필요나 의의가 있는지는 난 잘 모르겠다.

전통적인 &는 변수의 주소라는 R-value만 되돌리는 연산자인데, 이를 오버로딩하면 &는 참조자 같은 걸 되돌릴 경우 L-value를 되돌리는 것도 가능해진다. 따라서 그 값에 대해서 또 주소를 얻는 &를 적용하는 게 덩달아 가능해진다.
그러나 이 경우 &&를 연달아 쓸 수는 없으며, & &a 같은 식으로 토큰을 분리해 줘야 한다. 예전에 중첩 템플릿 인자를 닫을 때 > 사이에 공백을 넣어 줬던 것처럼 말이다.

(3) 게다가, 우선순위가 가장 낮으며 그저 여러 연산자들을 한데 나열하는 역할만을 하는 콤마 연산자도 오버로딩 가능하다! (,는 오버로딩 없이도 원래 아무 피연산자에 그 어떤 타입이 와도 무조건 괜찮은 유일한 이항 연산자임)
콤마는 함수 인자 구분용으로도 쓰인다는 특성상, 이 연산자는 가변 인자 함수 호출을 흉내 내는 용도로 쓰일 수 있을 것 같다. list, 3, 2, 1, 8, 4; 이라고 써 주고 list.add(3); list.add(2); ... 같은 효과를 낼 수도 있다는 뜻이다. 하지만 이걸 남발하는 건 좀 사악한 짓인 듯.

(4) 기괴한 오버로딩의 진정한 종결자로 내가 최후까지 남겨 둔 건 바로 ->* (pointer-to-member) 이다. 얘는 유사품인 ->하고는 오버로딩을 하는 방식이 사뭇 다르다!
-> 연산자가 아무 인자가 없는 멤버 함수인 반면, ->*는 단 하나의 인자를 받는다. 그 인자는 아무 타입이나 될 수 있으며, ->* 연산자 함수 자체도 다양한 타입으로 오버로딩될 수 있다. 가령,

POINT& operator->*(int x) { return m_pt[x]; }

이렇게 오버로딩이 된 클래스가 있다면

(obj->*0).x = 100;

이런 식으로 활용이 가능하다. 0이 연산자 함수의 인자로 전달된다. 0뿐만이 아니라 당연히 int 변수 n 같은 것도 줄 수 있다. .이나 -> 연산자 다음에는 구조체/클래스의 멤버가 뒤따라야 하는 반면, .*이나 ->* 연산자 다음에는 임의의 타입에 속하는 value가 올 수 있는 구조인 것이다. ->는 가리키는 대상 포인터이지만 .*는 대상으로부터 얻을 오프셋 자체가 고정이 아니라 동적이며, ->*는 대상과 오프셋이 모두 동적임을 뜻한다.

struct A { int x,y; };

struct B { A m_Obj; };

이렇게 A를 멤버로 갖는 B라는 클래스가 있다고 치자.
클래스의 멤버 포인터는 클래스에 종속적이다.
그러므로 클래스 B에 대해서 A에 소속된 멤버 포인터를 적용하고 싶다면 ->* 연산자를 오버로딩하여 다음과 같은 연산자 함수를 써 주면 된다.

int& operator->*(int A::*t) { return m_Obj.*t; }

그러면

B bar;
int A::*temp = &A::x;

bar->*temp = 100;
bar.m_Obj.*temp = 100;

위의 두 구문은

bar.m_Obj.x = 100;

과 동일한 의미를 지니게 된다. 실무에서 이걸 오버로딩할 일이 있을지는 잘 모르겠지만..;;
멤버 변수가 저렇고, 멤버 함수의 포인터에 대해서는 머리가 터질 것 같아서 생략하련다.
C++의 세계가 더욱 심오하게 느껴지지 않는가?

4. C++ 연산자 오버로딩의 한계

(1) 당연한 말이지만 원래 C++ 언어에 없는 새로운 토큰을 만들어 낼 수는 없다. 가령, @, ** 같은 듣보잡 기호를 연산자로 정의할 수는 없다. 특히 *는 포인터의 연쇄 역참조용으로도 쓰이기 때문에 ** 같은 건 C++에서 절대로 토큰으로 쓰일 수 없는 문자열이다.

(2) .(구조체 멤버 참조) .*(멤버 포인터) ::(scope) ?:(조건 판단. 유일한 삼항 연산자) sizeof 연산자는 의미가 완전히 고정되어 있으며 재정의할 수 없다.

(3) C/C++이 원래 정의하고 있는 연산자의 우선순위와 피연산자 결합 방향을 변경할 수는 없다. 그리고 built-in type에 대해 이미 정의되어 있는 연산의 의미를 재정의할 수도 없다.

이런 모든 구체적인 디테일들을 다 명시해야 한다면 C++의 참고용 매뉴얼은 정말 상상을 초월하게 두꺼울 수밖에 없겠다는 게 실감이 간다.

Posted by 사무엘

2013/07/17 08:36 2013/07/17 08:36
Response
No Trackback , 5 Comments
RSS :
http://moogi.new21.org/tc/rss/response/856

오늘은 C++에서 기초적이면서도 아주 심오하고 기괴한 문법 중 하나인 연산자 오버로딩에 대해서 좀 살펴보도록 하자.
정수, 포인터 같은 기본 자료형뿐만 아니라 사용자가 만든 임의의 개체도 연산자를 통해 조작할 수 있으면 천편일률적인 함수 호출 형태보다 코드가 더 깔끔하고 보기 좋아지는 효과가 있다. 물론, 아무 논리적 개연성 없이 오버로딩을 남발하면 코드를 알아보기 힘들어지겠지만 말이다.

C++은 연산자 오버로딩을 위해 operator라는 키워드를 제공한다. 그리고 개체에 대한 연산자 적용은 연산자 함수를 호출하는 것과 문법상 동치이다(syntactic sugar). 가령, a+b는 a.operator +(b) 또는 ::operator +(a,b)와 동치라는 뜻이다. 연산자 함수는 표준 규격이 없이 C++ 컴파일러마다 제각각으로 제정한 방식으로 심벌 명칭이 인코딩된다.

앞에서 예를 들었듯이 연산자 함수는 클래스에 소속될 수도 있고, 특정 클래스에 소속되지 않은 중립적인 전역 함수로 선언될 수도 있다. 클래스의 멤버 함수인 경우 this가 선행 피연산자에 포함된 것으로 간주되어 함수의 인자 개수가 하나 줄어든다. 연산자 함수는 명백한 특성상 default 인자를 갖는 게 허용되지 않는다.

한 클래스와 관련된 처리는 당연히 가능한 한 클래스의 내부에서 다 알아서 하는 게 좋다. 그러니 전역 함수 형태의 연산자 함수는 이항 연산자에서 우리 타입이 앞이 아니라 뒤에 나올 때 정도에나 필요하다. 가령, obj+1이 아니라 1+obj 같은 형태일 때 말이다. 그리고 이 전역 함수는 당연히 클래스의 내부에 접근이 가능해야 연산을 수행할 수 있을 것이므로 보통 friend 속성이 붙는다.

연산자가 클래스 함수와 전역 함수 형태로 모두 존재할 경우엔 모호성 에러가 나는 게 아니라 전역 함수가 우선적으로 선택되는 듯하다. a+b에 대해서 ::operator +(a,b)와 a.operator +(b)가 모두 존재하면 전자가 선택된다는 뜻. 언어의 설계가 원래 그렇게 된 건지는 잘 모르겠다.

본인은 연산자 오버로딩을 다음과 같은 양상으로 분류해 보았다.

1. 쉽고 직관적인 오버로딩

(1) 사칙연산, 대입, 비교, 형변환 정도가 여기에 속한다. 기본 중의 기본이다.
사칙연산을 재정의함으로써 C++에서도 문자열을 +를 써서 합치는 게 가능해졌다(동적 메모리 관리까지 하면서). 그리고 복소수, 유리수, 벡터 같은 복합적인 수를 표현하는 자료형을 만들 수 있게 되었다.

(2) 내부적으로 포인터 같은 외부 리소스를 참조하고 있기 때문에 단순 memcpy, memcmp 알고리즘으로는 대입이나 비교를 할 수 없는 클래스의 경우, 해당 연산자의 오버로딩이 필수이다. 이 역시 문자열 클래스가 좋은 예이다. 대입 연산자는 복사 생성자와도 비슷한 구석이 있다.
대입 연산자는 생성자와 역할이 비슷하다는 특성상, 연산자들 중 상속이 되지 않는다. 모든 클래스들은 상속에 의존하지 말고 자신만의 대입 연산자를 갖추고 있어야 한다는 뜻이다. 단, 순수 대입인 = 말고 +=, -= 같은 부류들은 상속됨.

(3) 비교 연산은 같은 클래스에 속하는 여러 원소들을 다른 컨테이너 클래스에다 집어넣어서 순서대로 나열해야 할 때 매우 요긴하게 쓰인다. 전통적인 C 스타일의 비교 함수보다 훨씬 더 직관적이다.

(4) 형변환 연산자야 상황에 따라 어떤 개체의 형태를 카멜레온처럼 바꿔 주고 개체의 사용 호환성을 높여 주는 기능이다. 포인터나 핸들 하나로만 달랑 표시되는 자료형에 대해서 자동으로 메모리 관리를 하고 여러 편의 기능을 수행하는 wrapper 클래스를 만든다면, 본디 자료형과 나 자신 사이의 호환성을 이런 형변환 연산자로 표현할 수 있다.
문자열 클래스는 const char/wchar_t * 같은 재래식 문자 포인터로 자신을 자동 변환하는 기능을 제공하며, MFC의 CWnd도 이런 맥락에서 HWND 형변환을 지원하는 것이다.

(5) 한편, 비트 연산자는 산술 연산보다야 쓰이는 빈도가 아무래도 낮다. 비트 벡터나 집합 같은 걸 표현하는 클래스를 만드는 게 아닌 이상 말이다.
단, 뭔가 직렬화 기능을 제공하는 스트림 개체들이 << >>를 오버로딩한 것은 굉장히 적절한 선택인 것 같다. MFC의 CArchive라든가 C++의 iostream 말이다. input, output이라는 방향성을 표현할 수 있고 또 비트 shift라는 개념 자체가 뭔가 '이동, 입출력'이라는 심상과 잘 맞아떨어지기 때문이다.

다른 연산자들보다 적당히 우선순위가 낮은 것도 장점. 하지만 산술 연산 말고 비교나 비트 연산자는 <<, >>보다도 우선순위가 낮으므로 사용할 때 유의할 필요가 있다.

2. 아까 것보다는 좀 더 생소하고 어려운 오버로딩

(1) 필요한 경우, operator new와 operator delete를 오버로딩할 수 있다. 물론, 객체를 생성하고 소멸하는 new/delete 본연의 기능을 완전히 뒤바꿀 수는 없지만, 이 연산자가 하는 일 중에 메모리를 할당하여 포인터를 되돌리는 기능 정도는 바꿔치기가 가능하다는 뜻이다. C/C++ 라이브러리가 기본 제공하는 heap이 아닌 특정 메모리 할당 함수를 써서 특정 메모리 위치에다가 객체를 배체하고 싶을 때 말이다.

특히 new/delete는 여러 개의 인자를 받을 수 있는 유일한 연산자 함수이다. size_t 형태로 정의되는 메모리 크기 말고 다른 인자도 받는 다양한 버전을 만들어서 new(arg) Object; 형태의 문법을 만들 수 있으며, 이때 arg는 Object의 생성자가 아니라 operator new라는 함수에다 전달된다. (delete 연산자는 어떤지 잘 모르겠다만..;;)

그리고 이놈은 전역 함수와 클래스 멤버 함수 모두 가능하다. 클래스 멤버 함수일 때는 굳이 static을 붙이지 않아도 이놈은 static이라고 간주된다. 당연히.. malloc/free 함수의 C++ 버전인데 this 포인터가 전혀 의미가 없는 문맥이기 때문이다..

사실, C++은 단일 개체를 할당하는 new/delete와 개체의 배열을 할당하는 new []/delete []도 구분되어 있다. 후자의 경우, 생성자나 소멸자 함수를 정확한 개수만치 호출해야 하기 때문에 배열 원소의 개수를 몰래 보관해 놓을 공간도 감안하여 메모리가 할당된다.
그러나 이것은 언제까지나 컴파일러가 알아서 계산을 하는 것이기 때문에 배열이냐 아니냐에 따라서 메모리 할당/해제 함수의 동작이 딱히 달라져야 할 것은 없다. 굳이 둘을 구분해야 할 필요가 있나 모르겠다.

(2) ++, --는 정수나 포인터 같은 아주 간단한 자료형과 어울리는 단항 연산자이다. 그런데 개체의 내부 상태를 한 단계 전진시킨다거나 할 때... 가령, 연결 리스트 같은 자료형에서 iterator를 다음 노드로 이동시키는 것을 표현할 때는 요런 물건이 유용하다. 난 파일 탐색 함수를 클래스로 만들면서 FindNextFile 함수 호출을 해당 클래스에 대한 ++ 연산으로 표현한 적이 있다. ㅎㅎ

++, --는 전위형(prefix ++a)과 후위형(postfix a++)이 둘 존재한다. 후위형 연산자 함수는 전위형 연산자 함수에 비해 잉여 인자 int 하나가 추가로 붙는다. 그리고 후위형 연산자는 자신의 상태는 바꾸면서 바뀌기 전의 자기 상태를 담고 있는 임시 객체를 되돌려야 하기 때문에 처리의 오버헤드가 전위형보다 더 크다. 아래의 코드를 참고하라.

A& A::operator++() //++a. a+=1과 동일하다.
{
    increment_myself();
    return *this;
}

A A::operator++(int) //a++.
{
    A temp(*this);
    increment_myself();
    return temp;
}

보다시피, 전위형과 후위형의 실제 동작 방식은 전적으로 관행에 따른 것이다. 전위형이 후위형처럼 동작하고 후위형이 전위형처럼 반대로 동작하게 하는 것도 프로그래머가 마음만 먹으면 엿장수 마음대로 얼마든지 가능하다.
정수의 경우 프로그래머가 for문 같은 데서 a++이라고 쓴다 해도 똑똑한 컴파일러가 굳이 임시 변수 안 만들고 ++a처럼 최적화를 할 수 있다. 그러나 사용자가 오버로딩한 연산자는 실제 용례가 어찌 될지 알 수 없으므로 컴파일러가 선뜻 최적화를 못 할 것이다.

일반적으로 a=a++의 실행 결과는 컴파일러의 구현 내지 최적화 방식에 따라 들쭉날쭉 달라지는 것으로 잘 알려져 있다. (당장 비주얼 C++와 xcode부터가 다르다!) 또한 a가 일반 정수일 때와, 클래스일 때도 동작이 서로 달라진다. 이식성은 완전히 안드로메다로 간다는 뜻 되겠다. 더구나 한 함수 호출의 인자 안에서 a와 a++이 동시에 존재하는 경우, 어떤 값이 들어가는지는 같은 컴파일러 안에서도 debug/release 빌드에 따라 차이가 생길 수 있으므로 이런 모호한 코드는 작성하지 않아야 한다.

(3) 포인터를 역참조하는 연산자인 * ->는 원래는 포인터가 아닌 일반 개체에 대해서 쓰일 수 없다. 그러나 C++은 이런 연산자를 오버로딩함으로써 인위적인 '포인터 역참조' 단계를 만들 수 있으며, 이로써 포인터가 아닌 개체를 마치 포인터처럼 취급할 수 있다. 형변환 연산자와 비슷한 역할을 하는 셈이다.

C++ STL의 iterator가 좋은 예이고, COM 포인터를 템플릿 형태로 감싸는 smart pointer도 .을 찍으면 자신의 고유한 함수를 호출하고, ->를 찍으면 자신이 갖고 있는 인터페이스의 함수를 곧장 호출하는 형태이다.
-> 연산자는 전역 함수가 아니라 인자가 없는 클래스 멤버 함수 형태로 딱 하나만 존재할 수 있다. 다음 토큰으로는 구조체나 클래스의 멤버 변수/함수가 와야 하기 때문에 리턴 타입은 구조체나 클래스의 포인터만이 가능하다.

(4) []도 재정의 가능하고 심지어 함수 호출을 나타내는 ()조차도 연산자의 일종으로서 재정의 가능하다!
[]의 경우 클래스가 포인터형으로의 형변환을 제공한다면 정수 인덱스의 참조는 컴파일러가 자동으로 알아서 그 포인터의 인덱스 참조로 처리한다. 그러나 [] 연산자 함수는 굳이 정수를 받지 않아도 되기 때문에 특히 hash 같은 자료구조를 만들 때 mapObject[ "H2O" ] = "산소"; 같은 구문도 가능해진다. 단, 진짜 고급 언어들처럼 인자를 여러 개 줄 수는 없다. map[2, 5] = 100; 처럼 할 수는 없다는 뜻.

()도 사정이 비슷한지라, 클래스가 함수 포인터로의 형변환을 제공한다면 굳이 () 연산자를 재정의하지 않아도 개체 다음에 곧장 ()를 붙이는 게 가능은 하다. 그러나 그 함수 포인터는 this 포인터가 없는 반면, () 연산자 함수는 this를 갖는 엄연한 멤버 함수이다.
함수 포인터로의 형변환 연산자 함수는 언어 문법 차원에서 토큰 배열의 한계 때문에 대상 타입을 typedef로 먼저 선언해서 한 단어로 만들어 놔야 한다.

Posted by 사무엘

2013/07/15 08:35 2013/07/15 08:35
Response
No Trackback , 5 Comments
RSS :
http://moogi.new21.org/tc/rss/response/854

본인은 처음에 새마을호에서 시작되었던 철도 관심사가 KTX, 전기 기관차를 거쳐 요즘은 증기 기관차로까지 이어지고 있다.

“옛날에는 기관차의 이름을 지금처럼 0000호대라는 번호로 붙인 게 아니라 미카, 파시, 마터, 허기 등의 이름으로 붙였구나.
고 김 재현 기관사가 몰았던 증기 기관차(미카)와, 경의선 장단 역에 방치되어 있던 녹슨 증기 기관차(마터)는 차종이 다른 것이었구나.”
같은 식이다.

증기 기관차까지 마스터해야 우리나라 근현대사와 철도를 연계하여 다 꿰뚫은 진정한 철덕이 될 수 있다는 걸 깨우쳤다. 이렇듯, 한번 철도의 맛을 접한 철덕은 차량, 시설, 지리, 역사 등 분야별로 철도 안에서 계속 골고루 자라야 한다. 그 성장이라는 게 금방 빨리 되는 게 아니다.

철도 기관차의 동력원은 크게 증기, 디젤, 전기로 나뉜다. 내연기관 기반인 디젤은 동력비 조절을 어떻게 하느냐에 따라서 기어/유압/전기 변환식으로 분류되고, 전기는 전기대로 사용하는 전기의 종류와 집전 방식에 따라 다양한 분류 기준이 존재한다.

이런 것처럼 증기 기관차에도 증기에만 적용되는 중요한 분류 기준이 하나 있다.
바로, 구동하는 데 필요한 물과 석탄을 기관차 내부에 보관하느냐, 혹은 기관차의 바로 뒤에 연결된 별도의 탄수차로부터 공급받느냐는 것이다. 전자식은 탱크식(tank)이라고 하고, 후자는 텐더식(tender)이라고 부른다.

이것은 기관차가 사용하는 물과 석탄의 부피가, 내연 기관이 사용하는 기름의 그것보다 크다는 점 때문에 생긴 특성이다. 보일러의 부피도 내연기관의 엔진보다 더 커야 겨우 그 집채만 한 쇳덩어리를 굴릴 만한 수증기를 만들 수 있다. 그 이유는 증기 기관은 디젤 엔진보다 태생적으로 출력이 약하기 때문이다.

그러니 물과 석탄을 기관차 안의 좁은 공간에다가만 싣고 다녀서는 도저히 장거리를 달릴 수 없다. 우리가 기억하는 거의 모든 증기 기관차는 텐더식이며, 이는 심지어 <은하철도 999>에 그려진 열차도 마찬가지이다.
탱크식은 단거리 소형 열차에 한정된 형태로만 쓰인다. 이는 디젤로 치면 자동차처럼 기어로 변속하는 소형 기관차와 같은 위상이라고 볼 수 있다.

믿거나 말거나, 1899년에 개통한 우리나라 최초의 철도인 경인선 노량진-제물포(오늘날의 동인천)에 처음으로 다녔던 열차는 '모가'(mogul의 변형) 형 증기 기관차인데, 이 역시 아담한 탱크식이다. 더 큰 텐더식 열차는 경부선과 경의선이 뚫린 1906년 이후에야 슬금슬금 국내에 도입되기 시작했다.

사용자 삽입 이미지

사용자 삽입 이미지사용자 삽입 이미지
한반도를 최초로 달렸던 철마가 바로 이 물건이라니! 오오오오~~ 굴뚝이 깔때기 같은 모양이다.
오늘날 경인선을 달리고 있는 VVVF 전동차와 비교해 보면 가히 격세지감이 아닐 수 없다. 같은 1435mm 표준궤를 달리는 철도 차량이 100년 사이에 이렇게 변할 수가 있을까?
철도에 대해서 좀 아는 사람이라면, 증기 기관차를 구경할 일이 있을 때 이놈이 탱크식인지 텐더식인지부터 먼저 눈여겨보게 될 것이다.

여담으로 영어 단어 공부를 좀 하자면,
tender는 ‘부드러운, 여린’을 뜻하는 형용사의 뜻이 있으며 특히 영어 성경에서는 tender mercies(친절한 긍휼)라고 해서 아주 즐겨 쓰인다. 그 반면, tender는 거룻배, 관리자, 탄수차 등을 뜻하는 명사도 되며, 둘은 어원상 아무 관계가 없는 동명이의어이다.

그리고 보너스.
얼마 전에 본인은 6·25 전쟁 당시에 총격을 받고 장단 역 구내에 버려졌던 '마터' 형 증기 기관차의 사진을 공개한 적이 있다.
'모가'가 우리나라 최초의 증기 기관차라면, '마터'는 일제 강점기 말기인 1940년대에 처음 제작되었으며, 크기도 크고 힘도 좋은 신형(?) 증기 기관차이다. 탱크식이 아니라 텐더식인 것은 두 말할 나위도 없다.

당시 '마터'는 한반도 중· 북부 지방에서만 운행되었으며 이들은 전부 오늘날의 북한에 속한 지역이기 때문에 남한과는 영 인연이 없는 열차였다. 지금이야 우리나라에도 태백선, 영동선 같은 산악 철도가 있지만, 그건 예전 글에서도 알 수 있듯, 해방과 분단 후 한참이 지나서야 우리나라가 독자적으로 만든 철도이기 때문에 일제 강점기나 북한하고는 별 상관이 없다.

다음은 이 '마터'형 증기 기관차가 파괴되고 녹슬기 전의 원래 모습이 어떠했을지를 유추하게 해 주는 아주 좋은 자료이다. 북한에서 이 증기 기관차를 모델로 우표를 만든 적이 있다. 모든 증기 기관차는 원래 검은색 도색이며, 이는 저 기관차도 예외가 아니다. 또한, 파괴된 기관차 잔해는 앞부분의 좌우에 씌워진 철판 벽이 없음을 알 수 있다.

사용자 삽입 이미지

Posted by 사무엘

2013/07/13 08:28 2013/07/13 08:28
,
Response
No Trackback , No Comment
RSS :
http://moogi.new21.org/tc/rss/response/853

1. 협동체와 광동체

철도에는 잘 알다시피 궤간(케이프/협궤 1067, 스티븐슨/표준궤 1435 등)이라는 게 존재한다. 그런데 여객용 비행기에도 기체의 폭(그리고 크기도 덩달아)을 구분하는 간략한 잣대가 존재한다.
바로 협동체와 광동체.
객실에 복도가 한 줄로만 존재하는 기체는 협동체이고, 두 줄 존재하는 기체는 광동체이다.

이 기준에서 보면, 육상 교통수단들은 버스든 열차든 선택의 여지 없이 복도가 한 줄만 존재하는 협동체이다. 차로의 폭과 궤간의 제약에 곧장 걸리기 때문이다. 2-2가 가장 무난하고 보편적이며, 우등 고속버스나 KTX 특실 정도만이 2-1이다. 그러고 보니 옛날에 우리나라 철도엔 2-3짜리 아주 불편하고 열악한 객차도 있긴 했는데 다 지나간 옛날 이야기이다.

배야 그런 구분이 무의미할 정도로 넘사벽급의 대형화가 가능하니 논외이다.
그 반면 비행기는 폭에 관한 한, 둘의 중간 위상에 속하는지라 한 줄 아니면 두 줄이라는 구분이 존재하는 것이다.
협동체는 2-2 또는 끽해야 3-3이 보통이다. 그러나 광동체는 2-4-2, 3-3-3, 3-4-3 등의 좌석 배치가 가능하다.

세월이 흐르면서 항공 교통 시장이 커지고, 한번에 승객을 최대한 많이 태우는 비행기가 개발되어야만 했다.
허나 비행기는 무슨 열차처럼 길이를 무한정 길게 할 수 없다. 비행기를 무슨 굴절 아코디언 버스 같은 형태로 만들 수는 없는 노릇이니, 기체가 너무 길어지면 택싱 때 활주로의 최소 회전 반경에 걸리고 공항 격납고 같은 주기(駐機) 시설의 크기에도 부담을 끼친다.

그럼 높이는 어떻냐는 발상이 나온다.
육상 교통수단 중에는 2층 버스도 있고 국내엔 열차 중에 ITX-청춘 같은 2층 열차가 있다.
더구나 활주로 같은 공항 시설들도 위쪽은 뻥 뚫린 하늘이니, 비행기의 높이를 살짝 높이는 것은 항공역학적인 문제만 없으면 현실적으로 가장 제약이 덜한 시도일지도 모른다.

오늘날은 기술이 발달한 덕분에 드디어 실제로 에어버스 A380 같은 2층 여객기가 등장하기도 했다.
하지만 옛날에는 비행기에서 2층 객실은 전좌석의 비상 탈출구 설치 요구조건을 만족할 수 없어서 이마저도 여의찮았다.

민항기에는 “비상시에는 인근의 비상구를 이용하여 기내의 모든 승객이 90초 안에 밖으로 탈출이 가능하게 설계되어야 한다”라는 규정이 있다. 최근의 아시아나 항공 소속 여객기의 착륙 사고(추락 사고가 아니다)를 통해서도 이 규정의 중요성이 잘 부각되어 있듯이 말이다. 그런데 객실이 2층이 되면 이게 쉽사리 가능해질까?

그러니 길이와 높이 다음으로 비행기의 몸집을 미묘하게 더 키우기 위해 폭이 고려되었으며, 그 결과 한 줄에 10명 정도를 실을 수 있는 광동체 여객기가 개발되었다. 비행기는 무슨 열차 수준으로 폭을 꽉 맞춰야 할 필요는 없으니 말이다.

어차피 비행기의 실질적인 크기를 결정하는 것은 날개의 폭이나 수직미익의 높이 같은 극단적인 요소이다. 그런 규격을 건드리지 않는 한도 내에서 동체의 크기만 살짝 키운 것은(나머지는 엔진의 성능 같은 걸로 보강?) 기존 공항이나 격납고에서의 운용에 별다른 문제를 끼치지도 않았다고 한다.

역사상 최초로 상업용 양산에 성공한 ‘광동체’ 여객기는 그 이름도 유명한 보잉 747이다. 그러고 보니 인텔의 80x86 CPU만큼이나 보잉도 그냥 숫자만으로 제품명을 정하는 걸 좋아하는 것 같다! 경쟁사인 에어버스는 앞에A자라도 붙이는데.. (에어버스가 그럼 AMD인 거냐!)

보잉 747은 에어버스 A340, A380과 더불어 엔진이 4개 달린 얼마 안 되는 비행기이기도 하다. (외형을 보면, 날개 하나에 팬이 2개 달려서 총 4개. 단, 엔진들이 양 날개에 균일한 간격과 위치에 놓여 있지는 않은 듯.)

사용자 삽입 이미지
나머지 거의 모든 비행기들은 양쪽에 하나씩 그냥 2개이며, 요즘은 광동체급의 대형 여객기도 그러하다.
자동차 엔진도 기술이 워낙 발달해서 2000cc만으로 30년 전의 3000cc 이상급 엔진의 출력을 내는데, 이와 같은 맥락으로 보면 되겠다.

물론 A380은 워낙 덩치가 크기 때문에 응당 4엔진이다. 보잉 747을 제치고 세계에서 가장 큰 여객기의 타이틀을 차지했다.

2. A380

747은 1등석-비즈니스석을 없애고 전부 이코노미로 개조할 경우 520여 명이 탈 수 있다. 일본은 실제로 그렇게 개조를 한 뒤 747을 국내선에다 굴리고 있다.
일본은 신칸센 열차를 5분 간격으로 지하철처럼 굴리고, 지하철도 출퇴근 시간엔 좌석을 접고 모든 승객을 입석으로 만들어서 굴리기까지 하는 콩나물 시루 같은 나라이다. 비행기도 그런 식으로 운영하는 게 그다지 놀랄 일은 아닐 듯.

그런데 A380은 800에서 무려 1000명까지도 탑승이 가능하다고 한다. 이 정도면 진짜 KTX 수준이다. 그 인원을 태우고 선로 위를 달리는 게 아니라 아음속으로 하늘을 난다니..;; 747은 조종석과 특실만 2층이지만, A380은 아까도 말했듯이 실제 2층 객실이 있다.

사용자 삽입 이미지
사실, 1985년에 일본에서 JAL123 추락 사고가 난 뒤로는 단일 기체에 500명이 넘는 너무 많은 인원을 태우는 건 안전상 꺼리는 분위기가 일어났었다. 하지만 지금은 그것도 다 옛날 이야기가 됐나 보다.

3. An-225 화물기

그럼, A380보다 더 큰 비행기가 설마 있을까?
항덕이라면 이미 알고 있겠지만, 안토노프(Antonov) An-225라는 수송기가 오늘날 세계에서 가장 큰 비행기이다.
이건 크고 아름다운 걸 추구했던 구소련 시절의 산물이다. 냉전 시절에 차르 봄베라고 해서 세계에서 가장 큰 핵무기를 만들어 실험용으로 터뜨린 동네도 저기이다.

사용자 삽입 이미지

An-225는 1988년에 단 한 대밖에 생산되지 않은 명물이다.
저 정도 크기면 탱크, 우주왕복선 등.. 무거운 기계류들을 못 실을 게 없었을 것이다. 정작 미국은 거대한 자기네 우주왕복선을 747 개조 수송기로 날랐는데 말이다.
사진을 통해 알 수 있듯.. An-255는 엔진이 무려 6개가 달려 있다!

활주로에 끼치는 무게 부담을 줄이려고 랜딩기어는 7열로 늘어서 있었다.
그럼에도 불구하고 이 비행기가 한번 착륙하고 나면 어지간한 공항의 활주로는 열과 충격 때문에 남아나질 못했다고 한다. 이륙하는 데도 3km가 훨씬 넘는 긴 활주거리가 필요하다.

저게 우리나라에 올 일이 있을지는 모르겠지만, An-225급의 비행기가 무사히 뜨고 내릴 수 있는 공항은 국내에서는 인천 공항의 4km짜리 제3활주로밖에 없다고 한다. 원래 이 광활한 활주로는 A380을 모시려고 만들어진 신설 활주로이다.

4. 비행기 조종 면허

자동차의 운전 면허 체계는 최소한의 유동성이 있다. 기본적으로 대형차 면허는 소형차 면허도 덩달아 포함하는 구조이다.
그리고 면허는 차체의 크기뿐만 아니라 차량의 성격(개인용/영업용), 법적으로 책임질 수 있는 승차 인원수에도 영향을 받는다. 그렇기 때문에 1종 보통 면허로 승합차는 15인승까지밖에 못 몰지만, 트럭은 대형 버스급의 11톤까지도 몰 수 있다.

그러나 비행기 조종은 그렇지 않다. 소형이든 대형이든 무조건 단일 기종만 몰 수 있다. 747로 면허를 딴 파일럿은 오로지 747만 조종할 수 있지, 비슷한 급의 광동체 여객기라고 해서 787이나 767 같은 건 조종할 수 없다. 그렇게 조종 면허를 상호 호환시키기에는 비행기의 내부 구조가 너무 다르기 때문이 아닌가 싶다.

이런 이유로 인해 영세/저가 항공사들은 보유 기종을 무조건 보잉 737 같은 식으로 통일하는 게 필수이다. 다양한 기종이 존재하면, 골치 아파지는 게 한둘이 아니기 때문이다.
또한, 민항기 시장에 신규 업체가 진출하려면 “자사의 기체는 보잉 xxx 면허와 완전 호환” 이런 식으로 선전을 했어야 하지 않나 싶다. 과거에 에어버스가 처음 끼고 들어올 때는 어땠는지 모르겠다.

Posted by 사무엘

2013/07/10 08:38 2013/07/10 08:38
,
Response
No Trackback , 2 Comments
RSS :
http://moogi.new21.org/tc/rss/response/852

두 벡터의 내각을 이등분하기

원점 O에서 시작하는 벡터 A, B가 있다. 그런데 A와 B가 형성하는 내각을 이등분하는 중앙을 지나는 벡터 C를 구하려면 어떡하면 좋을까? 각도를 결정하는 방향만 정확하게 나오면 되며, 길이가 어떻게 되는지는 신경 쓰지 않아도 된다.

사용자 삽입 이미지

단순히 벡터 A와 B를 더하기만 해서는 내각을 정확하게 이등분할 수 없다는 것을 알 수 있다.
더하기만 해서 얻은 벡터는 삼각형 OAB의 '무게중심'을 지나게 된다.
그러나 내각을 이등분하는 벡터는 삼각형 OAB의 '내심'을 지나게 해야 하기 때문이다.

이 문제는 의외로 어렵지 않다.
선분 AB의 위에 있는 점 C를 설정하되, 선분 OA: OB의 길이의 비와 선분 AC: BC의 길이의 비가 일치하는 지점 C를 찾으면 된다. 그러면 원점에서 시작하는 벡터 C가 바로 벡터 A와 B의 내각을 이등분하는 벡터가 된다.

그렇게 되는 이유를 해석학적으로 따져 보면 다음과 같다.

위의 그림에서 점 A의 좌표는 (1, tan α)이고 B의 좌표는 (1, tan(α+2β) )이다.
그리고 선분 OA의 길이는 피타고라스의 정리에 따라 sqrt(1 + (tan α)^2)이요, 선분 OB의 길이는 더 복잡한 sqrt(1 + (tan (α+2β))^2)가 되는데..

이 둘의 비율이 AC와 BC의 길이의 비와 같다는 뜻이다. AC와 BC는 각각 (tan α+β - tan α), (tan α+2β - tan α+β)로 표현될 것이다.
한쪽은 탄젠트값의 제곱에다가 제곱근이 나오고, 다른 한쪽은 제곱 연산은 없지만 서로 다른 탄젠트 함수의 뺄셈이 나온다. 언뜻 보기에 둘은 서로 비슷한 구석을 찾을 수 없다. 그렇다면 이들이 비율이 서로 일치한다는 걸 어떻게 보일 수 있을까?

사용자 삽입 이미지

여기서 탄젠트 제곱과 제곱근을 쉽게 정리하는 방법이 있다. tan x = sin x / cos x이므로, 1을 분모와 분자가 모두 cos^2 x 인 분수로 간주하여 1 + tan^2 x는 (cos^2 x + sin^2 x)/cos^2 x라고 볼 수 있다.
그럼 분자는 얼씨구나 1로 약분된다. 근호 안에는 1/cos^2 x밖에 남지 않으니, 전체 식은 단순히 1/cos x로 줄어든다.

비례식에서 내항과 외항의 곱은 같아야 하므로, 내항의 곱을 분자에, 외항의 곱을 분모에다 얹은 분수를 설정해 보겠다. 이 수의 값이 1이면 목적이 달성되는 것이므로 어느 걸 분자에, 어느 걸 분모에 얹을지는 그리 중요하지 않다.
식에서는 α+2β, α+β, α라는 세 종류의 각이 쓰이는데, 일단 시각적인 혼동을 줄이기 위해서 앞의 두 아이템을 이제부터는 각각 A, B라는 매크로로 치환하였다.

사용자 삽입 이미지

이제 예전보다 문제가 꽤 단순해졌다.
분자와 분모가 또 분수로 구성되어 있는데, 이것을 통분하는 방법은 간단하다. 분자와 분모에 모두 똑같이 cos A cos B cos α를 한꺼번에 곱해 주면 된다.
그러면 각 분자와 분모에 이중으로 분모로 남아 있던 cos α나 cos A는 약분되어 없어지고, tan 함수도 내부적으로 갖고 있던 cos 나눗셈이 약분되면서 sin으로 바뀐다. 그리고 약분되지 않은 변수에 속하는 cos만이 남는다.

사용자 삽입 이미지

그 뒤의 절차는 일사천리이다.
sin 함수와 cos 함수의 곱이 규칙적인 패턴으로 남는데, 이것은 딱 정확하게 sin(x-y) 꼴로 정리가 된다.
그리고 이제야 매크로 A, B를 원래의 각으로 전개해 보면, A-B와 B-α의 각은 애초에 같은 값이었다는 것을 알 수 있다. 따라서 분자와 분모는 동치이고 원래의 비례식도 항등식으로서 성립한다는 게 밝혀진다.

뭔가 당연한 사실을 필요 이상으로 너무 복잡하게 파헤친 거라는 느낌이 든다. =_=
삼각함수, 벡터 이런 쪽은 컴퓨터에서 기하를 다루는 데 없어서는 안 될 마법과 같은 도구임이 분명하다.

Posted by 사무엘

2013/07/07 08:32 2013/07/07 08:32
, ,
Response
No Trackback , a comment
RSS :
http://moogi.new21.org/tc/rss/response/851

수인선이라 하면 철덕이라면 모르는 분이 없을 것이다. 중앙선 및 경춘선보다는 살짝 이른 1937년 8월 5일에 개통하여 대한민국 최후의 협궤 철도로 남아 있었지만 1995년 12월 31일을 끝으로 운행이 중단된 추억과 비운의 노선 말이다.

단, 최후까지 살아 있던 구간은 인천-수원 전체가 아니라 한대앞-수원 사이의 비교적 한적한 구간이다. 한적하다는 말은 재개발을 위해 선로를 철거해야 할 필요가 없다는 뜻이지만, 뒤집어 생각하면 여객 수요도 안습하다는 뜻이니 아이러니가 아닐 수 없다.

‘운행 중단’ 상태라지만 실질적으로는 폐선이나 마찬가지였다. 그런데 열차가 다니지 않게 된 선로를 곧장 악착같이 모조리 철거한 것도 아니었다. 관리가 중단된 협궤 선로는 이내 시뻘겋게 녹이 슬고 잡초로 뒤덮이기 시작했다. 이런 것은 일상적으로 보기 쉽지 않은 구경거리이기 때문에 철덕들의 주목을 받게 되었다.

이에 본인은 지금으로부터 무려 8년 전인 지난 2005년에 상록수-한대앞 역 사이의 수인선 선로 흔적을 답사한 적이 있다. 그러나 수인선의 표준궤 복선 전철 공사가 진행되고 거기에 있던 선로는 의외로 얼마 못 가 철거되었다. 사진을 찍어 놓길 잘했다. 본인은 별다른 의심의 여지 없이 이제 수인선 협궤 선로 흔적은 전혀 남아 있지 않다고 생각하기 시작했다.

그러나 그 추측은 사실이 아니었다.
한대앞 바로 다음의 중앙-고잔 사이에 선로가 아직까지 의외로 잘 보존되어 있고, 일부 구간은 안산시에서 관광 시설로 조성해 놓기까지 했다는 첩보를 입수했다. 의외로 각종 위키 부류의 정보 사이트에서도 수인선 잔여 구간에 대한 설명은 별로 없는 듯했다.

그래서 본인은 석가탄신일 연휴 때 곧장 안산으로 달려갔다. 그 날은 마침 사랑 침례 교회의 정 동수 목사님께서 뉴에이지 특강을 했는데, 안산선과 수인선 답사를 먼저 한 뒤, 안산에서 상대적으로 가까이 있는 편인 그 교회에서 강의도 듣고 왔다. 이렇게 동선을 효율적으로 활용했다. ㅎㅎ

사용자 삽입 이미지
예정에 없었지만, 잠시 반월 역 주변의 사진을 먼저 카메라에 담았다.
세상에 이렇게 전원적이고 산과 들로 뒤덮인 전철역이 또 있을까 싶다. 안산선에서만 볼 수 있는 풍경이다.
사용자 삽입 이미지
반월 역은 굉장히 드문 특성을 여럿 갖춘 특이한 역이다.
출입구가 하나밖에 없으며(이런 역도 몹시 드문데), 역무 시설과 승강장이 모두 지상 평지이면서 선로 횡단은 육교가 아니라 지하도로 한다. 지하철과의 환승역이 아니면서 이런 구조로 만들어진 역은 구일이나 대방 역 정도밖에 없을 것이다.
역 입구엔 작게나마 광장도 있다.

잘 알다시피 반월과 다음의 상록수 사이는 거리가 3.7km가량으로 수서-복정급으로 매우 길다. 두 역은 지상이지만 잠시 몇백 m 길이의 터널도 지나며, 아래로는 서해안 고속도로를, 그리고 위로는 경부 고속선을 모두 구경할 수 있다. 상당히 긴 역간거리에도 불구하고, 지형적인 특성으로 인해 이 사이에는 역이 또 생길 여지가 거의 없다.

이런 점을 염두에 두고 본인은 여행을 계속했으며, 드디어 중앙 역에 도착해서 내렸다. 그랬더니..

사용자 삽입 이미지
진짜로 그분이 내 눈에 펼쳐졌다! 하앍하앍...;;
한대앞 역의 경우(그리고 안산 역도), 안산선의 승강장도 지상 평지이다 보니 수인선과 승강장이 나란히 건설되는 게 가능했던 반면, 중앙이나 고잔 역은 안산선 선로가 고가로 건설되어 있기 때문에 평지인 수인선은 역의 밖에 이렇게 있을 수밖에 없다.
금정 쪽으로 되돌아가는 한대앞 방면으로도 수인선 선로가 살짝 있긴 했지만 얼마 못 가 끊어졌다.
사용자 삽입 이미지
사용자 삽입 이미지
선로 주변은 그야말로 경치 대박.
사용자 삽입 이미지
한글은 그렇다 쳐도 영문 서체는 마치 Mac OS 클래식의 서체와 닮은 것 같다.
이런 클래식 역명판도 누가 잘 보존해 놔야 할 텐데 말이다.
과거엔 이곳에 수인선 승강장이 있었기 때문에, 열차 승강장도 아니고 역의 외벽에 이런 물건이 붙어 있는 것이다.
사용자 삽입 이미지
사용자 삽입 이미지
길은 계속 이렇게 이어진다.

사용자 삽입 이미지
사용자 삽입 이미지
고잔 역에 가까워지자 웬 이런 시설물도 있었으나, 식물 넝쿨 같은 건 없었다.
그래도 아까보다는 주변 식물들의 키는 낮아져서 시야가 확 트여 보인다.

사용자 삽입 이미지
심지어 수인선 고잔 역 승강장과 열차를 재연해 놓은 시설물도 있었다.
안산선의 역들 중 수인선을 가장 잘 보존해 놓은 구간은 중앙-고잔이며, 역 하나만 꼽자면 고잔 역 주변인 듯했다.

고잔 역은 수인선 시절부터 있었던 역일 뿐만 아니라 안산선이 개통한 뒤에도 한동안 수인선 영업만 하고 안산선 쪽 승강장은 수 년 뒤에 생겼을 정도이다. 그 정도로 정서적으로 수인선이 ‘갑’이었던 역이기 때문에 보존 시설도 고잔 역을 중심으로 생긴 게 아닌가 싶다.
그 반면, 그 옆의 초지(구 공단) 역은 그렇지 않다. 수인선이 본격적으로 망해 가던 1994년에 추가로 생긴 역이기 때문이다.

사용자 삽입 이미지
고잔 역을 지나고부터는 수인선 선로는 다시 잡초로 무성하게 덮이더니, 나중에는 안산선으로부터도 멀어지고 개천과 철길 공사장(원시-소사선!)에 가려져 선로가 더 진행되지 않았다.

땡볕에서 중앙-고잔-초지 사이의 거의 3km에 달하는 거리를 걸으면서 수인선 성지순례를 마쳤다. 그러고 보니 광역전철 분당선이 첫 개통한 날이 반대로 수인선의 상당 구간이 폐선된 날이기도 하다는 걸 알게 됐다. 마치 KTX가 개통한 날이 교외선 열차가 없어지고 경춘선 통일호가 없어진 날이기도 하듯이 말이다.

지금 오이도 역은 과거의 수서 역과 비슷한 위상이 돼 있다. 옛날에는 3호선의 남쪽 종점이 수서였고, 동시에 노란 분당선의 북쪽 종점도 수서였으며 둘은 한데 이어진 노선이라는 성격이 짙었다.
그랬던 것처럼 지금은 4호선의 남쪽 종점이 오이도이고, 동시에 분당선과 직결될 예정인 노란 수인선의 종점도 오이도인 것이다.

Posted by 사무엘

2013/07/04 08:27 2013/07/04 08:27
, , ,
Response
No Trackback , 2 Comments
RSS :
http://moogi.new21.org/tc/rss/response/850

날개셋 한글 입력기 7.0

마지막 버전의 공개 이후로 4개월이 넘는 시간 만에 드디어 <날개셋> 한글 입력기 7.0이 나왔다.
6.8 이후로 내부적으로 굉장히 많은 변화를 겪었으며, 지난 4월에 한번 중간 개발 근황을 올린 이후로도 또 바뀐 게 많다.

도대체 더 만들거나 개선해야 하는 기능이 아직 얼마나 남아 있을까? 이제 7.x가 이 프로그램의 거의 마지막 메이저 버전이 되지 않을까 하는 두려운 생각도 들지만, 시간이 흐르면 또 생각이 달라질지도 모른다.

1. 아이콘

아이콘은 비록 프로그램의 동작과 직접적인 관계가 있는 요소는 아니지만 그래도 사용자에게 프로그램의 첫인상을 결정하는 중요한 외모에 속한다. 이번 7.0 버전은 구현체를 구성하는 EXE 형태의 프로그램들의 아이콘이 환골탈태했다. 짠~

사용자 삽입 이미지

윗줄부터 좌에서 우로 1 2 3 / 4 5 6으로 번호를 매기자면,
편집기(분홍 2), 변환기(노랑 1), 입력 패드(청록 3)의 순이다.

새로운 아이콘은 요즈음 MS가 Windows 8 이래로 추구하고 있는 간결한 디자인 컨셉을 반영함과 동시에, 프로그램의 성격을 함축적으로 드러내고 이들이 동일 브랜드에 소속된 프로그램임을 나타낼 수 있는 형태로 그려졌다.
먼 옛날, 2004년의 3.0 버전부터 거의 9년 동안 사용되어 온 편집기의 빨간 수첩 아이콘(6)은 드디어 역사 속으로 사라질 것이다.

편집기는 1.x 시절부터 통용되어 온 익숙한 빨강 계열 색상을 반영하면서 종이에도 펜으로 뭔가를 쓰는 도구, 즉 텍스트 편집기임을 형상화했다.
변환기는 뭔가 변환을 하는 프로그램이 전통적으로 사용하는 상징인 동그란 화살표를 반영했다.
입력 패드는 '터치 입력'을 표현하기 위해 종전의 태블릿 그림 대신 그냥 손가락을 형상화했다.

3개 프로그램의 아이콘을 16*16, 32*32, 48*48까지 다 그리는 데 이틀이 꼬박 걸렸다. 모두 도트 노가다의 산물이다. -_-;;
그러고 보니 사각형 밑으로 알파 채널이 가미된 어두은 그림자도 넣었어야 했는데.. 일단 제낀다.

예전 글에서 잠시 소개한 적이 있는데,
<날개셋> 편집기가 1.x~2.x 시절에 최초로 사용한 16컬러짜리 빨간 수첩 아이콘은 비주얼 C++이 예제로 제공하던 아이콘을 그냥 그대로 차용한 것이었다. 국산 텍스트 에디터인 EditPlus도 거의 같은 컨셉의 아이콘을 좌우 대칭시키고 살짝 고쳐서 아직까지 사용하는 중이다.

<날개셋> 3.0부터 지금까지 사용한 아이콘은 그 아이콘을 트루컬러+알파채널 형태로 리메이크한 형태이다.
변환기나 입력 패드는 그런 것조차 없이 인터넷에 올라 있는 공개 아이콘 라이브러리를 검색하여, 적절해 보이는 아이콘을 임의로 차용해서 잠시 써 왔다.

그러다가 이제 7.0부터는 편집기, 변환기, 입력 패드가 모두 자체 제작한 동일 컨셉의 아이콘을 쓰게 되었으니 본인은 기쁘다.

물론, <날개셋> 한글 입력기 전체를 대표하는 파랑 계열의 브랜드 아이콘은 여전히 바꿀 계획이 없다.
그리고 외부 모듈은 그 브랜드 아이콘을 흑백 형태로 고친 것으로, 잘 알다시피 Windows 8의 IME 아이콘 디자인 가이드라인을 따른 형태이다.

이번 버전에서는 외부 모듈의 도구모음줄 아이콘에 전통적인 16*16뿐만이 아니라 20*20 크기도 추가되었다. 그래서 120dpi 해상도를 사용할 때도 도구모음줄이 깔끔하게 표시된다.

2. Windows 8 지원 강화

역시 예전 글에서도 언급했었다. 이 정도면 이제 <날개셋> 한글 입력기는 MS가 만들지 않은 싸제 한글 IME 중에서는 2013년 현재 Modern UI에 대한 대비까지 온전히 갖춰진 유일한 프로그램이라 할 수 있다.

일단, Modern UI에서 IME가 데스크톱 모드와 완전히 동일하게 동작하는 것은 기술적으로 원천적으로 불가능하다는 점을 분명히 하고자 한다. Modern UI 모드에서는 IME가 동작하는 데 제약이 너무 심하다. 내 문서, ProgramData 디렉터리마저 접근이 안 되는 건 너무했다. 사실, 이 모드에서는 MS 자기네가 만든 IME조차 제대로 동작하지 못한다.
Windows 8을 대비하느라, 실질적으로 새로운 기능이 추가된 게 없이도 <날개셋> 외부 모듈의 코드가 꽤 늘어나고, 실행 파일의 크기도 더 커지게 됐다.

데스크톱에서 쓰던 한글 입력 설정을 그 환경에서도 그대로 공유하려면, 데스크톱 프로그램에서도 최소한 하나 이상 <날개셋> 한글 입력기를 외부 모듈로 사용하는 프로그램을 띄워 놓고 Modern UI를 사용하시기 바란다.
자세한 것은 도움말 “VI. 외부 모듈 - 일러두기 - 알려진 문제 - Vista 이상...”에 있는 Windows 8 관련 항목을 참고할 것.

3. 후보(한자) 변환 기능의 세분화

거의 5.x 시절부터 계획되었던 것인데 드디어 7.0에 와서야 실현되었다.
<날개셋> 한글 입력기는 내부적으로 한자/후보 변환 글쇠가 4종류 존재하며, 그 중 1번만이 현행과 같은 한자/초성 특수문자 변환으로 용도가 예약되어 있다. 나머지 2~4에 대해서는 변환할 후보 리스트를 사용자가 지정할 수 있게 되었다. 한글을 일본어 문자로 바꾸거나 구결로 바꾸거나 여타 특수문자로 바꾸는 등, 거의 상용구 치환 수준의 활용이 가능하다.

사용자 삽입 이미지사용자 삽입 이미지
(인증샷. KS X 1001에 없는 각종 특수문자들이다. 게다가 옛한글인 아래아 '한'에다가 surrogate 한자들을 잔뜩 배당한 것을 볼 수 있다.)

이 custom 후보 변환 기능에 대해서 사용자가 알아야 할 점은 다음과 같다.
첫째, 과거의 "<날개셋> 고급 입력기"에 존재하던 사용자 후보 변환은 후보 데이터의 mapping에 사용되는 key가 오토마타 상태 번호인 반면, 이번에 추가된 후보 변환은 전적으로 cursor 앞의 문자열이 key라는 점이 다르다.

둘째, 원본 문자열과 대상 문자열은 한 글자여도 되고 여러 글자여도 된다. 그리고 조합 중이든 그렇지 않든 상관없다. 단, 조합이 끝난 여러 문자열을 한꺼번에 치환하려면 '단어 단위로 한자 변환' 옵션이 켜져 있어야 되며, 그런 동작을 기술적으로 지원하는 구현체에서만(가령 TSF A급) 기능을 활용할 수 있다.

셋째, custom 후보 변환 기능은 내장형이냐 외장형이냐, 그리고 입력기 계층 소속이냐 편집기 계층 소속이냐라는 두 속성을 모두 지원하는 형태로 설계되었다.

내장형은 모든 후보 변환 규칙이 입력 설정 내부에 저장되며 언제나 메모리에 상주한다. 즉, 후보 변환 과정에서 디스크 액세스가 발생하지 않는다. <날개셋> 고급 입력기의 사용자 후보 변환 기능도 기술적으로는 내장형인 셈이다.
그러나 외장형은 입력 설정에다가는 데이터 파일 이름만 지정해 놓고, 후보 변환 중에는 디스크를 액세스하여 해당 파일을 뒤진다.

외장형은 대용량의 후보 데이터를 다루는 데 적합하며, 특히 동일한 파일을 쓰도록 지정하면 여러 입력 항목들이 동일한 후보 데이터를 불필요한 메모리 낭비 없이 공유할 수 있다는 장점이 있다. (단, Windows 8 Modern UI에서는 파일 시스템에 접근이 되지 않아 외장형은 사실상 제대로 쓸 수 없다는 점도 유의 필요).

외장형 데이터 파일을 그나마 사용자가 내용을 쉽게 고칠 수 있는 텍스트 파일, 그리고 더욱 방대한 데이터를 빠르게 검색할 수 있는 바이너리 파일 형태가 모두 존재할 수 있는데 이번 버전에서는 바이너리 포맷은 보류하고, 일단 텍스트 파일까지만 구현했다.

이 후보 변환 규칙은 각 입력 항목이 가질 수도 있고, 편집기 계층이 가질 수도 있다.
입력 항목은 내장형과 외장형 이렇게 2개를 갖고 있으며, 이것은 각각 '후보 변환 2'와 '후보 변환 3'에 해당한다.
그러나 편집기 계층은 내장형 아니면 외장형 중 하나로 형태를 취사선택만 할 수 있으며, '후보 변환 4'가 바로 여기에 대응한다.

지금까지 통상적인 한글-한자나 초성-특수문자 변환은 '후보 변환 1'이었고 단축글쇠 규칙에서 '한자' 키를 보면 C0|0x82라는 값이 배당돼 있었는데,
후보 변환 2~4를 쓰려면 먼저 단축글쇠부터 0x83~0x85를 Shift+한자 같은 데에다 배당해 주면 된다.
또한, 후보 변환 2~3에는 특정 입력 방식에 종속적인(local) 규칙을 지정하면 되고, 후보 변환 4는 어떤 입력 방식을 쓰든 똑같이 공유되는(global) 규칙을 지정하면 된다.

외장형 후보 변환에 대해서 설정을 누르면 사용할 파일을 묻는 대화상자만 달랑 뜨는 반면, 내장형 후보 변환에 대해서 설정을 누르면 간단한 후보 변환 데이터 편집 대화상자가 뜬다.
여기서 먼저 원본 문자열부터 지정하거나 추가해 준 뒤, 그 원본 문자열을 치환할 후보 문자열들을 등록하면 된다.

사용자 삽입 이미지

이때 후보 문자열뿐만 아니라, 한자로 치면 훈과 음에 대응하는 설명문도 사용자가 다 지정할 수 있다.
이곳뿐만 아니라 기존의 <날개셋> 고급 입력기도 후보 문자열에 덧붙여 설명문을 지정하는 기능이 같이 추가되었다.

또한 후보 변환 데이터만을 한꺼번에 불러오거나 저장하는 기능이 있는데, 여기서 저장한 파일을 곧바로 '외장형' 후보 변환에다가 지정해서 사용이 가능하다! 이런 식으로 내장형과 외장형 변환 사이에도 데이터 공유를 하면 된다. 이런 면모까지 다 고려해서 기능이 설계된 것이다.

이 사용자 후보 변환 기능은 원본에 대응하는 변환 후보가 하나밖에 없는 경우, 별도의 선택 UI를 출력하지 않고 곧바로 그 문자로 바꿔 버린다. 가령, 기존 후보 변환 1은 엔(円), 김(金)처럼 대응하는 한자가 하나밖에 없더라도 관례적으로 선택 UI를 언제나 출력한다. 그러나 후보 변환 2~4는 진짜 상용구 변환처럼 쓸 수 있게 그 경우 사용자에게 아예 질문을 하지 않게 했다. 위의 그림에서 '수단'은 일본어 スダン로 곧바로 치환하는 후보 문자열이 들어있다.

4. 그 밖에..

Windows 8 지원 강화와 사용자 후보 변환 기능만으로도 0.2 만치 변화는 충분히 달성했으며 7.0의 명분이 서지만,
이것 말고도 이번 버전에서는 단축글쇠의 경우, 조합 중인 상태일 때만 동작하고 나머지 상황에서는 그냥 응용 프로그램으로 넘겨 주게 하는 '조합 중일 때만' 옵션이 추가되었다.

그리고 프로그램을 설치할 때 설치 프로그램 차원에서 “<날개셋> 한글 입력기를 운영체제의 기본 입력기로 자동 지정할까요?”라는 질문에 대한 답변을 받게 했다. 명색이 한글 IME인데 이런 옵션 정도는 넣어야 할 것 같아서.

하지만 이게 모든 OS에서 가능한 건 아니다. Windows 9x 계열에서는 아마 MSI의 버그 때문에 사용자의 선택 결과가 레지스트리에다 반영이 되지 않아서 기능이 지원되지 않는다.
그리고 반대로 완전 최신인 Windows 8은 전통적인 이런 방법으로 기본 입력 언어를 지정하는 게 동작하지 않는다.
그래서 현재로서는 이 명령이 유효한 운영체제는 Windows 2000부터 7까지로 국한되나... XP와 7이 포함되어 있다는 것만으로도 이런 preference 지정 기능이 있는 것이 나쁘지는 않을 것이다.

또한 <날개셋>이 운영체제의 기본 IME로 지정되어 있는 채로 프로그램을 제거하려 하면, 작업이 더 진행되지 않으며 '텍스트 서비스 및 입력 언어' 제어판 대화상자가 바로 뜨고 기본 IME 지정부터 해제하라는 경고문이 나오게 했다.
왜 이런 안전 조치를 진작에 취하지 않았나 모르겠다.

지난 2월 이래로 4개월 동안 쌓이고 쌓인 작업이 7.0이라는 브랜드로 아주 잘 마무리 되었다.
이제야 나도 감금 상태에서 벗어난 수능 출제 위원이 된 듯한 홀가분한 기분이다.
다음 버전은 오는 10월쯤에 또다시 한글 입력 관련 기능의 강화를 테마로 한 7.1을 목표로 하고 있다.

<날개셋> 한글 입력기는 PC Windows 환경에서 한국어가 아닌 한글 자체의 입력 기술을 한데 통합하는 솔루션으로서 앞으로도 지존의 위치를 유지해 나갈 것이다.
끝으로, '날개셋계속개발'이라는 명의로 후원금을 보내 주신 분께 감사드린다.

Posted by 사무엘

2013/07/01 08:22 2013/07/01 08:22
Response
No Trackback , 21 Comments
RSS :
http://moogi.new21.org/tc/rss/response/849

시내버스에 차고지가 있다면, 지하철에는 차량 기지가 있다.
2년 전에 본인은 수도권 전철의 차량 기지에 대해서 위치와 관할 회사 위주로 정리했었다. 그 뒤 이번에는 차량 기지가 수행하는 기능 위주로 옛날 글에서 다루지 못한 설명을 보충하도록 하겠다.

사실, 철도를 운영하는 데는 당장 차량을 굴리는 동력비(전기료)뿐만 아니라 선로와 차량을 정비하는 비용도 굉장히 많이 든다. 그리고 어느 주기로 차량을 어느 정도로 정비할지가 매뉴얼에 다 정해져 있다. 예를 들어 이런 식이다.

  • 기지에서 처음 나올 때: 차량이 정상적으로 굴러가고 주요 운행 장치와 접객 시설들이 동작하는지 최소한의 확인. 차량이 운행을 마치고 기지로 들어갈 때도 간략하게나마 점검을 실시함.
  • 3일 간격으로: 전동차의 내부 주요 장치의 기능과 외관을 검사
  • 2개월 간격으로: 좀 더 세부적인 부품에 대한 월상검사

한 대도시에서 지하철이 얼마나 중요한 교통수단인지를 생각해 보면, 이런 점검은 아무리 강조해도 지나치지 않을 것이다.

철도는 오로지 선로 위만 달릴 수 있으며 차량이 스스로 방향 전환조차 할 수 없는 1차원 교통수단이다. 그렇기 때문에 차량 하나가 정비 불량으로 인해 선로에서 도중에 퍼지면, 사실상 모든 열차가 올스톱되어 버린다. 그때 발생되는 영업 손해와 무너지는 승객들의 멘탈, 증가하는 폭력성-_-은 가히 추산조차 제대로 할 수 없을 것이다.

그래서 점검은 저런 수준에서 그치지 않는다. 2년~4년 주기로는 아예 전동차들을 싹 다 분해해서 모든 부품들을 일일이 검사하고 교체한 뒤, 다시 조립하기도 한다. 이 신문 기사를 참고하라.

짧게는 매일, 길게는 n개월 정도로 차량의 원형은 유지한 상태에서 차량을 점검하는 작업을 '경정비'라고 일컫는다. 그 반면, 최하 수 년 간격으로 차량을 완전히 분해했다가 재조립하는 작업을 '중정비'라고 일컫는다.
전동차 한 편성에 대한 중정비 작업은 당연히 당일만으로는 어림도 없다. 2~3주는 걸리는 대공사이다. 그러니 수십 편성에 달하는 전동차들을 모두 해체했다가 재조립하는 데는 1~2년씩 걸린다고 한다.

전동차의 차량 기지는 경정비와 중정비가 모두 가능한 놈이 있는가 하면, 그렇지 않고 경정비만 가능한 놈이 있다.
경정비만 가능한 기지는 그냥 여러 편성의 차량들을 한꺼번에 넣어 두는 검수고만 있는 반면, 중정비가 가능한 기지는 중정비를 위한 공장이 한 채 곁들어져 있다. 그 공장은 입구가 툭 튀어나와 있기 때문에, 항공 사진을 보면 대체로 凸자 모양을 하고 있다. 사각형 모양이기만 한 검수고와는 외형이 다르다는 뜻이다.

또한 이것은 비록 중정비의 100% 필수 요소는 아니지만, 중정비가 가능한 기지 중에는 열차의 진행 방향을 바꾸는 U턴 회차 선로를 자기 주변에 갖추고 있기도 하다.
지하철 전동차는 전후 대칭형이기 때문에 들어왔던 형태 그대로 후진을 해서 나갈 수 있다. 그러나 전동차를 계속 그렇게만 운행하면 안쪽 바퀴와 오른쪽 바퀴가 불균등하게 마모되기 때문에 차량의 유지 보수 측면에서 좋지 않다. 당장 커브만 생각해 봐도, 커브 안쪽의 바퀴가 바깥쪽의 바퀴보다 덜 돌 테니 말이다. 그래서 주기적으로 열차를 U턴시킴으로써 각 바퀴가 얹히는 궤조의 방향도 바꿔 주는 것이다.

중정비 공장은 여러 노선들로부터 수많은 전동차들의 중정비 예약을 꾸역꾸역 수행하고 있기 때문에 1년 중에 노는 날이 별로 없다. 그리고 이런 데서 수십 년간 일한 기술자들은 소리만 들어도 전동차의 어지간한 상태를 다 진단해 낼 수 있는 프로, 베테랑들이다.

자, 이제 지하철 차량 기지의 항공 사진이라고 하면 사무실, 검수고에 이어 공장, U턴 선로까지 있는지 시설을 보는 안목이 다들 생겼을 것이다.
서울 지하철 5~8호선을 운영하는 서울 도시철도 공사는 노선별로 차량 기지의 배분이 가장 균형 있고 예쁘게(?) 되어 있다.

얘들은 메이저한 노선 5호선과 마이너한 노선 8호선, 그리고 메이저한 7호선과 마이너한 6호선을 서로 짝지어서 관리한다. 유실물 센터도 이렇게 두 노선을 한데 합쳐서 운영하고, 차량 기지도 그런 식으로 공유한다.
메이저한 노선에는 중정비까지 가능한 메이저 기지 1개와 경정비만 가능한 마이너 기지 1개가 붙어 있다. 그러나 마이너 노선에는 역시 마이너 기지 1개만 있다.

그래서 5호선과 8호선이 공유하는 메이저 기지는 그 이름도 유명한 고덕 기지이며, 공장과 회차선이 모두 있다. 둘은 여객 환승역인 천호가 아니라, 가락시장-방이 사이에 연결 선로가 존재하며(3호선 연장 구간과도 다른 경로임), 8호선 전동차는 이 선로를 통해 고덕 기지로 가서 중정비를 받는다.
마이너 기지는 방화(5)와 모란(8)이다. 고덕 기지는 도철의 차량 기지 중 가장 거대한 반면, 모란 기지는 가장 작다.

7호선과 6호선이 공유하는 메이저 기지는 장암 역이 자리잡고 있는 도봉 기지이며, 역시 공장과 회차선이 모두 있다. 환승역인 태릉입구 역 근처에 전동차의 연결 선로가 존재한다. 그리고 두 노선의 마이너 기지는 천왕(7)과 신내(6)이다.

사용자 삽입 이미지
도봉 차량 기지의 구글어스 사진. 연보라색 사각형은 검수고이고, 맞은편에 있는 凸자 모양의 하늘색 건물이 바로 중정비용 공장이다. 그리고 기지 외곽으로 U턴 선로가 있다.
사용자 삽입 이미지
그 반면, 신내 차량 기지는 연보라색 검수고만 있으며, 공장이나 U턴 선로 같은 건 존재하지 않는다는 걸 알 수 있다.
도철 말고 다른 지하철 회사나 코레일은 사정이 어떨까?

서울 메트로 소속인 서울 2호선의 경우 군자와 신정 기지가 둘 존재하는데, 모두 중정비가 가능하다. 군자의 경우 우리나라 역사상 최초로 건설되어 긴 역사를 자랑하는 차량 기지로, 한때는 근처에 있는 용답 역의 이름이 아예 '기지' 역이었을 정도였다.
1호선에 투입되는 서울 메트로 차량도 모두 여기서 정비를 받는다. 동묘앞 행 열차가 운행을 마친 후 가는 곳이 바로 이곳이다.

양천구청 역 근처의 신정 기지는 검수고 위에 아파트가 지어진 걸로 유명하며, 이 때문에 기지의 전체 모습이 항공 사진에 잡히지 않는다. 그래도 검수고 위이지, 훨씬 더 시끄러운 소음이 발생하는 중정비용 공장 위에다 아파트를 지은 건 아니다.
이 두 기지는 중정비가 가능한 기지이지만 항공 사진상으로 U턴 선로는 보이지 않는다.

서울 메트로의 '고덕 차량 기지'뻘 되는 메이저 기지는 지축 차량 기지이다. 부지가 매우 넓고 경· 중정비가 모두 가능하고 U턴 선로도 있다. 그에 반해 수서나 창동 기지는 경정비만 가능하다.

서울 9호선의 유일한 차량 기지인 개화 차량 기지는 역시 경· 중정비+U턴이 가능한 full set 기지이다. 바로 옆에는 시내버스 강서 공영 차고지도 같이 있다는 점이 흥미롭다. 앞으로 9호선은 동쪽으로 더 연장될 예정인데 그래도 차량 기지는 여전히 하나만으로 유지되려나 궁금해진다.

당연한 말이지만 모든 지하철들은 차량 기지가 있는 쪽부터 가장 먼저 개통한다. 양 끝에 두 곳이 있다면 중정비까지 가능한 메이저 기지가 있는 쪽부터 말이다. 그래서 서울 5호선은 고덕 기지가 있는 방향인 왕십리-상일동이 가장 먼저 개통했으며, 7호선은 온수 쪽이 아니라 강북의 도봉산-건대입구부터 먼저 개통한 것이다.
3호선과 4호선은 각각 지축과 창동 기지를 끼고 강북 구간인 구파발-양재, 상계-한성대입구부터 개통했다가 점차 남하한 반면, 8호선은 성남에 있는 모란 기지를 끼고 잠실-모란부터 먼저 개통했다가 암사까지 올라갔다.

2호선은? 더 말이 필요하지 않다. 군자 차량 기지를 경유하는 신설동-종합운동장 구간이 최초이다. 회사로 치면 창립 멤버뻘 되는 구간이다.

이제 코레일 광역전철을 생각해 보면.. 코레일 수도권 동부 지사가 자리잡고 있기도 한 신이문 역 인근의 이문 차량 기지, 경의선의 문산 기지, 안산· 수인선의 시흥 기지, 경춘선의 평내 기지(평내호평-금곡 사이)는 모두 경정비와 중정비가 가능하다. 분당 기지도 중정비는 가능하지만 딱히 툭 튀어나온 공장이 항공 사진에서 보이지는 않는 듯하다.
그리고 코레일의 메이저 기지들은 도철의 메이저 기지와는 달리 U턴 선로도 없다. 전동차의 방향 전환을 아예 안 하지는 않을 텐데, 이에 대해서는 다른 대책을 마련해 두고 있지 않나 싶다.

이들 말고 병점 차량 기지와 구로 차량 기지는 경정비만 가능한 마이너 기지이다.
원래 용산 역 일대에도 전동차 중정비 시설이 있었지만 지금은 재개발을 위해 모두 헐렸다. 용산으로도 모자라서 구로 기지마저도 지금은 재개발하고 더 외곽인 광명 일대로 기지를 옮기네 마네 하는 떡밥이 오가는 중이다.

Posted by 사무엘

2013/06/28 08:36 2013/06/28 08:36
, , , , ,
Response
No Trackback , No Comment
RSS :
http://moogi.new21.org/tc/rss/response/848

« Previous : 1 : ... 136 : 137 : 138 : 139 : 140 : 141 : 142 : 143 : 144 : ... 215 : Next »

블로그 이미지

그런즉 이제 애호박, 단호박, 늙은호박 이 셋은 항상 있으나, 그 중에 제일은 늙은호박이니라.

- 사무엘

Archives

Authors

  1. 사무엘

Calendar

«   2024/04   »
  1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30        

Site Stats

Total hits:
2675033
Today:
1725
Yesterday:
1540