조건문 : 어떠한 조건에 따라 실행 할 문장이 달라지는 것, 그 조건이 True인지 False 인지를 구분하여 실행한다.


1. if , else 문

if문의 기본 형태

if(조건)
{
	조건이 True일시 실행되는 부분
}

if문의 기본 형태를 적어드렸는데요. 여기서 조건이라는 부분을 주목 해보셔야 합니다.

"조건이 True 일 때" 라는 부분에서 우리는 이 조건이 Boolean 값을 도출 해야 한다는 것을 알 수 있습니다.

[C#_4]에서 보았던 논리연산자 와 관계연산자가 이 if(조건 )부분에 많이 사용됩니다.

예시를 들어보겠습니다.

namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            int a = 10, b = 5;

            if(a>b)
            {
                Console.WriteLine("a는 b보다 크다.");
            }

            if(a<b)
            {
                Console.WriteLine("b는 a보다 크다.");
            }
        }
    }
}

예시코드를 보면 아래쪽 if문은 전혀 필요가 없는 부분인 걸 알 수 있습니다.

조건이 False라서 실행되지 않을 뿐더러 굳이 쓰지 않아도 될 조건을 하나 더 적었다는 부분에서 입니다.

a와 b는 3가지 경우가 있습니다. a가 b보다 크거나, 작거나, 같다. 인데요.

무작위 숫자 a,b가 서로 같지 않을 때 조건은 두가지로 줄어듭니다. 크거나 또는 그 반대이거나.

이 부분을 우리는 굳이 조건을 적어주지 않고 else로 대체할 것 입니다. 

if (조건)
{
    조건이 True일 경우 실행할 문장
}
else
{
    if절의 조건이 False일 경우 실행할 문장
}

(if - else의 기본형태)

namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            int a = 10, b = 50;

            if(a>b)
            {
                Console.WriteLine("a는 b보다 크다.");
            }
            else
            {
                Console.WriteLine("b는 a보다 크거나 같다.");
            }
        }
    }
}

else란?  내가 적어준 조건이 False일 때 실행되는 문장을 나타냅니다.

위 코드에서는 b를 50으로 바꾸어 보았습니다.

if문에서의 조건문이 False가 되면서 else문으로 넘어가게 됩니다.

이후 else출력이 진행됩니다.

 

하지만 우리가 항상 이렇게 두 가지 상황으로만 조건을 나누어 볼 수는 없죠.

더 많은 상황이나 조건을 고려해야 한다면 어떻게 해야 할까요?

그래서 우리는 else if문을 사용해야 합니다.

if(조건)
{
	if조건이 True일 때 실행되는 문장
}
else if(조건)
{
	if조건이 False이고 else if조건이 True일 때 실행되는 문장 
}
else
{
	위 모든 조건들이 False일 때 실행되는 문장
}

(else if의 기본형태)

위 형태를 따라 예를 코드로 작성해보면

namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            int a = 10, b = 5;

            if(a>b)
            {
                Console.WriteLine("a는 b보다 크다.");
            }
            else if(a<b)
            {
                Console.WriteLine("b는 a보다 크다.");
            }
            else
            {
                Console.WriteLine("a와 b는 같다!");
            }
        }
    }
}

의 형태가 될 수 있을 것 입니다.

그렇다면 else if문은 하나만 적을 수 있는 걸까요? 코드로 보겠습니다.

namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            int a = 10;
            int b = 10;

            if (a > b)
            {
                Console.WriteLine("a가 b보다 큽니다");
            }
            else if (a < b)
            {
                Console.WriteLine("a가 b보다 작습니다");
            }
            else if (a == b)
            {
                Console.WriteLine("a와 b는 같습니다");
            }
            else if (a + b == 20)
            {
                Console.WriteLine("a + b는 20입니다");
            }
            else
            {
                Console.WriteLine("?????");
            }
        }

    }
}

위 코드를 잘 보고 실행시켜보면 뭔가 이상한 부분이 있을 겁니다.

바로 4번째 else if문 a + b == 20 의 조건이 True임에도 불구하고 실행되지 않은 것 인데요.

이걸로 우리는 else if문은 위에서 부터 조건을 검사하여

가장 먼저 True인 코드를 실행하고 나머지 코드를 건너뛴다는 것을 알 수 있게 되었습니다.

 

※물론 if문장 안에 if, else if, else문을 넣는 것도 else문 안에 if, else if, else를 넣는 것도 가능합니다.

※이를 다중 if문이라고 합니다.

더보기
namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            int a = 10;
            int b = 10;

            if (a > b)
            {
                Console.WriteLine("a가 b보다 큽니다");
            }
            else
            {
                if(a<b)
                {
                    Console.WriteLine("a는 b보다 작습니다.");
                }
                else
                {
                    Console.WriteLine("a는 b와 같습니다.");
                }
            }
            
        }

    }
}

2. switch

switch문 또한 조건을 보고 True, False를 검사할 때 사용됩니다.

switch (조건)
{
    case 상수:
        실행코드;
        break;

    case 상수:
        실행코드;
        break;

    default:
        실행코드;
        break;
}

switch의 기본형태

 

if문이 조건을 그대로 써주었다면 switch문은 조건에 식을 넣고 그 값을 case 상수 부분에 넣어

True일 경우 코드를 실행합니다. 그 후 break; 를 통해서 switch문을 빠져나오게 됩니다.

만일 case 상수 부분이 모두 False가 된다면 default로 넘어가게 됩니다.

즉 default 부분이 if문의 else 부분인 것 입니다.

 

switch문의 예제를 보겠습니다.

namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            int a = 3;

            switch(a%2)
            {
                case 0:
                    Console.WriteLine("a는 짝수");
                    break;
                default:
                    Console.WriteLine("a는 홀수");
                    break;

            }
        }

    }
}

 3 % 2의 값은 1로 첫번째 case 문에 해당하지 않습니다.

모든 case문에 해당하지 않기 때문에 default로 넘어가게 되어 a는 홀수 가 출력됩니다.

 

※ switch()에 들어가는 모든 조건이 꼭 숫자일 필요는 없습니다.

※ stirng, char, bool값 역시 가능합니다.

더보기
namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            char day = 'D';

            switch(day)
            {
                case 'm':
                    Console.WriteLine("Monday");
                    break;
                case 't':
                    Console.WriteLine("Tuesday");
                    break;
                case 'w':
                    Console.WriteLine("Wednesday");
                    break;
                case 'T':
                    Console.WriteLine("Thursday");
                    break;
                case 'f':
                    Console.WriteLine("Friday");
                    break;
                case 'W':
                    Console.WriteLine("Weekend");
                    break;
                default:
                    Console.WriteLine("???");
                    break;
                
            }
        }

    }
}

코드에서 보는 char 변수 day는 D를 가지고 있다.

모든 case문에 속하지 않는 D를 조건으로 가진 Switch가 각 case들을 돌아본 뒤 모두 아닌 것이라 판단하고

default를 출력한 모습을 볼 수 있다.

 

1. 출력문 정리

[C#_2]에서 했던 Console.WriteLine() 과 Console.Write() 를 상기해 보자면

namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Hello World!"); //줄바꿈 O
            Console.Write("Hello");            //줄바꿈 X
        }
    }
}

였습니다.

줄바꿈의 차이였었죠.

 

이후 [C#_3]에서 했던 변수 형태의 출력을 사용해보면

namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            String str = "Hello World!";

            Console.WriteLine(str);
        }
    }
}

의 형식으로 변수에 담아 출력하는 것 이었습니다.


2. 입력문

입력문은 두 가지로 나뉩니다.

Console.Read() 와 Console.ReadLine() 인데요. 출력문에서 모양의 차이가 있던 것처럼 여기도 같은 차이가 있는 것 같네요! 하지만 이 두 가지의 기능은 현저히 차이가 납니다.

Console.Read() 는 '문자'를 받는 입력문

Console.ReadLine()은 "문자열"을 받는 입력문

이라는 부분에서 차이가 나는데요.

우선 Console.Read()를 알아보겠습니다.

namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.Write("정수를 입력해주세요 : ");
            int user = Console.Read();

            Console.WriteLine(user);
        }
    }
}

이 코드를 실행해보시면 제 설명과 다르게 무언가 어긋나 있는 것을 알 수 있습니다.

분명히 저희는 1을 입력받았고 출력 역시 1이 나와야 하는데 49라는 수가 나왔네요.

이는 '아스키 코드' 라는 것으로 컴퓨터가 자동 변환하는 것 때문인데요!

우리가 1이라고 명시한 수를 컴퓨터는 컴퓨터만의 언어인 49 라고 명시했기 때문입니다!

코드로 다시 보자면

namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.Write("정수를 입력해주세요 : ");
            int user = Console.Read();

            Console.WriteLine();

            Console.Write("입력한 user의 아스키 코드 : ");
            Console.WriteLine(user);
            Console.Write("입력한 문자 출력 : ");
            Console.WriteLine((char)user); //강제 형 변환
        }
    }
}

※ 1를 입력받고 컴퓨터가 아스키코드로  변환하는 것 까지 확인 

      이 후 강제 형변환을 통해 아스키코드 49를 문자로 변환시킨 코드와 결과

 

아스키 코드: https://terms.naver.com/entry.naver?docId=2270339&cid=51173&categoryId=51173

 

ASCII

초창기에는 다양한 방법으로 문자를 표현했는데, 호환 등 여러 문제가 발생했다. 이런 문제를 해결하기 위해 ANSI에서 ASCII(American Standard Code for Information Interchange)라는 표준 코드 체계를 제시했고

terms.naver.com

 

자 그럼 진짜 정수를 받고 싶다면 우리는 어떤 방식을 이용해야 할까요?

위 코드처럼 강제 형변환으로 일단 보이기는 원하는대로 보여주게 만들어도 컴퓨터가 사용하는 방식은

입력받기 ─> 아스키코드로 변환 ─> 강제형변환으로 인한 변환

이라서 우리가 원하는 '값'으로써의 역할을 하기 어렵습니다.

심지어 우리는 정수를 받거나 문자를 받을 때 한자릿수만 받는경우가 드물기도 하지요.

그래서 우리는 입력을 받을 때 문자열을 입력받는 Console.ReadLine() 을 사용할 것 입니다.

namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.Write("정수를 입력해주세요 : ");
            int user = int.Parse(Console.ReadLine());

            Console.WriteLine();

            Console.Write("내가 입력한 수 : ");//입력한 수가 그대로 나오는 것을 확인 할 수 있다.
            Console.WriteLine(user);

        }
    }
}

위 코드에서 문자열을 입력받는 Console.ReadLine() 를 int.Parse를 사용하여 

입력한 문자열을 정수로 바꾸어주는 것을 볼 수 있습니다.

(파싱에 관해서는 차후 다시 다룰 것 이기에 여기서는 넘어가도록 하겠습니다.)


3. 연산자 수식 연산자, 증감 연산자, 관계 연산자, 할당 연산자, 논리 연산자 등
3-1. 수식 연산자

수식 연산자에는 더하기, 빼기, 곱하기, 나누기, 나머지 를 구하는 식이 있습니다.

분류 기능
+ 피연산자 끼리의 덧셈 A + B
- 왼쪽 피연산자에서 오른쪽 피연산자를 뺄셈 A - B
* 피연산자 끼리의 곱셈 A * B
/ 왼쪽 피연산자를 오른쪽 피연산자로 나눗셈 A / B
% 왼쪽 피연산자를 오른쪽 피연산자로 나눈 후 나머지 A % B

위 표는 그 기능과 식을 정리한 것 입니다. 이를 코드로 보면

namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            int A = 100;
            int B = 10;

            Console.WriteLine($"A + B : {A + B}"); //덧셈
            Console.WriteLine($"A - B : {A - B}"); //뺄셈
            Console.WriteLine($"A * B : {A * B}"); //곱셈
            Console.WriteLine($"A / B : {A / B}"); //나눗셈
            Console.WriteLine($"A % B : {A % B}"); //나머지

        }
    }
}

($은 문자열 보간으로 아래에서 설명하겠습니다.)

→결과


3-2. 증감연산자

증감연산자는 피연산자를 1만큼 증가시키는 증가연산자, 피연산자를 1만큼 감소시키는 감소연산자가 있습니다.

분류 기능
전위 증감 피연산자의 값을 1만큼 증가 A++;
피연산자의 값을 1만큼 감소 A--;
후위 증감 피연산자의 값을 1만큼 증가 ++A;
피연산자의 값을 1만큼 감소 --A;

위 표를 코드로 보자면

namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            int a = 10;

            a++;

            Console.Write("전위 증가 :");
            Console.WriteLine(a);

            a--;

            Console.Write("전위 감소 :");
            Console.WriteLine(a);

            --a;
            Console.Write("후위 감소 :");
            Console.WriteLine(a);

            ++a;
            Console.Write("후위 증가 :");
            Console.WriteLine(a);

        }
    }
}

이 코드의 결과는

언뜻 보면 다른게 없어보이지만 전위증감과 후위증감은 큰 차이가 있습니다.

전위증감은 우선 피연산자의 값을 증가시키거나 감소시킨 뒤 문장을 실행하고

후위증감은 문장을 먼저 실행하고 피연산자의 값을 증가시키거나 감소시킨다는 것입니다.

namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            int a = 5;
            int b = 5;

            Console.WriteLine($"a - b : {a - b}");

            Console.WriteLine($"--a - b: {--a - b}");
            //문장 실행전에 1을 감소하고 문장을 실행시킴
            
            a++;//a복구
            Console.WriteLine();
            
            
            Console.WriteLine($"a-- - b : {a-- - b}");//후위
            //문장을 실행하고 1을 감소시킴
            Console.WriteLine($"(a - b : {a - b}");

        }
    }
}


3-3. 관계 연산자

관계 연산자는 두 피연산자간의 관계를 나타내며 결과는 Boolean 값으로 도출해줍니다.

분류 기능
< 왼쪽 피연산자가 오른쪽 피연산자 보다 작으면 True 크면 False A < B
> 왼쪽 피연산자가 오른쪽 피연산자 보다 크면 True 작으면 False A > B
== 양쪽 피연산자가 서로 같으면 True 다르면 False A == B
!= 양쪽 피연산자가 서로 다르면 True 같으면 False A != B
>= 왼쪽 피연산자가 오른쪽 피연산자와 같거나 크면 True 작으면 False A >= B
<= 왼쪽 피연산자가 오른쪽 피연산자와 같거나 작으면  True 크면 False A <= B

이를 코드로 활용해보면

namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            int a = 5, b = 10;


            Console.WriteLine(a < b); // 5 < 10, True
            Console.WriteLine(a > b); // 5 > 10, False
            Console.WriteLine(a == b); // 5 == 10, False
            Console.WriteLine(a != b); // 5 != 10, True
            Console.WriteLine(a >= b); // 5 >= 10, False
            Console.WriteLine(a <= b); // 5 <= 10, True

        }
    }
}

이렇게 boolean값을 확인할 수 있습니다.


3-4. 대입연산자

왼쪽 피연산자에 오른쪽 피연산자를 대입하는 연산자입니다.

우리가 기본적으로 알고있는 대입은 '=' 하나입니다. 변수에 값을 줄 때 사용하고있었는데요.

int a = 10;

대입연산자는 이처럼 대입해줄 때 대입과 동시에 연산을 진행하는 것을 말합니다.

분류 기능
= 오른쪽 피연산자를 왼쪽 피연산자에 할당 A = B
+= 왼쪽 피연산자에 오른쪽 피연산자를 더하고 그 값을 왼쪽 피연산자에 할당 A += B
-= 왼쪽 피연산자에 오른쪽 피연산자를 빼고 그 값을 왼쪽 피연산자에 할당 A -= B
*= 왼쪽 피연산자에 오른쪽 피연산자를 곱하고 그 값을 왼쪽 피연산자에 할당 A *= B
/= 왼쪽 피연산자에 오른쪽 피연산자를 나누고 그 값을 왼쪽 피연산자에 할당 A /= B
%= 왼쪽 피연산자에 오른쪽 피연산자를 나눈 나머지를 구하고
그 값을 왼쪽 피연산자에 할당
A %= B
namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            int a = 10, b = 5;

            a += b;
            Console.WriteLine(a); // a = 10 + 5; 결과: 15
                                  //    (a) + (b)
            a -= b;
            Console.WriteLine(a); // a = 15 - 5; 결과: 10
                                  //    (a) - (b)
            a *= b;
            Console.WriteLine(a); // a = 10 * 5; 결과: 50
                                  //    (a) * (b)
            a /= b;
            Console.WriteLine(a); // a = 50 / 5; 결과: 10
                                  //    (a) / (b)
            a %= b;
            Console.WriteLine(a); // a = 10 % 5; 결과:0
                                  //    (a) % (b)
        }
    }
}


3-5. 논리 연산자

논리연산자는 위 관계연산자 처럼 그 값이 Boolean값으로 나옵니다.

 

종류는 3가지고 And 연산자 , Or연산자, Not 연산자 가 있습니다.

And연산자 ( 논리곱 연산자 = && )
A B A && B
참(True) 참(True) 참(True)
참(True) 거짓(False) 거짓(False)
거짓(False) 참(True) 거짓(False)
거짓(False) 거짓(False) 거짓(False)

A와 B 모두 True 여야 결과가 True인 것을 알 수 있다.

 

Or 연산자 ( 논리합 연산자 = || )
A B A || B
참(True) 참(True) 참(True)
참(True) 거짓(False) 참(True)
거짓(False) 참(True) 참(True)
거짓(False) 거짓(False) 거짓(False)

Or 연산자는 두 피연산자중 하나라도 True 라면 True이다.

 

Not 연산자 ( 부정연산자 = ! )
A !A
참(True) 거짓(False)
거짓(False) 참(True)

Not 연산자는 피연산자가 True 라면 False를 도출하고

피연산자가 False라면 True를 도출한다.

 

위 표들을 코드로 보자면

namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            int a = 10, b = 5;

            Console.WriteLine(a > 5 && b > 10); // True && False; 결과: False
            Console.WriteLine(a >= 10 || b >= 10); // True || False; 결과: True
            Console.WriteLine(!(a < b)); // !(False) 결과: True
        }
    }
}

로 모든 결과가 Boolean으로 도출된 것을 볼 수 있습니다.


3-6. 비트 연산자

비트연산자는 비트를 다루는데에 사용되는 연산자입니다.

논리연산자와 마찬가지로 3가지로 나뉘며 종류 역시 And 연산자, Or연산자, Not 연산자 로 같습니다.

비트연산자 ( & , | , ^ ) 
분류 기능
& 두 피연산자의 대응되는 비트에 논리곱(AND) 수행 A & B
| 두 피연산자에 대응되는 비트에 논리합(OR) 수행 A | B
^ 두 피연산자와 대응되는 비트에 베타적 논리합(XOR) 수행 A ^ B
  • & 연산자는 양쪽 비트가 모두 1이어야만 결과가 1이 되고, 그렇지 않으면 결과가 0이 됩니다.
  • | 연산자는 양쪽 비트 중 하나라도 1이면 결과가 1이 됩니다.
  • ^ 연산자는 양쪽 비트가 서로 달라야 결과가 1이 됩니다.
namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            int a = 5, b = 10;

            Console.WriteLine(a & b);
            Console.WriteLine(a | b);
            Console.WriteLine(a ^ b);
        }
    }
}

→ 결과

→이유!

사실 비트연산자는 이 이유를 알아야 왜 이 값이 나오는지 알게되는데

이 칸들을 좌측부터 128  64  32  16  8  4  2  1 의 8칸입니다. (2진수)

1로 표기되어있는 칸들의 수를 더하면 15라는 값이 나온것을 알 수 있습니다.


4. 문자열 보간

문자열 보간($) ?

문자열 보간이라는 것은 우리의 출력 코드가 평소

namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            string a = "one";
            string b = "two";

            Console.WriteLine("숫자 1은 영어로 {0}, 숫자 2는 영어로 {1}", a, b);
            // 결과: 숫자 1은 영어로 one, 숫자 2는 영어로 two
        }
    }
}

이런식으로 작동 하고 있었다면 

namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            string a = "one";
            string b = "two";

            Console.WriteLine($"숫자 1은 영어로 {a}, 숫자 2는 영어로 {b}");
            // 결과: 숫자 1은 영어로 one, 숫자 2는 영어로 two
        }
    }
}

Console.WriteLine 이후 ()의 내부 "" 의 외부에 $ 기호를 붙혀서 더욱 간편하게 사용할 수 있도록 하는 것 입니다.

  • Console.WriteLine() 사용시 내부에 "" 를 넣는다
  • -> Console.WriteLine(" ")
  • 큰 따옴표 외부에 $를 넣는다.
  • -> Console.WriteLine($" ")
  • 내부에 적고싶은 문자들의 결합을 적는다.
  • -> Console.WriteLine($" 숫자 1은 영어로 ")
  • 변수를 적고싶다면 문자열 내부에 {} 로 경계를 만들어 넣어준다
  • -> Console.WriteLine($" 숫자 1은 영어로 {a} ")

'C#' 카테고리의 다른 글

[C#_6] 반복문(for,foreach,while,do while)  (0) 2021.09.24
[C#_5] 조건문 (if, else, switch)  (0) 2021.09.23
[C#_3] 변수, 자료형  (0) 2021.09.12
[C#_2] 콘솔 출력  (0) 2021.09.07
[C#_1] C# 설치  (0) 2021.09.07
1.변수

 

저번 시간에는 출력에 관하여 코딩을 배워보았습니다. 이번 시간에는 변수와 자료형에 관하여 배워보도록 하겠습니다.

변수와 자료형에 관해서 배우려면 우선 변수를 알아야 하는데 이 [변수라는 것은 상자와 같습니다.]

각 변수는 하나의 값을 담을 수 있으며 그 값은 계속 변할 수 있습니다.

그리고 그 값에 따라 변수의 형태 (Type) 가 정해지게 됩니다.

이러한 부분에 대해 코드로 보자면

int a;
double b;
char c;

와 같은 형태로 볼 수 있는데 코드를 해석해보자면

 

(변수의 형태) (변수 이름) ; 으로 해석할 수 있습니다.

int 라고 하는 변수 형태에 [a라는 이름으된 상자]를 마련했다고 생각하면 편합니다.

 

이러한 상자에는 값을 담을 수 있는데 그 형태를 코드로 보자면

int a = 1;
double b = 1.2;
char c = 'A';

※코드를 보면  '=' 이라는 표시가 있는데 이는 수학의 '=' 과는 다른 의미 입니다.

   수학에서 '=' 은 '같다' 의 의미지만 코딩에서 '='은 [왼쪽에 있는 값을 오른쪽의 변수(상자)에 담는다.]는 의미 입니다. 

 

이 코드를 해석해보면

(변수의 형태) (변수의 이름) = 1

(변수의 형태) (변수의 이름) = 1.2;

(변수의 형태) (변수의 이름) = 'A';  인 것입니다.

 


2. 자료형

기본 자료형(Primitive Data Type) : 개발자가 별도의 코드를 만들지 않아도 언어에서 자체적으로 제공하는 데이터 형식

자료형 형식 범위 크기 부호
sbyte System.Sbyte -128~127 (0을 포함하기 때문) 8bit (1byte) O
byte System.Byte 0~255 8bit (1byte) X
short System.Int16 -32,768 ~ 32,767 16bit (1byte) O
ushort System.Uint16 0 ~ 65,535 16bit (1byte) X
int System.Int32 -2,147,483,648~2,147,483,647 32bit (1byte) O
uint System.UInt32 0 ~ 4,294,967,295 32bit (1byte) X
long System.Int64 -9,223,372,036,854,775,808 ~
 9,223,372,036,854,775,808
64bit (1byte) O
ulong System.UInt64 0 ~ 18,446,744,073,709,551,615 64bit (1byte) X
float System.Single ±1.5e-45 ~ ±3.4e38 4byte





double System.Double ±5.0e-324 ~ ±1.7e308 8byte
decimal System.Decimal ±1.0 × 1028  ±7.9 × 1028 16byte
char System.Char U+0000 ~ U+ffff 유니코드 16bit
string System.String   8bit (1byte)
bool System.Boolean   8bit (1byte)

 


2-1. 정수 자료형

 

using System;

namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            byte a = 200;
            sbyte b = -126;
            short c = 30000;
            ushort d = 40000;
            int e = 100000000;
            uint f = 1000000000;
            long g = 1000000000000000000;
            ulong h = 10000000000000000000;

            Console.WriteLine(a);
            Console.WriteLine(b);
            Console.WriteLine(c);
            Console.WriteLine(d);
            Console.WriteLine(e);
            Console.WriteLine(f);
            Console.WriteLine(g);
            Console.WriteLine(h);
        }
    }
}

위 코드는 정수 자료형 (byte, sbyte, short, ushort, int, uint, long, ulong) 에 관한 입력과 출력입니다.

 

설정해둔 숫자 외에 추가로 0을 붙이거나 1을 올려서 적으면 오버플로우나 언더플로우가 발생하게 됩니다.

 

※ 오버플로우 : 데이터 형식의 범위를 넘어가는 값일 경우 오버플로가 발생하여 제일 작은 음수 값으로 넘어가는 것.

※ 언더플로우 : 데이터 형식의 범위를 넘어가는 값일 경우 언더플로가 발생하여 제일 큰 양수 값으로 넘어가는 것.

 

 

namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
           byte a = 255;
           sbyte b = -128;

            a++;//실행시 오버플로우가 발생하여 0부터 시작
            b--;//실행시 언더 플로우가 발생하여 128부터 시작

            Console.WriteLine(a);
            Console.WriteLine(b);
        }
    }
}

위 코드를 실행시켰을 때 우리는 a값에는 오버플로우가 발생하는 것을 b값에는 언더플로우가 발생하는 것을 볼 수 있습니다.

오버플로우 , 언더플로우 발생 모습


2-2. 실수 자료형
using System;

namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            float a = 123.567891011f;
            double b = 1234.567878910111213;
            decimal c = 1234.56789101112131415161718m;

            Console.WriteLine(a);
            Console.WriteLine(b);
            Console.WriteLine(c);
        }
    }
}

위 코드는 실수 자료형 (float, double, decimal) 을 입출력 하는 코드입니다.

정수 자료형의 코드와 비슷해보이지만 잘 보면 다른게 있는데 바로 float자료형의 값의 끝에는 f가 붙고

decimal 자료형의 끝에는 m이 붙어있는 것을 볼 수 있습니다.

C#의 실수 자료형의 기본은 double 이며 자료값에 f, m 을 붙히지 않으면 double 자료형으로 인식이 되는데 이를 방지하고 '이 자료는 float의 형태입니다.' 또는 'decimal의 형태입니다.'를 나타내어 주기 위해서는 f,m을 반드시 붙혀야합니다.

 

만약 이를 제거하고 실행하게 될 시

라고하는 오류를 볼 수 있으므로 꼭 float 자료형에는 'f', decimal자료형에는 'm'을 붙혀주셔야 합니다.


2-3. 문자, 문자열 자료형
namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            char a = 'A';           //문자
            String b = "Hello!";    //문자열
            
            
            Console.WriteLine(a);
            Console.WriteLine(b);
        }
    }
}

※문자(char) : 문자는 'A' , 'b' , 'a' , '!' 등과 같은 단일 기호를 말한다.

※문자열(String) : 문자열은 "Hello" , " World !" 와 같은 두개 이상의 문자 조합으로 만들어진 것이다.

 

문자와 문자열의 구분은 반드시 해주어야 하는데 이를 

작은 따옴표 '  ' (문자) 큰 따옴표 "  " (문자열)로 구분해주어야 합니다.


2-4. 논리 자료형
namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            bool a = true;
            bool b = false;

            Console.WriteLine(a);
            Console.WriteLine(b);
        }
    }
}

논리(boolean) 자료형은 참과 거짓을 나타내는 자료형입니다.

보시면 문자열(String) 자료형과 같이 비슷하게 문자열 값을 그대로 도출하는 것 처럼 보이실 수 있겠지만

따옴표의 존재 없이 변수에 참(true) 과 거짓(false)를 담고 있습니다.


2-5. 객체(object) 자료형

객체(object) 자료형은 각각의 존재를 다루는 것 입니다.

namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            object a = 12345678910; //정수
            object b = 12345.678910;//실수
            object c = true;        //논리
            object d = "안녕하세요";//문자열

            Console.WriteLine(a);
            Console.WriteLine(b);
            Console.WriteLine(c);
            Console.WriteLine(d);
        }
    }
}

코드에서 볼 수 있는 것 처럼 Object 안에는 정수, 실수, 논리, 문자열 이 모두 들어가 있고 제대로 출력되고 있습니다.

※모든 자료형이 가능

이렇게 사용 할 수 있는 이유는 object(객체 자료형)가 모든 자료형의 조상격이라고 할 수 있기 때문입니다.

(※object라는 것에 대해서 제대로 이해하기 위해서는 객체, 클래스에 대한 이해가 동반되어야 하기에

      차후 추가로 설명하도록 하겠습니다.)


여기까지 C# 변수와 자료형에 대해 다루어보았습니다.

다음 게시물은 C# "출력문" 입니다. 

'C#' 카테고리의 다른 글

[C#_6] 반복문(for,foreach,while,do while)  (0) 2021.09.24
[C#_5] 조건문 (if, else, switch)  (0) 2021.09.23
[C#_4] 출력문, 입력문, 연산자, 문자열 보간  (0) 2021.09.21
[C#_2] 콘솔 출력  (0) 2021.09.07
[C#_1] C# 설치  (0) 2021.09.07

[C#_1] 에서 프로그램 다운로드를 배웠다면 오늘은 새 프로젝트 만들기와 콘솔 출력을 배워볼 것 입니다.

vs2019 새 프로젝트 만들기

 

새 프로젝트 만들기를 클릭하면 나오는 창 ↓

[카테코리 창에 C# -> Windows -> 콘솔] 을 선택 후 아래 나오는 [콘솔 앱] 을 선택.

새 프로젝트 구성 창에서 [프레임 워크의 버전을 확인]하고 [만들기]

 

위 단계를 전부 완료하면 나오는 창

창이 이렇게 나왔다면 완성이다.

 

 

1. 코드 작성 - 출력

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Hello World!");
        }
    }
}

위 코드와 같이 static void Main(string[] args) 내부에 

Console.WriteLine("Hello World!") 를 입력합니다.

 

이 후 [Ctrl + Shift + B] 를 누르거나, 상단 메뉴에 [빌드 -> 솔루션 빌드] 를 눌러

코드에 문제가 있는지 없는지 검사해줍니다.

성공시
실패시

성공 하면 빌드 성공에 1이 올라가며 실행 가능하다고 나온다. [실행 : Ctrl + F5]

이를 실행해보면

Hello World! 가 출력되는 것을 볼 수 있다.

 

 

2. 코드 작성 - 출력 2

 

콘솔 출력에는 한가지 방법이 더 있는데 이는 Console Write() 이다.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.Write("Hello World!");
        }
    }
}

Console Write() 의 경우는 WriteLine 과 다른것이 있는데 바로 줄바꿈이다.

Console Write("Hello world!")를 출력 해보면 Console.WriteLine("Hello World!")

와 다르게 줄바꿈 없이 출력되는 것을 볼 수 있다.

이렇게 출력했다면 성공이다.

'C#' 카테고리의 다른 글

[C#_6] 반복문(for,foreach,while,do while)  (0) 2021.09.24
[C#_5] 조건문 (if, else, switch)  (0) 2021.09.23
[C#_4] 출력문, 입력문, 연산자, 문자열 보간  (0) 2021.09.21
[C#_3] 변수, 자료형  (0) 2021.09.12
[C#_1] C# 설치  (0) 2021.09.07

C#으로 프로그래밍 또는 공부를 하기 전에 C#을 사용할 수 있는 프로그램을 다운 받아 줍니다.

Visual studio 2019 다운로드 : https://visualstudio.microsoft.com/ko/vs/

 

Visual Studio 2019 | 무료 다운로드

Visual Studio에서 코드 완성, 디버깅, 테스트, Git 관리, 클라우드 배포를 사용하여 코드를 작성합니다. 지금 무료로 커뮤니티를 다운로드하세요.

visualstudio.microsoft.com

Visual studio 2019 community 를 다운받았다면 그 뒤 .net 데스크톱 개발을 체크하시고 설치해줍니다.

저는 원래 사용하던 프로그램들이 있어 여러개가 체크 되어있지만 사용자 분들은 .NET 데스크톱 개발 만 체크해주시면 됩니다.

 

설치 후 실행 화면 (아래 사진 첨부)

 

'C#' 카테고리의 다른 글

[C#_6] 반복문(for,foreach,while,do while)  (0) 2021.09.24
[C#_5] 조건문 (if, else, switch)  (0) 2021.09.23
[C#_4] 출력문, 입력문, 연산자, 문자열 보간  (0) 2021.09.21
[C#_3] 변수, 자료형  (0) 2021.09.12
[C#_2] 콘솔 출력  (0) 2021.09.07

설치가 전부 끝났다는 기준 하에 우리는 파이썬의 기본을 먼저 알아야 한다.

컴퓨터라는 것은 기본적으로 연산장치이다.

즉 기본적인 연산은 어디에서나 가능하다는 이야기이다.

+, - , *, /, % 의 기본 연산 등 컴퓨터는 가능하나 우리 눈에 보이진 않는다.

그래서 먼저 우리 눈에 보일 수 있도록 'Print' 의 사용법은 먼저 익혀야 한다.

 

우리는 국민 기본 출력 문장 Hello World 를 먼저 출력해 봐야 합니다.

print("Hello World")

print 의 기본 구조는 

print() <--- 이다.

문자열을 넣어줄 때는  " " 나 ' ' 를 이용하여 문자열인 것을 표시하고

그 내부에 문자로 내용을 채우면 원하는 대로 출력되는 것을 볼 수 있다.

hello world

 

그렇다면 수를 출력해보고 싶다면 어떠한 방식으로 해야 할까?

print("1")

 

이러한 방식으로 수를 출력해본다면 이것은 수가 아닌 문자로써 인식이 된다.

이렇게 사용된 문자는 우리가 더하기나 빼기와 같은 연산이 불가능하다.

따라서

print(1)

과 같이 문자열로써의 출력이 아닌 숫자 자체로써의 출력이 가능하도록 " " 를 빼고 사용해주어야 한다.

# 다양한 자료형 출력 ( 숫자, 문자열 )
print(1)    # 정수 : 소수점이 없는 수
print(1.2)  # 실수 : 소수점이 있는 수
print(1-2j) # 복소수
print('Hello') # 문자열
print("World") # 문자열

정확한 조건은 곧 정확한 출력으로 나온다.

# 이후는 주석으로 컴퓨터는 인식하지 않음

이러한 python의 print는 확장성 또한 뛰어난데 위 자료들을 예로 들면

print('hello',1,1.3,"world")

를 한 번에 출력하는 것도 가능하다.

 

이처럼 컴퓨터가 인식 할 뿐더러 우리 눈에도 결과가 보일 수 있도록 print 를 배워보았다.

'Python' 카테고리의 다른 글

[python_1] 파이썬 시작  (0) 2021.09.04

"Python" 을 알고 배우고 실습하기 위해서 우리는 python 사용이 가능한 프로그램을 설치해야한다.

https://www.python.org/ (파이썬 홈페이지)에서 다운을 받아서 'IDLE' 로 사용하거나(사진 첨부)

파이썬 튜터(http://pythontutor.com/) 또는 ideone(https://ideone.com/) 같은 웹사이트에서도

파이썬 코드를 작성하고 실행해 볼 수 있다.

본인은 기본적으로 IDLE을 다운받아 visual studio code에 python 파일을 적용시켜 사용한다.(아래 사진 첨부)

 

파이썬은 초보자가 재미를 붙히며 시작하기 좋고 VSC(Visual Studio Code)역시 깔끔하게 잘 되어있으니 처음으로 시작하거나 코딩에 재미를 붙히고 싶다면 추천하는 프로그램이다.

'Python' 카테고리의 다른 글

[Python_2] 파이썬 기초  (0) 2021.09.04

+ Recent posts