반응형

프로그래밍 215

friend 키워드-연산자 오버로딩을 위한 사용 [C++]

드물게 사용되는 키워드 중 하나인 friend 키워드는 클래스의 멤버변수에 대한 접근 권한을 주는 키워드인데, 사실 캡슐화 측면에서 바람직하지 않게 보이기도 한다. friend키워드를 꼭 사용하지 않아도 getter함수나 setter 함수를 제공함으로써 충분히 멤버변수에 접근할 수 있다. 그래도 가끔은 friend 키워드를 사용할 때가 더 깔끔하고 가독성이 좋다. friend 키워드의 사용방식 friend는 접근에 관한 키워드므로 상식적으로 주체가 되는 클래스가 외부 클래스나 외부 함수에 허용해주는 형태가 되어야 한다. friend로 지정된 클래스나 함수는 제한 없이 멤버변수에 접근할 수 있다. Class간 사용 예> extern 과 비슷하게 사용된다. 외부의 클래스가 자신의 멤버변수에 접근 가능하도록 ..

프로그래밍/cpp 2015.07.22

파이썬(python) 제어문(if, for, while)

파이썬 제어문은 다른 언어(C언어)와 비슷하지만 가지 특징이 있다. 대표적 특징은 들여쓰기를 한다는 것인데, 들여쓰기를 해서 얻는 이점은 간결함이다. 하지만 개인적으론 들여쓰기는 제어문이 복잡해지면 가독성이 낮아짐을 느낀다. 이건 C언어의 블럭구조에 익숙해져 온 프로그래밍 습관인 한 몫 하는 듯 하다. 또한 들여쓰기는 문장의 배치에 제약을 주는데, 이는 정형화된 구조를 만드는 장점이 있지만, 경우에 따라서 답답함을 느끼기도 한다. 아무튼 파이썬이란 언어 자체가 워낙 간결함을 추구하고, 아주 복잡한 제어문을 사용한다면 어짜피 포퍼먼스가 낮아지기 때문에, C로 부분적인 대체를 하면 되니 불만은 없다. if문 예) - 조건문 끝에 : (콜론)을 사용하자. - 들여쓰기를 하자. - C언어의 else if 문은 ..

C++11 람다 표현식(lamda expression)

C++11에 등장한 람다 표현식은 함수를 별도 선언 없이(이름 없이) 인라인으로 사용하게 해준다. 람다 표현식은 기본적으로 함수의 내부에서 사용할 수 있는데, 사용 방법은 다음과 같다. 람다의 기본 문법 예 캡쳐 블록 외부 변수를 사용(캡쳐)한다 사용 예) [], [=], [&], [&x, y], [=,&y] … [] - 캡쳐블록이며 생략할 수 없다. 외부 변수를 사용하지 않는다는 뜻이다. 기본적으로 []로 시작하면 람다식임을 나타낸다. [=] - 는 값을 복사하여 사용 [&]는 참조하여 사용, 특정 변수를 쓰지 않으면 전체를 참조 또는 복사한다는 뜻이다. [&x, y] - x는 참조하여 사용 y는 복사하여 사용한다는 뜻이다. [=, &y] - 모두 복사하여 사용하는데, y만 참조하여 사용한다는 뜻이다...

프로그래밍/cpp 2015.07.14

파이썬(python)의 형변환

파이썬의 형 변환은 매우 간단해서 기가 막힐 정도입니다. 수치 형 변환 S='1234' 위 문자열을 정수형으로 바꾸려면 어떻게 할까? Int(s) 문자열은 정수형 모양 이어야 한다. 실수로 바꾸기 Long형으로 바꾸기 암시적 형 변환은 상황에 맞게 허용 자료가 변형되지 않는 범위에서 가능, 예를 들어, int->long은 ok, long->int 안됨, int->float는 ok, float->int 안됨 복소수 형으로 바꾸기 문자열로 변환하기 참고 str대신 repr을 사용해도 되는데, 약간의 차이가 있다 세세한 부분 이므로 패스 리스트를 문자열로 변환하면 단순히 str()을 사용하여 리스트를 문자열로 변환하려고 하면 위 처럼 리스트 모양의 문자열이 생긴다. 각 요소만 뽑아서 문자열을 만들려면 여러 가..

서로 다른 번역 단위에 정의된 전역 객체들의 초기화 순서 [C++]

이 문제는 스캇 마이어 저 ' effective c++' 에서 언급된 내용으로 제 4항 객체를 사용하기 전에 반드시 그 객체를 초기화하자. 라는 문항의 내용을 참조하길 바랍니다. 책에서 깊게 논의된 내용은 아니라 직접 실험을 통한 검증과 그 예를 정리함에 의의를 둔다. 이 문제를 바라보는 바람직한 시각은 추상적인 생각보다는 물리적인 컴파일 과정을 떠올리는 것이 중요하다. 컴파일과 링크 과정에 벌어지는 객체의 초기화와 참조 과정은 분명 물리적 순서가 있기 때문이다. 하지만 여러 모듈 사이에서 물리적 순서를 결정하여 컴파일 하는 것은 쉬운 일이 아니다. 또한, 이런 물리적 순서로 인해 발생하는 문제도 생길 수 있다. 이런 문제로 전역객체의 사용은 꼭 필요한 경우가 아니면 권장하지 않는다. 다음은 전역변수의 ..

프로그래밍/cpp 2015.07.11

파이썬에서의 얕은복사와 깊은 복사 및 레퍼런스 카운트(Reference Count)

파이썬은 언어 차원으로 포인터를 다루지 않기 때문에, 얕은 복사와 깊은 복사에 대한 언어의 구조적인 이해보다는 사용법을 이해하는 것이 바람직하다 생각한다. C와 C++에 익숙해져서 그런지, 얕은 복사 깊은 복사부분은 감동도 없고 재미도 없었다. 지금은 파이썬을 C/C++ 다음의 써드(third)언어로 택했고 파이썬의 강력함에 기가 찰 때도 있지만, 배우면서 느끼는 심오함은 C/C++에 비할게 아니다. 파이썬은 마치 최신 기술 잡지는 읽는 듯한 느낌이라면 C/C++은 깊이 알면 알수록 철학적 사고를 느끼게 하는 철학공부를 하는 듯한 착각에 빠지는 건 나만일까? 아무튼 파이썬에 대한 글이니 파이썬은 세련된 언어라고 결론 내려야겠군... 얕은 복사와 깊은 복사에 대한 것은 다음 그림 하나로 충분하다고 생각된다..

타입 세이프한 열거 타입 enum class <c++11>

데이터의 집합을 읽어 들일 때 인간은 문자를 컴퓨터는 숫자를 선호한다. 이를 위한 형태가 enum이라는 열거 타입인데, C언어 문법이고, 타입 세이프하지는 않다. 이에 반해 c++11에 등장한 enum class는 타입 세이프한 녀석이다. enum enum은 내부에 열거된 변수에 0부터 차례대로 숫자를 입힌다. 물론 도중에 값을 변경시켜도 된다. 변경된 수 다음 수는 변경된 수를 기준으로 1식 증가된다. enum 활용 예 컴파일은 되지만 문제가 되는 부분은 if(mine==yours)를 비교하는 부분이다. 서로 다른 종류의 값들을 다루지만 서로 비교가 가능하다. 이는 타입 세이프 하지 않다는 것을 반증한다. myType과 yourType은 의도대로 라면 다른 종류의 값들이어야 한다. 하지만 enum은 내..

프로그래밍/cpp 2015.07.07

파이썬(python) 딕셔너리(dictionary)-사전 기초

딕셔너리(Dictionary) 말 그대로 사전, 예를 들어 아주 간단한 사전을 만든다고 생각하면 다음과 같이 만들 수 있다. left:1 center :0 right :2 … :의 왼편의 값은 key :오른편 값은 value라고 한다. 위 출력 결과를 잘 보면 입력한 순서와 다르다는 것을 알 수 있다. 이는 해시(hash)의 특징으로 파이썬의 사전은 해쉬를 이용하는 것을 알 수 있다. 여러 자료형을 키(key)값과 value 값에 넣을 수 있다. 단, 키 값은 고정된 값이므로 리스트나 사전이 올 수 없다. 이유는 해시의 특성상 키 값이 바뀌면, 저장 위치를 새로 바꾸어 주어야 하기 때문에 이 값은 고정 값만 올 수 있는 것이다. value는 다음과 같이 바꿀 수 있다. 다음과 같이 value 값으로 함수..

파이썬(python) 리스트(list), 튜플(tuple) 에 대한 이해

리스트(list) 사용빈도가 높은 녀석이다. 이 녀석은 말 그대로 자료를 리스트화해서 보관한다. 또한 보관 자료형들의 타입들이 달라도 다르지 않아도 상관없다. C언어의 경우는 보통 자료구조에 보관하는 타입이 일정하다. 만약 여러 타입을 위와 같이 보관하려면 void* 타입을 사용해야 할 것이다. 뭐 구현할 수도 있겠지만, 매우 귀찮을 것이다. 기본적으로 C언어는 타입을 체크하는 방법은 없다. 프로그래머가 하나하나 알고 있어야 한다. 타입의 사이즈는 sizeof로 알 수 있지만, 타입을 체크하는 방법은 C11의 _Generic을 이용하는 방법이 있다고 들었는데 사용해 보진 않았다. 정확히 선언된 타입이 아니면 에러를 내 뿜는 C와 달리 파이썬의 이런 유동적인 면은 편하게 보이지만, 잘못된 대입에 관용적이기..

파이썬(python) 내장 자료형(Data Type) 숫자, 문자열

&#39;자료형&#39;, 또는 Data type 또는 Type이라고 한다. 파이썬의 자료형은 매우 단순하고 직관적이다_. C언어의Data Type_들은 같은 숫자라 해도 int, short, unsigned int, unsigned short, float, double long….. 등등 메모리를 얼마나 차지하는지 또는 숫자를 어떻게 표현하는지에 따라 세분화 된다. 이런 세분화된 자료형을 잘 사용하면 성능(performance)를 향상시키지만, 잘 못 사용하면 그 반대의 효과 또는 알 수 없는 오작동, 또는 에러가 발생한다. 32비트 시스템과 64비트 시스템의 자료형의 호환성을 위한 매크로 사용은 당신을 멘붕의 세계로 안내한다.(32비트 시스템의 int는 32bit 64비트 시스템에서의 int는 64비..

반응형