본문 바로가기

Software81

C++ 동적 메모리 (Dynamic Memory) 할당 필요성 동적할당이 왜 필요할까요? 동적메모리 할당은입력갑에 의존적인 프로그램을 만들어야 할 경우 유용하게 쓰일 수 있습니다. 예를들어 사진이나 영상 등 어떤 파일을 읽어야 하는데 읽기 전에는 그 크기를 모르기 때문에 메모리에 얼마나 공간이 필요한지 알수가 없는데 이럴때는 동적할당이 꼭 필요합니다. 다음과 같은 코드를 컴파일 해보면 컴파일 에러가 납니다. int i = 5; int arr[i]; i라는 변수에 5가 할당되니까 정수형 배열 “arr[i]”은 정수형 x 5개 만큼의 크기가 필요하다는 것이 자명한데 왜 에러가 날까요? 이유는 컴파일시에 변수 i 가 정수형이라는 것만 정해지지 여기에 값 5가 들어가는건 프로그램이 실행될 단계에서 일어나는 일이라고 합니다. 그래서 컴파일러는 “i”에 뭐가 들어가있는.. 2019. 2. 28.
[파이썬의 기본] 함수(Function) 함수 함수는 어떤 기능을 하도록 구현한 코드들의 묶음으로 필요에 따라 함수이름만 가지고 호출해서 사용할 수 있습니다. 그래서 이 함수를 만들어서 코드를 잘 정리하면 가독성도 좋아지고 유지보수에도 도움이 됩니다. 파이썬의 함수도 다른 언어들과 마찬가지로 함수의 선언과 호출로 사용하고 파라미터와 반환값을 주고받습니다. 함수의 선언 함수를 만드는 방법입니다. “def”라는 키워드를 사용합니다. 그뒤어 사용할 함수의 이름, 괄호, 콜론(:)을 차례로 적어어서 함수의 언선이 시작되는 부분임을 표시합니다. 함수는 코드의 덩어리가 묶여있는 형태이기 때문에 함수의 단락이 이어지고 있음을 표시해야 겠죠. C언어에서는 중괄호( {, } )를 이용해서 함수단락의 시작과 끝을 표시하는데 반해, 파이썬은 단순히 들여쓰기로만 표.. 2019. 2. 28.
[파이썬의 기본] 반복문(while, for) while while문은 주어진 조건이 참이면 계속 반복해서 코드를 실행하도록 하는 명령어 입니다. 그러다가 조건이 거짓이 되면 while 루프를 빠져나가서 그다음 코드를 계속 실행하게 됩니다. 예제: i=1 while i=0: i=i+1 if i==2: print(“Skip”) continue if i==5: print(“Break”) break print(i) print(“Finish”) 결과: for 리스트나 레인지처럼 한정된 범위내에서 반복을해서 작업을 수행해야 할 경우에 사용할 수 있는 명령어 입니다. 예제: words = ["hello", "world", "spam", "eggs"] for word in words: print(word + "!") for i in range(5): print(.. 2019. 2. 28.
[파이썬의 기본] 분기문 (if, elif, else) 분기문 “if”, “elif”, “else” 구문에 대한 설명입니다. 조건의 참 거짓 여부에 따라서 프로그램 실행방향을 결정하는 구문입니다. 이역시 컨셉은 C++이나 기타 언어와 동일합니다. 파이썬의 특징이라고 한다면 다중조건의 분기를 만들때 elif라는 키워드를 사용합니다. C++의 “else if”와 같은 역할을 하는데 이마저도 줄여서 사용하네요. 요즘 인싸들은 줄임말을 많이 사용하던데 역시 파이썬은 인싸들의 언어였네요. ㅋ 예제를 보죠. 예제: x = 1 if x==1: print("One") elif x==2: print("Two") else: print("Three") 예제는 if로 첫번째 조건을 확인하고 elif문으로 2번째 조건을 확인합니다. 그리고 마지막으로 조건1과 조건2 어느것에도 속하.. 2019. 2. 26.
[파이썬의 기본] 리스트(Lists) 리스트 리스트(Lists)는 파이썬의 구조체입니다. 인덱싱된 요소들을 시리즈로 저장하는 역할을 합니다. 리스트 선언 대괄호([ ])로 둘러싸고 쉼표(,)로 요소 요소를 구분해서 리스트를 생성합니다. 그리고 요소의 시작 인덱스는 "0"부터 시작됩니다. 형태와 사용법이 C++의 배열과 유사하네요. 예제: >>> numbers = [5, 7, 10] >>> print(numbers[0]) 5 >>> print(numbers[2]) 10 그런데 특이하게도 리스트는 요소들의 타입이 서로 다른경우도 허용하고 있습니다. 예제: >>> number=5 >>> allthing=[33, “string”, [0,1,number], 3.14] >>> print(allthing[2][2]) 5 문자열에 대해서 리스트와 동일하게.. 2019. 2. 12.
[파이썬의 기본] 입출력과 연산 입출력 파이썬에서 기본적인 화면 입력과 출력에 “print”와 “input”이라는 명령어를 각각 사용합니다. 앞으로 GUI환경에서 프로그래밍을 주로 할 예정이긴 하지만 기본적인 개념이니 알고는 있어야 겠죠. 예제: >>>print('Hi') Hi >>>input('') Hi 'Hi' >>> 기본 연산 파이썬도 여느 프로그램 언어와 마찬가지로 가감승제에 대해서는 “+, -, *, /“ 의 기호로 표시할 수 있습니다. 예제: print(1+2) print(2*3) print(3-4) print(4/5) 결과: 여기서 재미있는 파이썬의 특징이 나왔네요. 위 예제코드에서 “4 나누기 5”를 했는데 결과값이 0.8이 나왔습니다. 정수 나누기 정수를 했는데 알아서 실수값으로 출력이 되었죠. 파이썬은 나누기를 하면 .. 2019. 2. 12.
[파이썬의 기본] 문자열 문자열 선언 파이썬에서는 문자열을 표현하기 위해서는 문자열 앞, 뒤에 작은따옴표(')나 큰따옴표(")를 사용합니다. 그리고 작은따옴표나 큰따옴표 자체를 문자열에 사용하기 위해서는 역슬러시를 사용합니다. 예제: >>> print('It\'s mine.') ‘It’s mine.’ 개행(new line) "\n"으로 개행을 표시할 수 있습니다. 그리고 추가적으로, 개행을 표현하는 다른 방법도 있습니다. 큰따옴표 3개로 둘러싼 문자열에서는 엔터로 줄바꿈을 하면 개행문자를 자동으로 집어넣어 줍니다. 문자열 연산 연결(Concatenation) 두개의 문자열을 합치는 명령어 입니다. 연결을 할때 문자열이 큰따옴표로 만들어 졌는지 작은따옴표로 만들어졌는지는 상관하지않고 그냥 합쳐줍니다. 예제: >>> "Spam" +.. 2019. 2. 12.
[파이썬의 기본] 변수 변수 파이썬의 큰 특징으로 변수에 특별하게 타입 지정이 필요없다는 점을 들 수 있습니다. 변수선언이나 정의가 간단하고 사용에 제약도 거의없어서 C++처럼 많은 고민이 필요없어 보입니다. 예제: >>> x = 123.456 >>> print(x) 123.456 >>> x = “This is a string” >>> print(x + “!”) This is a string! 게다가 만들어진 변수는 언제든지 재정의 할 수 있는데, 정수에서 실수로 심지어는 문자열로까지 형변환도 자유롭게 가능합니다. 변수를 사용함에 있어서 높은 자유도가 있기 때문에 베이직언어를 배우는것 처럼 거부감이 없어서 좋네요. 그렇지만 변수를 아무렇게나 막 사용할 수 있는건 아닙니다. 최소한의 규칙은 지켜야겠죠. 파이썬 변수사용 규칙 변수.. 2019. 2. 11.
[PyQt] PyQt5로 Python GUI 프로그래밍 시작하기 - Hello World! 출력 Hello world!, 모든 언어의 시작점이죠 지난글에서 준비해둔 파이썬 GUI 개발환경에서 Hello World 출력하기를 실습해 보겠습니다. 새 파이썬 프로젝트 생성 VS를 열어서 새로운 프로젝트를 생성합니다. 파이썬 응용프로그램 프로젝트를 선택합니다. 그리고 프로젝트가 저장될 위치와 프로젝트 이름 한번 확인해주고 프로젝트를 생성합니다. 프로젝트가 생성되면 아무것도 없는 빈문서가 나타나는데요, 프로그램 기반이 마련되었습니다. PyQt로 프로그램 GUI 만들기 이제 PyQt의 디자이너(Designer)프로그램을 열어서 화면에 출력할 창을 디자인 해보겠습니다. 디자이너가 어디 깔려있는지 찾는것도 일인데요. VS에서 PyQt를 설치하면 다음의 경로에 설치가 되는걸 확인 했습니다. C:\Program Fi.. 2019. 1. 30.
파이썬(Python) 기본개념과 개발환경(Visual Studio & PyQt5) 준비 요즘 파이썬(Python)을 안쓰는데가 없어서 더 늦기전에 나도 시작해야지란 조급함이 생겨서 공부를 시작했습니다. C++의 기초도 아직 정리가 되지 않았는데 동시에 두가지를 얼마나 효율적으로 할수 있을지 걱정이 되지만 일단 시작해 봅니다. C++와 마찬가지로 나름대로 공부한 내용을 정리하고 기록으로 남기려합니다. 파이썬의 기본개념 파이썬은 interpreter 언어라고 합니다. C++는 큰 차이죠. 컴파일이 필요한 C++이랑 달리 스크립트를 한줄씩 해석해 가면서 실행하는 언어라서 별도의 컴파일 과정이 필요없습니다. 이런 언어들은 보통 사용이 쉽던데 그래서 Python이 인기가 있나 봅니다. 물런 그것만이 인기비결은 아니겠죠. 파이썬이 큰 인기를 끄는 대표적인 이유는 PyPI(Python Package I.. 2019. 1. 23.
[C++/MFC 핵심노트] Class (클래스) 접근범위 제한 - PART 2 클래스 두번째 파트입니다. 클래스에서 또하나 중요한 개념인 접근범위 제한에 대해서 정리해 보겠습니다. 클래스가 만들어지면 그 용도에 따라 다양한 형태로 사용될 수 있는데, 클래스를 설계한 사람이 어떻게 내부구조를 만드느냐에 따라 어떤 멤버는 클래스 내부에서만 사용가능하고 어떤 멤버는 외부에서도 바로 접근할 수 있도록 만들수도 있습니다. 만약 이런 제한이 없다면 클래스는 단순히 코드의 가독성을 높여주기 위한 도구 정도에 불과할텐데, 클래스의 인터페이스를 클래스 설계자가 의도한 대로 제한함으로써 사용시 오류도 줄이고 코딩의 생산성도 높이는 효과를 얻을 수 있습니다. (저는 그리 복잡한 코딩을 해본적인 없기 때문에 대부분 public으로 사용해서 크게 와닫는 부분은 없었습니다.) 클래스 접근범위 제한 지금부터.. 2019. 1. 10.
[컴파일 오답노트] error C2440 ON_WM_NCHITTEST 에러 인터넷에서 찾은 오래전에 만들어진 어떤 소스를 컴파일 하려는데 에러가 발생했습니다. 에러메시지는 error C2440: 'static_cast': 'UINT (__thiscall CACListWnd::* )(CPoint)'에서 'LRESULT (__thiscall CWnd::* )(CPoint)'(으)로 변환할 수 없습니다. note: 기본 형식에서 파생 형식으로 캐스트하려면 dynamic_cast 또는 static_cast가 필요합니다. 앞뒤로 형이 맞지 않는다는 내용인거 같은데 뭔말인지 잘 모르겠습니다. 에러가 발생한 부분은 메시지 맵에서 "ON_WM_NCHITTEST()" 부분이었습니다. BEGIN_MESSAGE_MAP(CACListWnd, CWnd) ON_WM_NCHITTEST() END_MESS.. 2019. 1. 3.
전자공시시스템(DART)에서 재무제표 데이터 가져오는 프로그램 만들기 DART의 Open API를 이용해서 궁극적으로는 원하는 데이터를 콕 찝어서 가져와서 필요한 지표를 계산하는 그런 프로그램을 만들고 싶었습니다. 그런데 결론적으로는 지금 내 수준에서 단기적으로 달성하기에는 무리가 있는듯 하여 재무제표 조회의 수준에서 마무리하기로 했습니다. 이유는 뒷부분에서 얘기하겠습니다. DART의 Open API 자체가 공시데이터의 목록 “조회만"을 목적으로 하고 있기 때문에 세부적인 Data의 조회는 편법을 이용해야 하며 그 편법을 위해서는 제 잔머리도 부족하고, 또 DART에서 자체적으로 세부Data를 일괄로 내려받을 수 있도록 해주고 있어서 굳이 새로운걸 만들어 쓸 필요가 없겠더라구요. 그래서 저는 이번 프로젝트는 이번 글에서 마무리하고자 합니다. 이번글은 DART에서 제무제표를.. 2018. 12. 26.
strlen / wcslen / _mbslen / _tcsnlen - 문자수 반환 strlen, wcslen, _mbslen, _tcslen 용도 문자열에 포함된 문자의 개수를 반환 구문 #include size_t strlen(const char *string); size_t wcslen(const wchar_t *string); #include size_t _mbslen(const unsigned char *string); size_t _mbslen_l(const unsigned char *string, _locale_t locale); 매개변수 string Null로 종료되는 문자열 locale locale 반환 문자열 안에 포함된 문자의 갯수를 반환함. null은 제외. 에러에 대한 별도 반환이 지정되어 있지 않습니다. 추가설명 T캐릭터 함수를 사용하면 아래와 같이 호출됩니다... 2018. 12. 20.
HTML Parcer 예제프로그램 분석과 코드 활용방안 Intro 이전 글에서 CodeProject.com에서 받은 코드를 컴파일하는 간단한 방법을 소개한 적이 있었는데 그때 받았던 코드를 본인의 프로그램에 사용하기 위해서 나름대로 로직을 분석한 결과를 정리해 두려 합니다. CodeProject.com에서 다운받은 C++ 프로젝트 컴파일 하는 방법 다운받았던 프로그램은 "HtmlParser"라는 프로그램으로 웹페이지 주소를 넣으면 해당 코드를 받아와서 HTML 코드를 분석해서 코드의 계층구조를 트리 형태로 시각화 시켜주고 원하는 특정 태그나 속성을 필터링 할 수도 있는 그런 기능을 합니다. 저는 전자공시 사이트인 Dart에서 필요한 기업정보를 가져오기 위해서 웹페이지 크롤링 방법을 고민하고 있는 중입니다. 당현히 HTML파싱이 빠질수 없기 때문에 잘 만들어진.. 2018. 12. 4.