클래스와 구조체의 차이
클래스
1. 참조타입이다.
2. 그렇기 때문에 Heap에 생성된다.
3. 상속이 가능하다.
4. 기본 접근 제어자는 Private 이다.
구조체
1. 값타입이다.
2. 그렇기 때문에 Stack에 생성된다.
3. 내부에서 new 연산자를 자동으로 호출하기 때문에 사용자가 할당할 필요 없다.
4. 클래스의 상속이 불가능하다.(인터페이스는 가능하다).
5. 클래스의 상속이 안되기때문에 접근지정자 Protected가 불가능하다.
6. 기본 접근제어자는 Public 이다.
어떨때 무엇을 써야할까?
마소 도큐먼트에 들어가면 간단한 문서가 있다.
- 일반적으로 프레임워크의 대부분을 클래스여야 한다.
아래와 같을때 구조체를 쓰면 좋다.
- 형식의 인스턴스가 작고 일반적으로 수명이 짧거나 다른개체에 일반적으로 포함된경우.
아래와 같은 특성을 전부 가지고 있다면 구조체를 써라
- 기본 형식(int, double 등) 과 유사한 단일 값을 논리적으로 나타냄.
- 인스턴스 크기가 16바이트 미만
- 변경할 수 없는 데이터
- 자주 박싱/언박싱이 일어나지 않아야함
일반적으로는 클래스를 사용하고, 간단한 정말 값 그 자체.. 필요한 자료형들의 묶음이 필요한 경우에 구조체를 쓰면 될것같다.
Stack에 생성하기 때문에 가비지컬렉터에 대한 걱정은 하지 않아도 되지만 Heap에 비해 메모리가 적기 때문에 상황에 맞춰 잘 고려해서 사용하자.
클래스와 구조체 간의 선택 - Framework Design Guidelines | Microsoft Docs
배열과 리스트의 차이
배열
1. 같은 타입의 변수를 여러개 모아놓은 데이터 타입.
2. 메모리 공간이 연속되어있음.
3. 그렇기 때문에 속도가 빠름
4. 크기를 미리 정해두기 때문에 유의 해야함.(10개를 할당하고 5개만 쓰면 낭비)
5. 삽입/ 삭제가 불편함
리스트
1. C#의 배열기반 컬렉션임.. 동적 배열이라 볼 수 있음
2. 메모리 공간이 연속되어있지 않음.
3. 그렇기 때문에 상대적으로 속도가 느림.
4. 크기를 미리 정해두지 않음
5. 삽입/삭제가 용이함
Arraylist
- 어레이 리스트는 써보진않았지만 자료형을 정하지 않아도 되는 리스트임
- C#의 해쉬테이블과 딕셔너리의 관계와 비슷함
- 자료형을 정하지 않기 때문에 박싱/언박싱이 자주 일어남
언제 쓰면 좋을까
크기가 정해져있다면 배열을 쓰는것이 좋지만,
크기가 정해져있지 않고 동적으로 삽입,삭제를 많이 해야할때 리스트를 쓰면 될것같다.
유니티에서 Awake와 Start의 차이
Awake
- 스크립트와 연결된 개체가 인스턴스화 되거나, 로드 되는 순간 호출.
- 게임 시작 전 변수가 게임 상태를 초기화 하기 위해 사용.
- Awake는 단 한번만 호출
- Awake후에 Start가 호출되기 때문에 Awake에서 설정하고 Start내에서 객체간의 정보를 주고받는 식으로 초기화 구문들을 사용해야함.
- Awake는 코루틴으로 사용 불가
- 게임오브젝트가 비활성화되어 있는상황에서는 호출되지 않는다.
- 게임오브젝트가 아닌 스크립트 비활성여부와는 상관없이 호출 된다.
Start
- 스크립트가 활성화 되는 순간, 모든 Update메서드의 최초 호출에 앞서 첫 프레임에 호출
- 단 한번만 호출
- 초기화 시점에 스크립트가 비활성화 되어있다면 호출안됨
- 게임 플레이 도중에 생성된 객체들은 새로 생성된 해당 객체들의 Awake함수가 씬 내부 모든 기존 객체의 Start함수 호출이 완료된 이후에야 호출된다.
- 코루틴으로 사용 가능하다.
OnEnable
- 객체가 활성화 상태가 되면 호출됨.
- 코루틴으로 사용 불가.
명심하자 실행 순서는 Awake - OnEnable - Start 이다.
'프로그래밍 공부 > C# 프로그래밍' 카테고리의 다른 글
[C#] ref 와 out 매개변수 한정자 (0) | 2022.08.24 |
---|---|
[Unity_C#] Switch문 & Switch 식 (0) | 2022.08.21 |
가비지 컬렉터(garbage collector) (0) | 2022.08.08 |
Object 형식과 박싱 & 언박싱 (0) | 2022.08.08 |
[OOP]객체 지향 프로그래밍에 대해 (0) | 2022.07.06 |
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!