[20251209] 변수/연산자

SmartBear·2025년 12월 9일

검색 팁: MSDN C# <찾으려는 키워드>

Hello World

중괄호: "블록범위"

시작하기

전날의 뻘짓

남들과 다른 시작

개인적으로 GIT (private) 에 올리며 스터디 코드를 관리하려고 했다.
따라서 프로젝트를 별도로 생성하지 않고 GIT 에 repository 를 먼저 생성하였다.

Visual Studio - Installer

기존에 VS 2022 가 설치되어 있어 그대로 사용하였다. 설치된 모듈을 확인해보니 .NET 이 추가되어있지 않아 추가 설치를 진행하였다.

실행 방법

아래와 같이 코드를 만들어 실행하려고 했다. 그런데, F5 를 눌러도 실행이 되지 않았다.
결과적으로는 IDE 에서 어떤 빌더로 컴파일 및 실행을 해야 할지 선택되지 않아 발생한 문제이다.
IDE 에서 이를 설정하기 위해 여러 방면으로 검색하였지만 제대로 나오지 않았다.

따라서 Console 을 띄워 CLI 를 통한 실행을 진행하게 되었다.
실행 가능한 CLI 는

$ dotnet run <실행파일명>.cs
# run 001_helloworld.cs

Hello world

=====================


# run 002_variable.cs

42
66
Hello world

=====================

# run 003_helloworld.cs

Hello world
Nope Still here!

=====================

같은 시작으로 재시작

너무 불편하여 결국 교육 가이드대로 새 프로젝트를 만들었다 (시무룩)
CLI 사용이 딱히 불편하지는 않지만, 앞으로 교육을 진행하며 이 부분 때문에 문제가 발생하여
따라가기 어려운 상황이 나오면 안될 것 같다는 판단이다.

문자열 출력

주석

주석은 ///* */ 를 통해 넣을 수 있다.
주석은 실제 코드에는 아무런 영향을 주지 않는다.
만든 함수나 Logic 에 대해서는 되도록 주석을 남기는 것이 보통이다.
다만, 배보다 배꼽이 커지면 본인이 만든 함수의 기능에 대해 생각해봐야 한다.

Escape Sequance

자주 사용하는 것은 \n\t

using & namespace

기능들은 보통 namespace 로 묶여 있다. 일종의 카테고리로 봐도 무방하다.
해당 기능을 사용해야 할 경우 using 을 이용하여 불러올 수 있다.
기본 예제에는 using System;이 그 예로 볼 수 있다.

자리표시자

출력 자리 표기.
Python 에서 문자열 처리에서 많이 해본 방식이다.

실습코드

using System;


namespace _20251209
{
    internal class Program
    {
        static void Main(string[] args)
        {// 블록 시작
            Console.WriteLine("Press any key to continue...");
            Console.Write("Byounghee Chae");
            Console.WriteLine(" is SmartBear.");
            Console.WriteLine();
            Console.WriteLine();
            Console.WriteLine("Welcome to C# Programming!");
            /*
             * 이것은 Multiline 주석입니다.
             * 알겠습니꽈?
             */
            Console.WriteLine("1\n2");
            Console.WriteLine("나는 \"개발자\"다");
            Console.WriteLine("\tTab 1개");
            Console.WriteLine("\t\tTab 2개");
            Console.WriteLine("\t\t\tTab 3개");

            Console.WriteLine("First pos {0}는 무도의 {0}, second pos {1}", "무야호", "끼야호");

        }// 블록 끝
    }
}
Press any key to continue...
Byounghee Chae is SmartBear.


Welcome to C# Programming!
1
2
나는 "개발자"다
        Tab 1개
                Tab 2개
                        Tab 3개
First pos 무야호는 무도의 무야호, second pos 끼야호

Variable

변수 필수 3요소

  • 자료형: 일종의 데이터를 담는 방에 대한 정의. Data Type.
  • 이름: 변수의 이름은 유의미한 단어를 사용하는 것이 좋음
    • 좋은 예: playerSpeed, bulletNum, playerDamege, ....
    • 좋지 않은 예: a, b, i, j
    • 단, 코드 흐름에 크게 상관이 없는 임시적인 변수는 간단한 단어 및 문자도 허용.
  • 값: 실제 Data

자료형 종류

상수

값이 변경되지 않아야 하는 값. 선언시 초기화를 같이 진행.
ex) 원주율 등

실습 코드

using System;


namespace _20251209
{
    internal class Program
    {
        static void Main(string[] args)
        {// 블록 시작
            int a = 46;
            int b;
            b = 10;
            float n = 3.14f;
            string str = "Hello, World!";
            Console.WriteLine("Integer a value: " + a);
            Console.WriteLine("Integer b value: " + b);
            Console.WriteLine("Float n value: " + n);
            Console.WriteLine("String str value: " + str);

            Console.WriteLine("Size of int: " + sizeof(int) + " bytes");
            Console.WriteLine("Size of float: " + sizeof(float) + " bytes");
            Console.WriteLine("Size of double: " + sizeof(double) + " bytes");
            Console.WriteLine("Size of char: " + sizeof(char) + " bytes");
            Console.WriteLine("Size of bool: " + sizeof(bool) + " bytes");

            // 변수명은 유의미한 단어로 하는게 좋다.
            // 변수명으로 예약어를 사용할 수 없다. ex) for, while, as, ...

            Console.WriteLine("integer a value: " + a);
            a = 20;
            Console.WriteLine("integer a value: " + a);

            const int c = 7;
            // c = 10;  상수는 변경이 되지 않음. 실행시 오류 발생.
            Console.WriteLine("constant c value: " + c);
        }// 블록 끝
    }
}
Integer a value: 46
Integer b value: 10
Float n value: 3.14
Char v value: A
String str value: Hello, World!
Size of int: 4 bytes
Size of float: 4 bytes
Size of double: 8 bytes
Size of char: 2 bytes
Size of bool: 1 bytes
integer a value: 46
integer a value: 20
constant c value: 7
20      10      3.14    Hello, World!
20      10      3.14    Hello, World!

String 연산 관련 조사하기

string + string 보다 $"string{string}" 이 더 연산이 빠르다?

String 은 "값"이 아닌 "참조"타입의 자료형

참조 타입의 자료형은 실제 값을 별도의 장소에 저장하고 해당 값을 갖고 있는 메모리를 "참조"하는 형태로 존재한다.

추론

string name = "Chae";
string text = "My name is " + name + " !!";

와 같은 String 의 연산에서는 참조 + 참조가 되버리기 때문에 값에 대한 복제가 발생되어 추가 연산이 들어가게 된다.
즉, "My name is"" !!" 의 값이 별도로 string 으로 저장되고 다시 이것들을 저장하려고 하..는 듯 하다
(정확하게는 좀 더 확인 필요. 아직 정식 문서를 확인을 못 함)
반면,

string name = "Chae";
string text = $"My name is {name} !!";

와 같은 String 연산은 My name is {name} !! 라는 덩어리 하나 자체만 연산되므로 불필요한 연산이 줄어드는 것 같다.
아래는 간단히 테스트 한 코드

using System;


namespace _20251209
{
    internal class Program
    {
        static void Main(string[] args)
        {// 블록 시작
            string name = "Chaeb";
            DateTime opString1BeforeT = DateTime.Now;
            string operation1 = "Now " + name + " !!!!";
            DateTime opStrint1AfterT = DateTime.Now;
            Console.WriteLine($"\"Now \" + name + \" !!!!\" : {(opStrint1AfterT - opString1BeforeT).TotalMilliseconds}");

            DateTime opString2BeforeT = DateTime.Now;
            string operation2 = $"Now {name} !!!!";
            DateTime opStrint2AfterT = DateTime.Now;
            Console.WriteLine($"$\"Now {{name}} !!!!\" : {(opStrint2AfterT - opString2BeforeT).TotalMilliseconds}");
        }// 블록 끝
    }
}
"Now " + name + " !!!!" : 1.0006
$"Now {name} !!!!" : 0

연산자

참고 #region

Region 은 에디터내 Collapsed 를 제공하기 위한 Tag. 빌드에는 영향이 없다. #region 이름 으로 시작해 #endregion으로 묶는다.

사칙연산

기본적인 덧/뺄/곱/나눗셈을 지원한다. 산수에서 배웠듯 곱/나눗셈부터 진행.
연산 순서를 변경하려면 괄호를 추가하면 된다.

증감연산

++, -- 등 특정값을 1씩 증가시키는 연산
변수의 앞에 하느냐, 뒤에 하느냐에 따라 연산 순서가 달라지니 주의하자.
ex) count++, ++count, count--, --count

// 극단적인 예시
int count = 0;
count = count++;
count = count++;
count = count++; // 결과는 0

count = ++count;
count = ++count;
count = ++count; // 결과는 3

비교 연산

값을 서로 비교하는 연산자. 주로 조건문에서 많이 사용된다.

논리 연산

and/or 등 bit 단위를 논리적으로 연산한다.

조건부 논리 연산

& 나 | 를 2개씩 사용. ex) &&, ||
앞에서 부터 연산된다. && 조건일 경우 앞에서 부터 연상 중 false 조건이 날 경우 연산이 종료된다.

실습 코드

using System;


namespace _20251209
{
    internal class Program
    {
        static void Main(string[] args)
        {// 블록 시작
            #region 사칙 연산            
            Console.WriteLine("5 + 2 = \t{0}", 5 + 2);
            Console.WriteLine("5 - 2 = \t{0}", 5 - 2);
            Console.WriteLine("5 * 2 = \t{0}", 5 * 2);
            Console.WriteLine("5 / 2 = \t{0}", 5 / 2);
            #endregion

            #region 기타 연산            
            Console.WriteLine("5 % 2 = \t{0}", 5 % 2);
            Console.WriteLine("5 << 2 = \t{0}", 5 << 2);
            Console.WriteLine("8 >> 2 = \t{0}", 8 >> 2);
            #endregion

            #region 논리 연산            
            Console.WriteLine("true & true = \t{0}", true & true);
            Console.WriteLine("true & false = \t{0}", true & false);
            Console.WriteLine("true | true = \t{0}", true | true);
            Console.WriteLine("true | false = \t{0}", true | false);
            Console.WriteLine("true ^ true = \t{0}", true ^ true);
            Console.WriteLine("true ^ false = \t{0}", true ^ false);
            Console.WriteLine("!true == \t{0}", !true);
            #endregion

            #region 비교 연산
            Console.WriteLine("true == true : \t{0}", true == true);
            Console.WriteLine("true == false : \t{0}", true == false);
            Console.WriteLine("5 > 2 : \t{0}", 5 > 2);
            Console.WriteLine("5 < 2 : \t{0}", 5 < 2);
            Console.WriteLine("5 >= 2 : \t{0}", 5 >= 2);
            Console.WriteLine("5 <= 2 : \t{0}", 5 <= 2);
            Console.WriteLine("5 != 2 : \t{0}", 5 != 2);
            Console.WriteLine("5 == 2 : \t{0}", 5 == 2);
            #endregion

            #region 증감 연산
            int count = 0;
            count++;
            // ++, --
            Console.WriteLine("count : \t{0}", count);
            count++;
            Console.WriteLine("count : \t{0}", count);
            count++;
            Console.WriteLine("count : \t{0}", count);

            float a = 5.0f;
            float b = 2.0f;
            Console.WriteLine($"{a} / {b} = \t{a / b}");
            a += b;
            // +=, -=, *=, /=, %=
            Console.WriteLine("a += b : \t{0}", a);
            #endregion

            #region 형변환
            int i = 5;
            int j = 6;
            int k = 8;
            // float res0 = (i + j + k) / (float)3;
            // float res0 = (i + j + k) / 3f;
            float res0 = (float)(i + j + k) / 3;
            Console.WriteLine("res0 : \t{0}", res0);
            #endregion

            #region 조건부 논리 연산
            bool isKeyDown = true;
            bool isGrounded = false;
            bool isAlive = true;
            bool isAnotherState = false;
            bool canJump = isKeyDown && isGrounded && isAlive && !isAnotherState;
            Console.WriteLine("You {0} jump !!", canJump ? "can" : "cannot");
            #endregion

        }// 블록 끝
    }
}
5 + 2 =         7
5 - 2 =         3
5 * 2 =         10
5 / 2 =         2
5 % 2 =         1
5 << 2 =        20
8 >> 2 =        2
true & true =   True
true & false =  False
true | true =   True
true | false =  True
true ^ true =   False
true ^ false =  True
!true ==        False
true == true :  True
true == false :         False
5 > 2 :         True
5 < 2 :         False
5 >= 2 :        True
5 <= 2 :        False
5 != 2 :        True
5 == 2 :        False
count :         1
count :         2
count :         3
5 / 2 =         2.5
a += b :        7
res0 :  6.333333
You cannot jump !!

Console

Write, WriteLine

화면에 출력하는 함수.

  • Console.Write(): 줄바꿈 없이 화면에 출력
  • Console.WriteLine(): 줄바꿈 포함 화면에 출력

ReadLine

  • 화면에 입력하는 함수. 기본적으로 string type 으로
using System;


namespace _20251209
{
    internal class Program
    {
        static void Main(string[] args)
        {// 블록 시작
            Console.Write("Enter something: ");
            string inputString = Console.ReadLine();
            Console.WriteLine($"You entered: {inputString}");
            Console.WriteLine();

            Console.Write("Enter something: ");
            bool isCorrect;
            int num; 
            isCorrect = int.TryParse(Console.ReadLine(), out num);
            // int num = int.Parse(Console.ReadLine());
            Console.WriteLine($"You entered: {num}");
            Console.WriteLine($"Parsing successful: {isCorrect}");
        }// 블록 끝
    }
}
Enter something: how do you do?
You entered: how do you do?

Enter something: how do you do?
You entered: 0
Parsing successful: False
profile
Python Dev with Infra -> Game Programmer

0개의 댓글