본문 바로가기
배워봅시다/기타(언어,prg등)

C#_2일차

by JJOMKKO 2024. 1. 2.
반응형

using System;

namespace DataTypeTest
{
    internal class DataTypeTest
        // 우측 솔루션 탐색기 에서 이름 변경하면 클래스명이 변경됨
    {
        static void Main(string[] args)
        {
            // 자료형(데이터 타입)
            // 정수형: int / sbyte / short / long => signed(부호있는)
            // => sbyte(1바이트) : -128 ~ 127 사이의 정수 *그 이상이 되면 오버플로우 발생
            // => short(2바이트) : -32,768 ~ 32,767 사이의 정수
            // => int (4바이트) : -2,147,483,648 ~ 2,147,483,647 사이의 정수
            // => long(8바이트) : -9,223,372,036,854,775,808 ~ 9,223372,036,854,775,807 (-2의64승 ~ 2의64승 까지)
            // 메모리 값을 위해 적절한거 사용하기. 너무 큰거 쓰면 버벅거려

            // unsigned(부호없는) => byte / ushort / uint / ulong
            // => byte(1바이트) : 0~255 사이의 음이 아닌 정수 

            sbyte a = -10;
            byte b = 40;
            Console.WriteLine("a = " + a + ", b= " + b);

            short c = -30000;
            ushort d = 60000;
            // c = 60000;  //에러. 상수값이 short의 데이터 크기를 넘어감.
            Console.WriteLine("c = " + c + ", d= " + d);
            
            int e = -100000000;  // 0이 7개
            uint f = 3000000000; // 0이 8개
            Console.WriteLine("e = " + e + ", f= " + f);
            // e = 2147483648; //에러 => int의 데이터 크기 벗어남

            long g = -500000000000;  // 0이 11개
            ulong h = 2000000000000000000; // 0이 18개. 주민등록번호 같은거 일 때
            Console.WriteLine("g = " + g + ", h= " + h);

            // 부동소수점 : 소수점이 고정되어 있지 않고 움직이면서 수를 표현한다. 고정 소수점보다 더 많은 숫자를 커버 가능. 정밀하다.
            // 실수형 : float / double / decimal
            // float(4바이트): 단일 정밀도 부동소수점 형식
            // => 유효 자릿수 6~9
            // double(8바이트): 복수 정밀도 부동 소수점 형식
            // => 유효 자릿수 15~17
            // decimal : 29자리 데이터를 표현할 수 있는 소수 형식
            // => 통화량 등 금융 관련 데이터 저장에 유용

            float x = 3.14f; //3.14만 놓으면 double 이라고 에러남. 뒤에 f 리터럴을 넣어줘야함. 대소문자 무관.
            //리터럴: 숫자, 문자열 등 고정된 값. 코드에 직접 포함되는 값.
            double y = 3.15;
            decimal z = 3.141592m; //m 을 넣어줘야함
            Console.WriteLine("x = " + x + ", y = " + y + ", z = " + z);

            // ""=문자열, +=연결, z=변수값
            // 컴파일을 한다 = 컴퓨터가 알아듣는 언어로 바꾸어준다.
            // 빌드한다 = 프로그램을 사용 가능한 형태로 만든다. 빌드를 하면 .exe 파일이 생긴다. (디버깅 했을때 보이는 경로)


            // 문자열 : string => 1개 이상의 문자를 사용 / "" 사용. 흔히 참조 자료형이라고 함. 클래스 라고 보면된다.
            // 문자 : char(2바이트) => 단, 1개의 문자 사용 / ''사용

            string s = "안녕하세요.";
            char ch = '안';
            char ch1 = '녕';
            char ch2 = '하';
            char ch3 = '세';
            char ch4 = '요';

            Console.WriteLine(s);
            Console.WriteLine(ch + ch1 + ch2 + ch3 + ch4); //ch 안에 있는 유니코드 값을 다 더해서 표시됨. 문자도 숫자도 표시 가능
            
            Console.Write(ch); //이렇게 하면 한 단어씩 그대로 기록됨. 줄바꿈 없음.
            Console.Write(ch1);
            Console.Write(ch2);
            Console.Write(ch3);
            Console.Write(ch4);
            Console.WriteLine();  // 한 줄 띄기

            // 논리형 : bool(1바이트) => true / false 값 사용
            bool isTest = true;  //is를 붙여준다.
            Console.WriteLine(isTest);

            // objest : 어떤 값이라도 할당할 수 있는 자료형. (클래스)
            // objest 형식은 참조 형식 =>  힙에 데이터를 할당한다.
            // 스택 메모리 = 데이터가 저장이 되면 저장되는 순서로 쌓이고, 제거도 순서대로 되는데 참조형들은 힙 메모리에 저장된다. 스택메모리에는 뭐..가 저장된다고?

            object obj = 1;
            Console.WriteLine(obj);
            obj = 3.14;
            Console.WriteLine(obj);
            obj = "Hello";
            Console.WriteLine(obj);
            obj = 'h';
            Console.WriteLine(obj);
            obj = true;
            Console.WriteLine(obj);

            // e = 3.14; => e는 정수형 변수인데 실수를 저장하려고 해서 에러. 데이터 타입이 선언된 자료형은 해당 데이터 타입으로만 가능  *obj 제외
            // e = "Hello"; 에러.
            e = 'c'; // 'c'는 아스키코드 값으로 저장 가능.
            Console.WriteLine(e);
            



        }
    }
}

 

 


using System;

namespace _4._ConstTest
{
    internal class Program
    {
        //열거형 Season 정의 **위치 주의. 클래스 아래 써줘야한다.
        enum Season 
        { 
            spring, //0 (자동으로 값 지정됨. 단어 위에 마우스 올리면 값 보임)
            summer, //1
            autumn, //2
            winter //3
        }

        enum Fruits
        {
            apple = 10, //값을 직접 할당 가능
            orange = 100,
            tomato =20
        }
        static void Main(string[] args)
        {
            Console.WriteLine("Hello, World!");  //빨간줄 에러일 때 알트+엔터로 유징시스템 사용해주기. 이 줄은 지워도 됨.

            // 상수 : 변하지 않는 값
            // const 자료형 상수명 = 값;
            const int a = 3;
            // const int b;
            // b = 4;  // 에러: 상수는 선언과 동시에 초기화가 되어야 함.
            // a = 5; // 에러: 상수는 값을 변경 시킬 수 없다. 

            const double d = 3.14;
            const string s = "abcdef";
            Console.WriteLine("a=" + a + ",d=" + d + ",s=" + s);

            // 열거 형식 : 상수들의 집합.  클래스 위치에 써줘야함
            // => 기본적으로 연결된 상수값은 int 형이다.
            // => 0으로 시작하고텍스트 순서에 따라서 1씩 증가하게 된다.
            // => class 내부 또는 namespace 내부에서 선언 해야한다.
            // => 새로운 타입(자료형)을 정의하는 것과 같음.
            // enum 열거형식명 {상수1, 상수2, ....}
            // 연결된 상수값을 명시적으로 지정도 가능함

            // 열거 형식 변수 정의 => 열거형식명 변수형;
            Season season;
            season = Season.spring;
            Console.WriteLine(season); // 열거형 멤버 이름으로 출력
            season = Season.winter;
            Console.WriteLine(season);
            Console.WriteLine(Season.summer);

            Fruits fruits;
            fruits = Fruits.apple;
            Console.WriteLine(fruits);

            // var 키워드 : 변수 선언시 형식을 직접 선언한 것처럼 컴파일러가 형식을 결정.
            // 컴파일러가 알아서 데이터 타입을 지정해주는 것을 키워드 라고 함.
            // => var 변수명 = 값;
            // => var 키워드는 선언과 동시에 초기화 해야한다.

            int num = 20;
            var num1 = 10;
            Console.WriteLine(num1);

            string str = "둘리";
            var str1 = "고길동";
            Console.WriteLine(str1);
            


        }
    }
}

 

 


 

using System;

namespace castingTest
{
    internal class Program
    {
        static void Main(string[] args)
        {
            // "+"의 역할: 숫자+숫자 => 산술 연산
            //숫자 + 문자 => 연결 연산
            Console.WriteLine("5 + 3 =" + 5 + 3); // 5 + 3 = 53 으로 출력됨.
            Console.WriteLine(5 + 3); //8 출력됨
            Console.WriteLine(5 + 3 + "= 5 + 3"); // 8= 5 + 3 으로 출력됨. + 연산자 진행방향은 왼쪽->오른쪽이다.
            Console.WriteLine("5 + 3 =" + (5 + 3)); // 5 + 3 =8 로 출력됨. () 가 있으면 우선순위 적용됨.
            Console.WriteLine("5 * 3 =" + 5 * 3); // 5 * 3 =15. * 가 우선순위 적용됨.
            Console.WriteLine("5 / 3 =" + 5 / 3); // 5 / 3 =1 로 나옴 정수와 정수의 연산은 값도 정수로 나옴.
            Console.WriteLine("5.0 / 3 =" + 5.0 / 3); // 5.0 / 3 =1.6666666666666667 로 나옴. 실수와 정수의 계산은 정수를 실수로 인식해준다.
            // Console.WriteLine("5 - 3 = " + 5 - 3) 에러: 문자열("5 - 3 = " + 5)에서 -3을 빼라는 얘기가 되니까.
            Console.WriteLine("5 - 3 = " + (5 - 3)); // 정상 계산됨
            Console.WriteLine("5 % 3 = " + 5 % 3); // 5 % 3 = 2 로 나옴. %는 나머지를 구하는 연산자이다.**중요
            Console.WriteLine("5.0 / 3.0 = " + 5.0 / 3.0);
            Console.WriteLine("5 / 3.0 = " + 5.0 / 3.0); // 형변환. 실수->정수 자동, 실수->정수 자동변환 불가
            Console.WriteLine("=======================================");


            // 형변환 : 변수 또는 상수 타입의 변수를 다른 타입으로 변환하는 것. 암시적 형변환 => 자동 형변환, 명시적 형변환 => 강제 형변환(식이 존재함)
            // 암시적형변환(자동 형변환) : 특수 문구 필요 없음
            // =>자료형의 크기가 서로 다른 경우 작은 쪽의 타입을 큰 쪽으로 자동 변환하는 것.
            int myInt = 36;
            float myFloat = 16.46f;
            myFloat = myInt + myFloat; // 연산이 일어나기 전에 myInt는 float 타입으로 변환된다.
            Console.WriteLine(myFloat);

            long l = 134901930;
            short s = 516;
            double d = l - s;
            Console.WriteLine(d);
            // 134901414 출력됨. 그냥 lond 타입 값에서 S값을 뺀것임. "-" 연산자는 빼기만 한 것
            // "=" 연산자가 연산 결과를 double 타입으로 변환한다.

            d = d / 123.456;
            Console.WriteLine(d); // 1092708.44673405914 출력됨. 실수가 됐으니까

            d = d / 123;
            Console.WriteLine(d); // 8883.808510033 출력됨.


            long number = 139401930;
            string text = "점수 : " + number;
            // => + 연산자를 이용해 문자렬과 문자열이 아닌 타입을 연결하면 자동으로 문자열로 변환한다.
            //text = number; 에러: 문자인데 string 타입으로 넣으려고 하니까
            Console.WriteLine(text);

            Console.WriteLine("A + 32 =" + ('A' + 32));
            Console.WriteLine("a - 32 =" + ('a' - 32));
            Console.WriteLine("=====================================");

            Console.WriteLine("A + 32 = " + (Char)('A' + 32)); //97 앞에 Char 붙어있으니까 변형해서 a로 나타내짐
            Console.WriteLine("a - 32 = " + (Char)('a' - 32));

            // 강제 형변환(명시적 형변환) : 캐스트 식이 필요함
            // => (변환할 타입)변수
            float myFloatValue = 10.53f;
            Console.WriteLine(myFloatValue);
            int myIntValue =(int)myFloatValue;
            Console.WriteLine("myFloatValue is "+ myFloatValue);

            //Int형 값을 byte 타입에 캐스팅을 한 경우 오류는 나지 않지만, 최대값을 초과하게 되면 변수 값이 최솟값으로 초기화 된다.
            int myIntValue2 = 365;
            byte myByte = (byte)myIntValue2;
            Console.WriteLine(myByte);
            myIntValue2 = 256;
            myByte = (byte)myIntValue2;
            Console.WriteLine(myByte);
            myIntValue2 = 257;
            myByte = (byte)myIntValue2;
            Console.WriteLine(myByte);

            myInt = 10;
            myByte = (byte)myInt;
            double myDouble = (double)myByte; //명시적 형변환도 가능함
            bool myBool = true;
            //bool myBool = (bool)myDouble; 에러:myDouble 값이 bool에 들어가지 못함
            //myByte = (Byte)myBool; 에러: bool 타입은 Double 타입으로 변환 못함.
            short myShort = (short)myInt;
            char myChar = 'x';
            string myString = "false";
            // myBool = (bool)mystring; 에러: 
            //myString = (string)myBool; 에러:
            //myString = (string)myChar 에러
            myString = myChar.ToString(); //해당 객체를 문자열로 바꾸는 메서드라서 에러 안남
            // => 모든 객체가 가지고 있다.
            myString = myInt.ToString();
            long myLong = (long)myInt; //long이 int 보다 크니까 자동 형변환
            decimal myDecimal = (decimal)myLong;

            myString = myString + myInt + myByte + myDouble + myChar;
            


        }
    }
}

 


 

using System;

namespace _6._StringTest1
{
    internal class StringTest1
    {
        static void Main(string[] args)
        {
            string str = "SeoulIt_Academy";

            //IndexOf() : 현재 문자열 내에서 찾고자 하는 지정된 문자 또는 문자열의 위치를 찾음. => 첫번째 글자는 0부터 시작
            // => 대소문자 구분하고 문자열이 없을 경우 -1을 반환한다.
            Console.WriteLine(str.IndexOf("S"));

            //LastIndexOf() : 현재 문자열 내에서 찾고자 하는 지정된 문자 또는 문자열의 위치를 뒤에서 부터 찾는다.
            Console.WriteLine(str.LastIndexOf("a"));

            // StarsWith() : 현재 문자열이 지정된 문자열로 시작하는지 평가
            Console.WriteLine(str.StartsWith("S"));
            Console.WriteLine(str.StartsWith("s"));

            // EndsWith() : 현재 문자열이 지정된 문자열로 끝나는지 평가
            Console.WriteLine(str.EndsWith("my"));
            Console.WriteLine(str.EndsWith("m"));

            // Contains() : 현재 문자열이 지정된 문자열을 포함하는지 평가
            Console.WriteLine(str.Contains("It"));

            // Replace() : 현재 문자열에서 지정된 문자열을 다른 문자열로 바꾼다.
            Console.WriteLine(str.Replace("It","it"));

            // ToLower () : 대문자 -> 소문자
            // ToUpper () : 소문자 -> 대문자
            Console.WriteLine(str.ToLower());

            // Insert () : 현재 문자열에서 지정된 위치에 지정된 문자열을 삽입
            Console.WriteLine(str.Insert(15, "홍대"));
            // Console.WriteLine(str.Insert(16, "홍대")); 에러

            //Remove() : 현재 문자열에서 지정된 위치로부터, 지정된 수만큼의 문자 삭제

            str = "   SeoulIt_Academy    ";
            // Trim() : 현재 문자열의 앞, 뒤 공백 제거
            Console.WriteLine(str.Trim());

            // TrimStrat () : 현재 문자열의 앞 공백 제거
            // TrimEnd () : 현재 문자열의 뒷 공백 제거

            //Split("구분자") : 현재 문자열을 지정된 문자를 기준으로 분리
            // => 분리된 문자열은 배열로 저장됨.
            str = "Seoul_It_Academy";
            Console.WriteLine(str.Split("_")); //System.String[] 이렇게 나옴.
            Console.WriteLine(str.Split("_")[0]); //지정한 문자열 기준으로. 배열의 0번째 있는것 출력
            Console.WriteLine(str.Split("_")[1]);
            Console.WriteLine(str.Split("_")[2]);

            // Substring() : 현재 문자열의 지정된 위치로부터 지정된 수만큼 문자열 추출
            Console.WriteLine(str.Substring(8));
            Console.WriteLine(str.Substring(9,7));

            // CompareTo() : 문자열 비교 => 같으면 0 / 다르면 1 또는 -1
            // Equals() : 문자열 비교 => 같으면 true / 다르면 false
            str = "토마토";
            Console.WriteLine(str.CompareTo("바나나"));
            Console.WriteLine(str.CompareTo("토마토"));
            Console.WriteLine(str.Equals("바나나"));

            //Length  : 문자열의 길이 (개수)
            str = "SeoulIt_Academy";
            Console.WriteLine("str의 글자 개수: " + str.Length);





        }
    }
}

 

 


using System;

namespace StringTest2
{
    internal class Program
    {
        static void Main(string[] args)
        {
            Console.Write("Hello~~");
            string str = "C#";
            Console.WriteLine(str);

            // Format() 메소드 사용 : {인덱스[,정렬][:서식문자]}
            // => 서식문자
            // D/d(대소문자 구분 안함) : 10진수 / x : 16진수
            // n : 1000단위 구분기호(",") / f : 고정 소수점
            // e : 지수 / c : 통화서식 지정 / g : 숫자 일반형식
            // p : 백분율 서식 지정 / r : 실수(라운드 트립 서식지정]

            Console.WriteLine("어제부터 {1} {0}을 공부합니다."
                , "우리는", str);
            Console.WriteLine("어제부터 {0, -7} {1}을 공부합니다."
                , "우리는", str);
            Console.WriteLine("어제부터 {0, -4} {1}을 공부합니다."
                , "우리는", str);
            Console.WriteLine("어제부터 {0, 7} {1}을 공부합니다."
                , "우리는", str);

            int num = 1229;
            string str2 = string.Format("Format() 메소드 연습중 : {0, -7:d}, {1}"
                , num, str);
            Console.WriteLine(str2);
            str2 = string.Format("Format() 메소드 연습중 : {0, -7:x}, {1}"
                , num, str);
            Console.WriteLine(str2);
            str2 = string.Format("Format() 메소드 연습중 : {0, -7:c}, {1}"
               , num, str);
            Console.WriteLine(str2);

            str2 = string.Format("Format() 메소드 연습중 : {0, -7:n}, {1}"
               , num, str);
            Console.WriteLine(str2);

            str2 = string.Format("Format() 메소드 연습중 : {0, -7:p}, {1}"
              , num, str);
            Console.WriteLine(str2);

            str2 = string.Format("Format() 메소드 연습중 : {0, -7:f}, {1}"
             , num, str);
            Console.WriteLine("Format() 메소드 연습중 : {0, -7:f}, {1}"
             , num, str);

            int a = 10;
            int b = 20;
            Console.WriteLine("a = " + a + ", b = " + b);
            Console.WriteLine("a = {0}, b = {1}", a, b);


        }

    }
}

 

 

반응형

댓글