본문 바로가기

깊은 복사(Deep Copy)와 얕은 복사(Shallow Copy), ICloneable 인터페이스, 프로토타입 패턴 http://itwillcampus.tistory.com/748 참조 객체가 복사된다는 것은 기존 객체와 같은 값을 가지는 새로운 객체를 만든다는 것이다. 객체가 가진 값 형식과 참조형식의 복제방식에 따라 얕은 복사,깊은 복사로 개념이 나뉜다. 1. shallow copy(얕은 복사) - 단순복사로서 만일 객체가 참조타입의 멤버를 가지고 있다면 참조값만 복사된다. person1 객체가 복사된 person2 는 새로운 객체이긴 하나 참조 멤버인 Car 에 대해서는 동일한 객체참조를 가지고 있다. (person2 에서 Car 의 Model 값을 변경하니 person1 도 변경되었다) 2. Deep Copy (깊은 복사) 객체가 참조타입의 멤버를 포함할 경우 참조값의 복사가 아닌 참조된 객체 자체가 복사되는 .. 더보기
const 최적화 1. 다음 코드에서 const Y& f(const X& x){ //...x에 대해 뭔가 수행하고 Y 객체 하나를 찾는다. return someY; } -> 매개변수나 반환값 또는 둘 다를 const로 선언하는 것이 컴파일러가 좀 더 최적의 코드를 생성하는데 , 또는 더 나은 코드를 생성하는 데 도움이 될까? 그렇다면(또는 아니라면) 왜 그런것일까? const가 최적화에 생각만큼 도움이 되지 않는다. 1) const 멤버함수를 호출한다고 해도 컴파일러는 객체 x나 객체 someY의 비트들이 변하지 않을 것이라고 가정 할 수 없다. x나 someY와 같은 객체들을 다른 이름으로 지치앟는 비 const참조를 가진 다른 코드가 있을 수도 있으며 동일한 객체에 대한 비 const참조들이 f의 실행도중에 우발적으로.. 더보기
코딩에 있어 기술적인 오류들 점검 1. 표준 헤더 이름을 정확히 작성할 것 2. main을 제대로 정의할 것 -> 이식성있는 코드를 위해 int main () 아니면 int main(int,char*[])로 정의 3. 필요한 정의들의 형식들에 대한 헤더들을 항상 포함할 것 cout, endl -> #include 4. 이름공간에 대한 지침들을 따를것 std::cout, std::endl로 작성 5. const 정확성을 지킬 것 - this를 수정하지 않으므로 const 멤버함수로 선언 6. 코드의 중복과 잉여코드를 제거할 것 7. 의미있고 적절한 이름을 택할 것 -변수이름만 봐도 무슨 역할인지 파악가능하게 지어라 8. 일관성을 지킬 것 - 정의하는 부분이 서로 틀리면 안된다. 9. 불필요한 복잡성을 제거할 것 - 불필요한 지역변수 제거 .. 더보기