전체 글 45

C/C++ 개념: 완전한 타입(Complete Type), 불완전한 타입(Incomplete Type)

완전한 타입(Complete Type), 불완전한 타입(Incomplete Type) 1. 설명 완전한 타입이란, 해당 컴파일 시점에서 그 타입(구조체(struct), 열거자(enum), 공용체(union), 클래스(class))의 구현(Implement) 정보를 모두 알고 있는 타입을 말합니다. 위 4가지를 제외한 모든 타입은 무조건 완전한 타입입니다. 불완전한 타입이란, 해당 컴파일 시점에서 그 타입의 구현 정보를 알지 못하고, 선언된 정보만 알고 있는 상태를 말합니다. ※ 타입의 어떠한 정보도 알지 못하는건 그냥 알수 없는 타입(unknown type)이나 알수 없는 식별자(unknown identifier) 입니다. 보통 실수로 헤더를 넣지 않거나 했을 때 생깁니다. 2. 예시 #include s..

C++ 디자인: PImpl

C++ 디자인(Design): PImpl (Pointer to Implement) 1. 설명 Pimple 디자인은 헤더 파일에서는 실제 구현을 담당하는 클래스를 불완전한 타입으로 선언하고 이에 대한 포인터만 원래 클래스에 남겨두고, 소스 파일에서 구현 클래스를 정의하는 방법입니다. 그래서 Pointer to Implementation (구현(클래스)에 대한 포인터)라는 이름이 붙게 되었습니다. 이로 인해서 얻는 장점은 크게 2가지가 있습니다. 1. 컴파일 시간 단축 / ABI 호환성 보장 내부 구현이 바뀌어도, 헤더만 참조하는 파일은 재 컴파일이 필요하지 않음 2. 소스 코드 은닉 소스 파일을 빌드해서 배포할 시, 소스 코드를 은닉할 수 있습니다. 다만, 구현 클래스가 템플릿 특수화된 클래스거나, 팩토리..

C 강좌 0강 - C 언어란?

0. 서론 C++ 강좌를 작성 하고 있었는데.. 하다 보니까 이게 도저히 C 강좌를 먼저 쓰지 않으면 진행이 안 되겠더군요. 기본적인 자료구조나 함수, 포인터들은 C 에서 그대로 물려받다 보니, 해당 부분들을 따로 부연설명 하려니 그것도 너무 사이즈가 켜져서.. 어차피 그런 부분들을 알면 C언어도 초급은 떼는 거나 마찬가지이니 그냥 C 강좌를 먼저 작성하는게 좋겠다고 생각이 드네요 프로그래밍을 처음 접하시거나, 다른 언어들을 접하시고 온 분들도 잘 이해할 수 있게 작성하는걸 목표로 잡았습니다. 본 강의에서는 C 언어의 기능이지만, 쓸일도 거의 없고 괜히 머리만 복잡해 지는 - 다차원 배열 포인터나 구조체의 비트필드 및 메모리 정렬 등 - 은 링크로 빼 놓았으니, 링크는 굳이 들어가 보시지 않으셔도 됩니다..

산업기능요원 훈련소 후기 2: 입영 준비

입영 준비랄 꺼 까진 아니고.. 그냥 산업기능요원이 어떻게 훈련소를 가는지에 대해 규정이나 편지를 받기 위해 반드시 해야할 일 등을 알려드리고자 합니다. 1. 입영 신청 제가 알기로는 신청하는 방법이 2개가 있습니다. - 본인 선택 - 강제 통보(?) 본인 선택은 제가 알기로는 연초부터 가능 한 것으로 알고 있습니다. 편입 직후에는 당연히 안되고, 신청가능한 날짜 이후로 어느 기간(3개월이었나..?) 안에 해당 연도의 원하는 입영 일자를 골라 신청할 수 있습니다. 2020년에는 모든 입영부대가 논산훈련소 밖에 없었는데, 아마 산기요는 논산밖에 못 가나 봅니다 ㅠㅠ 한번 선택하면, 바꿀 기회를 한번 더 줍니다(2번 이상은 못 바꿈) 자리는 항상 텅텅 비어 있으니, 시간 맞춰서 안 해도 됩니다. 강제 통보는..

산업기능요원 훈련소 후기 1: 준비물

저는 현재 산업기능요원으로 복무 중입니다. 서초구의 모 IT 회사에서 근무 중이고, 복무는 작년 12월부터 시작했습니다. 입사한지 9개월 정도가 지나고 훈련소(논산)에 들어갔는데, 입소 전에 훈련소에 대한 정보가 궁금하여 열심히 찾아 봤던 기억이 납니다. 산업체라면 공익이랑 비슷할 것 같은데, 그렇다고 공익은 또 아니고.. 주변 대부분은 현역 아니면 공익이니 참 물어볼 소스가 매우 적기도 했습니다. 그래서 혹여나 저와 비슷한 처지의 분들이 계실까봐 저도 준비물(?) 이나 후기에 대해 적어보려고 합니다. 2020년 입소 예정자라면! 반드시! 후회지 말고! 내년으로 미루시는걸 추천드립니다. 내년부터는 4주가 아닌 3주로 바뀌었습니다. 빨리 가려고 올해 갔다가 피눈물 흘리는 동기들의 전화를 받는 중이네요.. ..

C++ 템플릿(Template): SFINAE

C++ Template: SFINAE Substitution Failure Is Not An Error SFINAE는 C++ 템플릿 프로그래밍에서 자주 쓰이는 기법입니다. 컴파일러가 알맞은 함수를 추론(deduce) 하는 원리를 이용해, 받는 타입을 제한하거나 타입에 따라 행동을 다르게 할 때 주로 사용하게 됩니다. SFINAE is a technique that is often used in C++ Template Programming. It restrains function parameter types by using the mechanism of how the compiler deduces appropriate overloaded functions and calling the appropriate ..