[C#] IEnumerable 인터페이스 상속 및 객체 열거형 만들기
·
Programming/C#
해당 코드는 [시작하세요! C# 6.0] 도서 및 [MSDN]을 참조하였다. 제목이 난해하게 기재되어 있으나, foreach 가 어떻게 동작하는지 보여주는 코드와 같다. using System; using System.Collections; namespace ConsoleApp1 { class Hardware { } class USB { string name; public USB(string name) { this.name = name; } public override string ToString() { return name; } } class Notebook : Hardware, IEnumerable { private USB[] usbList = new USB[] { new USB("USB1"), ne..
[C#] 형변환 [as, is]
·
Programming/C#
C# 에서는 형변환이 C++ 과 달리 복잡하지 않고, 간결하게 떨어진다. 사전 지식 기본적으로 괄호 () 를 기반으로 한 C 스타일의 형변환을 사용할 수으며, 암시적 형변환 역시 지원한다. AS as 구문은 '.net FrameWork' 에서 오류를 발생시키는것이 상당히 큰 리소스 낭비임을 알아두면 이해가 쉽다. as 구문은 오류를 일으키지 않고도 '형 변환이 가능한지' 확인하기 위한 예약어다. as 구문으로 형 변환이 가능하다면 '지정된 타입의 인스턴스 값' 을 변환하고, 가능하지 않다면 null 을 반환하기 때문에 이를 통해서 형 변환이 성공하였는지 확인할 수 있다. AS 구문은 참조형 변수에 대해서만 사용이 가능하다, if ( a as int ) 같은 사용법은 모두 잘못되었다. (int 같은 형식이..
[C++] TCP 통신
·
Programming/C++
#include #include #include #pragma comment(lib, "ws2_32") #define PORT 28888 #define PACKET_SIZE 36 #define SERVER_IP "127.0.0.1" using std::cout; using std::endl; void server() { WSADATA wsaData; WSAStartup(MAKEWORD(2, 2), &wsaData); SOCKET hListen; hListen = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP); SOCKADDR_IN tListenAddr; tListenAddr.sin_family = AF_INET; tListenAddr.sin_port = htons(PORT);..
[C#] 인터페이스 사용 이유.
·
Programming/C#
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 using System; namespace WindowsFormsApp1 { interface ISource { int GetResult(); } class Source : ISource { public int GetResult() { return 10; } public void Test() { Target target = new Target(); } } class Target : ISource { public int GetResult() { return 20; } public void Do(ISource obj)..
[C++] 람다식 mutable 의 쓰임세.
·
Programming/C++
C++ 에서 함수를 인자로 전달하는 방법 | C++ 에서 함수를 인자로 전달하기 C++11 이전에는 다른 함수의 인자로 함수를 전달하는 방법은 함수 포인터가 유일했습니다. C언어에서 이어져온 방식이기 때문에 C개발자들에게는 크게 불편하 mynameisdabin.tistory.com 해당 포스팅을 살펴보다 람다식 에서 햇갈릴만한 내용이 있기에 짧게 정리한다.​ 우선 람다식은 다음과 같이 작성된다.​ [캡처절] (매개변수) mutable -> 반환형식 { 함수내용 } ​ 1. 캡쳐절은 외부 변수를 가져다 쓸 수 있는 공간이고,​ 2. 매개변수는 말 그대로 함수 선언시 필요한 매개 변수이다.​ 3. mutable 은 함수 내에서 외부 변수를 수정할 수 있게 해 주는 옵션이고.​ 4. 반환형식과 함수 내용은 아..
[C++] push_back vs emplace_back 차이점
·
Programming/C++
자료를 찾아보면 emplace_back 이 더 우수한 녀석이라거나 생성자 호출 차이라거나 그런 말들이 많이 있으나. 일단 최신 컴파일러 관점에서는 둘 다 아닌것 같다. emplace_back 과 push_back 의 차이 item 타입의 생성자가 타입을 인자로 받는다면? push_back 함수는 '객체' 를 집어 넣는 형식으로, 객체가 없이 삽입을 하려면 "임시객체 (rvalue) " 가 있어야 합니다. 또는 암시적 형변환이 가능하다면, openmynotepad.tistory.com 엄준식사생팬 님의 블로그에서 해당 코드를 참조해서 G++ 9 , Visual Studio 2019 (ISO C++14 표준) 에서 테스트 해 보았지만 결과는 같았다. 즉, 이유는 모르겠지만 STD 코드가 수정되었음을 추론해 ..
[C++] C4819 Warning 해결 방법, 한글 깨짐 문제
·
Programming/C++
C4819 Warning 의 경우는 파일의 저장 포맷 형식이 UTF-8 With BOM 으로 설정되지 않아서 발생하는 문제이다. 여기서 UTF-8 은 그냥 같은 UTF-8 이 아니라, UTF-8 Without BOM 과 UTF-8 With BOM 으로 나뉘어 진다.  .cpp, .hpp 파일을 저장 할 때, 한글, 중국어 등 multi-byte characters 가 하나라도 들어간다면 반드시 UTF - 8 With BOM(Signature) 으로 설정해야만, 해당 경고가 없어진다.   참고로, 해당 오류는 오지랖 넓은 '경고' 메세지가 아니다. 해당 문제로 인해 컴파일 단계에서는 문제가 없을 지 몰라도 Runtime 단계에서 디버그 해볼 시에 한글 글자가 깨지는 모습을 살펴 볼 수 있다.   UTF-8..
[C#] Thread, Task 의 간단한 사용법
·
Programming/C#
C# 에서 비동기를 위한 분기를 만드는 기법중에선 Thread 와 Task 가 있다. 결론적으로 말하면 굳이 Thread 를 사용할 필요는 없다. 우선 Task 부터 설명 하겠다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 using System; using System.Threading; using System.Threading.Tasks; class Example { static void aaa() { Thread.Sleep(5000); Console.WriteLine("aaa"); } static void bbb() { Console.WriteLine("bbb"); } static void Main() { T..
[C++] constexpr 사용하기.
·
Programming/C++
C++ 에는 constexpr 이라는 예약어가 있다. 보통 학생들은 잘 모르는 예약어인데, 왜냐면 딱히 이것까지 가르칠 필요는 없기 때문이랄까... constexpr 에 대한 간단한 예시를 들면 다음과 같은 것이 있다. 1 2 3 int cc = 10; const int a = cc; // OK constexpr int b = cc; // Fail cs 보면 알겠지만 const 키워드는 runtime 에 결정되도 상관이 없는 반면 constexpr 의 경우는 반드시 compile 시간에 결정되어야 한다는 차이점이 있다. 때문에 나는 모두의 코드 블로그 에서 예제로 constexpr 을 사용하는것을 참조해 왔는데 다음과 같은 코드이다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 ..
[C++] 함수 포인터
·
Programming/C++
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 #include #include #include using exe_ = void(*)(); //typedef void(*exe_)(); void execute() { printf("개굴"); } void timer(int time, exe_) { exe_ exe = execute; while (time) { Sleep(3000); exe(); } } int main() { timer(30, execute); } cs 함수 포인터는, 생각만큼 자주 사용하는 기법이 아니라서 깜빡 잊어버리기 쉽다. 위 코드를 잘 살펴보면 C++ 의 기본에 대해서 다시 한번 짚어 볼 수 있다. using 으로 exe_ 라..