분류 전체보기 294

C++ Core Guidlines 인터페이스

Interface I.1: 인터페이스는 명확하게(explicit) 작성하라 I.2: const가 아닌 전역변수를 지양하라 I.3: 싱글톤 패턴을 지양하라 I.4: 인터페이스가 타입 시스템을 정확하고 엄격하게 준수하도록 만들어라 I.5: (하나라도 있다면) 사전 조건을 기술하라 I.6: 사전 조건을 표현하고 싶다면 Expects()를 사용하라 I.7: 사후 조건을 기술하라 I.8: 사후 조건을 표현하고 싶다면 Ensures()를 사용하라 I.9: 인터페이스가 템플릿이라면 컨셉(Concept)을 사용해서 매개 변수를 문서화하라 I.10: 요구된 작업의 수행 실패를 알리기 위해 예외를 사용하라 I.11: 원시 포인터(T*) 혹은 참조(T&)를 사용해 소유권을 전달하지 마라 I.12: null이 되어선 안되는 ..

C++ Core Guidlines 철학

P.1: 아이디어를 직접 코드로 표현하라 P.2: ISO 표준 C++로 작성하라 P.3: 의도를 표현하라 P.4: 이상적으로 프로그램은 정적으로 타입 안전해야 한다 P.5: 런타임 검사보다는 컴파일 타임 검사를 선호하라 P.6: 컴파일 타임에 검사할 수 없다면 런타임에 검사할 수 있어야 한다 P.7: 런타임 오류는 초기에 잡아라 P.8: 리소스가 새도록 하지 마라 P.9: 시간이나 공간을 낭비하지 마라 P.10: 변경 가능한 데이터보다 변경 불가능한 데이터를 더 자주 사용하라 P.11: 복잡한 생성과정은 캡슐하라 P.12: 지원 도구를 적절히 활용하라 P.13: 지원 라이브러리를 적절히 활용하라 아이디어를 직접 코드로 표현해라 첫번째 month 함수는 명확히 Month를 반환하도록 선언되어 있으며, Da..

C++ Core Guidlines 소개

C++ 표준 위원회에서 작성한 C++ 핵심 가이드 라인입니다. C++ Core Guidelines는 비야네 스트롭스트룹이 주축이 되어 작성되었으며 작성되고 있습니다. 이 가이드 라인의 목적은 사람들이 모던 C++을 효과적으로 사용하도록 돕는 것입니다. 원문 : https://github.com/isocpp/CppCoreGuidelines isocpp/CppCoreGuidelines The C++ Core Guidelines are a set of tried-and-true guidelines, rules, and best practices about coding in C++ - isocpp/CppCoreGuidelines github.com 한글화 : https://github.com/CppKorea/C..

AnkhSVN Visual Studio 2019 설치 하기

최신 AnkhSVN 버젼은 Visual Studio 2019를 지원하고 있지 않습니다. vsix 파일의 사용 가능 솔루션 정보를 수동으로 수정해주면 사용가능하게 할 수 있습니다. https://ankhsvn.open.collab.net/에서 최신 ankhsvn을 다운로드 받습니다. 확장자 vsix를 zip으로 변경합니다. 압축을 풉니다. extension.vsixmanifest [15.0,16.0)를 [15.0,17.0)로 변경합니다. Change the prerequisite in this way: catalog.json Microsoft.VisualStudio.Component.CoreEditor 찾아서 "[15.0,)"로 변경합니다. manifest.json Microsoft.VisualStudio..

각종 팁/svn 2019.11.11

Boost.DI 소개

DI는 Dependency Injection(의존성 주입)입니다. 어떤 클래스가 의존하는 클래스의 인터페이스를 도입하여 의존성을 독립화하고 런타임에 의존 클래스를 결정할 수 있게끔 하는 기법입니다. 의존 클래스를 런타임에 적절한 것으로 "삽입" 한다고 해서 의존성 주입이라 합니다. 예) 전등의 전구 슬롯, 장난감의 건전지 슬롯 등등... ILogger를 ConsoleLogger에 연결한다. ILogger를 요청하면 ConsoleLogger를 전달한다. 가장 큰 장점은 di::bind().to()코드에서 ConsoleLogger를 다른 클래스로 바꾸어 주면 injector를 사용하여 생성한 모든 Car의 Logger를 바꿀 수 있다는 것입니다. #include #include using namespace ..

C++ 프로그래머가 알아야할 C# 기능 요약

C++만 개발하다가 C#으로 서버 개발을 해야지하고 마음을 먹은 다음 C# 기본서를 읽으면서 특별히 기억했으면 해서 그록해 두었던 내용들이네요. 요즘은 첫 언어로 C++보다는 C#을 먼저 접하는 분들이 많지만 예전에는 C#은 더더욱 젋은 언어였었네요. 값 타입 & 참조 타입 값 타입: 선언과 동시에 메모리 할당 byte, char, int, long, float, double, decimal, bool, struct, enum 참조 타입 : 선언 후 메모리를 직접 할당 참조 변수로 함수 인자 전달(ref, out) ref : 반드시 초화 하고 전달. out : 초기화 필요 없다. void func(ref int x) void func(out int x) C#에서 포인터 사용(unsafe 코드) 컴파일 옵..

SOLID 디자인 원칙

객체지향 프로그래밍에서, SOLID는 5가지 디자인 원칙들의 첫 글자들을 결합입니다. 이 원칙들은 소프트웨어 디자인을 더욱 이해하기 쉽고 유연하고 유지보수 하기 쉽게하는 원칙들입니다. Robert C. Martin에의해 제안된 여러 원리들중의 일부입니다. SOLID 원칙은 많은 객체 지향 디자인에 적용 되지만 agile development 또는 adaptive software development 와 같은 개발 방법론의 핵심 철학이 됩니다. SOLID - WikipediaFrom Wikipedia, the free encyclopedia Jump to navigation Jump to search Object-oriented programming design principles This article ..

네비게이션 메쉬 + A* (Navigation Mesh + AStar)

2004년 MMORPG 게임 서버 개발시에 정리 했던 내용이네요. 추억이 새록 새록~ 지금은 너무 당연하고 공개된 자료도 많지만, 그 때는 정보 하나 하나가 너무 소중하고 덕분에 삽질 많이 했었지요. 네비게이션 메쉬 + A* (Navigation Mesh + AStar) : 3차원 지형을 2D처럼 간단하게 표현 하는 방식으로 Object가 이동 가능한 모든 지형을 Cell(삼각형)으로 표시 하여 A*와 같은 길찾기 알고리즘을 쉽게 적용 할 수 있게 해 줍니다. [Navigation Mesh] 1. NaviCell 만들기 Cell 이란? vetex 세개로 구성되어 이루어 진 하나의 삼각형입니다. - 삼각형의 사이드 라인 세개를 만듭니다. - 평면 방정식을 위한 Plane을 생성 합니다. - Cell의 중점..

프로그래머, 조급증을 버리자.

2019년 도서관 한켠에 앉아 2009년 어느날에 작성했던 글을 다시 꺼내 보고 있지요. "프로그래머들은 빨리 코딩에 들어 가고 싶은 조급증을 가지고 있다. 그리고 빨리 컴파일을 해보려는 조급증이 있다. 빨리 다음 단계로 넘어 가고 싶은 조급증이 있다. 작은 프로그램을 개발 할때는 문제 없을 수 있다. 그러나 여러명이 참여 하는 큰 프로젝트에서는 이는 결국 추후 유지보수의 어려움 소스의 리팩토링이라는 재앙이 되어 자신에게 되돌아 올 것이다. 프로그래머는 객체지향 설계와 디자인 패턴등의 지식기반을 갖추어 나가야 합니다. 이러한 설계 능력은 단기간 내에 지식적으로 습득 하였다고 해서 이루어 질 수 있는 것이 아니라 경험이 바탕이 되어야 가능해 지는 것이기에 너무 조급해 하지는 말아야 합니다. 작은 프로젝트에..