어떤 프로그래밍 언어를 배워야 할까

이미지
제가 많이 듣는 질문중에 하나입니다. 1. 코딩을 처음 접하는 분은 코딩이 무엇인지 물어봅니다. 코딩은 소프트웨어(같은 표현으로 Program, Application)를 만드는 것을 말합니다. 윈도우, 안드로이드, 카카오톡, 게임, 파워포인트 모두 소프트웨어 입니다. 좀 더 정확히 이야기 하자면 윈도우, 안드로이드는 해당 전자기기 내부를 통합(하드웨어, 소프트웨어 모두) 관리하는 운영체제 소프트웨어 (Operating System, OS )이며, 카카오톡, 게임, 파워포인트는 응용소프트웨어( App lication) 라고 분류합니다. 운영체제 소프트웨어는 각종 앱도 관리해야 하며, 모니터, 메모리, 하드디스크 등 하드웨어  기기도 모두 관리해야 하는 막중한 역활을 담당하고 있습니다. 따라서, 운영체제 소프트웨어(이하 OS)를 만드는 것은 응용소프트웨어(이하 앱)을 만드는 것에 비해 상당한 시간과 기술이 필요합니다. 우리가 알고있는 OS는 윈도우즈, iOS, Android, Unix, Linux 등 몇 가지 없습니다. 그만큼 상용화하기 어려운 기술이며, 표준화(대중화) 시키기도 쉽지 않습니다. OS의 종류 일반적으로 우리가 말하는 코딩은 앱(카카오톡, 게임, 파워포인트 등)을 만드는 것을 의미합니다. 좀 더 자세히 표현하면 어떤 OS에 설치되어 동작하는 특정한 목적을 가진 소프트웨어를 만들는 것 이라고 설명드리고 싶습니다. OS든 앱이든 그것을 만들기 위해서는 2진수 기반(전기의 있음 1, 없음 0, 즉 디지털)으로 동작하는 컴퓨터에 내가 원하는 목적에 맞게 동작하도록 명령 을 내려야 하는데요, 이런 명령어들의 조합을 0과 1로만 인간이 작성한다면 굉장히 복잡한 형태가 될 것입니다. 예를 들면 이런 형태의 명령이 될 것입니다. 01110010111111001101110111....  (난해합니다) 왜냐하면 컴퓨터는 정말

Visual Studio 설치하기

이미지
Visual Studio (이하 VS) 는 MS사에서 만든 통합 개발 환경도구(IDE)입니다. C, C++, C#, Python 등의 언어를 지원하며, 프로그래밍 언어를 이용해 소프트웨어 개발이 가능하도록 만들어 주는 프로그램입니다. (보통은 개발 툴, 또는 IDE 라고 이야기합니다) 버전은 커뮤니티(무료), 프로(유료), 엔트프라이즈(유료) 3가지가 있습니다. 무료 버전은 학생, 개인 개발자, 오픈소스용으로 사용 가능 하며, 이름은 Community 버전이라 부릅니다. 버전별로 개발 규모에 따른 약간의 차이는 존재하나 무료버전(Community)으로도 학원에서 배우는 모든 과정을 다 개발, 수정, 빌드가 가능 합니다. 현재 최신 빌드 버전은 VS 2017버전이 있지만, 버그도 존해하며, 지속적으로 업데이트가 진행중이라 학원에서는 VS 2015 버전을 기준 으로 수업합니다. 자, 이제 어떻게 설치하는지 알아 볼까요. 참고로 VS를 설치하고 사용하게 위해서는 MS 계정이 하나 필요합니다. 무료로 계정을 만들 수 있으니 아래 VS를 설치해 가면서 안내에 따라 만들면 됩니다. 1.  MS VS 다운로드 사이트로 접속  (링크 클릭) 아래와 같은 사이트로 연결되며, 최신 버전인 VS 2017을 다운로드 하는 메뉴가 보입니다. 우리는 VS 2015 버전을 설치할 계획이므로 좀 더 다운로드 페이지의 아래로 내려보면 이전 버전을 다운로드 할 수 있는 링크를 찾을 수 있습니다. 2. 이전 버전을 선택 자, 이제 VS 2015 버전 (커뮤니티 버전)을 다운로드 가능한 페이지로 연결되었으며, 해당 파일을 다운받아 설치해 보겠습니다. 3. 설치 프로그램 설정 설치 마법사가 안내하는 대로 계정을 만듭니다. (무료입니다) 아래 설치 페이지를 참조하여 Visual C++ 항목을 체크해 설치를 진행하면 끝입니다. 저는 유료 버전(프로버전)을 구입해 사용해 약간의 차이는

C++ 강의 도서 안내

이미지
2023.09.20일, 현재 C++ 강의 도서 (MFC는 더이상 수업하지 않으며, Qt로 진행)

합격을 진심으로 축하합니다.

이미지
어제 일요일 등산 중에 반가운 전화 2통을 받았습니다. 학원에 다니는 중3학년 양O훈, 박O원 학생들인데, 대견하게도 대덕 SW 마이스터고 에 당당히 합격했다는 연락이었습니다. 늘 학습태도가 우수한 학생들이라 불합격은 생각해 본 적도 없지만, 그래도 참 기분 좋은 하루였습니다. 대전에 위치한 대덕 SW 마이스터고는 수업료, 입학금, 학교운영비가 모두 무료 이며, 정부에서 지원하는 공립학교(특목고)  입니다. 기숙사 생활을 하게되며, 2018년 신입생 정원 80명중 대전 32명, 전국 48명 을 모집합니다. 입학은 일반 내신 전형(상위 20%이내), 사회통합 전형, 코딩테스트 전형이 있는데 전국 우등생들이 많이 지원하고 있습니다. 전국 48명중 부산지역 3~4명학생이 합격했고, 이 중 학원에서 2명이 합격해 더 대견하고 자랑스럽습니다. 이번주 수업때 맛있는거 사줄게 애들아... 너희들의 새로운 시작을 진심으로 축하하고, 앞으로 4차 산업혁명을 이끌 핵심 인재로 성장해 세계를 누비며 너희들의 꿈을 펼치길 진심으로 기원한다. 꿈을 날짜와 함께 적어 놓으면 그것은 목표가 되고, 목표를 잘게 나누면 그것은 계획이 되며, 그 계획을 실행에 옮기면 꿈은 실현되는 것이다. A DREAM written down with a date becomes a GOAL. A GOAL broken down into steps becomes a PLAN. A PLAN backed by ACTION makes your dreams come true. -그레그 S. 레이드(Greg S. Reid)

심화반 예제 (아날로그 시계)

이미지
이번에 만들어 본 예제는 아날로그 시계입니다. C++ 언어와 MFC를 이용해 만들어 보았습니다. 아날로그 시계를 프로그래밍 하기 위해 진행한 설계 과정입니다. 1. 시계 외곽 원 그리기  이 부분은 매우 쉽습니다. CDC 클래스의 Ellipse() 함수를 호출하면 원을 그려줍니다. 다만, Ellipse 함수는 사각형의 왼쪽 위점과 오른쪽 아래점을 지정하면 그 사각형에 내접하는 원을 그려주므로 뷰 클래스의 크기를 얻어와 그 사각형에 내접하는 원을 그리면 끝입니다. 윈도우 기본 좌표계는 왼쪽 위 좌표가 0, 0 이며 X좌표는 오른쪽으로 가면 커지고, Y 좌표는 특이하게 아래쪽으로 가면 커집니다. 눈에 보이는 화면 좌표에서 음수를 없애서 편리하게 좌표를 계산하도록 만들어 줍니다. 만약, 뷰의 크기가 변함에 따라 시계의 크기를 변경하고 싶다면 가로, 세로 축 중 더 작은 값을 알아내 작은 값을 원의 지름으로 적용하면 화면에 맞는 시계의 외곽 원을 그려낼 수 있습니다. 2. 시간, 분 마크 적용하기 시계의 시간, 분 선을 그리기 위해서는 삼각함수가 필요합니다. 원의 외곽선 좌표를 찾아내 시계의 중심점으로 부터 선을 그어야 하기 때문입니다. 시계의 중심점 좌표와 (anchorPt) 시계의 반지름 (radius), 각도를 알고 있다면 다음과 같이 외곽선의 좌표를 구할 수 있습니다. // 각도를 라디안으로 변환 (각도 곱하기 파이 나누기 180) double radian = deg * PI / 180.0; // sin (라디안) 곱하기 반지름으로 X좌표 구하기 double dx = sin(radian)*radius; // cos (라디안) 곱하기 반지름으로 Y좌표 구하기 double dy = cos(radian)*radius; // 원의 외곽선 X 좌표 anchorPt.x + dx // 원의 외곽선 Y 좌표 anchorPt.y + dy 시간, 분 마크는 각도는 360도를 6으로 나누어 총 60번 짧은

심화반 예제 (오목)

이미지
오목을 C++로 구현해 보았습니다. 대학교 과제로 교수님들이 많이 내는  주제입니다. 간단해 보이지만 막상 만들어 보면 그리 간단하지 않습니다. 바둑돌을 바둑판 바깥에 두었을 경우, 바둑판의 교차선위에 돌이 정확하게 놓아져야 하는 문제 등을 잘 해결해야 합니다. 판정처리에 대한 부분은 비교적 쉽습니다. 2차원 배열에서 5개 돌의 연속을 찾아서 처리하면 되지만, 가로, 세로, 대각선 방향의 판정을 모두 고려해서 판정해야 합니다. 심화반 중학생 한명이 오목 판정후 복기 기능까지 넣어서 만든 것을 보고 깜짝 놀랐습니다. 개발 과정을 요약하면 다음과 같습니다. 1. 바둑판을 19X19 크기 2차원 배열로 생성 (각 상태는 빈곳, 흑돌, 백돌 인지 3가지 값을 가짐) 2. 마우스 클릭시 현재 클릭한 화면 좌표가 바둑판의 선이 교차하는 지점에 놓아지도록 가장 가까운 배열의 인덱스를 찾는 알고리즘 구현 (바둑 돌은 바둑판의 클릭 지점에 놓이는 것이 아니라 바둑판 선의 교차점에 놓아져야만 함) 3. 흑돌, 백돌의 순서대로 놓아지도록 상태 저장, 한번 돌을 둔 곳은 다시 돌이 겹칠 수 없도록 체크 필요 4. 돌을 둘 때마다 가로, 세로, 대각선(좌상->우하, 우상->좌하) 방향에 같은 색의 바둑돌이 5개 연속되는지 검사 개발환경 : Microsoft Visual Studio 2015, Windows 10 Pro 64bit 개발언어 : C++, MFC 핵심 적용 기술, 환경  Device Context, GDI, Double Buffering (깜빡임방지) SDI (Single Document Interface) Windows Message (Timer, Mouse) 2차원 배열 (맵 구현) 돌을 놓았을때 가장 가까운 바둑판의 교차선에 놓는 문제 바둑판의 크기 변경

심화반 예제 (스네이크 게임)

이미지
구글에서 "스네이크 게임"으로 검색하면 나오는 게임을 C++로 구현해 보았습니다. 게임의 규칙은 뱀을 이동시켜 랜덤하게 등장하는 먹이를 먹으면 꼬리가 한 칸 길어지는 방식입니다. 다만 뱀이 현재 진행하는 방향의 반대쪽 (오른쪽인 경우 왼쪽)으로 이동은 불가합니다. 뱀 자신의 머리가 자신의 몸통과 부딪히는 경우는 게임종료, 맵 밖으로 뱀머리가 나가도 게임 종료됩니다. 이 게임의 팁이라면 뱀의 마디가 길어질수록 맵의 바깥쪽으로 뱀을 이동시켜 안쪽으로 향하도록 하는 것이 유리합니다. 전체 설계 과정은 아래와 같습니다. 1. 배경 맵으로 표현될 2차원 배열 만든 후, 각 셀의 좌표를 모두 저장 (차후 뱀에 해당하는 사각형을 그리기 위해) 2. 뱀의 위치를 기록해둘 좌표(배경 맵 배열의 인덱스)를 연결리스트로(std::list)로 선언 3. 게임 시작시 최초 3마디의 뱀의 좌표(배경 맵 배열의 인덱스)를 생성 후 이동 시작 4.  키보드의 상,하,좌,우 키 입력에 따라 뱀의 인덱스 위치를 변경. 상(행 감소), 하(행 증가), 좌(열 감소), 우(열 증가) 5. 뱀의 머리 좌표가 뱀의 몸통좌표에 닿았거나, 배경 맵의 위치를 벗어나지 않았는지 검사. 6. 실행흐름을 생성(쓰레드)해 마지막 키보드 방향으로 뱀을 계속 이동(배열 인덱스 변경). 7. 이동 후 바뀐 뱀의 좌표를 계속 사각형으로 그리기 마지막으로, 게임 성공 판정은 코드로 구현하지 않았습니다. 주석이 잘 되어 있으므로, 직접 한번 구현해 보는 것도 나쁘지 않습니다. ^^ 개발환경 : Microsoft Visual Studio 2015, Windows 10 Pro 64bit 개발언어 : C++, MFC 핵심 적용 기술, 환경  Device Context, GDI, Double Buffering (깜빡임방지) SDI (Single

수학의 벡터를 이용한 예제

고등학교 수학에서 배우는 벡터 (크기와 방향을 모두 가지는 어떠한 양) 를 이용해 몇 가지 예제를 C++로 구현해 보았습니다. 1. 속도와 가속도를 이용한 벡터 모션 마우스 위치를 타겟으로 멀어지면 가속도가 증가하고 가까워지면 가속이 느려지도록 만들어 보았으며, 게임에서 유도무기 등의 알고리즘으로 많이 쓰입니다. 2. 바람, 중력, 힘, 마찰력을 이용한 벡터 모션 뉴턴의 운동법칙을 코드로 비슷하게 구현해 보았으며, 약간의 바람의 힘을 오른쪽으로 가했을 경우 입니다. 3. 공기 및 유체 저항을 이용한 벡터 모션 뉴턴의 제 2 법칙 가속도는 힘을 질량으로 나눈 값과 같습니다. (A = F / M) 가속도는 물체의 질량이 작을 수록 빨리 가속하지만 아래 예제에서는 항력으로 인해 유체에서 점점 느리지는 가속을 구현해 보았습니다.  너무 질량이 작은 물체는 유체의 표면 장력으로 튕겨나간 후 다시 유체로 들어가게 됩니다. 개발환경 : Microsoft Visual Studio 2015, Windows 10 Pro 64bit 개발언어 : C++, MFC 참조 문헌 : 칸 아카데미, 다니엘 쉬프만(Daniel Shiffman)이 저술한 "The Nature of Code"

상담 시 많이 받는 질문 정리

안녕하세요. 오션코딩학원장 김주원입니다. 요즘은 벌써 여름이 끝나가는 기분이 드는 시원한 날씨입니다. 상담시 많이 물어보시는 내용을 한 번 정리해 보았습니다. 1. 교육대상 초등학교 2학년 부터 성인까지 수업하고 있습니다. 2. 교육비 엔트리 수업은 월 130,000 원, C++, 파이썬, 윈도우 프로그래밍, 심화반 수업은 월 150,000 입니다. 교육비 외 추가 비용은 없습니다. 3. 교육시간 엔트리 수업은 주 2회 수업을 실시하고 있으며 1회 수업은 60분입니다. (주말반은 주 1회 120분) C++, 파이썬, 윈도우 프로그래밍, 심화반 수업은 주 1회 120분 수업입니다. 모든 수업은 횟수는 다를 수 있으나 월 480분(4주 수업) 기준입니다. 4. 교육과정 엔트리는 초등학생 대상 이며, 블록프로그래밍 언어와 아두이노 보드를 이용해 소프트웨어 교육을 실시합니다. C++은 중,고, 성인 대상 이며, 강의서적과 Microsoft Visual Studio 2015를 이용해 C++ 프로그래밍 언어에 대해 전반적인 교육을 실시합니다. 파이썬은 초등 고학년, 중, 고, 성인 대상 이며, 강의 서적과 Microsoft Visual Studio 2015, 파이썬 언어를 이용해 파이썬의 기본문법과, PyQt를 이용한 GUI과정에 대한 교유을 실시합니다. 윈도우 프로그래밍 과정은 중, 고, 성인 대상 이며, 강의서적과 Microsoft Visual Studio 2015, C++ 언어를 이용해 윈도우 운영체제에서 소프트웨어를 개발하는 방법에 대한 교육을 실시합니다. 심화반 과정은 기본적인 프로그래밍 과정을 이수한 수강생, 또는 기본 프로그래밍 지식을 가진 수강생을 대상 으로 하며, 스스로 주제를 정하고, 주제를 완성하기 위한 개발과정을 문서화 한 후, 선생님과 함께 내가 만들고 싶은 주제를 완성시켜나가는 방식의 수업입니다. 5. 수업시간표 수업시간표는 매월 바뀌며, 사전에 공지드리고 있습니다. 한번 등록한 시간은 거

심화반 예제 (팩맨)

이미지
1980년 5월 일본의 남코라는 회사에서 만든 팩맨 게임을 C++을 이용해 만든 예제입니다. 심화반 고등학생이 정한 주제를 저도 함께 만들어 보았으며, 생각보다 좀 어려웠습니다. 기억나는 몇 가지 어려웠던 부분은, 맵의 크기를 너무 작게 설정하면, 팩맨과 적군의 움직임을 부드럽게 표현하기 어려워, 개발 도중 배경맵의 크기를 키운점. 적군이 팩맨을 추격하는 간단한 인공지능 만들기. 적군이 팩맨에게 죽었을때 적군아지트로 이동시키기 위해 경로 탐색알고리즘이 필요했던 부분 등. 개발 과정을 요약해 정리해 보겠습니다. 1. 배경 맵을 2차원 배열로 만들어 각 셀 별로 상태를 저장 (빈곳, 벽, 먹이가 있는 곳 등) 2. 그래픽을 처리하기 위해 각 셀의 좌표를 모두 저장 (팩맨, 벽, 빈공간, 적군, 먹이, 등을 그리기 위함) 3. 적군과 팩맨을 위한 부모 클래스 생성(추상화 클래스) 4. 적군, 팩맨 자식 클래스를 상속을 통해 구현 (자신의 좌표, 팩맨의 공격모드 인지 저장 등) 5. 게임 시작시 팩맨과 적군을 배치하고 남는 공간에 먹이를 배치 6. 팩맨의 이동을 키보드 이벤트를 통해 처리 (현재 위치의 좌표에서 다음 이동방향으로 이동가능한지 판단 후, 벽이아니라면 좌표이동 등) 7. 적군의 이동을 만들어 내기 위한 2가지 알고리즘 생성 (확율에 기반한 팩맨 쫓아가기, 적군이 아지트에 있는 경우는 아지트 탈출하기) 8. 팩맨과 적군의 접촉 감지 (팩맨은 큰 먹이를 먹으면 적군을 잡아먹을 수 있으므로 상황에 맞

이 블로그의 인기 게시물

Qt Designer 설치하기

C++ 예제 (소켓 서버, 이미지, 파일전송)