본문 바로가기

전체 글

(56)
[NDC] 이놈의 enum의 박싱을 어찌할꼬 (동영상링크) https://www.youtube.com/watch?v=pP9R58fQo_k 한번 쭉 봤는데 가볍게 보기 좋고 정리하기도 좋은 내용이라 나중에 정리해야지.
CLR via C# 23장 어셈블리 로딩과 리플렉션 Notion에서 보기 이번 장에서는 컴파일 타임에 전혀 알지 못했던 타입에 대해 타입의 세부 정보를 알아내고 인스턴스를 생성하는 등의 방법(리플렉션)에 대한 것을 배운다. 이는 주로 동적으로 확장 가능한 프로그램을 만들 때 활용되는 기법이다. 동적으로 확장 가능한 프로그램은 22장에서 살펴본 CLR 호스팅과 앱도메인의 장점을 활용할 수 있다. 호스트는 고유의 앱도메인 내에서 다른 앱도메인의 코드(애드인 등)를 수행할 수 있고 또 언로드할 수 있다. 어셈블리 로딩 컴파일 타임에 JIT 컴파일러가 IL을 컴파일하다 보면 어떤 타입들이 참조되고 있는지를 알게 된다. 그리고 런타임에는 참조되고 있는 타입들이 어느 어셈블리에 정의되어 있는지를 확인하기 위해서 TypeRef, AssemblyRef 메타데이터 테이블..
CLR via C# 9장 매개변수 선택적 매개변수와 명명된 매개변수 메서드를 선언할 때, 매개변수에 기본값(default)을 설정할 수 있다. 이렇게 매개 변수에 기본값을 설정한 매서드를 호출할 때에도 매개변수를 선택적으로 사용할 수 있다. 이 떄 이 선택에 누락된 매개변수는 기본값이 대입된다. 메서드를 호출할 때 특정 매개변수의 이름을 지정하여 호출하는 것도 가능하다. 매개 변수에 기본값을 지정할 때의 규칙과 가이드라인. 메서드, 생성자 메서드, 인덱서 (this[int idx] 로 접근하는 메서드)와 같이 매개변수가 존재하는 프로퍼티, 델리게이트를 사용할 경우 기본값을 지정할 수 있다. 기본값이 있는 매개변수는 C++과 동일하게, 기본값이 없는 매개변수보다 앞에 와야 한다. 기본값은 컴파일 타임에 알 수 있는 값이어야 한다. 레퍼런스..
CLR via C# 2장 빌드, 패키징, 배포, 응용프로그램과 타입의 관리 .NET Framework 배포 목표 지난 수년간, Windows는 불안정하고 복잡한 운영체제라는 인상이 있었다. 1. DLL지옥 실행되는 응용프로그램들이 여러 제조사가 만든 코드를 실행하기 때문에, 만들어 놓은 코드 조각이 누구에 의하여 어떻게 사용될 것인지 확실히 알수 없음. 사용자들은 프로그램을 업데이트하고 새로운 파일을 배포받을 때마다 문제를 겪을 수 있다. 시스템 DLL의 응용프로그램을 설치할 경우 다른 버전의 DLL로 덮어 씌워진다던지, 하는 문제. (Windows 2000 이후 Windows File Protection 기능을 통해 대부분 해결되었다고 함.) 2. Windows 설치가 복잡하다고 여겨진다. (Windows에서의 응용프로그램 설치) 대다수의 응용프로그램들은 설치 후에 시스템의 ..
CLR via C# 17장 델리게이트 17장 델리게이트. 델리게이트 살펴보기. 이번 장에서는 콜백 함수라는 프로그래밍 메커니즘에 대해서 이야기하려고 한다. .NET Framework는 이 매커니즘을 델리게이트라는 형태로 노출하고 있다. 네이티브 C/C++에서 비멤버 함수의 주소는 단지 메모리 주소일 뿐이다. 이 주소는 다른 정보를 일절 포함하지 않는다. (함수 시그니쳐, 함수 호출 규칙 등의 정보) .NET Framework는 이와 같은 델리게이트라는 타입 안정성을 준수하는 메커니즘을 제공한다. using System; using System.IO; internal delegate void Feedback(int value); public sealed class Program { static void Main(string[] args) { ..
Unity Reflection을 이용한 Factory pattern 구현. Unity에서 사용할 factory pattern을 구현하던 도중 Unity3d College라는 채널에 올라온 영상을 보고 구현. 채널 자체는 기본적인 내용들이 들어가있어서 둘러보기 괜찮을 것 같다. 코드는 영상과 같진 않고, 조금씩만 바꿨다. public interface IHaveStringIdentifier { string Identifier { get; } } public interface IBuffBehavior : IHaveStringIdentifier { void DoBuffBehavior(); } public sealed class BonusHPBuff : IBuffBehavior { public string Identifier => BuffBehaviorType.BonusHp.ToStr..
내가 기대하는 C++17 - std::optional 위와 같이 아이템의 슬롯 인덱스로 해당 아이템을 찾는 기능을 수행하는 일은 빈번하다. 동작이 실패할 수 있는 함수를 호출할 때, 반환 타입이 Nullable하다면 (InventoryItem*) nullptr를 반환하면 된다. 그러나 반환값이 Value 타입이라면? 위와 같이 함수 수행의 결과물인 bool 값을 반환하고, 실제 반환값인 item은 참조 파라미터로 받아야만 한다. Pair 객체로 해당 함수 실행 결과물의 유효성을 반환한다. 반환값의 대상이 되는 객체가 스스로 Valid 하지 않음을 알려주는 함수를 지원하여 Nullptr 검사와 같이 isValid 함수를 콜하도록 한다. std::optional은 이런 경우를 더 우아하게 처리할 수 있도록 도와준다. 위의 코드는 아래와 같이 쓸 수 있다. st..
설날에 생각한 것들 #1 요 몇 일간 엄청 빠져버린 스타듀 밸리. 분명 재작년에 PC로도 샀었었다. 그 때는 30분하고 다시는 켜본적이 없었다. 심지어 한글판이었다. 그런데 왜 스위치로는 이다지도 재미있는 걸까. 하여간 흠뻑 만끽하고 있다. 젤다로도 느끼지 못한 스위치의 충족감을 여기서 느끼는 중. 근데 왼쪽 조이스틱이 고장난 것 같다... 왼쪽으로 움직이는게 잘 안먹힌다. 분명 쓴지 얼마 되지도 않았는데 왜 고장났을까... 하여간 조이콘은 소모품이라는 회사 형의 말이 와닿는다. 이거 사려면 비싸던데... ㅠㅠ 닌텐도 AS를 알아봐야 겠다. #2 앞으로 5년 내에 개발자로서 이루고 싶은 것들? 을 생각해야만 하는 일이 생겼다. 막연하게만 아른거리고 있던 것들을 생각의 메인으로, 또 입으로 글로 끌어내리려다보니 굉장히 어렵다..