ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 다시한번 개발자도전! 3일차 (외부입력받기,연산자,형변환)
    다시한번 개발자도전! 2026. 1. 6. 17:14

     

    어제 일찍잔 덕분에 오늘은 완전 개운하게 수업시작!

    다이소에서 새로산 캠도 설치하고

    오늘두 아좌좌!

     

     


     

    ⌨️사용자 입력 받기 (Console.ReadLine)

    • 사용자가 키보드로 입력한 내용을 문자열(String)로 받아오는 방법
    • Console.ReadLine()은 모든 입력을 문자열로만 받아옴. 숫자로 계산을 하고 싶다면 반드시 형식 변환을 거쳐야 한다.
    • 방법: int.Parse() 또는 Convert.ToInt32() 사용

     

     

    static void Main(string[] args)
    {
        Console.WriteLine("이름을 입력해 주새요");
        string name = Console.ReadLine(); //인풋
    
        Console.WriteLine($"안녕하세요 {name} 님"); //아웃풋
        
         Console.WriteLine("나이를 입력해 주세요");
        string input = Console.ReadLine();
    
        int age =  int.Parse(input);
        Console.WriteLine($"내년에는 {age+1}살이 됩니다.");
    }

     

     

     

     

     

    0️⃣1️⃣이진수(Binary) 다루기

    • 컴퓨터의 언어인 2진수를 사람이 쓰는 10진수로 변환할 때는 Convert 클래스를 사용.
    • 핵심 코드: Convert.ToInt32(입력값, 2); (뒤의 숫자 '2'가 2진수임을 알려줌.)
     static void Main(string[] args)
     {
         Console.Write("2진수를 입력하세요: ");
         string binaryInput = Console.ReadLine();
         int decimalVaue = Convert.ToInt32(binaryInput,2); //2진수를 10진수ㅜ로 변환
    
         Console.WriteLine($"입력한 2진수: {binaryInput}");
         Console.WriteLine($"10진수로 변환: {decimalVaue}");
     }

     

    💡2진수란?

    더보기

    컴퓨터는 전기가 흐르는지(1) 안 흐르는지(0)만 구분할 수 있습니다. 이 두 상태를 조합해 숫자를 표현하는 것이 바로 2진수입니다.

    • 비트(Bit): 0 또는 1이 들어가는 가장 작은 정보 단위
    • 읽는 법: 맨 뒷자리(1)부터 왼쪽으로 갈수록 자릿수 값이 2배씩(1, 2, 4, 8, 16...) 커진다.
    • 예시: 2진수 **1101**은 =   (8x1)+(4x1)+(2x0)+(1x1) =13 이 된다.

     

     

    🔥실습예제🔥

    {캐릭터 이름을 입력하세요: 홍길동

    환영합니다. 홍길동님!

    시작 레벨을 입력하세요: 5

    홍길동님의 시작레벨은  5입니다.}

     

    ⬇️ 실습결과

     static void Main(string[] args)
     {
         Console.Write("캐릭터 이름을 입력하세요: ");
         string name = Console.ReadLine();
         Console.WriteLine($"환영 합니다. {name} 님!");
         Console.Write("시작 레벨을 입력해주세요: ");
         string inputLevel = Console.ReadLine();
         int startLevel = int.Parse(inputLevel);
         Console.WriteLine($"{name} 님의 시작 레벨은 {startLevel} 입니다.");
     }

     


    📋 형식 변환의 종류

    구분 특징 변환 방향 데이터 안전성
    암시적 변환 (Implicit) 컴파일러가 자동으로 변환 작은 타입 → 큰 타입 안전 (데이터 손실 없음)
    명시적 변환 (Explicit) 개발자가 코드로 직접 지정 큰 타입 → 작은 타입 위험 (데이터 손실 가능성)

     

    ⬇️암시적,명시적 변환 예시

    static void Main(string[] args)
    {
        // 1. 암시적 변환: 데이터 범위가 넓은 쪽으로 자동 이동
        int smallNumber = 100;
        long bigNumber = smallNumber;    // int -> long (자동)
        double doubleNumber = smallNumber; // int -> double (자동)
    
        // 2. 명시적 변환: 데이터 범위가 좁은 쪽으로 강제 이동 (캐스팅)
        double pi = 3.14159;
        int intPi = (int)pi;  // 소수점 아래 숫자가 버려짐!
    
        Console.WriteLine($"double {pi}를 int로 변환하면: {intPi}"); // 출력: 3
    }

     

     

    🔢문자열과 숫자 간의 변환

    ㄴ사용자로부터 입력받은 문자열을 계산에 사용하려면 반드시 변환 과정을 거쳐야 합니다.

    • 문자열 → 숫자: int.Parse(), double.Parse() 등을 사용
    • 숫자 → 문자열: 모든 객체에 포함된 .ToString() 메서드 사용

    ⬇️문자열,숫자 변환 예

    static void Main(string[] args)
    {
        // 문자열을 숫자로
        string scoreText = "95";
        int score = int.Parse(scoreText);
    
        // 숫자를 문자열로
        int playerLevel = 50;
        string levelText = playerLevel.ToString();
    }

     

    ⚠️ 형식 변환 시 주의사항 (오류 방지)

    • 데이터 손실: 실수를 정수로 변환 시 소수점이 버려집니다. (9.8 → 9)
    • 오버플로우: 작은 그릇에 너무 큰 숫자를 담으면 값이 왜곡됩니다.
    • 런타임 오류: 숫자가 아닌 문자열(예: "abc")을 int.Parse하면 에러가 발생합니다.

    해결책: int.TryParse 사용

    static void Main(string[] args)
    {
        string text = "abc";
        if (int.TryParse(text, out int num))
        {
            Console.WriteLine($"성공: {num}");
        }
        else
        {
            Console.WriteLine("변환 실패: 숫자가 아닙니다.");
        }
    }

     

     


     

    😊편리한 키워드

    1. var (암시적 로컬 변수)

    • 컴파일러가 대입되는 값을 보고 타입을 자동으로 정해준다. 선언 시 반드시 초기화가 필요함.
     static void Main(string[] args)
     {
    	//var가 자동으로 데이터 타입을 맞춰중
         var name = "Alice"; //문자열
         var age = 25; //정수형
         var isStudant = true;//논리형
     }

     

     

    2. default (기본값 설정)

    해당 데이터 형식의 초기값을 자동으로 넣어줌.

    • 정수형: 0
    • 논리형: false
    • 참조형(문자열 등): null
    static void Main(string[] args)
    {
        int defaultInt = default;  //0
        string defaultString = default; //null
        bool defaultBool = default; //false
    }

     


     

    연산자(Operator)

     

    1. 산술 연산자: 사칙연산과 나머지

    가장 기본이 되는 연산자, 캐릭터의 공격력 계산이나 아이템 분배 등 수치 계산에 사용.

    연산자 기능 예시 (a=10, b=3) 결과
    + 더하기 a + b 13
    - 빼기 a - b 7
    ***** 곱하기 a * b 30
    / 나누기 a / b 3 (몫)
    % 나머지 a % b 1 (나머지
    static void Main(string[] args)
    {
        int a = 10, b = 3;
    
        Console.WriteLine(a + b);
        Console.WriteLine(a - b);
        Console.WriteLine(a * b);
        Console.WriteLine(a / b);
        Console.WriteLine(a % b);
    
    }

     

     

     

    2. 증감 연산자: 전위 vs 후위의 차이

    변수의 값을 1씩 증가(++)시키거나 감소(--). 위치에 따라 실행 순서가 달라지니 주의.

    🔍 전위/후위 비교

    • 후위 증가 (count++): 현재 값을 먼저 사용하고, 그다음에 1을 증가.
    • 전위 증가 (++count): 1을 먼저 증가시키고, 그 결과를 사용.
            static void Main(string[] args)
            {
                int b = 3;
                Console.WriteLine(b++); //후위 증가 값은 3가나옴 
                int b = 3;
                Console.WriteLine(++b); //후위 증가 값은 4이나옴
            }

     

    🔥실습예제🔥

    ===몬스터 처치===

    고블린 처치! (킬 카운트:1)

    오크 처치! (킬 카운트:2)

    드래곤 처치! (킬 카운트:3)

    총 처치 수:

    === 사격 ===

    남은 탄약:30

    발사! 남은 탄약:29
    발사! 남은 탄약:28
    발사! 남은 탄약:27

    === 카운트다운 ===

    // 3
    // 2
    // 1

    발사!

    ⬇️실습결과

    더보기
    static void Main(string[] args)
    {
        // 실전 예제: 게임 카운터
        int killCount = 0;
        Console.WriteLine("\n=== 몬스터 처치 ===");
    
        Console.WriteLine($"고블린 처치! (킬 카운트: {++killCount})");
        Console.WriteLine($"오크 처치! (킬 카운트: {++killCount})");
        Console.WriteLine($"드래곤 처치! (킬 카운트: {++killCount})");
        Console.WriteLine($"총 처치 수: {killCount}마리");
    
        // 남은 탄약
        int ammo = 30;
        Console.WriteLine($"\n=== 사격 ===");
        Console.WriteLine($"남은 탄약: {ammo}");
        Console.WriteLine($"발사! 남은 탄약: {--ammo}");
        Console.WriteLine($"발사! 남은 탄약: {--ammo}");
        Console.WriteLine($"발사! 남은 탄약: {--ammo}");
    
        // 루프 카운터 (간단한 예)
        Console.WriteLine("\n=== 카운트다운 ===");
        int countdown = 3;
        Console.WriteLine(countdown--);  // 3
        Console.WriteLine(countdown--);  // 2
        Console.WriteLine(countdown--);  // 1
        Console.WriteLine("발사!");
    }

     

    3. 비교 및 논리 연산자: 조건문의 핵심

    데이터의 크기를 비교하거나 여러 조건을 조합할 때 사용. 결과값은 항상 **bool(True/False)**로 나옴.

    비교 연산자 (관계형)

    • == (같다), != (다르다), >, <, >=, <=
     static void Main(string[] args)
     {
         //관계형 연산자
         int x = 5;
         int y = 10;
    
         Console.WriteLine(x < y);
         Console.WriteLine(x > y);
         Console.WriteLine(x <= y);
         Console.WriteLine(x >= y);
         Console.WriteLine(x == y); //같냐? f
         Console.WriteLine(x != y); //같지않지않냐? t
     }

     

    논리 연산자

    • && (AND): 둘 다 True여야 True (깐깐한 조건)
    • || (OR): 하나만 True여도 True (너그러운 조건)
    • ! (NOT): True ↔ False 상태 반전
    static void Main(string[] args)
    {
        bool a = true;
        bool b = false;
    
        Console.WriteLine(a && b); // 둘중 하나가 false이기 때문에 false가 나옴
        Console.WriteLine(a || b); // 둘중 하나라도 true 이기 때문에 true가 나옴
        Console.WriteLine(!a); //true의 반대인 false가 나옴
    }

     

     

    4. 비트 연산자: 메모리 효율의 극대화

    데이터를 가장 작은 단위인 비트(0, 1) 수준에서 직접 제어.

    연산자 이름 규칙
    & AND 둘 다 1일 때만 1
    ** ** OR
    ^ XOR 서로 다를 때만 1
    ~ NOT 0과 1을 반전
    static void Main(string[] args)
    {
        int x = 5; // 0101
        int y = 3; // 0011
    
        string binary = Convert.ToString(x & y, 2);
    
        Console.WriteLine($"8비트 : {binary.PadLeft(8, '0')}"); //서로를 곱함
    
        binary = Convert.ToString(x | y, 2);
    
        Console.WriteLine($"8비트 : {binary.PadLeft(8, '0')}");//서로를 더함
    
        binary = Convert.ToString(x ^ y, 2);
        Console.WriteLine($"8비트 : {binary.PadLeft(8, '0')}");//같은건 0 다른건 1
    
        binary = Convert.ToString(~x, 2);
        Console.WriteLine($"8비트 : {binary.PadLeft(8, '0')}"); //0과 1을 바꿈
    }

     

    🚀 시프트(Shift) 연산

    • << (왼쪽): 비트를 왼쪽으로 밀기 (값 2배 증가)
    • >> (오른쪽): 비트를 오른쪽으로 밀기 (값 1/2 감소)
    • 비트를 통째로 옆으로 밀어버리는 연산, 매우 빠른 곱셈/나눗셈 효과가 있다.
    static void Main(string[] args)
    {
        int value = 4; //0100
    
        string binary = Convert.ToString(value << 1, 2);
        //<< >>
        Console.WriteLine($"8비트 : {binary.PadLeft(8, '0')}");
        binary = Convert.ToString(value >> 1, 2);
        //<< >>
        Console.WriteLine($"8비트 : {binary.PadLeft(8, '0')}");
    }

    💡 연산자 우선순위(알면 좋음)

    더보기
    순위 연산자 종류 기호 예시 한줄 설명
    1등 괄호 () 무조건 제일 먼저!
    2등 증감 ++, -- (아까 배운) 1씩 늘리거나 줄이기
    3등 산술 *, /, +, - 일반적인 수학 계산
    4등 비교 >, <, == 크기 비교 (맞나 틀리나?)
    꼴찌 대입 = 최종 결과를 저장하기

     

    2진수랑 비트연산자는 다시해도 어렵운듯..

    하지만 오늘 드디어 이해했다! 오예🤸🏻 🤸🏻 🤸🏻

     

     

Designed by Tistory.