반응형

얕은복사 4

javascript 얕은복사, 깊은복사에 대한 이해

복사는 값의 전달을 목적으로 합니다. 문서를 복사하는 것처럼 컴퓨터 내에서도 파일을 복사하거나 하죠. 컴퓨터 사용 시 흔하게 파일을 복사합니다. 원본이 있을테고 복사한 파일은 원본과 똑같지만 원본은 아닙니다. 그리고 복사본을 수정한다고 해도 원본은 변하지않고 복사본만 수정되겠죠. 위와 같은 방식이 일반적인 사람들이 익숙해져 있는 사고방식입니다. 실제 생활에서의 복사본은 원본과 연결되지 않습니다. 그리고 이 방식을 깊은복사라고 이해해 두시면 되겠습니다. 얕은복사 전에 참조를 먼저 javascript만 공부하신 분이라면 대략 다음과 같이 얕은 복사를 이해 또는 암기하고 계실겁니다. 객체를 얕은복사를 하면 객체의 원소 중 원시타입이 아닌 객체에 대해 참조를 공유한다. 네 이 말은 맞습니다. 하지만 전 이렇게 ..

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

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

복사 생성자 - 얕은복사 깊은복사 C++

C++에서 생성자의 주된 임무는 클래스 멤버 변수의 초기화 일 것이다. 이러한 생성자는 기본적으로 인수의 유무에 따라서 인수의 형태에 따라서 몇가지 이름을 붙인다. 기억해둘 생성자에는 디폴트 생성자, 복사 생성자가 있고 결국 생성자이고, 형태 또한 생성자의 형태에서 벗어나지 않는다. 그러면 왜 이렇게 구분해 놓은 것인가? 그러면 생성자의 형태를 살펴본 후 이야기하자. 아주 간단한 클래스와 생성자를 만들었다. 생성자의 기본적인 형태는 위 코드처럼 반환타입이 존재하지않고, 클래스의 이름과 똑같다. 그 외에는 일반적인 함수의 형태를 띠게된다. 생성자는 생성자라는 이름처럼 객체의 생성과 동시에 호출이 되게 되어있다. myClass A; 는 myClass A = myClass(); 와 동일한 구문이다. 해석하자면..

프로그래밍/cpp 2014.03.18

디폴트 복사 생성자(얕은복사,깊은복사)

디폴트 복사 생성자(얕은복사,깊은복사), gcc 4.8.1 버전 과연 얕은 복사가 되는걸까? 먼저 문제를 발견하기 위해서 얕은복사가 되는지 코드를 먼저 짜보았다. 참고는 예전에 듣던 유명한 c++강의의 소스를 참조를 했다. 오래전 강의라 그런가? deprecated 경고가 난다. 2014/01/10 - [프로그래밍/c++] - deprecated conversion from string constant to 'char*' 이경우 char * 를 const char *로 바꿔주면 된다. 아래처럼.. 전부다바꾸면 안되고 밑줄 친 부분만 바꿔준다. 그럼 아래처럼 성공적으로 컴파일된다. 그럼 과연 얕은 복사가 되었나? 아무런 조치도 취하지 않았는데 깊은 복사가 되었다. 새로운 컴파일러의 승리인가? 주소값을 체크..

프로그래밍/cpp 2014.01.10
반응형