Skip to content

문자열 유틸리티 함수 추가 (Claude Code Review 테스트)#694

Open
kenshin579 wants to merge 6 commits intomasterfrom
feature/test-claude-code-review
Open

문자열 유틸리티 함수 추가 (Claude Code Review 테스트)#694
kenshin579 wants to merge 6 commits intomasterfrom
feature/test-claude-code-review

Conversation

@kenshin579
Copy link
Copy Markdown
Owner

Summary

  • Go 문자열 유틸리티 함수 6개 추가 (ReverseString, CamelToSnake, SnakeToCamel, TruncateWithEllipsis, CountWords, IsPalindrome)
  • 각 함수에 대한 테이블 드리븐 테스트 작성 (한글, 이모지, 엣지 케이스 포함)
  • Claude Code Review 워크플로우 동작 테스트 목적

Test plan

  • go build ./golang/strings/string_utils.go 컴파일 확인
  • Claude Code Review 워크플로우가 PR에서 정상 트리거되는지 확인
  • 리뷰 코멘트가 정상적으로 생성되는지 확인

🤖 Generated with Claude Code

kenshin579 and others added 4 commits March 20, 2026 18:22
- ReverseString: 유니코드 지원 문자열 뒤집기
- CamelToSnake/SnakeToCamel: 네이밍 컨벤션 변환
- TruncateWithEllipsis: 말줄임 처리
- CountWords: 단어 수 세기
- IsPalindrome: 회문 검사
- 모든 함수에 대해 테이블 드리븐 테스트 작성

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
pull-requests: read → write로 변경하여 PR에 리뷰 코멘트를 작성할 수 있도록 수정.
이전 실행에서 permission_denials_count: 17로 권한 부족으로 코멘트 작성 실패.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@claude
Copy link
Copy Markdown

claude bot commented Mar 20, 2026

Claude finished @kenshin579's task in 1m 27s —— View job


Code Review: 문자열 유틸리티 함수 추가

  • 컨텍스트 파악
  • 코드 분석
  • 리뷰 작성

전반적인 평가

코드 구조는 깔끔하고 Go 관용 패턴(rune 기반 Unicode 처리, strings.Builder)을 잘 활용했습니다. 테스트도 테이블 드리븐 방식으로 잘 작성되어 있습니다. 다만 버그 1건잠재적 패닉 1건, 설계 제한사항 1건이 있습니다.


🔴 버그: SnakeToCamel 앞 언더스코어 처리 오류

파일: golang/strings/string_utils.go:37-48

for i, part := range parts {
    if part == "" {
        continue  // i는 여전히 원본 슬라이스 인덱스
    }
    if i == 0 {  // 앞에 빈 파트가 있으면 i==0이 아닌 i==1부터 시작
        result.WriteString(strings.ToLower(part))
    } else {
        result.WriteString(strings.ToUpper(part[:1]) + ...)
    }
}

_hello_world_Split("_") 하면 ["", "hello", "world", ""]가 됩니다.

  • i=0, part="" → skip
  • i=1, part="hello"i != 0이므로 대문자화 → "Hello"
  • 결과: "HelloWorld" ← 테스트 기댓값 "helloWorld"와 불일치 (테스트 실패)

수정 방법: 원본 인덱스 대신 실제로 작성된 파트 수를 별도 카운터로 추적해야 합니다. Fix this →


🔴 버그: SnakeToCamel 바이트 인덱싱 (Unicode 비안전)

파일: golang/strings/string_utils.go:44

result.WriteString(strings.ToUpper(part[:1]) + strings.ToLower(part[1:]))

part[:1]바이트 슬라이싱입니다. part의 첫 문자가 멀티바이트 Unicode 문자(café, 한글 등)이면 잘못된 결과 또는 패닉이 발생합니다.

수정 방법:

runes := []rune(part)
result.WriteString(strings.ToUpper(string(runes[:1])) + strings.ToLower(string(runes[1:])))

Fix this →


🟡 잠재적 패닉: TruncateWithEllipsis 음수 maxLen

파일: golang/strings/string_utils.go:51-60

func TruncateWithEllipsis(s string, maxLen int) string {
    runes := []rune(s)
    if len(runes) <= maxLen {   // 음수이면 false
        return s
    }
    if maxLen <= 3 {            // 음수는 <=3 이므로 true
        return string(runes[:maxLen])  // 음수 인덱스 → 패닉!
    }
    ...
}

maxLen < 0이면 runes[:maxLen]에서 런타임 패닉이 발생합니다.

수정 방법: 함수 시작부에 if maxLen < 0 { maxLen = 0 } 또는 에러 반환을 추가하세요. Fix this →


🔵 설계 제한사항: CamelToSnake 연속 대문자

파일: golang/strings/string_utils.go:18-31

현재 구현은 HTTPServerh_t_t_p_server를 생성합니다 (테스트에서도 이 동작을 기댓값으로 명시). 실무에서는 보통 http_server가 기대되는 경우가 많으므로, 함수 주석에 이 동작을 명시적으로 문서화하는 것을 권장합니다:

// CamelToSnake converts a camelCase or PascalCase string to snake_case.
// Note: consecutive uppercase letters are treated individually,
// e.g., "HTTPServer" becomes "h_t_t_p_server", not "http_server".
func CamelToSnake(s string) string {

✅ 잘된 점

  • ReverseString, IsPalindrome - rune 기반으로 Unicode/이모지를 올바르게 처리
  • TruncateWithEllipsis - rune 단위 truncation으로 한글 처리 정확
  • CountWords - strings.Fields 활용으로 공백/탭/개행 일괄 처리
  • 테이블 드리븐 테스트에 한글, 이모지, 엣지 케이스 포함 ✓
  • strings.Builder 사용으로 문자열 연결 최적화 ✓

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant