C#의 문법
컴퓨터 언어의 문법(규칙)을 Syntax(씬택스)라고 한다.
syn은 '함께'라는 뜻이다.
tax, tact는 '배열하다'라는 뜻이다.
Syntax는 명령문 작성법이라고 할 수 있다.
컴퓨터에게 일을 시키려면 컴퓨터가 알아 들을 수 있도록 명령을 내려야 한다.
이 명령을 대신해 주는 것이 프로그래밍 언어다.
컴퓨터는 계산만 잘하는 부품 상자다.
언젠가는 이걸 뛰어넘어 Skynet 같은 것이 될 수도 있겠지만, 지금까지는 시키는 계산만 잘 하는 수준이다.
프로그래밍 언어는 컴퓨터에게 계산 명령을 내리기 위해 정확하고, 확실하고, 빈틈없는 논리로 만들어져 있다.
사람의 언어는 한 두 글자 틀리거나 잘못 적어도 읽는 사람이 똑똑하므로(?) 이해하고 넘어갈 수 있다.
하지만 프로그래밍 언어는 글자 하나라도 자신의 규칙에 맞지 않게 적으면 '에러'를 남발한다.
이것을 syntax error (씬택스 에러)라고 한다.
이것이 코딩 언어의 문법(명령문 작성법)을 익혀야 하는 이유다.
다행히 비주얼스튜디오 같은 IDE(통합개발환경)은 무엇이 문제인지 즉시 알려주기 때문에 많이 편리해졌다.
또한 구글 등에서 문제를 검색하면 수 많은 전문가, 고수들이 즐비하므로 조금만 고생하면 해결할 수 있는 여건도 마련되어 있다.
나는 C#을 유니티로 게임을 만들기 위한 목적으로 배우기 때문에 공통적인 기본 문법들 외에는 주로 유니티 사용을 기준으로 정리할 것이다.
이후 스크립트는 유니티에서 작성한다.
유니티로 Csharp Learning 이라는 프로젝트를 만든 후 스크립트에 작성했다.
유니티 설치와 기본 사용법은 <유니티로 게임만들기>카테고리에 있는 이전 글 '유니티01' 등을 참고한다.
MonoBehaviour(모노 비헤이비어)
먼저 C#의 문법을 알아보기 위해 유니티로 스크립트를 하나 만들어 보자.
유니티에 Create Empty(빈 (개체) 만들기)로 빈 개체(게임오브젝트)를 만들고 Basic(베이식; 기본)으로 이름을 수정한다.
Ojbect(오브젝트, 개체)라는 이름에서 알 수 있듯이, 유니티에서는 Hierarchy(하이어라키)에 개체(instance(인스턴스)라고도 함)를 간편하게 만들 수 있다.
원래 C# 언어 자체만으로 개체를 만들려면 new 키워드를 사용해야 한다.
Assets(에셋)폴더에 Scripts 폴더를 만들고 그 안에 Basic00 스크립트를 만든다.
Basic00 스크립트를 Basic개체에 Component(컴퍼넌트; 구성요소)로 추가한다.
Basic00스크립트를 더블클릭해서 아래와 같이 편집한다.
위 코드를 저장하고 유니티에서 실행하면 콘솔창에 "Hello Wrold" 라는 문자열이 출력될 것이다.
여기서는 이전 글의 코드와 다르게 MyMethod( )메서드를 new 키워드로 클래스 Instance(인스턴스; 개체)를 생성하지 않고 바로 호출할 수 있다.
그 이유는 클래스명 옆에 붙은 : MonoBehaviour 때문이다.
: MonoBehaviour의 뜻은 'MonoBehaviour 클래스를 상속한다'는 뜻이다.
유니티에서 스크립트를 만들면 위와 같이 MonoBehaviour(모노비해이비어)가 기본값으로 생성된다.
: MonoBehaviour에 대해서는 '유니티 c# 개념정리' 를 참고하고, 상속에 대해서는 나중에 따로 정리하기로 한다.
간단히 정리하면 유니티에서는 클래스가 MonoBehaviour을 상속 받는 상태에서는 클래스 개체 생성을 할 필요가 없다.
유니티는 모든 게임 오브젝트(개체)에 component(컴퍼넌트)로 붙여서 사용하게 만들어져 있다.
C#으로 작성한 스크립트도 게임오브젝트에 컴퍼넌트로 붙여서 사용한다.
그러므로 이미 게임오브젝트라는 개체가 생성되어 있는 것에 붙여서 사용하므로 새 개체를 생성하지 않아도 사용할 수 있도록 이미 준비되어 있는 것이다.
변수 선언과 할당
유니티 Scripts폴더 안에 Basic01 스크립트를 새로 만들고 게임오브젝트 Basic 에 연결한다.
문법: C#은 대문자, 소문자를 구분한다. class와 Class는 같지 않다.
클래스, 메서드, 변수의 이름을 지을 때는 정해진 문법은 없지만 아래 규칙 2가지는 지키는 것이 좋다.
그 외의 경우는 일반적인 표현법을 따르거나 자신의 규칙을 만들면 된다.
1. 클래스와 메서드 이름은 대문자로 시작하고 연결되는 단어의 첫글자를 대문자로 한다.
(MonoBehaviour, GameObject, Start, Update)
2. 변수 이름은 소문자로 시작하고 첫글자는 문자, 밑줄( _ ) , @ 기호만 가능하다.
(myValue, someVariableName, _test3)
7번 줄에 int(정수) 타입의 변수 value(값)를 선언(정의)하고,
이 변수에 5 곱하기 73을 계산해서 저장하라는 코드이다.
이것을 statement (명령문) 라고 한다.
변수 선언은 <타입> < 변수명> 으로 표현한다.
타입에 대해서는 다음 글에서 정리한다.
문법: 명령문이 끝나면 반드시 세미콜론 ( ; ) 을 입력해야 한다.
int value를 '변수를 정의(define)한다' 라고 하고,
= 5 * 73 을 '변수에 할당(assign)한다' 라고 한다.
9번 줄에 print( ) 메서드는 '프린트하라, 출력하라'는 행위를 할 수 있는 함수이다.
C# 콘솔앱을 만들 때 사용한 Console.WriteLine( )과 같은 역할을 한다.
print메서드는 MonoBehaviour 클래스 안에 만들어져 있다.
괄호 안에 변수를 입력하면 메서드에 전달할 수 있다.
그러므로 print(value) 는 변수 'value' 의 값을 출력한다.
출력해보자.
스크립트를 저장한 후 인스펙터에서 Basic00 스크립트는 체크 해제해서 실행하지 않도록 하고,
Basic01 스크립트만 실행되도록 체크한다.
유니티를 실행하면 콘솔창에 다음과 같이 나타날 것이다.
만약 클래스에 여러 메서드가 있을 때 다른 메서드에서도 변수 vaule값을 사용하고 싶으면 아래와 같이 클래스 제일 윗쪽에 위치해야 한다.
어떤 메서드 안에서 선언된 변수를 'local variable (로컬 변수, 지역 변수)' 라고 하고,
클래스 안에서 선언된 변수를 'global variable (글로블 변수, 전역 변수)' 라고 부른다.
문법: 공백은 무시된다.
위와 같이 표현해도 상관 없으며 모두 같은 결과를 나타낸다.
하지만 명령문을 작성할 때는 항상 편안하게 읽을 수 있는, 가독성 좋은 스타일을 유지하는 것이 필수다.
일반적으로 세미콜론 다음에는 엔터키를 쳐서 다음 줄로 내린다.
비주얼 스튜디오에서 위와 같이 value다음에서 엔터키를 치면 자동으로 탭 간격을 벌리고 다음 줄이 만들어진다.
이것은 명령문이 윗줄과 연결되어 계속된다는 표시이며 쉽게 알 수 있도록 간격을 벌인 것이다.
끝.
Wraven...
'취미로 하는 게임코딩_gameCodingAsHobby > 유니티와 C# 개념 정리_Concept Summary' 카테고리의 다른 글
유니티와 C# 개념 정리_006_함수(메서드) (1) | 2021.08.22 |
---|---|
유니티와 C# 개념 정리_005_타입과 초기화 (0) | 2021.08.22 |
유니티와 C# 개념 정리_003_C# 언어의 특징과 기본 구조 (0) | 2021.08.22 |
유니티와 C# 개념 정리_002_MonoBehaviour, Awake, Start , Update, LateUpdate (0) | 2021.06.05 |
유니티와 C# 개념 정리_001_유니티의 특징과 장점 (0) | 2021.05.24 |