[SKKU DT] 21일차 -VScode 세팅, 문자열 형식 정리

2023. 11. 27. 18:27SKKU DT

728x90
반응형

https://www.aladin.co.kr/shop/wproduct.aspx?ItemId=316060015&start=slayer

 

이것이 C#이다

C#의 기본, 고급 문법과 더불어 기초 클래스 라이브러리까지 다루고 있다. 총 22개 장으로, 앞서 배운 내용을 활용하면서 단계별로 학습할 수 있도록 구성했다. 입문자의 눈높이에 맞춰 친절하게

www.aladin.co.kr

 

 

Project name은 소스 관리를 위해서 소문자로, 빈공간 없이 '-' 대쉬로 이름을 짓는다.

Connect to Unity Cloud는 샘플 예제 같은 경우 체크를 해제한다. Cloud에서 잘 삭제가 되지 않음.

 

 


 

 

Visual Studio Code 설치

Visual Studio보다 훨씬 가볍다.

 

 

**Rider라는 유료 툴도 있음

 

External Tools - [Visual Studio Code]를 선택한다.

 

 


 

 

Extensions 설치

오른쪽 하단에 설치하겠냐는 팝업창에서 모두 Install 하면 된다.

 

 


 

 

.Net 8.0 다운로드

이후 컴퓨터 재부팅

 

 

Run - Attach to Unity가 뜨고 자동완성이 된다면 유니티와 VScode의 연결이 완료된 것이다.

 

 


 

 

BreakPoint 설정 후 코드 실행하고, Unity로 돌아가 씬을 실행하면 BreakPoint 부분에서 멈춘다.

 

 


 

 

변수 타입 예제

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class IntegralTypes : MonoBehaviour
{
    void Start()
    {
        sbyte a = -10;
        byte b = 40;

        Debug.Log($"a = {a}, b = {b}");

        short c = -30000;
        ushort d = 60000;

        Debug.Log($"c = {c}, d = {d}");

        int e = -1000_0000;
        uint f = 3_0000_0000;

        Debug.Log($"e = {e}, f = {f}");

        long g = -5000_0000_0000;
        ulong h = 200_0000_0000_0000_0000;

        Debug.Log($"g = {g}, h = {h}");
    }
}

*//$ 붙이면 쌍따옴표 사이의 값 중 중괄호 사이의 값은 변수를 불러온다

Debug.Log($"g = {g}, h = {h}");
Debug.Log("g = " + g + ", h = " + h);
Debug.Log(string.Format("g = {0}, h = {1}", g, h));

**출력 방법은 여러가지가 있다.

 

 


 

 

Indent를 좀 더 확실하게 구분하기 위해서 indent-rainbow를 설치한다.

 

Tab으로 괄호를 넘어가기 위해 TabOut 설치한다.

 

 


 

 

변수의 자료형

{
    byte a = 255;
    sbyte b = (sbyte)a;

    Debug.Log(a); //255 출력
    Debug.Log(b); //-1 출력
}

{
    uint a = uint.MaxValue; //최댓값 대입

    Debug.Log(a); //4294967295출력

    a = a + 1;

    Debug.Log(a); //0출력(오버플로우)
}

 

 

자료의 형 변환

{
    int a = 123;
    string b = a.ToString();
    Debug.Log(b);

    float c = 3.14f;
    string d = c.ToString();
    Debug.Log(d);

    string e = "123456";
    int f = Convert.ToInt32(e); //문자열을 32비트 숫자로 변환
    Debug.Log(f);

    string g = "1.2345";
    float h = float.Parse(g); //문자열을 float 타입으로 변환
    Debug.Log(h);
}

 

 

상수 선언

{
    //서버의 주소 같은 경우 상수로 선언
    const int MAX_INT = 2147483647;
    const int MIN_INT = -2147483648;

    Debug.Log(MAX_INT);
    Debug.Log(MIN_INT);
}

 

 

열거형

//enum 선언. 변수의 값을 한정하고자 할 때 사용
enum DialogResult{ YES, NO, CANCEL, CONFIRM, OK }

void Start()
{
    {
        Debug.Log((int)DialogResult.YES); //0출력
        Debug.Log((int)DialogResult.NO); //1출력
        Debug.Log((int)DialogResult.CANCEL); //2출력
        Debug.Log((int)DialogResult.CONFIRM); //3출력
        Debug.Log((int)DialogResult.OK); //4출력
    }
}
enum DialogResult{ YES, NO, CANCEL, CONFIRM, OK }


void Start()
{
    {
    	//enum은 변수의 타입처럼 사용할 수 있다. DialogResult result = ~~
        DialogResult result = DialogResult.YES;

        Debug.Log(result == DialogResult.YES); //True 출력
        Debug.Log(result == DialogResult.NO); //False 출력
        Debug.Log(result == DialogResult.CANCEL); //False 출력
        Debug.Log(result == DialogResult.CONFIRM); //False 출력
        Debug.Log(result == DialogResult.OK); //False 출력
    }
}

 

 


 

 

Nullable 형식

public class Nullable : MonoBehaviour
{
    void Start()
    {
        int? a = null; //물음표를 붙이면 int 타입에도 null을 대입할 수 있다.

        Debug.Log(a.HasValue); //a에 값이 있느냐? False 출력
        Debug.Log(a != null); //a가 null이 아니냐? False 출력

        a = 3;

        Debug.Log(a.HasValue); //True 출력
        Debug.Log(a != null); //True 출력
        Debug.Log(a.Value); //3 출력
    }
}

 

 


 

 

var 형식

{
    var a = 20;
    Debug.Log($"Type: {a.GetType()}, Value: {a}");
    var b = 3.1414213;
    Debug.Log($"Type: {b.GetType()}, Value: {b}"); //float으로 충분하지만 double을 사용한다
    var c = "Hello";
    Debug.Log($"Type: {c.GetType()}, Value: {c}");
    var d = new int[](10,20,30);
    foreach(var e in d)
    {
        Debug.Log(e);
    }
}

 

 


 

 

문자열 안에서 찾기

public class StringSearch : MonoBehaviour
{
    void Start()
    {
        string greeting = "Good Morning";
        Debug.Log(greeting);

        //IndexOf() 괄호안에 찾고자 하는 문자열 넣기
        Debug.Log($"IndexOf: 'Good' : {greeting.IndexOf("Good")}"); //0 출력(쪽에서 첫번째)
        Debug.Log($"IndexOf: 'o' : {greeting.IndexOf("o")}"); //1 출력(쪽에서 두번째)
        
        //LastIndexOf() 뒤에서 부터 값을 찾는 형태
        Debug.Log($"LastIndexOf 'Good' : {greeting.LastIndexOf("Good")}"); //0 출력
        Debug.Log($"LastIndexOf 'g' : {greeting.LastIndexOf("g")}"); //11 출력

        //StartWith() 특정한 문자열로 시작 되는지
        Debug.Log($"StartWith 'Good' : {greeting.StartsWith("Good")}"); //True 출력
        Debug.Log($"StartWith 'g' : {greeting.StartsWith("Morning")}"); //False 출력

        //EndWith() 특정한 문자열로 종료가 되는지
        Debug.Log($"EndWith 'Good' : {greeting.EndsWith("Good")}"); //False 출력
        Debug.Log($"EndWith 'Morning' : {greeting.EndsWith("Morning")}"); //True 출력

        //Contains() 특정한 문자열을 포함하는지
        Debug.Log($"Contains 'Evening' : {greeting.Contains("Evening")}"); //False 출력
        Debug.Log($"Contains 'Morning' : {greeting.Contains("Morning")}"); //True 출력

        //Replace 특정한 문자열을 다른 문자열로 치환
        Debug.Log($"Repalced 'Morning' with 'Evening' : {greeting.Replace("Morning", "Evening")}");
    }
}

 

 


 

 

문자열 분할하기

public class StringSlice : MonoBehaviour
{
    void Start()
    {
        string greeting = "Good Morning";

        Debug.Log(greeting.Substring(0,5)); //"Good", 괄호 안의 값이 2개면 자르고자 하는 시작과 끝
        Debug.Log(greeting.Substring(5)); //"Morning", 괄호 안의 값이 1개면 자르는 시작점

        string[] arr = greeting.Split(new string[] {" "}, System.StringSplitOptions.None); //공백을 기준으로 문자열을 자르겠다, using System을 쓰면 앞에 System 없어도 된다.

        foreach(string element in arr)
            Debug.Log($"{element}");
    }
}

 

 


 

 

문자열 서식 맞추기

public class StringFormatBasic : MonoBehaviour
{
    void Start()
    {
        string fmt = "{0, -20}{1,-15}{2, 30}"; //중괄호 앞 숫자들은 각각 0번, 1번, 2번을 의미한다. 뒤의 숫자는 위치를 의미한다. 각각 -20, -15, 30만큼의 공간 확보
        
        var result1 = string.Format(fmt, "Publischer", "Author", "Title");
        var result2 = string.Format(fmt, "Marvel", "Stan Lee", "Iron Man");
        var result3 = string.Format(fmt, "Hanbit", "Victor", "This is C#");
        var result4 = string.Format(fmt, "Prentice Hall", "K&R", "The C Programming Language");
    }
}

변수 선언 부분에 BreakPoint를 놓고 디버그를 하면, [VARIABLES] 란에 변수가 보인다.

[WATCH]에서 fmt를 추가하면 계속 fmt 변수를 주시할 수 있다.

 

 


 

 

날짜 형식

public class StringFormatBasic : MonoBehaviour
{
    void Start()
    {
        string fmt = "{0, -20}{1,-15}{2, 30}"; //중괄호 앞 숫자들은 각각 0번, 1번, 2번을 의미한다. 뒤의 숫자는 위치를 의미한다. 각각 -20, -15, 30만큼의 공간 확보
        
        var result1 = string.Format(fmt, "Publischer", "Author", "Title");
        var result2 = string.Format(fmt, "Marvel", "Stan Lee", "Iron Man");
        var result3 = string.Format(fmt, "Hanbit", "Victor", "This is C#");
        var result4 = string.Format(fmt, "Prentice Hall", "K&R", "The C Programming Language");

        DateTime dt = new DateTime(2018, 11, 3, 23,18,22); //날짜 표현, 처리 (년, 월, 일, 시,분,초)

        Debug.Log(string.Format("12시간 형식: {0:yyyy-MM-dd tt hh:mm:ss (ddd)}", dt));
        Debug.Log(string.Format("24시간 형식: {0:yyyy-MM-dd HH:mm:ss (ddd)}", dt));

        CultureInfo ciKo = new CultureInfo("ko-KR");

        Debug.Log(dt.ToString("yyyy-MM-dd tt hh:mm:ss (ddd)", ciKo));
        Debug.Log(dt.ToString("yyyy-MM-dd HH:mm:ss (ddd)", ciKo));
        Debug.Log(dt.ToString(ciKo));

        CultureInfo ciEn = new CultureInfo("en-US");

        Debug.Log(dt.ToString("yyyy-MM-dd tt hh:mm:ss (ddd)", ciEn));
        Debug.Log(dt.ToString("yyyy-MM-dd HH:mm:ss (ddd)", ciEn));
        Debug.Log(dt.ToString(ciEn));
    }
}
728x90
반응형