[공부] 261022 - 유니티 및 C#
쿠키런 게임 과제

https://github.com/makerz9/CookieRun.git
총평
-경험은 있는거같으나 코딩 구조 공부 더 필요
-오류가 있을 가능성이 있거나 중복 기능이많음
-안쓰는 코드는 주석처리해도 그냥 지우기 추천
-코드가 어떻게 동작하는지 더 자세히 알 필요 있음
C#
| 구분 | 복사되는 것 | 한쪽을 바꾸면? |
|---|---|---|
struct (값 복사) | 값 자체 | 다른 쪽은 안 바뀜 |
class (참조 복사) | 객체를 가리키는 참조 | 같은 객체의 내용을 바꾸면 다른 쪽에서도 바뀐 걸 볼 수 있음 |
- 값 복사 = 각각 따로 가진다 →
struct - 참조 복사 = 같은 객체를 가리킬 수 있다 →
class
값 타입과 참조 타입
변수가 담고 있는 것
C#의 모든 타입은 둘 중 하나임.
| 분류 | 변수가 담는 것 | 예 |
|---|---|---|
| 값 타입 | 내용 자체 | int, double, bool, char, decimal, 구조체, 열거형 |
| 참조 타입 | 내용이 놓인 자리 | 클래스, 배열, string, 인터페이스 |
즉, class와 struct의 차이를 이해할 때는 코드가 어디에 작성되어 있는지가 아니라, 지금 대입하는 변수의 타입이 무엇인지를 봐야 해.
https://www.notion.so/4016a544837b80efa54ddee5df914117?source=copy_link
C# 기초 정리 — 값 형식과 참조 형식
1. 값 형식(Value Type) - struct
값 형식은 변수에 값 자체가 저장되는 형식이다.
대표적인 예시:
intfloatboolstruct로 선언한 사용자 정의 형식
예제
struct Name
{
public int a;
}
Name n1 = new Name();
n1.a = 10;
Name n2 = n1;
n2.a = 99;
Console.WriteLine(n1.a);
Console.WriteLine(n2.a);
실행 결과
10
99
실행 과정
n1을 생성하고n1.a에10을 저장한다.Name n2 = n1;에서n1의 구조체 값이n2로 복사된다.n2.a = 99;로n2의 값을 변경한다.n2는 복사된 별개의 값을 가지고 있으므로n1.a에는 영향이 없다.
핵심: 구조체를 대입하면 값이 복사된다.
2. 참조 형식(Reference Type) -class
참조 형식은 객체 자체가 아니라 객체를 가리키는 참조를 변수에 저장한다.
대표적인 예시:
class로 선언한 사용자 정의 형식string- 배열
예제
class Name
{
public int a;
}
Name n1 = new Name();
n1.a = 10;
Name n2 = n1;
n2.a = 99;
Console.WriteLine(n1.a);
Console.WriteLine(n2.a);
실행 결과
99
99
실행 과정
new Name()으로 객체를 생성한다.n1이 해당 객체를 가리킨다.Name n2 = n1;에서 객체가 복사되는 것이 아니라 참조가 복사된다.- 따라서
n1과n2는 같은 객체를 가리킨다. n2.a = 99;로 객체의 필드를 변경하면n1.a로 접근해도 변경된 값인99가 나온다.
핵심: 클래스 변수를 대입하면 참조가 복사되며, 두 변수가 같은 객체를 가리킬 수 있다.
3. class와 struct 비교
| 구분 | struct | class |
|---|---|---|
| 형식 | 값 형식 | 참조 형식 |
| 대입할 때 | 값이 복사됨 | 참조가 복사됨 |
위 예제의 n1.a | 10 | 99 |
위 예제의 n2.a | 99 | 99 |
가장 중요한 점
a는 두 예제 모두 int 필드다. a 자체의 형식은 바뀌지 않는다.
차이는 Name이라는 사용자 정의 형식을 struct로 선언했는지, class로 선언했는지에 있다.
struct Name→Name은 값 형식class Name→Name은 참조 형식
즉, class와 struct의 차이는 중요하다. 선언 방식에 따라 Name 변수의 대입 동작이 달라진다.
4. 코드에서 헷갈리지 말아야 할 부분
Name n2 = n1;
이 한 줄의 의미는 Name이 어떻게 선언되었는지에 따라 달라진다.
struct Name이면:n1의 값이n2에 복사된다.class Name이면:n1이 가리키는 객체의 참조가n2에 복사된다.
따라서 이 코드만 보고 결과를 판단하지 말고, 먼저 Name의 선언을 확인해야 한다.
n2.a = 99;
이 코드는 n2를 통해 접근한 a의 값을 99로 변경한다.
- 구조체라면 복사된
n2의 필드만 변경된다. - 클래스라면
n1과n2가 같은 객체를 가리키고 있을 경우, 두 변수로 접근했을 때 모두 변경된 값이 보인다.
5. 오늘의 핵심 요약
int는 값 형식이다.struct는 값 형식이다.class는 참조 형식이다.- 구조체 대입은 값을 복사한다.
- 클래스 대입은 참조를 복사한다.
- 클래스 변수 두 개가 같은 객체를 가리키면, 한쪽에서 객체의 필드를 바꿨을 때 다른 쪽에서도 변경된 값이 보인다.
- 결과를 판단할 때는 변수의 선언과 사용자 정의 형식의 선언을 함께 확인한다.
확인 문제
struct Name을 class Name으로 바꾸면 위 예제의 출력 결과는 어떻게 달라질까?
struct Name:10,99class Name:99,99
struct → class 라면 참조 타입이 되겠지 그러면 99, 99?



