TIL(2023.08.24)

최장범·2023년 8월 24일
0

TIL

목록 보기
14/50

오늘의 공부 내용

===4주차 강의 복습===
1.람다 (Lamda)

  • method이름없이 사용이 가능한 함수 (익명메서드)
  • *필요할 때만 호출하여 사용하는 방식, 메모리상의 불필요한 연산을 줄인다는 것이 장점이다*

2.델리게이트 (Delegate)

  • 누군가를 대신해서 일을 해주는 역할, 대리자
  • 데이터 타입을 안전하게 처리한다는 장점이 있음
  • method의 주소를 할당한후 델리게이트를호출하면 델리게이트가 할당한 메소드를 호출함
  • method를 참조하는 타입
  • c언어의 함수포인터 같은 것
  • delegate와 실제 선언된 메소드의 이름은 달라도 되지만, 형태는 같아야 한다. 즉 받는 인수의 순서와 변수형, 반환형이 모두 같아야 한다.
  • delegate가 필요한 이유?
    - 대리자를 사용하면 메서드끼리 연결 및 조합이 가능하다

-사용예시

delegate int Calculate(int x, int y);

static int Add(int x, int y)
{
    return x + y;
}

class Program
{
    static void Main()
    {
        // 메서드 등록
        Calculate calc = Add;

        // 델리게이트 사용
        int result = calc(3, 5);
        Console.WriteLine("결과: " + result);
    }
}

-사용예시

//MyDelegate라는 대리자(delegate)
public delegate void MyDelegate(string msg);

public static void MethodA(string msg)
{
	Console.WriteLine("param of methodA : " + msg);
}
public static void MethodB(string msg)
{
  Console.WriteLine("param of MethodB : " + msg);
}

MyDelegate del; // 대리자 인스턴스생성

del = new MyDelegate(MethodA); //MethodA 메서드를 참조
del("Method A Call"); //MethodA처럼 사용

del = new MyDelegate(MethodB);
del("Method B Call");

-delegate를 쓰면 효율적인 상황

>work,success,failure의 여러가지 상황들을 수행하는 여러 메서드들이 필요한 상황
>Func, Action delegate로 메서드를 전달 받아 하나의 SuccessFailHelper 메서드 하나로 전부 처리할수 있음
>아래와 같은 상황에서 대리자(delegate)를 사용하지 않으면 메서드를 
 조합하는 메서드를 새로 추가하고 로직을 만들게 되고 그러면 코드가 증가하게 되는 단점이 있음
public static bool work1()
{
  //...
}
public static bool work2()
{
  //...
}
public static bool work3()
{
  //...
}

public static void success1()
{
  //...
}
public static void success2()
{
  //...
}

public static void failure1()
{
  //...
}

public static void failure2()
{
  //...
}

public static void SuccessFailHelper(Func<bool> work, Action success, Action failure)
{
  if (work())
    success();
  else
    failure();
}

static void Main(string[] args)
{
  SuccessFailHelper(work1, success1, failure1);
  SuccessFailHelper(work1, success2, failure2);
}

3 .Func과 Action

  • Func과 Action은 델리게이트를 대체하는 미리 정의된 제네릭 형식

  • Func는 값을 반환하는 method를 나타내는 Delegate
    - ex) Func<int, string>은 int를 입력받아 string을 반환하는 method

  • Action은 값을 반환하지 않는 method를 나타내는 Delegate
    - ex) Action<int, string>은 int와 string을 입력으로 받고 값을 반환하지 않는다

4 .LINQ (Language Integrated Query)

  • Query란 쉽게 말해 데이터 베이스에 정보를 요청하는것
  • LINQ는 .NET프레임워크에서 제공되는 쿼리 언어 확장
  • 데이터 베이스 쿼리와 유사한 방식으로 데이터를 필터링,정렬,그룹화,조인등 다양한 작업을 수행가능
// 데이터 소스 정의 (컬렉션)
List<int> numbers = new List<int> { 1, 2, 3, 4, 5 };

// 쿼리 작성 (선언적인 구문)
var evenNumbers = from num in numbers
                  where num % 2 == 0
                  select num;

// 쿼리 실행 및 결과 처리
foreach (var num in evenNumbers)
{
    Console.WriteLine(num);
}

오늘 공부한 것에 대한 생각

  1. 과거에 MySQL을 공부했던 부분이 오늘 4주차 강의에서 복습을 하였던 LINQ(Language Integrated Query)를 이해하는데 많은 도움이 되었다.

  2. Func나 Action같은 델리게이트를 이용하여 코드를 짜는것의 장점에 대해 아직은 정확히 이해하지 못하였다. 분명 간결하고 빠르게 짤 수 있지만 지금까지의 코딩경험으로는 델리게이트를 사용해야한다는 상황에 놓인적이 없어서 일 수도 있다는 생각이 든다.

  3. 람다는 사용방식에 의해 메모리상의 불필요한 연산을 줄인다는 장점이 있다는것을 이해했다.

0개의 댓글