분류 전체보기
-
[Github] 원격 저장소 연동하기기타 2022. 9. 16. 16:46
Git은 VCS를 제공하면서, 코드 및 작업물을 원격 저장소에 보관하는 역할도 합니다. Git의 초기 설정과 관련된 내용은 Git 홈페이지의 링크로 대체하도록 하겠습니다. Git 최초설정 본문의 내용은 위 링크의 계정 설정이 완료되었음을 가정하고 작성되었습니다. Git bash를 사용해서 Github의 원격 저장소를 이용하는 방법을 살펴보도록 하겠습니다. 1. Git init 더보기 해당 로컬 디렉토리에서 Git bash을 열어줍니다. git init 명령어를 통해 해당 디렉토리를 git 로컬 저장소로 지정합니다. .git 폴더가 생성됨을 확인할 수 있습니다. (숨김 폴더이기 때문에 설정에 따라 보이지 않을 수 있습니다.) 2. 원격 저장소 설정하기 더보기 원격 저장소를 지정하는 과정입니다. git re..
-
[Visual Studio] Code style 변경하기 (BSD, K&R)C++/미분류 2022. 9. 14. 16:54
소스코드를 작성하는 스타일은 크게 BSD, K&R의 두 종류가 있습니다. 이번 글에서는 두 코드 스타일을 살펴보고, Visual Studio의 코드 편집 스타일을 변경하는 방법을 다룹니다. 1. Code style : BSD 더보기 BSD 스타일은 Allman 스타일이라고도 불립니다. 형태는 아래와 같습니다. void function() { someFunction(); } 중괄호에 현재 스코프와 같은 수준의 공백을 사용하되, 개행 문자를 사용합니다. 이후 본문의 내용은 한 수준 아래로 들여쓰기 합니다. 2. Code style : K&R 더보기 K&R 스타일은 다음과 같은 형태를 가지고 있습니다. void function() { someFunction(); } 본문의 내용을 한 수준 아래로 들여쓰는 것은..
-
[Github] Project 사용하기기타 2022. 9. 12. 12:18
Github의 레포지토리는 소스 코드, 혹은 그와 관련된 파일들을 보관할 수 있는 저장소 입니다. 프로젝트는 레포지토리와 독립적으로 진행될 수 있습니다. 한 개의 레포지토리에서 여러 개의 프로젝트를 진행하거나, 한 개의 프로젝트에서 여러 개의 레포지토리를 이용하는 등의 상황이 생길 수 있습니다. Github는 이러한 유동적인 상황을 관리하기 위해 Project툴을 제공합니다. 이번 글에서는 Github에서 제공하는 Project에 대하여 살펴보도록 하겠습니다. 1. Project 더보기 Project는 레포지토리와 독립적입니다. Project를 레포지토리에서 생성할 수는 없고, 만들어진 Project를 가져오는것 만 할 수 있습니다. Project는 Organization 단위에서 종속적입니다. 따라서 ..
-
[Github] Issue 사용하기기타 2022. 9. 9. 14:22
Github는 VCS만 제공하는 저장소가 아닙니다. 개발을 효율적으로 진행하기 위한 여러 도구들을 제공합니다. 그 중 Issue는 프로젝트에 관한 여러 Issue들 (프로젝트 진행중의 버그 뿐만이 아닌, 프로젝트에 관한 질문, 수정사항 등을 포함합니다.)을 관리하기 위한 기능입니다. 이번 글에서는 Github에서 제공하는 issue 기능에 대하여 살펴보도록 하겠습니다. 1. Issue 만들기 더보기 Github의 레포지토리에 들어가면, 상단 탭 중 Issue 탭을 찾을 수 있습니다. Issue 탭의 New Issue 버튼을 통해 Issue를 만들 수 있습니다. 게시판에 글을 작성하듯 제목과 내용을 적을 수 있습니다. 내용은 마크다운 문법과 멘션, 체크박스 등의 기능을 지원합니다. 이슈의 제목, 내용 외에..
-
[Github] Organization 만들기기타 2022. 9. 3. 22:38
VCS를 개인 레포지토리에서 하기 난감한 상황이 있을 수 있습니다. 팀 단위 프로젝트를 진행할 때, 팀 내에 여러 프로젝트를 진행할 때 등의 경우가 그것입니다. Github는 이러한 상황을 위한 추가적인 그룹을 만드는 기능을 제공합니다. 1. Github 로그인, Organization 생성 더보기 Github 로그인 후, 우측 상단의 프로필 아이콘을 클릭합니다. 개인 프로필을 포함한, 참여중인 Organization들이 나타납니다. 빨간 박스로 표시되어 있는 Create Organization 버튼을 클릭합니다. 이후 Organization의 종류를 선택할 수 있습니다. 가격대별로 제공하는 기능에 차이가 있으므로, 필요한 기능이 있는 항목을 선택합니다. 이 글의 예시는 Free Plan을 적용했습니다...
-
[Effective Modern C++] Lambda : Default capture의 위험성C++/Effective Modern C++ 2022. 8. 30. 12:22
람다에 관한 기본적인 내용은 다른 글(람다 표현식)에 기술되어 있습니다. 람다의 기본 캡쳐 모드(Default capture mode)는 두 가지로, 참조 캡쳐와 값 캡쳐가 그것입니다. 이 기본 캡쳐 모드는 다음과 같은 이유로 안전하지 않습니다. 기본 참조 캡쳐는 참조가 대상을 잃을 위험성이 있습니다. 기본 값 캡쳐 또한 대상을 잃을 수 있고, Self-contained하지 않습니다. 이번 글에서는 위의 내용에 조금 살을 붙여, 기본 캡쳐 모드의 위험성에 대해 살펴보도록 하겠습니다. 1. 기본 참조 캡쳐가 대상을 잃는 경우 더보기 참조 캡쳐를 사용하는 클로저는 지역 변수 혹은 람다가 정의된 범위에서 볼 수 있는 매개변수에 대한 참조를 가지게 됩니다. 그런데 이 때, 클로저의 수명이 대상 지역 변수, 매개..
-
[Effective Modern C++] 완벽 전달(Perfect forwarding)의 실패C++/Effective Modern C++ 2022. 8. 23. 13:55
완벽 전달이란, 함수가 다른 함수로 자신의 인수들을 전달하는것을 의미합니다. 이 때, 전달받는 함수가 받는 객체와 전달하는 함수의 객체가 동일하기 때문에 완벽이라는 수식어를 사용합니다. 완벽 전달은 객체의 형식, const, volatile등의 속성 또한 전달되어야 합니다. 따라서 전달 함수 std::forward를 사용하게 되고, 전달 함수를 작성할 경우 아래와 같이 됩니다. template void fwd(Ts&&... param) { f(std::forward(param)...); } fwd함수는 f로 인수를 전달합니다. 이 때 매개변수가 한개라는 보장이 없으므로, 가변 인수 템플릿을 사용합니다. 위와 같이 함수를 작성했을 때, fwd를 통한 f의 호출과 f를 직접 호출했을 때의 결과가 다르다면, ..
-
[Effective Modern C++] 이동 시맨틱의 맹점C++/Effective Modern C++ 2022. 8. 18. 15:30
이동 시맨틱(Movement semantics)은 C++11의 가장 중요한 기능 중 하나입니다. 이동 연산은 복사 연산을 대체할 때, 속도와 메모리 양 측면에서 더 효율적입니다. 확장성 또한 굉장히 좋은 편 입니다. C++98이전에 작성된 복사 연산을 사용하는 코드를 C++11로 컴파일 할 때, 그것이 이동 연산이 가능한 형식이라면 자동적으로 더 빠르게 실행됩니다. 하지만 이렇게 추가된 이동 연산이 항상 유효하지는 않습니다. 이번 글에서는 이동 연산을 맹신하지 않고, 사용할 때 판단해야 할 근거들을 살펴볼 것 입니다. 1. 이동 연산이 존재하지 않을 때 더보기 컴파일러를 C++98에서 C++11로 바꾼다고 해도, 이동 연산이 없을 수 있습니다. 버전의 차이, 혹은 사용하는 라이브러리의 이슈 등으로 코드가..