반응형

프로그래밍 215

파이썬 람다(lambda) 함수

파이썬의 람다함수는 매우 직관적입니다. C++11에서도 람다함수가 등장했는데 파이썬의 문법과 비교하면 복잡하죠. 아마 파이썬 문법 익숙하게 되면 C++ 람다함수를 보고 황당해 할겁니다. 람다함수란? 람다함수란 람다식, 또는 람다 표현식, 익명함수 등으로 알려져 있습니다. 실제로 이름이 없이 정의되어 사용됩니다. 이 녀석은 함수와 동일한 녀석인데 실제로 사용을 하는 건 자기 취향이라고 생각합니다. 없어도 되는데 보통 어디에 사용되냐 물으면 언어들마다 특색이 있기에 한마디로 정의할 수는 없겠지만, 우선 대부분의 언어들이 람다함수(람다식)을 지원하는 추세로 바뀌었기 때문에 소스를 읽기 위해서라도 알아둘 필요가 있습니다. 실제 함수와 비교 lambda x,y:x+y 는 람다식입니다. 여기서 f는 람다식의 위치를..

우측값 참조 [C++11]

우측값 참조는 C++11에서 생긴 개념이다. 좌측값 참조는 우리가 흔히 알고 있는 참조를 말한다. 흔히 수식에서 Rvalue, Lvalue로 데이터의 상태를 나타내는데 일반적인 변수는 Lvalue, 상수나 임시객체(값)은 Rvalue가 된다. 예를 들어 int a = 3; int b = 4; int c = a+b; int d = 3;// 여기에서 a, b c, d는 Lvalue가 되고, a+b, 3은 Rvalue가 된다. Lvalue는 수식의 계산이 끝난 후에도 지속적으로 존재하는 변수들이고, 3이란 값이나 a+b는 Rvalue로 임시 객체내에서 존재하다가 식의 계산이 끝난 후 임시객체는 파괴된다. 우측값 참조 우리가 흔이 알고 있는 참조는 좌측값 참조다. 이런 일반적인 참조의 경우는 우측값을 참조할 수..

프로그래밍/cpp 2015.10.24

파이썬(python) 함수 및 스코핑룰(scoping)

함수에 대한 내용이 제어문 다음에 왔어야 했는데, 뜬금없이 파일 입출력에 대한 글을 써버렸네요. 아무튼 이 강의는 애초에 최소 C언어에 대한 기초가 있는 분들을 위한 강의지만, 처음 프로그래밍을 접하는 분들에게도 도움되는 내용이 있을 거라 생각됩니다. 그냥 몰라도 한번 따라 하시면 됩니다. 프로그래밍은 처음에는 머리굴려 생각하는 것 보다 몸으로 체득하는 것이 중요합니다. 다시 본론으로 들어가서 파이썬의 함수나 C/C++에서의 함수나 거기서 거기입니다. C/C++과 약간 차이가 나는 부분만 정리하고 넘어가면 되는 정도, 파이썬이 첫 프로그래밍 언어라면 그냥 그대로 익히시면 됩니다. 그리고 스코핑 룰이라 주제를 첨가했는데, C++의 이름공간과 전역 변수 지역변수의 비슷한 개념이라고 생각하시면 됩니다. 함수와..

explicit 키워드와 변환 생성자

변환 생성자의 조건은 생성자의 인수가 1개다. 기본 자료형들 간의 대입과 암시적인 형변환을 생각하면 쉽게 이해된다. 변환생성자의 역할이 바로 이런 형 변환인데, 변환 생성자의 경우는 명시적으로 사용할 것은 권고 한다. 명시적으로 사용하기 위해서는 explicit 키워드를 생성자에 붙이면 된다. 왜 명시적으로 사용해야 되는지는 몇 가지 예를 보면 쉽게 이해할 수 있다. 변환 생성자 Test(int a)는 변환 생성자다. 이 녀석의 역할은 int형 자료형을 Test형 객체로 변환한다. Test(char s) 또한 변환 생성자다. 마찬가지로 char형 자료형을 Test형 객체로 변환해 준다. 위 코드는 문제가 없이 잘 실행 된다. 그러면 여기서 클래스 내부의 생성자 Test(char s)를 없애면 결과가 어떻..

프로그래밍/cpp 2015.10.08

파이썬 파일 임의 접근

파일의 내용을 쓰거나 읽을 때 FP(File Position)을 이용한다. 말 그대로 위치를 기억하는 FP는 파일을 열면 맨 앞을 가리킨다. FP를 움직이면서 파일을 읽을 시작위치 또는 파일에 쓸 위치를 조작한 뒤에 읽기, 쓰기를 한다. C언어와 개념은 비슷하지만 파이썬이 사용방법은 좀 더 심플하다. C언어에서의 FP(File Position) C언어에서의 파일처리는 꽤 복잡하다. 따라서 여기서는 간략하게 설명만 하고 파이썬에서 얼마나 심플해졌는지 간단한 비교만 하겠다. C언어에서 FP를 이동시킬 때 기준이 되는 세가지 위치가 위에 그려져 있다. SEEK_SET : 파일의 선두 SEEK_CUR : 현재 FP의 위치 SEEK_END : 파일의 끝 함수 int fseek(FILE *stream, long o..

복사 생성자의 인수는 왜 레퍼런스를 사용하나?

복사 생성자는 클래스의 객체를 생성할 때 이미 존재하는 동일 클래스의 다른 객체를 그대로 복사하기 위해 필요하다. 클래스는 일종의 데이터 집합이다. 이 데이터를 다루는 도구인 멤버함수는 동일 클래스의 객체라면 공유를 하는 개념이기 때문에 객체의 복사에 있어서는 데이터(멤버변수)의 복사만 생각하면 된다. 왜냐면 데이터의 경우는 객체마다 고유하기 때문이고, 이를 공유하면 문제가 발생하기 때문이다.(예를 들어 특정 객체의 파괴 시 데이터를 공유할 경우 문제 발생). 따라서 C++문법에서 복사 생성자를 다룰 때 항상 따라다니는 문제인 얕은 복사와 깊은 복사에 관한 이야기가 중요한 문법적 주제가 된다. 초심자에게는 포인터와 메모리에 대한 개념이 확실히 이해되고 난 후에 이해할 수 있는 난코스라고 생각하면 된다. ..

프로그래밍/cpp 2015.10.05

병합정렬 알고리즘(Merge Sort)

알고리즘 공부는 마치 벽을 넘는 것과 같다. 이해하지 못하면 정말 답답하지만 원리를 알고 나면 고개를 끄덕이게 된다. 물론 이해한다는 것이 구현할 수 있다는 것을 뜻하지는 않지만, 알고리즘 공부에서 가장 중요한 것은 원리를 알고 있느냐는 것이다. 특히 정렬 알고리즘의 구현 과정은 단순하면서도 논리적으로 매우 정밀한 부분들이 복합적으로 조직화 되는 과정이므로 통 암기를 하면 모를까, 이해->구현으로 과는 과정은 오랜 경험이 필요하다. 병합정렬(merge sort) vs 퀵정렬(quick sort) 2014/11/24 - [프로그래밍/알고리즘] - 퀵정렬 알고리즘(Quick sort) 병합정렬은 퀵정렬(quick sort)과 마찬가지로 분할점령의 방법을 쓴다. 분할 점령은 원래의 문제를 같은 형식의 두 개 ..

파이썬(python) 파일 읽기, 쓰기

파이썬에서 파일을 읽는 방법 또한 매우 간단하다. 기본적으로 파일 읽기나 쓰기를 할 경우 파일을 open해야 한다. 파일을 open함수로 열면 해당되는 파일의 파일 디스크립터를 반환한다. 쉽게 말해 해당파일을 다른 파일과 구별하기 위해서 붙이는 번호라고 생각하시면 된다. 또한 파일을 다 사용한 경우 close를 해야 한다. 파일 열기 모드 우리는 단순하게 더블클릭으로 문서파일을 열 수 있다. 하지만 프로그램 내부적으로는 여는 방법에는 몇 가지 방법이 있는데 이것이 열기 모드다. 다음은 C언어에서의 파일 열기 모드인데 파이썬의 경우도 이 모드를 사용한다. r, w, a, r+, w+, a+ 여섯 가지 모드와 옵션으로 t 또는 b가 붙을 수 있다. r : 읽기 모드, 파일 없으면 Error r+: 읽기 또는..

시간복잡도, big Oh, big O notation표기법

Big-oh 또는 Big-O notation이라고 한다. 어느 표기법이 정확한지는 모르겠지만, 여기서는 Big-O표기법이라고 하겠다. https://en.wikipedia.org/wiki/Big_O_notation http://web.mit.edu/16.070/www/lecture/big_o.pdf 위 문서나 해외 문서들 또는 번역서들을 보면 Big-oh라고 언급되는 경우는 거의 없었던 것 같다. 반면에 한국의 네이버 검색의 경우 Big-oh라고 사용되는 비중이 높은 듯 싶다. 이런 편중적인 현상은 검색의 힘인가? 아무튼 Big-O 표기법은 알고리즘이 얼마나 효율적인지를 판단하는 대표적인 표기법이다. (전산)수학에서 사용되는 이 표기법은 실제로 프로그래밍을 하는 기법은 아니다. 그러나, 자신이 사용할 자..

파이썬 진법변환

파이썬으로 진법간 변환은 매우 간단하게 해결할 수 있습니다. 그래도 기본적인 진법간의 변환 방법에 대한 이해가 필요합니다. 진법간 변환을 하는 방법에 대한 이해는 다음을 살펴보길 바랍니다. 2014/05/02 - [컴퓨터구조] - 2진수를 10진수로 변환하는 방법(진수 간 변환 방법들) 2014/02/24 - [컴퓨터구조] - 10진수를 2진수로 변환하는 방법 임의의 진수를 10진수로 변환 int('x', n) : n진수 x를 10진수로 변환 x에 해당하는 수를 문자로 전달하는 것에 주의하자. n진수 ->x를 -> int(10진수)로 변환 이렇게 뒤에서부터 읽어보면 기억하기 쉽다. 주의할 점은 32진수가 초과되면 안 된다. 그렇게 사용할 일도 없겠지만 말이다. 10진수를 임의의 진수로 변환 파이썬에서 제..

반응형