λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
μΉ΄ν…Œκ³ λ¦¬ μ—†μŒ

μ—°μ‚°μž μ˜€λ²„λ‘œλ”©μ— λŒ€ν•˜μ—¬

by 5566 2023. 10. 26.

I. μ—°μ‚°μž μ˜€λ²„λ‘œλ”©μ˜ κΈ°λ³Έ κ°œλ…

μ—°μ‚°μž μ˜€λ²„λ‘œλ”©μ€ ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄μ—μ„œ νŠΉμ • μ—°μ‚°μžμ˜ λ™μž‘μ„ μ‚¬μš©μžκ°€ μ •μ˜ν•œ κ°μ²΄λ‚˜ 데이터 νƒ€μž…μ— 맞게 λ³€κ²½ν•˜λŠ” 것을 μ˜λ―Έν•©λ‹ˆλ‹€. 일반적으둜, ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄λŠ” 사전에 μ •μ˜λœ μ—°μ‚°μžλ“€μ— λŒ€ν•΄ νŠΉμ • κ·œμΉ™κ³Ό λ™μž‘ 방식이 μ •ν•΄μ Έ μžˆμŠ΅λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ μ—°μ‚°μž μ˜€λ²„λ‘œλ”©μ„ 톡해 μ‚¬μš©μžλŠ” 기쑴에 μ •μ˜λœ μ—°μ‚°μžμ˜ λ™μž‘μ„ μ»€μŠ€ν„°λ§ˆμ΄μ¦ˆν•˜μ—¬ μžμ‹ μ˜ κ°μ²΄λ‚˜ 데이터 νƒ€μž…μ— λ§žλŠ” 연산을 μˆ˜ν–‰ν•  수 있게 λ©λ‹ˆλ‹€.

μ—°μ‚°μž μ˜€λ²„λ‘œλ”©μ€ 객체 지ν–₯ ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄μ—μ„œ 맀우 κ°•λ ₯ν•˜κ³  μœ μš©ν•˜λ©°, μ½”λ“œμ˜ 가독성과 ν™•μž₯성을 ν–₯μƒμ‹œν‚΅λ‹ˆλ‹€. 사전에 μ •μ˜λœ μ—°μ‚°μžλ₯Ό ν•˜λ‚˜μ˜ λͺ©μ μ— 맞게 μ‚¬μš©ν•  수 μžˆμœΌλ―€λ‘œ μ½”λ“œλ₯Ό 보닀 직관적이고 μžμ—°μŠ€λŸ½κ²Œ λ§Œλ“€ 수 μžˆμŠ΅λ‹ˆλ‹€. λ˜ν•œ, μ—°μ‚°μž μ˜€λ²„λ‘œλ”©μ„ 톡해 μ‚¬μš©μžκ°€ μ •μ˜ν•œ ν΄λž˜μŠ€λ‚˜ 데이터 νƒ€μž…μ„ 기쑴의 λ‚΄μž₯된 μ—°μ‚°μžλ“€κ³Ό μœ μ‚¬ν•˜κ²Œ λ™μž‘ν•˜λ„λ‘ λ§Œλ“€ 수 μžˆμ–΄ 효율적인 κ°œλ°œμ„ κ°€λŠ₯ν•˜κ²Œ ν•©λ‹ˆλ‹€.

예λ₯Ό λ“€μ–΄, μ‚¬μš©μžκ°€ μ •μ˜ν•œ ν΄λž˜μŠ€μ— λŒ€ν•΄ λ§μ…ˆ 연산을 μˆ˜ν–‰ν•˜κ³ μž ν•œλ‹€κ³  κ°€μ •ν•΄λ΄…μ‹œλ‹€. κΈ°μ‘΄μ—λŠ” λ§μ…ˆ 연산을 μœ„ν•œ λ©”μ†Œλ“œλ₯Ό μ •μ˜ν•˜κ³  λ‹€λ₯Έ λ°©μ‹μœΌλ‘œ μ‚¬μš©ν•΄μ•Ό ν–ˆμ§€λ§Œ, μ—°μ‚°μž μ˜€λ²„λ‘œλ”©μ„ μ‚¬μš©ν•˜λ©΄ λ‹€μŒκ³Ό 같이 λ§μ…ˆ 연산을 κ°„νŽΈν•˜κ²Œ μˆ˜ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

class MyClass {
    int value;
public:
    MyClass(int val) : value(val) {}
    MyClass operator+(const MyClass& other) const {
        return MyClass(value + other.value);
    }
};

int main() {
    MyClass obj1(5);
    MyClass obj2(10);
    MyClass result = obj1 + obj2; // μ—°μ‚°μž μ˜€λ²„λ‘œλ”©
    return 0;
}

μœ„μ˜ μ˜ˆμ‹œμ—μ„œλŠ” + μ—°μ‚°μžλ₯Ό μ‚¬μš©ν•˜μ—¬ obj1κ³Ό obj2의 값을 λ”ν•œ λ’€, 결과값을 result에 μ €μž₯ν•©λ‹ˆλ‹€. μ΄λ ‡κ²Œ μ—°μ‚°μž μ˜€λ²„λ‘œλ”©μ„ 톡해 μš°λ¦¬λŠ” 마치 κΈ°λ³Έ 데이터 νƒ€μž…μΈ κ²ƒμ²˜λŸΌ μ‚¬μš©μž μ •μ˜ ν΄λž˜μŠ€μ— λŒ€ν•œ 연산을 μˆ˜ν–‰ν•  수 μžˆλŠ” κ²ƒμž…λ‹ˆλ‹€. μ΄λŠ” 맀우 νŽΈλ¦¬ν•˜λ©΄μ„œλ„ 가독성이 쒋은 μ½”λ“œλ₯Ό μž‘μ„±ν•  수 있게 ν•΄μ£ΌλŠ” μ€‘μš”ν•œ κΈ°λŠ₯μž…λ‹ˆλ‹€.

II. μ—°μ‚°μž μ˜€λ²„λ‘œλ”©μ„ μœ„ν•œ 문법과 κ·œμΉ™

C++μ—μ„œ μ—°μ‚°μž μ˜€λ²„λ‘œλ”©μ„ μœ„ν•΄ λ‹€μŒκ³Ό 같은 문법과 κ·œμΉ™μ„ λ”°λ¦…λ‹ˆλ‹€.

1. μ—°μ‚°μž μ˜€λ²„λ‘œλ”© ν•¨μˆ˜μ˜ μ •μ˜

μ—°μ‚°μž μ˜€λ²„λ‘œλ”© ν•¨μˆ˜λŠ” μ—°μ‚°μž 기호 μ•žμ— operator ν‚€μ›Œλ“œλ₯Ό 뢙인 ν›„, ν•΄λ‹Ή μ—°μ‚°μžμ˜ 기호λ₯Ό ν•¨μˆ˜ 이름에 μΆ”κ°€ν•˜μ—¬ μ •μ˜ν•©λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, + μ—°μ‚°μžμ˜ μ˜€λ²„λ‘œλ”© ν•¨μˆ˜λŠ” operator+둜 μ •μ˜λ©λ‹ˆλ‹€.

2. μ—°μ‚°μž μ˜€λ²„λ‘œλ”© ν•¨μˆ˜μ˜ λ§€κ°œλ³€μˆ˜

μ—°μ‚°μž μ˜€λ²„λ‘œλ”© ν•¨μˆ˜μ˜ λ§€κ°œλ³€μˆ˜λŠ” ν•΄λ‹Ή μ—°μ‚°μžκ°€ μ μš©λ˜λŠ” 두 κ°μ²΄λ‚˜ 데이터 νƒ€μž…μ„ λ°›μ•„μ•Ό ν•©λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, λ§μ…ˆ 연산을 μ˜€λ²„λ‘œλ”©ν•˜λŠ” 경우, λ§μ…ˆ μ—°μ‚°μž μ˜€λ²„λ‘œλ”© ν•¨μˆ˜λŠ” λ‹€μŒκ³Ό 같은 ν˜•νƒœλ‘œ μ •μ˜λ©λ‹ˆλ‹€.

ReturnType operator+(const ClassName& obj1, const ClassName& obj2) {
    // μ—°μ‚° μˆ˜ν–‰ 및 κ²°κ³Ό λ°˜ν™˜
}

3. μ—°μ‚°μž μ˜€λ²„λ‘œλ”© ν•¨μˆ˜μ˜ λ°˜ν™˜κ°’

μ—°μ‚°μž μ˜€λ²„λ‘œλ”© ν•¨μˆ˜λŠ” ν•΄λ‹Ή μ—°μ‚°μ˜ κ²°κ³Όλ₯Ό λ°˜ν™˜ν•΄μ•Ό ν•©λ‹ˆλ‹€. λ°˜ν™˜κ°’μ€ ν•΄λ‹Ή μ—°μ‚°μžκ°€ μˆ˜ν–‰ν•œ κ²°κ³Όλ₯Ό λ‚˜νƒ€λ‚΄λŠ” 데이터 νƒ€μž…μ΄μ–΄μ•Ό ν•©λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, 두 개의 객체λ₯Ό λ”ν•˜λŠ” 경우 μ—°μ‚° 결과둜 객체λ₯Ό λ°˜ν™˜ν•©λ‹ˆλ‹€.

4. ν΄λž˜μŠ€μ™€ μ—°μ‚°μž μ˜€λ²„λ‘œλ”© ν•¨μˆ˜μ˜ ꡬ뢄

μ—°μ‚°μž μ˜€λ²„λ‘œλ”© ν•¨μˆ˜λŠ” ν•΄λ‹Ή 연산이 μˆ˜ν–‰λ˜λŠ” 클래슀의 멀버 ν•¨μˆ˜λ‘œ μ •μ˜ν•  μˆ˜λ„ 있고, 클래슀 μ™ΈλΆ€μ˜ μ „μ—­ ν•¨μˆ˜λ‘œ μ •μ˜ν•  μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€. 멀버 ν•¨μˆ˜λ‘œ μ •μ˜ν•˜λŠ” 경우, μ—°μ‚°μž μ˜€λ²„λ‘œλ”© ν•¨μˆ˜λŠ” ν•΄λ‹Ή 클래슀의 멀버 λ³€μˆ˜μ— 직접 μ ‘κ·Όν•  수 μžˆμŠ΅λ‹ˆλ‹€. μ „μ—­ ν•¨μˆ˜λ‘œ μ •μ˜ν•˜λŠ” 경우, μ—°μ‚°μž μ˜€λ²„λ‘œλ”© ν•¨μˆ˜λŠ” 클래슀의 멀버 λ³€μˆ˜μ— μ ‘κ·Όν•˜κΈ° μœ„ν•΄ λ§€κ°œλ³€μˆ˜λ‘œ ν•΄λ‹Ή 클래슀의 객체λ₯Ό 받아와야 ν•©λ‹ˆλ‹€.

μ—°μ‚°μž μ˜€λ²„λ‘œλ”© ν•¨μˆ˜μ˜ μ •μ˜ 방식은 λ‹€λ₯Έ 멀버 ν•¨μˆ˜μ™€ λ™μΌν•œ λ°©λ²•μœΌλ‘œ κ΅¬ν˜„λ©λ‹ˆλ‹€. 클래슀 λ‚΄λΆ€μ—μ„œ ν•¨μˆ˜ μ •μ˜λ₯Ό ν•˜κ²Œ 되면, ν•΄λ‹Ή ν•¨μˆ˜λŠ” μžλ™μœΌλ‘œ 인라인 ν•¨μˆ˜λ‘œ μ²˜λ¦¬λ©λ‹ˆλ‹€.

μœ„μ˜ 문법과 κ·œμΉ™μ„ 따라 C++μ—μ„œλŠ” μ‚¬μš©μž μ •μ˜ ν΄λž˜μŠ€λ‚˜ 데이터 νƒ€μž…μ— λŒ€ν•΄ λ‹€μ–‘ν•œ μ—°μ‚°μžλ₯Ό μ˜€λ²„λ‘œλ”©ν•˜μ—¬ μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 이λ₯Ό 톡해 μ½”λ“œλ₯Ό λ”μš± 직관적이고 효율적으둜 μž‘μ„±ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

III. μ—°μ‚°μž μ˜€λ²„λ‘œλ”©μ„ μ‚¬μš©ν•˜λŠ” 이유

μ—°μ‚°μž μ˜€λ²„λ‘œλ”©μ€ ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄μ—μ„œ μ€‘μš”ν•˜κ³  맀우 μœ μš©ν•œ κΈ°λŠ₯μž…λ‹ˆλ‹€. λ‹€μŒμ€ μ—°μ‚°μž μ˜€λ²„λ‘œλ”©μ„ μ‚¬μš©ν•˜λŠ” μ΄μœ μ— λŒ€ν•œ μ„€λͺ…μž…λ‹ˆλ‹€.

1. 가독성

μ—°μ‚°μž μ˜€λ²„λ‘œλ”©μ„ μ‚¬μš©ν•˜λ©΄ μ‚¬μš©μžλŠ” 기쑴에 μ•Œκ³  μžˆλŠ” μ—°μ‚°μžλ₯Ό μ‚¬μš©ν•˜μ—¬ κ°μ²΄λ‚˜ 데이터 νƒ€μž… κ°„μ˜ 연산을 μˆ˜ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€. μ΄λŠ” μ½”λ“œμ˜ 가독성을 크게 ν–₯μƒμ‹œν‚΅λ‹ˆλ‹€. 기쑴에 μ •μ˜λœ μ—°μ‚°μžμ˜ μ˜λ―Έμ™€ λ™μž‘ 방식을 이미 μ•Œκ³  μžˆλŠ” μ‚¬μš©μžλŠ” μ—°μ‚°μž μ˜€λ²„λ‘œλ”©μ„ μ‚¬μš©ν•˜λŠ” μ½”λ“œλ₯Ό 읽고 μ΄ν•΄ν•˜κΈ° 쉽고 κ°„νŽΈν•©λ‹ˆλ‹€.

2. νš¨μœ¨μ„±

μ—°μ‚°μž μ˜€λ²„λ‘œλ”©μ„ μ‚¬μš©ν•˜λ©΄ μ‚¬μš©μžλŠ” 기쑴의 μ—°μ‚°μžλ₯Ό ν™œμš©ν•˜μ—¬ 효율적인 μ½”λ“œλ₯Ό μž‘μ„±ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, κΈ°μ‘΄ μ—°μ‚°μžκ°€ μ œκ³΅ν•˜λŠ” 내뢀적인 μ΅œμ ν™” 기법듀을 ν™œμš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€. λ˜ν•œ, μ—°μ‚°μž μ˜€λ²„λ‘œλ”©μ„ 톡해 μ‚¬μš©μž μ •μ˜ ν΄λž˜μŠ€λ‚˜ 데이터 νƒ€μž…μ— λ§žλŠ” 연산을 μˆ˜ν–‰ν•˜κΈ° λ•Œλ¬Έμ— λΆˆν•„μš”ν•œ μž‘μ—…μ„ ν”Όν•˜κ³  효율적인 연산을 μˆ˜ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

3. ν™•μž₯μ„±

μ—°μ‚°μž μ˜€λ²„λ‘œλ”©μ€ μ‚¬μš©μžκ°€ μ •μ˜ν•œ ν΄λž˜μŠ€λ‚˜ 데이터 νƒ€μž…μ— λŒ€ν•œ 연산을 μ§€μ›ν•˜μ—¬ μ½”λ“œμ˜ ν™•μž₯성을 λ†’μ—¬μ€λ‹ˆλ‹€. 기쑴에 μ •μ˜λœ μ—°μ‚°μžλ‘œ μ‚¬μš©μžκ°€ μ›ν•˜λŠ” λ™μž‘μ„ μˆ˜ν–‰ν•  수 있기 λ•Œλ¬Έμ—, κΈ°μ‘΄ μ½”λ“œλ₯Ό μˆ˜μ •ν•˜μ§€ μ•Šκ³ λ„ μƒˆλ‘œμš΄ 연산을 μΆ”κ°€ν•˜κ±°λ‚˜ κΈ°μ‘΄ μ—°μ‚°μ˜ λ™μž‘μ„ λ³€κ²½ν•  수 μžˆμŠ΅λ‹ˆλ‹€. μ΄λŠ” μ½”λ“œμ˜ μœ μ§€λ³΄μˆ˜ 및 κ°œμ„ μ„ μš©μ΄ν•˜κ²Œ ν•©λ‹ˆλ‹€.

4. μžμ—°μŠ€λŸ¬μš΄ 객체 μ‚¬μš©

μ—°μ‚°μž μ˜€λ²„λ‘œλ”©μ„ μ‚¬μš©ν•˜λ©΄ μ‚¬μš©μž μ •μ˜ ν΄λž˜μŠ€λ‚˜ 데이터 νƒ€μž…μ„ 기쑴의 λ‚΄μž₯된 데이터 νƒ€μž…κ³Ό μœ μ‚¬ν•˜κ²Œ μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 즉, μ‚¬μš©μžλŠ” μ‚¬μš©μž μ •μ˜ ν΄λž˜μŠ€λ‚˜ 데이터 νƒ€μž…μ„ 마치 λ‚΄μž₯된 데이터 νƒ€μž…μ²˜λŸΌ μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€. μ΄λŠ” μžμ—°μŠ€λŸ½κ³  직관적인 μ½”λ“œλ₯Ό μž‘μ„±ν•  수 있게 ν•©λ‹ˆλ‹€.

μ—°μ‚°μž μ˜€λ²„λ‘œλ”©μ€ μ½”λ“œμ˜ 가독성과 νš¨μœ¨μ„±μ„ ν–₯μƒμ‹œν‚€λ©°, μ½”λ“œμ˜ ν™•μž₯μ„±κ³Ό μœ μ§€λ³΄μˆ˜μ„±μ„ κ°•ν™”μ‹œμΌœμ€λ‹ˆλ‹€. λ”°λΌμ„œ μ—°μ‚°μž μ˜€λ²„λ‘œλ”©μ€ 객체 지ν–₯ ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄μ—μ„œ 맀우 μ€‘μš”ν•œ κ°œλ…μ΄λ©°, μ‚¬μš©μžκ°€ κ°μ²΄λ‚˜ 데이터 νƒ€μž…μ— λŒ€ν•œ 연산을 κ°„λ‹¨ν•˜κ³  효과적으둜 μ²˜λ¦¬ν•  수 μžˆλ„λ‘ ν•΄μ€λ‹ˆλ‹€.

IV. μ—°μ‚°μž μ˜€λ²„λ‘œλ”©μ˜ μž₯점과 단점

μ—°μ‚°μž μ˜€λ²„λ‘œλ”©μ€ ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄μ—μ„œ λ§Žμ€ 이점을 μ œκ³΅ν•˜μ§€λ§Œ, λ™μ‹œμ— λͺ‡ 가지 단점도 가지고 μžˆμŠ΅λ‹ˆλ‹€. λ‹€μŒμ€ μ—°μ‚°μž μ˜€λ²„λ‘œλ”©μ˜ μž₯점과 단점에 λŒ€ν•œ μ„€λͺ…μž…λ‹ˆλ‹€.

1. μž₯점

1-1. μ½”λ“œ 가독성

μ—°μ‚°μž μ˜€λ²„λ‘œλ”©μ„ μ‚¬μš©ν•˜λ©΄ 기쑴에 μ•Œκ³  μžˆλŠ” μ—°μ‚°μžλ₯Ό ν™œμš©ν•˜μ—¬ μ½”λ“œλ₯Ό μž‘μ„±ν•  수 μžˆμŠ΅λ‹ˆλ‹€. μ΄λŠ” μ½”λ“œμ˜ 가독성을 ν–₯μƒμ‹œν‚΅λ‹ˆλ‹€. 기쑴의 μ—°μ‚°μžλ₯Ό μ‚¬μš©ν•˜λ―€λ‘œ, 이미 μ•Œκ³  μžˆλŠ” κΈ°λŠ₯κ³Ό λ™μž‘ 방식을 λ°”νƒ•μœΌλ‘œ μ½”λ“œλ₯Ό 읽고 μ΄ν•΄ν•˜κΈ° μ‰½μŠ΅λ‹ˆλ‹€.

1-2. νš¨μœ¨μ„±

μ—°μ‚°μž μ˜€λ²„λ‘œλ”©μ„ 톡해 μ‚¬μš©μžλŠ” κΈ°μ‘΄ μ—°μ‚°μžκ°€ μ œκ³΅ν•˜λŠ” λ‚΄λΆ€ μ΅œμ ν™” 기법듀을 ν™œμš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€. λ˜ν•œ, μ˜€λ²„λ‘œλ”© ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ μ‚¬μš©μž μ •μ˜ ν΄λž˜μŠ€λ‚˜ 데이터 νƒ€μž…μ— νŠΉν™”λœ 연산을 μˆ˜ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 이둜 인해 효율적인 μ½”λ“œλ₯Ό μž‘μ„±ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

1-3. ν™•μž₯μ„±

μ—°μ‚°μž μ˜€λ²„λ‘œλ”©μ€ μ½”λ“œμ˜ ν™•μž₯성을 λ†’μ—¬μ€λ‹ˆλ‹€. μ‚¬μš©μžλŠ” 기쑴의 μ—°μ‚°μžλ₯Ό μž¬μ •μ˜ν•¨μœΌλ‘œμ¨ μƒˆλ‘œμš΄ 연산을 μΆ”κ°€ν•˜κ±°λ‚˜ κΈ°μ‘΄ μ—°μ‚°μ˜ λ™μž‘μ„ λ³€κ²½ν•  수 μžˆμŠ΅λ‹ˆλ‹€. μ΄λŠ” μ½”λ“œμ˜ μœ μ§€λ³΄μˆ˜ 및 κ°œμ„ μ„ μš©μ΄ν•˜κ²Œ ν•΄μ€λ‹ˆλ‹€.

1-4. 객체 μ‚¬μš©μ˜ μžμ—°μŠ€λŸ¬μ›€

μ—°μ‚°μž μ˜€λ²„λ‘œλ”©μ„ μ‚¬μš©ν•˜λ©΄ μ‚¬μš©μž μ •μ˜ ν΄λž˜μŠ€λ‚˜ 데이터 νƒ€μž…μ„ 마치 λ‚΄μž₯된 데이터 νƒ€μž…μ²˜λŸΌ μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€. μ΄λŠ” μ‚¬μš©μžμ—κ²Œ 객체 μ‚¬μš©μ˜ μžμ—°μŠ€λŸ¬μ›€κ³Ό 직관성을 μ œκ³΅ν•©λ‹ˆλ‹€.

2. 단점

2-1. 였용의 κ°€λŠ₯μ„±

μ—°μ‚°μž μ˜€λ²„λ‘œλ”©μ„ λ‚¨μš©ν•˜λ©΄ μ½”λ“œλ₯Ό μ΄ν•΄ν•˜κΈ° μ–΄λ €μ›Œμ§ˆ 수 μžˆμŠ΅λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, μ—°μ‚°μžλ₯Ό μš©λ„μ— λ§žμ§€ μ•Šκ²Œ μ˜€λ²„λ‘œλ”©ν•˜λ©΄ μ½”λ“œμ˜ μ˜λ„μ™€ λ‹€λ₯Έ κ²°κ³Όλ₯Ό μ΄ˆλž˜ν•  수 μžˆμŠ΅λ‹ˆλ‹€. λ”°λΌμ„œ μ—°μ‚°μž μ˜€λ²„λ‘œλ”©μ„ μ‚¬μš©ν•  λ•ŒλŠ” μ‹ μ€‘ν•˜κ²Œ μ‚¬μš©ν•΄μ•Ό ν•©λ‹ˆλ‹€.

2-2. ν˜Όλž€μ„±

μ—°μ‚°μž μ˜€λ²„λ‘œλ”©μ„ μ‚¬μš©ν•˜λ©΄ κΈ°μ‘΄ μ—°μ‚°μžμ˜ μ˜λ―Έκ°€ λ³€κ²½λ˜λ―€λ‘œ, κ°œλ°œμžκ°€ κΈ°μ‘΄ μ—°μ‚°μžμ˜ 의미λ₯Ό μ˜€ν•΄ν•  수 μžˆμŠ΅λ‹ˆλ‹€. μ΄λŠ” μ½”λ“œμ˜ 이해λ₯Ό μ–΄λ ΅κ²Œ λ§Œλ“€ 수 μžˆμŠ΅λ‹ˆλ‹€. λ”°λΌμ„œ μ—°μ‚°μž μ˜€λ²„λ‘œλ”©μ„ μ‚¬μš©ν•  λ•ŒλŠ” μ£Όμ„μ΄λ‚˜ λ¬Έμ„œν™”λ₯Ό 톡해 λͺ…ν™•ν•œ μ„€λͺ…을 μ œκ³΅ν•΄μ•Ό ν•©λ‹ˆλ‹€.

2-3. ν•™μŠ΅ λΉ„μš©

μ—°μ‚°μž μ˜€λ²„λ‘œλ”©μ€ C++의 κ³ κΈ‰ κΈ°λŠ₯ 쀑 ν•˜λ‚˜μ΄λ―€λ‘œ, ν•™μŠ΅ λΉ„μš©μ΄ λ°œμƒν•  수 μžˆμŠ΅λ‹ˆλ‹€. μ—°μ‚°μž μ˜€λ²„λ‘œλ”©μ„ μ˜¬λ°”λ₯΄κ²Œ μ‚¬μš©ν•˜κΈ° μœ„ν•΄μ„œλŠ” μ–Έμ–΄μ˜ κΈ°λ³Έ κ°œλ…κ³Ό 문법에 λŒ€ν•œ 이해가 ν•„μš”ν•©λ‹ˆλ‹€. λ”°λΌμ„œ μ—°μ‚°μž μ˜€λ²„λ‘œλ”©μ„ μ‚¬μš©ν•˜λ €λ©΄ ν•™μŠ΅μ— μ‹œκ°„κ³Ό λ…Έλ ₯이 ν•„μš”ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

μ—°μ‚°μž μ˜€λ²„λ‘œλ”©μ€ μ½”λ“œμ˜ 가독성과 νš¨μœ¨μ„±μ„ λ†’μ—¬μ£Όλ©°, 객체 μ‚¬μš©μ˜ μžμ—°μŠ€λŸ¬μ›€κ³Ό ν™•μž₯성을 μ œκ³΅ν•©λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ 였용의 κ°€λŠ₯μ„±κ³Ό ν˜Όλž€μ„±, 그리고 ν•™μŠ΅ λΉ„μš©μ΄ μžˆλŠ” 것이 μ—°μ‚°μž μ˜€λ²„λ‘œλ”©μ˜ λ‹¨μ μž…λ‹ˆλ‹€. λ”°λΌμ„œ μ—°μ‚°μž μ˜€λ²„λ‘œλ”©μ„ μ‚¬μš©ν•  λ•ŒλŠ” 신쀑해야 ν•˜λ©°, μ½”λ“œμ˜ 가독성과 μ΄ν•΄λ„λŠ” 항상 μ΅œμš°μ„  고렀사항이 λ˜μ–΄μ•Ό ν•©λ‹ˆλ‹€.

V. μ—°μ‚°μž μ˜€λ²„λ‘œλ”©μ˜ μ˜ˆμ‹œ 및 ν™œμš© 방법

μ—°μ‚°μž μ˜€λ²„λ‘œλ”©μ€ λ‹€μ–‘ν•œ μƒν™©μ—μ„œ ν™œμš©λ  수 μžˆμŠ΅λ‹ˆλ‹€. λ‹€μŒμ€ μ—°μ‚°μž μ˜€λ²„λ‘œλ”©μ˜ λͺ‡ 가지 μ˜ˆμ‹œμ™€ ν™œμš© 방법에 λŒ€ν•œ μ„€λͺ…μž…λ‹ˆλ‹€.

1. μ‚°μˆ  μ—°μ‚°μžμ˜ μ˜€λ²„λ‘œλ”©

μ‚°μˆ  μ—°μ‚°μž (λ§μ…ˆ, λΊ„μ…ˆ, κ³±μ…ˆ λ“±) λ₯Ό μ˜€λ²„λ‘œλ”©ν•˜μ—¬ μ‚¬μš©μž μ •μ˜ 데이터 νƒ€μž…μ— λ§žλŠ” 연산을 μˆ˜ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, λΆ„μˆ˜λ₯Ό ν‘œν˜„ν•˜λŠ” 클래슀 Fraction이 μžˆλ‹€κ³  κ°€μ •ν•΄λ³΄κ² μŠ΅λ‹ˆλ‹€. μ΄λ•Œ, 두 개의 Fraction 객체λ₯Ό λ”ν•˜λ €λ©΄ + μ—°μ‚°μžλ₯Ό μ˜€λ²„λ‘œλ”©ν•˜μ—¬ 두 λΆ„μˆ˜λ₯Ό λ”ν•œ κ²°κ³Όλ₯Ό λ°˜ν™˜ν•˜λ„λ‘ μ •μ˜ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

class Fraction {
private:
    int numerator;
    int denominator;

public:
    Fraction(int num, int denom) : numerator(num), denominator(denom) {}

    Fraction operator+(const Fraction& other) {
        int resultNum = numerator * other.denominator + denominator * other.numerator;
        int resultDenom = denominator * other.denominator;
        return Fraction(resultNum, resultDenom);
    }
};

μœ„ μ½”λ“œμ—μ„œ operator+ ν•¨μˆ˜λŠ” 두 개의 Fraction 객체λ₯Ό λ°›μ•„μ„œ λ”ν•œ κ²°κ³Όλ₯Ό λ°˜ν™˜ν•©λ‹ˆλ‹€. μ΄λ ‡κ²Œ μ˜€λ²„λ‘œλ”©λœ + μ—°μ‚°μžλ₯Ό μ‚¬μš©ν•˜λ©΄, Fraction 객체듀을 더할 λ•Œ 일반적인 μ‚°μˆ  μ—°μ‚°κ³Ό 같은 λ°©μ‹μœΌλ‘œ μ½”λ“œλ₯Ό μž‘μ„±ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

2. 비ꡐ μ—°μ‚°μžμ˜ μ˜€λ²„λ‘œλ”©

비ꡐ μ—°μ‚°μž (λ“±ν˜Έ, λΆ€λ“±ν˜Έ, 크기 비ꡐ λ“±) λ₯Ό μ˜€λ²„λ‘œλ”©ν•˜μ—¬ κ°μ²΄κ°„μ˜ 비ꡐλ₯Ό μˆ˜ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, μ‚¬μš©μž μ •μ˜ 클래슀인 Pointκ°€ μžˆλ‹€κ³  κ°€μ •ν•΄λ³΄κ² μŠ΅λ‹ˆλ‹€. μ΄λ•Œ, 두 Point 객체의 μœ„μΉ˜λ₯Ό λΉ„κ΅ν•˜κΈ° μœ„ν•΄ == μ—°μ‚°μžλ₯Ό μ˜€λ²„λ‘œλ”©ν•˜μ—¬ μ •μ˜ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

class Point {
private:
    int x;
    int y;

public:
    Point(int xCoord, int yCoord) : x(xCoord), y(yCoord) {}

    bool operator==(const Point& other) {
        return (x == other.x) && (y == other.y);
    }
};

μœ„ μ½”λ“œμ—μ„œ operator== ν•¨μˆ˜λŠ” 두 개의 Point 객체λ₯Ό λ°›μ•„μ„œ μ’Œν‘œκ°€ λ™μΌν•œμ§€λ₯Ό νŒλ³„ν•©λ‹ˆλ‹€. μ΄λ ‡κ²Œ μ˜€λ²„λ‘œλ”©λœ == μ—°μ‚°μžλŠ” λ…Όλ¦¬μ μœΌλ‘œ 객체λ₯Ό λΉ„κ΅ν•˜μ—¬ λ™μΌν•œμ§€λ₯Ό νŒλ³„ν•˜λŠ”λ° μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

3. 슀트림 μ—°μ‚°μžμ˜ μ˜€λ²„λ‘œλ”©

슀트림 μ—°μ‚°μž (μž…μΆœλ ₯ μ—°μ‚°μž) λ₯Ό μ˜€λ²„λ‘œλ”©ν•˜μ—¬ μ‚¬μš©μž μ •μ˜ 객체의 μž…μΆœλ ₯을 μ²˜λ¦¬ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, μ‚¬μš©μž μ •μ˜ 클래슀인 Book이 μžˆλ‹€κ³  κ°€μ •ν•΄λ³΄κ² μŠ΅λ‹ˆλ‹€. μ΄λ•Œ, << μ—°μ‚°μžλ₯Ό μ˜€λ²„λ‘œλ”©ν•˜μ—¬ Book 객체의 정보λ₯Ό 좜λ ₯ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

class Book {
private:
    string title;
    string author;
    int year;

public:
    // μƒλž΅

    friend ostream& operator<<(ostream& os, const Book& book) {
        os << "Title: " << book.title << endl;
        os << "Author: " << book.author << endl;
        os << "Year: " << book.year << endl;
        return os;
    }
};

μœ„ μ½”λ“œμ—μ„œ operator<< ν•¨μˆ˜λŠ” Book 객체의 정보λ₯Ό 좜λ ₯ν•˜κΈ° μœ„ν•΄ μ‚¬μš©λ©λ‹ˆλ‹€. ostream ν΄λž˜μŠ€μ™€ μ—°λ™λ˜μ–΄ Book 객체의 정보λ₯Ό ν‘œμ€€ 좜λ ₯으둜 μ „λ‹¬ν•©λ‹ˆλ‹€. μ΄λ ‡κ²Œ μ˜€λ²„λ‘œλ”©λœ << μ—°μ‚°μžλ₯Ό μ‚¬μš©ν•˜λ©΄, Book 객체의 정보λ₯Ό μ‰½κ²Œ 좜λ ₯ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

μ—°μ‚°μž μ˜€λ²„λ‘œλ”©μ˜ μ˜ˆμ‹œλ‘œλŠ” μ‚°μˆ  μ—°μ‚°μž, 비ꡐ μ—°μ‚°μž, 슀트림 μ—°μ‚°μž 등이 μžˆμŠ΅λ‹ˆλ‹€. μ‚¬μš©μžλŠ” ν•„μš”μ— 따라 μ—°μ‚°μžλ₯Ό μ˜€λ²„λ‘œλ”©ν•˜μ—¬ μ‚¬μš©μž μ •μ˜ ν΄λž˜μŠ€λ‚˜ 데이터 νƒ€μž…μ— 맞게 연산을 μ •μ˜ν•  수 μžˆμŠ΅λ‹ˆλ‹€. μ΄λ ‡κ²Œ μ˜€λ²„λ‘œλ”©λœ μ—°μ‚°μžλŠ” 기쑴의 μ—°μ‚°μžμ™€ λ™μΌν•œ 의미둜 μ‚¬μš©λ  수 있으며, κ°μ²΄λ‚˜ 데이터 νƒ€μž…μ— λŒ€ν•œ μ—°μ‚° μ½”λ“œλ₯Ό λ”μš± κ°„κ²°ν•˜κ³  μ§κ΄€μ μœΌλ‘œ μž‘μ„±ν•  수 있게 ν•΄μ€λ‹ˆλ‹€.

λŒ“κΈ€