본문 바로가기

개발일기26

일론 머스크에게서 배우는 설계와 개발의 원칙들 테슬라의 일론머스크가 Everyday Astronaut라고 하는 우주 항공 유튜브 채널과 인터뷰를 하면서, 평소 머스크가 가지고 있는 엔지니어링 5 원칙을 소개했다. 그는 이 원칙을 모르고 모델 3 양산 개발을 하면서 시행착오를 겪었다고 한다. 1번부터 순서대로 진행한 것이 아닌 거꾸로 5번 자동화로 문제를 해결하려고 하는 실수를 했던 것이다. 내용을 읽어보면 이는 자동차 개발 엔지니어링뿐만 아니라, SW 개발에도 그대로 적용할 수 있는 보편적인 원칙으로 보인다. 설계의 중요성, 자기가 믿고 있는 것이 정말 객관적으로 최선인지 아니면 관성에 의해 자기 합리화를 하고 있는 것인지 돌아봐야 한다. 또 뭔가를 더하기만 하고 덜어낼지를 모르는 사람들에게 있어서도 도움이 되는 조언들이다. ▶ 일론 머스크의 5단계.. 2022. 2. 27.
const_iterator와 iterator의 차이점? 성능 차이는? 일반적으로 STL 컨테이너를 순회하며 작업할 때 이터레이터(iterator)를 많이 사용합니다. 그런데 const_iterator는 사용하는 프로그래머는 항상 사용하고, 사용하지 않는 프로그래머는 늘 일반 iterator만 사용합니다. 이번에 둘 간에 어떤 차이가 있는지, 그리고 성능 차이는 없는지 알아보겠습니다. const_iterator와 iterator의 차이 const_iterator가 그냥 iterator와 다른 점은, const T* 포인터의 형태와 같이 const 값을 가리키는 반복자라는 것 밖에 없습니다. 즉, 이것을 역 참조했을 때 const T& 형태의 참조를 반환하게 됩니다. 이것은 const 지시어가 있는 변수이므로 역참조 된 값을 변경할 수 없도록 방지되는 효과가 있습니다. 값을 .. 2021. 11. 9.
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.