Blazor/BlazorApp/ㅎNETCORE 학습/추가적으로 알게 되는 내용.md
2024-10-12 16:04:03 +09:00

3.3 KiB

지식

1. 코드 비하인드 패턴

  • .razor 파일과 .cs 파일을 분리해서 사용하는 방식
  • A.razor
    ├ A.razor.cs
    ⎿ A.razor.css

역할

  1. .razor 파일 : 주로 UI 마크업을 포함
  2. .cs 파일 : 관련 로직을 포함 - @code 블록을 대신해 서로 연결 됨

2. EditForm

  • Blazor 제공하는 Form Compornents.
  • 데이터 바인딩, 유효성 검사, 폼 제출 처리에 사용
  • 사용자 입력 수집하고, 입력 데이터 검증 후 서버나 클라이언트 제출하는 기능 제공

1. InputText

  • @bind-Value 로 변수와 엮어주기
    <선택사항>
  • @oninput 은 입력시 수행할 이벤트 엮어주기
  • @onblur 는 포커스 해제시 수행할 이벤트 엮어주기

3. Attribute

  • 변수나 클래스, 메서드 위에 [ ]를 사용해 속성을 추가
  • 코드에서 어떤 동작이나 정보를 제공하거나, 특정 조건에 따라 처리되는 방식을 지정할 수 있다.
  • 이미 존재하는(Required, Range, Obsolte, 등) 속성들도 있지만, 사용자가 직접 정의해서 사용할 수 있다.
  • 2의 EditForm과 엮으면 좋음

4. Dependency Injection (DI)

  • 의존성 관리를 쉽게 하기 위한 설계 패턴으로 객체가 필요로 하는 의존성을 직접 생성하지 않고,
    외부에서 주입해주는 방식으로 객체 간 결합도를 줄이고 테스트 가능성과 유연성을 높이는 역할을 한다.
  • 의존성(Dependency)란?
    • 간단하게 한 객체가 다른 객체의 기능, 데이터를 필요로 할 때 이를 의존성이라고 한다.
    • A 클래스가 B 클래스의 기능을 사용하면 A는 B에 의존한다고 보면 된다.
  • 핵심 개념
    • 제어 역전(inversion of Control) : DI도 결국 이 개념의 한 형태로서
      전통적으로 객체는 스스로 필요한 의존성을 직접 생성하지만 DI에서는 외부에서 의존성 주입해 객체간 결합도 줄임
    • 느슨한 결합 : DI는 클래스 간 결합도 낮추는 방법으로 객체가 다른 객체의 구체적 구현에 의존하지 않고 인터페이스나 추상 클래스에 의존하게 한다.
      그로 인해 시스템의 유지보수성과 확장성을 높인다.

5. 싱글턴 패턴

  • 가장 유명하고 자주 쓰이면서 남발하면 절대 안되는 패턴
public class Singleton
{
    // Lazy 선언으로 사용시에만 객체를 생성하게 하면서 외부에서 접근할 수 없는 단일 인스턴스를 저장한다.
    private static Lazy<Singleton> _instance = new Lazy<Singleton>(() => new Singleton());

    // 외부에서 해당 인스턴스에 접근하려면 이 속성을 통해서만 접근이 가능
    public static Singleton Instance => _instance.Value;

    private int value = 0;

    // 싱글턴이니까 외부에서 인스턴스 생성 불가하게
    private Singleton()
    {
        // 초기화 
    }

    public int DoSomething(int value)
    {
        // 그냥 아무 동작이나
        Console.WriteLine("DO SINGLETON");
        this.value++;
        return this.value + value;
    }
}

public class Base 
{
    private void CheckSingle()
    {
        Singleton ton1 = Singleton.Instance;
        Singleton ton2 = Singleton.Instance;
        if (ton1 == ton2)
            Console.WriteLine("Same");
    }
}