#define EXAMPLE_TYPE_ARRAY
#define EXAMPLE_TYPE_STATIC_CLASS
#define EXAMPLE_TYPE_EXTEND_METHOD
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
#region 배열 / 정적 클래스 / 확장 메서드
/*
▶ C# 언어의 배열 특징
List는 권장하지 않음 - 퍼포먼스 저하
단, 가변 길이 배열은 2차원 배열만 지원한다
C++은 다차원을 지원한다.
C++는 4차원이상의 배열부터는 프로그래머가 힘들다
C#은 2차원까지만 지원한다.
왜? 행렬을 지원하기 위해
▶ 정적 클래스
클래스의 멤버 변수, 함수가 모두 정적으로 이루어진 클래스를 의미한다.
ㄴ 정적 클래스는 객체화 시키는 것이 불가능하다.
또한, 정적 클래스는 정적 변수, 함수 이외에 멤버 변수, 함수 등을 선언하는 것이
불가능하며, 상속 또한 불가능
C# 언어 정적 클래스 특징:
▶ 확장 메서드란?
▶ 확장 메서드의 특징
C# 언어의 확장 메서드는 정적 클래스만을 통해서 정의하는 것이 가능하다.
즉, 정적 클래스가 아니면 확장 메서드 자체를 구현하는 것이 불가능하다.
C# 언어의 확장 메서드를 정의하는 정적 클래스는 반드시 최상단 영역에 위치 시켜야 한다.
(using과 클래스 사이)
특정 클래스의 중첩 클래스로는 확장 메서드를 정의하는 것이 불가능
(클래스 안에 클래스 : 중첩)
C#은 다중상속을 지원하지 않는다 (상속이 1개만 들어간다)
C#은 상속 + 확장메서드 + 인터페이스를 해야함.
유니티에서는 이미 MonoBehaviour를 상속 받고 시작한다.
확장메서드가 제일 중요하다! 많이 써야함
*/
#endregion
public class Example_02 : MonoBehaviour
{
private void Awake()
{
#if EXAMPLE_TYPE_ARRAY
//1. 평균적으로 사용하는 방법
int[] oValues = new int[5];
//2.
int[] oOtherValues = new int[]
{
1,2, 3, 4, 5
};
/*
var: auto와 비슷한 키워드
C#의 형식 검사는 강한 or 약한이 있다.
강한 형식 검사 : int, float string 등등
ㄴ 데이터 손실 및 프로그래머 실수 방지
라운딩에러, 반올림 오차
약한 형식 검사 : 자동으로 해당 변수의 형식 지정(추정)
ㄴ 단, 지역 변수로 선언하고 선언과 동시에 초기화를 해줘야 한다.
auto : C++ STL
var : 컴파일러에게 유추하라고 시킴
단점 : 가독성이 현저하게 떨어질 수 있다.
멤버변수여야 유추할 수 있으며 전역변수는 유추할 수 없다.
*/
/*
String :
- 읽기가 많은 경우는 String 클래스를 사용하는게 더 적합하다.
게임쪽 로딩 데이터
상점 등에 많이 쓰인다.
- 삽입에 있어 StringBuilder 느리다.
StringBuilder :
- 객체의 참조 값을 힙에 관리한다. (추가, 삽입, 삭제) - 힙은 동적메모리이기 때문에
- 새로운 객체를 만들지 않고 문자열을 수정할 수 있다.
ㄴ 기존 + 연산자를 통한 문자열 연결은 메모리의 할당과 복사가 지속적으로 수행된다
ㄴ 이건 모든 언어 공통 -> 느려진다.
ㄴ 반복문에서 많은 문자열을 연결하면 매우 느리다.
ㄴ 성능이 떨어지는 이유는 연결한 문자열 복사를 위해 매번 새로운 객체를 생성하기 때문에
ㄴ 반면 stringBuilder는 메모리를 블럭 단위로 할당한 후 현재 블럭 내 메모리가 모두 소진된 경우에 한하여
메모리를 재할당하게 되어 있다.
- 읽어 들일때만 String을 쓰고 나머지는 빌더를 쓰자
0
*/
var oStringBuilder = new System.Text.StringBuilder();
for (int i = 0; i < oValues.Length; i++)
{
oStringBuilder.AppendFormat("{0}", oOtherValues[i]);
}
Debug.Log(oStringBuilder.ToString());
#elif EXAMPLE_TYPE_STATIC_CLASS
#else
#endif
}
#if EXAMPLE_TYPE_ARRAY
#elif EXAMPLE_TYPE_STATIC_CLASS
#else
#endif
}