Reference : C# 입문부터 안드로이드, 윈도우 앱(UWP) 동시에 만들기 Xamarin Forms(자마린 폼즈) + Maui(마우이)

https://www.inflearn.com/course/lecture?courseSlug=c-sharp-%EC%9E%90%EB%A7%88%EB%A6%B0-%ED%8F%BC%EC%A6%88&unitId=84981&tab=curriculum 

 

학습 페이지

 

www.inflearn.com

< 콘솔에 출력해보기 >

C#에서 가장 기본적인 출력 방법은 'Console.WriteLine()'과 'Console.Write()' 메소드를 사용하는 것이다.

  • 'Console.WriteLine()' : 출력 후 줄바꿈이 일어난다.
  • 'Console.Write()' : 줄바꿈 없이 출력한다.
Console.WriteLine("Hello, World!");
Console.Write("Hello, C#");

위 코드를 실행하면, 다음과 같은 출력이 콘솔에 나타난다.

Hello, World!
Hello, C#

여기서 "Hello,World!" 다음 새로운 줄에서 "Hello,C#"가 출력되는 것을 볼 수 있다.

< 콘솔에 입력받기 >

C#에서 사용자로부터 입력을 받기 위해서는 'Console.ReadLine()' 메소드를 사용한다.

Console.WriteLine("Enter your name:");
string name = Console.ReadLine();
Console.WriteLine($"Hello, {name}!");

위 코드를 실행하면 콘솔이 사용자로부터 이름을 입력받고, 입력받은 이름을 사용하여 메세지를 출력한다.

< 데이터 타입 알아보기 >

int number = 10;
double pi = 3.141592;
char character = 'A';
bool isTrue = true;
string name = "C#";

< 데이터타입 사용방법과 변수 상수 선언 > 

C#에서의 변수와 상수 선언

C#에서 변수는 '변수타입 변수명 = 초기값;' 형태로 선언한다. 변수는 값이 변경될 수 있다.

상수는 'const 상수타입 상수명 = 초기값;'의 형태로 선언한다. 상수는 한번 선언되면 값을 변경할 수 없다.

   string name = "홍길동";
                name = "1";
                name = "0.5"; //string은 숫자가 아닌 문자열 이다.
                char letter = 'A'; //char는 ''로 한다. ""로 할 시, 오류
                int price = 100;
                // price = 0.5; //소숫점은 넣을 수 없다.
                double b = 0.05;
                decimal sale = Convert.ToDecimal(1.5); //decimal은 Convert.ToDecimal()로 형변환을 알려주고 넣거나
                decimal sale_price;
                sale_price = price - (price * sale); //선언 하고 난 뒤 결과 값을 받을 수 있다.
                Console.WriteLine("할인된 가격은 {0}", sale_price);
                Console.ReadLine();
                const string str = "홍길동"; //const는 상수로서 변경 불가능 하다.

< Object Var Dynamic 타입과 연산자 > 

C#은 Object, Var, Dynamic이라는 특별한 타입을 가지고 있다.

  • Object: C#의 모든 타입은 Object 타입에서 파생되므로, 어떤 타입의 데이터도 저장할 수 있다.
  • Var: 컴파일 타임에 타입이 결정되며, 선언 시 초기화를 해주어야 한다.
  • Dynamic: 런타임에 타입이 결정되며, 선언 시 초기화를 하지 않아도 된다.

이들 타입과 함께 하는 사용하는 연산자에는 사칙연산자(+,-,*,/),비교연산자(==,!=,<,>,<=,>=)등이 있다.

 object aa = 11;
                aa = "감자";
                int a = Convert.ToInt32(aa); //object에서는 다른 형으로 재할당 시, Convert.Toint32(aa);로 해야 한다. 
                object aaa = "a";
                Console.WriteLine("aa값은: {0}", aa);
                var bb = 22;
                //bb = "b"; //var type은 처음에 숫자가 들어가면, 그 다음에 문자로 바꿀 수 없다. 
                Console.WriteLine("bb값은: {0}", bb);
                dynamic cc = 33;
                cc = "감자";//형을 바꿔서 넣을 수 있다. 
                dynamic ccc = "c"; 
                cc = "한글";
                int c = cc;//실행되는 시점에서 검사를 하기에, 실행하는 시점에서만 오류인지 아닌지 알 수 있다.
                Console.WriteLine("cc값은: {0}", cc);
                Console.ReadLine();

                //연산자 
                int a = 10;
                int b = 5;
                int c = a + b;
                Console.WriteLine("a+b={0}", c);
                Console.WriteLine("a+b={0}", a + b);

                Console.WriteLine("a+b={0}", a - b);

                Console.WriteLine("a*b={0}", a * b);

                Console.WriteLine("a/b={0}", a / b);

                Console.ReadLine();

                int d;
                d = 5 / 2;
                Console.WriteLine("d의 값은? {0}", d);

                double e;
                e = 5 / 2;
                Console.WriteLine("e의 값은? {0}", e);

                double f;
                f = 5.0 / 2;
                Console.WriteLine("f의 값은? {0}", f);

                float g;
                g = 5f / 2f;
                Console.WriteLine("g의 값은? {0}", g);
                Console.ReadLine();

< 증감연산자,산술연산자 > 

C#에서는 증감연산자와 산술연산자를 지원한다.

증감연산자 : 

  • ++ : 값을 1 증가 시킨다.
  • -- : 값을 1 감소시킨다.

산술연산자 :

  • + : 더하기 연산
  • - : 빼기 연산
  •  * : 곱하기 연산
  • / : 나누기 연산
  • % : 나머지 연산
  /*
                 연산자 종류
                증감연산자     ++,--
                산술연산자     +,-,*,/,%
                 */
                int a = 1;
                int b = 2;
                int c;
                c = ++a;
                Console.WriteLine("선행연산자 a의 값 {0} c의 값{1}", a, c);  //a의 값 2 c의 값 2 
                a = 1;
                c = a++;
                Console.WriteLine("선행연산자 a의 값 {0} c의 값{1}", a, c); //a의 값 2 c의 값 1
                a = 1;
                c = --a;
                Console.WriteLine("선행연산자 a의 값 {0} c의 값 {1}", a, c); //a의 값 0 c의 값 0
                c = a--;
                Console.WriteLine("선행연산자 a의 값 {0} c의 값 {1}", a, c); //a의 값 -1 c의 값 0 

                Console.WriteLine("나머지값 {0}", 5 % 2); //나머지 값 1

< IF문 관계연산자 논리연산자 >

C#에서는 if문,관계연산자,논리연산자를 사용하여 조건에 따라 코드를 실행할 수 있다.

 

if문 :

  • if문은 조건식이 참일 때 해당 코드 블록을 실행한다.

관계연산자:

  • ==:같다.
  • != : 다르다.
  • < : 작다
  • > : 크다.
  • <= : 작거나 같다.
  • >= : 크거나 같다.

논리 연산자 :

&& : 논리 AND 연산, 모든 조건이 참일 때, 참을 반환한다.

|| : 논리 OR 연산, 조건 중 하나 이상이 참일 때 참을 반환한다.

! : 논리 NOT 연산 , 조건의 반대를 반환한다.

 /*
                 관계 연산자 <,>,==,!=,<=,>=
                 논리 연산자 &&,||,!
                */
                int a = 3;
                if (a == 1)
                {
                    Console.WriteLine("1과 같음");
                }
                else if (a >= 1)
                {
                    Console.WriteLine("1보다 크거나 같음");
                }
                else if (a < 1)
                {
                    Console.WriteLine("1보다 작음");
                }
                else
                {
                    Console.WriteLine("해당없음");
                }
                int b, c;
                b = 100;
                c = 200;
                if (b == 100 && c == 300)
                {
                    Console.WriteLine("1");
                }
                else if (b == 100 || c == 300)
                {
                    Console.WriteLine("1");
                }
                else if (b > 100 || c == 300)
                {
                    Console.WriteLine("3");
                }
                else if (b != 100 || c != 300)
                {
                    Console.WriteLine("4");
                }

< 형변환 암시적 명시적 변환 >

C#에서의 데이터 타입간 암시적 변환과 명시적 변환을 사용할 수 있다.

  • 암시적 변환: 데이터 손실이 없는 경우, 컴파일러가 자동으로 변환을 수행한다.
  • 명시적 변환: 데이터 손실이 있는 경우, 개발자가 명시적으로 변환을 지시해야 한다.
 /*
                 타입       자동 변환되는 유형
                 byte       short,ushort,int,unit,long,ulong,float,double,decimal
                 sbyte      short,int,long,float,double,decimal
                 short      int,long,float,double,decimal
                 ushort     int,unit,long,ulong,float,double,decimal
                 int        long,float,double,decimal
                 uint       long,ulong,float,double,decimal
                 long       float,double,decimal
                 ulong      float,double,decimal
                 float      double
                 char       ushort,int,unit,long,ulong,float,double,decimal
                 var        암시적 변환 타입
                 */
                char a1 = 'a';
                char a2 = 'A';
                Console.WriteLine("a1의 값:" + a1);
                Console.WriteLine("a2의 값:" + a2);

                ushort change_a1, change_a2;
                change_a1 = a1;
                change_a2 = a2;
                Console.WriteLine("change_a1의 값:" + change_a1);
                Console.WriteLine("change_a2의 값:" + change_a2);

                byte ch_byte_a1, ch_byte_a2;
                ch_byte_a1 = (byte)a1;
                ch_byte_a2 = Convert.ToByte(a2);
                Console.WriteLine("ch_byte_a1의 값:" + ch_byte_a1);
                Console.WriteLine("ch_byte_a2의 값:" + ch_byte_a2);

< 소수점 자리수 조절, 문자열 코드 >

C#에서는 소수점 자리수 조절을 위해 'Math.Round()', 문자열 조절을 위해 'string.Format()'을 사용할 수 있다.

double number = 3.141592;

number = Math.Round(number, 2); // 소수점 아래 두 자리까지 반올림, number는 3.14

string str = string.Format("{0:N2}", number); // 숫자를 문자열로 변환하며 소수점 아래 두 자리까지 표현, str은 "3.14"

< For문 배열 메소드 사용 방법 >

C#에서 'for'문을 사용하여 반복 작업을 처리하고, 배열을 사용하여 어러 값을 저장 하며, 메소드를 사용하여 작업을 재사용할 수 있다.

int[] array = new int[5] {1, 2, 3, 4, 5};

for(int i = 0; i < array.Length; i++)
{
    array[i] = MultiplyByTwo(array[i]);
    Console.WriteLine(array[i]);
}

int MultiplyByTwo(int number)
{
    return number * 2;
}

< 전역변수 지역변수 열거형 Enum >

C#에서 전역변수는 클래스 내 어디서는 접근 가능한 변수이며, 지역변수는 특정 블록(메소드,if문 등) 내에서만 사용하능한 변수이다. 열거형(Enum)은 여러 개의 상수를 하나의 타입으로 묶어놓은 것이다.

using System;

namespace ConsoleApp2
{
    internal class Program
    {
        static int globalVar = 10; // 전역 변수

        enum Days { Sun, Mon, Tue, Wed, Thu, Fri, Sat }; // 열거형

        static void Main(string[] args)
        {
            int localVar = 20; // 지역 변수
            Console.WriteLine(globalVar);
            Console.WriteLine(localVar);

            Days day = Days.Mon;
            Console.WriteLine(day);
        }
    }
}

< 구조체 Struct >

C#에서 구조체(Struct)는 관련된 데이터를 하나의 복합 데이터 타입으로 그룹화하는 방법을 제공한다.

 struct Point
        {
            public int x, y;

            public Point(int x, int y)
            {
                this.x = x;
                this.y = y;
            }

            public void DisplayPoint()
            {
                Console.WriteLine($"Point: ({x},{y})");
            }
        }

        static void Main()
        {
            Point point = new Point(3, 4);
            point.DisplayPoint();
        }

< Switch문 >

C#에서 'switch'문을 사용하면 어러 가지 경우에 따른 작업을 처리할 수 있다.

static void Main()
{
    int number = 2;
    
    switch(number)
    {
        case 1:
            Console.WriteLine("Number is 1");
            break;
        case 2:
            Console.WriteLine("Number is 2");
            break;
        default:
            Console.WriteLine("Number is not 1 or 2");
            break;
    }
}

< While문 Do While문 >

C#에서 'while'문과 'do while'문을 사용하여 조건에 따라 반복 작업을 처리할 수 있다.

static void Main()
{
    int number = 1;

    while(number <= 5)
    {
        Console.WriteLine(number);
        number++;
    }

    number = 1;
    
    do
    {
        Console.WriteLine(number);
        number++;
    }
    while(number <= 5);
}

< Foreach문 >

C#에서 foreach문을 사용하여 컬렉션의 모든 요소를 순회할 수 있다..

static void Main()
{
    int[] numbers = new int[5] {1, 2, 3, 4, 5};

    foreach(int number in numbers)
    {
        Console.WriteLine(number);
    }
}

< 클래스 Class 필드 속성 >

C#에서 클래스(Class)는 객체를 생성하는 템플릿이며, 필드는 클래스 내의 변수를, 속성은 클래스 내의 메소드를 정의하는 데 사용된다.

class Program
{
    public class Car
    {
        private string color; // 필드

        public string Color  // 속성
        {
            get { return color; }
            set { color = value; }
        }
    }

    static void Main()
    {
        Car car = new Car();
        car.Color = "Red";
        Console.WriteLine(car.Color);
    }
}

< 클래스 정적 Static 상수 Const >

C#에서 클래스 내의 멤버를 'static'으로 선언하면, 그 멤버는 클래스의 인스턴스가 아닌 클래스 자체에 속하게 된다. 'const'는 상수를 선언하는 데 사용되며, 선언과 동시에 초기화 되어야 하고, 그 값을 변경할 수 없다.

class Program
{
    public class Circle
    {
        public const double PI = 3.14; // 상수
        public static int count = 0; // 정적 필드

        public Circle()
        {
            count++;
        }
    }

    static void Main()
    {
        Console.WriteLine($"PI: {Circle.PI}");
        
        Circle c1 = new Circle();
        Circle c2 = new Circle();
        Console.WriteLine($"Created {Circle.count} circles");
    }
}

< 클래스 메소드 정적 메소드 참조형 Out >

C#에서 클래스 메소드는 특정 클래스의 인스턴스에 연결되어 작동하며, 정적 메소드는 클래스 자체에 연결되어 작동한다. out 키워드는 메소드에서 여러 값을 반환할 때 사용된다.

class Program
{
    public class Calculator
    {
        public static void Multiply(int a, int b, out int result)
        {
            result = a * b;
        }
    }

    static void Main()
    {
        int result;
        Calculator.Multiply(3, 4, out result);
        Console.WriteLine(result);
    }
}

< 속성 정의 >

C#에서 속성(Property)은 클래스, 구조체, 인터페이스의 멤버로, 외부에서 접근할 수 있는 값이다. get과 set 접근자를 사용하여 속성 값을 읽거나 변경할 수 있다.

class Program
{
    public class Student
    {
        private string name;

        public string Name
        {
            get { return name; }
            set { name = value; }
        }
    }

    static void Main()
    {
        Student student = new Student();
        student.Name = "John Doe";
        Console.WriteLine(student.Name);
    }
}

 

'C#' 카테고리의 다른 글

MS-SQL 및 SSMS 설치 방법  (0) 2023.06.04
C# 문법 정리 ②  (0) 2023.06.04
C#으로 프로그램 만들기  (0) 2023.06.02
비주얼 스튜디오 설치 및 환경설정 (For Windows)  (0) 2023.06.02
C#의 등장의 역사  (0) 2023.06.02

+ Recent posts