검색결과 리스트
로그의 노트에 해당되는 글 212건
- 2011.08.16 알고리즘과 데이터 구조 그리고 패턴
- 2011.08.16 디자인 패턴에 대한 고찰
- 2011.06.26 [HTML5] 데이터 스토리지
- 2011.06.16 고집불통 프로래머가 되지 않기 위한 10가지 방법
- 2011.06.13 HTML 소개
- 2011.06.13 과제 #2 제어문/선택문을 이용해 다양한 모양그리기
- 2011.06.13 과제 #1 입출력,연산자
- 2011.06.13 음수의 표현
- 2011.05.27 1 명칭과 개방현
- 2011.05.26 지갑
글
알고리즘과 데이터 구조 그리고 패턴
경험이 많지는 않지만 내 생각에는 소프트웨어 개발에 있어서 빠질래야 빠질 수 없는 가장 큰 범주의 패턴이
바로 이 3가지 이기 때문이다. 컴퓨터 공학에서 "알고리즘과 데이터 구조" 는 굉장히 중요한 분야이다. 프로그래밍의
근본을 이루는 분야이기 때문에 대학 및 실무에서도 "알고리즘과 데이터 구조" 에 대한 기초를 중요시 여긴다.
데이터를 어떠한 형태로 구성하는냐 그리고 어떠한 처리방법을 선택하느냐 에 따라 프로그램에 유지보수성과 성능이
좌지우지 되기 때문일 것이다. 객체지향 패러다임으로 관점을 옮겼을 때 그대로 맵핑된 것이다. "행동" 과 "구조" 패턴이다.
클래스를 사용하는 객체지향의 문맥에 맞게 표현된 단어이지만 근본적으로 각각 알고리즘과 데이터 구조를 표현하는 말이다.
알고리즘을 캡슐화하여 어떻게 유연하게 알고리즘에 변경을 적용할 수 있을까에 대한 고민이 "행동" 카테고리의 패턴들이다.
클래스들(객체들) 간에 어떻게 구조를 형성하여 특정 요구사항에 유용한 구조를 얻을 수 있을까에 대한 고민이 "구조" 카테고리의 패턴들이다.
이에 더하여 프로그램에서 빠질 수 없는 것이 (변수 또는 객체에 대한) 생성이다. 일단 생성이 되어야 "행동"과 "구조"를 적용할
수 있지 않겠는가?
클래스(객체)들을 생성하는 방식을 어떻게 캡슐화하여 유연성을 얻을까에 대한 고민이 "생성" 카테고리의 패턴들이다.
이러한 이유들로 인해서 여러 패턴들이 3가지 카테고리로 분류되어 있다. 이점을 염두해 두고 패턴들을 생각하면 좀더 쉽게 이해가 될 것이다. 사내 스터디 교재로 Head First Design Pattern을 택했기 때문에 여기에서 등장하는 패턴순으로 설명해나갈 것이며
패턴을 설명하기 위한 예제는 될수 있으면 실제로 사용하고 적용했던 코드를 사용할 것이다.
이 책에서 소개하는 패턴들의 순서는 다음과 같다.
디자인 패턴 소개
옵저버 패턴
데코레이터 패턴
팩토리 패턴
싱글턴 패턴
커맨드 패턴
어댑터 패턴과 퍼사드 패턴
템플릿 메소드 패턴
이터레이터와 컴포짓 패턴
스테이트 패턴
프록시 패턴
컴파운드 패턴
...
'디자인패턴로그' 카테고리의 다른 글
| 객체지향의 원칙 (0) | 2011.08.17 |
|---|---|
| 알고리즘과 데이터 구조 그리고 패턴 (0) | 2011.08.16 |
| 디자인 패턴에 대한 고찰 (0) | 2011.08.16 |
설정
트랙백
댓글
글
디자인 패턴에 대한 고찰
1. 동기
대학교 입학후 프로그램을 시작하고 한창 자신감이 쌓여 가던 대학교 3학년 시절...
프로그래밍 분야에서 한발 더 나아가고 싶은 맘에 "디자인 패턴" 에 대해 공부했던 때가 생각난다.
사실 그 당시에는 디자인 패턴이라는 멋드러진 이름에 매료되어 "어떻게 요구사항을 잘 만족시킬까?"
보다는 "어떻게 디자인 패턴을 적용하여 구조를 이쁘게 만들까?" 라는 생각에 사로잡혀 있었다.
인터페이스와 구현클래스를 조합하기에 따라 특정 상황(요구사항이 바뀌는 상황)에서 코드에 대한 수정을
최소화 한채 구조를 변경할 수 있도록 하는 패턴들이 어찌나 대단해 보였는지...
(이해하기 힘든 클래스 다이어그램 때문에 더 대단해 보였다.)
그 시절에 비해 상대적으로 많은 시간(5년)이 흘렀지만 실무 개발을 시작한지는 이제 갓 1년 4개월....정도
얼마나 실력이 향상 되었겠느냐마는...소프트웨어를 바라보는 시야는 그때에 비하면 크게 성장했다고 생각한다.
"Head First Design Pattern" 을 교재로 사내 스터디를 시작했다. 첫장을 소개하는 발표자의 음성을 들으면서 문득
예전일이 생각났다. 디자인 패턴에 대한 글을 작성해보려다가 기본원칙 몇개와 책에 있는 패턴을 설명하는 글을 정리해서
올리다가 중간에 그만두었었던 때가 말이다. 그 때는 경험이 결핍된 지식으로는 어쩌면 당연한 결과인 것이다.
그때를 떠올리며 이제는 내 생각으로 디자인 패턴에 대해 설명할 수 있지 않을까? 는 생각이 들었다.
시간이 흐르면 많은 생각들이 또 변하겠지만 중간 점검으로는 적절한 때인듯 하다.
2. 디자인 패턴(Design Pattern)이란?
디자인 패턴을 구성하고 있는 패턴들에 대해 알아보기 앞서 디자인 패턴이란 무엇인지 알아보는 것은 당연한 일!!
소프트웨어를 하나 둘 개발하며 경험을 쌓다보면 늘 모든 일에서 그렇듯이 소프트웨어 개발에 있어서의 반복적으로
등장하는 상황이 발생하기 시작한다. 누구나 한 분야의 일에 대해 여러번의 경험을 반복하면 효율적으로 그일을 처리하는 Know-how가 쌓이기 마련이다. 소프트웨어 개발에 있어서 그러한 Know-how 중 Design 즉 설계에 있어서의 노하우를
디자인 패턴이라고 한다.
덧붙히자면 소프웨어 개발은 고객과 대화를 통해 요구사항을 추출해내고, 해당 분야에 대한 정보수집을 토대로 분석과정을
거쳐 설계에 이르고 실제 구현을 하게 된다. 이런 소프트웨어 모든 각 단계에 대한 노하우 즉 패턴이 존재한다.
(하지만 노하우 전달이 어려울뿐..) 요구사항 수집 패턴, 정보수집 패턴, 분석패턴, 설계패턴, 구현패턴 갖가지 패턴들이
존재할 수 있으며 디자인 패턴은 설계 단계에 있어서의 패턴에 특별히 주목하는 것이다.
물론 이 디자인 패턴들은 먼저 소프트웨어 개발을 지긋이 했던 선배들 (GOF 선배들이라고 들어봤나?)이 경험을 통해
이름을 붙이고 알기쉽게 분류를 해놓았다. 개개의 노하우에 이름을 붙히고 언제 사용하면, 무엇이 좋은가에 대한 것을
기준으로 분류를 해놓아 책으로 엮은 것이 그 유명한 "GOF(Gang Of Four)의 디자인 패턴" 이다.
디자인 이름만 이야기해도 뭔가 뽀대가 나지만, 알맹이 없는 어중이 떠중이가 되고 싶지 않다면 적어도 하나의 패턴에 대해
이야기 할때는 "패턴의 이름", "패턴을 적용할 상황", "적용시 장점과 단점" 까지는 함께 이해하는 것이 좋으리라....
3. 디자인 패턴을 사용하면 좋은 점?
초보 운전자에게 베스트 드라이버께서 운전 노하우를 요목조목 설명해주면 어떻겠는가? 디자인 패턴은 소프트웨어 개발 중
발생할 수 있는 여러 문제상황 속에서 검증된 해결책이다. 적어도 비슷한 상황속에서 이 패턴을 사용하면 더 적은 노력으로
원하고자 하는 답을 얻을 수 있다는 것이다. 하지만 각양각색의 상황 속에 완전히 일치하는 해결책이란 존재하지 않는다.
자신의 상황에 맞게 패턴을 변형해서 적용해야 하는 경우가 더 많을 것이다.
책에서 자주 언급되는 디자인 패턴 적용의 장점 중 하나는 의사소통 비용의 감소이다. 디자인 패턴에 대해 잘 알고 있는
개발자 간에 대화시 패턴의 이름은 그 어떤 구구절절한 설명보다도 간단 명료하게 전달 될 것이다. 하지만 디자인 패턴을
잘 모르는 개발자가 있다면? ...
4. 디자인 패턴을 공부하면서 주의할 점은?
노하우란 경험을 통해서만 습득할 수 있는 것이다. 개발 경험이 부족한 초급 개발자들이 디자인 패턴을 이해하기 어려워하는
것은 당연한 일이다. 내가 예전에 그랬듯이 소프트웨어에 어떤 디자인 패턴을 적용할까 라는 고민은 잘못된 고민이다.
소프트웨어에 발생하는 이 문제를 해결하기에 이 패턴을 사용하면 이러이러한 장점이 생길 것 같은데...라는 자세가 옳다고
생각한다. 디자인 패턴은 목적이 아니라 다만 최선의 답을 위한 해결책 중 하나의 선택안이라는 것을 명심하길 바란다.
'디자인패턴로그' 카테고리의 다른 글
| 객체지향의 원칙 (0) | 2011.08.17 |
|---|---|
| 알고리즘과 데이터 구조 그리고 패턴 (0) | 2011.08.16 |
| 디자인 패턴에 대한 고찰 (0) | 2011.08.16 |
설정
트랙백
댓글
글
[HTML5] 데이터 스토리지
HTML5 학습 참고 사이트
W3School : http://www.w3schools.com
예를 들어 쇼핑몰 사이트에서 로그인을 하지 않아도, 쇼핑을 하고 상품을 담아둘 수 있는 장바구니 기능을 생각해보자.
장바구니에 담긴 상품들은 웹브라우저를 종료하고 나중에 다시 쇼핑물을 다시 방문했을 때도 상품항목이 남아있어서
사용자는 편리하게 이어서 쇼핑을 할 수 있다.
만일 매번 방문할 때마다 사용자의 쇼핑상품이 삭제되어 버린다면 상당히 번거로울 것이다. 이처럼 사용자에 기호 등과
관련된 정보를 웹브라우저 클라이언트에 저장을 하면 사용자에게 편리한 기능을 제공할 수 있다. 이러한 요구사항을
만족하기 위한 데이터 스토리지 메커니즘을 이 포스트에서 소개하겠다.
Cookie를 사용하는 방식이 오래전부터 사용되어 왔으며, HTML5에서는 쿠키의 단점을 보완하기 위해 웹 스토리지 API 와
웹SQL 데이터베이스 API를 제공한다. 이에 대해서 알아보자.
1. Cookie
Cookie 를 구성하는 데이터에는 name-value, expiry date, Domain and Path 가 있다 그 의미는 다음과 같다.
모든 쿠키는 name-value 쌍을 구성되며, 쿠키의 이름(name)을 통해 정보(value)를 읽을 수 있다.
expiry date
쿠키가 폐기되는 유효기간. 명시하지 않으면 브라우저를 닫을 때 폐기된다. 만료일은 UTC(표준시)로 설정되야 한다.
Domain and Path
도메인은 브라우저가 쿠키를 보낼 도메인 주소를 의미하며, Path는 쿠키를 활성화되는 도메인의 디렉토리를 지정한다.
document.cookie = 'ppkcookie1=testcookie; expires=Thu, 2 Aug 2001 20:47:11 UTC; path=/' document.cookie = 'ppkcookie2=another test; expires=Fri, 3 Aug 2001 20:47:11 UTC; path=/'
쿠키값을 설정할 때는 위에서와 같이 정해직 포맷에 맞춰 설정해야 한다. 순서는 다음과 같다.
쿠키를 삭제하기 위해서는 오늘 날짜 이전으로 만료일을 설정하면 브라우저가 만료됐음을 확인하고 삭제한다.
document.cookie 값 설정시 만료일을 -1로 설정하면 쿠키값이 즉시 삭제되며, 0으로 설정하면 브라우저를 닫을 때
삭제된다.
2. 웹 스토리지
도메인당 최대 5Mb 를 지원하며 sessionStorage, localStorage 를 제공한다. sessionStorage는 브라우저가 닫히기까지(세션)
동안 유효하며, localStorage 는 명시적으로 데이터를 지우지 않는 한 계속 남아있게 된다.
브라우저별 웹스토리지 지원현황은 아래와 같이 최신버전의 브라우저 모두에서 지원하는 기능이다.
스토리지 API를 사용할 수 있다고 한다. 그래서 쿠키를 사용가능한지 사전에 검사해야 한다.
쿠키가 가용한지 검사하는 코드는 아래와 같이 쿠키를 하나 생성하고 값 읽기를 시도해봐서 가용한지를 확인할 수 있다.
var cookieEnabled = (function() {
var id = new Date().getTime();
document.cookie = 'cookieprobe=' + id + ' ;path=/';
return (document.cookie.indexOf(id) != -1);
})();
웹 스토리지 API 형태는 다음과 같다.
속성 unsigned int length 메소드 DOMString key(unsigned int index) any getItem(DOMString key) void setItem(DOMString key, data) void removeItem(DOMString key) void clear()
데이터 저장 및 조회
sessionStorage.setItem(‘twitter’, ‘@rem’); sessionStorage.twitter = ‘@rem’; sessionStorage.getItem(‘cost’); sessionStorage.twitter
key 메소드 사용
for (var i = 0; i < sessionStorage.length; i++) {
alert(sessionStorage.key(i) + ‘=’ + sessionStorage.getItem(sessionStorage.key(i)));
}
removeItem 과 clear 함수를 사용할 수 있다. removeItem 은 지정한 key에 해당하는 아이템을 삭제하며, clear 함수는 모든
아이템을 삭제한다.
문자열 이외 저장
저장하고 다시 텍스트를 객체로 복원하는 방식으로 우회하여 사용해야 한다.
JSON를 사용하여 객체화하고 복원하는 코드는 다음과 같다.
function stringify() {
var videoDetails = {
author: '감우성',
description: '무법자',
rating: '5.51'
};
sessionStorage.setItem('videoDetails', JSON.stringify(videoDetails));
}
function parse() {
var videoDetails = JSON.parse(sessionStorage.getItem('videoDetails') || 'null');
alert(videoDetails.author + "\n" + videoDetails.description + "\n" + videoDetails.rating);
}
3. 웹 SQL 데이터베이스
SQL 처리 후 콜백형태로 다음 실행내용을 전달하며 비동기 방식으로 동작하며, 서버가 아닌 로컬 데이터베이스를
사용하기 때문에 커넥션을 맺고 닫는 부분이 없다. 한 도메인에는 동일한 이름을 갖는 DB 버전은 하나만 존재한다.
(현재 1.0 버전을 사용하는데 같은 이름의 DB가 있을 수 없다는 의미 같다. )
데이터베이스 작업 간에 트랜잭션을 시작하고 그 콜백으로 SQL문을 수행하는 처리를 한다. 데이터 베이스 크기의
제한은 없지만 일반적으저 브라우저들이 5Mb의 크기로 제한한다.
아직은 브라우저에서의 지원이 미비하기 때문에, 사용시 반드시 지원유무를 확인하는 처리를 해야한다는 것에 주의하자.
데이터베이스를 조작하는 코드는 아래와 같다.
DB 생성 및 Open / API 지원유무 확인하기
var db;
if (window.openDatabase) {
db = openDatabase(‘mydb’, ‘1.0’, ‘My first database’, 2 * 1024 * 1024);
}
openDatabase의 인자는 DB이름, 버전, DB에 대한 설명, DB 의 크기이다.위 코드에서는 mydb 라는 이름의 2MB(2 * 1024 * 1024) 데이터베이스를 생성하였고,
window.openDatabase 속성을 확인하여 웹SQL 데이터베이스 API를 지원하는지 확인했다.
SQL 실행
db.transaction(
function(tx) {
tx.executeSql(sql, [], function () {
// 실행코드
});
},
function(tx, error) {
alert(‘에러: ‘ + error.message);
}
});
된다면 명시하지 않아도 된다.
또 executeSql(sql, [], function () {}) 함수는 실제로 SQL을 수행하는 함수로 필수 인자는 실행할 질의문 sql 인자 뿐이다.
[] 는 SQL 의 와일드 카드 문자에 삽입할 파라미터를 담은 배열이며, function()은 SQL 을 수행후 후속 작업을 처리할
함수이다.
var db;
if (window.openDatabase) {
db = openDatabase(‘tweetdb’, ‘1.0’, ‘All my tweets’, 2 * 1024 * 1024);
db.transaction(function (tx) {
tx.executeSql(‘CREATE TABLE tweets (id, date, tweet)’); });
}
데이터 삽입하기
function saveTweets(tweets) {
tweets.results.forEach(function (tweet) {
db.transaction(function (tx) {
var time = (new Date(Date.parse(tweet.created_at))).getTime();
tx.executeSql(‘INSERT INTO tweets (id, screen_name, ¬date, text) VALUES (?, ?, ?, ?)’,
[tweet.id, ¬tweet.from_user, time / 1000, tweet.text]);
});
});
}
데이터 조회하기
var tweetEl = document.getElementById(‘tweets’);
function show(amount) {
db.transaction(function (tx) {
tx.executeSql(‘SELECT * FROM tweets’ + (amount != ‘all’ ? ‘ WHERE date > strftime(“%s”, “now”, “-’ + amount + ‘ minutes”)’ : ‘’), [],
function (tx, results) {
var html = [], len = results.rows.length;
for (var i = 0; i < len; i++) {
html.push(‘<li>’ + results.rows.item(i).text + ‘</li>’);
}
tweetEl.innerHTML = html.join(‘’);
}
});
});
}
위 코드에서는 amount가 all 아니면 현재시간(now)에서 amount 분만큼을 뺀 값을 1970-01-01 이후 경과한 초(%s)로 나타내고있다.
다음 링크에서 함수에 대한 설명을 참고하자 : SQLite
데이터 조회시에는 다음과 같은 속성을 사용할 수 있다.
'언어로그 > Html/Javascript/CSS' 카테고리의 다른 글
| HTML5 Canvas API (0) | 2012.03.11 |
|---|---|
| jquery 간략한 사용법 (0) | 2011.10.15 |
| [HTML5] 데이터 스토리지 (0) | 2011.06.26 |
| HTML 소개 (0) | 2011.06.13 |
설정
트랙백
댓글
글
고집불통 프로래머가 되지 않기 위한 10가지 방법
스스로에게 말해주고 싶은 포스트를 보았다. 지금 나에게 가장 필요한 말이 아닐까 싶다...
출처: http://jacking.tistory.com/867
근데 홍배님...이름이 나랑 왠지 비슷하네 ㅋㅋㅋ
'생각로그' 카테고리의 다른 글
| 호감주는 말하기 (0) | 2012.03.01 |
|---|---|
| 건강한 심리 (0) | 2012.02.19 |
| 위험에 뛰어드는 사람만이 진정으로 자유롭다. (0) | 2012.01.25 |
| 고집불통 프로래머가 되지 않기 위한 10가지 방법 (0) | 2011.06.16 |
| 노력해서 공부하고 계신가요? (0) | 2011.04.26 |
| [안철수 특강] 무엇이 성공을 이끄는가? (0) | 2011.03.01 |
설정
트랙백
댓글
글
HTML 소개
원류로 하고 있다.
inline-level 은 <span>과 같이 한라인에 복수로 위치할 수 있는 요소이다.
<div style="border:1px gray solid;">block-level element </div> <div style="border:1px gray solid;">block-level element </div> <span style="border:1px gray solid;">inline-level element </span> <span style="border:1px gray solid;">inline-level element </span>
2.4 table 선을 단선으로 표현하기 : border-collapse
'언어로그 > Html/Javascript/CSS' 카테고리의 다른 글
| HTML5 Canvas API (0) | 2012.03.11 |
|---|---|
| jquery 간략한 사용법 (0) | 2011.10.15 |
| [HTML5] 데이터 스토리지 (0) | 2011.06.26 |
| HTML 소개 (0) | 2011.06.13 |
설정
트랙백
댓글
글
과제 #2 제어문/선택문을 이용해 다양한 모양그리기
결과
결과
결과
결과
'언어로그 > C/C++' 카테고리의 다른 글
| [C/C++] C 언어 포스트 목록 (0) | 2015.08.30 |
|---|---|
| 과제 #2 제어문/선택문을 이용해 다양한 모양그리기 (0) | 2011.06.13 |
| 과제 #1 입출력,연산자 (0) | 2011.06.13 |
| 음수의 표현 (0) | 2011.06.13 |
| 문자열 조작함수 직접 구현하기 (2) | 2011.04.29 |
| 라인 입출력 함수 (0) | 2011.03.27 |
설정
트랙백
댓글
글
과제 #1 입출력,연산자
걸리는 시간은 : 1시간, 10분, 35.294초 입니다
'언어로그 > C/C++' 카테고리의 다른 글
| [C/C++] C 언어 포스트 목록 (0) | 2015.08.30 |
|---|---|
| 과제 #2 제어문/선택문을 이용해 다양한 모양그리기 (0) | 2011.06.13 |
| 과제 #1 입출력,연산자 (0) | 2011.06.13 |
| 음수의 표현 (0) | 2011.06.13 |
| 문자열 조작함수 직접 구현하기 (2) | 2011.04.29 |
| 라인 입출력 함수 (0) | 2011.03.27 |
설정
트랙백
댓글
글
음수의 표현
때로는 효율적인, 때로는 효과적으로 프로그래밍하기 위해 필수적인 요소이다.
문제가 발생하는 몇 가지 다른 음수의 비트 표현에 대해서 알아보자.
부호화 비트 표현법
가장 단순하게 음수를 표현하는 방법으로부호화비트 표현법이 있다. 가장 상위 비트를 부호비트로 표현하여
부호비트가 0이면 양수, 1이면 음수로 표현하는 방법이다. 하지만 두 수를 연산하는데 문제가 생기게 되는데...
1의 보수 표현법
2의 보수 표현법
'언어로그 > C/C++' 카테고리의 다른 글
| 과제 #2 제어문/선택문을 이용해 다양한 모양그리기 (0) | 2011.06.13 |
|---|---|
| 과제 #1 입출력,연산자 (0) | 2011.06.13 |
| 음수의 표현 (0) | 2011.06.13 |
| 문자열 조작함수 직접 구현하기 (2) | 2011.04.29 |
| 라인 입출력 함수 (0) | 2011.03.27 |
| 배열의 이해 (0) | 2011.03.27 |
설정
트랙백
댓글
글
1 명칭과 개방현
싶었었는데, 이참에 첫번째? 악기로 기타를 선택했다. 잘 할수 있을까 하는 걱정도 들지만, 기타 잘 치는 희용이형도
있고, 천천히 공부하다보면 잘 될거라 생각한다.
어쿠스틱 기타, 포크 기타, 클래식 기타, 일렉 기타 등... 종류가 많아서 어떤 것부터 시작해야 하는지 어리둥절;;;
흔히 통기타로 불리는게 어쿠스틱 기타를 두고 하는 말이다. 어쿠스틱 기타와 일렉기타는 전기로 동작하는냐에
차이도 있지만 현이 나일론으로 되어있냐, 쇠줄로 되어있냐의 차이도 있다고 한다. (통기타는 쇠줄로 되어있다)
먼저 아래 그림을 보고 기타의 명칭을 참고하자.
6번줄은 기타를 들었을 때 가장 상단에 위치하는 줄이며, 가장 굵고 낮은 음을 낸다. 아래로 내려가면서 기타의 굵기가
얇아지며 가장 아래 위치한 줄이 1번 줄이 된다.
아래 그림은 손가락으로 기타를 짚는 것을 보기 펀하게 뒤집혀져 있다. (6번줄이 가장 아래에 있다. )
[출처: 모미지의 블로그]
지식이 짧아서... 공부하는데로 이 포스트를 지속적으로 수정해야 겠다. 오늘은 이만...^^;;
'예술로그' 카테고리의 다른 글
| [예술] 기타 연주에 관한 짤막한 프레젠테이션 (0) | 2014.03.31 |
|---|---|
| 1 명칭과 개방현 (0) | 2011.05.27 |
설정
트랙백
댓글
글
지갑
작년 안양에서 지내던 때...경험햇던 지갑 사건이 "스마일 브러시" 웹툰에 실리는
영광을 누리게 되었다. ㅋㅋ 택시를 잡아 버스를 추격했던 이야기는 빠졌지만 아기자기한
그림체에 담겨진 추억을 보고있으니 기분이 흐뭇하다 ㅎㅎ
뒷문에 서 있었다. 빨간 신호등에 버스가 잠시 정차하고 있을 때, 옆 버스에 여학생 3명이 이쪽 버스를 보고
소리를 지르기 시작했다...어라...재네들 왜 저러는 거야....여학생들의 호들갑에 의아해 하고 있다가 외침소리가
"지갑!" 이라는 알게 되었다..
버스 한 아주머니가 뒷 창문으로 무언가를 여학생들에게 넘기고는 여학생들은 무진장 좋아했다...풉
재네들은 왜그러는 거야 ㅋㅋㅋ 하고 웃으며 버스에서 내리기 위해 뒷주머니를 뒤졌다...얼라...! 혹시
저 지갑이 내지갑 ...? ㅡㅡ;; 헐.... 순간 당황했고...또 지갑을 옆 버스에 넘겨줬던 아주머니를 보고 더 당황했다.
"왜 지갑을 넘겨주신거에요!!" 라는 물음에 아주머니 왈 "아...학생 지갑이었어? 난 달라길래..." Otz...
순간 지갑에 들어있는 현금과 고액의 체크카드 잔금과 앞으로 겪어야할 곤혹들이 뇌리를 스쳐지나갔다....떠나버린
옆 버스를 보고 절망에 빠지려다가...순간 버스에서 내려 택시를 잡아탔다...돈도 없었는데;;; 무작정 택시를 잡아탔고
저 버스좀 따라가달라고 기사 아저씨게 말했다...지갑이 저 버스에 있는데 잡으면 돈을 드리겠다고 하니..."돈은 됏으니
얼른 타기나 하세요" 하면서...아저씨가 더 적극적으로 응해주셨다...
버스와 격차가 있어서 놓쳐 버릴까봐 가슴이 조마조마했다. 하늘이 도왔는지...8차선 도로 한복판에 신호등을 받고 버스가
멈춰 있었다...아저씨께 고마움을 전하고 택시에서 내려 버스를 향해 뛰었다...
"쿵쿵쿵" 8차선 도로 한복판에서 버스 문을 두드리는 것을 보고 버스기사 아저씨가 적잖히 당황하신듯...못내 문을 열어주시고
나는 뒤에 앉아있던 여학생들을 향해 성큼성큼 걸어갔다... 그때 여학생들이 표정이 완전 당황한 표정이었다..."뭐 이런놈이
다있어"하는 표정? ㅋㅋ 한마디도 하지도 않고, 손을 뻗은 다음 "지갑!" 이라고 한마디 했다... 놀란 표정으로 건네는 지갑을 받고
유유히 버스에서 내렸다.
잃어버린 것은 없나 확인하며 돌아오는 길에 생각해보니 키득키득 웃음이 나왔다... 자랑할 만한 일은 아니지만 이런 경험을
한 사람이 얼마나 있을까 ㅋㅋㅋ 보답을 하려고 찾았는데 보이지 않았던 택시 기사 아저씨도 생각났다...참 고마운 분이셨다.
'기타' 카테고리의 다른 글
| [패션] 남자 구두 종류 (1) | 2013.08.05 |
|---|---|
| [연말정산] 월세공제 확정일자에 대한 잘못된 진실 (2) | 2013.01.31 |
| 지갑 (0) | 2011.05.26 |
| 2011년 자바 개발자 컨퍼런스 등록!! (1) | 2011.05.23 |
| Base64 Encoding (0) | 2011.02.18 |
| muju (33) | 2011.02.14 |
1_empty_year.c