κΈ€ μž‘μ„±μž: λ˜₯폴베.
λ°˜μ‘ν˜•

1. μ„€λͺ…


 using ν‚€μ›Œλ“œλŠ” λ‹€μŒκ³Ό 같이 ν™œμš©ν•  수 μžˆλ‹€.

 

1. namespace using μ§€μ‹œμž(Directive)
2. namespace using μ„ μ–Έ(Declaration)
3. νƒ€μž… μ •μ˜
4. 클래슀 κ³„μΈ΅μ—μ„œμ˜ μ‚¬μš©

 

1.1) namespace using μ§€μ‹œμž(Directive)

 λ„€μž„ μŠ€νŽ˜μ΄μŠ€λŠ” λͺ…μΉ­μ˜ μ„ μ–Έ μ˜μ—­μ„ λΆ„λ¦¬ν•΄μ„œ μΆ©λŒμ„ λ°©μ§€ν•œλ‹€. κ·Έλž˜μ„œ λ„€μž„ 슀페이슀 μ•ˆμ— λͺ…칭을 μ„ μ–Έν•˜λ©΄ 이름을 뢙일 λ•Œ μΆ©λŒμ„ κ±±μ •ν•˜μ§€ μ•Šκ³  자유둭게 이름을 뢙일 수 μžˆλ‹€.

 

 κ·ΈλŸ¬λ‚˜ μ΄λ ‡κ²Œ μž‘μ„±λœ λͺ…칭을 μ‚¬μš©ν•˜λ €λ©΄ 맀번 μ†Œμ†μ„ λ°ν˜€μ•Ό ν•˜λ―€λ‘œ 맀우 λ²ˆκ±°λ‘­λ‹€.

λ”°λΌμ„œ using namespace (λ„€μž„ 슀페이슀 이름)을 톡해 맀번 λ„€μž„ 슀페이슀λ₯Ό μƒλž΅ν•˜κ³  λ°”λ‘œ μ‚¬μš©ν•  수 μžˆλ‹€.

#include <iostream>

using namespace std;

namespace MYNS {
    int value;
    double score;
    void func() { cout << "I am func" << endl; }
}

using namespace MYNS;

int main()
{
    value = 3;
    score = 1.2345;
    func();

    return 0;
}
I am func

 

 

1.2) namespace using μ„ μ–Έ(Declaration)

 using μ§€μ‹œμžλŠ” μ§€μ •ν•œ λ„€μž„ 슀페이슀의 λͺ¨λ“  λͺ…칭을 κ°€μ Έμ˜€μ§€λ§Œ using 선언은 ν•˜λ‚˜μ˜ λͺ…μΉ­λ§Œμ„ κ°€μ Έμ˜¨λ‹€.

#include <iostream>

using namespace std;

namespace MYNS {
    int value;
    double score;
    void func() { cout << "I am func" << endl; }
}


int main()
{
    using MYNS::value;

    value = 3;
    MYNS::score = 1.2345;
    MYNS::func();

    return 0;
}
I am func

MYNS::value에 λŒ€ν•œ using 선언이 main ν•¨μˆ˜ 내뢀에 μžˆμœΌλ―€λ‘œ main ν•¨μˆ˜ λ‚΄μ—μ„œλ§Œ μœ νš¨ν•˜λ‹€.

 

1.2.1) using에 μ˜ν•œ 좩돌

#include <iostream>

using namespace std;

namespace MYNS {
    int value;
    double score;
    void func() { cout << "I am func" << endl; }
}

int value;
int main()
{
    using MYNS::value;
    // int value = 3; μ—λŸ¬

    value = 3; // MYNS의 value
    ::value = 2; // μ „μ—­λ³€μˆ˜μ˜ value
    MYNS::score = 1.2345;
    MYNS::func();

    return 0;
}

 μ„Έ 개의 valueκ°€ μ„ μ–Έλ˜μ—ˆλŠ”λ° value에 λŒ€ν•œ using 선언이 main ν•¨μˆ˜ 선두에 있고 MYNS::valueκ°€ main ν•¨μˆ˜μ˜ 지역 μ˜μ—­μ— λ“€μ–΄μ˜¨λ‹€. μ΄λ ‡κ²Œ 되면 valueλΌλŠ” μ΄λ¦„μœΌλ‘œ μ°Έμ‘°ν•  수 μžˆμœΌλ―€λ‘œ 같은 μ΄λ¦„μ˜ 지역 λ³€μˆ˜λŠ” μ„ μ–Έν•  수 μ—†λ‹€.

 

 λ‹¨, 같은 μ΄λ¦„μ˜ μ „μ—­ λ³€μˆ˜κ°€ μžˆλ‹€λ©΄ μ΄λŠ” 별 λ¬Έμ œκ°€ λ˜μ§€ μ•ŠλŠ”λ‹€. :: μ—°μ‚°μžλ‘œ μ „μ—­ λͺ…칭을 μ°Έμ‘°ν•  수 μžˆλŠ” λ³„λ„μ˜ 문법이 제곡되기 λ•Œλ¬Έμ΄λ‹€.

 

#include <iostream>

using namespace std;

namespace MYNS {
    int value;
    double score;
    void func() { cout << "I am func" << endl; }
}

int value;
int main()
{
    using namespace MYNS;
     int value = 3;

    ::value = 2; // μ „μ—­λ³€μˆ˜μ˜ value
    MYNS::value = 1;

    return 0;
}

 using μ§€μ‹œμžλ‘œ μ‚¬μš©ν•œ κ²½μš°λŠ” μ’€ λ‹€λ₯΄λ‹€. μœ„ κ²½μš°λŠ” λ„€μž„ 슀페이슀 μ†Œμ†μ˜ λͺ…μΉ­κ³Ό 같은 μ΄λ¦„μ˜ 지역 λ³€μˆ˜λ₯Ό μ„ μ–Έν•  수 있되, λ„€μž„ 슀페이슀 μ†Œμ†μ˜ λ³€μˆ˜λ₯Ό μ‚¬μš©ν•˜λ €λ©΄ λͺ…칭을 λΆ™μ—¬μ€˜μ•Ό ν•œλ‹€.

 

 

1.3) νƒ€μž… μ •μ˜

template <typename T>
using my_vector = std::vector<T>;

 νƒ€μž… μ •μ˜μ˜ μš©λ„λ‘œ μ‚¬μš©ν•˜λŠ” 경우 μœ„μ™€ 같이 μ‚¬μš© ν•  수 μžˆλ‹€. typedef와 같은 κΈ°λŠ₯인데 차이점이라고 ν•˜λ©΄ 가독성과 typedefμ—μ„œλŠ” 지원 μ•ˆ ν•˜λŠ” ν…œν”Œλ¦Ώμ—μ„œλ„ 적용 κ°€λŠ₯ν•˜λ‹€.

 

 

 

1.4) ν΄λž˜μŠ€ κ³„μΈ΅μ—μ„œμ˜ μ‚¬μš©

#include <iostream>

using namespace std;

class Parent
{
protected:
    int age;
};

class Child : Parent
{
public:
    using Parent::age;
};

int main()
{
    Child c;
    c.age = 5; // μ ‘κ·Ό κ°€λŠ₯

    return 0;
}

 μœ„와 같이 클래슀 κ³„μΈ΅μ—μ„œλ„ using ν‚€μ›Œλ“œλ₯Ό μ‚¬μš©ν•  수 μžˆλ‹€. Parent의 int ageλŠ” μƒμ†ν•˜λŠ” ν΄λž˜μŠ€μ—μ„œλ§Œ μ ‘κ·Όν•  수 μžˆλ‹€.

 

 ν•˜μ§€λ§Œ 이런 외뢀에 λΉ„κ³΅κ°œ 처리된 λ³€μˆ˜λ‚˜ ν•¨μˆ˜λ“€μ„ κ³΅κ°œν•˜κ³  μ‹Άλ‹€λ©΄ using ν‚€μ›Œλ“œλ₯Ό μ‚¬μš©ν•œλ‹€λ©΄ 별 λ‹€λ₯Έ ꡬ문 없이 곡개 μ²˜λ¦¬ν•  수 μžˆλ‹€.

 

 

 

2. 참고 및 좜처


http://www.soen.kr/lecture/ccpp/cpp3/34-2-9.htm
http://www.soen.kr/lecture/ccpp/cpp3/34-1-3.htm
https://unikys.tistory.com/381
λ°˜μ‘ν˜•

'Language > C++' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

[C++] keyword: noexcept  (0) 2020.07.23
[C++11] keyword: constexpr  (0) 2020.07.23
[C++] keyword: friend  (0) 2020.07.23
[C++] keyword: static  (0) 2020.07.23
[C++] keyword: explicit  (0) 2020.07.22