아래 글은 C# 스레드(Thread) 관련 개념 정리 및 작성자 공부를 위해 작성되었습니다.

 

 

 

📃 참고자료

 

  • C# 교과서(길벗 출판사) - 56단원 비동기 프로그래밍 717 ~ 724페이지
  • 유튜브 채널 VisualAcademy [C# 교과서 마스터하기 56. 비동기 프로그래밍]
  • 닷넷코리아 (https://www.dotnetkorea.com/)

 

 

 

 

 

https://www.youtube.com/watch?v=PwoF8jsCUtM 

 

 

 

 

✳ 저녁 식사 모델링: 동기 프로그래밍

 

동기 프로그래밍(스레드 차단)

  1. 밥을 짓습니다. 밥을 다 지을 때까지 보면서 기다립니다.
  2. 국을 끓입니다. 국이 완전히 끓을 때까지 보면서 기다립니다.
  3. 달걀 프라이를 합니다. 달걀이 다 익을 때까지 보면서 기다립니다.

 

 

 

✳ 저녁 식사 모델링: 비동기 (동기 포함)

 

비동기 프로그래밍(동기 프로그래밍 포함)

  1. 밥을 짓습니다. 밥을 다 지을 때까지 다른일을 하면서(TV 등을 보면서) 기다립니다.
  2. 국을 끓입니다. 국이 완전히 끓을 때까지 다른일을 하면서(TV 등을 보면서) 기다립니다.
  3. 달걀 프라이를 합니다. 달걀이 다 익을 때까지 다른 일을 하면서(TV 등을 보면서) 기다립니다.

 

 

✳ 저녁 식사 모델링: 비동기 (동기 포함)

 

비동기 프로그래밍(동시 작업 시작)

 

- 밥을 짓기 시작합니다. 국을 끓이기 시작합니다. 달걀 프라이를 하기 시작합니다. 다른 일을 하면서(TV 등을 보면서) 모든 작업이 다 끝날 때까지 기다립니다.

 

 

 

반응형

 

 

* 목표

 

- 공부한 C# 문법을 직접적으로 사용해보고 다양한 기능 구현

- WPF MVVM패턴 적용 후 View와 ViewModel, Model을 분리해서 소스코드 작성

 * MVVM패턴을 직접 적용해보고 사용하면서 이점과 사용 이유 직접 체득

- 마크업 언어 XAML을 통해 심플한 UI 디자인

- 데이터 바인딩을 통해 XAML과 ViewModel을 연결

- C# 코딩을 통한 객체지향 프로그래밍관련 내용을 직접 작성하면서 체득

 

 

 

* 소스코드 링크

 

https://github.com/yarogono/pomodoroTimer

 

yarogono/pomodoroTimer

Contribute to yarogono/pomodoroTimer development by creating an account on GitHub.

github.com

 

반응형

 

 

 

 

아래 글은 C# 스레드(Thread) 관련 개념 정리 및 작성자 공부를 위해 작성되었습니다.

 

 

 

📃 참고자료

 

  • C# 교과서(길벗 출판사) - 55단원 스레드 717 ~ 724페이지
  • 유튜브 채널 VisualAcademy [C# 교과서 마스터하기 55. 스레드]
  • 닷넷코리아 (https://www.dotnetkorea.com/)

 

 

 

 

 

https://www.youtube.com/watch?v=VZq7PqlUbyI 

 

 

 

 

 

✳ 프로세스와 스레드

 

- 스레드는 운영체제의 자원이며 프로그램 안에서 독립적으로 실행할 수  있는 것(멀티태스킹 운영체제)

 

 

 

✳ 프로세스(Process)

 

- 운영체제로부터 할당 받은 메모리에 코드와 데이터를 저장 및 CPU를 할당 받아 실행 가능한 상태

- 현재 실행 중인 프로그램을 프로세스라고 합니다

 

 

 

 

 

✳ 스레드(Thread)

 

- 운영 체제가 프로세서 시간을 할당하는 기본 단위입니다.

 

C#의 메인 메서드 코드는 순차적으로 실행됩니다. 하지만 메인 메서드에 또 다른 메서드 단위로 프로그램을 작성해 놓고, 이를 스레드 개체로 실행하면 메서드의 실행 순서를 윈도 운영 체제에 맡길 수 있습니다.

그러면 순차적으로 실행되지 않고 반복적으로 여러 메서드를 나누어서 처리합니다.

스레드는 이처럼 순차적으로 처리되지 않고, 여러 기능을 동시 다발적으로 실행할 때 사용하는 개념이며, 이를 닷넷에서는 Thread 같은 클래스로 제공합니다.

 

 

 

 

 

✳ 예제코드

// 프로세스(Process) : 하나의 프로그램 단위(프로젝트)
// 스레드(Thread) : 프로세스안에서 실행하는 단위 프로그램(메서드)
using System;
using System.Diagnostics;
using System.Threading;

class 스레드
{
    static void Main(string[] args)
    {
        //Win(); Sql(); Ide();
        ThreadStart ts1 = new ThreadStart(Win);
        ThreadStart ts2 = new ThreadStart(Sql);

        Thread t1 = new Thread(ts1);
        Thread t2 = new Thread(ts2);
        Thread t3 = new Thread(new ThreadStart(Ide));

        t3.Priority = ThreadPriority.Highest; // 우선순위 높게 

        t1.Start();
        t2.Start();
        t3.Start();

        // 프로세스
        Process.Start("IExplore.exe"); // 익스플로러 실행
        Process.Start("Notepad.exe");  // 메모장 실행 
    }
    private static void Ide()
    {
        DelayTime();
        Console.WriteLine("[3] IDE : Visual Studio");
    }
    private static void Sql()
    {
        Thread.Sleep(3000); // 3초 딜레이 
        Console.WriteLine("[2] DBMS : SQL Server");
    }
    private static void Win()
    {
        DelayTime();
        Console.WriteLine("[1] OS : Windows Server");
    }
    private static void DelayTime()
    {
        for (int i = 0; i < 100000000; i++) { } // 시간지연 메서드
    }
}

 

 

 

 

 

반응형

 

 

아래 글은 C# 테스트 프로젝트와 단위 테스트 관련 개념 정리 및 작성자 공부를 위해 작성되었습니다.

 

 

 

 

📃 참고자료

 

  • C# 교과서(길벗 출판사) - 53단원 테스트 프로젝트와 단위 테스트 677 ~ 693페이지
  • 유튜브 채널 VisualAcademy [C# 교과서 마스터하기 53. 테스트 프로젝트와 단위 테스트]
  • 닷넷코리아 (https://www.dotnetkorea.com/)

 

 

 

 

 

https://www.youtube.com/watch?v=SOZNBmQDnyg 

 

 

 

 

 

✳ 단위 테스트(Unit Test)

 

 

  • 특정 클래스의 메서드에 있는 논리 오류를 빠르게 찾을 수 있도록 도와주는 기능

  • 논리오류
    - 컴파일 오류는 Visual Studio가 바로 찾아줌
    - 런타임 오류는 실행 했을 때 나옴
    - 하지만 논리 오류는 가장 찾기 힘듬
    - 오류관련 자세한 정보 (https://antstudy.tistory.com/63)

 

 

 

반응형

 

 

아래 글은 C# 클래스 라이브러리 관련 개념 정리 및 작성자 공부를 위해 작성되었습니다.

 

 

 

 

📃 참고자료

 

  • C# 교과서(길벗 출판사) - 52단원 클래스 라이브러리와 닷넷 스탠다드 677 ~ 693페이지
  • 유튜브 채널 VisualAcademy [C# 교과서 마스터하기 52. 클래스 라이브러리와 닷넷 스탠다드]
  • 닷넷코리아 (https://www.dotnetkorea.com/)

 

 

 

 

 

https://www.youtube.com/watch?v=4kKa7qxd4cc 

 

 

 

 

 

✳ 클래스 라이브러리(Class Library)

 

 

- 하나 이상의 앱에서 호출되는 형식 및 메서드 등을 정의하여 DLL로 제공

 

 

 

 

 

 

✳ 클래스 라이브러리 만들기(Microsoft Docs 강의)

 

https://docs.microsoft.com/ko-kr/dotnet/core/tutorials/library-with-visual-studio

 

Visual Studio를 사용하여 .NET 클래스 라이브러리 만들기 - .NET

Visual Studio를 사용하여 .NET 클래스 라이브러리를 만드는 방법을 알아봅니다.

docs.microsoft.com

 

반응형

 

 

 

아래 글은 C# 튜플(Tuple) 관련 개념 정리 및 작성자 공부를 위해 작성되었습니다.

 

 

 

📃 참고자료

 

  • C# 교과서(길벗 출판사) - 51단원 튜플 666 ~ 669페이지
  • 유튜브 채널 VisualAcademy [C# 교과서 마스터하기 51. 튜플]
  • 닷넷코리아 (https://www.dotnetkorea.com/)

 

 

https://www.youtube.com/watch?v=S99SmK8hQt4 

 

 

 

 

✳ 튜플(Tuple)

 

 

  • 값을 한번에 하나 이상 전달하거나 제공받을 때 사용하는 데이터 구조입니다.
  • 프로그래밍 자체에서 추가 클래스가 아닌 괄호를 사용하여 값을 하나 이상 그룹화합니다.
  • 함수에서 여러 값을 반환하는 데 많은 도움을 줍니다.
  • 명시적인 형식을 지정할 필요가 없습니다. 컴파일러가 형식을 유추하여 자동으로 형식을 제공합니다.
  • 기존에 사용하던 Tuple 클래스는 Item1, Item2, ... 형태로 접근했지만, 튜플을 사용하면 원하는 이름의
    속성을 만들 수 있습니다.

 

 

 

 

✳ 튜플 리터럴(Tuple Literal)

using static System.Console;

class TupleLiteral
{
    static void Main()
    {
        var fhd = (1920, 1080); //[1] 기본: Item1, Item2 형태 
        WriteLine($"Full HD: {fhd.Item1} * {fhd.Item2}");

        var uhd = (Width: 3840, Height: 2160); //[2] 이름 지정
        WriteLine($"4K UHD: {uhd.Width} * {uhd.Height}");

        (ushort Width, ushort Height) hd = (1366, 768); //[3] 이름과 형식 지정
        Write($"HD: {hd.Width} * {hd.Height}");
        WriteLine($"Type({hd.Width.GetType()}, {hd.Height.GetType()})");
    }
}
반응형

 

 

아래 글은 C# 동적 형식 관련 개념 정리 및 작성자 공부를 위해 작성되었습니다.

 

 

 

 

 

 

📃 참고자료

 

  • C# 교과서(길벗 출판사) - 50단원 동적 형식 666 ~ 669페이지
  • 유튜브 채널 VisualAcademy [C# 교과서 마스터하기 50. 동적 형식]
  • 닷넷코리아 (https://www.dotnetkorea.com/)

 

 

 

 

https://www.youtube.com/watch?v=6sKaXWwfL38 

 

 

 

C#은 정적(static) 형식의 언어입니다. 하지만 C# 4.0 버전부터는 파이썬과 자바스크립트처럼 동적 형식도 지원합니다.

 

✳ 동적 형식(Dynamic)

 

- 컴파일 시점이 아닌 런타임 시점에서 형식이 정해지는 특수한 유형의 형식

  • 컴파일 타임에 형식이 지정되는 프로그램은 편합니다.
    바로 int, string 형으로 변수를 선언한 후 해당 값을 사용하면 됩니다.
  • 런타임에 형식이 지정되는 프로그램이 필요할 수 있습니다.
    이때는 dynamic 키워드를 사용하여 변수를 선언할 수 있습니다.

  • dynamic 키워드는 데이터 형식 자리에 오지만, dynamic은 데이터 형식이 아닙니다.
    즉, dynamic 키워드는 특정 데이터 형식을 지칭하지 않습니다.

  • var 키워드와 비슷하나 컴파일할 때 데이터 형식을 결정하는 var와 달리,
    dynamic 키워드는 런타임할 때 데이터 형식을 결정합니다.

  • 모든 데이터 형식을 선언하는 자리에는 dynamic 키워드를 사용할 수 있습니다.
  • 동적 형식은 다른 동적 언어와 통신에 유용합니다.

 

 

 

 

 

 

✳ 예제코드

//[?] dynamic 키워드: 런타임에 데이터 형식이 결정되는 변수를 생성
using System;

class DynamicDemo
{
    static void Main()
    {
        string ss = "안녕하세요."; //[1] 코드 작성시 문자열로 판단
        Console.WriteLine(ss.Length); // 인텔리센스의 도움 받음

        var vs = "반갑습니다."; //[2] 컴파일시 문자열로 판단
        Console.WriteLine(vs.Length); // 인텔리센스의 도움 받음

        dynamic ds = "또 만나요."; //[3] 런타임시 문자열로 판단
        Console.WriteLine(ds.Length); // 인텔리센스의 도움 못 받음

        ds = 1234; // [4]런타임시 숫자형으로 판단
        Console.WriteLine(ds * 10); // 숫자형 연산이 가능: 12340
    }
}
반응형

 

 

 

 

 

아래 글은 데이터베이스 관련 개념 정리 및 작성자 공부를 위해 작성되었습니다.

 

📃 참고자료

 

 

 

 

✳ 닷넷 코어(.Net Core)

 

- Windows, Linux, OSX 등의 Cross Platform을 지원하기 위해 전면적으로 재작성된 Web Framework이다.

 

  • 웹 응용 프로그램, 명령줄 응용 프로그램, 라이브러리 및 유니버셜 윈도우 플랫폼 앱, 
    응용 프로그램 등 총 4가지로 크로스 플랫폼 시나리오를 지원
  • 닷넷 프레임워크의 오픈 소스 버전으로 개발하여 공개된 소프트웨어 프레임워크
  • 업데이트를 패키지 관리자 형식으로 업데이트

 

 

 

 

 

✳ 닷넷 프레임워크(.Net Framework)

 

- 마이크로소프트에서 개발한 윈도우 프로그램 개발 및 실행 환경

 

 

  • 윈도우 환경에서만 사용 가능
  • 네트워크 작업, 인터페이스 등의 많은 작업을 캡슐화
  • 공통 언어 런타임(Common Language Runtime)(CLR)이라는 이름의 가상 머신 위에서 작동

 

 

반응형

 

 

 

아래 글은 C# 확장 메서드 만들기 관련 개념 정리 및 작성자 공부를 위해 작성되었습니다.

 

 

 

📃 참고자료

 

  • C# 교과서(길벗 출판사) - 49단원 확장 메서드 만들기 662 ~ 665페이지
  • 유튜브 채널 VisualAcademy [C# 교과서 마스터하기 49. 확장 메서드 만들기]
  • 닷넷코리아 (https://www.dotnetkorea.com/)

 

 

 

 

 

 

https://www.youtube.com/watch?v=ycUhM86Qf3Q 

 

 

 

 

 

✳ 확장 메서드(Extension Method)

 

  • 원본 형식을 변경하지 않고 이미 있는 형식에 추가로 기능을 덧붙일 수 있습니다.
  • 확장 메서드는 이미 만들어 있는 클래스 기능을 확장하고, 클래스와 구조체, 인터페이스에서 사용할 수 있습니다.
  • 특히 봉인(sealed) 클래스는 상속이 불가능하므로 봉인 클래스에 새로운 메서드를 적용하기가 유용합니다.

 

 

 

 

 

 

✳ 예제코드

namespace 확장메서드 // 기존의 형식이나 구축된 형식을 추가 메서드로 확장
{
    static class E
    {
        public static void EF(this object obj, int i) { } // 정수
        public static void EF(this object obj, string i) { } // 문자열
    }
    class A { }
    class B
    {
        public void EF(int i) { } // 일반 메서드
    }
    class C
    {
        public void EF(object obj) { } // 일반 메서드
    }
    class 확장메서드
    {
        static void Main(string[] args)
        {
            A a = new A(); a.EF(10); a.EF("안녕"); // 둘 다 확장 메서드
            B b = new B(); b.EF(100); b.EF("안녕"); // 일반, 확장 메서드
            C c = new C(); c.EF(1000); c.EF("안녕"); // 둘 다 일반 메서드
        }
    }
}

 

 

  • 확장 메서드는 static 키워드가 붙은 클래스에 static 메서드로 만들어집니다.
    * 
    이 때 반드시 동일한 네임스페이스를 참조해야 합니다.
  • 확장 메서드의 첫 번째 매개변수에 this 키워드를 지정하여 확장 메서드를 사용할 개체 형식을 선택할 수 있습니다.
  • 확장 메서드를 사용하면 같은 네임스페이스의 모든 클래스에서 해당 확장 메서드를 호출 할 수 있는데,
    확장 메서드는 이미 완성된 기존 형식에 새로운 메서드를 추가하는 방법으로 사용합니다.

 

 

 

 

✳ 확장 메서드개념 간단 정리

 

  • 정적(static)클래스에 정적(static) 메서드로 구현합니다.
  • 첫 번째 메서드 매개변수에 this 키워드를 붙입니다.
  • 같은 범위(scope)를 같은 네임스페이스에서 호출할 수 있습니다.
  • 확장 메서드도 오버로드가 가능합니다.
반응형

 

 

 

아래 글은 C# 제네릭 클래스 만들기 관련 개념 정리 및 작성자 공부를 위해 작성되었습니다.

 

 

 

📃 참고자료

 

  • C# 교과서(길벗 출판사) - 48단원 제네릭 클래스 만들기 642 ~ 661페이지
  • 유튜브 채널 VisualAcademy [C# 교과서 마스터하기 48. 제네릭 클래스 만들기]
  • 닷넷코리아 (https://www.dotnetkorea.com/)

 

 

 

 

 

https://www.youtube.com/watch?v=iArf2vVafM4 

 

 

 

 

 

✳ 제네릭(Generic)

 

  • 매개변수에 따른 형식
    -> <T>
  • 무언가를 담아 놓을 컨테이너 역할
    - Cup of T
    - Cup<T>

  • 장점
    - 타입 안정
    - 성능
      -> 박싱과 언박싱이 필요 없음



 

✳ 내장된 제네릭(Generic) 리스트 클래스

 

 

내장된 제네릭 클래스만으로도 충분

 

  • System.Collections.Generic 네임스페이스
  • ArrayList<T>
  • List<T>
  • Stack<T>
  • Queue<T>
  • Hashset<T>
  • Dictionary<Tkey, Tvalue>

 

 

 

✳ 제네릭 형식(Generic Types)

 

 

  • 제네릭 형식은 하나 이상의 형식 매개 변수를 설정할 수 있는 형식
  • 형식 매개 변수(Type Parameter)는 넘어오는 형식에 따른 멤버의 형식으 결정됨
  • 형식 매개 변수 T는 클래스 이름 뒤에 꺽쇠 괄호(angle brackets: <>)로 표시 함
  • 아래 코드는 List 클래스를 나타내는데, T는 어떠한 형식에 대한 리스트를 나타내는지를 의미하는 표시

 

 

public class List<T>

 

 

 

 

 

 

 

✳ Action<T>와 Func<T, TResult>

 

 

  • Action<T>
    - 반환값이 없는 경우에 사용자 정의 대리자(custom Delegate)를 정의 하는 대신에 Action 대리자를 사용할 수 있음
  • Func<T, TResult>
    - 반환값이 필요한 경우에는 Func 대리자를 사용할 수 있음
    - 마지막 파라미터는 항상 리턴값을 나타냄

 

 

 

 

✳ Generic Type 제약 조건

 

 

제약조건(constraint) 설명
where T : struct 반드시 값 타입(Value Type)이어야 함
where T : class 반드시 참조 타입(Reference Type)이어야 함
where T : new() 반드시 public 기본 생성자를 가져야 함
where T : <기본 클래스 이름> 지정된 클래스로부터 상속되어야 함
where T : <인터페이스 이름> 지정된 인터페이스를 구현해야만 함
where T : U T 매개변수는 또 다른 U 형식 매개변수를 상속 받아야 함

 

 

 

 

 

✳ 예제코드

// GenericNote.cs 
// 제네릭(Generics): 넘어온 타입(T)에 따라서 타입(T)이 결정됨(매개변수화된 타입)
using System;

namespace 제네릭
{
    class Juice { }
    class Coffee { }

    // Cup of T, Cup<T>
    class Cup<T>
    {
        public T Type { get; set; }
    }

    class 제네릭
    {
        static void Main(string[] args)
        {
            Cup<Juice> juice = new Cup<Juice>();
            juice.Type = new Juice();
            Console.WriteLine(juice.Type); // 제네릭.Juice

            var coffee = new Cup<Coffee> { Type = new Coffee() };
            Console.WriteLine(coffee.Type); // 제네릭.Coffee
        }
    }
}
반응형

+ Recent posts