본문 바로가기

개발일기/설계와디자인10

C++ 네임스페이스 사용 장점과 단점 (using namespace std) C++에 추가된 네임스페이스(namespace) 기능은 일부 자연스럽게 사용하는 부분도 있고 잘 활용되지 않는 부분도 있습니다. 제일 많이 사용하는 것이 "using namespace std" 일 것입니다. STL을 사용하거나 cout 출력을 위해서 많은 프로그래머들이 사용하고 있습니다. 하지만 C++ 네임스페이스 사용에는 장점과 단점이 있습니다. 이에 대해 자세히 알아보겠습니다. 네임스페이스란 무엇인가? "네임스페이스"라는 이름에서 알 수 있듯이 C++ 언어에서 각 이름들을 포함하는 공간의 개념입니다. 유사한 식별자(함수, 클래스, 상수 선언 등)를 함께 그룹화하는 논리적인 방법입니다. 기존에 C언어에서 모듈화 된 라이브러리를 하나로 묶을 때, 동일 이름에서 오는 심볼 충돌을 해결할 수 있는 방법으로 .. 2021. 11. 6.
std::vector 와 std::array 중 어떤 것을 사용할지의 선택 기준 vector와 array 컨테이너 클래스는 비슷하면서 다릅니다. 그래서 어떤 경우에 어떤 것을 사용할지 고민하는 경우가 있습니다. 하지만 둘 간에 차이가 명확하기 때문에 아래와 같은 선택 기준을 가지면 앞으로는 명확히 선택하실 수 있습니다. std::vector의 특징 std::vector는 가변 사이즈를 지원합니다. 이를 위해서는 크기가 동적으로 변경 가능하기 때문에, 구성 메모리 공간과 관계없이 동적으로 유지되는 버퍼가 할당되어야 합니다. 실제로 이는 버퍼링 된 콘텐츠에 대한 동적 메모리(힙) 할당이 필요함을 의미합니다. 만약 처리할 항목 수가 제한 가능한 크기의 컨테이너를 사용할 경우는, std::vector의 경우 필요한 것보다 고비용 메모리 할당을 사용합니다. std::array의 특징 생성에 .. 2021. 11. 6.
std::vector<T>::const_iterator 사용방법 설명 const_iterator는 컨테이너 내의 값에 대한 "포인터와 같은" 핸들을 제공합니다. 일반 iterator와 다른 점은 const 형태로 변경 없이 참조만 하는 경우 사용합니다. 여기서 예제로 설명드릴 컨테이너 클래스는 동적 배열인 std::vector입니다. 한글로는 "이터레이터", "콘스트 이터레이터"라고 부릅니다. const_iterator의 동작 방식 vector 인스턴스는 const_iterator를 요청 시 내부 데이터에 바인딩된 const 반복자를 생성합니다. 그 후에는 컨테이너의 인덱스 위치인 것처럼 작동합니다. 오직 컨테이너가 임의 액세스를 지원하는 경우만 지원되며, array 및 vector do, list 및 map 은 지원하지 않습니다. 참조하는 위치를 변경하기 위해서는 인덱스.. 2021. 11. 6.
데이터 중심 프로그래밍 2008.06.28: 데이터 로직의 복잡함과 자료구조의 복잡함. 이 두가지 중 하나를 선택해야 한다면 무었을 선택해야 하나? Eric S. Raymond는 1%의 망설임도 없이 자료구조라고 말한다. 이것의 가장 간단한 예는 복잡한 변환 테이블과 복잡한 스위치 문이 될 수 있다. 자료 구조의 복잡함을 선택해야 하는 이유는 무었인가? 사람의 사고 자체가 제어 흐름을 처리하는 능력보다 데이터 구조를 머리속으로 그려내는 능력이 뛰어나다고 한다. 또한, 데이터에 대한 무결성을 검증하는 작업보다 아무리 간단한 로직이라도 완벽함을 검증해 내는 작업이 더 어렵다. 이는 또한 문제의 수준을 상위로 끌어 올리는 역할도 한다. 프로그래머는 되도록 작은 일을 하고 컴퓨터 에게 많은 작업을 시키도록 한다. 패치 작업 시 코드에.. 2008. 9. 29.