[C# 코딩의 기술]에서 얻은 지식들
본 글은 공부하며 작성하였습니다. 정보를 얻으실 때 사실과 다르거나 부정확한 정보가 들어있을 수도 있습니다.
https://ridibooks.com/books/754016655
오늘 'C# 코딩의 기술' 서적을 드디어 다 읽었다. 대화 형식으로 C#의 꿀팁들을 설명해주는 게 좋은 책이었는데, 후반부로 갈 수록 어쩐지 내용에 힘이 빠지는 게 느껴져서 아쉽긴 했다. 어쨌든, 새롭게 얻은 지식들을 정리해보겠다.
IEnumerable 인터페이스
- IEnumerable은 데이터 자체를 저장하는 것이 아닌, 가져오는 방법을 아는 것이므로 메모리를 압박하지 않게 된다.
- 클로저로 인해 지역 변수 int[]가 캡처된다면, 지나치게 거대한 배열인 경우에는 Out of memory 예외가 발생한다.
이 때, IEnumerable<int>로 코드를 바꾼다면 클로저로 캡처되더라도 메모리를 압박하지 않을 것이다.
- List와 달리, IEnumerable은 Add나 Remove와 같이 컬렉션을 늘리거나 줄이는 기능이 없다.
부모형의 객체들을 다시 본래의 자료형으로 되돌려 연산하기
- 세 개의 클래스가 있다고 가정하자. Base, Extend-A, Extend-B 가 있고, 이 중 Extend-A와 Extend-B는 Base를 상속했다.
이 때, Base형으로 만들어진 array 안에 세 클래스의 객체가 섞여서 들어갔다고 하자.
보통 이 array에서 Extend-A만 추출해서 연산한다면, 번거롭게 형변환을 시도하고 해당 형인 경우에만 연산을 수행할 것이다.
하지만 아래와 같이 쓰면 간단하다.
Base[] array = { new Base(), new Extend-A(), new Extend-B() };
foreach(var e in array.OfType<Extend-A>())
{
e.Do();
}
IDisposable, using은 파일 입출력을 할 때는 필수다
- 파일 입출력 시 예외가 발생하여 실행이 중단되면, 열린 파일이 영원히 안 닫힐 수도 있다.
- IDisposable은 using을 벗어난 이후에는 무조건 Dispose()를 실행하게 되므로, 예외가 발생할 수 있는 경우에는 using을 사용하자.
네임스페이스 이름이 같아서 곤란하다면
- 실무 작업을 할 때 System.Random과 UnityEngine.Random은 이름이 같아서 모호한 참조 문제가 발생했다.
- 아래와 같이 using에 별칭을 붙이면 문제가 해결된다.
using UnityEngine;
using System;
using Random = UnityEngine.Random;
public class Test : MonoBehaviour
{
void Start()
{
var result = Random.Range(0, 5);
}
}
'프로그래밍 > C#' 카테고리의 다른 글
Enum.ToString 최적화하기 (0) | 2022.02.25 |
---|---|
[.Net C# 설명서] 읽고 정리하기 (0) | 2021.09.29 |
C# 연산자 오버로딩 : ==, Equals에서 null값 판단하기 (0) | 2021.03.24 |
LINQ Method 정리 (1) | 2020.05.06 |
C# Closure : for문의 변수를 람다식에서 참조하면 슬퍼지는 이유 (2) | 2019.07.29 |
댓글
이 글 공유하기
다른 글
-
Enum.ToString 최적화하기
Enum.ToString 최적화하기
2022.02.25 -
[.Net C# 설명서] 읽고 정리하기
[.Net C# 설명서] 읽고 정리하기
2021.09.29 -
C# 연산자 오버로딩 : ==, Equals에서 null값 판단하기
C# 연산자 오버로딩 : ==, Equals에서 null값 판단하기
2021.03.24 -
LINQ Method 정리
LINQ Method 정리
2020.05.06