< C++ >
int n;
cin >> n;
cout << "값 : " << n << endl;
C++에서는 cin으로 입력을 받고 cout으로 출력을 하게 된다.
< C# >
int n;
n = int.Parse(Console.Readline());
Console.WriteLine("값 : " + n);
Console.WriteLine($"값 : {n}");
입력 : C#에서는 Console.Readline()으로 문자열을 입력 받아서 다른 형태로 변환을 해주어야 한다.
그렇기 때문에 int형으로 저장하기 위해서는 int.Parse()를 쓰는 것이다.
출력 : C#에서는 Console.WriteLine()으로 사용할 수 있고 괄호 안에는 + 로 연결해서 출력을 할 수 있으며,
앞에 $ 를 붙여주게 된다면 중괄호 안에 변수를 넣어 변수를 출력할 수 있다.
< C++ >
C++에서의 배열은 아래처럼 만들 수 있다.
int arr[5] = {1, 2 ,3 ,4, 5};
일반적으로 C++에서 배열은 한번 처음 정해진 크기가 생겨나면 크기 조절이 불가능하다.
< C# >
int[] arr = {1, 2, 3, 4, 5};
int[] arr2 = new int[5];
C#에서 배열을 만들게 되면 이렇게 만들 수 있다.
배열의 진화 형태라고 할 수 있다.
배열은 크기가 조절이 불가능 하지만 리스트는 조절이 가능하다.
일반적으로 C++에서는 리스트 라고 하면 LinkedList가 일반적이고 C#에서의 List는 다른 개념이다.
List<int> list = new List<int>();
리스트를 위와 같이 만들 수 있다.
배열처럼 1 ~ 5까지 리스트에 넣는다고 하면
list.add(1);
list.add(2);
list.add(3);
list.add(4);
list.add(5);
이렇게 넣어주면 된다
Queue q = new Queue();
위 코드 처럼 사용할 수 있다.
q.Enqueue(1); //큐에 1을 넣는다.
q.Dequeue(); //제일 먼저 넣은 값을 빼낸다.
q.Peek(); //제일 처음 넣은 값을 볼 수 있다.
q.Clear(); //큐를 비운다.
q.Count; //큐의 크기를 확인한다.
//Queue
Queue q = new Queue();
//큐에 1 ~ 5까지 넣기
for (int i = 0; i < 5; i++)
{
q.Enqueue(i);
}
//Peek값 확인
Console.WriteLine($"Peek : {q.Peek()}");
//큐 전체 출력
foreach (object i in q)
{
Console.WriteLine(i);
}
//큐 크기 확인
Console.WriteLine($"Count : {q.Count}");
//큐 안에 값 빼내주기
for (int i = 0; i < 5; i++)
{
q.Dequeue();
}
//빼낸 후 큐 크기가 변화했는지 확인
Console.WriteLine($"Count : {q.Count}");
Stack st = new Stack();
위 코드처럼 사용할 수 있다.
st.Push(1); //스택에 1을 넣는다.
st.Pop(); //스택에 마지막에 넣은 값을 빼낸다.
st.Peek(); //스택에 마지막에 넣은 값을 본다.
st.count; //스택의 크기를 확인한다.
Stack st = new Stack();
//스택에 1 ~ 5까지 넣어주기
for (int i = 0; i < 5; i++)
{
st.Push(i);
}
//Peek값 확인
Console.WriteLine($"Peek : {st.Peek()}");
//스택 전체 출력
foreach (object i in st)
{
Console.WriteLine(i);
}
//스택 크기 확인
Console.WriteLine($"Count : {st.Count}");
//스택 안에 값 빼내주기
for (int i = 0; i < 5; i++)
{
st.Pop();
}
//빼낸 후 스택 크기가 변화 했는지 확인
Console.WriteLine($"Count : {st.Count}");
class Test()
{
int i;
float f;
double d;
bool b;
string str = "";
}
클래스 하나에 여러 변수가 존재할 때,
static void main()
{
Test t = new Test();
t.i = int.Parse(Console.ReadLine());
Console.WriteLine(t.i);
}
출력하게 된다면 출력이 가능할까? NO
왜냐하면 Test안에 있는 변수는 기본적으로 Private상태다.
변수에 상태에는 public 과 private 상태가 있는데 변수 앞에 public을 쓰지 않으면 자동으로 private상태가 된다.
public은 “다른 함수에서 사용해도 된다” 라는 의미이고, private는 “class 내에서만 사용해라”의 의미이기 때문에 에러가 생긴다.
출력이 되도록 수정을 하려면
class Test()
{
public int i; //public 붙임!
float f;
double d;
bool b;
string str = "";
}
만들어진 자료구조 내부에 있는 값을 전부 확인하는 것.
foreach(int i in list) //stack이나 queue 다 가능
{
Console.WriteLine(i);
}
조심해야할 점.
foreach(int i in list)
{
Console.WriteLine(i);
list.RemoveAt(i); // 이런거 절대로 쓰면 안됌.
}
처음부터 List 내부의 값을 확인하기 때문에 지우게 되면 에러가 남.
C++에서는 메모리 할당을 하면 반드시 해제가 필수적이다.
하지만 C#에서는 알아서 해제를 해주기 때문에 필수가 아니다.
C#은 메모리 해제를 알아서 해주는데 그것이 GC( 가비지 컬렉터 )이다.
가비지컬렉터에는 두가지 버전이 존재하는데
지금 현재 최신버전과 유니티에서 사용하는 버전이 있다.
먼저 두 가비지 컬렉터가 공통적으로 작동하는 2가지를 알아보자.
마크는 현재 사용중이지 않은 메모리를 찾는 작업이다.
스윕은 마킹한 메모리를 해제하는 작업이다.
마킹, 스윕이 일어나는 과정에서 지우면서 정렬도 해주고, 세대별로 정리가 된다.
마킹, 스윕은 일어나지만 세대별로 정리가 되지않고, 정렬 또한 해주지않는다.
그렇기에 유니티로 작업을 하게 된다면 최대한 가비지컬렉터를 작동시키지 않도록 작업하는 것이 좋다.