C#(1) - C# 시작하기, 변수 , 형변환

MINO·2024년 3월 18일
0

C#

목록 보기
1/7
post-thumbnail

스파르타 코딩클럽의 내일배움캠프에 지원하게 되어 4개월간 Unity 교육을 받게 되었다.
Unity 엔진에서 주로 다루는 C# 코드 뿐만 아니라 C++ 과는 다른 문법 등이 있을 때마다 정리해야겠다.

24-03-18

첫 OT 가 끝나고, 남은 시간동안 내배캠에서 지원하는 C# 사전 문법 기초 를 공부할 수 있는 시간이 주어졌다.


첫 프로그램 만들기

C++ 과는 다르게 빈 프로젝트가 아닌 콘솔 앱 을 선택해서 프로젝트를 생성한다.


최상위 문 사용 안함

최상위 문 사용 안 함을 체크한 뒤, 만들기를 진행하면 다음과 같은 코드가 자동으로 생성된다.

namespace FirstProgram // 프로젝트 이름
{
    internal class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Hello, World!");
        }
    }
}

반면, 기본 값인 체크 안함으로 만들기를 진행하면 훨씬 간결한 코드가 생성된다.

// See https://aka.ms/new-console-template for more information
Console.WriteLine("Hello, World!");

둘 다 같은 프로그램을 나타내고, 최상위 문 사용 안함 을 통해 작성해야 하는 코드를 간소화하는 기능이라고 한다.

C# 가이드 - 최상위 문


Native AOT 게시 사용

C# 기초 문법에 이 부분에 대한 내용은 나와있지 않지만, 궁금해서 구글링해보았다.

.NET 환경의 컴파일 과정
Dotnet 8 - Native AOT

매우 친절하게 설명되어 있지만, 아직 해독하긴 어려워보여 링크를 남겨두고 컴파일러를 공부하고 다시 읽어봐야겠다.

본 내일배움캠프에서는 둘다 체크 안 함으로 사용하면 될 것 같다.


데이터 다루기

C++ 과는 다르거나 처음 본 코드 위주로 작성하였다.

입출력

string name;
string s_age;

Console.WriteLine("Hello, World!");
name = Console.ReadLine();
s_age = Console.ReadLine();
Console.WriteLine("이름은 " + name + ", 나이는 " + s_age); 

Console.WriteLine()의 경우, 입력 받은 문자열을 화면에 출력한 뒤, 자동으로 줄바꿈을 실행한다.
Console.ReadLine() 의 경우, 사용자에게 한 줄을 입력받아 문자열 형식으로 반환한다.


형변환

입력받는 Console.ReadLine() 함수의 경우, 문자열 형식으로 받기 때문에 상황에 따라 형변환이 필요할 것이다.

숫자 -> 다른 형태의 숫자

int 형을 float 형으로 바꾸거나 또는 그 반대 등의 형태는
사용하고 싶은 변수 앞에 변경하고 싶은 변수 앞에 (자료형)을 명시

int x = 10;
float y = 20.0f;
int z = x + (int)y;
float w = (float)x + y;

다른 자료형 -> 문자

숫자나 bool 형을 문자로 바꿀 때는 .ToString() 을 사용

int x = 10;
string x_str = x.ToString(); // "10"

float y = 0.5f;
string y_str = y.ToString(); // "0.5"

bool z = true;
string z_str = z.ToString(); // "true"

문자 -> 다른 자료형


Convert 클래스

  • Convert 클래스의 주요 메서드로 가능
    • 기본 데이터 형식을 다른 기본 데이터 형식으로 변환한다.
string iStr = "10";
int x = Convert.ToInt32(iStr); // x = 10
   
string bStr = "true";
bool b = Convert.ToBoolean(bStr); // b = true

string nStr = null;
int n = Convert.ToInt32(nStr); // n = 0

string eStr = "10.5"; // int형으로 변환될 수 없는 문자열
int e = Convert.ToInt32(eStr); // FormatException

Convert 클래스를 사용해 float 형으로 변환할 때는 Convert.ToSingle() 을 사용한다.

Convert.ToSingle()


Parse() 함수

  • 바꾸고 싶은 문자형 뒤에 .Parse() 로 변환
    • 문자열 표현을 해당하는 형으로 변환한다.
string iStr = "10";
int x = int.Parse(iStr); // x = 10

string bStr = "true";
bool b = bool.Parse(bStr); // b = true

string nStr = null;
int n = int.Parse(nStr); //  ArgumentNullException

string eStr = "10.5";
int e = int.Parse(eStr); // FormatException

TryParse() 함수

  • 예외의 처리가 가능한 변환 함수
    • 문자열 표현을 해당하는 형으로 변환한다. 반환 값은 변환의 성공 여부를 나타낸다.
bool result;

string iStr = "10";
int x;
result = int.TryParse(iStr, out x); // result = true, x = 10

string bStr = "true";
bool b;
result = bool.TryParse(bStr, out b); // result = true, b = true

string nStr = null;
int n;
result = int.TryParse(nStr, out n); // result = false, n = 0

string eStr = "10.5";
int e;
result = int.TryParse(eStr, out e); // result = false, e = 0

상황에 맞게 Convert, Parse, TryParse 를 쓰면 좋겠지만, 형변환에 익숙해질 때까지는 TryParse 함수를 쓰는게 좋을 것 같다.


Convert 와 Parse 의 차이점

형 변환ConvertParse
null 값이 할당된 string -> int 변환0 반환ArgumentNullException 예외
Char -> int 변환ASCII 코드로 변경되어 변환변환 불가능

연습 문제

변수의 선언 ~ 형변환 연습 문제

// 1 ~ 2. 변수 선언 및 초기화
{
    int lv = 1;
    int cnt = 1;

    float p = 0.1f;
    float speed = 5.0f;

    string nickname = "Kim";
    string info = "male";
}

// 3 ~ 5. 형변환
{
    // 숫자 -> 숫자
    int iTen = 10;
    float fTen = (float)iTen;

    float fFive = 5.5f;
    int iFive = (int)fFive;


    // 숫자 -> 문자
    int n = 10;
    string nStr = n.ToString();
    
    float f = 0.5f;
    string fStr = f.ToString();


    // 문자 -> 숫자
    bool result;

    string strTen = "10";
    int convert_Ten = Convert.ToInt32(strTen);
    int parse_Ten = int.Parse(strTen);
    int try_parse_Ten;
    result = int.TryParse(strTen, out try_parse_Ten);

    string strSix = "6.2";
    float convert_Six = Convert.ToSingle(strTen);
    float parse_Six = float.Parse(strTen);
    float try_parse_Six;
    result = float.TryParse(strTen, out try_parse_Six);
}
profile
안녕하세요 게임 개발하는 MINO 입니다.

0개의 댓글