C#

    [C#] File 다루기 - 4. 객체의 직렬화(Serialization)

    [C#] File 다루기 - 4. 객체의 직렬화(Serialization)

    4. 객체의 직렬화(Serialization) 직렬화는 객체를 특정한 형식에 맞춰 byte배열로 변환하여 처리하는 것을 말합니다. 역직렬화는 반대의 처리 개념이며 이는 객체의 현재 상태를 그대로 저장해 필요할 때 다시 객체를 그대로 재현할 수 있도록 합니다. 마치 게임에서 현재 상태를 저장해 뒀다가 다음날 마지막에 했던 플레이 상태를 그대로 되돌려 계속해서 게임을 진행하는 것과 같습니다. 직렬화된 객체는 파일이나 Database로 그 자체를 데이터화하여 저장할 수 있기 때문입니다. 객체를 직렬 화하는 데 사용되는 몇 가지 형식이 존재하지만 오늘날 가장 많이 사용하는 방식은 XML과 JSON 이 2가지입니다. JSON은 Web이나 Mobile과 같이 제한된 환경하에서 가장 최적의 선택이 될 수 있으며 XM..

    [C#] File 다루기 - 3. 인코딩(Encoding)과 디코딩(Decoding)

    3. Text의 인코딩(Encoding)과 디코딩(Decoding) 컴퓨터에 저장된 문자열(Text)는 0과 1로 표시하는 bit단위로 저장되며 8bit와 같은 단위를 통해 대부분 문자 자체를 나타내거나 특정한 포맷을 표시하기도 합니다. 예를 들어 ASCII는 128개의 코드를 가지는데 .NET은 내부적으로 문자열을 인코딩하는데 Unicode라는 표준을 사용합니다. ASCII에 비해 Unicode는 훨씬 더 많은 코드를 가지고 있습니다. 때로는 문자열이 Unicode를 사용하지 않거나 Unicode를 변환시키기 위해 다른 곳으로 옮겨져야할 경우가 있는데 이 때문에 Encoding사이에서 어떻게 변화시킬 것인지를 아는 것은 매우 중요합니다. 아래는 문자열을 인코딩하는데 사용되는 다른 일반적인 방법을 나열한..

    [C#] File 다루기 - 2. 스트림(Stream) 다루기

    2. 스트림(Stream) 다루기 stream은 byte의 배열입니다. 비록 File은 array처럼 다뤄지기는 하지만 File내부의 byte배열 위치를 통해 임의 접근이 가능하며 이는 순차적인 순서로 처리될 수 있는 byte로서 File을 처리할 수 있는 유용한 방법이 될 수 있습니다. stream은 또한 터미널이나 램덤엑세스를 제공하지 않고 위치를 찾을 수 없는(이동할 수 없는) 소켓과 포트 같은 네트워크 리소스의 입력과 출력에도 사용됩니다. 이때에도 stream자체가 어디에서 왔는지와는 상관없이 임의의 byte를 처리할 수 있는 Code를 작성할 수 있습니다. stream을 대상으로 한 읽기/쓰기를 수행하는 Code자체도 간단하며 byte가 실제 저장되는 곳도 제어할 수 있습니다. (1) Strea..

    [C#] File 다루기 - 1. 파일 시스템(Filesystem)

    1. 파일 시스템(Filesystem) 다루기 프로그램에서는 종종 파일을 통한 입력과 출력을 처리해야 하는 경우가 있으며 System과 System.IO 네임스페이스에는 이를 목적으로 만들어진 여러 클래스가 존재합니다. ● cross-platform 환경과 파일 시스템 제어 개발 중인 프로그램이 Windows와 Linux, MacOS 등 다양한 환경하에서 작동되어야 하는 것이라면 이것은 다른 OS로 인한 차이점 즉, cross-platform의 제어가 필요한 이유가 됩니다. 가장 대표적으로 들 수 있는 문제가 파일 시스템(예를 들면 경로(Path)와 같은)의 경우인데 파일 시스템에 관한 다양한 정보 확인을 통해 각각의 경우에 대비해야 합니다. 우선 간단한 Console App프로젝트를 생성하고 아래 3개..

    [.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..

    [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상태가 될 수 있어야 합니다. 그리고..