본문 바로가기

Programming/C & C++

(8)
EC++Study_5 Chapter4. 설계 및 선언 항목 18: 인터페이스 설계는 제대로 쓰기엔 쉽게, 엉터리로 쓰기엔 어렵게 하자. C++에서는 발에 치이고 손에 잡히는 것이 인터페이스이다. (함수/클래스/템플릿) '제대로 쓰기에 쉽고 엉터리로 쓰기에 어려운' 인터페이스를 개발하려면 우선 사용자가 저지를 만한 실수의 종류를 머리에 넣어두고 있어야 한다. 새로운 타입을 들여와 인터페이스를 강화하면 상당수의 사용자 실수를 막을 수 있다. 어떤 타입에 제약을 부여해 그 타입을 통해 할 수 있는 일들을 묵어 버리는 방법도 있다. 제약 부여 방법으로 아주 흔히 쓰이는 예가 'const 붙이기'이다. 기본제공 타입과 쓸데없이 어긋나는 동작을 피하는 실질적인 이유는 일관성 있는 인터페이스를 제공하기 위해서..
EC++Study_4 Chapter3. 자원 관리 프로그래밍 분야에서 자원(resource)이란, 사용을 일단 마치고 난 후엔 시스템에 돌려주어야하는 모든 것을 일컫는다. 항목 13: 자원 관리에는 객체가 그만! auto_ptr [스마트 포인터(smart pointer)] 첫째 ,자원을 획득한 후에 자원 관리 객체에게 넘긴다. 자원 획득 즉 초기화(Resource Acquisition is Initialization: RAII) 둘째, 자원 관리 객체는 자신의 소멸자를 사용해서 자원이 확실히 해제되도록 한다. auto_ptr은 자신이 소멸될 때 자신이 가리키고 있는 대상에 대해 자동으로 delete를 먹인다. 그러므로 어떤 객체를 가리키는 auto_ptr의 개수가 둘 이상이면 절대로 안 된다. auto_ptr 객체를 복사하면..
EC++ Study_3 Chapter2. 생성자, 소멸자 및 대입 연산자 우리들이 만드는 거의 모든 C++ 클래스에 한 개 이상 꼭 들어 있는 것들이 생성자/소멸자/대입 연산자이다. 이들은 C++ 프로그램에 있어서 일용할 양식과 같이 중요한 함수이다. 첫 번째 것은 새로운 객체를 메모리에 만드는 데 필요한 과정을 제어하고 객체의 초기화를 맡는 함수이고, 두 번째 것은 객체를 없앰과 동시에 그 객체가 메모리에서 적절히 사라질 수 있도록 하는 과정을 제어하는 함수이며, 마지막 것은 기존의 객체에 다른 객체의 값을 줄 때 사용하는 함수이다. 따라서 클래스를 제대로 쓰려면 이들이 우선 우뚝 서 있어야 함은 분명하고도 중요한 요구사항이다. 항목 5: C++이 은근슬쩍 만들어 호출해 버리는 함수들에 촉각을 세우자 클래스가 비어 있지만 비..
EC++ Study_2 Chapter1. C++에 왔으면 C++의 법을 따르자. 항목 1: C++을 언어들의 연합체로 바라보는 안목은 필수 초창기의 C++은 단순히 C 언어에 객체 지향 기능 몇 가지가 결합된 형태였다. 오죽하면 C++의 처음 이름조차도 이 점을 드러내려는 듯 '클래스를 쓰는 C(C with Classes)'였을까. C++은 그 후 꾸준한 성장을 거쳤다. 기능, 아이디어, 프로그래밍 전략들을 취해 자기 것으로 만드는 데 있어 점점 대담하고 과감한 행보를 보였다. 이렇게 발전한 오늘날의 C++은 다중패러다임 프로그래밍 언어(multiparadigm programming language)라고 불린다. 절차적(procedural) 프로그래밍을 기본으로 해 객체 지향(object-oriented), 함수식(functi..
EC++ Study_1 용어 사용에 대하여 선언(declaration)은 코드에 사용되는 '어떤 대상'의 이름과 타입을 컴파일러에게 알려 주는 것이다. 하지만 구체적인 세부사항은 선언에 들어 있지 않다. 1) 객체 선언 : extern int A; 2) 함수 선언 : std::size_t A(int B); 3) 클래스 선언 : class A; 4) 템플릿 선언 : template ​ Class GraphNode; 모든 함수의 선언문에는 시그니처(signature), 다시 말해 그 함수의 매개변수 리스트와 반환타입이 나와있다. 함수의 경우엔 시그니처가 그 함수의 타입이다. 앞에서 본 A 함수의 시그니처는 std::size_t A(int)이다. 다시 말하면 'int 하나를 취하고, std::size_t를 반환하는 함수'라는 의미이..
C# Windows Forms Application GUI 기본 [1] 기본 GUI 세팅 및 씬 넘기기[2] Mysql 연동 로그인[3] Mysql txt 전송 원래는 C++로 프로젝트를 진행하려고 했으나 윈도우 로그를 가져오는 방식에 걸림돌이 많아서 C#으로 언어를 바꾼다! 이오스를 잘 알기전에는 C++을 써야할수도 있어서 C++을 사용했었는데, 윈도우 앱에서는 이오스를 건드릴 일이 없기에 프로젝트가 편해졌다. [1] 기본 GUI 세팅 및 씬 넘기기[2] Mysql 연동 로그인 C++에서 했던 방식과 비슷해서 이 부분은 쉬웠다. 기존에 C++에서 했던것처럼 GUI 도구 상자를 이용해서 붙이기만하면 됐다. 우선 Windows Forms 앱(.NET Framework)로 프로젝트를 생성하면 Forms1.cs[디자인] 이 바로 띄워질 것이다. 이후에는 도구 상자 (없다면..
Visual C++ Windows forms [1] [1] 개발환경 설정[2] 기본 UI 세팅 + Mysql 연동[3] txt 파일 전송 [1] 개발환경 설정 개발환경 때문에 너무 화가 나고 답답했다. 인터넷에서 자료들을 찾으면 'C++ Windows Forms'라는 항목이 다들 보였는데 내 visual studio 2015에는 전혀 보이지 않았기 때문이다. 찾다찾다 못찾아서 삭제하고 최신 버전인 2017을 받았다. 하지만 결과는 마찬가지였다. 내가 찾는 항목은 전혀 보일 생각이 없었고, 구글링을 하면서 visual studio installer에서 많은 것들을 다운받았지만 결국 찾지 못하고 4번이나 삭제했다가 다시 깔았다. 마지막에 어떻게 찾았더라.. 그냥 막 뒤지다가 새 프로젝트->온라인->템플릿->Visual C++을 가보니 내가 찾던게 있었다. 좋..
Visual C++ 학습 link : https://www.youtube.com/watch?v=YR6fxe1wa8g&index=1&list=PLS1QulWo1RIZz6uDid--I09EOImRmPHS0 해커톤에서 제작해야할 "블록체인을 사용한 윈도우 사용기록 거래 시스템"의 GUI를 제작하기 위해 이 튜토리얼을 보면서 공부한다! EOS를 윈도우에서 직접 사용할지 서버에서 한번에 사용할지 아직 명확한 사항이 나오지 않았다. 혹시라도 EOS를 윈도우에서 사용해야 한다면 C++ API밖에 없기 때문에 C++로 GUI를 제작하기로 했다.(C++ 공부하는게 좋아서도 있다) 공부 시작!