프로그래밍 관련
C++ 강좌 4편. 함수 오버로딩(Function Overloading) [최근 수정 2017.10.10]
C++ 강좌 4편. 함수 오버로딩(Function Overloading) [최근 수정 2017.10.10]
2012.10.281. 함수 오버로딩(Function Overloading)함수 오버로딩(Function Overloading)이란, 함수명은 같으며 인자의 자료형이나 수가 다른 함수의 선언을 허용하는 것을 말합니다. C에서는 함수 오버로딩을 허용하지 않았지만, C++에서는 아래와 같이 두 함수의 이름이 같아도 컴파일러가 오류를 발생시키지 않습니다. #include using namespace std; void func(int a) { cout
C++ 강좌 3편. 네임스페이스(namespace) [최근 수정 2017.05.21]
C++ 강좌 3편. 네임스페이스(namespace) [최근 수정 2017.05.21]
2012.10.251. 네임스페이스(namespace)네임스페이스(namespace)란 뭘까요? 이름 공간? 이 네임스페이스에 대해 알아보기 전에, 간단한 예를 하나 들어보겠습니다. 약 10명 정도의 개발자가 A, B라는 팀으로 나누어 어떤 팀 프로젝트를 진행한다고 가정해봅시다. 이렇게 팀을 나누어 개발이 모두 끝나면, 팀 A와 B가 개발한 프로젝트를 하나로 합친다고 해봅시다. 그렇게 해서 프로젝트를 합치고, 모든 일이 만사천리로 해결되는 듯 하였으나 A에서 정의한 함수의 이름과 B에서 정의한 함수의 이름 상당수가 동일하여 충돌이 일어나는 것이었습니다. A.h: ... namespace A { void doSomething(void) { // 코드... } }; ... B.h: ... namespace B { void d..
C++ 강좌 2편. 기본 입출력 함수 둘러보기 [최근 수정 2017.05.20]
C++ 강좌 2편. 기본 입출력 함수 둘러보기 [최근 수정 2017.05.20]
2012.10.23이번 강좌에서는 C++에서 각각 입력과 출력을 담당하는 cin, cout 객체에 대해서 알아보도록 할 것입니다. 강좌를 시작하기 전에, 이 강좌는 첫 강좌에서 말씀드렸듯이 C를 알고 있다는 전제하에 강좌를 진행합니다. 추후에, C 강좌와 C++ 강좌를 분리하여 C를 모르더라도 C++만 배울 수 있도록 강좌를 재구성시킬 예정에 있습니다. 자료형에 대해서 아직 잘 모르신다면, 이 강좌를 읽기 전 이곳을 참조하시는 것이 좋습니다. 1. cout (console out)먼저, cout 객체 부터 보도록 할텐데, 제일 처음 만나볼 cout 객체는 C언어의 출력 함수인 printf()와 흡사합니다. 바로 보도록 할까요? 아래 예제 코드를 따라 작성하여, Ctrl+F5를 누르거나 '디버그(D)->디버그 하지 않고 시..
C++ 강좌 1편. 새로운 시작, 컴파일러 소개 [최근 수정 2017.05.19]
C++ 강좌 1편. 새로운 시작, 컴파일러 소개 [최근 수정 2017.05.19]
2012.10.212012년에 올렸던 C++ 강좌를 다시 재구성한 뒤, 2017년에 C++11/14 에서 추가된 기능을 포함하여 강좌를 다시 쓰게 되었습니다. 이 강좌는 여러분들이 C언어를 알고 있다는 가정하에 진행됩니다. 즉, C언어 강좌를 진행할 때 설명해 드린 변수나 분기문, 반복문 등은 이 강좌에서 다루지 않습니다. 'C언어에서 어떻게 달라졌는가?'를 중점으로 강좌가 진행되니 이점 유의해주시기 바랍니다. 1. 새로운 시작 C++에서는 C의 절차와 구조에 중심을 둔 절차지향 프로그래밍을 떠나서, 객체지향이라는 개념이 도입되었습니다. 시간이 지나며 복잡성이 커지고, 소프트웨어가 하드웨어의 발달을 전혀 따라가지 못하며 절차지향 프로그래밍이 한계를 드러내자, 객체지향 프로그래밍이 수면 위로 부상하기 시작했습니다. 객체지향..
API 탐방 4편. 윈도우의 캡션을 설정하거나 가져오는 SetWindowText, GetWindowText
API 탐방 4편. 윈도우의 캡션을 설정하거나 가져오는 SetWindowText, GetWindowText
2012.10.21[API 탐방] 윈도우의 캡션을 설정하거나 가져오는SetWindowText, GetWindowText 자, 먼저 SetWindowText API 함수와, GetWindowText API 함수의 원형부터 살펴보도록 합시다. BOOL SetWindowText(HWND hWnd, LPCTSTR lpString); int GetWindowText(HWND hWnd, LPTSTR lpString, int nMaxCount); 제일 처음 SetWindowText의 원형 부터 살펴보자면, 첫번째 인수로는 윈도우 또는 컨트롤의 핸들이 옵니다. 그러나, 다른 응용 프로그램에서 컨트롤의 캡션은 변경할 수 없습니다. 두번째 인수로는 바꿀 문자열을 말합니다. 반환값으로는 실패하면 0이 오며, 성공하면 0이 아닌값이 옵니다. ..
API 탐방 3편. 특정 윈도우의 핸들에 메시지를 전달하는 SendMessage
API 탐방 3편. 특정 윈도우의 핸들에 메시지를 전달하는 SendMessage
2012.10.21[API 탐방기] 특정 윈도우의 핸들에 메시지를 전달하는SendMessage SendMessage API에 대해 알아보기 전에, SendMessage의 함수 원형을 먼저 살펴보도록 합시다. LRESULT SendMessage(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam); 원형을 살펴보자면, 첫번째 인수로는 메시지를 전달받을 윈도우 핸들을, 두번째 인수로는 전달할 메시지를, 세번째 인수로는 메시지의 부가 정보라고 말할 수 있겠습니다. 전달하는 메시지에 따라 의미가 달라집니다. 네번째 인수 역시도 메시지의 부가 정보이며, 세번째와 네번째에 있는 wParam, IParam의 기본값은 0입니다. 반환값으로는 전달되는 메시지에 따른 처리 결과가 반환됩니다. 이 Sen..
API 탐방 2편. 키의 상태를 확인하는 GetKeyState, GetAsyncKeyState
API 탐방 2편. 키의 상태를 확인하는 GetKeyState, GetAsyncKeyState
2012.10.20[API 탐방기] 키의 상태를 확인하는GetAsyncKeyState, GetKeyState 우선은 GetAsyncKeyState API에 대해 알아보기 전에 API의 원형을 먼저 살펴봅시다! SHORT GetAsyncKeyState(int vKey) 반환값은 SHORT형이고, 첫번째 인수로는 가상 키코드가 오며, 우리가 만약 VK_UP을 넘겨주면, 방향키 중 위를 가르키는 키가 눌려있나 눌려있지 않나 확인할 수 있습니다. (키가 눌려진 상태에서는 최상위 비트(0x8000)이 1이 되며, 처음 입력되었을 때는 0x8001 비트가 1이 됩니다.)(가상 키코드 목록을 보고싶으신 분들은 아래의 MSDN를 방문하셔서 참고하세요.)MSDN: http://msdn.microsoft.com/en-us/library/w..
API 탐방 1편. 최상위의 핸들을 찾는 FindWindow
API 탐방 1편. 최상위의 핸들을 찾는 FindWindow
2012.10.20[API 탐방기] 최상위의 핸들을 찾는FindWindow 먼저, FindWindow API에 대해 알아보기 전에 이 API의 원형을 한번 살펴보도록 합시다. HWND FindWindow(LPCTSTR lpClassName, LPCTSTR lpWindowName); 원형에서 첫번째 인수를 먼저 살펴보면, IpClassName이 있는데, 우리가 검색 시에 사용할 윈도우의 클래스 이름을 말합니다. 만약 NULL이라면 모든 윈도우의 클래스를 검색하게 됩니다. 두번째 인수에서 IpWindowName은 윈도우의 제목을 말합니다. 이것 역시 NULL이면 모든 제목의 윈도우를 검색하게 됩니다. (대소문자는 구분하지 않습니다. 또한 부분 검색은 되지 않으며 완벽하게 일치해야만 합니다.) 만약 검색에 성공했으면 FindW..
C# 강좌 22편. 파일 입출력(File Input/Output)
C# 강좌 22편. 파일 입출력(File Input/Output)
2012.10.201. 파일 입출력(File Input/Output) 이번에는 파일(File)을 다루는 클래스와 메소드들을 살펴보려고 합니다. 이 파일의 사전적 의미로는 '하나의 단위로서 처리되는 서로 관련 있는 레코드의 집합'라는 의미를 가지고 있습니다. System.IO 네임스페이스를 살펴보면 파일을 읽고 쓸 수 있는 클래스가 있는데, 오늘 배우게 될 클래스를 아래에 정리해두었습니다. 클래스 설명 File 파일에 대한 생성, 복사, 삭제, 이동 및 열기를 위한 정적 메소드를 제공 FileInfo 파일에 대한 생성, 복사, 삭제, 이동 및 열기를 위한 속성 및 인스턴스 메소드를 제공 FileStream 파일에 대한 스트림을 제공하여 동기 및 비동기 읽기/쓰기 작업을 모두 지원 StreamReader 문자열에서 읽어오는 ..
C# 강좌 21편. 프로퍼티(Property)
C# 강좌 21편. 프로퍼티(Property)
2012.10.201. 프로퍼티(Property) 프로퍼티(Property)는 속성이란 의미를 가지고 있습니다. 이 프로퍼티를 사용하게 되면, 속성 값을 반환하거나 새 값을 할당할 수 있습니다. 우리가 클래스를 하나 만들다가 필드를 public으로 선언할지, private으로 선언할지 고민하시는 분들이 간혹 있습니다. public으로 선언하려 했다가는, 이 필드가 어느순간 잘못된 값으로 지정되어 프로그램이 제대로 동작하지 않을지도 모릅니다. 이번엔 private로 선언하자니, 접근하는 방법이 public보다 까다로워 여간 귀찮은게 아닙니다. 이렇게 은닉성과 편의성을 고려하다, 편의를 버리고 private로 선언했다고 해봅시다. class MyClass { private int Field; public int GetFiel..
C# 강좌 20편. 리플렉션과 애트리뷰트(Reflection and attributes)
C# 강좌 20편. 리플렉션과 애트리뷰트(Reflection and attributes)
2012.10.161. 리플렉션(Reflection) C#에서는 프로그램 실행 도중에 객체의 정보를 조사하거나, 다른 모듈에 선언된 인스턴스를 생성하거나, 기존 개체에서 형식을 가져오고 해당하는 메소드를 호출, 또는 해당 필드와 속성에 접근할 수 있는 기능을 제공하는 '리플렉션(Reflection)'이라는 녀석이 존재합니다. 오늘은 아래와 같은 메소드들을 알아보려고 합니다. 형식 메소드 설명 Type GetType()지정된 형식의 Type 개체를 가져옵니다. MemberInfo[] GetMembers() 해당 형식의 멤버 목록을 가져옵니다. MethodInfo[] GetMethods() 해당 형식의 메소드 목록을 가져옵니다. FieldInfo[] GetFields() 해당 형식의 필드 목록을 가져옵니다. 실은 이말고도 M..
C# 강좌 19편. 델리게이트와 이벤트(Delegates and Events)
C# 강좌 19편. 델리게이트와 이벤트(Delegates and Events)
2012.10.141. 델리게이트(Delegate) 오늘은 델리게이트(Delegate)에 대해서 알아보려고 합니다. 델리게이트는 한마디로 말해서 대리자라고 말할 수 있습니다. 즉, 대신 일을 해주는 녀석이라고 할 수 있겠죠? 다른 말로 해서는 메소드 참조를 포함하고 있는 영역이라고 말할 수 있습니다. 아래는 델리게이트의 선언 형식입니다.delegate 반환형 델리게이트명(매개변수..); 위의 선언 형식을 보아하니, 델리게이트가 메소드같이 생겼죠? 델리게이트는 위에서 말한 대로, 메소드의 참조를 포함합니다. '메소드를 참조한다니, 그럼 메소드를 매개변수로 넘길 수 있다는 말인가요?'라고 생각하시는 분들이 있을지 모르겠는데, 네 맞습니다. 델리게이트를 이용해서 메소드를 넘겨줄 수 있습니다. 델리게이트는 메소드를 참조 하는 것..