정규표현식 반복하기


주민등록번호를 정규표현식으로 나타내려면 어떻게 해야 할까? 


주민등록번호는 엄밀하게 말하면 모든 자리의 수가 0에서 9까지의 숫자로 이루어진 것은 아니지만 편의상 ○○○○○○-○○○○○○○ 형식의 앞에 6개의 숫자하이픈(-) 뒤에 7개의 숫자로 이루어진 일련의 문자열로만 다룬다고 할 때 정규표현식은 어떻게 될까?


앞서 우리는 [0-9]라는 문자 클래스를 이용하여 숫자들에 해당하는 하나의 문자를 지정하는 법을 배웠다.


그렇다면 정규표현식은 다음과 같을 것이다.


[0-9][0-9][0-9][0-9][0-9][0-9]-[0-9][0-9][0-9][0-9][0-9][0-9][0-9]


너무 길다. 이렇게 반복되는 경우를 효율적으로 처리할 방법이 필요하다.


정규표현식에서는 특정한 표현식을 반복하는 방법을 아래와 같이 제공하고 있다.


\{min,max\} → 앞의 내용이 min 이상 max 이하 반복됨

* 앞의 내용이 0 이상 반복됨

\+ 앞의 내용이 1 이상 반복됨


\{min,max\}를 이용하여 주민등록번호를 지정하면 다음과 같다


[0-9]\{6,6\}-[0-9]\{7,7\}

\{6,6\}은 최소 6번 최대 6번 이므로 그냥 6번 반복한다는 뜻이다.

\{7,7\}은 최소 7번 최대 7번 이므로 그냥 7번 반복한다는 뜻이다.


\{min,max\}에서 min0으로 할 경우 반복이 전혀 없는 경우도 해당된다.


[0-9]\{0,max\} 숫자가 0번 이상 max 이하 반복되므로 숫자가 전혀 없는 경우도 해당됨


\{min,max\}에서 max를 생략할 경우 반복 횟수에 제한이 없어진다. 따라서

 

*  \{0,\}과 동일하다.

\+ → \{1,\}과 동일하다.


Anki 파일


아래는 본 포스팅의 내용을 갈무리하기 위한 Anki 파일입니다. 참고하시기 바랍니다. 


033 vim의 정규표현식(7) 반복.apkg



역슬래쉬(\)를 붙이는 문자들


문자열의 집합을 표현하는 데 사용하는 형식 언어가 정규표현식이다


문자열의 집합을 효과적으로 표시하려다 보니 다양한 문자들을 문자 외의 다른 용도로 사용하기 위하여 역슬래쉬(\)를 붙이거나 문자 외의 다른 용도로 특수하게 사용되는 문자들을 문자 그 자체로 나타내기 위해서 역슬래쉬(\)를 붙이기도 한다. 


특정 용도의 문자를 문자 그 자체로 나타내기 위하여 역슬래쉬(\)를 붙이는 경우


\. 임의의 한개의 문자가 아닌 문자로써 (.)을 나타냄

\\ 문자 역슬래쉬(\)를 나타냄

\[ 문자 왼쪽 대괄호([)를 나타냄

\] 문자 오른쪽 대괄호(])를 나타냄


특정 문자를 탭(tab), Esc 등 문자 외의 다른 용도로 사용하기 위하여 역슬래쉬(\)를 붙이는 경우


\e esc

\t tab

\r 캐리지 리턴

\b 백스페이스

\n 개행 문자



Anki 파일


아래는 본 포스팅의 내용을 갈무리하기 위한 Anki 파일입니다. 참고하시기 바랍니다. 


032 vim의 정규표현식(6) 특수 문자.apkg


vim 정규표현식에서 or(\|) 사용하기


vim의 정규표현식에서 or\| , 역슬래쉬버티컬바로 나타낸다or(\|)은 다음과 같은 형식으로 쓴다


문자열1\|문자열2 문자열1이거나 문자열2와 일치한다.


가령, 탐색하는 문자열이 cat이거나 dog이라면 그 정규표현식은 다음과 같다.


cat\|dog


어떤 문자열 중에 첫 번째 글자가 대문자인지 소문자인지 여부와 상관없이 모두 찾고자 하면 보통 문자 클래스를 이용한다. 가령 Catcat을 동시에 찾고 싶다면 문자 클래스를 이용하여 다음과 같이 작성하면 된다.

 

[Cc]at Cat와 cat를 모두 찾는다.


이와 비슷한 표현을 조금 복잡하지만 or(\|)로 다음과 같이 할 수 있다.


\(C\|c\)at 

→ \( \) 사이에 C\|c 를 배치해서 Cat와 cat를 모두 찾는다.


\(\) 로 인하여 매우 복잡하게 보인다. 그냥 문자 클래스([ ])로 쓰는 것이 편하지 않을까? 앞에 보여준 예에서는 단 한 개의 글자가 대문자이거나 소문자인 것을 선택하는 것이므로 문자 클래스([ ])가 더 쓰기 편하다. 하지만 여러 개의 문자열 중 하나를 선택할 경우에는 or(\|)\(\) 사이에 배치하는 편이 더 쓰기 편하다.

 

가령, 다음과 같은 일련의 파일 이름에서 cat.jpg, anmimal.jpg, dog.jpg 에만 해당하는 정규표현식은 다음과 같다.


cat.jpg

cat.avi

animal.jpg

animal.avi

dog.jpg

dog.avi


\(cat\|animal\|dog\)\.jpg


역슬래쉬점(\.)은 점(.)을 어떤 임의의 한 개의 문자를 의미하는 특수한 용도로 사용하지 말고 점(.) 문자 그 자체로만 인식하라는 의미


Anki 파일


아래는 본 포스팅의 내용을 갈무리하기 위한 Anki 파일입니다. 참고하시기 바랍니다. 



문자열의 위치


정규표현식은 문자열을 위치에 따라서 특정할 수 있다. 즉 해당 문자열이 행의 시작에 있는지 끝에 있는지에 따라 구별하여 특정할 수 있고, 단어의 시작인지 끝에 위치한 것인지를 특정할 수 있다. 


캐럿(^)과 달러($)


앞선 문자 클래스 포스팅에서 캐럿(^)이 문자 클래스에서 not의 의미로 쓰이는 것을 언급한 바 있다. 하지만 캐럿(^)이 문자 클래스 외에서 쓰일 때에는 행의 첫 문자를 의미한다. 그리고 달러($)는 정규표현식에서 행의 끝 문자를 의미한다.


캐럿(^)달러($)를 사용할 경우 캐럿(^)은 탐색하고자 하는 문자열의 에 와야 하고 달러($)에 와야 한다


정규표현식 ^cat 행의 맨 앞cat 문자열이 있을 경우 일치

정규표현식 cat$ 행의 맨 뒤cat 문자열이 있을 경우 일치


위에서 작성한 정규표현식으로 탐색한 결과는 다음과 같이 나타난다.



단어의 시작(\<)과 끝(\>)


정규표현식으로 행의 시작과 끝에 있는 문자열을 특정할 수 있듯이 단어의 시작과 끝에 있는 문자열을 특정할 수 있다. 단어의 시작\< 로 나타내고 단어의 끝\> 로 나타낸다.

 

앞서 언급한 캐럿(^)달러($)처럼 단어의 시작(\<)은 찾고자 하는 문자열의 에 와야 하고 단어의 끝(\>)에 와야 한다.

 

정규표현식 \<c.t 단어의 맨 앞ct 형식의 문자열이 있을 경우 일치(○은 임의의 문자 한 개)

정규표현식 c.t\> 단어의 맨 뒤ct 형식의 문자열이 있을 경우 일치(○은 임의의 문자 한 개)


해당 정규표현식으로 탐색한 결과는 다음과 같이 나타난다.



사진을 보면 알겠지만 단어들은 (.), 아포스트로피() 등으로 구분된다.


Anki 파일


아래는 본 포스팅의 내용을 갈무리하기 위한 Anki 파일입니다. 참고하시기 바랍니다. 


030 vim의 정규표현식(4) 문자열의 위치.apkg



문자열


앞서 문자열 탐색의 포스팅에서는 탐색할 문자열을 슬래쉬(/)나 물음표(?) 다음에 바로 입력했다. 이 때 입력한 단순한 문자열도 그 자체로 정규표현식이다. 문자열로 탐색하면 해당 문자열로만 이루어진 것을 찾아주지 않는다. 독립된 단어이든 어떤 단어의 일부이든 그저 탐색할 문자열과 일치하는 모든 것을 전부 탐색한다. 다음은 그 사례다.



점(.) 표현


정규표현식에서 (.)아무 문자나 단 한 개의 문자를 의미한다. 가령, 앞에서 cat를 탐색한 것과 다르게 3글자이고 ct는 기억이 나는데 가운데 한 글자가 기억이 나지 않는 경우가 있다. 이럴 때는 어떻게 검색해야 할까? 명령 라인에 다음처럼 입력하면 된다. 


/c.t


그 결과는 다음과 같다. 




, c임의의 한 글자 그리고 t세 글자로 이루어진 문자열을 전부 찾는다.


, 문자 클래스([ ]) 안에서 (.)표현을 쓸 때는 그냥 (.) 문자 자체를 의미하므로 c[.]tc.t만 해당되고 cat, cut 등은 전부 해당되지 않음

 

(.)으로 탐색할 때 반드시 해당하는 임의의 글자가 1개 있어야 하므로 의 특성을 사용하면 다양한 방식으로 문자열을 탐색할 수 있다


/.cat cat 문자열 앞에 최소 한 글자(공백포함)가 있어야 함. (cat가 행의 가장 앞으로 나오는 경우 제외)

/cat. cat 문자열 뒤에 최소 한 글자(공백포함)가 있어야 함. (cat가 행의 가장 뒤에 붙는 단어 제외)

/c..t c○○t 형태의 문자열

공백점(.)이 나타내는 한 개의 문자에 해당되므로 이 점은 주의를 요함




Anki 파일


아래는 본 포스팅의 내용을 갈무리하기 위한 Anki 파일입니다. 참고하시기 바랍니다. 


029 vim의 정규표현식(3) 점(.).apkg


어린 시절을 추억해 보니, 보수가 어쩌면 처음으로 산수와 수학에 대해서 무언가 느낀 첫관문이었던 것이 기억난다. 초등학교 1학년 때였는데, 숫자를 50까지는 셀 수 있었지만, 그게 무엇이고 숫자가 무엇인지 전혀 개념이 없었다. 그러다가 속셈 학원을 다녔는데, 그 속셈 학원에서 제일 먼저 배운 것이 보수(짝궁수)였다. 선생님은 큰 성냥곽 같은 상자를 보여주면서 그것을 보수 상자라고 불렀다.

    

요렇게 생긴 상자였다



보수 상자는 가운데에 상자 높이 반 정도 되는 문턱이 있고 빨간 구슬들이 들어 있었다. 성냥곽처럼 양 옆에 뚫려 있어서 양 옆으로 상자를 꺼내볼 수 있었는데 선생님은 그 상자를 손에 잡고 마구 흔드시면서 자신은 한쪽만 열어 보고 반대쪽에 몇 개의 구슬이 있는지 알 수 있다고 말했다. 그러면서 나에게 보수상자를 주면서 흔들어 보고 한쪽을 박스 내부를 밀어서 몇 개의 구슬이 있는지 보여주라고 하셨다. 나는 열심히 흔들었고 한쪽을 열어 보니 6의 구슬이 보였다.

    

선생님 : 몇 개의 구슬이 있나요?

나 : 6가 있어요.

선생님 : 그럼 다른 쪽에는 4의 구슬이 있습니다. 확인해보세요.

나 : 반대쪽을 열어 보았고 놀랍게도 4의 구슬이 있는 것을 확인했다



몇 번을 더 해봤지만 선생님은 웃으면서 정확하게 반대쪽의 구슬의 개수를 정확하게 모두 맞추었다. 호기심과 신기함에 내 눈이 반짝반짝 빛났을 즈음에 선생님은 보수의 개념을 설명해주었다.

   

선생님 : 손가락은 몇 개가 있나요?

: 10

선생님 : 그럼 손가락을 모두 펴고 그 중에서 6만 접어 보세요. 그럼 몇 개의 손가락이 남나요?

나 : (손가락을 세어보면서) 4

선생님 : 그럼 그 4의 손가락에서 다시 10의 손가락으로 손을 모두 활짝 피려면 몇 개의 손가락을 다시 펴야 하나요?

나 : 6.

선생님 : 10의 손가락이 우리 손가락의 개수예요. 만약 1의 손가락을 핀 상태에서 다시 10개를 채우려면 다시 9의 손가락을 펴야 합니다. 반대도 마찬가지죠. 9의 손가락을 핀 상태에서 10개의 손가락을 채우려면 1의 손가락을 펴줘야 해요. 그런가요?

나 : (손가락을 꼬물거려 보면서)

선생님 : 이렇게 1의 손가락에서 10의 손가락을 채우기 위해서 필요한 수가 9지요. 1의 손가락이 10가 되고 싶어서 필요하고 보충해야할 손가락이 9니까 1의 보수는 9예요

 

선생님은 이런 과정을 숫자마다 반복했고, 그 다음은 보수 상자를 주면서 잘 생각해보라고 말씀하시고 다른 학생을 가르치러 가셨다. 나는 호기심에 보수 상자를 갖고 이쪽저쪽의 숫자를 계속 확인해보다가 그제서야 상자의 한쪽에 있는 구슬의 개수와 상대의 반대쪽에 있는 구슬의 개수가 보수 관계에 있다는 것을 깨달았다. 상자 안에는 총 10개의 구슬이 있었고 따라서 한쪽에 6의 구슬이 있으면 반대쪽에는 4의 구슬이 있을 수밖에 없는 것이다.


즉, 보수상자는 다음처럼 작동하고 있었던 것이다. 

 

그리고 이 현상이 내게는 너무 신기한 것이었다. 초등학생의 인지 수준에서 인과란 무언가 직접적인 작용이 있어야 하는데 그런 직접적인 작용 없이 한쪽이 결정되면 반대쪽도 그 개수가 결정되는 것에 경이감을 느꼈다. 그러면서도 잘 납득이 되지 않아서 계속 보수 상자를 흔들었다. 아무리 시간이 지나도 어떤 짓을 해도 그 관계가 바뀌지 않는 것을 확인하면서 처음으로 숫자라는 것이 무언가 실체적으로 다가왔다.

      

숫자를 50까지 셀 수 있었지만 그것이 무엇인지는 잘 몰랐다. 그냥 1 다음은 22 다음은 3 식으로 하다 보니 50까지 셀 수 있었지만 이 숫자라는 것이 무언가를 가리키고 어떤 관계를 가지는 것이라는 점에 대한 느낌이 전혀 없었다. 그냥 어머니가 시키는 알 수 없는 무의미한 숫자 세기에 불과했던 것이 이 보수 상자를 통해 최초로 어떤 실체감을 가지고 다가온 것이다. 아이들을 가르치시는 분이라면 이 보수 상자를 만들어 보수의 개념을 스스로 발견하게끔 유도해보는 것이 어떨까 싶다.


Anki 파일 


보수(짝궁수)에 대한 Ankl는 다음과 같이 구성했다.

첫 번째 파일은 10에서 숫자를 빼기해서 나오는 수를 계산한다.

두 번째 파일은 어떤 수를 제시하고 그 수를 10으로 만들기 위해서 어떤 수가 필요한지 묻는다.

세 번째 파일은 10을 만들기 위해서 필요한 수가 보수라는 개념을 설명하면서 각각의 수의 보수를 묻는다. 

네 번쩨 파일은 이 보수가 (19), (28), (37), (46), (55)로 서로 짝을 이루는 짝궁수라는 것을 확인한다.


보수(짝궁수)의 개념1(10에서 숫자 빼기).apkg

보수(짝궁수)의 개념2(10이 되기 위해서 필요한 수).apkg

보수(짝궁수)의 개념3.apkg

보수(짝궁수)의 개념4(짝궁수 확인).apkg







문자 클래스


문자열 관련 탐색을 할 때는 앞서 포스팅한 문자열 탐색에서와 같이 그냥 해당 문자열을 바로 탐색하는 것이 가장 간단하다. , 정방향으로 abc라는 문자열을 문서를 탐색할 때는 다음과 같이 명령 라인에 명령어를 입력하면 된다. 


/abc


그런데 abcAbc로 맨 앞의 a가 대문자이거나 소문자인 경우를 모두 같이 탐색하고 싶으면 어떻게 해야 할까?


다음처럼 검색하면 된다.


/[Aa]bc


여기에서 대괄호([ ])로 묶인 것을 문자 클래스라고 부른다. 문자 클래스는 이 대괄호 사이에 있는 문자 중 하나와 일치하면 해당 문자와 일치하는 것으로 본다. 따라서 해당 위치에 올 수 있는 여러 문자들을 문자 클래스([ ]) 내에 배치하면 다양한 문자열을 아래와 같이 간단하게 찾을 수 있게 된다.


정규표현식과 일치하는 문자열

[ab]c ac, bc

[Aa] Ab, ab

[1234]class  1class, 2class, 3class, 4class


문자 클래스([ ])하이픈(-)을 이용하여 범위를 지정할 수 있다


정규표현식과 일치하는 문자

[a-z] 알파벳 소문자

[A-Z] 알파벳 대문자

[1-9] 1에서 9까지의 숫자

[a-zA-Z0-9] 모든 알파벳과 숫자


또한, 문자 클래스([ ]) 내에 캐럿(^)을 이용하여 not의 의미를 부여할 수도 있다.

 

[^Ff]uck uck 문자열 중에서 F 워드를 제외

[^0-9] 숫자가 아닌 경우


Anki 파일


아래는 본 포스팅의 내용을 갈무리하기 위한 Anki 파일입니다. 참고하시기 바랍니다. 


정규표현식 개요


정규표현식을 공부하기에 앞서 정규표현식이란 무엇이고 왜 공부하는게 좋은지 조금 동기부여를 해볼 필요가 있다. 


정규표현식이란 무엇일까? 간단하게 정의하면 다음과 같다


정규표현식문자열의 집합을 표현하는 데 사용하는 형식 언어이다.


정규표현식문자열집합이라는 형태로 다루는 형식 언어이기 때문에, 단순히 몇몇 프로그램이나 vim에서 일시적으로 제공하는 도구가 아니다. 


형식 언어로 학문적인 틀을 갖추고 진지하게 연구되어 개발되었기 때문에 그 구현에 있어서 문법과 버전이 조금씩 다를 수는 있어도 그 본질이 크게 달라질 수는 없다. 그리고 대부분의 문법도 편의성 때문에 조금씩 다르게 적용되는 것 말고는 거의 유사한 것으로 알고 있다. 이 이야기는 정규표현식을 익혀놓으면 그것이 소프트웨어 개발이건, 텍스트 편집이건, 운영체제 운용이든 평생 유용하게 써먹을 수 있다는 이야기이다. 물론, 현재에도 정규표현식은 vim 뿐만 아니라 다양한 텍스트 에디터, Unix/Linux 계열의 애플리케이션소프트웨어 개발 등에서 폭넓게 사용되고 그 유용성을 인정받고 있다. 또한, 데이터 유효성 검사, 데이터 웹 스크랩핑, 문법 구현 등에서도 매우 유용하게 쓰이고 있다. 

 

처음 정규표현식을 접하게 되면 각종 기호와 문자가 복잡하게 얽혀있는 모습이 초보자에게 부담스럽게 다가오지만 유용하게 사용할 수준까지는 매우 쉽게 익힐 수 있고 익혀두면 정말 쓸 곳이 많고 유용하다. 다음이 사례를 보면 그 유용성을 느낄 수 있을 것이다. 

 

아래는 자바스크립트에서 전화번호를 입력받아서 그 전화번호가 올바른 형식으로 입력되었는지 확인하는 함수를 구현해본 것이다.


function phone(number) {

  if (number.length > 8 || number.length < 7) {

    return false;

  }

  var numFirst = number.substring(0, 3);

  var numSecond = number.substring(number.length - 4);

  if (isNaN(numFirst) || isNaN(numSecond)) {

    reuturn false;

  }

  if (number.length === 8) {

    return (number.charAt(3) === "-");

  }

  return true;

}


위의 함수는 꽤 간략하게 코드를 정리한 것이다. 하지만 정규표현식을 이용하면 이 코드가 다음과 같이 줄어든다.


function phone(number) {

  return number.match(/^\d{3}-?\d{4}$/);

}


내부 블록에 12줄로 작성된 함수가 마법처럼 1줄로 줄어들었다. 이처럼 정규표현식을 사용하면 문자열 관련 프로그래밍을 하거나 수만 줄의 코드에서 원하는 문구를 정확히 찾아내는 등 문자열 관련한 작업에서 압도적인 효율을 갖출 수 있게 된다.

 

Anki 파일


아래는 본 포스팅의 내용을 갈무리하기 위한 Anki 파일입니다. 참고하시기 바랍니다. 


이번 Anki는 "정규표현식문자열의 집합을 표현하는 데 사용하는 형식 언어이다." 라는 구절만 공부합니다. 


027 vim의 정규표현식(1).apkg


기본적인 문자열 탐색 


vim에서 특정한 문자열을 찾는 방법은 표준 모드에서 정방향으로 찾을 경우 슬래쉬(/), 역방향으로 찾을 경우 물음표(?)키를 누른 후 찾기 원하는 문자열을 입력하기만 하면 된다.


명령 라인에 /int  int라는 문자열 전방탐색

명령 라인에 ?int  int라는 문자열 후방탐색


문자열 탐색의 결과는 다음의 사진과 같다.


 

탐색된 문자열에 노란색 하이라이트가 표시된 것은 vim의 옵션에서 hlsearch 옵션이 활성화(on) 되었기 때문이다하이라이트를 없애려면 :set nohlsearch 또는 :set nohl 명령을 입력하여 해당 옵션을 비활성화(off) 하면 된다.

 

그리고 탐색이 이루어진 후 커서를 다음에 일치하는 문자열로 이동하려면 소문자 n키를 누르고 이전에 일치하는 문자열로 이동하려면  대문자 N을 누른다. , 슬래쉬(/)로 정방향 탐색을 할 경우 n키를 누르면 커서는 문서의 정방향에 있는 탐색된 문자열로 이동하고, N키는 문서의 역방향에 있는 탐색된 문자열로 이동한다. 하지만 물음표(?) 역방향 탐색을 할 경우 정반대가 되어 n은 문서의 역방향으로 이동하고 N은 문서의 정방향으로 이동하게 된다.


소문자 n  다음 일치하는 문자열로 커서 이동

대문자 N  이전 일치하는 문자열로 커서 이동


커서 위치 단어 자동 탐색


명령 모드에서 별표(*)를 누르면 커서가 위치한 단어를 자동으로 탐색한다. 이때 별표(*)를 누르는 것은 명령 라인에 /\<(커서가 위치한 문자열)\> 형식으로 입력되면서 정규표현식으로 커서가 위치한 단어를 전방 탐색하라는 명령과 동일하게 된다. 


가령, 커서가 다음 단어의 위치에 있을 때 별표(*)를 누르면

int  /\<int>\>int라는 문자열을 전방 탐색


vim의 문자열 탐색의 강력함은  정규표현식을 같이 사용할 때 그 진가가 드러나게 되므로 다음 포스팅 부터는 vim정규표현식을 공부해보도록 하자.


Anki 파일


아래는 본 포스팅의 내용을 갈무리하기 위한 Anki 파일입니다. 참고하시기 바랍니다. 


026 vim의 문자열 탐색.apkg


1997IMF 이후 영어의 중요성은 그 이전과 비교할 수 없을 정도로 중요해졌다. TOEIC 시험 점수는 사람의 가치를 재는 가장 기본적인 척도가 되었고, 영어학원은 연일 문전성시를 이루었다. 그러면서 영어가 비즈니스 환경에서 중요하게 사용되면서 사람들은 실제로 영어를 잘 할 방법을 모색하기 시작했다.


문법과 시험 위주의 공부에 대한 대안을 사람들이 모색하고 있었을 때 나온 것이 영절하(영어공부 절대로 하지마라)였다. 군대에서 진중 문고로 보게 되었는데 그 이야기의 핵심은 쓸데없는 문법공부는 배격하고 원어민처럼 되면 된다는 것이었다. 당시, 그 책을 읽었을 때 그야말로 그 자리에서 바로 완독했을 정도로 글쓴이의 주장은 신선했고 접근하기 쉽게 잘 구성되었으며 무척이나 설득력 있게 쓰여진 책이었다. 읽자마자 바로 영절하식 영어공부 방법을 요약해서 노트화 했던 기억이 아직도 생생하다. 영절하에서 제시된 영어 공부 방법은 기존의 영어 공부법을 폐기하고 올바른 길로 이끄는 혁명적인 방법처럼 느껴졌다. 기본적으로 영어 공부를 단순히 좋은 시험 점수를 받기 위한 수단이 아니라 자연스럽게 원어민처럼 되기 위한 방법으로 제시했고 그 실행방법도 단순하고 명확해 보였다. 그래서인지 많은 사람들이 영절하식 영어공부를 시도했다. 하지만 지금와서 생각해보면 나 개인의 입장에서 이 공부 방법은 그렇게 단순하고 명확하지는 않았던 것 같다. 많은 사람들이 영절하식 공부를 통하여 영어실력이 늘었다고 이야기 하지만 내 스스로 적용하면서 많은 혼란을 겪게 되었기 때문이다. 간단하게 요약하면 영절하는 공부방법을 단계별로 나눠놨는데 그 단계를 뛰어넘는 기준이나 공부해야할 공부량 등이 그다지 명확하지는 않았던 것 같다. 책으로 읽었을 때에는 쉬워보였지만 막상 실천해보면 막막하고 어리둥절한 경우가 많았고 같은 내용의 자료를 계속 들어야 하므로 무척 지루하게 느끼기도 했다. 

 

가령 영절하에서 제시한 1단계가 카세트 테이프 한 개를 그 테이프에 있는 모든 소리가 들릴 때까지 계속한다는 것인데, 해보면 소리가 다 들린다는 기준이 애매하다. 자신이 제대로 들은 것인지 확인할 수 없는데, 그것을 확인할 수 있는 스크립트를 보면 안된다. 그러니 계속 속으로 소리가 다 들린 것인지 아닌지 의심하면서 다음 단계로 나아가도 되는지 판단하지 못한다. 그리고 같은 테이프를 매일 들으니 정말 지루하다. , 이를 무의식적으로 해석하지 말라는 지침도 있어서 자신이 무의식적으로 해석하는지 점검하게 되는데 이런 경우 언어를 알아듣는 것인지 스스로 무의식적으로 독해하듯 해석하는지 잘 구분도 안 간다. 그리고 결정적으로 많은 시간과 노력이 들어가는데 스스로 발전하는지 여부를 확신할 수 없다는 점이 이 공부법의 가장 어려운 점인 것으로 보인다. 스스로 발전하는 것이 느껴지면 계속할 수 있는데, 이를 측정할 수 있는 점수도 없고 어떤 책의 진도가 나가는 것도 아니라서 더더욱 쉽게 할 수 있는 공부가 아니었다. 여튼 영절하를 시도했던 사람들이 이 공부의 어려움을 토로했고 포기하는 사람들도 많이 늘어난 것으로 안다.

 

세상을 삐딱하게 사는 나같은 사람은 영절하를 읽고 그 방법에 동의하면서도 제 입맛대로 그것을 변형해서 스스로 편한 것만 받아들인다. 당시 아무리 세상에서 영어가 중요하다고 말해도 별로 체감하지도 못했고, 솔직히 한국어로 되어 있는 정보도 소화하기 벅찼다. 사교적인 성격이 아니니 외국인 친구를 사귀는 것에도 관심이 없었다. 딱히 여행 가고 싶은 욕구도 없어서 영어가 필요하지 않았다. 당연히 영어 공부에 목숨 걸 생각도 없고 영절하식으로 최선을 다해 영어공부를 할 생각이 있을리 없었다. 그런데 영절하의 논리에는 그대로 설득되어서 영어 공부에 대한 모든 방법을 영절하의 논리를 이용하여 잘못된 공부 방법으로 규정했다. 반공부주의라고나 할까, 문제집이나 교과서를 공부하는 것이 잘못된 것이라는 신념만 강하게 형성되었기에 기존의 영어 공부는 쓸모없는 것이라고 여기면서도 영절하식 공부를 할 여건도 의욕도 없으니 그냥 영어공부를 전혀 안하게 된 것이다. 

 

그러다가 미국 드라마 열풍과 함께 좋아하는 미드에 꽂혀서 밤을 새다시피 하는 나날이 지속되기 시작했다. 재미있는 미드는 많고 현실은 개떡 같으니 매일매일 미드 삼매경이었다. 미드에 빠져서 현실을 잊고 사는 자신의 모습이 한심하게 느껴질 때마다 스스로 핑계를 댔던 것이 영어공부를 한다는 것이었다. , 미드를 보면서 그냥 미드만 보고 있자니 스스로가 너무 한심하게 느껴지니 영절하식 영어공부를 시도한다고 스스로에게 변명하면서 영절하의 공부방법을 따라해본 것이다. 그러면서 영절하식 영어공부의 지루함을 재미있는 미드로 보완하는 것이라고 스스로를 기만했다. 물론, 미드를 보다가 다시 자막을 틀기 일쑤였다. 그러다가 다시 정신이 들면 자막을 꺼보고 그러다가 결국, 발음에 주의하면서 듣는다고 스스로를 속이면서 그냥 자막 키고 봤다. 공부가 되었을 리가 없다.

 

스스로 영어 공부를 한다고 생각하기 시작하니 뭔가 하긴 해야겠다는 생각이 들었다. 그래서 결국, 미드를 통째로 녹음해서 돌아다니면서 이어폰으로 듣기 시작했다. 계속 듣다 보니 점점 잘 들리기 시작했다. 하지만 몇몇 단어는 3년 동안 절대로 들리지 않았고 컨디션에 따라서 잘 들리고 안 들리고가 반복되기 시작했다. 그 상태에서 다음 단계로 넘어가야 할지 잘 알 수 없었다. 안 들리는 단어는 전혀 안들리는데 그런 단어를 추적해서 영영 사전을 찾고 그것을 낭독하라고 되어 있었는데 결국, 못 찾고 끝났다. 스크립트나 자막을 찾아봤으면 그 단어를 찾아낼 수 있겠지만 그러면 지는 것 같았고 결국, 이러지도 저러지도 못하다가 생활이 바빠지면서 조용히 영절하식 공부는 접게 되었다. 


거진 3년간 열심히 녹음한 미드를 들었는데 영어 실력이 늘었을까? 그 부분은 조금 미묘하다 영어 문장이 자연스럽게 들리는 느낌적 느낌은 있다. 하지만 열심히 녹음하여 들은 미드를 자막없이 보기는 어려웠다. 정말 열심히 했다기 보다는 그냥 BGM식으로 움직이거나 여유로울 때만 똑같은 미드를 계속 들었던 것이지만 3년이나 똑같은 미드를 들었다면 영어 전반이 발전하진 않더라도 그 미드 정도만이라도 잘 들렸으면 성취감이 있었을 것이다. 하지만 전혀 그러지 못했다. 

+ Recent posts