[C++] 케이디 강좌

2024. 4. 17. 23:09언어 및 엔진/C++

케이디 영상 바로 보기 :  https://www.youtube.com/channel/UC9w-j0OqNzdtOqiYj4lDHmg

 

케이디

유니티에 대한 모든 것. 난이도별 맞춤 튜토리얼 제공. 게임 개발자라면 이 채널에서 도움을 받아가세요. 근황 티스토리 : https://keidy.tistory.com/ 개인 트위터 : https://www.twitter.com/KeidyTwit/ 유료 강좌

www.youtube.com

변수

우클릭 -> Create -> C# Script
첫 글자가 대문자이고 띄어쓰기가 없음
void Start() == init(), 최초 1회만 실행하게 된다.
출력은  print를 사용
class 이름 == 유니티에서 대본 모양의 아이콘 아래 있는 이름과
일치시켜야 한다.

자료형

정수 - int(-20억 ~ +20억, 4바이트), short(-30000 ~ +30000, 
2바이트), long(8바이트), sbyte(-128 ~ +127), byte(0 ~ 255)
실수 - float(f를 꼭 적어라), double, dscimal(끝에 m을 꼭 붙여라)
문자 - string(" "), char(유니코드 가능, ' ', 한 글자만 기억)
자료형이 다른 것들의 계산, 큰 것이 작은 것을 포함해야한다.
int와 float의 계산은 float로
형변환 == cast
int형 = string.ToString하면 문자열로 변환됨
string형 = int.Parse하면 int형으로 변환됨
U = Unsigned(음수 없음)

함수

연산의 결과를 반영하거나 출력함
void 함수이름( ){ }
함수이름의 첫글자는 대문자여야함. 일종의 약속임
괄호 안에 (자료형 입력받을 값)을 적는다, 없으면 공란
괄호 안에 기본값을 함께 주었고, 코드에는 
건드리지 않았을 경우 기본값이 들어간다
반환을 위해 return을 입력해준다
return값이 함수의 결과값이 된다

지정자

변수의 범위지정자, 접근지정자
맨 앞에 있는 것 : 맴버변수, 전역변수
중괄호 안에서만 사용 가능한 것 : 지역변수
지역변수는 같은 지역만 아니라면 같은 변수 이름 
사용 가능함
지역변수와 맴버변수의 이름이 같을 경우에는 지역
변수가 먼저 우선시된다.
함수가 끝난 후에는 지역변수는 소멸된다. ->메모리 
단편화가 생김
private 자료형 변수명
public 자료형 변수명
static 공공의 공유자원임
클래스타입 클래스명 = new 클래스타입();
공유자원으로 준 것(static)은 모든 클래스에 동일한 값
을 주게 됨

연산자

기본연산자 : + - / * % =
c++ 후에 c에 1을 더함(선 코드실행 후 연산)
++c c에 1을 먼저 더함(선 연산 후 코드실행)
증감연산자 : ++ --
관계연산자 : == > < >= <= !=
논리연산자 : && ||
!( )
비트연산자 : 2진법, & ^ ~ | >> <<

조건문

if, else if, else
switch, break
switch(비교할 변수)
{
case 조건(한글 가능 - 
string, char의 경우):
코드~
break;
}
삼항연산자
자료형 변수 = 조건 ? true일경우 : false일 경우;

반복문

for, break, continue(해당 회차를 끝냄, 
다음회차 시작) -> 반복 횟수가 명확할 때 사용
while(조건) -> 조건에 만족하는 동안 계속해서 
실행 -> 반복 횟수가 명확하지 않을 때 사용
do{초기에 실행할 것}while{조건};
foreach(자료형 변수명 in 어떤걸)
{
}-> 어떤걸 변수명 안에 넣을거냐

배열

자료형[] 변수명 = {값...}
비슷한 성격의 변수의 집합체
배열명[인덱스]
배열의 크기 : 배열명.lenght
이지만, 배열의 크기는 1부터 계산을 하므로 
for문에 사용하려면 -1을 해주거나, =를 빼도록 한다.
배열에 값을 추가하는 것은 불가능하지만, 값을 
변경하는 것은 가능함
배열의 크기만 선언하기 : 
자료형[] 배열명 = new 자료형[크기];
크기만 지정해 준 후 값을 나중에 넣어도 된다.
크기 자리에 다른 배열의 크기를 넣어도 가능
한 줄로 늘어져있다 : 1차원 배열
2차원 배열 : 자료형 [ , ] 배열명 = {{값}, {값}};
3차원 배열 : 자료형[ , , ] 배열명 = {{{값}, {값}}, {{값}, {값}}};
3차원 배열은 2차원 배열이 2개인 것

컬렉션

배열과 비슷하지만, 크기가 자유자재
*ArrayList 어레이리스트명 = new ArrayList();
생성도 함께 해줘야 함
변수 추가 : ArrayList.Add(넣을 값);
메소드 라고 함
ArrayList의 크기는 ArrayList.count
변수 제거 : ArrayList.remove(지울 값);
ArrayList.RemoveAt(인덱스);
ArrayList.RemoveRange(시작 인덱스, 몇개를 지울지);
변수 변경 : ArrayList[인덱스] = 바꿀 값;
초기화 : ArrayList.Clear
해당 값이 있나 없나 : ArrayList.Contains(어떤 
값이 있으면 true 없으면 false);
ArrayList.insert(넣을 인덱스, 넣을 값);
*List<자료형> 리스트명 = new List<자료형>();
*HashTable 해쉬테이블명 = new HashTable();
HashTable.Add("키 값", 값);
접근 방법은 키값으로 : HashTable["키 값"];
*Dictionary<키 값 자료형, 벨류 자료형>딕셔너리명 = new ~
*Queue<자료형 넣어도 되고 안 넣어도 됨> 큐 명 = new ~
큐에 있는 값을 쓰려면 꺼내야 함. 참조로는 쓰지 못함.
큐명.Dequeue : 큐에 있는 값을 뺌, 큐를 빼면 인덱스를
하나씩 당김
큐명.Enqueue : 큐에 값을 넣음
큐의 크기 : 큐명.count
선입선출 FIFO
*stack<자료형 넣어도 되고 안 넣어도 됨>스택명 = new ~
스택명.Push : 스택에 넣기
스택명.Pop : 스택에서 빼기
후입선출 LIFO

네임스페이스

using 이름;
namespace 이름
{
}
협업, 대형프로젝트, 외부 라이브러리 때문에. 
클래스 등 이름이 겹칠 경우 명시적으로 사용 가능하다.
이름.클래스명

구조체

그릇 역할만 하기 때문에 값을 직접 대입할 수는 없다
구조체는 구 버전, 클래스는 신 버전
구조체는 상속이 불가능하다
구조체는 선언과 동시에 생성이 된다
구조체는 값 타입 클래스는 주소 타입
클래스에는 주소가 들어있고 그 주소에 가니 값이 
있는 느낌

델리게이트

델리게이트, 이벤트
함수들을 한꺼번에 관리 가능
public deligate void 클래스명(자료형 벨류)
이벤트
public static event 클래스명 이벤트명;
onDisable : 게임이 꺼지면 호출됨

상속

자식클래스명 : 부모클래스명
private, public, protected
재정의(오버라이드) : virtual
가상함수
base(부모클래스를 가리킴).함수명( )
추상함수 : abstract 
부모클래스에서 미완성인 상태로 두고, 
자식클래스에서 반드시 완성시켜야 함(실수로 자식
클래스에서 완성시키지 않을 때를 대비)
미리 토대를 만들어 둠 : 다형성

프로퍼티


중요 변수에 대한 은닉성을 위함
돈 ->set은 private get는 public으로 하는 등
민감한 변수 1개에 2개의 함수가 필요
public 자료형 이름(get{return 변수;} private
set {변수 = value;})
set, get{이 안에 조건을 넣을 수 있음}
public 자료형 이름 {get; set;}
--> 모든곳에서 쓸 수 있게 됨

인덱서

클래스 내에 있는 배열을 간단하게 사용하기 위함
this.클래스명
public 자료형 this[자료형 받을변수]
{
get, set함수(이 안에서는 print가 사용 
불가이므로 Debug.log를 사용하도록 
한다.
}
인덱스가 있으면 인덱서를 사용할 수 있음

인터페이스

추상메서드, 추상클래스 -> 미완성인 상태여야 함
--> 자식클래스에서 완성시켜야 한다.
인터페이스 --> 다중 상속이 가능함
interface 이름(이름 맨 첫 글자는 I(아이)로 시작
한다){ }
뼈대 제공. 오버라이드 없음. 변수를 가질 수 없음.
--> 함수, 프로퍼티, 인덱서, 이벤트만 가능함

형식매개변수 T

어떤 매개변수가 올지 모를 때 사용
함수를 생성할 때 자료형 대신 <형식매개변수(보통 T)>
void 함수명<T>(T 벨류)(이곳에 제한 가능(where)
where T : struct, class등등

람다식

여러개의 함수가 동시에.. -> 델리게이트
무명 메소드 : 함수를 만들지 않고도 델리게이트에 넣을 수 있음
델리게이트명 += deligate () {할 일;}; -> 무명메소드
무명메소드는 반드시 델리게이트를 통해서만 호출 가능
람다식 : 델리게이트명 += () => 할 일

Action 과 Func

델리게이트를 줄여놓은 것
델리게이트에 반환 값이 있으면 Func 없으면 Action
Action은 using System; 필요
Action<자료형1, 자료형2> 델리게이트명;
Func도 using System; 필요
Func<자료형1, 자료형2, 반환형> 델리게이트명;

예외 처리

오류가 나더라도 그 오류가 게임진행에 있어 치명적이지
않도록 
catch(DivideByZeroException 이름(관례적으로 
ie를 사용)
catch(NullReference) ...
() 안에 여러 오류의 형태를 넣으면 됨
finally{이 안에 오류가 뜨든 안 뜨든 맨 마지막에 실행할 것}
throw new Exception -> 일부러 오류를 발생시키는 것

코루틴

여러 함수를 동시에 실행시킴(병렬처리)
yield return new WaitForSeconds(시간);
시간에 따른 실행 시간 지연으로 여러 함수를 동시에 출력을 시킨다
IEnumerator
스톱 코루틴은 정해진 형식이 있다
Start Coroutine(코루틴명);
문자열은 최대 하나만 넘길 수 있음
값이 많다면 그 값을 전부 변수에 담아서 사용할 때 그것만 호출하기
StopAllCoroutine

 

 

'언어 및 엔진 > C++' 카테고리의 다른 글

[C++] Abstract / Interface  (0) 2024.04.18
[C++] 컴파일 작동 순서  (0) 2024.04.18
[C++] Dynamic cast  (0) 2024.04.17
[C++] 업캐스팅 / 다운캐스팅  (0) 2024.04.17
[C++] Virtual Function / Virtual Table  (0) 2024.04.17