Knowledge Map

[서평] 다양한 언어로 배우는 정규표현식 본문

PYTHON

[서평] 다양한 언어로 배우는 정규표현식

2016. 4. 17. 10:54


3줄 요약

1. 정규표현식에 대해서 깊이있는 내용을 다루었다.

2. 이거 다 이해하면 정규표현식을 마음대로 쓸것이다.

3. 이해시킬려는 노력이 보이는 책이지만 어렵다.


요즘 코딩 열풍이 불기 시작하면서 다시금 컴퓨터 학원가들이 활기를 띄고 있는거 같다. 페북을 여러해 했지만 요즘처럼 컴퓨터 학원 강의 광고가 많은 뜨는 시기는 없었다. 때마침 이세돌 VS 알파고 덕분에 더욱 코딩에 대한 관심이 증가하면서 대학가에서도 비전공자들을 위한 코딩교육이 늘어가고 있다. 그래서인지 코딩 서적들도 이제 하나둘 늘어나고 있는거 같다. 그런 흐름 속에서 이 책을 만나게 되었다. 딱딱할수 있는 기호들을 사용해서 나름 엣지(?) 있게 디자인 해놓은 이 책의 표지에서 느껴지는 귀여움에서 나도 모르게 선택한거 같다.


이 책은 정규표현식을 다루고 있다. 정규표현식이란 무엇일까?

정규표현식은 영어로 'regular expression' 이라고 흔히 말한다. 이것은 무언가를 표현하기 위한 일종의 식이다. 수학에서 f(x) = x + 3 이렇게 쓰듯이 프로그래머들이 다양한 기호와 연산자를 이용해서 사용하는 식이다. 수학에서는 f(x) 가 y 이므로 y값을 구하기 위해서이거나 x값을 구하기 위해서 식을 사용한다. 하나의 미지수를 구하기 위해서 이용한다고 보면 프로그래밍에서는 주로 원하는 y값을 출력(표현)하기 위해서는 어떤 식을 만들어야 할지를 고민한다. 보통 x들은 예상이 가능하기 때문이다.


쉽게 말하자면 정규표현식은 '원하는 표현을 하기 위한 필터' 라고 볼 수 있다..

이 책에 관심 가져보는 사람들이면 이미 다 알겠지만 아주 심플한 예제를 보자면


1
2
3
4
5
6
7
8
9
# 파이썬 3.4 버전입니다. 
# testText : 테스트대상 // hangul : 한글 정규표현식
import re
 
testText = '879가나다라dafadf마늘38279387고구마'
hangul = re.compile('[^ ㄱ-ㅣ가-힣]+')
print(hangul.sub('',testText))
 
# 출력 : 가나다라마늘고구마
cs

 


이렇게 된다. 만약 정규표현식을 안쓰고 이렇게 출력하려면 좀 복잡해지는데 정규표현식은 그저 한줄로 필터링을 행하고는 바로 출력한다. 얼마나 간편한가?


이러한 강력함 때문에 정규표현식을 쓰이는 곳은 참 많다. 흔히 접할수 있는 곳은 IDE이다. 인텔리 제이, 이클립스 등에서 글자 잘못쓰거나 규칙에 안 맞으면 실행해서 에러 나기 이전에 이미 화면에서 빨간줄이나 다양한 방법으로 틀렸다는 것을 알려준다. 이렇게 해주는것도 정규표현식을 이용해서 해준다. 이것 뿐만 아니라 SQL Injection이라는 것이 있는데 이것을 막아주는 데에도 필터링으로 정규표현식을 쓰인다. 정규표현식은 따로 메소드를 만들어서 처리하는 것보다 훨씬 빠른 속도를 보여주는데 정규표현식이 가장 먼저 로딩 되기 때문이라고 한다. 


개발하다보면 필연적으로 만나게 되는 정규표현식은 사실 인터넷에서 검색하면 이용할수 있는 식은 많이 나온다. 하지만 그것에 대한 깊이 있는 설명, 왜 이렇게 돌아가는지에 대한 메커니즘에 대한 이야기는 잘 나오지 않는다. 이 책은 그것을 알려준다. 귀엽게 보이는 표지와 달리 내용이 어렵다.... 


이 책을 읽고 있다가 7년차 개발자 대리님께 이책을 보여드렸는데 거의 전공 수준이거나 그 이상의 내용이 있다면서 이런 내용은 대학교 학부 수업때 잠깐 보고 진짜 오랜만에 본다고 하셨다. 나도 2번에 걸쳐서 읽어 보고 있는데 사실 3장을 넘어가기 시작하면 어려워서 이해를 잘 못하겠다. 글자로 써져있는게 한글이라는 건 알겠고 문장 하나하나 보면 이해는 되는데 전체적인 맥락의 흐름으로는 이해를 못하겠다.


그런다고 책이 일부러 어렵게 쓰여져 있는 것은 아니다. 이런 내용을 쉽게 전달하기 위해서 도표들을 이용하고 코드도 계속 나오면서 노력하고 있는 것이 보인다.  







다만 이 책의 내용만 읽어서는 이해를 하는데에는 분명한 한계가 존재한다. 프로그래밍은 해보면서 확실히 느끼지만 프로그래밍은 실천해보면서 느끼는 학문이자 기술이다. 따라서 뭐라도 일단 실행해보고 그것에 대한 결과(피드백)을 겪으면서 익히는 것이다. 책 자체로 보면 내용이나 구성이 상당히 괜찮게 느껴지지만 그것이 조금 아쉽다. 각 책챕터 말미마다 실습코너(?) 같은 것을 만들어서 간단한 예제와 그 챕터에서 다룬 내용을 적용한 정규표현식를 1,2개 정도 정리해주었으면 어떠했을까 생각이 든다. 내용이 어려워서 이해를 못하더라도 일단 코드가 돌아가고 그것들을 작동시키다 보면 역으로 책의 내용들이 좀더 쉽게 받아들여지기 때문이다. 


이 책의 장점 중 하나는 하나의 언어에 국한하는게 아니라 다양한 언어들을 통해서 정규표현식을 설명해 나가고 있다는 점이다. 다양한 언어를 통해서 설명하다보니까 펄, 루비, 파이썬,파이썬 등의 코드가 계속 바뀌면서 보여주고 각가의 언어에 대해서 정규표현식이 어느정도 적용되고 활용되는지를 말해준다. 그런데 가끔 이게 어떤 언어의 코드인지는 말을 안해주는 경우가 있다. 이럴때는 진짜 당황스러웠다. 해당 코드가 어떤 프로그래밍 언어의 코드인지 코드가 있는 페이지 아래에 간단하게 이것은 무슨 언어다 라고 간단하게 주석처리만 해줬어도 그런 느낌은 안 받았을텐데 많이 아쉬웠다.


하지만 여러번 읽다 보니 점점 눈에 들어오고 이해되는 대목이 많아졌고 그럴수록 이 책이 내 생각보다 훨씬 깊이 있는 책이고 최대한 이해시켜줄려고 설명해주고 있다는 것을 많이 느꼈다. 그래서 이 책 자체에 대한 후회는 거의 없다. 평소에도 정규표현식을 인터넷에서 검색해서 쓰고는 했지만 정작 이것이 어떻게 작동하고 돌아가는지에 대해서는 많이 무지했기 때문이다. 아마 이 책을 제대로 다 이해하게 되는 순간 나 자신이 완전 프로그래머 고수가 되어있을 것이라고 생각이 들었다.


이 책 뒷 표지에 보면 '한권으로 배우는 정규표현식의 모든것!' 이라고 되어 있는데, 그런 오만한(?) 문구를 붙여도 손색은 없겠다고 생각이 들었다. 

다만.. 이 책 볼려면 최소한 다른 정규표현식을 다룬 기초적인 책을 하나 다 읽고 보는 것을 추천한다.

'PYTHON' 카테고리의 다른 글

TypeError: expected a character buffer object  (0) 2016.04.22
파이썬 강의 필기 3일차  (0) 2016.04.17
파이썬 GUI  (0) 2016.04.16
파이썬 포함, 상속 문제  (0) 2016.04.16
pip upgrade  (0) 2016.04.16
Comments