-
Notifications
You must be signed in to change notification settings - Fork 10
/
0257.txt
77 lines (59 loc) · 6.58 KB
/
0257.txt
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
안녕하세요 포프입니다.
오늘은 Regex 에 대해 이야기 해 볼게요,
한국 말로 정규 수식, 정규 표현식이라하죠.
Regex라는건 일단 어떤 스트링이 있어요, 이게 우리가 원하는 포맷에 맞냐 예를들어서
앞에는 숫자가 하나 들어와야하고 뒤에는 알파벳 캐릭터 6개가 들어와야하고 그뒤에는 빈칸이 몇개 있어야 되고
이런 룰을 체크하는 데 그냥 쓸 수 있는 식이에요.
저는 Regex를 정말 안좋아해요, 그리구 최대한 쓰지 말자라는 주의에요.
Regex하면 간단하다. 코드 한줄이면 모든 표현을 체크할 수 있다. 다 좋아요
표현이 정말 복잡한 로직은 정말 좋은데, 단순히 그냥 앞에 char가 두개여야 되고 뒤에 숫자가 3개 와야 되는것 까지
정규식을 쓸 필요는 없닫고 생각해요. 그 이유는 정규식을 썻을때 '아 이건 이거다' 하고 알수 있는 사람이 많지가 않아요
'그걸 왜몰라 걔넨 그럼 X신이야' 이럴 수 있지만 중요한건 정규식이라는거 자체가 비유를 들자면
디렉토리를 검색할 때 콘솔로 봐서 디렉토리 검색 쉽게 검색할 수 있어요(저도 가끔 편하니까 가끔 쓰고), 그렇게 할 수 있지만
대부분의 사람들은 탐색기를 통해서 트리구조로 타고 들어가죠? 저는 그 차이라고 봐요
코드도 마찬가지거든요 한눈에 읽고 한눈에 이해가 되는 코드가 좋고, 그리고 그런 경우는 일단 스트링 대 여섯개의 로직을
여섯개 박는게 아니라 if else로 깔끔하게 나눠주는게 이해가 쉬워요
그래서 저는 기본적으로 regex는 코드베이스에서 쓰지 말라고 그래요,
예외는 당연이 있어요, 예를 들어서 ,asp 에서 routing 할때 attribute 체크를 할 때가 있거든요?
(<< ZENO 의 판단하에 고침, ".asp 에서 attibute 이렇게 라우팅 할 때 있거든요? 웹 API 에서?")
그럼 위에 들어오는 각 매개변수마다 validation 해야 할 수가 있어요 integer야하고 최소값이 몇이고, 근데 그중에 하나가
regex를 넣을수 있는게 있어요 들어오는 스트링 하나가 토큰이 어떤 format이여야 된다. 날짜면은 숫자 두개/숫자 두개/ 이런식으로
그거를 regex를 쓸 순 있어요 솔직히 거기 쓰기엔 참 좋거든요, 그거 할려고 내가 다른 attribute를 만드는것도 말이 안되고.
그래서 정말 regex를 써야하는 곳이 있다면, 반드시 주석이 들어가야 된다고 봐요.
왜나하면 regex 코드를 사람들 보고 이해하라고 할 수 있지만, 저는 말그대로 사람들이 한참 python(<<ZENO 의견 : python 및 스크립트 언어 에서?)에서
에서 생각없이 장난 칠 때 "어 이런것도 있어! 이런것도 되!" 이런식으로 약간 장난 친거라고 보거든요
그뒤부터 솔직히 제가 프로덕션에서 안쓰는걸 봐오기 시작했고, 제가말한 이유때문에..
code review에 regex가 들어와도 정말 꼼꼼하게 보지 않으면 regex가 맞는지 아닌지 헷깔릴때가 많아요.
그래서 저는 이건 말그대로 모든 사람들이 공통으로 쓰지 않는 코드에다 갖다 박는거랑 같다고 보거든요,
그래서 저는 regex는 개인 프로젝트에 쓰는건 뭐라고 안그러겠는데, 회사에서는 쓰면 안된다고 봐요.
기본적으로 안쓰는게 regex고 정말 regex 써야 하면 편해지는 경우가 있죠?
코드 100줄 200줄 짤필요 없고, 이상한 Recursive 함수 안돌려도 되고, 이런데는 써요.
근데 그거 아니라 단순하게 숫자 몇개 character 몇개 이거 조사할 때는 차라리 if else 쓰고 substring 써서 검사하는게 훨씬 낫다고 봐요
regex 얘기하니까 또 재밌는 생각이 뭐냐면
regex가 과연 언제 그렇게 인기가 많았고, 언제 인기가 사그라들었는지 기억은 잘 안나는데
제가 BCIT 다닐때 이제 학교에서 보통 경진대회 선발 준비반에 들어갔을 때, 경진대회 나오는 대부분의 문제들이 regex라는거에요
그래서 regex를 열심히 가르키고 있는거에요.
그래서 '야 이거 경진대회를 패턴 매칭하는 거에 시간을 쓰고있냐, 내가 여기서 시간낭비 할 필요가 있나?'
라는 생각이 들어서 안한다 그랬어요.
제가 볼땐 정말 왜 그런 거 쓸떼없는 거 경진대회를 하는지도 모르겠고, regex를 할 바에는
차라리 데이터 주고 데이터 구조를 바꿔봐라 라는 알고리즘을 하고 말지, regex에 그렇게 혈안이 되서 하는지 모르겠어요
그래서 그러다가도 이제 또 regex으로도 안풀리는 문제들이 있거든요, 그럼 또 어떤 문제는 왜 regex로 안풀리나 이러고 있고
그래서 좀 이해가 안됬떤게. 저거 regex로 짤 바에는 손코딩이 훨신 더 빠를텐데
regex를 짜봐야 내부적으로는 컴파일러든 뭐든 라이브러리든 뭐든 걔네가 다 매칭 해줘야하는거거든요.
그러면 이게 되니까 좋아 라고 하는건 좋은데, 그 물론 걔네 regex것 보다 제가 빠른 코드를 짜기는 어려울 수도 있어요 사실은,
근데 regex 패턴 찾아오는거 부터가 시간이 걸리고 남들에 가독성 다 줄이는 부터가 남들 시간 다 낭비하게 하는건데.
그렇게 성능이 필요 한 곳이라면 regex 자체도 안쓸것 같고.
저는 그래서 regex가 참 계륵같은 존재에요. 버리자니 아깝고 쓰기도 그렇고..
읽히지 않는 코드는 짜지 않듯이 regex도 가능하면 쓰지 말라는 말을 하고싶어요
이게 얼마나 파워풀하고 뭐하고를 떠나서..
이게 된다고해서 굉장히 쿨하고 멋지다고해서 그렇다고 production 코드에 써야하는건 아니에요
쓰면 쓸수록 제가 볼때는 실수를 만들 확률로 높혀주기 때문에, 그런건 피하자고 하는 주의이고
그래서 저는 그 개념에서 regex도 피하자는 주의에요
그런식으로 말할꺼면 이거 성능도 좋고 이러이러면 모든걸 어셈블리로 짜고 말지
왜 우리가 어셈블리로 안짜.. 기계어로 짜고말지...
그래서 저는 regex는 뭔가 할 때 굉장히 Cool 했던 건데, 아 이런것도 되는구나
이랬던거 같은데 다행이 요즘 많이 사그라들어서 다행이에요
regex가.. 아직 쓰고 계시는 분이 있다면 한번쯤 다시한번 생각해보시기 바래요
팀에 좋은거냐, 제품에 좋은거냐
그런 생각
옙 포프였습니다.