전체 글

전체 글

    [.NET] 닷넷 - 2. .NET components

    2. .NET components .NET은 크게 아래 3가지 요소로 구성되어 있습니다. 컴파일러 C#이나 F#, Visual Basic과 같은 언어로 된 소스코드를 IL(intermediate language)로 변환하는 것이며 C# 6.0 이후로 마이크로소프트는 Roslyn이라는 이름으로 컴파일러를 오픈소스화 하였습니다. CoreCLR(Common Language Runtime) rumtime에 IL이 담긴 Assembly를 로드하여 IL코드를 해당 컴퓨터의 CPU에 맞는 네이티브 코드로 변환하고 스레드나 메모리와 같은 관리환경안에서 코드를 실행합니다. BCL or CoreFX(Base Class Libraries) 사전에 빌드된 어셈블리의 모음이며 App을 개발할때 필요한 기능에 맞춰 여러가지 Li..

    [.NET] 닷넷 - 1. .NET 6 개요

    [.NET] 닷넷 - 1. .NET 6 개요

    1. .NET 6 .NET은 BCL(Base Class Library)를 포함하고 있어서 App을 개발하는데 필요한 여러 API를 사용할 수 있습니다. 다만 .NET의 플랫폼 버전에 따라 BCL이 달라질 수 있는데 이런 경우에는 .NET Standard를 통해 서로 다른 .NET 플랫폼 간 호환성을 유지할 수 있습니다. .NET Core 2.0 또는 그 이후의 버전은 .NET Standard 2.0을 지원하기 시작하면서 첫번째 .NET Core에 포함되지 않은 많은 API를 지원하고 있고 과거부터 사용되어오던 .NET Framework는 이제 .NET으로 통합되어 이를 통해 개발된 App은 Linux나 MacOS 등 다양한 OS에서 동작하는 소위 cross-flatform 실행할 수 있게 되었습니다. N..

    [C#] 인터페이스(Interface)와 상속(Inheriting) - 7. Code분석(StyleCop)

    [C#] 인터페이스(Interface)와 상속(Inheriting) - 7. Code분석(StyleCop)

    10. code 분석하기 .NET analyzers 중 하나인 StyleCop은 작성된 코드의 잠재적인 문제점을 분석하고 이들에 대한 수정안을 파악하는 데 사용되는 분석도구입니다. StyleCop을 사용해 보기 위해 .NET 6 버전을 기준으로 ConsoleApp 프로젝트를 생성한 다음 아래와 같이 Top-level programming 아닌 이번 방식의 Main() 메서드를 Program.cs에 작성합니다. using System; namespace myapp { class Program { private static void Main(string[] args) { } } } 그리고 Nuget을 통해 StyleCop.Analyzers 패키지를 추가합니다. dotnet add package StyleCo..

    [C#] 인터페이스(Interface)와 상속(Inheriting) - 6. 상속(Inheriting)

    [C#] 인터페이스(Interface)와 상속(Inheriting) - 6. 상속(Inheriting)

    7. 상속(Inheriting) 상속은 기존의 Type에서 새로운 Type을 생성하는 것을 말합니다. namespace mylibrary; public class Car { public int Speed { get; set; } public int Drive(int accelerate) { Speed += accelerate; return Speed; } public void Stop() { Speed = 0; } } Sedan에서 Car클래스를 상속받는 처리는 다음과 같이 구현할 수 있습니다. public class Sedan : Car //상속 { } 실제 Sedan은 아무런 Member도 포함하고 있지 않지만 Car의 Member를 그대로 상속 받음으로써 다음과 같이 Sedan을 활용할 수 있습니다..

    [C#] 인터페이스(Interface)와 상속(Inheriting) - 5. NULL

    6. null 변수를 선언하고 값을 할당하는 경우 해당 변수가 할당된 값을 가질 것이라는 점은 분명히 알 수 있지만 아무런 값도 할당되지 않은 상태(정수형의 경우 기본값이 0이 되는 것처럼 기본값으로 대체되는 경우도 있음)라면 이때는 null이 변수의 값을 표현할 수 있는 수단이 될 수 있습니다. ● 값 형식에서 null 사용하기 기본적으로 int나 DateTime과 같은 값 형식은 굳이 값이 할당되지 않더라도 기본값의 개념이 있어서 어떤 식으로든 항상 값이 할당된 상태라고 볼 수 있습니다. 따라서 null에 대한 대비를 따로 하지 않아도 되지만 만약 어떤 값을 읽어서 값 형식의 변수에 해당 값이 할당되는 경우 그 값이 null상태라면 어떤 식으로는 값 형식도 null상태가 될 수 있어야 합니다. 그리고..

    [C#] 인터페이스(Interface)와 상속(Inheriting) - 4. 참조타입과 값타입

    5. 참조타입과 값 타입에서의 메모리 관리 프로그램적인 관점에서 메모리는 크게 2가지 종류가 있을 수 있습니다. 바로 Heap과 Stack이 그것인데 대부분의 운영체제에서 Heap과 Stack은 물리적 메모리나 가상 메모리 어디든 존재할 수 있습니다. Stack메모리는 빠른 속도로 데이터를 입출력할 수 있습니다. 이는 last-in, first-out매커니즘을 구현하고 있기 때문이며 심지어 어떤 Data의 경우에는 CPU의 L1이나 L2 캐시에 담길 수도 있기 때문입니다. 하지만 상대적으로 풍부한 용량을 가진 Heap에 비해서는 아주 제한된 용량을 가지지만 속도는 Heap이 훨씬 느립니다. Stack과 Heap에 대한 메모리차이를 언급한 이유는 Type에 따라 사용하는 메모리의 종류가 이 2가지로 나뉘어..

    [C#] 인터페이스(Interface)와 상속(Inheriting) - 3. 인터페이스(Interface)

    4. 인터페이스(Interface) 인터페이스의 궁극적인 목적은 Type을 연결하는 데 있습니다. Type을 Interface기반으로 구현하게 되면 반드시 특정 기능을 지원하기 위한 장치(메서드나 필드 등)가 존재함을 약속할 수 있는데 이는 종종 '계약'에 비유되기도 합니다. 인터페이스는 직접 작성할 수 있지만 .NET에는 특정 기능을 위한 몇 가지 인터페이스가 이미 마련되어 있습니다. 인터페이스 구현되는 메서드 기능 IComparable CompareTo(type) Type의 인스턴스를 대상으로 순서나 정렬을 구현하기 위한 비교메서드입니다. IComparer Compare(type, type) 두번째 Type이 첫번째 Type의 인스턴스를 정렬하거나 정렬하기 위한 메서드를 구현합니다. IDisposab..

    [C#] 인터페이스(Interface)와 상속(Inheriting) - 2. 제네릭(generic)

    [C#] 인터페이스(Interface)와 상속(Inheriting) - 2. 제네릭(generic)

    3. 제네릭(generic) 제네릭이 처음 등장한 건 2005년 C# 2.0과 .NET Framework 2.0 때인데 당시 마이크로소프트는 제네릭을 Type을 매개변수로 전달함으로써 Type이 좀 더 효율적이고 안전하게 재사용될 수 있도록 할 수 있다고 소개한 바 있습니다. 제네릭의 유용성을 알아보기 위해서는 우선 실제 제네릭을 사용할 수 없을 때의 코드가 구현되는 경우를 먼저 살펴볼 필요가 있습니다. 제네릭이 등장하기 이전에는 매개변수에서 값을 다루는데 취약한 면이 있었으며 대안으로 사용했던 System.Object형식을 사용하는 것 자체가 성능 저하의 문제를 유발할 수 있었습니다. 예를 들어 HashTable에 특정 키와 값을 담아두는 아래와 같은 경우를 보면 System.Collections.Ha..