본문 바로가기
C.W.K.
Stream
Lesson 11 of 12 · published

코드 패턴 — 식별자와 주석

~8 min · code-mods, identifiers

Level 0패턴 호기심
0 XP0/90 lessons0/15 achievements
0/100 XP to next level100 XP to go0% complete

단순한 ASCII 식별자 모양

문자나 밑줄로 시작하고 뒤에 문자, 숫자, 밑줄이 이어지는 제한된 식별자는 다음처럼 찾을 수 있어.

[a-zA-Z_]\w*

이름 규칙을 더 좁히면 패턴도 달라져.

  • camelCase: [a-z][a-zA-Z0-9]*
  • snake_case: [a-z][a-z0-9_]*
  • SCREAMING_SNAKE: [A-Z][A-Z0-9_]*
  • PascalCase: [A-Z][a-zA-Z0-9]*
  • kebab-case: [a-z][a-z0-9-]*

실제 언어의 식별자 규칙은 유니코드와 예약어까지 포함할 수 있으므로, 이 패턴들은 이름 모양을 제한하는 예시로만 써.

주석처럼 보이는 구간 찾기

C 계열 한 줄 주석은 //[^\n]*, 셸이나 Python의 한 줄 주석은 #[^\n]*로 후보를 찾을 수 있어. 여러 줄 주석의 단순한 형태는 /\*[\s\S]*?\*/로 줄바꿈까지 건널 수 있지.

하지만 문자열 안의 //나 URL 조각의 #도 같은 모양이야. 실제 소스 코드에서 주석을 정확히 구분하려면 토크나이저나 파서가 문자열 문맥까지 판단해야 해.

코드 변환은 변경 규모에 맞는 도구를 골라

함수 이름이나 단순한 import처럼 문맥이 제한된 일회성 변경은 VS Code의 정규식 찾기·바꾸기나 sed로 처리할 수 있어. 문법 구조를 이해해야 하는 리팩터링이라면 Python의 libcst, JavaScript의 jscodeshift 같은 AST 도구가 더 안전해.

Code

코드 정규식 예시·python
import re

# 식별자 패턴
IDENT = re.compile(r'[a-zA-Z_]\w*')
re.findall(IDENT, 'function getUserById(user_id) {}')
# ['function', 'getUserById', 'user_id']

# camelCase 만
CAMEL = re.compile(r'\b[a-z][a-zA-Z0-9]*\b')
re.findall(CAMEL, 'getUserById vs get_user_by_id')
# ['getUserById', 'get', 'user', 'by', 'id']  — snake_case 분리

# Multi-line C 식 주석
COMMENT = re.compile(r'/\*[\s\S]*?\*/')
re.findall(COMMENT, '/* hello */ code /* world */')
# ['/* hello */', '/* world */']

# JavaScript 의 import 찾기
IMPORT = re.compile(
    r'^import\s+(?:\{[^}]+\}|\*\s+as\s+\w+|\w+)\s+from\s+[\'"]([^\'"]+)[\'"]',
    re.MULTILINE
)
code = '''
import React from 'react';
import { useState } from 'react';
import * as fs from 'fs';
'''
re.findall(IMPORT, code)
# ['react', 'react', 'fs']

External links

Exercise

코드의 함수 하나를 골라 VS Code 정규식 찾기·바꾸기로 호출 이름을 변경해. 적용 전에 주석 속 이름과 비슷한 식별자가 함께 잡히는지 확인하고, 이 변경에는 정규식이면 충분한지 AST 도구가 필요한지 근거를 적어.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.