우리의 미래모델이 필리핀?

우리나라 미래는 필리핀이다.


지금이 딱 과도기다. 지금처럼 아무리 돈을 투자해서 공부하고, 노력해도, 제대로된 곳에

취직하기가 거의 불가능에 가깝다는 걸 알면서도, 미친듯이 자기계발을 위해 돈을 투자하는

시기는 앞으로는 두 번 다시 오지 않는다. 지금은 서민이라도, 빚을 내서라도, 어떻게든 스펙

올리겠다고 수백만원의 돈을 투자해서 학원 다니고, 과외 받고, 어학연수까지 갔다오고,

별별 짓을 다 하지? 하지만, 이게 다 무의미한 짓이란 걸 하나 둘 깨닫기 시작하고 있다.

그 다음부턴, 어차피 노력해도 안 된다.. 라는 생각이 세상을 지배하기 시작한다. 애초

출발선에 가지고 있는 현금이 없으면 어차피 안된다.. 라는 생각이 지배하기 시작한다는 거다.

노력의 가치보다 돈의 가치가 훨씬 더 높고 힘이 세다는 걸 깨닫는 거지..

그리고 그 가속도는 급격히 증가할거다.



그때부턴 모든 보통 사람의 삶이 도박판이 된다. 사람들은 자본주의 사회에 눈을 뜨기

시작했고 상위 1%가 되지 않으면 결국 '노예'일 뿐이란 걸 자각한다.

"나는 공장에서 기계처럼 일하는게 행복해 ^^ 나는 우리기업이 좋아^^" 라고

자위하는 그 마음 조차도 자본을 가진 측에서

"항상 긍정적인 마음을 먹어^^ (노가다나 평생 열심히 하며 아랫층에서 나를 위해 일해^^)"

라고 세뇌시킨 걸 깨달은거지..

그리고 시크릿등의 자기계발서를 통해 상상하고 원하면 모두 이루어진다고 생각하면서

자기는 절대 노예들이 하는 노동을 하지 않을 것이며 반드시 상위 1%가 될거라 상상하고

믿는다.. 그렇게 자발적 니트족이 되고, 매주 로또를 사면서 자기가 부자가 되는 상상을 한다..



이게 현재 흐름이다..



이렇게 되면 당연히 사회는 혼란스러워 진다.. 상위층은 항상 소수정예를 유지하고

그 밑의 하위층은 그 상위층을 항상 떠받쳐 줘야 한다. 노예들은 노예들이 있는 위치에 있어야

사회가 안정되게 유지되는데 노예들이 '더이상 난 노예짓 안할거야' 하면서 여기저기 하급

직업에서 그만둔다...그리고 노동력을 제공해야 할 노예들이 하급 노동을 거부하고 있다..

지금 고위층에서는 요즘 청년실업률이 높은 이유가 대학 나온 애들 눈높이가 높아서라고 한다.

돌려서 말한 것이지 실제로 직설적으로 표현하자면 "노예신분인 니들이 어디서 겉멋만 들어서

높은층에 오려고 하느냐.. 니 꼬라지를 알라.. 노예들은 노예들의 일터로 가서 일을 해라" 라는

의미다...



하지만 지금 분위기와 모든 통계를 다 봐도.. 애들이 자본주의 사회에서 1% 이외는 모두가

노예라는 걸 분명히 자각하고 있다.. 우선 지금 대부분 하급 직업엔 아예 가려고 하지를 않는다..

노예인 것을 아니까..



그리고 예전 같았으면 자신이 취업이 안되는게 "아 내가 노력을 안해서 그래" 라면서

자책을 하고 그게 심해지면 못견뎌 자살하는 스토리 였다. 예를 들어 친구가 "대학 등록금

때문에 정말 죽을 것 같다."라는 고민을 털어 놓으면 과거 였다면 "니가 공부 열심히 해서

장학금 받으면 되잖아. (네가 노력을 안해서 그래)" 라고 대답했었다.. 구조적인 문제를

판단하는게 아니라 모든 것을 개인의 노력탓으로 생각했었다 예전엔..



근데 이젠 "내가 발버둥 쳐도 넘어갈 수 없는 엄청난 벽이 있다" 라는걸 인식하기 시작했다..

이런 문제 인식이 확산되고 또 어느정도 공론화 된 것은 SKY의 몰락과도 연계되는데

모두를 이기고 대학 입시의 위너가 된 SKY생들 조차 이제 취업 현장에서 버림 받으니

SKY생/비SKY생 간의 벽이 무너져 대학생들간의 공감대가 어느정도 형성되고 있다는 거다.

물론 아직은 문제 인식의 공감대 보다 '하지만, 나부터 살아야 한다' 라는 공포감이 훨씬 강하다..



근데 이들은 예상치 못한 대응을 하기 시작했다.. 그건 바로 노동을 죽어라 해서 노동력을

제공해줘야 할 세대가 노동을 하지 않고 스스로 니트족이 되는 경우가 그 예다..

한평생 중산층과 빈곤층의 경계선에서 위로 아래로 왔다리 갔다리 하면서

노동력 제공 -> 그 제품을 소비 -> 경제 성장.. 을 주도 해야할 세대들이

일하지도 않고 일할 의지도 없고 공부할 의지도 없다며 아예 니트족이 되는거다..



그리고 애를 낳지 않는다.. 애를 낳아줘야 그 노예들의 애들도 또 노예가 되어

기득권층이 늙었을 때 자신은 자본을 대주고 편하게 노동력을 제공받고 살고

또 그 애들이 월급 받은걸로 매달매달 펀드도 사야 기업 주식도 올라가고

월급 받은걸로 차도 사고 뭐도 사고 이것저것 소비를 해줘야 경제가 순환하는데

도무지 애를 낳지 않아서 이대로 가다간 초고령화 사회가 되어

경제구조 자체가 무너질 지경이다..



다급해진 기득권층은 낙태 단속도 하고 보육비도 대주겠다고 신문광고도 하고 난리지만

"잉여 인생, 나로서 충분하다. 내 선에서 끝낸다. 자식까지 고통을 줄 순 없다.."

"아직 로또가 안됐으니.. 로또 되면 낳아야지 ^^"라고

나쁜 의미든 좋은 의미든 출산을 거부하고 있으며,

인간의 종족 번식 본능까지 스스로 죽여버리는 놀라운 상황인거다..



이런 식으로 초고령화 사회로 가면 디플레이션+물가 하락이 일어나서 현금 가진 사람이

최고의 부자가 되어 노동하는 사람, 공부하는 사람은 바보가 된다.. 꿈을 가지고

기업을 만들고 주식에 투자를 하고 이런 사람도 바보가 된다.. 현금이 최고니까..

이러면 대한민국의 미래는 암울할 수 밖에 없다..



이 예상치 못한 대응 방식은 개미떼들의 끝없는 노동력과 소비력을 제공받아야할

기득권층을 당황하게 하고 있는데

이 니트족은 시크릿류의 자기계발서와 절묘하게 맞물리며

노력하지 않아도 심상화 만으로 성공할 수 있다며 매일 명상한다며

자발적으로 백수가 된 사람들 반과 (로또가 되는 그날까지 기다린다 계속..)

노력을 해도해도 안되니까 그냥 포기해 버린 사람들 반이다..

자포자기한 심정으로 매일 적대감으로 세상을 돌아다니거나 아님

실제론 빈곤층에 가까우나 마음만은 재벌2세라며 심상화만 매일 하면서

하루종일 아무것도 안하고 노는 경제 분야 그 어느 소속에도 끼지 않는 니트족들...

이러니 당연히 사회는 혼란스러워 진다..



상위 1%의 기득권을 가진 자는 그래서 그들과 접촉하는 걸 매우 꺼린다..

그리고 혹시라도 그 기득권에서 자신이 떨어져 내려올까봐 그것을 몹시두려워 한다..

따라서 이제 리스크가 큰 투자행위는 중단한다.. 정기예금에 돈 넣어두고 이자 받아

먹으며 살거다 이제.. 그리고 잉여자금으로 브랜드 아파트를 사고 그들만의 성벽을

쌓아 외부 시민과의 접촉을 차단한다.. 그들만의 자식들이 모인 학교에 애를 보낸다..

끼리끼리 논다는 거지... 독서실도 이제 브랜드 아파트 내부에 있다..

다른 아파트에 사는 애들과 어울리지 마라 이거다.. 내가 사는 집의 옆집 사람,

윗집 사람, 아랫집 사람이 돈이 없는 사람인 것은 대단히 위험한 주거 공간이니

돈 많은 사람들과 끼리끼리 높은 성벽을 쌓고 그 안에서만 살겠다 이거다..

헬스장, 수영장, 노래방, 편의점 모두 브랜드 아파트 내부에 설치해서 그들끼리

귀족처럼 생활한다.. 우리 자식들을 임대 아파트 사는 애들, 빈곤 주택가에 사는

애들과 어울리게 할 수 없다..그런 생각이 만들어 낸 도시가 서울 강남, 대구 수성구,

부산 센텀시티다...거기 있는 초고층 타워형 아파트와 프리미엄 브랜드 아파트들..

모두 그런 심리로 지어진 아파트들이다..너도 나도 저기 가려고 가격도 엄청 비싸졌다..



근데 앞으로 저런 도시들의 부동산 가격도 많이 내려갈거다.. 왜?..

일단 이제는 현금이 먼저인 시대가 됐다...

따라서 리스크가 큰 곳에 자금을 놔두지 않을거다 이제..

현금이 최고니까.. 따라서 저런 부동산은 잉여현금으로 살 수 밖에 없다..

따라서 자금력이 되는 극소수를 제외하고는 앞으로 계속 고급 부동산을 팔아 현금화 할거다...

당장 내일이 두려운 시대에 눈에 보이지 않는 불과 32평~62평의 장부가치에 모든 걸 걸고

살 수는 없다는 거다.. 따라서 무리하게 강남에 프리미엄 아파트를 샀던 사람은 그 집을 팔고

현금을 확보한 후 대구수성구나 부산센텀시티의 트럼프 월드 같은 곳으로 갈 확률이 높다..

역시 마찬가지로 무리하게 대구수성구나 부산센텀시티의 프리미엄 아파트를 샀던 사람은

그 집을 팔고 현금을 확보한 후 창원시티세븐이나 기타 다른 지방 프리미엄 아파트로 이사갈

확률이 높다..



주식? 당연히 하락한다.. 이제 주식도 폭탄 돌리기다.. 전체적으로 파이가 커지는게 아니라

어떤 종목이 오르고 빠지고 어떤 종목이 오르고 빠지고 한정된 자금으로 폭탄 돌리기 하는 거다..

왜? 인구 구조상 대세 상승 할 수가 없는 구조다....돈을 조금씩 가진 수많은 개미떼들이

꾸준히 매일 안정적으로 월급을 쑤셔 넣을 때 주식은 대세 상승한다.. 이런 안정적인 수급이

들어오지 않는다면 주식은 결국 폭탄 돌리기를 하는 악순환에 빠지고 금융 시장에 대한 불신이

심해지면 펀드 시장도 쇠퇴할 거다.. 그럼 그나마 꾸준히 펀드 매입 했던 사람들도 펀드 시장에서

떠나면 금융 시장은 무너지는 거다.. 장기적으로 서서히..



은행 예금? 이젠 일반 은행에도 안넣을 거다..왜? 망할까 두렵거든.. 무조건 안전 지향이다 이제..

그래서 우체국 예금에 넣는다.. 일본 정부가 너도 나도 온 국민이 우체국에만 예금을 넣으니까

우체국을 아예 민영화 시켜버려듯이(국가 소유의 우체국에 예금된 돈들은 투자금액으로 쓴다던지

대출금액으로 쓴다던지 하는게 제한되기 때문에 말그대로 그냥 수많은 돈들이 순환되지 않고

그대로 금고에 머물러 있다는 거.. 따라서 극단적으로 우체국까지 민영화 해버렸다..)

한국도 분명 그런 날이 올거다..



하위권에 있는 사람들은 서서히.. 그리고 나중엔 급격히 무기력증에 빠지게 된다.. 왜?

로또.. 매주 사도 안되니까... 극소수만 되니까.. (이건 공부 및 각종 시험과 고시도 마찬가지다.)

주식.. 각종 편의점, 피시방, 서빙, 백화점 알바 등 해서 목돈 모아서 해봤자 개미는 무조건

지는 게임이다.. 결국 평생 일하는 노예 워킹푸어 밖에 안되니까 결국 자본을 가진 상위층이

되려고 이쁜 여자와 남자는 유흥업에 뛰어든다..

뛸 외모가 안되는 남녀들은 끝까지 잉여로 남아 시크릿류의 상상만 하며 니트족으로 산다....

그리고 일부는 끝까지 공부하면 이뤄질 수 있다며 죽어라 공부하지만 관문이 지극히 좁은

제로섬 게임에서 역시 극소수만 그곳을 통과하고 나머지는 계속 누적 적체되면서 사회에 .

대한 불만, 자괴감이 증가한다.. 공부나 로또나 똑같다...

로또와 달리 공부는 노력하면 다 될거라 생각하지만 이미 구조적으로 확률적으로 현저히

불리한 게임기 속에 자신이 들어가 있다...



이렇게 되면 고소득층과 빈곤층의 방파제 역할, 노동력과 소비력의 중심이 되어야 할

중산층이 텅~ 비어 있게 된다.. 극심한 빈부격차 국가가 되버리는 거다..



워낙 소수의 사람들만 기득권을 유지하다 보니 유흥업도 소수의 1%룸만 호황하고

나머지는 몰락한다.....다수의 고객인 재벌 흉내내며 허세부리는 중산층 남자들이

그 비용을 감당하지 못하기 시작하는거지..



그 다음부턴 뻔하지. 이제 여자들은, 어떻게든 돈 많은 선진국 사람들과 결혼하기 위해

혈안이 될거고.. 유흥업의 주고객은 외국인이 될 가능성이 높다.. 한국 남자들은 그냥 ㅄ

취급 받기 시작하는거고..



이게 필리핀의 현 모습이자 우리나라의 미래다.....



우리나라 국민 근성이 얼마나 위대한데 우리나라가 망할 것 같냐고 반문할 수도 있다..

근데 망하지 않고 몇 년 성장한다 한들 그것은 예전처럼 모두의 파이가 커지는 발전이 아니라

이제부턴 1%만의 발전이라는 거다..



지금은 과도기다..



요새 돈 있는 부자들은 집, 주식 팔아 현금 장전하고...

없는 애들은 어떤 식으로든 로또 1등이라도 빨리 되려고 개발악중이다...

자신만은 반드시 예외가 되려고 계속 발악중인거지.....

지금은 남 신경 쓸 겨를 없이 자기가 먼저 예외의 고지를 밟는게 중요하니까..

어떻게든 나라도 먼저 탈출해서 남이 망하는 걸 산 정상에서 내려봐야 하니까...



그리고, 명문대 지방대 안가리고, 하나둘 문닫기 시작할거다.

실감이 안나나? 명문대도 망한다니까?..

망한다.. 서서히 느끼지 못할 정도로 망한다..

70년대에 부산대 하면 알아줬으나 지금 부산대 하면 누가 알아주나?..

이런 식으로 서서히 sky의 위상이 급격히 하락한다...



아니 이미 벌써 하락중이다..

중고생 자녀를 가진 강남 부자들 중에 현재 서울대 보내려고 애 교육 시키는 집 없다...

전부 미국 수능 시험인 SAT 시험 준비시키지 대한민국에 SKY 보내려고 교육 시키는

강남집 없다는 거다..



그럼 그 학력허세의 최상위 주인은 이제 누가 차지하느냐?

막강한 현금력으로 미국 아이비리그 등에 유학 다녀온 최상위층 유학파들이 차지할거다...

이제 돈 없는 애들은 허무함에 빠져 대학도 가봤자 뭐하냐 하는 심정으로 안간다...

SKY가도 이제 개천에서 용 못된다..

죽어라 공부 해서 아이비리그?

돈이 없으니 공부하는 과정도 엄두도 안나고 행여 합격 하더라도 돈이 없으니 사실상

불가능이다.. EBS가 있다고? EBS에서 SAT강의 하는 날이 올까?

SKY가 몰락하면서 서민층에서 상위층으로 계급 이동을 가능하게 하는

거의 사실상 유일한 방법도 사라져 버렸다..



그럼 이제 SAT 시험 치면 되겠네 라고 생각할수도 있다..

이렇게 생각해보자.. 지금까지 기득권층의 주장은 SKY대학 별거 아니다..

초중고 공교육 열심히 듣고, EBS 들으면 충분히 누구나 갈 수 있다..

그래, 맞는 말일수도 틀린 말일수도 있다.. 근데 이제는 SKY가 아니라 SAT가 되었다..

니들이 부품이 아니라 사용자가 되려면 이제는 SKY가 아니라 SAT시험을 쳐서

아이비리그 등에 가야 되는데 아직도 저 논리가 먹힐 수 있을까?..

대한민국이란 나라의 초,중,고 공교육에서

미국 SAT 입시를 가르친다는게 상식적으로 그 누구라도 납득할 수 있는 교육일까?

못한다.. 그럼 EBS에서 SAT 입시를 가르칠까? 못한다..

행여나 모두가 미쳐서 한국 학교에서 SAT수능 교육과정으로 가르치자!! 한들

지금 교육권력을 잡고 있는 한국의 사범대 출신 교사들이 가르칠 수나 있을까??



그럼 SAT 시험 준비하려면?

비싼 학원,, 비싼 과외 받아야 한다..

이제 공부해도 개천에서 용 못된다는거다...

전국적으론 미비하지만 이미 강남에선 이런 현상 인식이 광범위하게 퍼져있다..

근데 그들은 별 문제가 없다.. 왜? 돈이 있으니까..

2,3년 재수 삼수해도 앞으로의 10년 후는 지금과 현저히 달라진 세상일 거니까

시간 상관 없이, 모든 아낌 없이 SAT에 투자한다..

이게 전국적인 문제 인식으로 공론화 되면 어떤 해결 방법도 없어진다..

니가 사교육을 싫어하고 공교육을 제아무리 사랑하는 사람이라도 빈곤층과 중산층이

미국 수능시험 SAT를 치게 한국 공교육과정을 SAT 과정으로 바꾸자!! 라고 당당히 말할 수 있나??

없다..

행여 진정한 로또급 독종이 나와서 합격한다 해도 유학할 돈이 없는 것도 아주 현실적인 문제다..

서서히 변할거다.. 지금은 극히 일부만 그것을 느낄거다..



서울대 나온 애들이 사회에 나가서 "나 서울대 나왔다"라고 하는데 아무도 기가 죽지 않으면

그 땐 이미 상황이 닥쳐온거다..

그럼 어차피 죽어라 공부해서 SKY가도 로또급 확률로 고급 노예가 되거나 아님 아예 백수가 되거나

아님 고급노예가 되어도 몇년안에 쓰이다 버림 받으니 이래나 저래나 답이 안나오는 거다..

선택의 여지가 없으니 더이상 교육권력에 놀아나지 않는 거부 운동까지..

최악의 상황? 발생할 수 있다.. 사회통제 매트릭스 시스템에서 탈출하려는 마지막 발악인거지...

하지만 슬프게도 그 거부할 수 있는 당당함 조차도 집에 돈이 있을 때만 가능한 얘기다..

대부분 겁먹고 할 수 없지.. 그러니 다시 어쩔 수 없이 골방으로 들어가는거다..

근데 이게 시간이 흘러 점점 더 심해질 경우에 애들이 언제까지고 거기 있을까? 하는 의문은

한번 쯤 생각해봐야 한다.. 애들이 죄다 골방에 틀어박혀서 고시 준비하고 대학 준비하고 그래야

시위도 안하고 하는데 이게 이제 유지가 안될수도 있다는 거다.. 다 허무함에 빠져버리면...



그럼 허무함에 빠지지 않고 그래도 먹고 살아보려는 애들은 대학도 안가려 하고 대체 뭘 하느냐?

그 애들은 수능 준비 대신에 10대들부터 9급, 순경, 소방, 교도관 준비한다고 난리가 날거다...

어차피 성공 못할거면 한달 벌어 한달 밥값, 똥닦는 휴지값이라도 벌자는 심정으로 공무원 할거다...

지금은 상상도 못할 서울대 출신 9급 공무원도 수두룩 할거다..

70년대에 부산대 출신 9급 공무원 상상이나 했나? 지금 부산대 출신 9급 널리고 널렸다..

그리고 그걸 하면서 여전히 마음은 시크릿류의 상상을 하며 살거다... 그리고 공무원이 못된

대다수의 사람들은 영원히 시크릿류의 희망고문 당하며 살다 죽거나

음식점 서빙이나 편의점이나 마트나 백화점 등.. 즉 자본을 이미 가지고 있는 자들의 노예가 되어 평생 살거나

사회부적응자로 자살하거나

혹은 연대하여 어떤 사회적 문제를 일으킬수도 있다...

최악의 상황은 제일 마지막인거고..



대안? 전체적인 대안은 없다.. 그 누구도 대안을 제시할 수 없다..

왜냐? 이것은 과거의 이념적인 문제랑 차원이 다른 문제기 때문이다..

노동절약형 기술은 나날히 발전하고 있고 컴퓨터도 나날히 발전하고 있다..

고급인력100명 쓸 일을 고급인력1명+컴퓨터1대면 다 할 수 있는 세상이 오고 있다..

그리고 기계 장치 쇳덩어리가 사라지고 전자 제품이 인간을 죽일 거다...

노동생산성 향상이 자본주의의 혼란을 야기한 거다.. 이건 앞으로 점점 더 심해질거다..

니들이 지구를 살리기 위해 반드시 상용화 해야 한다고 주장하는 전기차도..

그게 정말 상용화 되면 전세계 자동차 공장의 노동자 70% 이상이 다 해고될거다..

전기차에는 엔진과 변속기 조차 없다.. 기존 내연 기관 차에 있는 각종 기계적 물리적 부품들

50% 이상이 줄어든다.. 발전하면 할수록 기존 현재의 차에서 부품의 90%까지 줄어든다..

이건 한마디로 기계장치가 아니라 전자제품이라는 얘기다..

거짓말 아니고 사실이다.. 믿기 어렵겠지만..

부품 숫자가 대폭 줄어들어 조립라인 공정이 전폭적으로 줄어들고,

그 조립공정 마저도 이제 기계가 대신 할거다..

생산성 향상(낭비의 최소화), 기술의 진보가 이 세상을 밝게 해줄 것으로

믿고 있겠지만 실제론 노동자의 종말을 초래할거다....



컴퓨터의 등장으로 우린 어려운 계산도 쉽게 할 수 있게 되었다고 좋아했지만

결과적으로 컴퓨터가 고급 인력의 자리까지 빼앗은 셈이 되었다..

지금 20대는 그 컴퓨터의 가장 극적인 피해자다...



화이트 컬러의 일자리와 제조업 일자리까지 모두 컴퓨터가 인간을 대체하면

남은 것은 서비스 업종 뿐인데 이는 철저히 감정 노동, 즉 노예임을 스스로 백번 천번 인정하고

자본가에게 한없이 굽신거려야 하는 직업들이다.. 백화점, 마트, 음식점 서빙, 편의점, 유흥업 등..

고등학교와 대학에서 배워온 지식들과 꿈들이 아무 쓸모가 없어지고 억지 웃음과 친절(감정노동

)만이 남는다.. 그 감정노동의 대상은 철저히 자본가가 된다..



그래서 지금 젊은층은

시대가 더 변하기 전에, 이제 완전히 문이 닫히기 전에, 어떻게라도 탈출하려고 발악하고 있다..

'내가 죽을 지도 모른다'라는 공포감이 극에 달해서 다른 누구를 신경쓸 겨를이 없다..

사회 전체적인 대안이 없기에 더욱더 미래는 불안하고 공포스럽다..

하지만 개인적 대안은 있다.. 부모 자산이 많던지, 로또가 되는거다..

로또 되서 현금 가지고 있으면 문제 없다..



결국 혼자서 높은 성을 쌓고(많은 현금, 고급아파트)

외부 잉여와의 접촉을 막고 빨리 탈출하는 방법 밖에는 없다는 거다..



나라 GDP가 올라갔다고 니 인생이 바뀌는 건 하나도 없다..

아직도 대한민국이 발전한다고 자기도 발전할거라 착각하는 사람이 있다면 대단한 착오다..



누군가 올림픽서 금메달 땄다고 역시 니 인생이 바뀌는 건 하나도 없다..

김연아가 금메달 따면 김연아와 광고 맺은 대기업에 호재지 니들 인생에 호재는 하나도 없다..



뉴스에서 보는 온갖 호재 소식들이 사실 너와는 아무 관련도 없고,

뉴스에서 보는 온갖 사건사고 소식들이 사실 너와는 아주 밀접한 관련이 있다는 걸 깨닫는 순간..

김길태 같은 범죄의 대다수가 저소득 주택 빈곤층에서 일어난다는 거..

사회에 불만을 가진 고시원 방화 살인 사건.. 각종 원룸, 오피스텔 강도 강간 사건 등...



결국 기술의 진보와 사회의 발전과 경제적 발전은 앞으로 점점 더 1%가 독점하고

범죄의 노출 등 위험한 것은 탈출하지 못한 정글에 있는 나머지가 모두 감당한다...



지금은 과도기라는거.. 변화는 서서히.. 하지만 냉혹하게.. 다가올거다..

지금 변화의 중심 한가운데 서있는거다.. 특히 20대들은...



끝..

델파이 함수 정리 (김굽다불낸뇬)님의 블로그 오라클 과 델파이

함수 레퍼런스 정리...(A)
Abs
문 법
function Abs(X);
X 의 절대값을 구하는 함수이다.
절대값이란 값은 같으며 부호가 양수인 수를 말한다.
X 는 정수 또는 실수값이다.
예 제
Abs(-3.14); {결과는 3.14}
Abs(3.14); {결과는 3.14}
Addr
문 법
function Addr(X):Pointer;
X 의 번지를 구할 때 쓴 함수이다.
X 는 변수나 함수의 명칭이며 결과는 X의 메모리 번지를 나타내는 포인터 값이며, Pointer형이다. Addr 함수의 리턴값이 Pointer형이므로 Pointer형의 변수에 곧바고 대입될 수 있지만 이 함수의 리턴값으로 메모리를 직접 참조할 수는 없다.
메모리를 참조하기 위해서는 타입 캐스트를 해 주어야 한다.
예 제
Var i : Interger;
begin
    P := Addr(i); {i의 번지를 구한다.}
end;
Append
문 법
procedure Append(Var f:Text);
파일을 추가 기록용으로 오픈할 때 쓰는 함수이다.
파일 변수 F 는 Assign으로 외부 파일과 연결되어 있어야 한다.
외부 파일이 없으면 에러가 발생하며 이미 열려 있는 경우는 파일을 닫은 후 다시 연다.
파일을 오픈한 후 에디터라인은 파일의 끝(EOF)에 위치시키므로 추가적인 데이터를 파일 끝에 추가할 수가 있다.
다음 예는 루트 디렉토리의 Autoexec.Bat 파일 끝에 Prompt 문을 추가시키는 예제이다.
예 제
Var F : Textfile;
begin
    AssignFile(F,'c:/autoexec.bat');
    Append(F); {파일 오픈}
    Writeln(F,'Prompt $p$g');
    CloseFile(F); {파일 닫음}
end;
AppendStr
문 법
procedure AppendStr(Var Dest: String; Const S: String);
두 개의 문자열을 결합하는 함수이다.
Dest 문자열 뒷부분에 Src 문자열이 추가되는 것으로, Dest := Dest + S 와 문법적으로 동일한 기능을 수행한다.
예 제
Src := 'Apple';
Dest := 'Orange';
AppendStr(Dest, Src);

즉, Dest 문자열은 OrrangeApple 이 된다.
AssignFile
문 법
procedure AssignFile(Var f, String);
텍스트 파일 변수와 외부 파일을 연결시키는 함수이다.
파일 핸들에 파일을 할당하는 것으로 일단 파일과 핸들이 연결되면 핸들에 대한 모든 조작은 파일로 입출력이 된다.
이 프로시져로 핸들에 파일을 할당한 후 Reset이나 Rewrite등을 사용하여 파일을 오픈하며, Writeln이나 Readln으로 파일 입출력을 수행한다.
파일 이름은 문자열 형태로 전달하되 필요한 경우 드라이브명과 디렉토리명을 사용할 수 있다. 주의할 것은 이미 열려져 있는 파일핸들을 재할당해서는 안된다는 점이다.
다음 예는 text.txt파일에서 첫 줄을 읽어 에디트 박스로 출력하는 예이다.
예 제
Var F: TextFile; S: String;
begin
    AssignFile(F, 'text.txt');
    Reset(F);
    Readln(F,S);
    Edit1.Text := S;
    CloseFile(F);
end;
 
함수 레퍼런스 정리...(C)
ChangeFileExt
문 법
function ChangeFileExt(Const FileName, ExTension:string):string;
첫번째 인수 FileName으로 주어진 파일의 이름 중 파일의 확장자만 두번째 인수 Extension 으로 변경하는 함수이다.
다음 예는 인수로 주어진 파일의 확장자를 무조건 INI파일로 변경하는 예이다.
예 제
ChangeFileExt(ParamStr(0),'.INI');
Chdir
문 법
procedure chdir(S:string);
인수 S가 지정하는 경로로 현재 디렉토리를 변경하는 함수이다.
만약 S가 드라이브 문자를 포함하고 있을 경우 현재 드라이브도 변경된다.
Chr
문 법
function Chr(X:Byte):Char;
서수값 X가 지정하는 무자를 구하는 함수이다.
아스키 코드값을 X로 전달하면 해당하는 문자를 얻을 수 있는데 Chr(65)는 알파벳 문자로 A를 뜻한다. 이 함수를 사용하면 키보드로 직접 입력할 수 없는 문자를 입력할 수 있는 쓰임새가 많은 함수이다.
CloseFile
문 법
procedure CloseFile(Var F);
파일 핸들과 외부 파일과의 연결을 끊고 파일 핸들을 닫는 함수이다.
파일 변수 F는 Reset, Rewrite, Append 등에 의하여 오픈된 파일 핸들이며 파일 핸들은 사용 후에 반드시 닫아주어야 하는 함수이다.
예 제
Var F: TextFile; S: String;
begin
    AssignFile(F, 'text.txt');
    Reset(F);
    Readln(F,S);
    Edit1.Text := S;
    CloseFile(F); // 파일을 반드시 닫아줘야 한다.
end;
CompareStr
문 법
function CompareStr(Const Si, S2: string):Integer;
두개의 문자열 S1 과 S2 를 비교하되 대소문자를 구분하여 비교하는 함수이다.

S1 과 S2 문자열이 같으면 0 값을 리턴한다.
S1 < S2 이면 음수의 값을 리턴하며, S1 > S2 이면 양수를 리턴한다.

문자열끼리의 비교는 문자열을 이루는 각 문자의 문자 코드를 비교하여 수행되며, 현재 설치된 언어 드라이버에는 영향을 받지 않는다.
CompareText
문 법
function CompareText(Const S1, S2 : String):Integer;
두개의 문자열 S1 과 S2를 비교하되 대소문자를 구분하지 않고 비교하는 함수이다.

S1 과 S2 문자열이 같으면 0을 리턴하며 S1 < S2 이면 음수의 값을 리턴한다.
S1 > S2 이면 양수를 리턴한다.

문자열끼리의 비교는 문자열을 이루는 각 문자의 문자 코드를 비교하여 수행된다.
"Apple" 과 "APPLE" 을 CompareText 함수로 비교하면 결과는 0 이다.
두 문자열이 같은 것으로 비교되지만 CompareStr 함수로 비교하면 결과는 두 문자열이 서로 다른 것으로 비교된다.
Concat
문 법
function Concat(S1 [, S2, ... , Sn]:String):String;
두개 이상의 문자열들을 결합하여 새로운 긴 문자열을 만드는 함수이다.
만약 문자열을 연결한 결과가 255문자 이상일 경우 255번째 이후의 문자는 잘려나간다.
이 함수 대신 + 연산자를 사용하여 문자열을 결합해도 결과는 동일하다.
Concat('Korea','China') 의 경우는 'Korea'+'China'는 같은 결과의 예이다.
다음 예는 Edit1에 입력된 문자열과 Edit2에 입력된 문자열을 한해 Edit3에 대입한다.
예 제
Edit3.Text := ConCat(Edit1.Text, Edit2.Text);
Continue
문 법
procedure Continue;
For, While, Repeat 등의 반복문에서 사용되며 다음 반복 부분으로 흐름을 옮기도록 하는 함수이다.
루프의 남은 뒷부분은 무시되며 루프의 조건 점검부로 점프한다.
만약 반복 루프 외부에서 이 프로시저가 사용되면 에러가 발생한다.
다음 예는 i가 1~100 까지 증가하며 모종의 처리를 하되 i 가 10인 경우만 특별히 처리가 생략되는 예이다.
예 제
For i := 1 to 100 do
begin
    If i = 10 then continue;
    ...
end;
Copy
문 법
procedure Copy(S:String; Index, Count:Integer):String;
한 문자열의 부분 문자열을 추출해 내는 함수이다.
S 문자열의 Index 위치에서부터 Count 문자분의 부분 문자열이 추출된다.
Index 가 문자열의 전체 길이보다 길 경우 빈 문자열을 리턴하며 Count가 문자열의 남은 부분보다 클 경우 문자열의 끝까지 추출해 낸다.
Dest 문자열이 'Orange'일 경우 Copy(Dest, 2, 3)은 Dest문자열의 두번째 문자에서부터 3문자분의 부분 문자열인 'ran'을 추출해 낸다.
 
함수 레퍼런스 정리...(D)
Date
문 법
function Date(Date:TDateTime);
시스템의 시계를 참조하여 오늘 날짜를 구하는 함수이다.
날짜는 TDateTime형이므로 곧바로 문자열로 출력할 수 없으며, DateToStr 함수를 사용하여 문자열로 바꾸어 주어야만 한다.
다음 예는 Label1에 오늘 날짜가 출력되는 예제이다.
예 제
Label1.Caption := DateToStr(Date);
DateTimeToFileDate
문 법
function DateTimeToFileDate(DateTime: TDateTime):Longint;
TDateTime형의 날짜,시간 값을 DOS형식의 날짜,시간형식으로 바꾸는 함수이다.
도스 형식의 날짜는 4바이트의 정수형이며 각 비트에 날짜,시간 요소를 포함하고 있다.
다음 예는 도스형식의 날짜, 시간 형식을 레이블로 출력하는 예제이다.
예 제
Label1.Caption := IntToStr(DateTimeToFileDate(Now));
DateTimeToStr
문 법
function DateTimeToStr(DateTime: TDateTime):String;
날짜와 시간을 담은 TDateTime형의 변수를 문자열로 바꾸는 함수이다.
만약 DateTime 인수가 날짜를 포함하지 않으면 날짜는 00/00/00 이 되며, 시간을 포함하지 않으면 00:00:00 AM이 된다.
다음 예는 현재 시간과 날짜를 레이블로 출력하는 예이다.
예 제
Label1.Caption := DateTimeToStr(Now);
DateToStr
문 법
function DateToStr(Date: TDateTime):String;
날짜를 담는 TDateTime형의 변수에서 날짜를 문자열로 바꾸는 함수이다.
다음 예는 오늘 날짜를 레이블로 출력하는 예이다.
예 제
Label1.Caption := DateToStr(Date);
DayOfWeek
문 법
function DayOfWeek(Date: TDateTime):Integer;
특정 날짜의 요일을 계산하는 함수이다. 리턴되는 값은 1~7까지의 정수이며, 1이 일요일, 7일 토요일이다. 리턴되는 값이 정수형이므로 월, 화, 수 , 목, 금, 토, 일 로 실제요일 이름으로 바꾸어 주어야 한다.
다음예는 요일이름을 레이블로 출력한다.
오늘이 무슨 요일인지 조사해서 요일 이름을 레이블로 출력하는 예이다.
예 제
Var
  Yo : String;
  ONUL: TDateTime;
begin
    ONUL := Now;
    Case DayOfWeek(ONUL) of
        1 : Yo := '일';
        2 : Yo := '월';
        3 : Yo := '화';
        4 : Yo := '수';
        5 : Yo := '목';
        6 : Yo := '금';
        7 : Yo := '토';
      end;
    Label1.Caption := '오늘은 ' + YO + '요일입니다.';
end;
DecodeDate
문 법
procedure DecodeDate(Date : TDateTime; Var Year, Month, Day: Word);
날짜를 담는 TDatetime형의 변수에서 년,월,일의 값을 분리시키는 함수이다.
분리된 값들은 각각 Year, Month, Day 등의 정수형 변수에 대입된다.
날짜값은 DateToStr 함수로, 문자열로 바꾼 후 한꺼번에 출력할 수 있지만 개별적인 요소를 가공할 후 한꺼번에 출력할 수 있지만, 개별적인 요소를 가공한 후 출력하고자 할 경우는 이 함수를 사용한다. 이 함수의 반대 함수는 EncodeDate 함수이다.
다음예는 오늘 날ㅉ와 현재 시간을 조사한 후 문자열 조립을 통해 말로 시간과 날짜를 알려준다.
예 제
Var
  Present: TDateTime;
  Year, Month, Day, Hour, Min, Sec, MSec: Word;
begin
    Present := Now;
    DecodeDate(Present, Year, Month, Day);
    Label1.Caption := '오늘은'+IntToStr(Year)+'년'+IntToStr(Month)+'월'
            +IntToStr(Day)+'일입니다.';
    DecodeTime(Present, Hour, Min, Sec, MSec);
    Label2.Caption := '지금은'+IntToStr(Hour)+'시'+IntToStr(Min)+'분'
            +IntToStr(Sec)+'초입니다.';
end;
DecodeTime
문 법
fun;
시간을 담는 TDateTime형의 변수에서 시, 분, 초의 값을 분리시키는 함수이다.
분리된 값들은 각각 Hour, Min, Sec, MSec 등의 정수형변수에 대입된다.
시간값은 TimeToStr 함수로 문자열로 바꾼후 한꺼번에 출력할 수 있지만 개별적인 요소를 가공한 후 출력하고자 할 경우는 이 함수를 사용한다.
이 함수의 반대 함수는 EncodeTime 함수이다.
DecodeTime 함수의 예제를 참조하기 바란다.
Delete
문 법
procedure Delete(var S:String; Index, Count: Integer);
한 문자열에서 부분 문자열을 삭제하는 함수이다.
S 문자열의 Index위치에서부터 Count 문자분의 부분 문자열이 삭제된다.
Index 가 문자열의 전체 길이보다 길 경우 삭제는 이루어지지 않으며, Count가 문자열의 남은 부분보다 클 경우 문자열이 끝까지 삭제된다.
Dest 문자열이 'Orange'일 경우 Delete(Dest, 2, 3)은 Dest 문자열의 두번째 문자에서부터 3분자분의 부분 문자열인 'ran'을 삭제하며 Dest 문자열은 'Oge'가 된다.
DeleteFile
문 법
function DeleteFile(const FileName: String): Boolean;
디스크 상의 파일을 지우는 함수이다.
파일이 없거나 읽기 전용 속성을 가질 경우 False를 리턴하며 파일은 지워지지 않는다.
그러나 파일을 지울 수 없는 경우라도 예외는 발 생하지 않는다.
파일은 경로를 포함할 수 있으며, 다음 예는 C 드라이브의 루트에 있는 Command.com 파일을 지우는 예이다.
물론, 이 명령을 실행한 후부터 부팅이 되지 않으니 다른 파일로 실험하세요.
예 제
DeleteFile('C:/Command.Com');
DirectoryExists
문 법
function DirectoryExists(Name: string): Boolean;
인수로 전달된 디렉토리가 존재하는지 검사하며 존재할 경우 True값을 리턴하고 존재하지 않을 경우 False값을 리턴한다.
 
함수 레퍼런스 정리...(E)
EncodeDate
문 법
function EncodeDate(Year, Month, Day: Word): TDateTime;
정수형으로 주어진 년, 월, 일의 값을 사용하여 날짜를 담은 TDateTime 형의 변수 하나를 만들어 주는 함수이다.
Year 는 1~9999까지의 값을 가지며 Month는 1~12, Day는 1~31까지 가능하다.
단, Day값의 범위는 Month 값의 영향을 받으며 Year는 윤년인 경우의 영향도 받는다.
만약 날짜값이 무효일 경우, 예를 들어 2월30일 등의 값이 주어지면 EConvertError예외가 발생하다.
년,월,일을 개별적으로 입력받아 하나의 날짜값을 만들고자 할 때 이 함수를 사용한다.
이 함수의 반대는 DecodeDate 이다.
EncodeTime
문 법
function EncodeTime(Hour, Min, Sec, MSec: Word): TDateTime;
정수형으로 주어진 시, 분, 초의 값을 사용하여 시간을 담은 TDatetime형의 변수 하나를 만든다.
Hour 는 0~12까지 가능하며, 만약 Time24Hour가 True일 경우 0~23까지의 24시간을 표현할 수 있다.
Min, Sec은 0~59까지 가능하며 MSec은 0~999까지 가능하다.
시간값이 무효일 경우, 예를 들어 8시 86분 등의 값이 주어지면 EConvertError 예외가 발생한다.
시,분,초를 개별적으로 입력받아 하나의 시간값을 만들고자 할 때 이 함수를 사용한다.
이 함수의 반대는 DecodeTime 이다.
Eof
문 법
function Eof[(Var F: Text)]: Boolean;
입력한 값들에 대한 끝인가를 점검하는 함수로서 Eof는 End Of File을 의미한다.
DB 작업을 할때, While문을 많이 쓰게 되는데 이경우 필드의 끝이 아닐때까지 계속 루프를 돌리는 작업때 많이 쓰이게 된다.
ExpandFileName
문 법
function ExpandFileName(const FileName: string): String;
파일 이름에 드라이브명과 디렉토리명을 붙여 완전 경로(Full Path)를 만들어내는 함수이다. 덧붙여지는 경로는 현재 드라이브와 현재 디렉토리이다.
ExtractFileExt
문 법
function ExtractFileExt(const FileName: string): string;
완전 경로에서 파일의 확장자만 분리시키는 함수이다.
특정 파일의 확장자를 알고자 할 때 이 함수를 사용하여 확장자만 분리한 후 문자열 비교를 수행하면 된다.
ExtractFileName
문 법
function ExtractFileName(const FileName: String): String;
완전 경로에서 파일 이름만 분리해 내는 함수이다.
파일의 확장자도 같이 분리된다.
즉, 완전 경로에서 드라이브명과 디렉토리명이 제외된다.
ExtractFilePath
문 법
function ExtractFilePath(const FileName: String): String;
완전 경로에서 파일 이름을 제외하고 드라이브명과 디렉토리명만 분리해 내는 함수이다.
다음 예는 완전 경로를 가진 FileName 으로부터 경로만 분리해낸 후 파일이 있는 디렉토리로 이동한다.
예 제
Chdir(ExtractFilePath(FileName));
 
함수 레퍼런스 정리...(F)
FileExists
문 법
function FileExists(const FileName: String): Boolean;
파일이 디스크상에 존재하는지를 조사하는 함수로서, 파일이 없을 경우 False를 리턴한다. 존재하지 않는 파일을 사용하고자 할 경우 예외가 발생하므로 먼저 이 함수를 사용하여 파일이 있는지를 먼저 확인해 보아야 한다.
다음 예는 파일의 존재 여부를 점검해 본 후 파일을 삭제하는 예이다.
예 제
If FileExists(FileName) Then DeleteFile(FileName);
FileOpen
문 법
function FileOpen(const FileName: String; Mode: Word): Integer;
델파이가 사용하는 내부적인 함수로서 사용자가 직접 사용하는 경우는 드문 함수이다. 파일을 오픈할 때는 델파이가 제공하는 Reset, Rewrite, Append등의 프로시저를 사용한다.
FileSearch
문 법
function FileSearch(const Name, DirList: String): String;
DirList에 주어진 디렉토리의 경로에 Name파일이 있는지를 조사해주는 함수로서, DirList는 도스의 Path문에서와 같이 여러개의 디렉토리명을 세미콜론으로 끊어 기입한다. 파일을 찾을 경우 파일의 완전경로를 리턴하며 파일을 찾지 못할 경우 널스트리을 리턴한다.
FindClose
문 법
procedure FindClose(var SearchRec: TSearchRec);
FindFirst, FindNext 함수를 사용한 파일검색을 종료하는 함수로서, 굳이 파일 검색 작업을 종료해 주어야 할 필요는 없으며, 실제로 16비트 버젼의 윈도우에서 이 함수는 아무런 일도 하지 않지만, 32비트 버젼의 윈도우에서는 반드시 검색 종료를 해 주어야 하므로 호환성을 위해 검색 후 종료해 주는 것이 좋다.
FindFirst
문 법
function FindFirst(const Path: String; Attr: Word; Var F: TSearchRec): Integer;
주어진 검색조건과 파일의 속성을 사용하여 첫 번째 일치하는 파일을 검색해 내는 함수로서, Path는 검색하고자 하는 디렉토리와 파일의 조건이며 와일드 카드식으로 표현이 된다.
예를 들어 'c:/windows/*.exe'는 windows 디렉토리의 확장자가 EXE 인 첫번째 파일을 검색한다. Attr인수는 검색대상이 되는 파일의 속성을 지정하며 아래와 같은 속성 상수를 사용한다.
여러가지 속성을 사용할 경우에는 'Or' 연산자로 속성을 연결하면 된다. 예를 들어 읽기전용이면서 숨은 파일을 검색하고 싶다면(faReadOnly + faHidden)과 같이 Attr인수를 설정하면 되는 것이다.
상 수
의 미
faReadOnly
$01
읽기 전용
faHidden
$02
숨은 파일
faSysFile
$04
시스템 파일
faVolumeID
$08
디스크 볼륨
faDirectory
$10
디렉토리
faArchive
$20
기록 속성
faAnyFile
$3F
모든 속성
FindNext
문 법
function FindNext(var F:TSearchRec): Integer;
FindFirst에 이어 계속 검색을 수행하는 함수이다. FIndFirst가 첫번째 검색한 결과를 저장한 F를 다시 인수로 넘겨주면 계속해서 일치하는 조건을 가진 파일을 검색해 내며, 검색한 결과는 역시 F로 저장된다.
검색이 계속 이루어지고 있다면 0을 기턴하며 검색중 에러가 발생했거나 더 이상 조건이 일치하는 파일이 없으면 음수의 에러코드를 리턴한다.
FindFirst와 FindNext는 조건에 맞는 모든 파일을 검색해 낼 때 사용한다.
Format
문 법
function Format(const Format: String; const Args: Array of const): String;
서식 문자열과 뒤따라오는 변수에 의해 문자열을 포맷하는 함수이다. 계산식이나 회계분야에서는 가끔씩 써먹는 함수로서, 이러한 포맷도 지원하는구나하는 정도로 가볍게 받아두고 필요시 다시 살펴보는 방법이 가장 좋은 방법인것 같다.

C의 pintf함수와 사용방법이 유사하며 문자열 내부에 변수값을 삽입할 수 있는 아주 편리한 방법을 제공한다.
서식 문자열에는 일반 문자열과 서식이 삽입되며 일반 문자열은 그대로 출력되지만 서식은 대응되는 인수값으로 채워진다.

서식은 % 기호와 변수의 타입으로 이루어지며 % 와 타입 사이에 인덱스, 좌측 정렬 지정, 폭, 정밀도 지정이 삽입된다.

%[인덱스:][-][폭][.정밀도]타입 일단 Format함수를 사용하는 예를 들어보자...

Var A : Integer; S,
    St : String;
Begin
    A := 29;
    B := 'Lyon, Kim';
    St := Format('My age is %d, My Name is %s', [A,S]);
End;

서식 문자열에 포함된 %d 자리에는 정수형 변수인 A의 값인 29 가 삽입되며, %s 의 자리에는 문자열 변수인 S의 값 Lyon, Kim 이 삽입되는 방식이다.
그럼, 당연히 St 의 문자열은 My age is 29, My Name is Lyon, Kim 이 되는 것이다.

서식 문자열 내의 서식은 인수 리스트의 변수들과 순서대로 대응되며 서식의 개수와 인수의 개수가 일치해야 할뿐만 아니라 대응되는 서식과 변수의 타입도 일치해야만 한다.

만약 개수나 타입이 일치하지 않을 경우 컴파일은 가능하지만 실행중에 에러가 발생하게 된다. 폭 지정이란 변수값이 문자열 내부에서 차지하는 자리수를 지정하며 생략시는 변수값의 길이만큼만 자리를 차지한다. 강제로 자리를 늘리고자 할 경우 서식과 타입사이에 폭을 정수로 지정한다. 예를 들어 %5d 라고 하면 이 서식에 대입되는 정수가 5자리가 안되더라도 5자리를 강제로 차지한다.

단, 여기서 지정하는 폭 지정은 최소한의 폭을 의미할 뿐이며 폭값이 실제값보다도 작더라고 강제로 폭에 맞추지는 않는다. 예를 들어 I가 12345라는 다섯자리 값을 가지는데 %2d와 대응될 경우 폭지정 2를 지키기 위해 45만 출력하지 않으며 이경우는 폭 지정이 무시된다. 즉, I의 12만이 대응된다고 볼 수 있다.

정밀도 지정이란 실수에 사용되며 소수점 이하 몇 자리까지를 문자열로 바꿀 것인가를 지정한다. %10.5f 서식은 10자리를 차지하며 소수점 이하 5자리까지 문자열로 출력한다. 좌측 정력 지정은 폭이 변수값보다 길 경우 공백을 우측에 배치하도록 하며 폭 지정 앞에 '-' 기호를 붙여 표현한다.
%5d 에 대응되는 정수값이 만약 12일 경우 출력은 'bbb12' 가 되지만, 서식을 %-5d 로 변경하면 '12bbb'가 된다. 여기서 b 표시는 공백을 의미한다.

인덱스 지정자는 인수 리스트의 몇 번째 인수를 사용할 것인가를 지정하며 정수 하나와 ':' 을 사용한다. 인덱스 지정자가 없으면 인수 리스트에 나타나는 순서대로 서식과 대응되지만 인덱스를 밝힘으로써 중복되는 인수 리스트를 재사용할 수 있다.

예를 들어 '%d%d%d,1,2,3'은 앞쪽 서식부터 순서대로 정수 1,2,3로 대응되지만 '%d%d%0:d'는 앞쪽 둘은 순서대로 1,2에 대응되고 세번째 서식은 인덱스 지정에 의해 첫 번째 인수 1에 대응된다.

타입 문자는 아래와 같으며 대문자와 소문자를 구분하지는 않는다.
문 자
의 미
d
정수값 하나에 대응된다.
대응되는 변수는 반드시 정수이어야 한다.
e
실수값을 공학적 표기법, 즉 부동 소수점 형식으로 변환된다.
f
실수값을 부동 소수점 형식으로 변환한다.
g
실수값과 대응하되 고정 소수점 형식과 부동 소수점 형식 중 길이가 짧은쪽으로 변환한다.
n
실수값에 대응하며, 천단위로 콤마를 삽입해 준다.
p
포인터 값에 대응된다.
출력되는 문자열은 SSSS:0000 형태의 세그먼트, 오프셋 형태를 띄며 이때, 세그먼트, 오프셋은 모두 네 자리의 16진수를 사용한다.
m
실수값에 대응되며, 화폐 형태의 문자열로 변환한다.
s
문자열 변수, 문자 변수에 대응된다.
x
정수에 대응되며, 16진수 형태의 문자열로 변환된다.
FormatDateTime
문 법
function FormatDateTime(const Format: String; DateTime: TDateTime): String;
TDateTime형의 변수에 저장된 시간과 날짜 정보를 특정한 형태의 문자열 포맷으로 변환하는 함수이다.
이 함수는 시스템의 날짜와 시간을 받아 사용하므로 Y2K 문제를 해결해 나갈 수 있는 아주 유용한 함수임을 알았으면 한다.

문자열로 출력되는 형식은 다음과 같은 지정자에 의해 결정되며 각 지정자는 한 칸 이상의 공백으로 구분되어야 한다. 포맷을 지정하는 Format 인수에는 지정자와 일반 문자열들이 올 수 있으며 일반 문자열들은 겹 따옴표로 싸 주어야 한다.
지정자의 대소문자는 구분하지 않는다.

아래는 FormatDateTime함수내에서 사용하는 문자들이다.
지 정 자
의 미
c
전역변수 ShortDateFormat, LongTimeFormat이 지정하는 형식대로 출력되며 지정자가 생략될 경우의 디폴트 지정자이다.
d
날짜값을 출력하되 선행 제로를 생략한다. (1~31)
dd
날짜값을 출력하되 선행 제로를 출력한다. (01~31)
ddd
요일을 생략형으로 출력한다. Sun, Mon, Sat 등과 같이 출력된다.
이 생략형 요일 이름은 ShortDayNames 변수에 의해 지정된다.
dddd
요일이름은 완전한 형식으로 출력한다.
Sunday, Monday 등과 같이 출력된다. 완전한 요일 이름은 LongDayNames변수에 의해 지정된다.
ddddd
ShortDateFormat 전역 변수가 지정하는 형식으로 날짜가 출력된다.
dddddd
LongDateFormat 전역 변수가 지정하는 형식으로 날짜가 출력된다.
m
월을 출력하되 선행 제로를 생략한다. (1~12)
mm
월을 출력하되 선행 제로를 출력한다. (01~12)
mmm
월 이름을 생략형으로 출력한다. Jan, Dec 등과 같이 출력한다.
이 생략형 월 이름은 ShortMonthName 변수에 의해 지정된다.
mmmm
월 이름은 완전한 형식으로 출력한다.
January, December 등과 같이 출력된다.
완전한 월 이름은 LongMonthName 변수에 의해 지정된다.
yy
년도를 두자리 숫자로 출력한다. (00~99)
yyyy
년도를 네자리 숫자로 출력한다. (0000~9999)
h
시간을 출력하되 선행 제로를 생략한다. (1~12)
hh
시간을 출력하되 선행 제로를 출력한다. (01~12)
n
분을 출력하되 선행 제로를 생략한다. (1~59)
nn
분을 출력하되 선행 제로를 출력한다. (01~59)
s
초를 출력하되 선행 제로를 생략한다. (1~59)
ss
초를 출력하되 선행 제로를 출력한다. (01~59)
t
시간값을 ShortTimeFormat 전역 변수가 지정하는 형식으로 출력한다.
tt
시간값을 LongtimeFormat 전역 변수가 지정하는 형식으로 출력한다.
am/pm
오전과 오후를 출력하며 h 나 hh 지정자의 시간을 12간제로 출력한다.
오전이면 am 이 출력되며 오후면 pm 이 출력된다.
대문자 소문자 모두 쓸 수 있으며, 혼합해서 쓸 수도 있다.
출력되는 결과는 이 지정자의 대소문자 구성을 따른다.
즉, Am/Pm 지정자를 쓰면 Am 이나 Pm 이 출력되며,
AM/PM 지정자를 쓰면 AM 이나 PM 이 출력된다.
a/p
오전과 오후를 출력하며 h 나 hh 지정자의 시간을 12시간제로 출력한다.
오전이면 a 가 출력되며 오후면 p 가 출력된다.
대문자 소문자 모두 쓸 수 있으며 혼합해서 쓸 수도 있다.
출력되는 결과는 이 지정자의 대소문자 구성을 따른다.
ampm
12시간제로 시간을 출력하며 오전일 경우 전역 변수 TimeAmString에 저장된 문자열을 출력하며 오후일 경우 TimePmString에 저장된 문자열을 출력한다.
/
DataSeparator 지정자가 지정하는 날짜 구분 기호를 출력한다.
:
TimeSeparator 지정자가 지정하는 시간 구분 기호를 출력한다.
예 제
FormatDateTime('dddd mmmm d yyyy hh:mm AM/PM', Now);
FirDay December 24 1999 12:25 PM

FormatDateTime(' "지금시간은" ddd mmm d yyyy hh:mm AM/PM', Now);
지금시간은 Fri Dec 24 1999 12:26 PM
 

 



함수 레퍼런스 정리...(G)
GetDir
문 법
procedure GetDir(D: Byte; Var S: String);
지정한 드라이브의 현재 드렉토리를 조사하는 함수이다.

D로 드라이브의 번호를 지정하면 현재 디렉토리가 문자열 S 에 대입되며, 드라이브 번호 D 는 0 일 경우, 디폴트 드라이브 1일 경우 A, 2일 경우 B등과 같이 지정한다.
이 프로시져는 일체의 에러 체크를 하지 않는다.
만약 드라이브 번호로 주어진 D 가 존재하지 않을 경우 조사되는 디렉토리는 'X:/' 가 된다.

다음 예는 현재 드라이브의 디렉토리를 조사하여 레이블에 출력하는 예이다.
예 제
Var
    dir: String;
begin
    GetDir(0, dir);
    Label1.Caption := Dir;
end;
GetMem
문 법
procedure GetMem(Var P: Pointer; Size: Word);
동적으로 메모리를 할당하며 할당된 번지를 포인터형의 변수 P 에 대입하는 함수이다. Size 는 동적으로 할당할 메모리의 크기를 바이트 수로 나타내며, 할당된 메모리의 변수는 P^ 로 읽거나 쓸 수 있다.
 
 
함수 레퍼런스 정리...(H)
Halt
문 법
procedure Halt[ (ExitCode: Word)];
프로그램을 강제로 종료하고 운영체제로 제어권을 넘기는 함수이다.
Exitcode 는 프로그램의 탈출코드이다.
High
문 법
function High(X);
인수로 주어진 X 의 값 중 가장 큰값을 찾는다.
X 가 integer형이라면 결과는 32767이 되며 LongInt형이라면 결과는 2147483647이 된다. 결과값은 인수로 주어진 X와 동일한 형태이다.
다음 예는 열거형 중 가장 큰 값을 찾아내는 예제이다.
레이블로 출력되는 값은 6이다.
예 제
type
    Day = (sun, mon, tue, wed, thu, fri, sat);
Var
    i : Integer;
begin
    i := integer(High(Day));
    label1.Caption := IntToStr(i);
end;
 
 
함수 레퍼런스 정리...(I)
Inc
문 법
procedure Inc(Var X[N: Longint];
변수의 값을 1 증가시키는 함수이다. Inc(X)는 X := X + 1 과 동일한 동작을 한다.
두 번째 인수를 사용하면 1 이상의 값을 증가시킬 수도 있다.
Inc(X, 5)는 X := X + 5 와 동일한 동작을 한다.
첫 번재 인수는 서수형의 변수이며 확장 문법이 적용될 경우 PChar형도 가능하다.
N 은 정수형의 상수 또는 변수여야 한다.
Inc 함수는 가장 최적화된 코드를 생성해 내므로 루프 내부에서 사용하기에 적합하다.
Include
문 법
procedure include(Var S: Set of T; I: T);
집합형 S 에 요소 I 를 추가하는 함수이다.
Include(S, I) 는 S := S + (1) 와 동일한 동작을 하지만 좀 더 효율적인 코드를 생성해 낸다.
InputBox
문 법
function InputBox(Const ACaption, APrompt, ADefault: String): String;
문자열을 입력할 수 있는 대화상자를 보여주고 사용자에게 문자열을 입력받아 리턴한다. 인수의 의미는 인수의 이름을 참조하기 바란다.
아래의 예제는 사용자가 문자열을 입력후 Cancle 버튼을 누르면 디폴트 문자열이 리턴되며 OK 버튼을 누르면 에디트 박스에 입력된 문자열이 입력된다.
예 제
Var
    Str : String;
begin
    Str := InputBox('함수레퍼런스정리[I]','잘되죠?','Oh ! Yes');
end;
그 림
InputQuery
문 법
function InputQuery(const ACaption, APrompt: String; Var Value: String): Boolean;
문자열을 입력할 수 있는 대화상자를 보여주고 사용자에게 문자열을 입력받아 리턴한다. 대화상자가 열리면 아무것도 입력되어 있지 않은 빈 에디트를 보여주며 이 에디트에 사용자가 문자열을 입력한다.
입력된 결과는 리턴값으로 전달되며는 것이 아니라 참조호출로 전달된 Value로 전달되며 리턴값은 사용자가 누른 버튼의 종류이다.
아래의 예제는 사용자가 대화상자에서 어떤 버튼을 눌렀는가를 꼭 알아야 할 경우는 InputQuery 를 사용하며 단순히 문자열만 입력받고자 할 경우는 InputBox 를 사용하면 된다.
예 제
Var
    Str : String;
    Ans : Boolean;
begin
    Ans := InputQuery('함수레퍼런스정리[I]','이것도 잘되죠?',Str);
end;
그 림
Insert
문 법
procedure Insert(Source: String; Var S: String; Index: Integer);
한 문자열의 중간에 다른 문자열을 삽입하는 함수이다.
삽입되는 위치는 Index 인수가 지정하는 위치이다.
문자열을 삽입한 후의 문자열 길이가 255 자를 넘을 경우 255 문자 이후의 문자는 잘려진다.
Dest 문자열이 'Orange' 이고, Src 문자열이 'Apple' 인 경우 Insert(Src, Dest, 3); 는 Dest 문자열의 3번째 문자인 a 위치에 Src 문자열을 삽입하며 Dest 문자열은 'OrAppleange' 가 된다.
아래 예제는 레이블로 abcdhotdogefghijkl 문자열이 출력된다.
예 제
Var
    S : String;
begin
    S := 'abcdefghijkl'; Insert('hotdog', S , 5);
    label1.Caption := S;
end;
Int
문 법
function Int(X: Real): Real;
실수 X의 정수부를 구하는 함수이다.
소수부는 반올림되지 않으며 버려진다.
Int(3.14) 는 3 의 값을 반납한다.
주의할 것은 Int 함수의 리턴값은 정수값을 담지만 데이터형은 여전히 실수형이라는 점이다.
IntToHex
문 법
function IntToHex(Value: Longint; Digits: Integer): String;
10 진 정수값을 16진수 형태의 문자열로 바꾸어 문자열을 리턴하는 함수이다.
예를 들어 IntToHex(100, 2) 명령에 의해 십진수 100을 16진수로 바꾼 문자열 '64'가 리턴된다. Digits 인수는 만들어질 16진수의 자리수를 지정한다.
그러나 이 값은 최소한의 자리수를 지정할 뿐이며 자리수보다 16진수의 크기가 더 많을 경우는 이 인수값은 무시된다.
즉, IntToHex(100, 3)에 의해 최소한 세 자리를 할당하여 '064'가 리턴되지만 IntToHex(100, 1)로 한다고 하면 두 자리의 16진수를 강제로 한 자리 숫자로 만들지는 않는다는 것이다.
IntToStr
문 법
function IntToStr(Value: LongInt): String;
정수를 문자열로 바꾸어 리턴하는 함수이다.
정수값을 레이블이나 에디트박스에 출력하고자 할 경우 직접 그 값을 출력할 수는 없다.
왜냐하면 레이블의 Caption 속성이나 에디트의 Text 속성은 문자열형이므로 정수형 값을 대입받을 수 없기 때문이다.
정수값을 문자열로 바꾸고자 할 경우에는 이 함수를 사용한다.
IOResult
문 법
function IOResult: Integer;
마지막 입출력 동작에서 발생한 상태값을 조사한다.
이 함수를 사용하여 입출력 에러를 검사하려면 {$I-} 옵션을 반드시 꺼 주어야 한다.
IOResult 함수를 호출하면 내부적인 에러값은 리셋된다.
이 함수가 리턴하는 값이 0 이면 에러가 없다는 것이다.
 
 
함수 레퍼런스 정리...(K)
KeyPressed
문 법
function KeyPressed: Boolean;
키보드에서 키가 눌러지면 True 를 리턴하며, 키가 눌러져 있지 않으면 False 를 리턴하는 함수이다.
ReadKey 함수로 키 값을 읽기 전에 키가 눌러져 있는지 점검해 볼 때 사용한다.
 
 
함수 레퍼런스 정리...(L)
Length
문 법
function Length(S: String): Integer;
주어진 문자열의 길이를 구하는 함수이다.
Length('Korea') 는 5의 값을 리턴한다.
LowerCase
문 법
function LowerCase(Const S: String): String;
문자열 내부의 대문자를 모두 소문자로 바꾸어주는 함수이다.
문자 변환은 7비트의 아스키 코드 내에서 이루어지며 문자 'A' ~ 'Z' 까지가 변환의 영향을 받는다.
나머지 기호나 숫자, 한글은 변환되지 않는다.

 

 


함수 레퍼런스 정리...(M)
MessageDlg
문 법
function MessageDlg(Const msg: String; AType: TMsgDlgType;
         AButtons: TMsgDlgButtons; HelpCtx: LongInt): Word;
Message를 전달하는 대화상자를 보여주며 사용자로부터 응답을 받아들여 리턴하는 함수이다.
Msg 문자열이 Message의 내요이며 AType에 의해 Message 상자의 형태와 캡션에 출력된 문자열이 결정된다.
형 태
mtWarning노란색 느낌표 비트맵이 나타난다. [그림참조]
mtError빨간색의 엑스 비트맵이 나타난다. [그림참조]
mtInformation파란색의 i 자 비트맵이 나타난다. [그림참조]
mtConfirmation물음표 비트맵이 나타난다. [그림참조]
mtCustom비트맵을 사용하지 않는다. [그림참조]
ABotton 인수는 Message 상자에 나타날 버튼의 종류를 지정하며 여러개의 버튼을 집합형으로 전달한다.
리턴값은 사용자가 대화상자에 나타난 버튼 중 어떤 버튼을 눌렀는가를 나타내는 값이다.
버튼기턴 값
mbYesmrYes
mbNomrNo
mbOKmrOK
mbCancelmrCancel
mbHelp
mbAbortmrAbort
mbRetrymrRetry
mbIgnoremrIgnore
mbAllmrAll
버튼 이름을 일일이 지정해 주는 것이 번거로우면 미리 정의 되어 있는 다음과 같은 집합명을 사용해도 무방하다.
mbYesNoCancel 은 Yes, No, Cancle 버튼을 한꺼번에 보여주고,
mbOkCancel 은 Ok, Cancle 버튼을 한꺼번에 보여준다.
mbAbortRetryIgnore 는 Abort, Retry, Ignore 버튼을 한꺼번에 보여준다.

이 집합명은 그 자체가 집합형이므로 [] 괄호를 쓰지 않아도 된다.
예 제
If MessageDlg(('Ok 누르면 실행합니다.'), MtInformation, mbOkCancel, 0) = mrOk Then
    label1.caption := 'Ok 를 눌렀군요...'
else
    label1.caption := 'Cancel 을 눌렸군요...';

위의 예제는 MessageDlg를 사용하는 방법에 대해 간단히 알아볼 수가 있다.
만약, ABotton인수에 현재는 mbOkCancel 을 넣었지만, 여러개의 버튼을 넣는다면,
[mbOk, mbCancel] 을 입력해도 똑같은 결과를 나타낸다.
여러개를 한꺼번에 쓸 때는 '[ ]' 안에 넣어야만 하고 집합형일 경우는 그냥 쓰면 된다는 아주 간단한 예제이다.
아래 그림은 실행한 화면의 MessageDlg 예제였다.
그 림
MessageDlgPos
문 법
function MessageDlgPos(Const Msg: String; AType: TMsgDlgType; AButtons:
         TMsgDlgButtons; HelpCtx: LongInt; X, Y: Integer): Word;
MessageDlg 함수와 동일한 동작을 하는 함수이다.
단 MessageDlg는 대화상자를 무조건 화면 중앙에 열어주지만 이 함수는 X, Y 인수를 사용하여 대화상자가 출력된 화면 좌표를 지정할 수 있다.
MkDir
문 법
procedure MkDir(S: String);
새로운 서브 디렉토리를 생성한다.
문자열 S에 생성하고자 하는 서브 디렉토리의 경로를 준다.
디렉토리를 생성하는 규칙은 도스에서와 동일하다.
즉, 같은 이름의 디렉토리나 화일이 있어서는 안된다.
 
함수 레퍼런스 정리...(N)
Now
문 법
function Now: TDateTime;
현재 날짜와 시간을 한꺼번에 구하는 함수이다.
날짜와 시간은 TDateTime형이므로 곧바로 문자열로 출력할 수 없으며 DateTimeToStr함수를 사용하여 문자열로 바꾸어 주어야 한다.
Label1.Caption := DateTimeToStr(Now); 명령에 의해 Label1에 오늘 날짜와 시간이 출력된다. StrToDate 문자열을 날짜 형태로 바꾸어 TDateTime형의 변수에 저장해 준다.
문자열에 저장된 날짜는 반드시 유효한 날짜 정보를 가지고 있어야 하며 만약 날짜가 무효할 경우 EConverError 예외를 발생시킨다.
문자열은 년, 월, 일을 나타내는 두 개 또는 세 개의 숫자를 담고 있어야 하며 각 요소는 DataSeparator 변수가 지정하는 구분문자(보통 슬래시 기호)에 의해 구분되어 있어야 한다. 년, 월, 일의 순서는 ShortDateTime 변수에 따라 달라지며 mm/dd/yy 또는 dd/mm/yy 또는 yy/mm/dd 중 하나가 된다.
만약 문자열에 두 개의 숫자만 있으면 이는 각각 월, 일의 정보로 인식되며 년은 올해의 년도가 된다.
 
함수 레퍼런스 정리...(O)
Odd
문 법
function Odd(X: LongInt): Boolean;
인수로 주어진 정수가 홀수인지를 검사하는 함수이다.
만약, 홀수이면 True값을 리턴하며, 짝수이면 False값을 리턴한다.
다음예는 인수로 주어진 정수값 I 가 홀수인지 짝수인지를 검사하여 레이블로 출력하는 예제로서 I에 3을 대입하면 '홀수입니다.'라는 메세지를 레이블로 출력하는 예제이다.
예 제
Var
    I : Integer;
begin
    I := 3;
    If Odd(I) Then
        Label1.Caption := '홀수입니다.'
    Else
        Label1.Caption := '홀수가 아닙니다.';
end;
Ord
문 법
function Ord(X): LongInt;
순서형값의 순서값을 조사하는 함수로서, 다음예제는 열거형의 열거요소중 Soo가 몇번째 값인지를 조사하는 예제이다. 여기서의 순서값은 2가 출력된다.
예 제
Type
    Yoil = (Wol,Hwa,Soo,Mok,Gum,TTo,Il);
begin
    Label1.Caption := 'Soo Member Is ' + IntToStr(Ord(Soo));
end;
 
함수 레퍼런스 정리...(P)
Pi
문 법
function Pi: Real;
원주율을 구하는 함수이다.
원주율은 3.1415926535897932385...로 정의되어 있으며 이값은 부동 소수점 연산 보조 프로세서가 있는지 없는지에 따라 정확도가 달라질 수 있다.
Pos
문 법
function Pos(SubStr: String; S: String): Byte;
문자열내의 부분 문자열을 검색하는 함수이다.
부분 문자열이 검색된 위치를 리턴해 주며, 만약 부분 문자열이 발견되지 않으면 리턴값은 0 이다. 이 함수는 문자열 검색에서 탁월한 성능을 발휘한다.
자세한 사항은 도움말을 참고하기 바란다.
 
함수 레퍼런스 정리...(R)
ReadKey
문 법
function ReadKey(Buffer: PChar; Count: Word): Word;
키보드로부터 문자값을 읽는 함수이다.
단, 이 함수는 표준 ASCII 코드만을 읽을뿐 기능키나 커서 이동키 등의 확장키 코드는 읽지 못한다.
Readln
문 법
procedure Readln([Var F; Text;] V1[V2,...,Vn]);
파일로부터 문장 한 줄을 읽어 변수 V1이하에 대입하며 다음 문장으로 이동하는 함수이다. Readln(F)와 같이 읽어들일 변수를 지정하지 않으면 다음 줄로 이동하기만 한다.
파일 변수가 생략될 경우는 표준 입력 장치인 키보드로부터 문자열을 입력받아 V1이하의 변수에 대입한다.
인수없이 Readln만 사용되면 Enter키가 입력될 때까지 대기한다.
다음 예는 키보드로부터 문장을 입력받아 다시 레이블로 출력하는 예제이다.
예 제
Var
    S : String;
begin
    Write('문장을 입력하세요');
    Readln(S);
    Label1.Caption := S;
end;
Rename
문 법
procedure Rename(Var F: Newname);
파일의 이름을 변경하는 함수이다.
변경하고자 하는 이름을 문자열로 전달해 주면 된다.
파일명을 변경하려면 AssignFile 함수로 파일 핸들에 외부 파일명을 할당해 주고 이 함수를 호출하면 되는데, 파일을 오픈할 필요까지는 없다.
ReWrite
문 법
procedure ReWrite(Var F; File [;Recsize: Word]);
파일을 쓰기 전용으로 오픈하는 함수이다.
F는 AssignFile함수로 외부파일과 연결된 파일 핸들이며 RecSize는 F가 untyped 파일일 경우 한번에 출력할 레코드의 크기를 지정한다.
RecSize가 생략될 경우 이 값은 128바이트로 간주된다.
파일이 없을 경우에는 파일을 생성하고 파일이 이미 열려져 있으면 파일을 닫은 후에 다시 생성하며 파일 위치는 파일의 선두에 맞추어 진다.
이 함수로 파일을 오픈할 후에 Writeln등의 함수로 데이터를 파일로 출력하게 된다.
다음 예는 Test.txt라는 간단한 파일을 만든후 문자열 하나를 출력하는 예제이다.
파일 입출력이 끝난 후에 파일 핸들은 반드시 Closefile 프로시져로 닫아 주어야 한다.
예 제
Var
    F : TextFile;
begin
    AssignFile(F, 'Test.txt');
    ReWrite(F);
    Writeln(F, '출력할 내용을 쓴다.');
    CloseFile(F);
end;
RmDir
문 법
procedure RmDir(S : String);
서브 디렉토리를 삭제하는 함수이다.
삭제할 디렉토리명을 문자열로 넘겨주는데, 도스의 RM 명령과 거의 동일한 규칙을 사용하며 디렉토리가 비어 있지않을 경우, 현재 디렉토리인 경우, 루트 디렉토리인 경우는 디렉토리를 삭제할 수 없다.
Round
문 법
function Round(X : Real): LongInt;
실수값 X 를 정수값으로 만들어주는 함수이다.
즉, 실수의 소수부분을 버리고 정수 부분만 결과로 취한다.
이때 소수부 첫째 자리에서 반올림이 일어나며 반올림의 결과는 부호와 상관없이 일어난다. 반올림의 결과와 LongInt형의 범위를 벗어날 경우는 실행시 에러가 발생한다.
다음 예제는 실수 3.1415 를 반올림하여 정수로 만드는 예제로서 레이블의 출력결과는 소수부가 잘려나간 3이되며, 만약 실수의 값이 3.6415일 경우는 반올림에 의해 4가 출력된다.
예 제
Var
    F : Double;
begin
    F := 3.1415;
    Label1.Caption := IntToStr(Round(F));
end;
RunError
문 법
procedure RunError[(ErrorCode: Byte)];
실행시 에러를 발생시키고 프로그램을 종료하는 함수이다.
치명적인 에러가 발생했을 경우 이 함수를 이용한다.

 

 


함수 레퍼런스 정리...(S)
Seek
문 법
procedure Seek(Var F; N: LongInt);
파일의 현재 위치(FP)를 N위치로 옮긴다.
Untyped 파일일 경우 N의 의미는 파일 선두에서의 바이트 단위 거리이지만 Typed파일일 경우 N은 N번째 요소의 위치를 의미한다.
예를 들어 레코드형 파일일 경우 N이 5이면 여섯 번재의 레코드의 위치로 이동한다. 첫번째 레코드의 번호가 0번이다.
Seek(F,FileSize(F))는 파일의 끝으로 현재위치를 이동시킨다.
SeekEof
문 법
function SeekEof[(Var F: Text)]: Boolean;
파일의 현재위치가 끝(EOF)인지 점검한다.
SeekEoln
문 법
function SeekEoln[(Var F: Text)]: Boolean;
파일의 현재위치가 줄의 끝(EOL)인지 점검한다.
SelectDirectory
문 법
function SelectDirectory(Var Directory: String; Options: TSelectDirOpts; HelpCtx:
LongInt): Boolean;
디렉토리 선택 대화상자를 보여주고 사용자로 하여금 디렉토리를 선택하도록 한다.
드라이브 콤보박스와 디렉토리 리스트 박스를 사용하여 디렉토리를 선택하며 파일 리스트 박스는 어떤 파일이 있는지만 보여준다.
디렉토리를 선택하는 것뿐만 아니라 에디트박스에 디렉토리명을 입력하여 없는 디렉토리를 직접 생성할 수도 있다.
인수로 주어지는 Directory문자열은 대화상자가 처음 열릴때 선택될 디렉토리이며 사용자가 대화상자에서 선택한 디렉토리명이 인수로 리턴된다.
사용자가 OK버튼을 누르면 True를 리턴하고 Cancle버튼을 누르면 False를 리턴한다.
두번째 인수 Options는 대화상자의 모양과 기능을 정의하는 옵션이며 다음과 같은 값의 집합형이다.
옵 션
의 미
[]사용자는 존재하는 디렉토리를 선택할 수 있을 뿐이며 없는 디렉토리를 만들 수 없다.
sdAllowCreate에디트 박스에 사용자가 직접 존재하지 않는 디렉토리를 입력하는 것을 허용한다.
그러나 이 옵션을 사용한다고 해서 디렉토리를 생성해 주는 것은 아니며 사용자가 직접 Directory 인수를 참조하여 생성해 주어야 한다.
sdPerformCreate이 옵션을 sdAllowCreate 옵션과 함께 사용할 경우 존재하지 않는 디렉토리가 입력되면 직접 디렉토리를 만들어 준다.
sdPrompt디렉토리를 새로 만들기 전에 사용자로부터 디렉토리를 정말로 만들 것인가를 물어본다.
예 제
Uses 절에 FileCtrl 를 추가해야만 한다.

Var
    Dir: String;
begin
    Dir := 'C:/DELPHI';
    If SelectDirectory(Dir, [sdAllowCreate, sdPerformCreate, sdPrompt], 0) then
        Label1.Caption := Dir;
end;

디렉토리 선택 대화상자의 모습은 아래와 같다.
그 림
SizeOf
문 법
function SizeOf(X): Word;
X의 크기를 바이트 단위로 리턴하는 함수이다. X는 변수이거나 데이터 타입이다. SizeOf(Integer)는 2이며, SizeOf(Double)은 8 이다.
주로 레코드나 오브젝트 등 크기가 큰 데이터의 크기를 계산할 때 사용한다. 가상 메소드 테이블을 가진 오브젝트의 인스턴스크기를 조사하면 VMT에 저장된 크기가 리턴된다.
Sqr
문 법
function Sqr(X: Real): Read;
X의 제곱값을 구하는 함수이다. Sqr(X)는 X*X와 동일한 결과를 계산해 낸다.
Sqrt
문 법
function Sqrt(X: Real): Real;
X의 제곱근을 구하는 함수이다. Sqrt(2)는 1.414213이다.
이때 계산되는 제곱근은 양의 제곱근이다.
Str
문 법
procedure Str(X[: Width [: Decimals]]; Var S);
숫자값 X를 문자열 S로 출력하는 함수이다. 이때 출력되는 값의 폭은 Width 인수가 지정하는 폭을 사용하며 Decimals인수가 지정하는 정밀도를 사용한다. 숫자값 X는 정수형이거나 실수형 모두 가능하다. 다음예는 3.1415를 폭 5, 정밀도 3으로 문자열로 변환하는 예제이다. 이때, 레이블로 출력되는 문자열은 3.142이다.
예 제
Var
    F : Double;
    S : String;
begin
    F := 3.1415;
    Str(F:5:3, S);
    Label1.Caption := S;
end;
StrCat
문 법
function StrCat(Dest, Source: PChar): PChar;
두개의 문자열을 연결하는 함수이다.
Source문자열을 Dest문자열에 추가하며 연결된 문자열을 리턴한다.
문자열의 길이 점검은 하지 않으므로 Dest문자열이 Source의 문자열을 충분히 수용할만한 크기를 가지도록 해야한다. 다음 예제는 두개의 문자열을 결합하는 예제로서 레이블로 출력되는 결과는 Made In Korea 이다.
예 제
Var
    S1 : Arrary[0..128] of Char;
    S2 : Arrary[0..128] of Char;
begin
    StrCopy(S1,'Made In ');
    StrCopy(S2.'Korea');
    trCat(S1,S2);
    Label1.Caption := StrPas(S1);
end;
StrComp
문 법
function StrComp(Str1, Str2: PChar): Integer;
두개의 문자열을 비교하는 함수이다.
S1과 S2문자열이 같으면 0을 리턴하며, S1S2이면 양수를 리턴한다.
문자열끼리의 비교는 문자열을 이루는 각 문자의 문자코드를 비교하여 수행한다.
StrCopy
문 법
function StrCopy(Dest, Source: PChar): PChar;
널 종료 문자열을 복사하는 함수이다.
Source문자열을 Dest문자열에 복사하며 Dest문자열을 리턴한다.
이 함수는 문자열의 길이점검을 하지 않으므로 Dest문자열의 길이가 Source문자열의 길이보다 짧지 않도록 주의해야 한다. 만약 Dest문자열의 길이가 Source문자열을 충분히 수용하지 못할 경우 Dest 뒷부분의 다른 변수값이 파괴된다.
널 종료 문자열끼리는 := 연산자에 의해 직접 대입할 수 없으므로 이 함수를 사용하여 문자열끼리 복사해 주어야 한다.
예를 들어 Source가 'Korea'이고 이 값을 Dest문자열로 대입하고 싶다고 해서
Dest := Source와 같은 문장을 쓸수는 없다.
이때는 StrCopy(Dest, Source)와 같이 StrCopy함수를 사용하여야 한다.
ShowMessage
문 법
procedure ShowMessage(Const Msg: String);
대화상자를 열어 Msg 문자열을 보여주기만 하며 OK버튼을 누르면 대화상자를 닫는다.
캡션에는 이 대화상자를 호출한 프로그램의 실행파일이름을 출력한다. 간단한 메세지만을 전달하고 사용자의 입력을 받아야 할 필요가 없을 때 이 함수를 자주 사용한다.
예 제
ShowMessage('ShowMessage 함수의 실행화면입니다.');
그 림
ShowMessagePos
문 법
procedure ShowMessagePos(Const Msg: String; X, Y: Integer);
ShowMessage프로시져와 동일한 동작을 하는 함수이다.
하지만 ShowMessage는 대화상자를 무조건 화면 중앙에 열어주지만 이 ShowMessagePos함수는 X, Y인수를 사용하여 대화상자를 출력될 화면좌표를 지정할 수 있다.
StrLower
문 법
function StrLower(Str: PChar): PChar;
주어진 문자열을 소문자로 바꾼다.
StrToDate
문 법
function StrToDate(Const S: String): TDateTime;
문자열을 날짜 형식으로 바꿔어주는 함수이다.
문자열은 날짜 형식으로 되어 있어야 한다. 즉, 문자열 안에는 날짜를 이루는 세가지 요소가 순서에 맞게 배치되어 있어야 하며 각 요소는 날짜 구분 문자(/)로 분리되어 있어야 한다.
문자열에 날짜로 변경할 수 없는 문자가 있을 경우 EConvertError 예외가 발생한다.
StrToDateTime
문 법
function StrToDateTime(Const S: String): TDateTime;
문자열은 날짜와 시간을 담는 TDateTime형의 변수로 바꿔어주는 함수이다. 문자열에는 MM/DD/YY HH:MM:SS 형태로 날짜와 시간이 담겨 있어야 하며 시간값은 24시간제로 표현하거나 AM, PM을 추가로 뒤에 붙여주어야 한다.
StrToFloat
문 법
function StrToFloat(Const S: String): Extended;
문자열을 실수값으로 변환하는 함수이다. 문자열에는 부호를 나타내는 +/- 와 숫자, 그리고 소수점만 있어야 하며 지수를 나타내는 E가 올 수 있다.
그 외의 문자가 있을 경우는 EConvertError예외가 발생한다.
StrToInt
문 법
function StrToInt(Const S: String): LongInt;
문자열을 정수값으로 변환하는 함수이다. 이때 문자열에는 숫자로 바꿀 수 없는 문자가 있어서는 안되며, 만약 무효한 문자가 있을 경우 EConvertError예외를 발생시킨다.
에디트박스에 사용자가 입력한 값을 정수형 변수에 대입하고자 할 때 에디트 박스의 Text속성과 정수형 변수의 데이터형이 일치하지 않아 대입이 불가능하다.
문자열에 입력된 정수를 정수형 값으로 바꾸어 주어야 정수형 변수에 대입할 수 있다.
StrToTime
문 법
function StrToTime(Const S: String): TDateTime;
문자열을 시간 형태로 바꾸어 TDateTime형의 변수에 저장해 두는 함수이다. 문자열에는 HH:MM:SS 형태로 시, 분, 초가 담겨 있어야 하며, AM,PM은 있어도 되고 없어도 된다.
시간은 반드시 24시간 형태로 표시해 주어야 한다.
예를 들어 오후 8:30 은 20:30으로 표현하는데, 만약 문자열에 무효한 시간값이 들어있을 경우에는 EConvertError예외를 발생한다.
StrUpper
문 법
function StrUpper(Str: PChar): PChar;
주어진 문자열을 대문자로 바꿔주는 함수이다.
 
함수 레퍼런스 정리...(T)
Time
문 법
function Time: TDateTime;
시스템의 시계를 참조하여 현재 시간을 구하는 함수이다.
시간은 TDateTime형이므로 곧바로 문자열로 출력할 수 없으며 TimeToStr함수를 사용하여 문자열로 바꾸어 주여야 한다. Label1.Caption := TimeToStr(Time) 명령에 의해 Label1에 현재시간이 출력된다.
TimeToStr
문 법
function TimeToStr(Time: TDateTime): String;
시간을 나타내는 Time을 문자열 형태로 변경하는 함수이다.
시간값을 곧바로 레이블이나 에디트등으로 출력할 수 없기 때문에 이 함수를 사용하여 문자열로 변경해 주어야 한다.
Trunc
문 법
function Trunc(X: Real): LongInt;
실수의 소수점 이하를 버리고 정수부만 취하는 함수이다. Round함수는 소수점 첫째자리에서 반올림을 하지만 이 Trunc함수는 반올림없이 무조건 소수점을 버린다.
다음 예는 3.6415를 정수부분만을 취하여 레이블에 3을 출력하는 예제이다.
예 제
Var
    F : Double;
begin
    F := 3.6415;
    Label1.Caption := IntToStr(Trunc(F));
end;
 
함수 레퍼런스 정리...(U)
UpCase
문 법
function UpCase(Ch: Char): Char;
문자 Ch를 대문자로 바꿔주는 함수이다.
소문자 a 에서 대문자 Z 까지의 문자가 대문자 A ~ Z 로 변경되며 그 외 나머지 문자일 경우는 전혀 영향을 받지 않는다.
UpperCase
문 법
function UpperCase(const S: string): string;
문자열 내부의 소무낮를 모두 대문자로 바꾸어 주는 함수이다.
문자 변환은 7 비트의 아스키코드내에서 이루어지며 문자 'A' ~ 'Z' 까지가 변환의 영향을 받는다. 나머지 기호나 숫자, 한글은 변환되지 않는다.
 
함수 레퍼런스 정리...(V)
Val
문 법
procedure Val(S; var V; var Code: Integer);
문자열 변수 S 를 숫자형 변수로 바꾸어 주는 함수이다.
문자열 변수 S 에는 숫자가 담겨 있어야 한다.
문자열을 바꾼 결과를 받기위한 인수 V는 정수형이거나 실수형 변수 모두 가능하다.
S에 숫자로 바꿀 수 없는 무효 문자가 없다면 Code 값은 0 가 된다.
널 종료 문자열의 경우 Code에 리턴되는 에러 위치는 실제문자의 위치보다 하나가 더 많은 값이 된다.
 
함수 레퍼런스 정리...(W)
Write
문 법
procedure Write([Var F: Text;] P1[,P2,...,Pn]);
변수값을 파일로 출력하는 함수이다.
F 는 출력용으로 오픈된 텍스트파일이어야 하며 파일이 생략될 경우 표준 출력 장치인 화면으로 출력된다.
파일 변수 다음의 이수 P1 이하는 파일로 실제 출력될 값들이며, 이 값에 필드 폭, 정밀도를 지정할 수 있다.
출력할 수 있는 타입은 문자형, 정수형, 실수형, 문자열, 진위형 등이 있다.
타입도 파일일 경우 출력되는 변수 V1 이하는 파일의 요소와 같은 형이어야 한다.
즉, 레코드형 파일이라면 출력되는 값도 같은 형의 레코드이여야 한다. 파일의 현재 위치가 파일의 끝이라면 파일의 크기는 출력된 데이터의 길이만큼 늘어난다.
Writeln
문 법
procedure Writeln([Var F: Text;] P1[,P2,...,Pn]);
write 함수의 기능을 확장한 함수이다.
Write 를 호출하여 변수를 파일로 출력하되 변수 값 다음에 EOL (End Of Line)을 출력하여 자동으로 개행되도록 한다.

출처 : Tong - 김굽다불낸뇬님의 Tip통


극사실 항공 애니 'AREA 88’의 '옥의티' 기타

극사실 항공 애니 'AREA 88’의 '옥의티'


[도깨비뉴스 2006-03-26 19:34:35]

이번호 ‘항공 영화속 옥의 티를 찾아라’는 항공 애니메이션의 걸작 ‘에어리어88’이 선정되었습니다. 국내에서는 ‘지옥의 외인부대’로 알려져 있죠. 편집팀은 지난호까지 연재된 내용의 댓글을 보고 조종사 못지않은 항공매니아 독자들의 식견에 놀라지 않을 수 없었습니다. 그래서! 이번편은 ‘특별히’ 매니아분들을 위해 자세하고 긴~ 지면을 할애하였습니다. [편집자주]

극사실 항공 애니메이션 ‘에어리어88(AREA 88)’ 소개
오늘 분석할 ‘에어리어 88’은 전투기를 좋아하는 항공 매니아들에게 극찬을 받아온 항공 애니메이션으로, 박진감 넘치는 사실적인 전투 묘사와 감동적인 전투 조종사들의 끈끈한 전우애는 어렸을 적 조종사의 꿈을 꾸었던 필자의 마음을 휘저어 놓았었다.

이 작품은 ‘신타니 카오루’의 원작만화를 바탕으로 제작된 애니메이션이다. 1985년 ‘스튜디오 피에로’에서 OVA(Original Video Animation : 극장 상영이나 TV 방영 없이 Video로 출시되는 비디오 전용 애니메이션)로 만들어 졌고, 총 3부(1부 : 배반의 하늘, 2부 : 늑대의 조건, 3부 : 불꽃의 신기루)로 이루어져 있다. 우리나라에서는 1988년 현충일 특집으로 TV에 방영되어 큰 인기를 끌었는데, 이 때 방영된 제목은 ‘지옥의 외인부대’였다. 당시 어린이에서 어른에 이르기까지 ‘지옥의 외인부대’는 당대 최고의 항공만화라는 극찬을 들으며 하나의 신드롬을 일으켰는데, 지금도 20대에서 30대, 40대에 이르기까지 많은 이들에게 당시 파일럿의 로망을 불어 넣기도 했다. 또한 2004년에는 일본에서 총 12화로 재구성된 3D 애니메이션으로 제작되어, TV에 방영되기도 했다.

‘에어리어 88’의 실제 모델은 2차 세계대전 때 있었던 ‘Flying Tigers’라고 하는 용병부대인데 이 부대는 중국이 일본을 상대하기 위해 고용한 미국인으로 구성되어 있었고, P-40 전투기를 운영하였는데, 이 ‘Flying Tigers’는 군기가 문란한 것으로 유명했다. 원작자는 “돈에 고용된 용병 전투 비행단”과 “문란한 군기”에서 영감을 얻었다고 한다. 실제로, 이 작품에 등장하는 조종사들 사이에선 지휘체계도 없고, 단지 사령관(샤키)만이 그들을 통제하고 명령할 뿐이다.

애니메이션에 등장하는 전투기들은 실제 현대전에서 운용되는 기종들로, F-4, F-5, F-14, F-16, F-18, A-10 등의 전투기가 아군으로, AV-8A, MIG-21, MIG-23 등이 적군 전투기로 등장한다. 주인공인 ‘카자마 신’은 전투기를 모두 세 번 바꾸는데 처음에 타는 항공기는 F-8E 크루세이더(Crusader), 두 번째는 F-5 타이거-II(Tiger-II), 세 번째는 F-5 타이거-II의 업그레이드 형인 F-20 타이거 샤크(Tiger Shark)이다.

실제 촬영이 아닌 작화로 구성된 애니메이션을 두고 옥의 티를 운운하는 것은 억지가 아니냐는 의문을 가질 수도 있겠다. 하지만 실제 전투조종사인 필자의 시선에도 결코 ‘만화’답지 않은 이 작품의 실사 고증은 ‘상상’의 그것과는 사뭇 다르다. 실제 제작에도 전투조종사의 자문과 고증이 큰 비중을 차지했음을 감안해 이 작품이 이번 호의 주인공으로 선정되었음을 미리 언급하며 이제부터 전혀 ‘만화’답지 않은 ‘에어리어88’의 옥의 티를 찾아보기로 하자.

여객기 조종사가 바로 전투기로 전투를? 자기 마음대로 전투기를 골라 타기?
이 작품을 보면서 생기는 첫 번째 의문점은 ‘어떻게 여객기 조종사가 한 번도 탄 적이 없는 전투기를 그렇게 잘 조종하고, 또한 아무렇지도 않게 비행기를 바꾸어 탈수 있는가’하는 점이었다. 물론 이 부분이 전혀 불가능한 것은 아니나 현실적으로는 거의 이루어지기 힘든 부분이라고 생각한다. 하지만 이 정도는 작품의 재미를 위해 설정된 어쩔 수 없는 픽션의 한계라고 생각하고 본격적인 옥의 티를 찾아보자!

‘에어리어88’은 매니아들에게 ‘잔인하며 사실적인 전투묘사’로 유명하다. 어린시절 막연한 동경으로 바라보던 이 작품을 다시금 전투기 조종사의 신분에서 ‘매스’를 들어 해부해 본 결과, 정말 필자도 놀랄 정도로 사실적인 부분이 많다는 점을 알 수 있었다. 실제 존재하는 항공기를 모델로 작화하여, 전투 장면마다 나오는 전투기의 Cockpit, 항공기 탑승 및 시동 거는 과정, 전술 적용, 미사일 및 폭탄 장착 모습등 세세한 부분까지 이미 알려진 여타 항공영화보다도 훨씬 사실에 충실한 점이 인상적이었다.

그러나, 만화 특유의 기발한 상상력과 아이디어는 다소 황당한 장면을 몇가지 만들어 내는데, 첫째로 F-8 크루세이더가 날개를 접고 비행하며 철근 사이를 통과하는 장면. 둘째, 여객기 밑에 붙은 폭탄을 전투기가 기총으로 배면 편대비행을 하며 떼어내는 장면. 셋째, 계곡 사이의 빈 공간을 HUD(Head Up Display : 조종사가 계기를 보기 위해 머리를 아래로 내려 계기판을 보지 않고도 고도, 속도 등의 항공기의 상태를 알 수 있도록 Cockpit 전면부에 설치한 시현장치)에 입력시켜 계곡 사이를 통과하는 장면. 넷째, 탄환이 떨어지자 외부 연료탱크를 떼어내 아래에 있는 전투기를 추락시키는 장면등이 바로 그러한 것들이다. 이런 장면은 이미 매니아들 사이에서 현실성 여부가 논란이 되어 인터넷상에 정보가 많이 알려져 있으므로 이번호에서는 언급하지 않기로 하고 그 외의 숨겨진 장면들을 찾아보기로 했다.

1. 야간에 블랙(Black) 바이저(Sun Visor) 쓰기
먼저 조종석이나 항공기 탑재 무장 등 대부분의 장면에서 사실적인 묘사를 보여주는 이 작품은 아주 단순한 부분에서 실수를 저질렀다. 독자분들 중 한밤중에 자동차를 운전하면서 썬글라스를 써 본 사람들이 있다면 누구나 동감할 것이다. 야간에 썬글라스를 쓰고 자동차를 운전할 때와 마찬가지로, 밤에 블랙 바이저를 쓰면 밖이 거의 보이지 않는다. 그래서, 조종사들은 야간비행을 할 때에 화이트 바이저(투명한 바이저)를 사용한다. 그냥 블랙 바이저를 올리고 비행하면 될 것을, 굳이 화이트 바이저를 사용하는 이유는, 비상탈출이나 조류충돌에 의한 캐노피 손상 등 비상상황에서 조종사의 눈을 보호하기 위해서이다. 이 작품에서 조종사들은 ‘위험천만’하게도 모두들 블랙 바이저를 내리고 조종하고 있다.

△ 정말 ‘위험천만’하게도 야간에 블랙 바이저를 내리고 비행하는 조종사. 만화에서는 ‘폼’이 우선인가?

2. 후방석에 민간인을 태우고 간다?
군종기자가 F-4의 후방석에 타고서 전투장면을 촬영하러 가는 부분이 있는데, 우리는 여기서 두 가지의 티를 찾아낼 수 있다. 첫째는, F-4의 경우 후방석에 탑승하는 조종사는 레이저 유도 폭탄 및 레이더, 항법장비 등의 공대공 및 공대지 무장운용을 담당하는데, 원래 복좌로 운영하는 F-4는 전ㆍ후방석 조종사의 임무가 확실하게 분담되어 있다.

특히, AIM-7 스패로우(Sparrow) 레이더 유도 미사일을 원거리에서 사용하려면 반드시 후방석 조종사가 레이더로 락온(Lock-on : 레이더파를 탐색모드에서 추적모드로 변경시켜 한 적기에 대한 속도, 고도 등의 정보를 얻을 수 있게 하는 상태)을 실시해 주어야 한다. 그리고, 공대지 임무에서 표적의 좌표를 항법장비에 입력하는 것도 후방석에서 실시한다. 즉, F-4 팬텀(Phantom)이 100% 성능발휘를 하려면 반드시 후방석 조종사가 있어야 하는 것이다. 그런데, 전시에 출격하는 조종사가 후방석에 민간인을 태우고서 싸우러 나가는 것은 임무를 포기하는 것과 같다.(그래서 결국엔 격추되기도 ㅡ..ㅡa). 같은 경우가 두 번째 에이스 ‘미키’가 F-14 톰캣(Tomcat)을 타면서 그 역시 후방석에 조종사 없이 혼자 탑승한 채로 나오기도 한다.

△ 실전 전투에서 전투기 후방에 탑승한 사진촬영 작가. ‘불굴의 기자정신’이 내심 안쓰럽기도.

3. Loop 기동 중 사진기자의 Red-out
두 번째 옥의 티는 자신을 향해 날아오는 적의 열추적 미사일을 피하기 위해 Loop(수직으로 원을 그리는 기동)를 하는 도중 사진기자가 Red-out에 빠지는 장면인데, 사실 Red-out은 Loop와 같은 High Positive(+) G(Gravity : 중력 가속도를 의미하며, 만약 4G라면 지구중력의 4배의 중력가속도가 적용되는 상태임)가 걸리는 기동 중 생기는 현상이 아니라, 계속적인 Negative(-) G가 걸리는 상황에서 피가 머리 쪽으로 쏠려 생기는 현상이다.

다소 이해하기 어렵겠지만, 롤러코스터를 타고 급강하할 때의 느낌을 상상하면 이해하기 쉬울 것이다. 이러한 Loop처럼 계속적인 High Positive(+) G가 걸리면, 눈앞이 컴컴해지면서 의식을 잃어버리는 Black-Out에 빠지게 된다. Black-Out은 High Positive(+) G 기동시 원심력으로 인해 피가 하체 쪽으로 쏠리면서 뇌에 혈액공급을 못해주어서 발생하는 현상으로 이를 방지하기 위해, 조종사는 Anti-G suit를 입고, ‘L-1 호흡기법’을 통해 이를 극복해낸다.

Anti-G suit는 항공기에 G가 가해지면 조종사의 복근과 대퇴근을 압박하여 피가 하체로 쏠리는 것을 막아주는 것으로, 전투 조종사가 조종복 위에 하체에만 입고 다니는 것이 바로 이것이다. 그러나, 이것은 어디까지나 보조 장비일 뿐 기본적으로 인간의 한계를 초과하도록 도와 줄 순 없다. 따라서, 강한 G 내성을 갖기 위해서 조종사들은 항상 복근과 대퇴근을 발달시키도록 웨이트 트레이닝을 한다. ‘L-1 호흡기법’은 턱을 당기고 살짝 움츠려 주어서 뇌와 심장과의 거리를 최대한 짧게하고, 짧은 순간 대량의 호흡을 가능하게 해주어 원활한 혈액과 산소의 공급을 도와주는 호흡법이다. Black-Out에 빠지면 어떻게 되는지 간혹 방송에 등장하는 조종사 체험 중 반드시 거쳐가는 ‘원심분리기(Human Centrifuge)’ 체험 장면을 보면 쉽게 알 수 있다.

△“민간인은 무리라니까” 블랙아웃이 걸릴 상황에서 의아스럽게 레드아웃에 걸리는 사진촬영작가!

4. Flare 투발하며 레이더 미사일 회피하기
용병 대 용병의 전투 장면에서 ‘AREA 88’ 소속의 전투기들(이하 아군)과 반란군(이하 적군)의 용병 전투기들이 대량으로 공중전을 벌이는 장면이 나온다. 이 때, 아군이 중거리에서 AIM-7(Sparrow) 미사일을 먼저 발사하고, 이후 근접전투를 벌이는 내용은 실제 전술과 상당히 유사한 매우 사실적인 내용이다. 특히, 미사일끼리 교차할 때의 장면을 보면 AIM-7과 적군의 AA-7(APEX)이 매우 사실적으로 그려져 있다는 데에 필자 또한 감동(?)하기도 했다.

그러나, 이 장면에서도 옥의 티가 발견되는데, 먼저 적군도 아군과 같이 레이더 유도 미사일(열추적 미사일과 달리 레이더를 이용하여 적을 눈으로 보지 않고도 원거리에서 적을 격추시킬 수 있는 미사일)을 발사하는데, 나중에 근접 전투 때 나타나는 적군의 전투기는 MIG-21이다. 이 전투기는 AA-7을 운용할 수 없는 것으로 알려져 있다. 두 번째는 발사된 레이더 유도 미사일을 회피하기 위해 플레어(Flare : 엔진보다 더 높은 열을 발생시켜 열추적 미사일을 따돌리기 위한 장비)를 투발하는 장면인데, 플레어는 열추적 미사일을 회피할 때 사용하는 것이고, 레이더 유도 미사일을 회피할 때는 채프(Chaff : 얇은 금속 조각들을 이용해 항공기의 레이더 반사파보다 더 큰 반사파를 만들어내어 레이더 유도 미사일을 따돌리기 위한 장비)를 투하해야 한다. 아마도, 플레어를 사용하여 회피하는 것으로 그려진 이유는, 채프는 야간에 NVG(Night Vision Goggle : 야간투시경)를 쓰고 보지 않는 한 보이지 않기 때문에 무언가를 보여줘야 하는 애니메이션 제작자 입장에선 어쩔 수 없이 플레어로 대신해서 그릴 수 밖에 없었기 때문으로 생각된다.

△ 플레어(Flare)를 터뜨리며 비행하는 전투기. 멋있긴 하지만 지금은 채프(Chaff)가 필요한 상황!

5. 열추적 미사일 회피하기
제2부, ‘늑대의 조건’ 편에서 카자마 신을 죽이기 위해 고용된 킬러 ‘불사조 찰리’가 F-16을 타고 전투 도중 신에게 AIM-9을 발사한다. 신은 날아오는 미사일을 보고 AB(After Burner : 후기연소기, 본 지의 “탑건”편 참조)를 사용하여 강하하면서 속도를 증가시킨 후, 다시 AB를 끄면서 급선회를 시도하여 미사일의 추적을 피하는데 성공하는데, 이 장면은 열추적 미사일을 회피하는 기동을 아주 사실적으로 잘 묘사했다. 이 장면을 간단하게 설명하면, 먼저 강하하며 속도를 증가시키는 이유는 급선회를 할 수 있는 에너지를 얻기 위한 것이고(자동차와 마찬가지로 고도를 강하할 때 속도가 빨리 증가된다), AB를 끄는 것은 미사일이 전투기를 추적할 수 있는 충분한 열원(IR Resource)을 감소시켜 미사일을 따돌리기 위한 것이고, 강하해서 지상 쪽으로 내려가는 것은 태양복사에너지를 반사하는 지표열을 이용해 미사일의 IR Seeker(열원 탐지기)를 속이기 위한 것이다.

여기에 마지막으로 급선회를 함으로써 항공역학적으로 미사일의 추적을 피하는 것이다. 다만, 다소 아쉬운 점은, 열추적 미사일을 피할 때에 앞에서 설명한 Flare를 사용하면 더욱 효과가 좋은데 사용하지 않았다는 것과, 찰리가 미사일을 발사한 초기에 AB를 사용하면서 증속하는 것이다. AIM-9이 발사되면 최고속도가 약 MACH 2(마하 2 : 음속의 2배 속도) 정도가 되는데, 대략적으로 계산해서, 1NM(Nautical Mile) 뒤에서 미사일을 발사했다면 약 3초 후에 미사일과 전투기가 충돌한다. 그런데, 그 짧은 수초 사이에 AB를 사용해서 속도를 증가시킨 후 뒤따라 오는 미사일을 따돌린다는 건 현실적으로 불가능하다. 더구나, 열추적 미사일이 뒤에서 날아오는데 AB를 사용하면서 직진 비행을 하는 것은 AIM-9의 SEEKER(열 추적 센서)가 표적을 더 잘 추적하게 해주어 결국, 자살행위에 가깝다.

△ 열추적 미사일을 가까스로 피해가는 주인공의 F-16. 그의 조종술은 ‘만화주인공’답게 신기에 가깝다.

6. F-20 타이거 샤크의 AIM-9 4발 연속발사
제 3부 ‘불꽃의 신기루’에서 카자마 신이 세 번째 전투기인 F-20(Tiger Shark)을 타고 그 성능을 테스트 한다며 종횡무진 하늘을 가르며 적기를 격추시키는 장면이 나온다.(아마도 세 번째 전투기를 사면서 쌓인 카드빚에 대한 스트레스를 적기를 격추시키며 풀려고 한 듯^^). 이 부분에서 처음 두 발의 사이드와인더(Sidewinder, AIM-9)를 발사할 때 미사일이 뱀처럼 휘며 날아가서 적기를 격추시키는 데, 실제로 AIM-9은 뱀처럼 휘면서 날아간다고 해서 붙여진 이름이 바로 사이드와인더(Sidewinder : 방울뱀의 일종)이다. 여기까지는 매우 사실적이어서 필자는 또다시 감탄을 금치 못했다.

그러나, 첫 2발의 미사일을 발사한 이후 발사하는 또다른 4발의 미사일은 필자를 조금 당혹스럽게 했다. 이러한 장면은 작품 전체 전투장면에 걸쳐 계속 반복되는데, 전투기들이 한 번에 미사일을 한 발씩 쏘는 것이 아니라 꼭 2발 이상씩 동시에 발사하는 것이다. 두 발 이상 사용하는 것은 레이더 유도 미사일에 있어서 격추확률을 높이기 때문에 말이 된다고 하겠으나, 열추적 미사일의 경우는 사정이 다르다. 그 이유는 본지의 “에너미 라인스” 편에서 박주언 대위가 설명한 것과 동일하다. 그런데 이 작품에서 카자마 신은 F-20에 남아있는 4발의 사이드와인더를 두 대의 적기를 향해 연속적으로 발사하는데 재미있는 것은 적기 한 기당 각각 두 발씩 나뉘어져 맞춘다는 것이다. 두 적기가 가까이 붙어 있는 경우 발사한 열추적 미사일은 두 항공기 중 어느 항공기를 맞출지 사실 장담할 수가 없게 되는데, 마치 레이더 유도 미사일처럼 그림같이 나뉘어져 항공기를 맞춘다는 것은 다소 잘못된 묘사로 볼 수 있다. 레이더 유도 미사일은 레이더로 적기를 락온(Lock-On)해서 미사일을 유도하기 때문에, 2기 이상의 미사일을 각각 다른 항공기에게 유도할 수 있는 능력을 갖추고 있는 레이더는 동시에 2대의 항공기를 락온해 놓고 각각에 대한 미사일을 발사해 격추시키는 것이 가능하다.

△ 연속적으로 발사되는 열추적 미사일의 행렬. 발사된 미사일끼리 표적이 될 수 있는 상황이다.

7. A-10의 중무장 폭격
적군의 보급창고를 폭격하기 위해 폭격기들이 계곡을 뚫고 지나가서 폭탄을 떨어뜨리는 장면이 나온다. 그 중 A-10이 십수발의 폭탄을 떨어뜨리는 장면이 나오는데, 이 때 MER/TER(Multiple Ejector Rack/Triple Ejector Rack : 폭탄을 6발/3발을 장착하고서 투하할 수 있도록 항공기에 장착하는 무장장비)에서 폭탄이 투하되는 장면은 대단히 사실적이다.

그러나, 여기서도 아쉬운 점은 있다. A-10의 양쪽 날개의 아래에 장착된 모든 폭탄을 동시에 투하할 때에 오른쪽 날개의 폭탄부터 왼쪽 날개의 폭탄 순으로 순서대로 떨어지는데, 사실 폭탄 투하의 순서는 그렇게 일어나지 않는다. 왜냐하면, 오른쪽 날개 아래의 폭탄이 모두 떨어지고 나면 500lbs 폭탄을 기준으로 좌우 날개의 무게 차가 약 4500lbs(왜냐면, 이 작품에서 A-10은 한 쪽 날개에 9개의 폭탄-MER에 6발, TER에 3발-을 장착했으므로)가 나는데, 이 정도의 차이가 나게 되면 순간적으로 한 쪽 날개가 무거워 기울어 지게 되고, 그 만큼 항공기 안정이 어려워져 정확한 지점에 폭탄을 투하하기가 어려워진다.

더구나, 만약 오른쪽 날개의 폭탄만 모두 떨어지고, 항공기 무장 계통의 결함으로 왼쪽 날개의 폭탄이 하나도 떨어지지 않는다면, 날개 좌우의 무게가 맞지 않아 항공기 조종에 심각한 문제를 야기할 수도 있다. 따라서, 이런 저런 이유 때문에 폭탄은 좌우 날개에서 동시에 떨어지되, 각각의 MER/TER 내에서 폭탄이 떨어지는 시간의 차이와 순서를 두어서 공중에서 폭탄끼리 부딪혀서 폭발하는 일이 없도록 하고있다. 예를 들면, 좌우 날개에 MER를 장착하고서 각각 6개씩의 폭탄을 탑재하여 동시에 모두 투하되도록 할 때, 폭탄 끼리의 투하 간격을 0.2초로 한다면 처음 폭탄 버튼을 누를 때 양쪽 MER에서 각각 2발이, 다시 0.2초 후에 또 각각 2발이, 그리고 0.2초 후에 각각 2발이 투하되어서, 폭탄투하 버튼을 누른 뒤 총 0.4초만에 12발의 폭탄이 모두 투하된다.

△순서대로 투하된 폭탄 때문에 오른쪽이 썰렁한 A-10. 이대로라면 왼쪽으로 급격히 기울고 말 것이다

이상으로, 애니메이션 ‘에어리어 88’의 전투장면에 나오는 ‘옥의 티’를 찾아보았다. ‘잔인하며 사실적인 전투묘사’로 유명한 이 애니메이션에서도 이처럼 많은 티가 있고, 지금 보기엔 그림과 사운드 효과 등이 다소 촌스럽다는 점에 약간 실망하기도 했지만, 그래도 애니메이션만이 보여줄 수 있는 박진감 넘치는 전투장면과 상상력, 세계에서 운용되는 대부분의 전투기들의 등장, 그리고 가장 필자를 감동시켰던 전투 조종사들만의 그 끈끈한 우정은 아직까지도 이 작품을 보는 사람들을 매혹시키기에 충분하리라 생각한다.

기사제공 = 공군 뉴스 레터/ 공군 전투조종사 강영호 대위
출처 : http://www.airforce.mil.kr:7778/news/zoomin/zoomin_1_435.jsp?searchType=&searchWord=

© 도깨비뉴스, 무단 전재 및 재배포 금지

null

특정 필드(컬럼)을 사용하는 테이블 목록 보여주기 오라클 과 델파이

SELECT TABLE_NAME
FROM USER_TAB_COLS
WHERE COLUMN_NAME ='BOARD_ID'
null

신입사원 재테크 기타

돌이켜 보면 필자의 신입사원 시절은 후회스럽기 그지 없다. 무리한 주식 투자를 하기 일쑤였고, 그 결과 신용카드 현금서비스로 연명을 해야 했다. 당연히 저축은 안중에도 없었다. 필자의 전철을 밟지 않기를 바라는 마음으로 신입사원 재테크 10계명을정리해 봤다.

1.50%의 저축률을 지켜라 돈 모으기에 가장 유리한 시기는 바로 신입사원 시절이다.식사 커피 술 등 각종 지출은 선배의 지갑에서 해결(?)되고, 부양가족이 없으며, 다른 경조사비도 적게 들기 때문이다. 부모님과 함께 사는 경우라면 생활비가 절약되기때문에 70% 이상의 저축률도 가능할 것이다.
2.적금도 요령껏 하라 통상 적금은 월급통장이 있는 은행에서 개설하는 것이 당연하다고 여긴다. 하지만 이런 선입견을 버려야 한다. 많게는 연 7%의 고금리를 주는 상호저축은행 정기적금이나, 최근 각광을 받는 적립식 펀드를 적극 노려야 한다.
3.신용카드는 없다고 생각하라 신용카드는 외상 거래라는 특성상 과소비 위험이 높다. 자기 통제력이 떨어진다고 생각하면 아예 신용카드를 만들지 않는 게 낫다. 대신자기 은행계좌의 잔액 한도 내에서 사용할 수 있는 직불형 체크카드를 활용하자.
4.자동차는 사지 마라 자동차는 그야말로 ‘돈 먹는 하마’다. 1,500㏄급 소형차를 산다 해도 차 값만 1,500만원, 매월 유지비도 30만원은 든다. 자동차를 사지 않는다면 1,500만원 예금 통장과 매월 30만원씩 넣는 적금통장이 생기는 셈이다.
5.주식투자는 절대 하지 마라 주식 투자는 분명 매력적이다. 하지만 승산은 별로 없다. 더욱이 주식에 신경 쓰다 보면 자신의 본업에 충실하기 어렵다. 주식 투자는 늦게 시작해도 괜찮다.
6.청약통장에 가입하라 청약통장 가입자가 급증하면서 최근 무용론이 많이 제기된다. 하지만 모를 일이다. 보험에 가입하는 셈 치고 청약통장을 개설하자. 언젠가 충분히 유용하게 써먹을 수 있다.
7.보험은 적당히 가입하라 아직 미혼인 한 사회 초년생은 보험에 월급의 절반을 넣고 있다. 이는 미련한 재테크다. 보장성보험은 경제적인 순수보장형으로 해결하자.연금보험은 나중에 생활이 안정됐을 때 집중 가입해도 늦지 않다.
8.연말정산에 목매지 마라 샐러리맨에게 연말정산은 보너스나 다름없다. 문제는 소득공제 상품의 만기구조가 너무 길다는 점이다. 장기주택마련저축은 7년, 연금저축은10년이다. 이런 상품은 조만간 결혼 등으로 목돈이 필요한 신입사원에겐 적합치 않다. 장기 상품에 돈을 묶어두면 십중팔구 중도해지나 예금담보대출을 받는 경우가 생긴다.
9.내집 마련에 목숨을 걸어라 최대한 절약과 저축, 투자를 통해 목돈을 만든 뒤 내집 마련에 나서야 한다. 집값이 비싸다고 하지만, 아직도 서울 요지에는 평당 500만원 안팎의 아파트가 적지 않다.
10. 몸값을 올려라 최고의 재테크는 자신의 몸값을 올리는 것이다. 강조하건대, 재테크는 자기계발과 병행해야 한다. 아무리 절약한다 해도 월급의 10~20%는 자기계발에 사용하자.
null

1 2 3


메모장