[C#] 활용 기초
1) 기본 출력
- 메인함수는 프로젝트에서 유일하게 한 개 존재
- 참고) 유니티 프로젝트는 메인함수가 보여지지 않으며 어딘가에 존재
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello World");
}
}
2) 언어별 프로그램 파일 확장자에 의한 구분
- C : 헤더파일(.h), 언어 파일(.c)
- C++ : 헤더파일(.h), 언어 파일(.cpp)
- C# : 언어 파일(.cs)
클래스 기반의 파일이 한개만 존재 (헤더가 없음)
3) namespace
- 성격이나 하는 일이 비슷한 클래스, 구조체, 인터페이스를 하나의 이름 아래 묶어 놓았다.
- 다른 클래스에서 사용하려면 using 이라는 지시문 사용한다.
- namespace로 감싸지 않은 class는 프로젝트 전역에서 사용할 수 있다.
- class는 기본적으로 어느 곳이나 다 포함되어 있지만, namespace를 사용하면 이를 조절할 수 있다.
- 원하는 코드에만 class를 불러올 수 있다는 측면에서 효율적이라 볼 수 있다.
namespace HelloWorld_CSharp
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello World");
}
}
}
4) 값 형식의 변수
- 단순형식
- 부호있는 정수 : sbyte, short, int, long
- 부호 없는 정수 : byte, ushort, uint, ulong
- 문자 : char
- 실수(부동 소수점) : float, double
- 고정밀 10진수 부동 소수점 : decimal (실수)
- 부울 : bool
- 구조체 : struct
- 열거체 : enum
- 참조형식 : new 를 사용하여 메모리 할당
- 클래스 형식 : class
- 인터페이스 형식 : interface
- 배열 형식 : int[]
- 대리자 형식 : delegate
- 문자열 형식 : string
5) 변수 이름 명명 규칙
- 변수
- 첫문자 소문자
- 캐멀 케이스
- ex) int classLevel;
- 구조체
- 첫문자 대문자
- 캐멀 케이스
- ex) public struct Data
- 열거체
- 모두 대문자
- 클래스
- 첫문자 대문자
- 캐멀 케이스
// struct 예시
public struct Data {
public byte age;
public float hp;
public string name;
}
// enum 예시
// 정수를 직접 대입하지 않으면 0부터 시작하여 1씩 증가
public enum eCOLOR
{
NONE = -1,
RED = 1,
GREEN,
BLUE
}
6) 프로퍼티
- Get, Set함수를 단순화 시킨 변수의 기능
- Get,Set함수를 사용하지 않고 변수형식과 동일하게 사용할 수 있는 get,set 을 제공
- 함수호출을 줄일 수 있음
private ushort index;
public ushort INDEX
{
get { return index; }
set { index = value; }
}
private string name;
// NAME변수는 get만 포함하므로 name변수를 읽어 올 수만 있다.
public string NAME
{
get { return name; }
}
// 변수와 프로퍼티를 하나로 사용
public float dex { get; set; }
public float Intl { get; set; }
7) 접근한정자
- public
- 외부로 모두 공개
- 상속 또한 모두에게 공개
- private
- 외부로 비공개
- 상속시 자식에게 물려주지 않음
- protected
- 외부로 비공개
- 상속시 자식에게 물려줌
- internal
- 동일한 어셈블리 파일내에서 액세스
8) 클래스
- 클래스형 변수를 객체(인스턴스)라고 표현한다.
- 참조타입임으로 new를 통해 메모리 할당을 받아야 사용할 수 있다.
- 힙 메모리 영역에 저장된다.
- this
- 자기 자신을 가리킴
- 자신의 클래스에서는 생략하여 사용
- 변수의 구분이 모호한 상황이라면 this를 사용
public Monster(string _name, float _def)
{
this.name = _name;
this.def = _def;
}
9) 생성자와 소멸자
- 생성자와 소멸자는 생략할 수 있음
- 상속관계에서 생성자와 소멸자 호출 순서
- 자식클래스를 생성하면 부모클래스의 생성자가 먼저 호출되고 자식클래스의 생성자가 나중에 호출된다.
- 소멸 순서는 자식클래스가 먼저 소멸되고 부모클래스가 나중에 소멸된다
- 생성자
- 클래스의 인스턴스가 생성 될 때 한번 호출
- 클래스 이름의 함수 형태와 유사
- 매개변수를 전달 할 수 있음
- 유니티기반 에서는 생성자와 소멸자를 이용하기 보다 유니티 이벤트 함수를 사용한다.
- 소멸자
- 클래스의 인스턴스가 메모리에서 소멸 될 때 한번 호출
// 생성자
public Monster() {}
public Monster(string name) {}
// 소멸자
~Monster() {}
10) 상속
- 부모 클래스로 부터 데이터와 함수(기능)을 물려 받는 것
- 부모클래스는 자식 클래스 에게 물려주고 싶은 것을 선택할 수 있음
- 접근한정자에 의해 부모클래스는 상속할 내용을 결정함
- C#은 다중상속을 지원하지 않는다.
- C++은 다중상속을 지원한다.
public class Monster : MonoBehaviour {}
public class QuestMonster : Monster {}
public class A
{
private int count;
public string name;
}
public class B : A
{
public void DisplayData()
{
Console.WriteLine(name); //(O)
Console.WriteLine(count); //(X)
}
}
11) 비트 연산자
- 비트
- 메모리의 최소단위
- 컴퓨터 저장구조의 단위
- 8bit = 1byte
- 비트 연산자
- ‘&’ (and) : 두개의 비트가 모두 1일 때, 1을 반환
- ’|’ (or) : 두개의 비트 중 하나라도 1이면 1을 반환
- ’-‘ (not) : 비트를 반전 (0을 1로, 1을 0으로)
- ’«’ (shift) : 비트를 왼쪽으로 이동
- ’»’ (shift) : 비트를 오른쪽으로 이동
- ’^’ (XOR) : 두개의 비트가 서로 다를 경우 1을 반환
- Convert를 사용하여 비트 값 출력하기
using UnityEngine;
using System;
public class BitExample : MonoBehaviour
{
private void Start()
{
int number = 100;
string bit = Convert.ToString(number, 2);
Debug.Log("100의 비트값 : " + bit);
int convertData = Convert.ToInt32(bit, 2);
Debug.Log("문자비트를 정수로 변환 = " + convertData);
}
}
컬러에서의 비트
- 그래픽 이미지에서 사용되는 컬러
- 한 픽셀을 표현하는데 사용되는 비트를 의미한다.
- 32비트
- Red 8비트, Green 8비트, Blue 8비트, Alpha 8비트
- Alpha는 반투명 값
- R8G8B8A8
- Red 8비트, Green 8비트, Blue 8비트, Alpha 8비트
- 24비트
- R8G8B8
- 16비트
- R4G4B4A4
- 8비트