백견불여일타 C# 입문 - 2. 변수 사용법, 바구니에 이름표 붙이기

Soonyoung Kim·2021년 7월 5일
0

백견불여일타 C#

목록 보기
4/10

Point : #데이터 #변수 #타입 #형-변환 #이름-짓기 #본격적인-프로그램-제작

  • 데이터를 담는 바구니 역할을 하는 변수에 대해 알아보자.
  • 상황별 혹은 데이터의 특성별로 담는 변수 타입의 종류 알아보자

  • 프로그램 동작에서 큰 비중을 차지하는 것이 바로 데이터의 흐름을 파악하고 제어하는 것
  • 변수 : 사용자의 행위 혹은 프로그램이 실행하는 동안의 행위를 기록하는 일
    데이터의 흐름을 파악하기 위해서는 여기 저기 흩어지지 않게 바구니에 담아 놓고 관리하는 것이 중요

변수 : 데이터를 담아내는 바구니

  • 변할 수 있는 수(Data)
  • 변수 타입
  • 변수 명

매개변수

매개변수란, 프로그램이 동작할 때, 함수 등과 같은 기능이 동작할 때, 보조적으로 데이터를 전달하는 기능을 수행합니다. 여기서 함수란, Console.WriteLine 과 같은 문법들을 함수라고 합니다.
함수가 제대로 동작하기 위한 '전달 값'
매개변수는 함수의 기능에 따라 1개가 될 수도 있고, 2개가 될 수도 있고, n개가 될 수도 있다. 프로그램은 0,1,2와 같이 시작한다.

각 코드 줄마다 세미콜론(;)의 의미

세미콜론의 의미는 프로그램에게 하나의 명령을 완료하겠다는 의미

AND와 OR 연산자의 사용법

(1 + 2 == 1) & (1 + 2 == -1) vs (1 + 2 == 1) && (1 + 2 == -1)
  • 연산자 하나 쓴 경우(&), 1+2 = 1 거짓임에도 불구하고 1+2 = -1에 대한 참/거짓을 검사한 후에 로직으로 넘어간다.

  • 연산자 두개 쓴 경우(&&), 1+2=1 이 거짓이기 때문에 그 다음 전제 조건이 아무리 참 이어도 거짓임이 드러났으므로 다음 로직으로 빠르게 넘어간다.

object, var, dynamic의 차이점

  • ToString : 해당 변수 값을 string형으로 변환하겠다는 의미
    object는 데이터에 관계없이 저장 가능. 이 데이터가 정확히 무슨 타입인지 모르는 것..

  • var, dynamic : 데이터 관계없이 저장 가능, 데이터가 무슨 타입인지 판단 가능

    • var : 한번 데이터가 할당되면 다른 타입으로 변경이 불가능
    • dynamic : 데이터가 할당되어도 다른 타입으로 변경이 가능하다
  • 1) 만능 변수 타입인 object의 단점을 보완해서(데이터는 아무거나 담을 수 있지만, 똑똑하게 타입을 구별 못한다는 단점) var 타입이 등장!
    2) var 타입은 한번 데이터를 지정하면 다른 데이터 타입으로 변경이 불가능하다는 것이 아쉬운 점으로 dynamic 타입 등장!

컴파일? 런타임?

  • 컴파일 : 한국사람에게 영어를 통역해주는 것처럼 기계에게 자신들만의 기계어로(컴퓨터는 0과 1로 표현이 됩니다.)로 변역을 해주는 것
    - var는 기계어로 번역되는 동안 해당 변수의 타입이 무엇인지 판단
  • 런타임 : 프로그램이 실행하는 동안을 말하는 것이다.즉, 여러분이 코드 작성을 완료하고 검은색 콘솔창에서의 프로그램 동작 시간을 말한다.
    - dynamic은 프로그램이 실행하면서 자신의 동작 차례가 되었을 때 해당 변수의 타입이 무엇인지 판단

형변환 - 암시적인 형 변환/ 명시적인 형 변환

  • 암시적인 형 변환
    korean, math가 모두 정수 타입이더라도 이 데이터를 double 변수에 할당한다면 값은 double 형으로 인식된다.

  • 명시적인 형 변환
    괄호안에 특정 타입을 명시적으로 선언

  • string형은 int로 '명시적인 형 변환'을 할 수 없다. string과 같은 숫자 형태의 변수 타입이 아닌 것들을 숫자 타입으로 변환하기 위해서는 convert 기능 또는 parse()와 같은 함수를 서용해야 한다.

문자로 구성된 숫자를 형 변환하는 방법

string strNumber = "10";

int convertNumber = Convert.ToInt32(strNumber);
int parseNumber = Int32.Parse(strNumber);
  • string과 같은 숫자 형태의 변수 타입이 아닌 것들을 숫자 타입으로 변환하기 위해서는 Convert 기능 또는 Parse()와 같은 함수를 사용해야 한다.
  • Convert와 Parse는 .NET Framework에서 제공하는 기본 데이터 타입을 변환하는 방식
  • Boolean, Char, Byte, Int, Double 등 여러 가지 변환 가능
Convert.ToDouble("10");
Double.Parse("10");
  • Convert와 Parse의 차이
    NULL값을 어떻게 처리하느냐의 차이
    - Parse : 문자열 값이 NULL인 경우 프로그램에서 에러 발생
    - Convert : 문자열 값이 NULL인 경우, 0으로 반환

NULL의 의미 : 변수에 값이 할당되어 있지 않은 상태를 말합니다. 즉, 껍데기로 싸여 있을 뿐 속에는 아무것도 없는 상태를 말합니다.

지역변수, 전역변수, 그리고 상수

  • 각각의 함수에서 선언된 변수를 내부에서만 사용할 수도, 여러 함수에서 데이터를 공유하며 사용할 수도 있습니다.
  • 전역변수 : 공유할 수 있는 변수
  • 지역변수 : 함수 내부에서만 사용할 수 있는 변수
  • 여러 함수들 바깥에 명시된 변수는 '전역변수', 하나의 함수 안에 명시된 변수는 '지역변수'
  • 변수 : 변할 수 있는 수
  • 상수 : 절대로 변하지 않는 수
    변수 선언하는 앞에 'const'키워드를 사용하면 이 변수는 상수로 인식
    보통 상수는 변하지 않는 수이기 때문에, 여러 함수에 공유를 해서 사용
    따라서, 지역변수보다는 전역변수로 사용

.NET Framework에서 제공되는 변수 타입

  • C#은 .NET Framework 안에 내재되어 있는 언어이다.
    .NET Framework가 C#을 감싸고 있는 구조인 셈이다.

Example1

사용자에게 두개의 수를 입력 받아, 처음 입력한 값이 두번째 입력한 값보다 클 경우 True를 출력하는 프로그램

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

namespace RoadBook.CsharpBasic.Chapter02.Examples
{
    class test
    {
        public void Run()
        {
            /* 
            // 내가 작성한 코드
            Console.WriteLine("숫자를 입력해 보세요!");
            string str1 = Console.ReadLine();
            string str2 = Console.ReadLine();

            int convertStr1 = Convert.ToInt32(str1);
            int convertStr2 = Convert.ToInt32(str2);

            Console.WriteLine("당신이 입력한 값은: {0}, {1}", convertStr1, convertStr2);
    
            if (convertStr1 > convertStr2)
            {
                Console.WriteLine("True");
            }
            */

            //교재
            int number01;
            int number02;

            Console.WriteLine("숫자를 두개 입력하세요 : ");
            number01 = Convert.ToInt32(Console.ReadLine());
            number02 = Convert.ToInt32(Console.ReadLine());

            Console.WriteLine("{0}은 {1}보다 큽니다. (참/거짓 : {2}", number01, number02, (number01 > number02));
        }
    }
}
profile
Sin prisa, sin pausa.

0개의 댓글