C#교과서 마스터하기 45. 인메모리 데이터베이스 프로그래밍 맛보기

min seung moon·2021년 7월 15일
0

C#

목록 보기
47/54

https://www.youtube.com/watch?v=wrG-iOiB12o&list=PLO56HZSjrPTB4NxAsEP8HRk6YKBDLbp7m&index=80

1. 인메모리 데이터베이스

  • 실제 데이터베이스가 아닌 컬렉션(메모리)을 사용한 데이터 입력, 출력, 수정 삭제 등 비즈니스 로직에서 많이 사용하는 방법 사용
  • Todo List

2. 프로젝트

01. 프로젝트 생성

  • 빈 솔루션(TodoApp)
    • git과 연동한 폴더에 CShopTodoApp 솔루션 생성





02. Github에 업로드해보기




03. 클래스 라이브러리 프로젝트 생성

  • 기존 솔루션에 추가


04. 모델 클래스

  • Todo.cs
using System;
using System.Collections.Generic;
using System.Text;

namespace CShopTodoApp.Models
{

    // 모델 클래스
    public class Todo
    {
        // prop
        public int Id { get; set; }
        public string Title { get; set; }
        public bool IsDone { get; set; }
    }
}

05. 메모리 레포지토리 생성

  • ITodoRepositoryInMemory.cs (interface)
using System.Collections.Generic;

namespace CShopTodoApp.Models
{
    public interface ITodoRepositoryInMemory
    {
        void Add(Todo model); // 입력
        List<Todo> GetAll(); // 출력
    }

}
  • TodoRepositoryInMemory.cs
using System;
using System.Collections.Generic;

namespace CShopTodoApp.Models
{
    public class TodoRepositoryInMemory : ITodoRepositoryInMemory
    {
        // 인-메모리 데이터베이스 사용 영역
        public void Add(Todo model)
        {
            throw new NotImplementedException();
        }

        public List<Todo> GetAll()
        {
            throw new NotImplementedException();
        }
    }

}

06. 메모리 레포지토리 구현

  • TodoRepositoryInMemory.cs
using System;
using System.Collections.Generic;
using System.Linq;

namespace CShopTodoApp.Models
{
    public class TodoRepositoryInMemory : ITodoRepositoryInMemory
    {

        // 인-메모리 역할을 해줄 컬렉션 생성
        private static List<Todo> _todos = new List<Todo>();

        public TodoRepositoryInMemory()
        {
            _todos = new List<Todo>
            {
                new Todo {Id = 1, Title = "ASP.NET Core 학습", IsDone = false},
                new Todo {Id = 1, Title = "Blazor 학습", IsDone = false},
                new Todo {Id = 1, Title = "C# 학습", IsDone = true}
            };
        }

        // 인-메모리 데이터베이스 사용 영역
        public void Add(Todo model)
        {
            model.Id = _todos.Max(t => t.Id) + 1;
            _todos.Add(model);
        }

        public List<Todo> GetAll()
        {
            return _todos.ToList();
        }
    }

}

07. 새 솔루션 폴더 생성(UI) & 콘솔 프로젝트 생성



08. 라이브 클래스 종속 참조

09. Program.cs 작성

-1. 기본 데이터 출력

using CShopTodoApp.Models;
using System;
using System.Collections.Generic;

namespace CShopTodoApp.ConsoleApp
{
    class Program
    {
        static void Main(string[] args)
        {
            ITodoRepositoryInMemory _repository = new TodoRepositoryInMemory();

            List<Todo> todos = new List<Todo>();
            todos = _repository.GetAll();

            // [1] 기본 데이터 출력
            foreach (var t in todos)
            {
                Console.WriteLine($"{t.Id} - {t.Title} ({t.IsDone})");
            }
        }
    }
}

-2. 데이터 입력 및 변경 데이터 출력

using CShopTodoApp.Models;
using System;
using System.Collections.Generic;

namespace CShopTodoApp.ConsoleApp
{
    class Program
    {
        static void Main(string[] args)
        {
            ITodoRepositoryInMemory _repository = new TodoRepositoryInMemory();

            List<Todo> todos = new List<Todo>();
            todos = _repository.GetAll();

            // [1] 기본 데이터 출력
            foreach (var t in todos)
            {
                Console.WriteLine($"{t.Id} - {t.Title} ({t.IsDone})");
            }

            // [2] 데이터 입력
            Todo todo = new Todo { Title = "Database", IsDone = true };
            _repository.Add(todo);
            todos = _repository.GetAll();
            // [3] 변경 데이터 출력
            foreach (var t in todos)
            {
                Console.WriteLine($"{t.Id} - {t.Title} ({t.IsDone})");
            }
        }
    }
}

10. 커밋 및 분기 추가




profile
아직까지는 코린이!

0개의 댓글