본문 바로가기
게임 개발 일지/내일배움캠프 TIL

변수 선언과 초기화 / 3항 연산자 / switch문의 특징

by 빛하_ 2023. 11. 6.

 

 

 

C# 문법 기초 1주차

1. 이스케이프 시퀀스

문자열 내에 특수한 문자를 포함시키고 싶을 때 사용하는 문자 조합이다.

 

( \ == \ )

파일 경로 등을 표시할 때 역슬래시 ( \ ) 가 자주 쓰이는데,

이 때 역슬래시를 삽입하기 위해서는 \\로 나타내야 한다.

 

\t 의 경우 콘솔창에서 8칸 기준 띄어쓰기가 실행된다.

 

 

2. 변수 선언과 초기화

변수 선언 : 자료형 변수이름;

초기화 : 변수이름 = 값;

 

< 여러 개의 변수를 초기화하는 방법 >

int num1, num2, num3 = 10; (X)
  => 이렇게 하면 num3 변수만 10으로 초기화


num1 = num2 = num3 = 10;

  => 이렇게 해야 모두 10으로 초기화

 

 

3. 식별자 규칙

식별자란 [변수, 메서드, 클래스, 인터페이스] 등에 사용되는 이름이다.

 

식별자 규칙은 크게 다음과 같다.

  • C#의 키워드와 같은 이름은 사용할 수 없다.
  • 첫 문자에 알파벳, 언더스코어(_)가 올 수 있다.
  • 두 번째 문자에는 알파벳, 언더스코어, 숫자가 올 수 있다.
  • 대소문자를 구분한다.

< 변수명 지을 때 TIP >

변수명이 길어지더라도 직관적으로 알아보기 쉽게 이름을 지어주는 것이 좋다.

(코드가 늘어날 때 쉽게 구분하기 위해서)

자동완성 기능을 활용할 수 있기 때문에 변수명이 길어진다고 해서 불리한 것은 없다.

변수명은 숫자로 시작해서는 안 된다. (오류 발생)

 

 

4. Console.ReadLine

콘솔 입력을 받을 때 사용하는 ReadLine의 경우 항상 string 값 (문자열) 으로 돌려준다는 걸 명심하자.

 

< 1주차 과제 제출 Insight >

사칙연산 계산기를 만들던 도중 ReadLine은 문자열로 출력한다는데.. 숫자를 어떻게 입력하지?

1) 처음에 string 을 사용해 str1, str2 로 변수를 만들었는데 계산식 출력에 오류가 발생

2) 그러면 ReadLine 을 거쳐서 나온 문자를 숫자로 변환시켜서 계산식에 입력할까? (X)

   Console.ReadLine 부분이 다음에 오는 Console.WriteLine에 영향을 주지 않는다.

   코드를 깔끔하게 만들기 위해서는 불필요한 변환을 최소화해야한다.

   따라서 처음부터 변수를 int 로 생성하고 ReadLine 때 필요한 변수만 문자로 변환시켜주자.

3) int.Parse(Console.ReadLine()); 방식으로 변환해 ReadLine 에서는 문자열로 출력할 수 있게 함

4) 문자열 출력도, 계산기 출력도 완성!

 

using System;

namespace ConsoleApp1
{
    internal class Assignment
    {
        public static void Main()
        {
            Console.Write("첫 번째 수를 입력하세요: ");
            int num1 = int.Parse(Console.ReadLine());

            Console.Write("두 번째 수를 입력하세요: ");
            int num2 = int.Parse(Console.ReadLine());

            Console.WriteLine("더하기: " + (num1 + num2));
            Console.WriteLine("빼기: " + (num1 - num2));
            Console.WriteLine("곱하기: " + (num1 * num2));
            Console.WriteLine("나누기: " + (num1 / num2));
        }
    }
}

 

 

 

5. 논리연산자를 사용해 범위 나타내기

!을 사용함으로써 (범위)가 아니면 이라는 뜻의 연산을 만들 수 있다. 

int num1 = 15;

# 'num1이 0부터 20 사이에 포함되지 않으면' 만들기

Console.WriteLine(0 > num3 || num3 > 20); 
Console.WriteLine( !(0 <= num3 && num3 <= 20) );

// 두 조건은 같은 범위를 나타내고 있다.
// 이 때 num1이 15이므로 값은 False.

 

 

 

6. 증감연산자의 전위와 후위

코드는 항상 위에서 아래로, 좌에서 우로 가기 때문에

 

1) 전위형 ( ~ ++ x)

코드가 ++ 를 먼저 마주치므로 '1 증가'할 준비를 하고 x를 만나 이전 항목에 x를 더하는 것이 가능하다.

 

2) 후위형 ( ~ x ++)

x ++ 같은 경우는 코드가 x를 먼저 마주치므로 해당 줄의 모든 코드가 끝난 다음에 ++가 실행된다.

 

 

 

 

7. Compare

compare 할 때 문자열의 경우

알파벳은 A 에서 Z 로 갈수록 값이 크고, 소문자가 대문자보다 값이 크다.

Compare(a,b) 에서 a>b 이면 1, a==b 이면 0, a<b 이면 -1 이 출력된다.

 

 

 

 

 C# 문법 기초 2주차

 

 

1. if - else 문에서 많이 하는 실수

if - else 문에서 else 문에도 조건을 다는 경우가 있는데,

if(조건) 이 있기 때문에 else 는 자동으로 조건에 맞지 않는 모든 경우가 해당한다.

else 뒤에 조건 붙이지 말자!

 

 

2. 3항 연산자

3항 연산자의 형태 == (조건식) ? 참일 경우 값 : 거짓일 경우 값;

 

3항 연산자와 if else는 의미가 같다. 

int currentExp = 1200;
int requiredExp = 2000;

# 삼항 연산자
string result = (currentExp >= requiredExp) ? "레벨업 가능" : "레벨업 불가능";
Console.WriteLine(result);


# if else 문
if (currentExp >= requiredExp)
{
    Console.WriteLine("레벨업 가능");
}
else
{
    Console.WriteLine("레벨업 불가능");
}

 

 

 

3. switch문 의 특징

데이터 값이 특정 case에 부합할 때 해당 case에 맞는 명령을 수행한 뒤 break를 만나 즉시 switch문이 종료된다.

 

        public static void Main(string[] args)
        {
            int playerScore = 100;
            string playerRank = "";

            switch(playerScore / 10)
            {
                case 10:
                case 9:
                    playerRank = "Diamaond";
                    break;
                case 8:
                    playerRank = "Platinum";
                    break;
                case 7:
                    playerRank = "Gold";
                    break;
                case 6:
                    playerRank = "Silver";
                    break;
                default:
                    playerRank = "Bronze";
                    break;
            }
            Console.WriteLine(playerRank);
        }

 

이 경우  playerRank = "Diamaond";  를 수행하기 위한 조건은 case 10과 case 9 두 가지가 된다.

즉, case 10의 경우에도 case 9와 같은 명령을 수행하고

break를 만나 switch문을 빠져나온다는 뜻이다.

 

 

 

 

오늘의 회고

 

1주차 과제 2번에서 변환에 대한 고민을 하다가 int.Parse 힌트를 얻어서 겨우 끝낼 수 있었다.

머릿속으로 만들고 싶은 그림은 있는데 그게 코드로 부드럽게 표현이 안 된다.

꾸준한 연습만이 답인 것 같다.

사전캠프 때 훑었던 C# 기초 문법도 다시 꼭꼭 씹으면서 소화하니 머리에 잘 저장할 수 있었다.

 

오늘 집중해서 강의 들었는데도 다른 팀원들만큼은 못 따라갔다.

캠프 이전부터 코딩을 접한 분들이라 기초 문법은 쉽게 들었나보다.

하지만 나는 입문자라서 기초 용어 하나하나 실습해보고 1주차 과제까지 끝내려니 힘이 많이 들었다.

기초가 부실하면 나중에 팀 프로젝트에서 부족함을 느낄까봐 더 꼼꼼히 공부하고 싶다.

 

강의를 빨리 마쳐야 기초문법-개인 프로젝트에 돌입할 수 있는데, 시간적으로 쫓기는 것 같아 벌써 걱정이다.

새로 팀이 편성돼서 어색함(?) 같은 것도 있었고, 개인 공부 주차이다 보니 팀 단위로 질문하기가 어려웠다.

팀 프로젝트도 있는만큼 좋은 분위기 속에서 좋은 결과를 낼 수 있었으면 좋겠다.

내일도 힘내자!

 

 

 

 

 

댓글