Cocoa 프로그래밍을 할 때, 유용할 regex 패턴

UI 작업을 할때, 아무래도 가장 많이 쓰는 요소는 단추( 이야…. 어렸을때는 버튼이란 말대신 단추라는 말을 많이 썼었고 하나도 이상하지 않았는데, 이젠 이상하네…)와 텍스트 필드류가 아닐까 한다. 이런 저런 프로그램을 만들다보면, 한 window에 text field가 좌악 나열하고 그것들에 데이터를 정하고 받아올 경우가 있다. 이거 일일히 다 코딩하려면 참 귀찮다. Cocoa Binding을 쓸 수도 있겠지만 잘못될 경우 디버깅이 거의 불가능한 경우가 왕왕 있어서, 아예 코딩을 해 버린다.
자 그런데 이런 경우를 보자.

NSTextField랑 관련해서 코딩이 반복되는 경우

(이 예는 한 메시지 내에 widget에서 그 값을 설정하고 읽어오는게 아니라, 바꾸는 도중의 것을 찍어 본 것이다.)
이런 경우에 member variable들의 주소를 배열에 넣어놓고, 일률적으로 처리할 수도 있지만, UI에서 보이는 순서와 선언된 변수들의 순서를 일치해주어 관리와 디버깅에 편의를 구하고자 저런 “무식”한 코딩을 한다. 자.. 근데 문제가 있다. setter와 getter를 위해서, 하나만 해도 힘들고 시간 걸리는 일을 두번이나 할 생각을 하면 참 짜증나고, 이게 뭐하는건가 싶다.
규칙을 잘 보자.

// Setter
[memberVariable1 setStringValue:corresponding_variableName1];
[memberVariable2 setStringValue:corresponding_variableName2];
[memberVariable3 setStringValue:corresponding_variableName3];
[memberVariable4 setStringValue:corresponding_variableName4];

// Getter
corresponding_variableName1 = [memberVariable1 stringValue];
corresponding_variableName2 = [memberVariable2 stringValue];
corresponding_variableName3 = [memberVariable3 stringValue];
corresponding_variableName4 = [memberVariable4 stringValue];

Setter의 패러미터를 앞으로 빼내고, setStringValue:를 stringValue로 바꿔주면 된다.
이걸 regex를 이용해서 쉽게 할 수없을까?
그래서 생각해 봤다.

Regular Expression Pattern

 

개선된 규칙은 다음과 같다.
다음과 같은 규칙을 찾아서 : (^.*)set(StringValue):(.*)]
다음으로 대치한다. : $3 = $1\l$2]

\l은 $2의 첫 문자를 소문자(lower case)로 하겠다는 뜻이다. slash-el이다.
시간을 절약해보자. 프로그래밍을 할땐, 논리에 집중하고 싶다. 이런 거에 시간 낭비하지 않고.

巳足: 이번 글을 가능한 한글을 많이 써 보려고 했다. 버튼 대신에 단추를, 세팅대신에 설정 혹은 “정하다”를… 영어 단어를 쓰게 되는 이유는 어차피 외국 사람들과 대화가 가능하려면 그 언어를 생활화해서 그냥 입에 붙어 버려야 좋기 때문이다. 그런데, 요새 이런 저런 신문 웹 사이트나, 사용자 “사회” 사이트들을 보면서, 영어나 중국어들이 필요 이상으로 난무한다는 생각이 들었다. 이렇게 써보니 한글이 참 좋다. 한국말도 제대로 쓰면서 영어도 안 잊을 수가 있다면 무조건 한글 단어를 많이 써야 한다는 생각이든다.

Leave a Reply

Please log in using one of these methods to post your comment:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: