A Tour of C++ 2장
A Tour of C++은 다른 사람들이 얘기한 것 처럼 다른 언어를 잘 알면서 C++ 기본서도 1회독은 해야 이해가 가는 책인 것 같다.
그래도 중급으로 가기위한 책이니 열심히 읽어야지
책의 조언에 해당하는 나름대로의 예시를 생각해서 달아본다
1. 내장 타입이 너무 저수준이면 내장 타입 대신 명확한 사용자 정의 타입을 사용하자
void process(int width, int height);
struct Dimensions
{
int width;
int height;
};
void process(Dimensions dim);
int를 단독으로 사용하는 대신 struct로 묶어 사용자 정의 타입을 사용해 의미를 명확히 한다.
2. 연관된 데이터를 구조화 하자
string name;
int age;
string address;
struct Person
{
string name;
int age;
string address;
};
연관된 데이터를 Person이라는 struct로 묶어 관리가 쉬워지고 의미가 명확해졌다.
3. class를 사용해 인터페이스와 구현을 구분하자
struct Animal {
void speak() { std::cout << "동물 소리\n"; }
};
class Animal {
public:
virtual void speak() const = 0;
virtual ~Animal() = default;
};
class Dog : public Animal {
public:
void speak() const override { std::cout << "멍멍!\n"; }
};
Animal의 인터페이스를 정의하고 Dog에서 구현
4. struct는 기본값으로 public 멤버를 갖는 클래스일 뿐이다
5. 생성자를 정의해 클래스 초기화를 보장하고 간소화하자.
class User {
public:
std::string name;
int age;
User(const std::string& n, int a) : name(n), age(a) {}
};
User u("Alice", 25);
6. 열거(Enum)를 사용해 명명된 상수 집합을 표현하자
enum Color { RED, GREEN, BLUE };
enum TrafficLight { RED, YELLOW, GREEN }; // 충돌 가능
Color c = RED;
TrafficLight t = RED; // 문제 발생 가능
enum class Color { RED, GREEN, BLUE };
enum class TrafficLight { RED, YELLOW, GREEN };
Color c = Color::RED;
TrafficLight t = TrafficLight::RED; // 명확함
enum을 사용하면 동일한 이름일 때 충돌이 발생하지만 enum class는 괜찮다
7. 예상 밖의 일을 최소화하려면 일반적인 enum 보다는 enum class가 낫다
위와 동일
8. 안전하고 간단하게 사용하려면 열거에 연산을 정의하자
Traffic_light& operator++(Traffic_light& t)
{
switch (t)
case Traffic_light::green: return t=Traffic_light::yellow;
case Traffic_light::yellow: return t=Traffic_light::red;
case Traffic_light::red: return t=Traffic_light::green;
}
operator++을 사용해 enum타입을 안전하고 간단하게 사용한다.
9. 노출된 union은 피하고 타입 필드를 포함하는 클래스로 래핑하자
union Data {
int i;
float f;
};
Data d;
d.i = 42; // 위험
d.f = 3.14f;
class Data {
public:
enum class Type { INT, FLOAT };
Data(int i) : type(Type::INT), i(i) {}
Data(float f) : type(Type::FLOAT), f(f) {}
Type getType() const { return type; }
int getInt() const { return i; }
float getFloat() const { return f; }
private:
Type type;
union {
int i;
float f;
};
};
10. 노출된 union 보다 std::variant가 낫다
#include <variant>
std::variant<int, float> data;
data = 42;
data = 3.14f;
variant는 여러 타입 집합 중 하나의 값을 저장하며 union 보다 안전하고 간단하다.
'C, C++ > C++ 여행' 카테고리의 다른 글
| [A Tour of C++] 7장 - 템플릿 (1) | 2025.06.10 |
|---|---|
| [A Tour of C++] 6장 - 필수 연산 (1) | 2025.05.17 |
| [A Tour of C++] 5장 - 클래스 (0) | 2025.05.14 |
| C++ 여행 조언 새기기 4 (0) | 2025.02.22 |
| C++ 여행 조언 새기기 3 (1) | 2025.02.22 |