본문 바로가기
C#/C# 강의 정리

C# 기초 정리 (정의, 변수)

by 민트코코넛 2020. 12. 25.
728x90
반응형

 § 기초 §

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

namespace C#_Basic                              
{
    class Program                                   
    // class : main함수를 감싸고 있는 공간    // C의 구조체 개념
    {
        static void Main(string[] args)             
     // string : 문자열 | [] : 배열 | args : 매개변수
        {
            System.Console.WriteLine("Hello World");       
            // Console.WriteLine = printf와 같은 개념
            Console.Write("Hello World");    
            // System.Console. ~  : 기본 형태. but, System을 using으로 불러왔기 때문에, 사용할때는 생략해도 된다.
            // Write : 쭈욱 연결해서 작성
            // WriteLine : 줄바꿔서 작성
        }
    }
}

using : 기존에 만들어져 있거나, 사용자가 임의로 만든 Library 내부에 있는 내용을 사용하겠다라는 의미. | 일종의 namespace

 

namespace : class, structure(구조체) 등을 관리하는 일종의 모음집. | 각기 다른 스크립트라도, namespace가 동일하다면, 같은 공간내에 있는 것으로, 각기 참조가 가능하다.

프로젝트명으로 관리.

 

class, struct : field, method 등을 모아놓은 장소.

 

//  : 한 줄 주석

/* */ : 여러 줄 주석

 

주석 단축키 : ctrl k c ( 주석 생성 ) / ctrl k u ( 주석 제거 ) -> block 단위도 가능
주석 단축키 : ctrl e c ( 주석 생성 ) / ctrl e u ( 주석 제거 ) -> block 단위도 가능

 

§ 리터럴 ( 접미사 ) § 보수법 §

리터럴 : 변수를 더 잘 구분하기 위해서, 숫자의 끝부분에 붙이는 접미사

보수법 : < 참조URL : https://zapiro.tistory.com/entry/컴퓨터의-음수-표현법보수법 >

using System;   // 회색 글자 : 선언은 되었으나, 아직 사용되지 않고 있다는 의미 
                // 흰색 글자 : 선언 되고, 사용되고 있다는 의미

namespace Basic
{
    class ClassBasic
    {
        static void Main(string[] args)     // sv + tab + tab
        {
            // Console.WriteLine( args[1] );      // cw + tab +tab
                       
            // 리터럴 ( 접미사 )
            // int, double, string, bool, unsigned int, unsigned long, 8진수, 10진수 : 접미사 없이 디폴트값 사용
            // 부동소수점 사용하는 실수형은 접미사 필요
            // 2진수 : 0b
            // 16진수 : 0x
            // 진수 출력
            byte A = 120;
            byte B = 240;                   // 10진수
            Console.WriteLine("A : {0} \nB : {1}", A, B);
            // string format()  배열의 순서에 맞게 추출하겠다는 의미.

            byte C = 0b000_00111;          // 2진수
            Console.WriteLine($"C : {C}");
            // $ 을 사용하여 포맷팅
            // _ : 사용하더라도, 인식되지 않으므로, 자리수를 계산할때 사용하면 좋다

            byte D = 0xFF;                  // 16진수
            Console.WriteLine($"D : {D}");

            // 진법 변환
            int E = 15;
            Console.WriteLine(Convert.ToString(E, 2));      // 10진수 -> 2진수 변환
            Console.WriteLine(Convert.ToString(E, 8));      // 10진수 -> 8진수 변환
            Console.WriteLine(Convert.ToString(E, 16));     // 10진수 -> 16진수 변환

            // 보수법
            // -5 -> 2진수 변환
            // 0000 0101 : 1의 보수    :  5
            // 1111 1010 : 2의 보수    : -6
            // 1111 1011 :             : -5
            // 컴퓨터의 계산법 : + 만 가능하다
            // 5 - 3 구하기 -> 5 + (-3)
            // 0000 0101    :  5
            //      +
            // 1111 1101    : -3
            //      =
            // 1111 1011    : -5

            // 연산자
            bool    b  = true; // false // 참과 거짓 판별
            // 정수형  
            // 부호가 있는 정수형
            short   sh = 100;           // 16bit 정수형 ( + - )
            int     i  = 100;           // 32bit 정수형 ( + - )
            long    l  = 1000000;       // 64bit 정수형 ( + - )
            sbyte   sb = 125;           // -128 ~ 127   // 범위 이탈시, 빨간 줄과 함께 에러 발생

            // 부호가 없는 정수형       // unsigned를 u로 줄여서 사용
            ushort  us = 100;           // 16bit 정수형 ( + )
            uint    ui = 100;           // 32bit 정수형 ( + )
            ulong   ul = 1000000;       // 64bit 정수형 ( + )
            byte    by = 0x0E;          // 8bit   // 0 ~ 255     // 0x0E : 16진수 사용값
                      
            // 실수형             // float도 있으나, 대체로 double을 사용한다
            // 고정 소수점
            // 부동 소수점
            float   f  = 3.01f;          // 32bit 실수형   // 초기화 다음에 f를 붙여줘야 인식된다.
            double  d  = 3.14259d;       // 64bit 실수형   // 접미사 d 필요하지만, 생략 가능 -> default 부여
            decimal dc = 3.14957242m;    // 128bit 실수형  // 접미사 m 필요
        }
    }
}

 

§ Variable §

◈ value type : 숫자, 문자, bool

- Stack Memory 저장

◈ ref type : string, object

- Heap Memory 값 저장, Stack memory에는 해당 변수와 주소 저장.

- 지정 변수를 통해서 Stack의 주소로 접근, Heap 내부의 값 출력

using System; 

namespace Basic
{
    class ClassBasic
    {
        static void Main(string[] args)
        {
            // 문자형
            string  s  = "JO";          // 문자형      // 유니코드 문자열
            char    c  = '까';          // 16 bit 유니코드 -> 2byte

           
            object  ob = "";            // 어떤 타입이라도 모두 사용가능함. 값 입력시, 타입 결정
            var     v  = 32;            // 값 입력시, 타입 변환, 결정. 지역변수형

            // NULL 과 0 의 차이
            // null : 값과 형태가 완전히 존재하지 않음
            // 0 : 형태는 있으나, 값만 없음
            // int     aa = null;      // int는 null을 허용하지 않는 타입으로 null을 변환할 수 없음
            int?    a_ = null;      // 다만, int + ? 을 사용하면, 값 null을 사용할 수 있다.
            // double  cc = null;      // double도 null을 허용하지 않음
            double? c_ = null;      // double + ? 도 null 사용이 가능해진다.
            string  bb = null;

            // Type의 Max, Min
            int ii = int.MaxValue;
            Console.WriteLine(ii);
            int ii_ = int.MinValue;
            Console.WriteLine(ii_);
            byte i_i = byte.MaxValue;
            Console.WriteLine(i_i);

            byte a1 = 255;
            sbyte b1 = (sbyte)a1;     // cast 연산 -  형 변환
            // 보수법 표현
            // 1111 1111 : -1
            // 0000 0000 : 1의 보수
            // 0000 0001 : 2의 보수
            Console.WriteLine(a1);
            Console.WriteLine(b1);

            // Overflow
            uint c1 = uint.MaxValue;
            Console.WriteLine(c1);
            c1 = c1 + 1;
            Console.WriteLine("결과 : {0}",c1);
            // Underflow
            uint c2 = uint.MinValue;
            Console.WriteLine(c2);
            c2 = c2 - 152;
            Console.WriteLine("결과 : {0}",c2);
            byte c3 = 0;
            Console.WriteLine(c3);
            c3--;
            Console.WriteLine("결과 : {0}", c3);
            string s1= "졸려......";
            Console.WriteLine(s1);

            float fa = 69.6875f;
            Console.WriteLine("fa : {0}", fa);
            double da = (double)fa;
            Console.WriteLine("da : {0}",da);
            Console.WriteLine("69.6875 == b : {0}", 69.6875 == da);
            float x = 0.1f;
            Console.WriteLine("x : {0}", x);
            double y = (double)x;
            Console.WriteLine("y : {0}", y);
            Console.WriteLine("0.1f == y : {0}", 0.1f == y);

            // 부동 소수점 10진수 -> 2진수 변환
            // 69.6875
            // 0100 0101.1011 -> 2진수 변환
            // 1.0001011011 x 2^6 -> 정규화
            // 0001011011 -> 가수부에 입력 : 소수점이하 부분 전체
            // 6 + (bias)127 = 133
            // 1000 0101
            // 실제 메모리에 저장되는 형태

            // 상수
            // 변수의 value가 변경되지 않는 것
            const int a6 = 3;
            // a6 = 5;
            Console.WriteLine(a6);

            // var
            // 의도치 않은 형식의 데이터를 읽거나, 할당하는 일 차단
            // 선언과 동시에 초기화 필수
            // 지역변수로만 사용된다
            var a7 = 50;
            Console.WriteLine("{0}\n{1}", a7.GetType(), a7);
            var b6 = "양아지";
            Console.WriteLine("{0}\n{1}", b6.GetType(), b6);

            // 결론 : C에서 하던대로 하라...
        }
    }
}

 

 

§ 변수 형변환 2가지 방법 §

◈ 변수.ToString();

◈ Convert.To전환타입(변수);

using System; 

namespace Basic
{
    class ClassBasic
    {
        static void Main(string[] args)
        {
            // 형변환 - Data Type 변환
            int a2 = 123;
            string b2 = a2.ToString();  
            // 정수형 a2의 값 123을 ToString()을 사용하여 문자형 b2에 삽입
            Console.WriteLine(b2);
            
            float a3 = 5.15f;
            string b3 = a3.ToString();
            // 실수형 a3를 문자형 b3로 변환
            Console.WriteLine(b3);

            string a4 = "19970302";
            int b4 = Convert.ToInt32(a4);
            // 문자형 a4를 컨버터를 통하여 정수형 b4로 변환
            Console.WriteLine(b4);

            string a5 = "0.900123";
            double b5 = double.Parse(a5); 
            Console.WriteLine(b5);

            Console.WriteLine(a2.GetType());    // 변수 a2의 타입확인
            Console.WriteLine(a4.GetType());
        }
    }
}
728x90

'C# > C# 강의 정리' 카테고리의 다른 글

C# 배열  (0) 2020.12.27
C# 함수  (0) 2020.12.27
C# mutable type, immutable type  (0) 2020.12.27
C# 문자열  (0) 2020.12.27
C# 연산자  (0) 2020.12.25