csharp-code-review

Compare original and translation side by side

🇺🇸

Original

English
🇨🇳

Translation

Chinese

C# 코드 리뷰 스킬

C#代码评审技能

OOP 원칙, SOLID 원칙, GoF 디자인 패턴, 최신 C# 기능, 성능 관점에서 C# 코드를 체계적으로 리뷰합니다.
중요: 모든 리뷰 결과는 반드시 한국어로 작성합니다. 코드 식별자, 기술 용어, 패턴 이름 등은 원문 그대로 유지하되, 설명·문제점·개선안 등 서술 부분은 한국어를 사용합니다.
从OOP原则、SOLID原则、GoF设计模式、现代C#特性及性能角度,对C#代码进行系统化评审。
重要提示:所有评审结果必须使用韩语撰写。 代码标识符、技术术语、模式名称等保留原文,说明、问题点、改进方案等描述部分使用韩语。

인자

参数

  • $ARGUMENTS[0]
    : 대상 파일 또는 디렉토리 경로 (선택, 미지정 시 최근 수정된 .cs 파일을 탐색)
  • $ARGUMENTS[0]
    : 目标文件或目录路径(可选,未指定时将搜索最近修改的.cs文件)

실행 단계

执行步骤

1단계: 리뷰 대상 식별

步骤1:确定评审目标

사용자가 파일을 지정하지 않은 경우:
  • 최근 수정된
    .cs
    파일 확인
  • 또는 사용자에게 리뷰할 파일/디렉토리 지정 요청
若用户未指定文件:
  • 检查最近修改的
    .cs
    文件
  • 或请求用户指定待评审的文件/目录

2단계: 코드 분석

步骤2:代码分析

대상 코드를 읽고 아래 관점에서 분석합니다.
读取目标代码,从以下角度进行分析。

리뷰 체크리스트

评审检查清单

OOP 4대 원칙

OOP四大原则

원칙리뷰 항목
캡슐화private 필드, 프로퍼티 접근, 구현 세부사항 은닉
상속적절한 상속 계층, 상속보다 합성 우선
다형성인터페이스/추상 클래스 활용, virtual 메서드 적절성
추상화적절한 추상화 수준, 불필요한 세부사항 노출
原则评审项
封装私有字段、属性访问、隐藏实现细节
继承合理的继承层级、优先使用组合而非继承
多态接口/抽象类的使用、虚方法的合理性
抽象合理的抽象级别、避免暴露不必要的细节

SOLID 원칙

SOLID原则

원칙리뷰 항목위반 징후
SRP클래스가 단일 책임을 갖는가?여러 이유로 클래스가 변경됨, 메서드 과다
OCP확장에 열려있고 수정에 닫혀있는가?새 기능 추가 시 기존 코드 수정 필요, switch/if-else 체인
LSP하위 타입이 상위 타입을 대체할 수 있는가?하위 클래스에서 예외 발생, 빈 메서드 오버라이드
ISP클라이언트별로 인터페이스가 분리되어 있는가?NotImplementedException, 미사용 메서드
DIP추상화에 의존하는가?new 직접 인스턴스화, 구체 클래스 타입 의존
原则评审项违规迹象
SRP类是否具备单一职责?类因多种原因被修改、方法过多
OCP是否对扩展开放、对修改关闭?添加新功能时需要修改现有代码、存在switch/if-else链
LSP子类是否可以替换父类?子类抛出异常、空方法重写
ISP是否按客户端拆分接口?NotImplementedException、未使用的方法
DIP是否依赖抽象?直接使用new实例化、依赖具体类类型

GoF 디자인 패턴 적용 기회

GoF设计模式应用机会

코드에서 다음 패턴을 적용할 수 있는 부분을 식별합니다:
생성 패턴
  • 복잡한 객체 생성 → Builder
  • 객체 생성 로직 분리 → Factory Method / Abstract Factory
  • 전역 단일 인스턴스 → Singleton (주의: 남용 금지)
구조 패턴
  • 호환되지 않는 인터페이스 연결 → Adapter
  • 동적 기능 추가 → Decorator
  • 복잡한 하위 시스템 단순화 → Facade
  • 객체 트리 구조 → Composite
행동 패턴
  • 교체 가능한 알고리즘 → Strategy
  • 상태에 따른 행동 변경 → State
  • 객체 간 통신 → Observer / Mediator
  • 요청 처리 체인 → Chain of Responsibility
  • 실행 취소/재실행 → Command + Memento
识别代码中可应用以下模式的部分:
创建型模式
  • 复杂对象创建 → Builder
  • 对象创建逻辑分离 → Factory Method / Abstract Factory
  • 全局单例实例 → Singleton(注意:禁止滥用)
结构型模式
  • 连接不兼容接口 → Adapter
  • 动态添加功能 → Decorator
  • 简化复杂子系统 → Facade
  • 对象树结构 → Composite
行为型模式
  • 可替换算法 → Strategy
  • 根据状态改变行为 → State
  • 对象间通信 → Observer / Mediator
  • 请求处理链 → Chain of Responsibility
  • 撤销/重做 → Command + Memento

최신 C# 기능 (C# 12/13)

现代C#特性(C# 12/13)

기능권장 시점
Primary constructors간단한 초기화를 가진 클래스
Collection expressions배열/리스트 초기화
[1, 2, 3]
required properties생성자 없이 필수 초기화 보장
init-only setters불변 객체
record types값 기반 동등성, DTO
Pattern matching복잡한 조건문, 타입 검사
File-scoped namespaces들여쓰기 축소
Raw string literals여러 줄 문자열, JSON, SQL
特性推荐场景
Primary constructors具有简单初始化逻辑的类
Collection expressions数组/列表初始化
[1, 2, 3]
required properties无需构造函数即可保证必填初始化
init-only setters不可变对象
record types基于值的相等性、DTO
Pattern matching复杂条件语句、类型检查
File-scoped namespaces减少缩进
Raw string literals多行字符串、JSON、SQL

성능 리뷰

性能评审

카테고리리뷰 항목
메모리 할당핫 경로에서 불필요한 할당, Large Object Heap (>= 85KB)
Async/Await차단 호출 (.Result, .Wait()), ConfigureAwait 누락
컬렉션잘못된 컬렉션 타입, LINQ 다중 열거
문자열루프 내 문자열 결합, StringBuilder 미사용
박싱불필요한 값 타입 박싱
Span/MemorySpan<T>, Memory<T> 없는 버퍼 연산
类别评审项
内存分配热点路径中的不必要分配、大对象堆(>=85KB)
Async/Await阻塞调用(.Result、.Wait())、缺少ConfigureAwait
集合错误的集合类型、LINQ多次枚举
字符串循环内字符串拼接、未使用StringBuilder
装箱不必要的值类型装箱
Span/Memory未使用Span<T>、Memory<T>的缓冲区操作

비동기 코드 리뷰

异步代码评审

  • .Result
    또는
    .Wait()
    호출 없음 (데드락 위험)
  • 라이브러리 코드에서
    ConfigureAwait(false)
    사용
  • 적절한 CancellationToken 전파
  • 캐시된 결과가 있는 핫 경로에
    ValueTask
    사용
  • 스트리밍 데이터에
    IAsyncEnumerable
    사용
  • 이벤트 핸들러 외 async void 없음
  • .Result
    .Wait()
    调用(存在死锁风险)
  • 库代码中使用
    ConfigureAwait(false)
  • 合理传递CancellationToken
  • 在有缓存结果的热点路径中使用
    ValueTask
  • 对流式数据使用
    IAsyncEnumerable
  • 除事件处理程序外无async void

코드 품질 리뷰

代码质量评审

  • 명명 규칙 (PascalCase, camelCase, _privateField, Async 접미사)
  • null 안전성 (nullable reference types,
    ?.
    ,
    ??
    ,
    ??=
    )
  • 예외 처리 (구체적 예외,
    when
    필터, 적절한 로깅)
  • IDisposable 패턴 준수 (using 문, Dispose 구현)
  • 컬렉션 사용 (적절한 타입 선택, 효율적인 LINQ)
  • 매직 넘버/문자열은 상수로 선언
  • 중복 코드 제거
  • 상속 불필요 클래스에
    sealed
    적절히 사용
  • 命名规范(PascalCase、camelCase、_privateField、Async后缀)
  • null安全性(可为空引用类型、
    ?.
    ??
    ??=
  • 异常处理(具体异常、
    when
    过滤器、合理日志)
  • 遵循IDisposable模式(using语句、Dispose实现)
  • 集合使用(选择合适类型、高效LINQ)
  • 魔法数字/字符串声明为常量
  • 消除重复代码
  • 对无需继承的类合理使用
    sealed

보안 리뷰

安全评审

  • 입력 유효성 검사 (SQL Injection, XSS, 경로 탐색)
  • 민감 데이터 처리 (하드코딩된 비밀 없음, 적절한 암호화)
  • 인증/권한 확인
  • 보안 난수 생성 (
    Random
    보안 용도 사용 금지)
  • XML External Entity (XXE) 방지
  • 输入验证(SQL注入、XSS、路径遍历)
  • 敏感数据处理(无硬编码密码、合理加密)
  • 认证/权限验证
  • 安全随机数生成(禁止将
    Random
    用于安全场景)
  • 防止XML外部实体(XXE)攻击

3단계: 리뷰 결과 출력

步骤3:输出评审结果

출력 형식

输出格式

모든 내용은 한국어로 작성합니다. 코드 식별자와 기술 용어는 원문을 유지합니다.
markdown
undefined
所有内容均使用韩语撰写。代码标识符和技术术语保留原文。
markdown
undefined

코드 리뷰 결과

代码评审结果

요약

摘要

  • 파일: {파일 경로}
  • 종합 평가: {우수/양호/개선 필요/심각}
  • 주요 이슈: {N}건
  • .NET 버전 준수: {.NET 8/9 기능 활용도}
  • 文件:{文件路径}
  • 综合评价:{优秀/良好/需要改进/严重}
  • 主要问题:{N}个
  • .NET版本兼容性:{.NET 8/9功能使用率}

SOLID 원칙 분석

SOLID原则分析

SRP 위반 (심각도: 높음/보통/낮음)

SRP违规(严重程度:高/中/低)

  • 위치:
    ClassName.cs:line
  • 문제: {설명}
  • 개선안: {코드 예시 포함}
  • 位置:
    ClassName.cs:line
  • 问题:{说明}
  • 改进方案:{含代码示例}

OCP 위반

OCP违规

...
...

최신 C# 기능 적용 기회

现代C#特性应用机会

{기능명} 권장

推荐使用{特性名}

  • 위치:
    file.cs:line
  • 현재: {기존 코드}
  • 개선: {최신 C# 문법}
  • 이점: {설명}
  • 位置:
    file.cs:line
  • 当前:{现有代码}
  • 改进:{现代C#语法}
  • 优势:{说明}

성능 이슈

性能问题

{이슈 제목} (심각도: 높음/보통/낮음)

{问题标题}(严重程度:高/中/低)

  • 위치:
    file.cs:line
  • 문제: {영향 포함 설명}
  • 현재: {문제 코드}
  • 개선: {최적화 코드}
  • 효과: {예상 개선점}
  • 位置:
    file.cs:line
  • 问题:{含影响说明}
  • 当前:{问题代码}
  • 改进:{优化代码}
  • 效果:{预期改进点}

비동기 코드 이슈

异步代码问题

{이슈 제목}

{问题标题}

  • 위치:
    file.cs:line
  • 문제: {설명}
  • 위험: {데드락/성능/기타}
  • 해결: {코드 수정}
  • 位置:
    file.cs:line
  • 问题:{说明}
  • 风险:{死锁/性能/其他}
  • 解决:{代码修改}

적용 가능한 디자인 패턴

适用的设计模式

{패턴명} 패턴 권장

推荐使用{模式名}模式

  • 현재 코드: {문제점}
  • 적용 시 이점: {설명}
  • 예시 코드: {간략 예시}
  • 当前代码:{问题点}
  • 应用优势:{说明}
  • 示例代码:{简化示例}

보안 우려사항

安全隐患

{이슈 제목} (심각도: 심각/높음/보통/낮음)

{问题标题}(严重程度:严重/高/中/低)

  • 위치:
    file.cs:line
  • 취약점: {설명}
  • 해결: {코드 수정}
  • 位置:
    file.cs:line
  • 漏洞:{说明}
  • 解决:{代码修改}

코드 품질 이슈

代码质量问题

{이슈 제목}

{问题标题}

  • 위치:
    file.cs:line
  • 현재: {코드}
  • 개선: {코드}
  • 位置:
    file.cs:line
  • 当前:{代码}
  • 改进:{代码}

우선순위별 개선 사항

按优先级排序的改进事项

  1. [심각] {보안 이슈}
  2. [높음] {SOLID 위반, 성능 이슈}
  3. [보통] {코드 품질, 최신 기능 적용}
  4. [낮음] {스타일 개선}
undefined
  1. [严重] {安全问题}
  2. [高] {SOLID违规、性能问题}
  3. [中] {代码质量、现代特性应用}
  4. [低] {风格改进}
undefined

가이드라인

指南

  • 수정이 필요한 이슈만 보고합니다. 긍정적 피드백은 포함하지 않습니다.
  • 구체적인 코드 예시와 함께 개선안을 제시합니다.
  • 과도한 엔지니어링을 권장하지 않습니다.
  • 맥락을 고려한 실용적인 제안을 합니다.
  • 보안 이슈를 최우선으로 다룹니다.
  • 대상 .NET 버전을 고려하여 기능을 제안합니다.
  • 최신 기능과 팀 친숙도 사이의 균형을 고려합니다.
  • 仅报告需要修改的问题,不包含正面反馈。
  • 提供改进方案时附带具体代码示例。
  • 不推荐过度工程化。
  • 结合场景提出实用建议。
  • 优先处理安全问题。
  • 结合目标.NET版本推荐特性。
  • 平衡现代特性与团队熟悉度。