SW 그리고 아빠 엔지니어링 중...

아는 만큼 보이고, 경험해봐야 알 수 있고, 자꾸 써야 내 것이 된다.

전체 글 128

내가 설계한 객체에 유효성 기능 지원하기

내가 설계한 객체에 유효성 기능 지원하기💬 내가 설계한 객체에 유효성 기능 지원을 위해 변환 연산자, 변환 생성자, 묵시적 형변환, 그리고 명시적 형변환을 이해해 보자. 간단하게 생각하면 아래처럼 객체의 성공/실패 여부를 리턴해주는 멤버 함수를 지원하면 된다.class DIY{public:    DIY(){};    bool fail(){return true;};};int main(){ DIY d; if(d.fail()){}}    💬 좀 더 나아가 아래와 같이 객체자체로 유효성 기능을 지원해 주려면 어떻게 해야 할까 ❓ 🤔DIY d;if(d){}; istream의 객체인 std::cin은 객체임에도istream cin; 아래 코드처럼 if문의 조건식에 들어갈 수 있다.#include int mai..

L C++ 2024.06.09

애증의 const 사용하기 (2)

💬 지난 글에 이어 const를 쓰면서 막히는 사례를 풀어가 보자. 애증의 const 사용하기 (1)const 잘 쓰시나요?💬 나는 잘 사용하지 않는다. const를 사용하다 보면 에러가 자주 발생하고, 개발하는데 적지 않은 인터럽트가 걸린다. 이런 경험들이 반복되면서 자연스럽게 const 사용하지 않jabdon4ny.tistory.com 기존에 작성되어 있던 used defined type 객체를 멤버함수의 인자로 전달하는 경우를 생각해 보자. 예제 Point 객체를 foo 함수 인자에 상수 참조형으로 전달을 한 예제인데 멤버함수를 호출하면 에러가 발생한다.#include class Point { public: int x, y; int getX() {return x;}; int getY() {retur..

L C++ 2024.05.26

애증의 const 사용하기 (1)

const 잘 쓰시나요?💬 나는 잘 사용하지 않는다. const를 사용하다 보면 에러가 자주 발생하고, 개발하는데 적지 않은 인터럽트가 걸린다. 이런 경험들이 반복되면서 자연스럽게 const 사용하지 않게 되었다. 하지만 '에러가 잘 발생한다'는 것은 반대로 얘기하면 의도하지 않은 실수를 방지하기 위한 알람이기에 잘 쓰는 것이 좋다. (상수 장점 : 실수방지, 멀티스레드 안전)이번기회에 const를 잘 이해하고 써보자.  C++ 대체 언어로 거론되는 Rust는 C++과 반대로 기본이 상수이고, 변수로 사용하려면 키워드를 사용해야 한다. 다시 말해 대세란 말씀!C/C++C/C++int n = 0; //변수const int c = 0; // 상수RUSTlet mut n = 0; // 변수let c = 0;..

L C++ 2024.05.11

(응용) 생성자(constructors) 초기화

💬 누가 만들어 놓은 클래스에 API만 추가한다면 크게 고려할 일이 없겠지만 언젠가는 새로운 클래스를 만들고 기존 클래스를 상속해서 파생 클래스를 만드는 때가 올 것이다. 파생 클래스를 만들고 가장 먼저 작업하게 되는 것은 초기화이다. 이 초기화를 할 때 생성자 호출 순서를 잘 이해하고 있어야 올바른 설계를 할 수가 있다. 몇 가지 응용사례를 통해서 생성자 호출 순서를 알아보자. ⚠ 본 글을 기본적인 생성자 초기화는 알고 있다는 가정하에 작성되었다. 혹시 내용이 어렵다면 아래 내용을 먼저 이해하고 다시 읽어주길 바란다. - 2024.04.17 - [L C++] - (기초) 생성자(constructors) 초기화 🎯 Quiz : 당신에게는 아래는 stream 클래스 이용해서 pipeStream 파생클래스를..

L C++ 2024.04.21

(기초) 생성자(constructors) 초기화

생성자에서의 초기화 이것이 왜 좋은 코드인지 알아보자. class A { // Good string s1; public: A() : s1{"Hello, "} { } // GOOD: directly construct // ... }; 일전에 대입과 초기화에 대한 내용을 정리했었는데, 초기화와 별도로 대입을 하면 user defined type은 함수가 호출되는 동작을 추가로 하게 된다. 아래코드에 B 클래스는 얼핏 보면 생성자 안에서 바로 s1을 초기화했지만 사실 이것은 초기화를 한 후 대입을 한 것이다. class B { // BAD string s1; public: B(const char* p) { s1 = p; } // BAD: default constructor followed by assignme..

L C++ 2024.04.17

2024년 2월(~3월) C++ Korea 스터디 후기

발단 우연히 facebook에 C++ korea 커뮤니티 그룹이 있어 눈팅만 하고 있다가 올해 2월부터 스터디 모임을 한다는 공지를 보게되었다. 고민시작 C++ 공부를 혼자하다보니 이해하고 있는게 맞는지 나는 어떤게 부족한지 파악하기가 힘들어 한계를 느끼고 있던 터라, 참여해보고 싶은 마음 반, 스터디 하는 분들과 나이차이가 많이 나면 어쩌지? 스터디 진도를 못 따라가면 어쩌지 등등 오만가지 고민을 100만번 정도 하다가 용기를 내어 첫 모임장소로 나갔다. 0 회차 모임 0 회차 모임에서는 스터디 진행방식 공유와 의사 결정을 위한 모임이 되었다. (자세한 내용은 여기 에서 확인해보고) 간단히 정리하면 다음과 같다. 주제 C++핵심 가이드 라인을 스터디하고 돌아가는 형태로 진행 되었고 C++ Core Gu..

회고 & 후기 2024.04.13

std::move the 이해하기

💬 혹시 std::move 쓰시나요? copy 보다 더 빠르다는 이유로 무분별하게 쓰고 있지 않은 지, copy보다 빠를 것을 기대하고 사용하고 있었으나 실제로 빠르게 동작하고 있나요? 아니면 찜찜해서 아예 사용하지 않고 있나요? 🎯 이번에 제대로 이해하고 올바르게 사용해 봅시다. 📍 오해 풀기 : std::move는 리소스 소유권을 이동시킨다❗ or ❓ 🤔 더 정확히는 std::move 자체가 소유권을 이동시키는 것이 아니라, std::move의 대상이 되는 객체들의 이동 생성자를 호출되게 하는 역할만 하고, 소유권 이동의 유무는 이동 생성자 내부에 즉 객체 설계에 따라 (되고 안되고 가) 결정이 된다. 🔍 move가 어떻게 구현되어 있는지 들여다보자. move는 단지 r-value 참조로 캐스팅하는 ..

L C++ 2024.04.12

perfect forwarding을 perfect하게 이해하기

🎯 지난 글에서 C++ 핵심 가이드라인에 'F.19: "전달(forward)" 매개변수는 TP&&타입과 std::forward로만 전달하라' 에 대한 설명이 빈약했는데, 본 글에서 perfect forwarding에 대해 알아보고, C++ 핵심 가이드라인의 의미도 이해해 보자. 💬 std::forward를 이해하려면 참조 축소 규칙을 우선 이해해야 한다. Reference Collapsing Rules(참조 축소 규칙) 💬 참조 축소 규칙을 설명하기 이전에 우선 아래 내용에 대해 생각해 보자. reference의 reference는 과연 컴파일이 될까? int main() { int x = 10; int& r = x; int& & rr = r; //reference의 reference 과연될까? retu..

L C++ 2024.03.29

std::string_view의 이해

SL.str.2: 문자들의 나열을 참조하기 위해서는 std::string_view나 gsl::string_span을 사용하라. 🤔 C++ Core Guidelines에 가이드이다. 왜 std::string_view를 써야 하는지 알아보자. 📢 std::string_view를 이해하기 위해 기존 개념부터 이해하고 넘어가야 할 것 같은데 알고 있는 내용은 다음 내용으로 넘어가도 좋다. 초기화 VS 대입 아래 예제코드의 초기화와 대입에 대해 우선 이해해 보자. //primitive type //1-1) int a = 0; //1-2) int b; b = 0; // user define type //2-1) std::string s1 = "hello"; //2-2) std::string s2; s2 = "hel..

L C++ 2024.03.19

[C++ Core Guidelines] 매개변수 전달 표현식 규칙 in Functions

서두 C++ Core Guidelines을 보면 방대한 양의 가이드 규칙이 있다. 처음 알게 되었을 때의 기쁨도 잠시, 이내 내용을 읽는데 한계를 느꼈다. 'C++로 밥벌이하는 나도 어려운데 많은 사람이 C++ Core Guidelines을 통해 많은 정보를 얻어 갈 수 있을까?' 란 의문이 들었다. 그래서 틈 나는 대로 가이드에서 얘기하고자 바의 의도를 풀어서 정리해보자 한다. * C++ 핵심 가이드라인 한글화 프로젝트의 문구는 주황색으로 표기함 Parameter passing Parameter Passing expressing rules: 매개변수를 함수에 전달하고 값을 반환하는 다양한 방법이 있다. 아래 F15~21, F60 8가지 규칙을 통해 함수의 인자 및 반환에 대한 가이드와 그 이유를 하나씩..

L C++ 2024.02.27
320x100