목록전체 글 (249)
방프리
IPO - 기업 공개를 뜻함. 기업 공개를 통해 투자를 유치할 수 있고, 현재 우리 회사가 어떤 사업이 진행되고 있는지? 앞으로의 비전 등이 홍보가 가능하다. 우선주- 주주총회에 참석, 의견을 낼 수 없는 대신 배당 금액이 크다. 즉, 회사 결정에 대해 아무런 의의를 발언할 수 없는 대신 돈을 더 받는다는 뜻.구형 우선주와 신형 우선주로 나뉘는데 신형 우선주는 종목명 뒤에 우B가 붙는다. 구형 우선주는 높은 배당률을 보장하고, 신형 우선주는 배당 지급을 보장받는다. 신형 우선주는 배당금 지급을 못받았다면, 이월되어서 받을 수 있다. ETF- 상장지수펀드, 수수료도 낮고 세금이 붙지 않는다. 증감폭이 그다지 크지 않다. 안전한 투자를 지향한다면 고려해볼만하다. OEM- 기업에서 제공하는 설계 혹은 개발방..

Item 21 : 타입 매개변수가 IDisposable을 구현한 경우를 대비하여 제네릭 클래스를 작성하라 제약조건은 두 가지 역할을 한다. (1) 런타임 오류가 발생할 가능성이 있는 부분을 컴파일 타임 오류로 대체 (2) 타입 매개변수로 사용할 수 있는 타입을 명확히 규정하여 사용자에게 도움 하지만 타입 매개변수로 지정된 타입이 제약 조건을 통해 요구하는 작업 외에 다른 작업을 추가로 수행할 수 있는지에 대해서는 신경쓰지 않는다. 하단의 코드는 제네릭 메서드 내에서 타입 매개변수로 주어지는 타입을 이용해 인스턴스를 생성할 때의 처리다. using 구문을 통해 해당 타입에 IDisposable이 구현되어 있는지 확인 후 해당 함수를 실행시키는 것이다. (쉽게 생각해서 null 체크를 한 것이다.) 함수가 ..
올해 들어서 이 Oculus Quest로 프로젝트를 포팅하는데 꽤나 고생을 많이 했다. 덕분에 새해들어서부터 야근에.... 주말출근에.... 정신없는 나날들을 보냈다. 이 과정에서 굉장히 많을 걸 배웠는데 까먹기 전에 기억도 되짚어볼겸 정리해보려고 한다. 1. 텍스쳐 압축은 필수적으로!! - 가장 문제가 되는 부분이였다. 텍스쳐 압축은 그냥 블로그나 타 사이트에서 정리된 것만 보고 오... 이런거구나라고만 느꼈지 PC에서는 그다지 필요성을 못느꼈는데, Oculus Quest가 안드로이드 환경이다보니 확 체감되었었다. 압축하지 않고 프로파일링 검사 시 큰 것은 한 장당 800MB까지 먹는 걸 보고는 무조건 해야겠다라는 생각을 하였다. 2. 빌드 시에는 이제는 x64비트로만 - 구글 플레이스토어, Oculu..

프로젝트를 진행하면서 유저들의 스크린샷 이미지를 S3에 올리는 작업을 진행하게 되었다. 이전에 C++로 AWS SDK 개발을 찾아보다가 포기했는데 다행히 C#에서는 좀 더 쉽게 구현할 수 있었다. NuGet 패키지에서 AWSSDK.S3를 이용하면 굉장히 쉽게 업로드가 가능하다. 코드도 그다지 어렵지 않았다. (하지만 그 과정을 찾는건 어려웠다.... 업로드 안되고 막 ㅜㅜ) 위의 코드에서 accessKey와 accessSecretKey는 무조건 발급 받은 후에 사용할 수 있다. (위의 키가 없다면 연결 자체가 불가능하다.)

Item 20: IComparable와 IComparer를 이용하여 객체의 선후 관계를 정의하라 앞에서의 Enumerable과 같이 인터페이스를 통해 Compare를 구현할 수 있다. 이 IComparable는 CompareTo()라는 메서드 하나만을 정의하고 있는데 이 함수는 C 라이브러리의 strcmp 함수의 구현방식을 그대로 따르고 있다. .NET 환경에서 최신 API들은 IComparable를 사용하지만, .Net Framework 2.0이하에서는 object 타입을 받는 IComparable을 사용하고 있기 때문에 두 가지를 같이 구현해주어야 한다. 하지만 위의 코드는 object 타입을 받기 때문에 연산량이 굉장히 많아진다. (박싱과 언박싱) 위의 코드에서는 선후 관계를 명시된 타입으로 재정의..

Item 19 : 런타임에 타입을 확인하여 최적의 알고리즘을 사용하라 제네릭 타입을 사용할 때 알고리즘이 특정 타입에 대해 더 효율적으로 동작한다고 생각되면 그 타빙르 이용하도록 코드를 작성해야한다. 제약 조건을 설정하는 것은 항상 효과적인 방법이 아니기 때문이다. 제네릭의 인스턴스화는 런타임의 타입을 고려하지 않으며 컴파일타임의 타입만을 고려한다.

Item 18: 반드시 필요한 제약 조건만 설정하라 이 주제에 앞서 제약 조건이란? 클래스가 작업을 올바르게 수행하기 위해서 타입 매개변수로 전달할 수 있는 타입의 유형을 제한하는 방법이다. 제약 조건을 적절히 잘 사용하면 예외에 대한 처리를 쉽게 할 수 있으나 너무 설정하지 않으면 런타임에 들어가는 예외처리가 많아지고 그렇다고 너무 조건이 있으면 해당 클래스를 사용 하기 위해 추가작업이 많이 들어가게 된다. 이 제약 조건은 제네릭 타입에 대해 우리가 가정하고 있는 사실을 컴파일러와 다른 개발자에게 알려주는 용도로 사용된다. 컴파일러에게 제약 조건을 알려주는 것은 컴파일러 입장에서 두 가지 장점이 있는데 첫 번째는 제네릭 타입을 작성할 때, 두 번째는 제네릭 타입을 사용하는 하용자가 타입 매개변수로 올바..

Item 17: 표준 Dispose 패턴을 구현하라 C++에서 코딩할 때 가장 중요한 것은 메모리 관리이다. 솔직히 DirectX나 학교 과제로 MFC 공부할 때, 특히 서버 개발 일을 할 때 메모리 관리하는 것은 굉장히 신경쓰이고 짜증나는 일이었다. C#에서는 가비지 컬렉터가 알아서 처리해주니까 이에 대한 부담감이 확실히 덜하긴 하지만 내부적으로 봤을 때 가비지 컬렉터도 코드로 돌아가고 있는 존재이기 때문에 마냥 안심만은 할 수가 없다. 또한 메모리라는 것이 가비지컬렉터가 알아서 해주면 편하지만 이 시점을 개발자들이 제대로 알 수 없기 때문에 버그를 만들 수도 있다. 예로 언리얼 엔진 서밋에 참가했을 때 맨 처음 C#으로 개발을 진행했던 프로젝트가 메모리가 해제되는 시점을 제대로 알 수 없어서 C++로..