• 게임
  • 산업 분야
  • 리소스
  • 커뮤니티
  • 학습
  • 문의하기
개발
Unity 엔진
모든 플랫폼 위한 2D 및 3D 게임 제작
다운로드플랜 및 가격
수익화
인앱 결제/인앱 구매(IAP)
스토어 간 IAP 검색 및 관리
Mediation
수익 / 매출 극대화 및 수익화 / 수익 창출 최적화(하다)
Ad Quality
앱 유저. '광고 지면'의 타겟 고객 경험 보호
탭조이
장기적인 유저. '광고 지면'의 타겟 고객 충성도 구축
모든 수익화 / 수익 창출 제품
사용자 확보
사용자 확보
모바일 사용자를 검색하고 Acquire
Unity 벡터 AI
적합한 게임으로 플레이어 연결
Aura 디바이스 단위 광고
최대 참여/인게이지먼트 시 기기 내 사용자 도달률
모든 성장 제품
활용 부문
3D 협업
실시간 3D 프로젝트 빌드 및 검토
몰입형 교육
몰입도 높은 환경 제작
고객 경험
인터랙티브 3D 경험 제작
모든 업계 솔루션
산업 분야
제조업
운영 우수성 확보
리테일
상점 경험을 온라인 경험으로 전환
자동차
혁신 및 차량 내 경험 향상
전체 산업 분야
테크니컬 라이브러리
기술 자료
공식 유저. '광고 지면'의 타겟 고객 매뉴얼 및 API 레퍼런스
개발자 툴
릴리스 버전 및 이슈 트래커
로드맵
예정된 기능 검토
용어집
기술 용어 라이브러리
분석 자료
활용 사례
실제 성공 사례
베스트 프랙티스 가이드
전문가 팁
모든 리소스
새로운 기능
블로그
업데이트, 정보, 기술 팁
뉴스
뉴스, 스토리, 보도 센터
커뮤니티 허브
토론
토론, 문제 해결, 소통
이벤트
글로벌 이벤트 및 현지 이벤트
커뮤니티 사례
Made with Unity
Unity 크리에이터 소개
Livestreams
개발자, 크리에이터, Insider와의 소통
Unity Awards
전 세계 Unity 크리에이터 축하
모든 레벨 지원
Unity Learn
무료로 Unity 기술 마스터
전문 교육
Unity 강사와 함께 팀의 역량을 강화하세요
Unity 처음 사용하시나요
시작하기
학습 시작하기
Unity 필수 학습 길잡이
Unity 사용이 처음이신가요? 여정 시작하기
사용법 가이드
실용적인 팁 및 베스트 프랙티스
교육
학생용
커리어 시작하기
교육 담당자 대상 교육
교육 효율 극대화
교육 라이선스
교육 기관에 Unity 강력한 기능 도입
자격증
Unity 숙련도를 입증하세요
지원 옵션
도움 받기
성공을 위한 Unity
Success 플랜
전문가 지원을 통해 더 빠르게 목표 도달률 달성
FAQ
일반적인 질문에 대한 답변
문의하기
유니티 팀과 소통하기
플랜 및 가격
언어
  • English
  • Deutsch
  • 日本語
  • Français
  • Português
  • 中文
  • Español
  • Русский
  • 한국어
소셜
통화
구매
  • 제품
  • 유니티 애즈
  • 구독
  • Unity 에셋 스토어
  • 리셀러
교육
  • 학생
  • 교육 담당자
  • 기관
  • 인증 시험
  • 레벨업 아카데미
  • Skills Development Program
다운로드
  • Unity Hub
  • 다운로드 아카이브
  • 베타 프로그램
Unity Labs
  • Labs
  • Publications
리소스
  • Unity 학습 플랫폼
  • 커뮤니티
  • 기술 자료
  • Unity QA
  • FAQ
  • Services Status
  • 활용 사례
  • Made with Unity
Unity
  • 회사
  • 뉴스레터
  • 블로그
  • 이벤트
  • 채용 정보
  • 도움말
  • Press
  • 파트너
  • 투자자
  • 어필리에이트
  • 보안
  • 소셜 임팩트
  • Inclusion & Diversity
  • 문의하기
Copyright © 2025 Unity Technologies
  • 법적 고지 사항
  • 개인정보처리방침
  • 쿠키
  • 개인정보 판매 또는 공유 금지

'Unity', Unity 로고 및 기타 Unity 상표는 미국 및 기타 국가에서 유니티 테크놀로지스 또는 계열사의 상표 또는 등록상표입니다(여기에서 자세한 정보 확인). 기타 명칭 또는 브랜드는 해당 소유자의 상표입니다.

Hero background image

Unity의 C# 스크립팅에 대한 명명 및 코드 스타일 팁

이 웹페이지는 이해를 돕기 위해 기계 번역으로 제공됩니다. 기계 번역으로 제공되는 콘텐츠에 대한 정확도나 신뢰도는 보장되지 않습니다. 번역된 콘텐츠의 정확도에 관해 의문이 있는 경우 웹페이지의 공식 영어 원문을 참고해 주시기 바랍니다.
여기를 클릭하세요.

C# 코드를 포맷하는 올바른 방법은 없을 수 있지만, 팀 전체에서 일관된 스타일에 동의하면 더 깔끔하고 읽기 쉽고 확장 가능한 코드베이스를 만들 수 있습니다. 체계적으로 정리된 스타일 가이드를 사용하면 불일치를 줄여 일관된 최종 결과물을 만들 수 있습니다. 이 페이지에서는 스타일 가이드를 만들 때 명명 규칙과 코드 포맷을 고려해야 하는 팁과 주요 고려 사항을 확인할 수 있습니다.

참고: 여기에서 제공하는 권장 사항은 Microsoft에서 제공한 내용을 기반으로 합니다. 최고의 코드 스타일 가이드는 팀의 요구 사항에 가장 적합한 규칙입니다.

코드 스타일 가이드 예시를 찾을 수 있습니다 여기 또는 전체 전자책을 다운로드, C# 스타일 가이드 만들기: 확장 가능한 깔끔한 코드를 작성하십시오.

  • 캐시 용어
  • 필드 및 변수
  • 열거형
  • 클래스 및 인터페이스
  • 방법
  • 이벤트 및 이벤트 핸들러
  • 동사 사용
  • System.Action 사용
  • ‘On’이 있는 메서드 접두사
  • 주체 이름 및 밑줄이 있는 접두사
  • 주의해서 EventArgs 사용
  • 네임스페이스
  • 접두사

캐시 용어

C#은 공백 문자를 사용하여 식별자를 분리하기 때문에 이름에 공백으로 변수를 정의할 수 없습니다. 캐싱 방식을 사용하면 소스 코드에서 복합 이름이나 구문을 사용해야 하는 문제를 완화할 수 있습니다.

다음은 잘 알려진 몇 가지 명명 규칙과 캐시 규칙입니다.

낙타 표기법

카멜 캡(camel caps)이라도 불리는 카멜 케이스(camel case)는 공백이나 점수 없이 문장을 쓰는 방식으로 단일 대문자로 단어를 분리합니다. 첫 번째 문자는 소문자입니다.

보통 로컬 변수와 메서드 파라미터는 카멜 표기법에 표시됩니다. 예를 들면 다음과 같습니다.

examplePlayerController
maxHealthPoints
endOfFile

파스칼 표기법

파스칼 표기법은 카멜 표기법의 배리에이션으로 초기 문자가 대문자로 표시됩니다. Unity 개발에서 클래스 및 메서드 이름에 이 값을 사용합니다. public 필드에도 파스칼 표기법을 사용할 수 있습니다. 예를 들면 다음과 같습니다.

ExamplePlayerController
MaxHealthPoints
EndOfFile

뱀 표기법

이 경우 단어 사이의 공백은 밑줄 문자로 대체됩니다. 예를 들면 다음과 같습니다.

example_player_controller
max_health_points
end_of_file

케밥 가방

여기서 단어 사이의 공백은 대시로 대체됩니다. 그러면 단어가 대시 문자로 표시됩니다. 예를 들면 다음과 같습니다.

example-player-controller
최대 체력 점수
end-of-file

케밥 표기법의 문제점은 많은 프로그래밍 언어에서 대시를 마이너스 기호로 사용한다는 점입니다. 또한 대시로 구분된 숫자를 일정 날짜로 해석하는 언어도 있습니다.

헝가리어 표기법

변수 또는 함수 이름은 변수의 의도나 유형을 나타내는 경우가 많습니다. 예를 들면 다음과 같습니다.

int iCounter
StrPlayerName 문자열

헝가리어 표기법은 오래된 규칙이며 Unity 개발에서 일반적으로 사용되지 않습니다.

필드 및 변수 테이블

필드 및 변수

변수와 필드의 경우 다음 규칙을 고려하십시오.

  • 변수 이름에 명사를 사용합니다. 변수 이름은 특정한 사물이나 상태를 나타내므로 명확하고 구체적이어야 합니다. 변수가 형식 부울인 경우를 제외하고 이름을 지정할 때 명사를 사용합니다(아래 참조).
  • 부울 접두사를 동사로 설정합니다. 이 변수는 true 값 또는 false 값을 나타냅니다. 다음과 같은 질문에 대한 답변이 되는 경우가 많습니다. 플레이어가 달리고 있나요? 게임이 끝났나요?
  • 동사를 접두사로 사용하면 의미가 더 명확해집니다. 이는 isDead, isWalking, hasDamageMultiplier 등 설명이나 조건과 함께 사용되는 경우가 많습니다.
  • 유의미한 이름을 사용하세요. 수학적이 아니라면 다음과 같은 약어를 사용하지 마세요. 변수 이름은 변수의 목적을 나타냅니다. 발음하고 검색하기 쉬운 이름을 선택하세요.
  • 단일 문자 변수는 루프와 수식에 적합하지만 다른 상황에서는 약어를 사용하지 않습니다. 명확성은 몇 개의 연사를 생략하지 않고 시간을 절약하는 것보다 더 중요합니다.
  • 빠른 프로토타이핑을 위해서는 일시적으로 짧은 '단점' 이름을 사용한 다음 나중에 더 의미 있는 이름으로 리팩터링할 수 있습니다.
  • public 필드에는 파스칼 표기법을 사용하고 private 변수에는 카멜 표기법을 사용합니다. 공용 필드 대신 공용 '게터'가 있는 프로퍼티를 사용하세요(이전 및 후반 섹션 참조).
  • 지나치게 많은 접두사나 특수 인코딩 사용 지양: private 멤버 변수에 밑줄(_)을 접두사로 사용하여 로컬 변수와 차별화할 수 있습니다.
  • 또는 이 키워드를 사용하여 컨텍스트에서 멤버 변수와 로컬 변수를 구분하고 접두사를 건너뛰면 됩니다. 일반적으로 public 필드와 프로퍼티에는 접두사가 없습니다.
  • 일부 스타일 가이드에서는 private 멤버 변수(m_), 상수(k_), 정적 변수(s_)에 접두사를 사용하므로 이름을 통해 변수에 대해 한눈에 더 자세히 알 수 있습니다.
  • 많은 개발자가 이러한 요소를 피하고 에디터를 사용합니다. 그러나 일부 IDE는 하이라이트 및 컬러 코딩을 지원하지 않으며, 일부 툴은 풍부한 컨텍스트를 전혀 표시할 수 없습니다. 팀원들과 함께 접두사를 적용할지 여부를 결정할 때 이를 고려하세요.
  • 액세스 레벨 한정자를 일관되게 지정하거나 생략합니다. 액세스 한정자를 제외하면 컴파일러는 액세스 수준이 private이어야 한다고 가정합니다. 이 방식은 원활하게 작동하지만 기본 액세스 한정자를 생략하는 방식은 일관되게 유지해야 합니다.
  • 서브 클래스에서 나중에 사용하려면 protected를 사용해야 합니다.

열거형

열거형은 이름이 지정된 상수 세트로 정의된 특수 값 유형입니다. 기본적으로 상수는 정수이며 0부터 집계됩니다.

열거형 이름과 값에는 파스칼 표기법을 사용합니다. 클래스 외부에 public 열거형을 배치하여 글로벌로 만들 수 있습니다. 열거형 이름에는 단수 명사를 사용합니다.

참고: System.FlagsAttribute로 표시된 비트 열거형은 이 규칙의 예외입니다. 두 개 이상의 유형을 나타내므로 일반적으로 이러한 유형을 복수화합니다.

클래스 및 인터페이스

클래스와 인터페이스의 이름을 지정할 때는 다음 표준 규칙을 따르세요.

클래스 이름에 파스칼 표기법 명사를 사용합니다: 그러면 수업이 체계적으로 유지됩니다.

파일에 MonoBehaviour가 있는 경우 소스 파일 이름이 일치해야 합니다. 파일에 다른 내부 클래스가 있을 수 있지만 파일당 하나의 MonoBehaviour 있어야 합니다.

사각형 인터페이스 이름과 대문자 ‘I’: 해당 기능을 설명하는 형용사를 따르세요.

방법

C#에서는 실행되는 모든 명령이 메서드의 컨텍스트에서 수행됩니다.

메서드는 동작을 수행하므로 다음 규칙을 적용하여 이름을 지정합니다.

이름을 동사로 시작합니다: 필요한 경우 컨텍스트를 추가합니다(예: GetDirection, FindTarget 등).

파라미터에 카멜 케이스 사용: 메서드에 전달되는 파라미터를 로컬 변수로 포맷합니다.

부울을 반환하는 방법은 질문을해야합니다. 부울 변수와 마찬가지로 true-false 조건을 반환하는 경우 메서드를 동사로 접두사로 사용합니다. 이렇게 하면 질문의 형태로 표현됩니다(예: IsGameOver, HasStartedTurn).

참고: Unity 개발에서는 ‘역동성’과 ‘방법’이라는 용어가 자주 사용됩니다. 하지만 C#에서 함수를 클래스에 통합하지 않고도 함수를 작성할 수 없기 때문에 '메서드'라는 용어가 적절합니다.

이벤트 및 이벤트 핸들러

C#의 이벤트는 관찰자 패턴을 구현합니다. 이 소프트웨어 설계 패턴은 주체(또는 퍼블리셔)라는 하나의 객체가 관찰자(또는 구독자)라는 종속된 객체 목록을 알릴 수 있는 관계를 정의합니다. 따라서 주체는 관련 오브젝트를 긴밀하게 결합하지 않고도 상태 변경 사항을 관찰자에게 방송할 수 있습니다.

주체와 관찰자의 이벤트와 관련 메서드에 여러 명명 체계가 존재합니다. 다음 섹션에서 실습해 보세요.

동사 사용

이벤트의 이름을 동사 구문으로 지정합니다. 상태 변경을 정확하게 전달하는 툴을 선택하세요.

현재 또는 지난 참여를 사용하여 이벤트 상태를 이전 또는 이후 상태로 나타냅니다. 예를 들어 문을 열기 전에 이벤트에 대해 'OpeningDoor'를 지정하고 이후 이벤트에 대해 'DoorOpened'를 지정합니다.

System.Action 사용

이벤트에 System.Action 델리게이트를 사용합니다. 대부분의 경우, Action 델리게이트는 게임플레이에 필요한 이벤트를 처리할 수 있습니다.

반환 유형인 void를 사용하면 최대 16개의 입력 파라미터를 서로 다른 유형으로 전달할 수 있습니다. 사전 정의된 델리게이트를 사용하면 코드를 절약할 수 있습니다.

참고: 또한 EventHandler 또는 EventHandler 델리게이트를 사용할 수도 있습니다. 팀원 모두가 이벤트를 어떻게 구현해야 하는지 합의합니다.

‘On’이 있는 메서드 접두사

주체의 이벤트 발생 메서드를 ‘On’으로 접두사로 설정합니다. 이벤트를 호출하는 주체는 보통 ‘On’ 메서드(예: ‘OnOpeningDoor’ 또는 ‘OnDoorOpened)’를 접두사로 사용합니다.

주체 이름 및 밑줄이 있는 접두사

관찰자에서 이벤트 처리 메서드를 주체의 이름과 밑줄(_)으로 접두사로 지정합니다. 주체의 이름이 ‘GameEvents’인 경우 관찰자는 ‘GameEvents_OpeningDoor’ 또는 ‘GameEvents_DoorOpened’이라는 메서드를 사용할 수 있습니다.

팀의 일관된 명명 방식을 결정하고 해당 규칙을 스타일 가이드에 적용하세요.

참고: 이 '이벤트 처리 방법'은 EventHandler 델리게이트와 혼동할 필요는 없습니다.

주의해서 EventArgs 사용

필요한 경우에만 커스텀 EventArgs를 만듭니다. 커스텀 데이터를 이벤트에 전달해야 하는 경우, System.EventArgs에서 상속하거나 커스텀 구조체에서 새 유형의 EventArgs를 생성합니다.

네임스페이스

다른 네임스페이스 또는 글로벌 네임스페이스에서 이미 존재하는 클래스, 인터페이스, 열거형 등과 충돌하지 않도록 네임스페이스를 사용합니다. 네임스페이스는 Unity Asset Store 또는 프로젝트의 최종 버전에 포함되지 않는 다른 테스트 씬의 타사 에셋과의 충돌을 방지할 수도 있습니다.

네임스페이스를 적용하는 경우:

특별한 기호나 밑줄 없이 파스칼 표기법을 사용하세요.

네임스페이스 접두사를 반복적으로 입력하지 않도록 파일 상단에 사용 지시문을 추가합니다.

하위 네임스페이스도 생성합니다. dot(.) 연산자를 사용하여 이름 수준을 구분하여 스크립트를 계층적 카테고리로 구성할 수 있습니다. 예를 들어 ‘MyApplication.GameFlow’, ‘MyApplication.AI’, ‘MyApplication.UI’ 등을 생성하여 게임의 다양한 논리적 컴포넌트를 저장할 수 있습니다.

접두사

코드에서는 이 클래스를 각각 Enemy.Controller1 및 Enemy.Controller2라고 합니다. 접두사를 입력하는 작업을 저장하려면 사용 라인을 추가합니다(예: 적 사용;).

컴파일러가 클래스 이름 Controller1 및 Controller2을 찾으면 Enemy.Controller1 및 Enemy.Controller2를 의미한다는 것을 이해합니다.

스크립트에서 다른 네임스페이스에서 같은 이름의 클래스를 참조해야 하는 경우, 접두사를 사용하여 클래스를 구분합니다. 인스턴스에서 플레이어 네임스페이스에 Controller1 및 Controller2 클래스가 있는 경우 충돌을 방지하기 위해 Player.Controller1 와 Player.Controller2를 쓰면 됩니다. 그러지 않으면 컴파일러에서 오류를 리포트.

코드 스타일 팁 더 보기

일반 포맷에 대한 자세한 내용은 여기 또는 전체 전자책을 확인하세요. 코드 스타일 가이드 예시도 살펴볼 수 있습니다.