//출력
// 줄바꿈
{
    Console.WriteLine("Hello World!");
    Console.WriteLine("My Name is Ju");

    Console.WriteLine(10);
    Console.WriteLine(3.141592);
    Console.WriteLine(3 + 3);
}

// 한줄 출력
{
    Console.Write("Hello! ");
    Console.Write("We are Learning ");
    Console.WriteLine("at TeamSparta");
}

// 입력
{
    Console.Write("Enter your name: ");
    string name = Console.ReadLine();
    Console.WriteLine("Hello, {0}!", name);
}


// Split 함수 문자열 나누기 + 형변환
{
    Console.Write("Enter two numbers: ");
    string input = Console.ReadLine();    // "10 20"과 같은 문자열을 입력받음
    // { "10", "20" }
    string[] numbers = input.Split(' ');  // 문자열을 공백으로 구분하여 배열로 만듦
    int num1 = int.Parse(numbers[0]);     // 첫 번째 값을 정수로 변환하여 저장
    int num2 = int.Parse(numbers[1]);     // 두 번째 값을 정수로 변환하여 저장

    int sum = num1 + num2;                // 두 수를 더하여 결과를 계산

    Console.WriteLine("The sum of {0} and {1} is {2}.", num1, num2, sum);
}


// var 키워드
{
    var num = 10;         // int 자료형으로 결정됨
    var name = "kero";   // string 자료형으로 결정됨
    var pi = 3.141592;    // double 자료형으로 결정됨
}


// 산술 연산자
{
    int num1 = 20, num2 = 10;

    Console.WriteLine(num1 + num2);
    Console.WriteLine(num1 - num2);
    Console.WriteLine(num1 / num2);
    Console.WriteLine(num1 * num2);
    Console.WriteLine(num1 % num2);
}

// 관계 연산자
{
    int num1 = 20, num2 = 10;

    Console.WriteLine(num1 == num2);
    Console.WriteLine(num1 != num2);
    Console.WriteLine(num1 > num2);
    Console.WriteLine(num1 < num2);
    Console.WriteLine(num1 >= num2);
    Console.WriteLine(num1 <= num2);
}

// 논리 연산자
{
    int num3 = 15; 
    0 <= num3 <= 20

    Console.WriteLine(0 <= num3 && num3 <= 20); // 0과 20 사이에 포함되면
    Console.WriteLine(0 > num3 || num3 > 20); // 0 ~ 20 사이에 포함되지 않으면

    Console.WriteLine(!(0 <= num3 && num3 <= 20)); // 0과 20 사이에 포함되어있지 않으면
}


// 비트 연산자
{
    int a = 0b1100; // 12 (2진수)
    int b = 0b1010; // 10 (2진수)

    int and = a & b; // 0b1000 (8) 두 비트 값이 모두 1일 때 1을 반환
    int or = a | b; // 0b1110 (14) 두 비트 값 중 하나라도 1일 때 1을 반환
    int xor = a ^ b; // 0b0110 (6) 두 비트 값이 서로 다를 때 1을 반환
    int not = a; // 0b0011 비트 값의 보수(complement)를 반환

    int c = 0b1011; // 11 (2진수)
    int leftShift = c << 2; // 0b101100 (44) 비트를 왼쪽으로 이동
    int rightShift = c >> 1; // 0b0101 (5) 비트를 오른쪽으로 이동

    int d = 0b1100; // 12 (2진수)
    int bit3 = (d >> 2) & 0b1; // 0 (3번째 비트)
    d |= 0b1000; // 0b1100 | 0b1000 = 0b1100 (12)
}

// 연산자 우선순위
{
    1.괄호(): 괄호로 감싸진 부분은 가장 높은 우선순위로 먼저 계산됩니다.
    2.단항 연산자: 단항 연산자들(++, --, +, -, !등)은 괄호 다음으로 높은 우선순위를 가집니다.
    3.산술 연산자: 산술 연산자들(*, /, %, +, -)은 단항 연산자보다 우선순위가 낮습니다.
    4.시프트 연산자: 시프트 연산자(<<, >>)는 산술 연산자보다 우선순위가 낮습니다.
    5.관계 연산자: 관계 연산자들(<, >, <=, >=, ==, !=)는 시프트 연산자보다 우선순위가 낮습니다.
    6.논리 연산자: 논리 연산자들(&&, ||)는 관계 연산자보다 우선순위가 낮습니다.
    7.할당 연산자: 할당 연산자들(=, +=, -=, *=, /= 등)는 논리 연산자보다 우선순위가 낮습니다.
}


// 문자열 처리 기능 메서드
// 문자열 생성
{
    string str1 = "Hello, World!"; // 리터럴 문자열 사용
    string str2 = new string('H', 5); // 문자 'H'를 5개로 구성된 문자열 생성
}

// 연결 - 포멧팅을 더 자주 사용한다
{
    string str1 = "Hello";
    string str2 = "World";
    string str3 = str1 + " " + str2;
}

// 분할
{
    string str = "Hello, World!";
    string[] words = str.Split(','); // str 문자열을 쉼표(,)로 구분
}

// 검색
{
    string str = "Hello, World!";
    int index = str.IndexOf("World"); // str 문자열에서 "World" 문자열의 첫 번째 인덱스를 찾아 index 변수에 저장
}

// 대체
{
    string str = "Hello, World!";
    string newStr = str.Replace("World", "Universe"); // str 문자열에서 "World" 문자열을 "Universe" 문자열로 대체한 새로운 문자열 newStr을 생성
}

// 변환
{
    string str = "123";
    int num = int.Parse(str);
}
{
    int num = 123;
    string str = num.ToString();
}

// 비교
{
    string str1 = "Apple";
    string str2 = "Banana";
    int compare = string.Compare(str1, str2); // 사전식 비교. str1이 str2보다 작으면 음수, 크면 양수, 같으면 0이 나온다.
}

// 포멧팅
// 형식화
{
    string name = "John";
    int age = 30;
    string message = string.Format("My name is {0} and I'm {1} years old.", name, age);
}
//보간
{
    string name = "John";
    int age = 30;
    string message = $"My name is {name} and I'm {age} years old.";
}

 

 

Parse랑 Convert의 차이

파싱 실패했을 때, Parse는 FormatException을 내보내고 Convert는 기본값(int같은 경우 0)을 내보낸다.즉, Parse는 예외처리가 되고 Convert는 안된다. 데이터가 항상 명확하고 원하는 값이라면 Parse를 사용하고 불확실할 때는 Covert를 사용한다.

+ Recent posts