목록Categories (1099)
KoreanFoodie's Study
이 글은 '김상형의 SQL 정복'의 예제 코드를 설명하는 방식으로 SQL 쿼리 예제를 소개하고 있습니다. SQL 기초 - 10. 조인 (단순 조인, 외부 조인, 다중 조인 등 SQL 조인 예제) -- 실습을 위한 테이블들을 만들어 보자 CREATE TABLE tCar ( car VARCHAR(30) NOT NULL,-- 이름 capacity INT NOT NULL,-- 배기량 price INT NOT NULL,-- 가격 maker VARCHAR(30) NOT NULL-- 제조사 ); INSERT INTO tCar (car, capacity, price, maker) VALUES ('소나타', 2000, 2500, '현대'); INSERT INTO tCar (car, capacity, price, make..
이 글은 '김상형의 SQL 정복'의 예제 코드를 설명하는 방식으로 SQL 쿼리 예제를 소개하고 있습니다. SQL 기초 - 9. 서브쿼리 (서브쿼리 연산자, 인라인 뷰, 테이블 조합, 테이블 병합) -- MAX 같은 연산자는 집계 연산자라고도 한다. SELECT MAX(popu), name FROM tCity; SELECT name FROM tCity WHERE popu = MAX(popu); SELECT MAX(popu) FROM tCity; SELECT name FROM tCity WHERE popu = 974; SELECT name FROM tCity WHERE popu = (SELECT MAX(popu) FROM tCity); SELECT MAX(num) FROM tItem; SELECT item ..
옛날 옛적, 자기계발서를 좋아하던 한 아이가 살았답니다. 흔히 '충'이라는 글자가 붙는 단어는 좋은 뜻으로 쓰이지 않는다곤 하지만, 사실 나는 가성비충이다. 때론 징그러울 정도로. 그래서 그런지 몰라도, 어렸을 적부터 자기계발서와 명언집을 좋아했다. 왜냐하면 명언은 압축적이기 때문이다. 대략적으로 소설 -> 에세이 -> 기술서적/자기계발서 -> 동기부여 영상 -> 명언 순으로 함축성이 올라간다. 어떻게 표현하는지와 어떻게 전달력을 높이는지의 차이가 있을 뿐, 핵심 메시지는 간단하고 비슷한 경우가 많다. 그러니 쓸데없이 시간을 쏟아부어 같은 내용을 파악하기보다, 짧은 한 줄의 문구로 삶의 지혜를 얻어가는게 낫지 않은가. 그런 생각을 하며 때론 명언집과 잠언집을 필사하기도 했다. 그런 싸구려 책을 읽지 말고..
윈도우 API 프로그래밍 10 : 백버퍼와 픽 메시지 백 버퍼는 화면에 그려지는 버퍼에 바로 렌더를 살 경우 버퍼가 지워지는 순간 또는 버퍼에 전체가 다 그려지기 전에 화면에 그려지기 전에 화면에 그려질 경우 덜 그려진 부분이 화면에서 잠깐 지워진 상태가 되기 때문에 깜빡이는 것처럼 보이는 현상이 생긴다. 이때, 백 버퍼를 생성하여 백 버퍼에 모든 내용을 그리고 백 버퍼를 화면에 렌더하는 방식으로 위의 문제를 해결할 수 있다. 백퍼퍼와 픽 메시지 기존에는 WM_TIMER를 이용하여 업데이트를 처리했지만 이는 모든 메시지 중에서 우선 순위가 가장 낮고 최대 속도가 0.01초이다. 이를 극복하고 cpu 성능을 제대로 활용하기 위해 픽 메시지를 사용한다! HDC hdc = GetDC(g_hWnd); g_hDC..
윈도우 API 프로그래밍 9 : 키매니저(키 입력 받기), bitset 예제 이번 글에서는 싱글톤 패턴을 이용해서 키 입력을 받는 방법과 간단한 bitset 메소드를 이용해 보겠다. SingletonBase.h 먼저, 싱글톤 클래스를 이용할 템플릿 클래스인 SingletonBase.h를 정의해 보았다. #pragma once /* 싱글톤 패턴 : 단일 객체 관리 방법 - 인스턴스를 호출 시 처음 호출 하는 경우 인스턴스를 생성하고 생성 된 인스턴스를 반환 한다. - 인스턴스를 호출 시 이전에 호출되어 생성이 되어 있는 경우 그 생성 되어 있는 인스턴스를 반환 한다. 템플릿(Template, 형판) : 함수 또는 클래스를 만들어 내기 위한 틀 - 정해지지 않은 자료형에 대한 선언을 템플릿을 사용하여 하고 ..
윈도우 API 프로그래밍 8 : 객체 지향적인 윈도우 API 프로그래밍 "모든 것은 객체로 이루어져 있다". 객체 지향적으로 코드를 짜면 유지 보수가 편하며 새로운 기능을 안전하고 효율적으로 구현할 수 있다. 이 글에서는 실제 기능 구현을 보며 그 부분에 대한 기초를 간략히 서술한다. 기능 예시1 . 더 자세한 내용이 궁금하시다면 직접 들어보시는 걸 추천드립니다!
윈도우 API 프로그래밍 7 : 게임 프레임워크 구성 지금은 간단한 게임이니까 WindowsProject1.cpp라는 단일 파일에 모든 기능을 구현했지만, 프로그램이 복잡해지면 사실 필요한 코드를 필요한 파일에 분할해서 구성해야 한다. 이 글에서는 이를 위한 밑작업을 어떻게 하는지를 다루고자 한다. GameNode : 먼저 스켈레톤 클래스를 만들자 #pragma once class GameNode { public: GameNode(); ~GameNode(); virtual void Init() = 0; // 순수 가상 함수 virtual void Update() = 0; virtual void Render() = 0; }; 먼저 가장 기본적으로 Init, Update, Render라는 가상 메소드를 가진..
윈도우 API 프로그래밍 6 : 간단한 UI 구현과 똥피하기 게임 예제 이전 글에 이어서 추가적인 기능을 약간 추가해 보자. 전역 변수 재설정 struct tagBox { RECTrt; floatspeed; }; vectorvecBox;// 떨어지는 렉트들의 정보 intnDelay = 50; struct tagBox를 새로 선언하여 RECT를 대체했다. 그 이유는, 각각의 상자마다 떨어지는 속도를 다르게 만들기 위해서인데, 이는 난이도나 약간의 재미 요소를 첨가하는데 사용될 수 있다. WM_TIMER : 점수 계산과 타입 수정 case WM_TIMER:// 타이머에 의해서 호출 { InvalidateRect(hWnd, NULL, true); nLevel = nScore / 100 + 1; // 포지션 위..
윈도우 API 프로그래밍 5 : 물체 떨어뜨리기 이번 글에서는 간단한 물체를 떨어뜨리는 기능을 구현하며 다른 디테일을 설명한다. WM_CREATE case WM_CREATE:// 프로그램이 실행 될 때 한번 호출 된다. (초기화) SetTimer(hWnd, 1, 10, NULL); srand(time(NULL)); break; 초기화 함수를 통해 타이머를 SET 하고, 랜덤 함수를 호출한다. WM_TIMER case WM_TIMER:// 타이머에 의해서 호출 { InvalidateRect(hWnd, NULL, true); // 포지션 위치에 따른 렉트 정보 업데이트 rtBox1 = RECT_MAKE(ptPos1.x, ptPos1.y, 50); if (nDelay == 50) { RECT rt; rt.le..
윈도우 API 프로그래밍 4 : 충돌 검사 (IntersectRect...) 이번 글에서는 도형이 다른 도형과 만났을 때 이를 어떻게 구현하고 처리하는지를 살펴본다. WM_TIMER에서 IntersectRect를 넣어보자 // 아래 두 줄은 전역변수로 선언함 enum MOVE_DIR { MOVE_LEFT, MOVE_RIGHT, MOVE_UP, MOVE_DOWN }; MOVE_DIReMoveDir; // ... case WM_TIMER:// 타이머에 의해서 호출 InvalidateRect(hWnd, NULL, true); // 포지션 위치에 따른 렉트 정보 업데이트 rtBox1 = RECT_MAKE(ptPos1.x, ptPos1.y, 100); rtBox2 = RECT_MAKE(ptPos2.x, ptPos..