lee-coder의 등록된 링크

 lee-coder로 등록된 티스토리 포스트 수는 78건입니다.

[MFC 프로젝트] 계산기 (3) [내부링크]

안녕하세요! 오늘은 계산기 만들기 과정의 3번째 파트 입니다. 저번 글에서 말씀 드린것 처럼 오늘은 다이얼로그 크기에 따라 컨트롤의 크기와 위치도 변하도록 처리하는 것을 실습 해 보겠습니다. 1. 멤버변수 선언 다이얼로그 클래스 헤더파일의 버튼 컨트롤 변수 아래에 enum, CButton포인터배열, bool변수를 만들어 줍니다. private: /* CButton20개 생략 */ //버튼 배열의 인덱스를 표현 enum { IDX_HISTORY = 0, IDX_CLEAR,IDX_DELETE,IDX_DIVIDE, IDX_SEVEN,IDX_EIGHT,IDX_NINE,IDX_MULTIPLY, IDX_FOUR,IDX_FIVE,IDX_SIX,IDX_MINUS, IDX_ONE,IDX_TWO,IDX_THREE,IDX_..

[C#] 프로그래밍 기초 : 가비지 컬렉터 [내부링크]

안녕하세요! 이번에는 C#에서의 가비지 컬렉터에 대해 자세히 알아보겠습니다. 가비지 컬렉터는 C#에서 메모리 관리를 자동으로 처리하는 기능입니다. 이를 통해 개발자는 메모리 할당과 해제를 직접 다룰 필요 없이 안정적인 프로그램을 작성할 수 있습니다. 가비지 컬렉터의 작동 원리 C#에서는 가비지 컬렉터가 자동으로 더 이상 사용되지 않는 객체를 감지하고 메모리를 해제합니다. 가비지 컬렉터는 주기적으로 실행되며, 다음과 같은 원리로 작동합니다. 객체의 생성 C#에서는 new 연산자를 사용하여 객체를 생성합니다. 생성된 객체는 힙(heap) 영역에 할당됩니다. 객체의 접근 가능성 생성된 객체는 다른 변수나 참조를 통해 접근 가능한 상태입니다. 다른 변수나 참조가 해당 객체를 참조하고 있다면, 해당 객체는 접근 ..

[C#] 프로그래밍 기초 : 배열과 함수 [내부링크]

안녕하세요! 이번에는 C# 프로그래밍에서 배열과 함수에 대해 알아보겠습니다. 배열은 동일한 데이터 타입의 여러 값을 저장하는 데 사용되며, 함수는 재사용 가능한 코드 블록으로서 특정 작업을 수행하는 데 사용됩니다. 배열 배열은 한 번에 여러 값을 저장할 수 있는 자료구조입니다. [] = new []; C#에서 배열을 선언하려면 위와 같은 구문을 사용합니다 int[] numbers = new int[5]; numbers[0] = 10; numbers[1] = 20; numbers[2] = 30; numbers[3] = 40; numbers[4] = 50; 위의 코드에서 numbers는 길이가 5인 정수형 배열을 나타냅니다. 배열의 각 요소에는 인덱스를 사용하여 접근할 수 있습니다. 함수 함수는 특정 작업을..

[C++] MFC 프로그래밍 : OnGetMinMaxInfo 함수 [내부링크]

안녕하세요! 이번 글에서는 OnGetMinMaxInfo함수에 대해 알아보겠습니다. OnGetMinMaxInfo 함수는 MFC에서 윈도우의 최소 및 최대 크기를 제한하는 함수로, 윈도우 크기 조정에 관련된 작업을 수행합니다. 이 함수를 재정의하여 윈도우의 크기를 제한하거나 특정 제약 조건을 적용할 수 있습니다. OnGetMinMaxInfo 함수의 역할 윈도우의 최소 및 최대 크기를 제한합니다. WM_GETMINMAXINFO 메시지를 처리하여 윈도우의 크기 조정에 대한 제약 조건을 설정합니다. 최소 및 최대 윈도우 크기, 최소 및 최대 추천 윈도우 위치 등을 설정할 수 있습니다. 최대화 또는 최소화 작업 시 윈도우의 크기와 위치를 제어할 수 있습니다. 예제 코드 void CMFCTESTDlg::OnGetMi..

[MFC 프로젝트] 계산기 (2) [내부링크]

안녕하세요! 이번에는 저번시간에 이어서 계산기를 만드는 과정의 2번째 파트입니다. 이번 글에서는 계산기의 기능 구현을 위한 컨트롤 배치를 다루겠습니다. 1. 프로젝트 생성 프로젝트 이름은 Calculator로 정하였습니다. 프로젝트 생성에 관한 자세한 내용이 필요하시다면 [C++] 카테고리의 [MFC 프로그래밍 : 프로젝트 생성] 글을 참고해 주세요. 2. 컨트롤 추가 도구상자에서 버튼을 추가하여 사진과 같이 배치하여 주세요. 다이얼로그 클래스에서 함수호출로 컨트롤을 다시 배치할 것이니 여기서는 굳이 정확하게 배치하지 않으셔도 되겠습니다. 단, 무슨 버튼인지 알 수 있도록 버튼의 자리와 순서정도는 지키는 것이 좋습니다. 3. 컨트롤 캡션 수정 각 버튼 컨트롤들의 캡션을 위와 같이 수정하여 주세요. [속성..

[C#] 프로그래밍 기초 : 연산자와 제어 구조 [내부링크]

안녕하세요! 이번에는 C# 프로그래밍에서 연산자와 제어 구조에 대해 알아보겠습니다. 연산자는 값을 조작하거나 연산하는 데 사용되는 기호이며, 제어 구조는 프로그램의 흐름을 제어하는 데 사용됩니다. 산술 연산자 C#에는 다양한 산술 연산자가 있습니다. 가장 기본적인 연산자로는 더하기(+), 빼기(-), 곱하기(*), 나누기(/), 나머지(%)가 있습니다. int a = 10; int b = 5; int sum = a + b; // 15 int difference = a - b; // 5 int product = a * b; // 50 int quotient = a / b; // 2 int remainder = a % b; // 0 비교 연산자 비교 연산자는 두 값의 관계를 비교하는 데 사용됩니다. 주로 조..

[C#] 프로그래밍 기초 : 변수와 데이터 타입 [내부링크]

안녕하세요! 이번에는 C# 프로그래밍에서 가장 기본적인 요소인 변수와 데이터 타입에 대해 알아보겠습니다. 변수는 값을 저장하고 참조하기 위한 공간을 의미하며, 데이터 타입은 변수에 저장될 수 있는 값의 종류를 정의합니다. 변수 선언과 초기화 ; 정수형 변수를 선언하고 초기값을 할당 int number; number = 10; 위의 코드에서 int는 정수형 데이터 타입을 나타내며, number는 변수의 이름입니다. '=' 기호를 사용하여 값을 할당할 수 있습니다. 변수를 선언하는 동시에 초기값을 할당 int number = 10; 정수형 변수 number를 선언하면서, 동시에 10이라는 초기값을 할당하였습니다. 기본 데이터 타입 C#에는 다양한 데이터 타입이 있으며, 몇 가지 주요한 기본 데이터 타입은 다..

[C#] 프로그래밍 기초 : Hello, World! [내부링크]

안녕하세요! 이번에는 C# 프로그래밍의 기본적인 문법과 구조에 대해 알아보도록 하겠습니다. C#에서 첫 번째 프로그램으로 전통적으로 "Hello, World!"를 출력하는 예제를 작성해보겠습니다. 예제코드 using System; class Program { static void Main() { Console.WriteLine("Hello, World!"); } } 예제를 빌드하면, Hello, World!라는 문자가 출력됩니다. using System; System 네임스페이스를 사용하겠다는 것을 나타냅니다. System 네임스페이스는 C#에서 기본적인 입출력 등의 기능을 제공합니다. class Program Program이라는 이름의 클래스를 정의합니다. C# 프로그램은 클래스 단위로 구성되며, Ma..

[MFC 프로젝트] 계산기 (1) [내부링크]

안녕하세요! 이번에는 MFC를 이용해 계산기를 만들어 보겠습니다. 계산기 프로젝트를 진행하면서 세부적인 내용들은 [C++]하위 카테고리인 [MFC 프로그래밍]에서 다루겠습니다. 설계 프로그램을 제작하기 전에는 항상 설계가 필요합니다. UI, 기능, 클래스 등등 꼼꼼하고 정밀한 설계로 프로그래밍을 시작해야 추후 유지보수가 깔끔해질 수 있습니다. 1. UI UI는 윈도우 기본프로그램인 '계산기' 프로그램을 참고하여 제작하겠습니다. 복잡한 수식과 기능은 응용과 시간문제이니, 빼버리고 간단한 기능만 사용하여 제작하여 보겠습니다. 위 사진은 그림판을 이용하여 수정한 것으로, 추후 완성된 계산기의 버튼 색상/모양 등은 다를 수 있습니다. 2. 기능 UI를 참고하여 필요한 기능을 간단히 정리하여 보겠습니다. 사칙연산..

[C++] 프로그래밍 기초 : SOLID원칙 [내부링크]

안녕하세요! 이번 글에서는 SOLID원칙에 대해 알아보겠습니다. SOLID는 소프트웨어 개발에서 유지보수 가능하고 확장 가능한 소프트웨어를 설계하기 위한 다섯 가지 원칙의 약어입니다. 이 원칙들은 객체 지향 설계의 핵심 원리로 알려져 있으며, 소프트웨어의 유연성, 확장성, 재사용성을 향상시키기 위해 적용됩니다. 단일 책임 원칙 (Single Responsibility Principle, SRP) 단일 책임 원칙은 클래스는 하나의 책임만 가져야 한다는 원칙입니다. 즉, 클래스는 변경의 이유가 하나여야 합니다. 이를 통해 클래스의 응집도를 높이고, 변경이 필요한 경우 다른 클래스에 영향을 미치지 않도록 합니다. 개방-폐쇄 원칙 (Open-Closed Principle, OCP) 개방-폐쇄 원칙은 소프트웨어 ..

[C++] MFC 프로그래밍 : OnPaint 함수 [내부링크]

안녕하세요! 이번 글에서는 OnPaint함수를 알아보겠습니다. OnPaint 함수는 MFC에서 그리기 작업을 수행하는 함수로, 윈도우 또는 컨트롤의 화면을 그리는 역할을 합니다. OnPaint 함수를 재정의하여 사용자 정의 그리기 작업을 수행할 수 있습니다. 함수의 역할 윈도우나 컨트롤의 화면을 그리는 작업을 수행합니다. WM_PAINT 메시지를 처리하며, 화면의 무효 영역을 다시 그리는 작업을 합니다. 그리기 작업을 위한 CDC(장치 콘텍스트) 객체를 생성하여 그래픽 작업을 수행합니다. 화면의 갱신이 필요한 경우 Invalidate 또는 InvalidateRect 함수를 호출하여 화면을 다시 그릴 수 있습니다. void CMFCTESTDlg::OnPaint() { if(IsIconic()) { //생략..

[C++] MFC 프로그래밍 : ESC/Enter 종료 방지 [내부링크]

안녕하세요! 이번 글에서는 ESC와 Enter키 입력에 대해 다이얼로그가 종료되는 현상을 방지하는 방법에 대해 알아보겠습니다. PreTranslateMessage 함수를 사용하면 ESC 및 Enter 키 입력에 대한 다이얼로그 종료를 방지할 수 있습니다. BOOL CMFCTESTDlg::PreTranslateMessage(MSG* pMsg) { // ESC 키 입력 처리 if (pMsg->message == WM_KEYDOWN && pMsg->wParam == VK_ESCAPE) { return TRUE; // 메시지를 더 이상 처리하지 않고 건너뜁니다. } // Enter 키 입력 처리 if (pMsg->message == WM_KEYDOWN && pMsg->wParam == VK_RETURN) { r..

[C++] MFC 프로그래밍 : PreTranslateMessage [내부링크]

안녕하세요! 이번 글에서는 PreTranslateMessage함수에 대해서 알아보겠습니다. PreTranslateMessage 함수는 MFC에서 메시지 처리 과정에서 사용되는 함수로, 발생되는 메시지를 사전에 처리하고 기본 메시지 처리 방식에 전달하는 역할을 합니다. 이 함수는 주로 다이얼로그나 윈도우 클래스에서 재정의하여 사용됩니다. 아래는 PreTranslateMessage 함수의 역할과 사용법에 대한 설명입니다. 함수의 역할 PreTranslateMessage 함수는 MFC 메시지 루프에서 메시지를 처리하기 전에 호출되는 함수입니다. 이 함수를 재정의하여 메시지 처리 과정에 개입할 수 있습니다. 특정 메시지를 감지하고 사용자 정의 처리를 수행합니다. 키보드 입력, 마우스 입력 등의 메시지를 사전에 ..

[C++] MFC 프로그래밍 : 이벤트 함수 추가 [내부링크]

안녕하세요! 이번 글에서는 MFC 프로젝트에서 이벤트 함수를 추가하는 방법에 대해서 알아보겠습니다. MFC는 메시지에 의해 동작을 하며, 이를 통해 사용자와 대화하는 형식의 프로그래밍이 가능해 집니다. 예를들어, 우리가 다이얼로그 위에서 마우스커서를 움직이면 1픽셀씩 움직이는 그 찰나의 시간에 내부적으로는WM_MOUSEMOVE라는 메시지가 계속 발생이 되고 따라서 그에 맞는 OnMouseMove이벤트 함수가 계속 호출이 됩니다.1. [솔루션 탐색기]에 있는 [프로젝트] 에서 마우스 우클릭 후 [클래스 마법사]를 클릭해줍니다. 2. [클래스 이름] 란에 이벤트를 추가 할 다이얼로그 클래스가 맞는지 확인 후 [메시지]탭을 클릭하여 'LButton'을 검색하면 마우스 왼쪽버튼에 대한 메시지가 나오게 됩니다. ..

[C++] MFC 프로그래밍 : CString 클래스 [내부링크]

안녕하세요! 이번 글에서는 CString 클래스에 대해서 알아보겠습니다. CString 클래스는 MFC에서 문자열을 저장하고 조작하기 위해 자주사용되는 클래스입니다. 이 클래스는 문자열의 저장, 검색, 대소문자 변환 등 다양한 문자열 연산을 지원합니다. 아래는 CString 클래스의 주요 특징과 예제들을 제시합니다. CString의 생성자 CString(); 기본 생성자로, 빈 문자열을 생성합니다. CString(LPCTSTR lpsz); 주어진 C 스타일 문자열(lpsz)로 CString을 생성합니다. CString(const CString& str); 다른 CString 객체(str)를 복사하여 새로운 CString을 생성합니다. CString의 주요 멤버함수 int GetLength() const;..

[C++] MFC 프로그래밍 : CRect 클래스 [내부링크]

안녕하세요! 이번 글에서는 CRect클래스에 대해 알아보겠습니다. CRect 클래스는 MFC에서 사각형을 표현하고 조작하기 위해 사용되는 클래스입니다. 이 클래스는 사각형의 위치와 크기를 나타내는 값을 저장하고, 다양한 사각형 연산을 수행할 수 있는 멤버 함수들을 제공합니다. 아래부터는 CRect 클래스의 주요 함수 원형과 파라미터에 대한 설명입니다. CRect의 생성자와 멤버변수 CRect(); 기본 생성자로, 초기 위치와 크기를 (0, 0, 0, 0)으로 설정합니다. CRect(int l, int t, int r, int b); 왼쪽(l), 위쪽(t), 오른쪽(r), 아래쪽(b) 값을 지정하여 사각형의 위치와 크기를 설정합니다. CRect(POINT point, SIZE size); 위치를 나타내는 ..

[C++] 콘솔 프로그래밍 : switch case문 사용 [내부링크]

안녕하세요! 이번에는 C++에서 switch case문을 사용하는 예제를 설명해드리겠습니다. switch case문은 다양한 선택지 중에서 조건에 해당하는 코드 블록을 실행할 때 사용됩니다. 이를 통해 다양한 분기 로직을 구현할 수 있습니다. 예제 코드 #include using namespace std; int main() { int choice; cout

[C++] 콘솔 프로그래밍 : 소수점 반올림과 반내림 [내부링크]

안녕하세요! 이번에는 C++에서 소수점 반올림과 반내림을 수행하는 방법에 대해 알아보겠습니다. 소수점을 반올림하거나 반내림하는 경우, 주어진 숫자를 특정 자리까지 올리거나 내리는 작업을 수행합니다. 또한, 이에 더해 소수점 n자리에서의 반올림과 반내림에 대해서도 알아보겠습니다. 예제 코드 #include #include using namespace std; int main() { double number = 3.14159; int n = 2; // 소수점 둘째 자리에서 반올림, 반내림, 올림, 내림 // 반올림 double roundResult = round(number * pow(10, n)) / pow(10, n); cout

[C++] 정적(Static)변수 [내부링크]

안녕하세요! 이번 글에서는 정적 변수에 대해 알아보겠습니다. 정적변수(Static Variable)는 프로그램 실행 중에 메모리에 한 번만 할당되며, 해당 변수가 선언된 함수 또는 클래스의 범위에서 사용됩니다. 정적변수는 변수가 선언된 함수나 클래스의 인스턴스와는 별개로 존재하며, 해당 범위 내에서 데이터를 유지할 수 있습니다. 이제 정적변수에 대해 자세히 알아보겠습니다. 정적변수의 선언과 사용 정적변수는 함수 내부에서 선언될 때 static 키워드로 표시되며, 클래스 내부에서 선언될 때도 static 키워드로 표시됩니다. 정적변수는 해당 함수 또는 클래스의 모든 인스턴스에서 공유되며, 변수가 선언된 함수 또는 클래스의 범위에서만 접근할 수 있습니다. 메모리 할당 정적변수는 프로그램이 실행되기 전에 메모..

[C++] 프로그래밍 기초 : 전역변수 [내부링크]

안녕하세요! 이번 글에서는 전역변수(Global Variable)에 대해서 알아보겠습니다. 전역변수(Global Variable)는 프로그램 전체에서 접근 가능한 변수로, 함수 외부에서 선언됩니다. 전역변수는 프로그램의 어느 곳에서나 값을 읽거나 변경할 수 있으며, 여러 함수 간에 데이터를 공유할 때 유용하게 사용됩니다. 전역변수의 특징함수 외부에서 선언되므로 모든 함수에서 직접 접근할 수 있습니다. 함수 내부에서 선언된 지역변수와 달리 특정 함수에 속하지 않으며, 프로그램의 어느 곳에서나 사용할 수 있습니다.메모리 할당전역변수의 메모리 할당과 소멸은 프로그램의 시작과 끝에 따라 결정됩니다. 전역변수는 프로그램이 실행되기 전에 메모리에 할당되며, 프로그램 종료 시 메모리에서 해제됩니다. 메모리에 유지되는..

[DBMS] DBMS 기초 : 데이터베이스 보안 [내부링크]

안녕하세요! 이번 블로그 글에서는 데이터베이스의 보안에 대해 알아보겠습니다. 데이터베이스는 중요한 비즈니스 데이터를 포함하고 있기 때문에, 외부로부터의 무단 접근과 데이터 유출로부터 안전하게 보호되어야 합니다. 데이터베이스 보안을 위한 주요 요소와 구체적인 보안 방법에 대해 알아보겠습니다. 액세스 제어 데이터베이스의 보안을 위해 액세스 제어가 필요합니다. 이는 데이터베이스에 접근할 수 있는 사용자와 권한을 제어하는 것을 의미합니다. 각 사용자에게 필요한 최소한의 권한만 부여하여 데이터의 무단 접근을 방지합니다. 사용자 인증과 권한 부여 메커니즘을 통해 액세스 제어를 구현할 수 있습니다. 데이터 암호화 데이터 암호화는 데이터베이스 내의 데이터를 외부로부터 안전하게 보호하기 위해 사용됩니다. 중요한 데이터는..

[C++] 콘솔 프로그래밍 : 생성자와 소멸자 [내부링크]

안녕하세요! 이번 글에서는 C++에서 클래스의 생성자와 소멸자에 대해 구체적으로 알아보겠습니다. 생성자와 소멸자는 클래스의 객체를 생성하고 소멸할 때 호출되는 특별한 멤버 함수입니다. 예제코드 #include class MyClass { public: MyClass() { std::cout

[C++] MFC 프로그래밍 : OnSize함수 [내부링크]

안녕하세요! 이번 글에서는 MFC 이벤트 함수 중 OnSize함수에 대해 알아보겠습니다. OnSize는 MFC에서 제공하는 CWnd 클래스를 상속받은 모든 클래스에서 사용할 수 있습니다.함수원형afx_msg void OnSize( UINT nType, int cx, int cy);매개변수UINT nType- 크기조절 타입을 지정해 줍니다. 이 타입은 매크로로 지정이 되어 있습니다.SIZE_MAXIMIZED : 창 최대화SIZE_MINIMIZED : 창 최소화SIZE_RESTORED : 창의 크기가 조정됨(Maximize / Minimize 적용 안됨.)SIZE_MAXHIDE 다른창이 최대화 되면 메시지가 모든 팝업 창으로 전송됩니다.SIZE_MAXSHOW : 다른창이 이전 크기로 복원되면 메시지가 모든 ..

[DBMS] DBMS 기초 : 데이터베이스 백업과 복원 [내부링크]

안녕하세요! 이번 글에서는 데이터베이스의 백업과 복원에 대해 알아보겠습니다. 데이터베이스는 중요한 비즈니스 데이터를 저장하므로, 데이터의 안전한 보호와 복구 기능은 매우 중요합니다. 데이터베이스 백업과 복원을 효과적으로 수행하기 위한 방법과 절차에 대해 알아보겠습니다. 정기적인 데이터베이스 백업 데이터베이스의 안정성을 보장하기 위해 정기적인 백업이 필요합니다. 정기적인 백업은 데이터베이스 시스템에 저장된 데이터의 스냅샷을 생성하고, 외부 저장소에 안전하게 보관하는 과정을 의미합니다. 이를 통해 데이터 손실 시 이전 상태로 데이터를 복구할 수 있습니다. 주로 전체 백업과 증분 백업을 조합하여 수행하며, 주기적으로 전체 백업을 생성하고 증분 백업을 추가로 수행하는 방식을 선택할 수 있습니다.전체 백업과 증분..

[DBMS] DBMS 기초 : 성능 최적화와 튜닝 [내부링크]

안녕하세요! 이번 글에서는 DBMS(Database Management System)의 성능 최적화와 튜닝에 대해 알아보겠습니다. DBMS의 성능은 데이터베이스 시스템의 효율성과 응답 시간에 직접적인 영향을 미치므로, 성능을 최적화하는 것은 중요한 과제입니다. 인덱스 생성과 최적화 인덱스는 데이터베이스에서 특정 열(속성)을 빠르게 검색하기 위한 구조입니다. 인덱스를 적절하게 생성하고 관리함으로써 데이터베이스의 검색 속도를 향상시킬 수 있습니다. 자주 사용되는 검색 조건을 고려하여 적절한 열에 인덱스를 생성하는 것이 중요합니다. 쿼리 최적화 복잡한 쿼리가 실행될 때 성능 문제가 발생할 수 있습니다. 쿼리 실행 계획을 분석하고 최적화하는 과정이 필요합니다. 쿼리의 테이블 조인 순서, 필요한 인덱스의 사용 등..

[DBMS] DBMS 기초 : DBMS 종류와 특징 [내부링크]

안녕하세요! 이번 글에서는 주로 사용되는 DBMS(Database Management System) 종류와 각각의 특징에 대해 알아보겠습니다. DBMS는 데이터베이스를 관리하고 조작하기 위한 핵심 도구로, 다양한 종류와 특징을 가지고 있습니다. 그럼 시작해보겠습니다.OracleOracle은 대규모 비즈니스 애플리케이션에 주로 사용되는 강력한 관계형 데이터베이스 관리 시스템입니다.Oracle은 데이터의 안정성, 확장성, 보안성 등을 강조하며, 트랜잭션 처리와 복구 기능, 데이터베이스 보안 및 성능 최적화 기능에 강점을 가지고 있습니다.MySQLMySQL은 오픈 소스 기반의 관계형 데이터베이스 관리 시스템으로, 다양한 규모의 애플리케이션에 널리 사용됩니다. MySQL은 속도와 안정성이 뛰어나며, 간편한 사용..

[DBMS] DBMS 기초 : DBMS의 기능과 장점 [내부링크]

안녕하세요! 이번 글에서는 DBMS(Database Management System)의 기능과 장점에 대해 써보도록 하겠습니다. DBMS는 데이터베이스를 관리하고 조작하는 데에 필요한 다양한 기능을 제공하는 시스템입니다. 데이터 정의 언어(DDL, Data Definition Language) DBMS는 데이터베이스 구조를 정의하기 위한 DDL을 제공합니다. DDL을 사용하여 데이터베이스, 테이블, 속성 등을 생성, 수정, 삭제할 수 있습니다. 데이터베이스 구조를 명확히 정의함으로써 데이터의 일관성과 무결성을 유지할 수 있습니다. 예제 CREATE TABLE Students ( ID INT PRIMARY KEY, Name VARCHAR(50), Age INT ); 위의 예제에서는 'Students'라는 ..

[DBMS] DBMS 기초 : 데이터 모델과 관계형 데이터베이스 [내부링크]

안녕하세요! 이번 글에서는 DBMS(Database Management System)의 기초에 대해 알아보겠습니다. 특히, 데이터 모델과 관계형 데이터베이스에 초점을 맞춰 설명하겠습니다. 데이터 모델 데이터 모델은 현실 세계를 추상화하고, 데이터베이스에 저장되는 데이터의 구조와 관계를 정의하는 개념입니다. 주요 데이터 모델 중 하나는 관계형 데이터 모델입니다. 관계형 데이터 모델은 테이블로 구성된 관계들의 집합으로 데이터를 표현합니다. 이러한 테이블은 열(속성)과 행(레코드)으로 구성되어 있으며, 데이터는 이러한 테이블 간의 관계를 통해 표현됩니다. 관계형 데이터베이스 개요 관계형 데이터베이스는 관계형 데이터 모델을 기반으로 구축된 데이터베이스입니다. 이러한 데이터베이스는 하나 이상의 테이블로 구성되어 ..

[C++] MFC 프로그래밍 : 컨트롤 변수 [내부링크]

안녕하세요! 이번 글에서는 다이얼로그에 배치한 컨트롤을 변수로 만들어 핸들링 하는 방법을 소개해 드리겠습니다. 컴파일러 : Visual Studio2019 운영체제 : 윈도우101. 버튼 컨트롤 하나를 다이얼로그에 아무렇게나 배치하여주고 버튼의 리소스ID를 IDC_BTN_TEST로 변경하여 줍니다.리소스 ID는 우측 하단 [속성]탭에서 변경할 수 있습니다. 2. 버튼을 우클릭 후 [변수추가] 를 클릭해줍니다. 3. 변수 이름을 정해주고, 변수에 대한 설명을 주석란에 적어줍니다.(주석은 선택)변수의 이름은 멤버변수 라는것을 알려주는m과, 리소스ID를 조합하여 지었습니다.개인 또는 팀 마다 네이밍 방식은 다르니 편하게 지어주되, 최소한 개인 혹은 팀프로젝트 내에서의 일관성은 지켜주세요. 4. [마침]을 눌러..

[C++] MFC 프로그래밍 : 컨트롤 소개 [내부링크]

안녕하세요! 이번 글에서는 MFC 프로그래밍의 핵심이라고 볼 수 있는 컨트롤에 대해 설명하고, 컨트롤을 소개해 드리겠습니다.컴파일러 : Visual Studio2019운영체제 : 윈도우101. 생성한 프로젝트를 열어서 [리소스뷰] → [프로젝트명.rc] → [Dialog] 순으로 탭을 열어주고, [IDD_프로젝트명_DIALOG] 를 더블클릭해 다이얼로그를 디자인 할 수 있는 화면을 열어줍니다. * [리소스뷰] 탭이 보이지 않을 땐 [솔루션탐색기] → [프로젝트 명] → [리소스파일] → [프로젝트명.rc] 더블클릭현재 띄워진 다이얼로그가 빌드 했을 때 만들어지는 다이얼로그의 디자인입니다. 이 화면에서 컨트롤을 추가하거나 편집할 수 있습니다. 2. "TODO:여기에 대화상자 컨트롤을 배치합니다" 라고 적힌..

[C++] 프로그래밍 기초 : 포인터 연산 [내부링크]

안녕하세요! 이번 글에서는 포인터 연산에 대해 알아보겠습니다. 포인터 연산(Pointer Operations)은 프로그래밍 언어에서 포인터 변수를 사용하여 메모리 주소에 접근하고 조작하는 작업을 의미합니다. 포인터 연산을 사용하면 메모리의 특정 위치에 직접 접근하고 데이터를 읽거나 쓸 수 있습니다. 포인터 변수와 메모리 주소 포인터 연산을 이해하기 위해 먼저 포인터 변수와 메모리 주소의 개념을 알아야 합니다. 포인터 변수는 메모리 주소를 저장하는 변수로, 해당 주소에 위치한 데이터에 접근할 수 있습니다. 포인터 변수는 다음과 같이 선언합니다. int* ptr; // 정수형 포인터 변수 위의 예제에서 ptr은 정수형 데이터의 메모리 주소를 저장하는 포인터 변수입니다. 이제 포인터 연산을 통해 메모리 주소에..

[C++] 프로그래밍 기초 : 열거형 [내부링크]

안녕하세요! 이번 글에서는 열거형 (Enum에 대해서 알아보겠습니다.) 열거형(Enum)은 프로그래밍 언어에서 사용되는 데이터 타입으로, 일련의 상수 값을 정의하는 데 사용됩니다. 열거형은 코드의 가독성과 유지보수성을 향상시키는 데 도움이 되며, 특정 값을 명확하게 식별하고 사용할 수 있도록 합니다. 이제 열거형에 대해 자세히 알아보겠습니다. 열거형의 정의와 사용 열거형은 일련의 상수 값을 정의하기 위해 사용됩니다. 각 상수 값은 열거형 멤버라고 불리며, 고유한 식별자를 가지게 됩니다. 열거형은 다음과 같이 정의할 수 있습니다. enum Season { Spring, Summer, Autumn, Winter }; Season은 열거형의 이름이고, Spring, Summer, Autumn, Winter는 ..

[C++] 콘솔 프로그래밍 : 열거형(enum) 활용 [내부링크]

안녕하세요! 이번에는 C++ 언어에서 열거형(enum)을 활용한 예제를 살펴보겠습니다. 열거형은 서로 연관된 상수들을 정의하고 사용하기 위해 유용하게 활용됩니다. 예제 코드 #include enum class Day { Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday }; int main() { using namespace std; Day today = Day::Monday; switch (today) { case Day::Monday: cout

[C++] 콘솔 프로그래밍 : 포인터 연산 [내부링크]

안녕하세요! 이번에는 C++ 언어에서 포인터 연산에 대해 알아보겠습니다. 포인터 연산은 C++의 강력한 기능 중 하나로, 메모리 주소를 다루면서 다양한 작업을 수행할 수 있게 해줍니다. 예제 코드 #include using namespace std; int main() { int numbers[] = {1, 2, 3, 4, 5}; int* ptr = numbers; // 배열의 첫 번째 요소를 가리키는 포인터 cout

[C++] MFC 프로그래밍 : MFC 프로젝트 생성 [내부링크]

안녕하세요! 이번 포스팅에서는 MFC 예제 실습을 위해 MFC 프로젝트를 생성하는 방법에 대해 알아보겠습니다. 드디어 콘솔 프로그래밍을 벗어나 윈도우 프로그램 개발을 시작하네요! 윈도우 응용프로그램은 콘솔과 다르게 사용자와 대화하는 방식으로 프로그램 구조를 짜야해서, 조금 더 복잡하지만 그만큼 더 강력한 프로그램을 제작할 수 있습니다. 이제 프로젝트를 생성해 보겠습니다. 컴파일러 : Visual Studio 2019 운영체제 : Window10 1) 먼저 비주얼 스튜디오를 열어서 새 프로젝트 만들기 버튼을 클릭합니다. 2) 프로젝트 템플릿으로 MFC 앱을 선택해 주시고 '다음' 버튼을 누릅니다. * MFC가 보이지 않는 분들은 MFC템플릿을 추가해 주셔야 합니다. 3) 프로젝트 이름을 설정합니다. 4) ..

[C++] 콘솔 프로그래밍: 클래스의 상속과 다형성 [내부링크]

안녕하세요! 이번에는 C++ 언어를 사용하여 클래스의 상속과 다형성을 다루는 예제를 살펴보겠습니다. 클래스의 상속은 기존 클래스를 확장하거나 재사용하여 새로운 클래스를 생성하는 기능을 제공하며, 다형성은 객체의 타입에 따라 다른 동작을 수행할 수 있는 능력을 의미합니다. 예제 코드 #include using namespace std; class Animal { public: virtual void makeSound() { cout

[C++] 콘솔 프로그래밍: 클래스와 객체 [내부링크]

안녕하세요! 이번에는 C++ 언어를 사용하여 클래스와 객체를 다루는 예제를 살펴보겠습니다. 클래스는 객체를 생성하기 위한 템플릿이며, 객체는 클래스의 인스턴스입니다. 예제 코드 #include using namespace std; class Rectangle { int width; int height; public: Rectangle(int w, int h) { width = w; height = h; } int calculateArea() { return width * height; } }; int main() { Rectangle rect(5, 3); int area = rect.calculateArea(); cout

[C++] 프로그래밍 기초 : 함수 오버로딩과 함수 오버라이딩 차이 [내부링크]

안녕하세요! 이번 글에서는 함수 오버로딩과 함수 오버라이딩의 차이점에 대해 다뤄 보겠습니다. 함수 오버로딩(Function Overloading)과 함수 오버라이딩(Function Overriding)은 객체 지향 프로그래밍에서 다형성을 구현하는 방법입니다. 이 두 개념은 이름이 비슷하지만 목적과 동작 방식에 차이가 있습니다. 이제 함수 오버로딩과 함수 오버라이딩의 차이를 자세히 알아보겠습니다. 함수 오버로딩은 같은 이름의 함수를 여러 개 정의하는 것을 의미합니다. 다른 매개변수 리스트를 가지는 여러 함수를 동일한 이름으로 정의하여 사용자에게 다양한 인터페이스를 제공할 수 있습니다. 함수 오버로딩은 다음과 같은 특징을 가집니다. 매개변수의 타입 또는 개수가 다른 함수 정의 : 함수 오버로딩을 사용하면 매..

[C++] 콘솔 프로그래밍 : 함수 오버로딩 [내부링크]

안녕하세요! 이번에는 C++ 언어를 사용하여 함수 오버로딩을 다루는 예제를 살펴보겠습니다. 함수 오버로딩은 동일한 이름을 가진 함수를 여러 개 정의하여 다양한 매개변수 조합을 처리할 수 있도록 하는 기능입니다. 예제 코드 #include using namespace std; int add(int a, int b) { return a + b; } double add(double a, double b) { return a + b; } int main() { int result1 = add(3, 5); double result2 = add(2.5, 4.7); cout

[C++] 콘솔 프로그래밍 : 동적 메모리 할당 [내부링크]

안녕하세요! 이번에는 C++ 언어를 사용하여 동적 메모리 할당을 다루는 예제를 살펴보겠습니다. 동적 메모리 할당은 프로그램 실행 중에 필요한 메모리를 동적으로 할당하고 해제하는 기능을 제공합니다. 예제 코드 #include using namespace std; int main() { int size; cout > size; int* arr = new int[size]; for (int i = 0; i < size; i++) { arr[i] = i + 1; } cout

[C++] 콘솔 프로그래밍 : 구조체 활용하기 [내부링크]

안녕하세요! 이번에는 C++ 언어를 사용하여 구조체를 활용하는 예제를 살펴보겠습니다. 구조체는 여러 개의 데이터를 묶어서 하나의 새로운 데이터 타입을 만들 수 있는 기능을 제공합니다. 예제 코드 #include #include using namespace std; struct Person { string name; int age; }; void printPerson(const Person& person) { cout

[C++] 프로그래밍 기초 : 클래스와 구조체의 차이 [내부링크]

안녕하세요! 이번글에서는 클래스와 구조체가 다른점에 대해서 다루겠습니다. 클래스(Class)와 구조체(Structure)는 객체 지향 프로그래밍에서 데이터와 관련 함수를 하나의 단위로 묶는 데 사용되는 개념입니다. 두 개념은 목적과 사용 방법에서 약간의 차이가 있습니다. 클래스와 구조체의 차이점을 자세히 알아보겠습니다. < 클래스 (Class) > 클래스는 객체 지향 프로그래밍에서 데이터와 해당 데이터를 조작하는 함수를 함께 포함하는 사용자 정의 데이터 타입입니다. 클래스는 다음과 같은 특징을 가집니다. 캡슐화 (Encapsulation) : 클래스는 데이터와 그 데이터를 조작하는 함수들을 하나의 단위로 묶어 캡슐화합니다. 캡슐화를 통해 데이터와 함수가 서로 관련되어 있음을 나타내고, 외부에서는 내부 구..

[C++] 콘솔 프로그래밍 : 숫자 맞추기 게임 [내부링크]

안녕하세요! 이번에는 C++ 언어를 사용하여 숫자 맞추기 게임을 구현해보겠습니다. 사용자가 랜덤으로 생성된 숫자를 맞추는 게임입니다. 예제 코드 #include #include #include using namespace std; int generateRandomNumber() { srand(time(0)); return rand() % 100 + 1; } void playGame() { int secretNumber = generateRandomNumber(); int guess; int attempts = 0; cout 100 ) { continue; } if (guess == secretNumber) { cout

[C++] 콘솔 프로그래밍 : 최대 공약수 구하기 [내부링크]

안녕하세요! 이번에는 C++ 언어를 사용하여 두 정수의 최대 공약수를 구하는 예제를 살펴보겠습니다. 예제 코드 #include using namespace std; int gcd(int a, int b) { if (b == 0) { return a; } else { return gcd(b, a % b); } } int main() { int num1, num2; cout > num1 >> num2; int result = gcd(num1, num2); cout

[C++] 콘솔 프로그래밍 : 팩토리얼 계산하기 [내부링크]

안녕하세요! 이번에는 C++ 언어를 사용하여 팩토리얼을 계산하는 콘솔 프로그램을 프로그래밍 해 보겠습니다. 예제 코드를 살펴보겠습니다. #include using namespace std; int factorial(int n) { if (n == 0 || n == 1) { return 1; } else { return n * factorial(n - 1); } } int main() { int number; cout > number; int result = factorial(number); cout

[C++] 프로그래밍 기초 : 재귀함수 [내부링크]

안녕하세요! 이번에는 C++ 프로그래밍 에서의 재귀 함수에 대해 자세히 알아보려고 합니다. 재귀 함수는 함수가 자기 자신을 호출하는 것을 말하며, 복잡한 문제를 간단하고 우아하게 해결하는 데 사용됩니다. 이 글에서는 재귀 함수의 작동 원리, 예제 코드 및 주요 활용 사례에 대해 다루겠습니다. 기본 케이스(Base Case) : 재귀 함수는 기본 케이스를 가지고 있어야 합니다. 기본 케이스는 재귀 호출을 멈추고 반환하는 조건을 의미합니다. 이를 통해 함수가 무한히 호출되는 것을 방지할 수 있습니다. 재귀 호출(Recursive Call) : 재귀 함수 내에서 자기 자신을 호출합니다. 이 과정에서 함수는 주어진 문제를 더 작고 해결 가능한 하위 문제로 분할합니다. 재귀 호출은 기본 케이스에 도달할 때까지 반..

[C++] 콘솔 프로그래밍 : 문자열 뒤집기 [내부링크]

안녕하세요! 이번에는 C++ 언어를 사용하여 문자열을 뒤집는 예제입니다. 예제 코드 #include #include using namespace std; string reverseString(string str) { int left = 0; int right = str.length() - 1; while (left < right) { swap(str[left], str[right]); left++; right--; } return str; } int main() { string input; cout

[C++] 콘솔 프로그래밍: 소수 판별하기 [내부링크]

안녕하세요! 이번에는 C++ 언어를 사용하여 소수를 판별하는 예제입니다. 예제 코드 #include using namespace std; bool isPrime(int number) { if (number

[C++] 콘솔 프로그래밍 : 두 수 사이의 합 [내부링크]

안녕하세요! 이번에는 C++ 언어를 사용하여 두 수 사이의 모든 정수의 합을 계산하는 예제를 살펴보겠습니다. 예제 코드 #include using namespace std; int main() { int start, end, sum = 0; cout > start >> end; for (int i = start; i

[C++] 콘솔 프로그래밍 : 평균 계산하기 [내부링크]

안녕하세요! 이번 글에서는 C++ 언어를 사용하여 콘솔 응용프로그램을 만들어보고, 사용자로부터 세 개의 실수를 입력받아 그 평균을 계산하는 예제를 소개하겠습니다. 예제 코드 #include using namespace std; int main() { double num1, num2, num3, average; cout > num1 >> num2 >> num3; average = (num1 + num2 + num3) / 3; cout num2 >> num3; 사용자로부터 세 개의 실수를 입력받아 각각 num1, num2, num3 변수에 저장합니다. average = (num1 + num2 + num3) / 3; 세 개의 실수의 합을 구하고, 그 값을 3으로 나누어 평균을 계산합니다. cout

[C++] 콘솔 프로그래밍 : 구구단 출력하기 [내부링크]

안녕하세요! 이번 글에서는 C++ 언어를 사용하여 콘솔 응용프로그램을 만들어보고, 구구단을 출력하는 예제를 소개하겠습니다. 예제 코드 #include using namespace std; int main() { int num; cout > num; cout

[C++] 콘솔 프로그래밍 : 최대값 구하기 [내부링크]

안녕하세요! 이번 글에서는 C++ 언어를 사용하여 콘솔 응용프로그램을 만들어보고, 사용자로부터 세 개의 정수를 입력받아 그 중 최댓값을 구하는 예제를 소개하겠습니다. 예제 코드 #include using namespace std; int main() { int num1, num2, num3, max; cout > num1 >> num2 >> num3; max = num1; if (num2 > max) { max = num2; } if (num3 > max) { max = num3; } cout num2 >> num3; 사용자로부터 세 개의 정수를 입력받아 각각 num1, num2, num3 변수에 저장합니다. max = num1; max 변수를 num1에 들어있는 수로 초기화합니다. if (num2 > ..

[C++] 콘솔 프로그래밍 : 입력받은 수의 홀/짝 판별 [내부링크]

안녕하세요! 이번 글에서는 C++ 언어를 사용하여 콘솔 응용프로그램을 만들어보고, 사용자로부터 정수를 입력받아 그 수가 짝수인지 판별하는 예제를 소개하겠습니다. 이번 글에서는 using namespace std;를 사용하여 코드를 작성할 예정입니다. using namespace std;를 사용하면 코드가 더 간결해지고 가독성이 향상됩니다.그러나 using namespace std;를 사용할 때는 주의해야 합니다.다른 네임스페이스에서 동일한 이름의 요소가 있는 경우 충돌이 발생할 수 있기 때문에, 프로젝트가 커지거나 다른 라이브러리를 사용하는 경우에는 std:: 접두사를 사용하는 것이 좋습니다. 이제 예제 코드를 살펴보겠습니다.#include using namespace std; int main() { i..

[C++] 콘솔 프로그래밍 : 입력 받은 두 수의 합 [내부링크]

안녕하세요! 이번 글에서는 C++ 언어를 사용하여 콘솔 응용프로그램을 만들어보고, 사용자로부터 입력을 받아 입력값들의 합을 계산하는 예제를 소개하겠습니다.예제코드#include int main() { int num1, num2, sum; std::cout > num1; std::cout > num2; sum = num1 + num2; std::cout

[C++] 콘솔 프로그래밍 : 프로젝트 생성 [내부링크]

안녕하세요! 이번 글에서는 C++ 콘솔 응용프로그램 실습 및 제작을 위한 프로젝트 생성 방법에 대해 알아보겠습니다. < 실습 환경 > 운영체제 : 윈도우 10 컴파일러 : Visual Studio 2019 1. 먼저 프로젝트를 생성하기 위해 비주얼 스튜디오를 열어 새 프로젝트 만들기 버튼을 눌러줍니다. 2. 언어를 C++로 설정하고 콘솔앱 버튼을 누른 후 다음으로 넘어갑니다. 3. 프로젝트 이름 및 솔루션 이름을 수정 후 만들기 버튼을 클릭합니다. 4. 완성! 현재 만들어진 콘솔 응용프로그램은 F5를 눌러 빌드를 했을 때 콘솔창에 Hello World! 라는 문자를 띄워줍니다. 이것은 비주얼 스튜디오가 프로젝트를 생성할 때 테스트 용 코드를 기본적으로 제공해준 것입니다. 앞으로의 모든 콘솔 응용프로그램 ..

[C++] 프로그래밍 기초 : 깊은 복사와 얕은 복사 [내부링크]

안녕하세요! 이번에는 C++에서의 깊은 복사와 얕은 복사에 대해 알아보겠습니다. 객체를 복사할 때는 이 두 가지 방법을 사용하여 메모리 관리와 객체의 독립성을 유지할 수 있습니다. 얕은 복사 (Shallow Copy) 얕은 복사는 단순히 객체의 멤버 변수를 복사하여 동일한 데이터를 공유하는 방식입니다. 이 경우에는 복사된 객체와 원본 객체가 같은 데이터를 가지므로 한 쪽에서 변경이 일어나면 다른 쪽도 영향을 받게 됩니다. 아래는 얕은 복사의 예제입니다.#include class ShallowCopy { private: int* data; public: ShallowCopy(int value) { data = new int(value); } void setValue(int value) { *data = v..

[C++] 프로그래밍 기초 : 콜백 함수와 함수 포인터 [내부링크]

안녕하세요! 이번에는 C++에서 콜백 함수와 함수 포인터에 대해 알아보겠습니다. 콜백 함수는 한 함수가 다른 함수를 호출하고, 호출된 함수가 다시 원래의 함수로 돌아와 작업을 계속하는 것을 말합니다. 이를 통해 코드의 유연성과 재사용성을 높일 수 있습니다. 함수 포인터 함수 포인터는 함수의 주소를 저장하는 변수로서, 다른 함수를 가리키고 호출할 수 있는 기능을 제공합니다. 이를 이용하여 콜백 함수를 구현할 수 있습니다. 아래는 콜백 함수와 함수 포인터를 활용한 간단한 예제입니다. #include // 콜백 함수 시그니처 typedef void (*CallbackFunction)(int); // 콜백 함수 void MyCallback(int value) { std::cout

[C++] 프로그래밍 기초 : 코딩 컨벤션 [내부링크]

안녕하세요! 이번 글에서는 C++에서의 코딩 컨벤션에 대해 알아보겠습니다. 코딩 컨벤션은 일관된 코드 스타일과 가독성을 유지하기 위해 개발자들 간에 합의된 규칙의 모음입니다. 일관된 코딩 컨벤션은 코드의 가독성을 높이고 유지보수성을 향상시키는 데 도움이 됩니다. 명명 규칙 변수와 함수 이름은 소문자로 시작하고, 여러 단어일 경우에는 단어 사이를 밑줄(_)로 구분합니다. [ex)my_variable, calculate_area()] 클래스 이름은 대문자로 시작하고, 대문자로 이어지는 단어를 사용합니다. [ex) MyClass, MyCustomObject] 중괄호 위치 중괄호({})는 항상 새로운 줄에 시작하며, 해당 블록의 내용은 들여쓰기를 해줍니다. if (condition) { // code here ..

[C++] 프로그래밍 기초 : 조건부 컴파일 [내부링크]

안녕하세요! 이번에는 전처리기 포스팅에 덧붙여서 C++에서의 조건부 컴파일에 대해 자세히 알아보겠습니다. 조건부 컴파일은 특정 조건에 따라 컴파일러가 코드를 포함하거나 제외하는 기능을 제공합니다. 이를 통해 운영 체제, 플랫폼, 컴파일러 버전 등에 따라 다른 코드를 사용할 수 있습니다. 조건부 컴파일은 주로 #ifdef, #ifndef, #else, #endif 등의 전처리기 지시문을 사용하여 구현됩니다. #ifdef와 #ifndef #ifdef는 지정된 매크로 심볼이 정의되어 있는지를 확인하고, 정의되어 있다면 해당 코드 블록을 컴파일합니다. #ifndef는 지정된 매크로 심볼이 정의되어 있지 않은지를 확인하고, 정의되어 있지 않다면 해당 코드 블록을 컴파일합니다. #ifdef MY_MACRO // M..

[C++] 프로그래밍 기초 : 전처리기 [내부링크]

안녕하세요! 이번 글에서는 C++의 전처리기에 대해 자세히 알아보겠습니다. 전처리기는 C++ 프로그램을 컴파일하기 전에 소스 코드를 변형하는 역할을 합니다. 전처리기 지시문은 # 기호로 시작하며, 컴파일러에게 특정 작업을 수행하도록 지시합니다. 전처리기 지시문 전처리기는 전처리기 지시문을 사용하여 동작합니다. 몇 가지 흔히 사용되는 전처리기 지시문을 살펴보겠습니다. #include : 다른 파일의 내용을 현재 파일에 포함시키는 역할을 합니다. 일반적으로 헤더 파일을 포함할 때 사용됩니다. #define : 상수나 매크로를 정의합니다. #define 지시문을 사용하면 특정 값을 상수로 정의하거나, 코드 블록을 매크로로 정의할 수 있습니다. #ifdef, #ifndef, #endif : 조건부 컴파일을 수행..

[C++] 프로그래밍 기초 : 동적 할당과 메모리 누수 [내부링크]

안녕하세요! 이번 글에서는 C++에서의 동적 할당과 메모리 누수에 대해 자세히 알아보겠습니다. 동적 할당은 프로그램 실행 중에 필요한 메모리를 동적으로 할당하고 해제하는 방법입니다. 이를 통해 프로그램의 유연성과 효율성을 높일 수 있습니다. 하지만 동적 할당은 올바르게 사용하지 않으면 메모리 누수라는 문제를 일으킬 수 있습니다. 동적 할당 동적 할당은 new 연산자를 사용하여 메모리를 동적으로 할당하는 것을 의미합니다. 할당된 메모리는 힙 영역에 위치하며, 할당된 메모리에 접근하기 위해 포인터를 사용합니다. 다음과 같이 사용할 수 있습니다. int* ptr = new int; // 정수형 메모리 동적 할당 *ptr = 10; // 할당된 메모리에 값 저장 동적 할당은 필요한 만큼의 메모리를 할당할 수 있..

[C++] 프로그래밍 기초: 메모리 구조와 변수의 라이프사이클 [내부링크]

안녕하세요! 이번 글에서는 C++에서의 메모리 구조와 변수의 라이프사이클에 대해 자세히 설명해 드리겠습니다. C++ 프로그램은 메모리를 사용하여 데이터를 저장하고 처리하는데, 변수들은 특정한 메모리 위치에 할당되며 특정한 순서로 메모리를 사용하게 됩니다. 메모리 구조 C++ 프로그램의 메모리는 크게 세 가지 영역으로 나눌 수 있습니다. 스택 (Stack) : 함수 호출 시 지역변수, 매개변수, 복귀 주소 등이 저장되는 공간입니다. 함수 호출이 끝나면 해당 함수에서 사용한 메모리가 자동으로 해제됩니다. 스택은 후입선출 (LIFO) 구조를 가지며, 크기가 동적으로 변경되지 않습니다. 힙 (Heap) : 동적으로 메모리를 할당하고 해제하는데 사용되는 영역입니다. new와 delete 연산자를 통해 메모리를 할..

[C++] 프로그래밍 기초 : 자주 사용되는 자료구조 라이브러리 [내부링크]

안녕하세요! 이번 글에서는 C++에서 자주 사용되는 자료구조 라이브러리에 대해 자세히 설명해 드리겠습니다. 자료구조는 데이터를 구성하고 저장하는 방법을 정의하는 중요한 개념으로, 효율적인 데이터 처리와 알고리즘 구현을 위해 필수적입니다. C++은 다양한 자료구조를 지원하는 표준 라이브러리를 제공하여 개발자들이 손쉽게 활용할 수 있도록 도와줍니다. 벡터 (Vector) 벡터는 동적 배열을 구현한 자료구조로, 크기가 동적으로 조정될 수 있습니다. std::vector 클래스를 사용하여 선언하고, push_back() 메서드를 통해 요소를 추가하거나, size() 메서드로 크기를 확인할 수 있습니다. 리스트 (List) 리스트는 이중 연결 리스트를 구현한 자료구조로, 요소들이 메모리에 불연속적으로 저장됩니다...

[C++] 프로그래밍 기초 : 자주 사용되는 표준 라이브러리 함수 [내부링크]

안녕하세요! 이번 글에서는 C++ 프로그래밍에서 자주 사용되는 표준 라이브러리 함수들에 대해 알아보겠습니다. 표준 라이브러리는 C++ 프로그래밍에서 높은 생산성과 효율성을 제공하기 위해 다양한 함수들을 제공합니다. 몇 가지 자주 사용되는 함수들을 살펴보겠습니다. 1. std::cin과 std::cout 표준 입력과 출력을 다루는 함수들로, 키보드로부터 입력을 받거나 화면에 출력하는 데 사용됩니다. int number; std::cout > number; std::cout

[C++] 프로그래밍 기초 : 표준 라이브러리 [내부링크]

안녕하세요! 이번 글에서는 C++의 표준 라이브러리에 대해 알아보겠습니다. C++의 표준 라이브러리는 다양한 기능과 도구를 제공하여 프로그래밍을 편리하게 할 수 있도록 도와줍니다. , , 등 다양한 헤더 파일과 클래스들이 포함되어 있습니다. : C++의 입출력과 관련된 기능을 제공합니다. cin과 cout을 통해 키보드로부터 입력을 받고 화면에 출력할 수 있습니다. : 동적 배열인 벡터를 제공합니다. 크기를 동적으로 조절할 수 있으며, 여러 가지 유용한 멤버 함수들을 통해 요소의 추가, 삭제, 탐색 등을 수행할 수 있습니다. : 문자열을 다루는 기능을 제공합니다. 문자열의 길이, 병합, 분리, 탐색 등 다양한 작업을 수행할 수 있습니다. : 다양한 알고리즘 함수를 제공합니다. 정렬, 검색, 변형 등 다양..

[C++] 프로그래밍 기초 : 파일 입출력 [내부링크]

안녕하세요! 이번 글에서는 C++ 프로그래밍에서 파일 입출력에 대해 다루어보겠습니다. 파일 입출력은 프로그램과 외부 파일 간의 데이터 전달을 위한 중요한 기능입니다. C++은 기본으로 파일 입출력을 위해 표준 라이브러리인 를 제공합니다. C++에서는 주로 세 가지 유형의 파일 입출력을 사용합니다 입력 파일 스트림 (ifstream) : 외부 파일에서 데이터를 읽는 데 사용됩니다. 출력 파일 스트림 (ofstream) : 외부 파일에 데이터를 쓰는 데 사용됩니다. 입출력 파일 스트림 (fstream) : 외부 파일에서 데이터를 읽고 쓰는 데 모두 사용됩니다. 아래는 파일을 읽고 쓰는 간단한 예제입니다 #include #include using namespace std; int main() { ofstrea..

[C++] 프로그래밍 기초 : 예외 처리 [내부링크]

안녕하세요! 이번 글에서는 C++ 프로그래밍에서 예외 처리에 대해 다루어보겠습니다. 예외 처리는 프로그램 실행 중에 발생할 수 있는 예외적인 상황에 대응하는 메커니즘을 제공합니다. 이를 통해 예외 상황을 감지하고 처리할 수 있습니다. C++에서 예외 처리는 try, catch, throw 키워드를 사용하여 구현됩니다. 아래는 예외 처리의 기본 구조입니다 try { // 예외가 발생할 수 있는 코드 throw 예외; // 예외 발생 } catch (타입1 예외변수1) { // 타입1의 예외를 처리하는 코드 } catch (타입2 예외변수2) { // 타입2의 예외를 처리하는 코드 } // ... catch (타입N 예외변수N) { // 타입N의 예외를 처리하는 코드 } try 블록 : 예외가 발생할 수 있..

[C++] 프로그래밍 기초 : 타입 캐스팅 [내부링크]

안녕하세요! 이번 글에서는 C++ 프로그래밍에서 타입 캐스팅에 대해 자세히 설명하겠습니다. 타입 캐스팅은 변수나 표현식의 타입을 다른 타입으로 변환하는 것을 의미합니다. C++은 다양한 타입 캐스팅 연산자를 제공하여 타입을 변환할 수 있습니다. 1. C 스타일 캐스팅 (type)value 형태로 사용됩니다. 다양한 캐스팅을 한 번에 수행할 수 있지만, 잘못 사용할 경우 예기치 않은 동작을 일으킬 수 있습니다. 따라서 가급적 사용을 지양해야 합니다. 2. static_cast static_cast(expression) 형태로 사용됩니다. 컴파일 시간에 타입을 검사하며, 일반적인 타입 변환에 사용됩니다. 3. dynamic_cast dynamic_cast(expression) 형태로 사용됩니다. 런타임에 타..

[C++] 프로그래밍 기초 : 가상 함수와 순수 가상 함수 [내부링크]

안녕하세요! 이번 글에서는 C++ 프로그래밍에서 가상 함수와 순수 가상 함수에 대해 자세히 설명하겠습니다. 또한, 실제로 어떤 상황에서 많이 사용되는지 예제를 통해 살펴보겠습니다. 이 내용은 다음 글에서 다룰 함수 오버라이딩에 대한 내용을 기반으로 합니다. 가상 함수 (Virtual Functions) 가상 함수는 기본 클래스에서 선언되고, 하위 클래스에서 재정의할 수 있는 멤버 함수입니다. 가상 함수는 다형성(polymorphism)을 구현하는 데 사용되며, 동적 바인딩(dynamic binding)에 의해 실행 시간에 어떤 함수가 호출될지 결정됩니다. 가상 함수를 선언하기 위해 해당 함수의 선언 앞에 virtual 키워드를 사용합니다. 하위 클래스에서 가상 함수를 재정의할 때는 override 키워드..

[C++] 프로그래밍 기초 : 연산자 오버로딩 [내부링크]

안녕하세요! 이번 글에서는 C++ 프로그래밍에서 연산자 오버로딩에 대해 자세히 설명하겠습니다. 연산자 오버로딩은 C++의 강력한 기능으로, 사용자 정의 타입에 대해 기존 연산자의 동작을 재정의할 수 있습니다. 이를 통해 사용자 정의 타입에 대한 연산을 직관적이고 편리하게 수행할 수 있습니다. C++에서는 다양한 연산자를 오버로딩할 수 있습니다. 종류 산술 연산자(+, -, *, /) 비교 연산자(==, !=, ) 할당 연산자(=) 인덱싱 연산자([]) 함수 호출 연산자(()) 멤버 접근 연산자(->) 타입 캐스팅 연산자 각 연산자를 오버로딩하는 방법은 다소 다를 수 있지만, 일반적으로 멤버 함수로 구현됩니다. 연산자 오버로딩의 구문은 다음과 같습니다 반환타입 operator 연산자(매개변수) { // 연..

[C++] 프로그래밍 기초 : 함수 오버라이딩 [내부링크]

안녕하세요! 이번 글에서는 C++ 프로그래밍에서 함수 오버라이딩에 대해 자세히 설명하겠습니다. 함수 오버라이딩은 기본 클래스에서 선언된 함수를 하위 클래스에서 재정의하는 것을 의미합니다. 이를 통해 다형성을 구현하고, 각 클래스에 특화된 동작을 수행할 수 있습니다. 함수 오버라이딩은 가상 함수를 활용하여 구현될 수도 있습니다. 이전 글에서 가상 함수에 대해 설명한 내용을 기반으로 이해하시면 도움이 됩니다. 함수 오버라이딩은 다음과 같은 규칙을 따릅니다: 1. 기본 클래스에서 선언된 함수를 하위 클래스에서 동일한 시그니처(이름, 매개변수 타입 및 반환 타입)로 재정의합니다. 2. 오버라이딩된 함수는 override 키워드를 사용하여 명시적으로 표시할 수 있습니다. 이는 가독성과 오류 방지에 도움이 됩니다...

[C++] 프로그래밍 기초 : 클래스의 상속과 정보은닉 [내부링크]

안녕하세요! 이번 글에서는 C++ 프로그래밍에서 클래스의 상속과 정보은닉에 대해 자세히 설명하겠습니다. 또한, 상속을 설계하는 과정에서 중요한 개념인 public, private, protected 접근 지시자에 대한 내용도 다루겠습니다. 클래스의 상속 (Inheritance) 클래스의 상속은 기존 클래스의 특성과 동작을 새로운 클래스에 물려주는 개념입니다. 기존 클래스를 부모 클래스 또는 상위 클래스라고 하고, 새로운 클래스를 자식 클래스 또는 하위 클래스라고 합니다. 상속을 통해 자식 클래스는 부모 클래스의 멤버 변수와 멤버 함수를 사용할 수 있습니다. 아래는 상속을 사용한 예제를 보여줍니다 class Animal { protected: string name; public: void setName(s..

[C++] 프로그래밍 기초 : 클래스 [내부링크]

안녕하세요! 이번 글에서는 C++ 프로그래밍에서 클래스에 대해 자세히 설명하고, 다음 글에서 다룰 클래스의 상속에 대해 미리 소개하겠습니다. 클래스 (Classes) 클래스는 C++에서 객체 지향 프로그래밍을 구현하는 주요한 개념입니다. 클래스는 데이터와 해당 데이터에 대한 동작을 하나로 묶어놓은 사용자 정의 데이터 타입입니다. 클래스는 멤버 변수와 멤버 함수로 구성됩니다. 아래는 Person 클래스를 예제로 들어 클래스의 구조와 사용법을 설명합니다 class Person { private: string name; int age; public: // 생성자 Person(string n, int a) { name = n; age = a; } // 멤버 함수 void displayInfo() { cout

[C++] 프로그래밍 기초 : 포인터와 참조자 [내부링크]

안녕하세요! 이번 글에서는 C++ 프로그래밍에서 포인터와 참조자에 대해 자세히 알아보고, 매개변수로서의 사용 예제를 제공하겠습니다. 포인터 (Pointers) 포인터는 메모리 주소를 저장하는 변수입니다. 다른 변수의 메모리 위치를 가리키는 역할을 합니다. C++에서는 포인터를 선언할 때 변수 이름 앞에 '*' 기호를 사용합니다. 다음은 changeValue라는 함수를 정의하고 포인터를 매개변수로 사용하는 예제입니다 void changeValue(int* ptr) { *ptr = 100; } int main() { int value = 50; changeValue(&value); // value는 이제 100입니다. return 0; } changeValue 함수는 int* 타입의 포인터 ptr을 매개변수..

[C++] 프로그래밍 기초 : 함수와 매개변수 [내부링크]

안녕하세요! 이번 글에서는 C++ 프로그래밍에서 함수와 매개변수에 대해 알려드리고자 합니다. 함수는 프로그램에서 재사용 가능한 코드 블록을 나타내며, 매개변수는 함수로 전달되는 값입니다. 함수 (Functions) 함수는 특정 작업을 수행하는 코드 블록입니다. C++에서 함수를 정의하려면 다음과 같은 형식을 사용합니다 (매개변수 리스트) { // 함수가 수행할 작업 // 반환 값 (선택적) } 다음은 두 개의 정수를 더하는 함수인 addNumbers를 정의하는 예제입니다 int addNumbers(int a, int b) { int sum = a + b; return sum; } addNumbers 함수는 int 타입의 반환값을 가지며, a와 b라는 두 개의 int 타입 매개변수를 받습니다. 함수 내부에..

[C++] 프로그래밍 기초 : 조건문과 반복문 [내부링크]

안녕하세요! 이번 글에서는 C++ 프로그래밍에서 조건문과 반복문에 대해 알려드리고자 합니다. 조건문과 반복문은 프로그램의 흐름을 제어하는 데 사용되는 중요한 구조입니다. 조건문 (Conditional Statements) 조건문은 주어진 조건에 따라 프로그램의 특정 부분을 실행하거나 건너뛰는 데 사용됩니다. C++에서는 주로 if, else if, else 키워드를 사용하여 조건문을 작성합니다. 아래는 if 조건문의 기본적인 구조입니다 if (조건식) { // 조건식이 참일 때 실행되는 코드 } 조건식이 참일 경우 중괄호 안에 있는 코드 블록이 실행됩니다. 예를 들어, 다음은 age 변수의 값을 검사하여 성인 여부를 출력하는 예제입니다: int age = 20; if (age >= 18) { std::c..

[C++] 프로그래밍 기초 : 변수와 데이터 타입 [내부링크]

안녕하세요! 이번 글에서는 C++ 프로그래밍에서 변수와 데이터 타입에 대해 알려드리고자 합니다. 변수는 프로그램에서 데이터를 저장하고 조작하는 데 사용되는 중요한 개념입니다. C++에서 변수를 선언하려면 다음과 같은 형식을 사용합니다: ; 예를 들어, 정수형 변수 age를 선언하려면 다음과 같이 작성합니다 int age; int라는 데이터 타입을 가진 age라는 이름의 변수를 선언합니다. 이제 age 변수에 값을 할당하여 사용할 수 있습니다. age = 25; age 변수에 25라는 값을 할당합니다. 이렇게 변수에 값을 할당하면 이후에 해당 변수를 참조할 때 저장된 값을 사용할 수 있습니다. 변수를 선언하는 동시에 값을 할당할 수도 있습니다. int height = 180; height 변수를 선언하고 ..

[C++] 프로그래밍 기초 : Hello, World! [내부링크]

안녕하세요! 이번 글에서는 C++ 프로그래밍의 기초를 알려드리고자 합니다. 첫 번째로 배울 것은 "Hello, World!" 프로그램입니다. 이 프로그램은 많은 프로그래밍 언어에서 첫 단추로 시작되는 전통적인 예제입니다. 예제코드#include int main() { std::cout