ColonVsDoubleColon
아래는 C++에서 사용되는 콜론(:
)과 범위 해제 연산자(::
)의 용도와, 이들을 Java에서의 대응 개념과 비교하여 정리한 내용입니다.
C++에서의 사용
1. 범위 해제 연산자 (::
)
::
)C++ 용도:
네임스페이스, 클래스 정적 멤버, 전역 변수에 접근할 때 사용합니다.
예를 들어,
std::cout
또는MyClass::value
처럼 사용되어, 해당 이름이 어느 범위(namespace 또는 클래스)에 속하는지 명확히 지정합니다.
C++ 예시:
#include <iostream> using namespace std; namespace MyNamespace { void hello() { cout << "Hello from MyNamespace!" << endl; } } class MyClass { public: static int value; }; int MyClass::value = 42; int value = 100; // 전역 변수 int main() { MyNamespace::hello(); // 네임스페이스 내 함수 호출 cout << "Value: " << MyClass::value << endl; // 클래스 정적 멤버 접근 int value = 50; // 지역 변수 cout << "Local value: " << value << endl; cout << "Global value: " << ::value << endl; // 전역 변수 접근 (앞에 :: 사용) return 0; }
2. 콜론 (:
)
:
)C++ 용도:
멤버 초기화 리스트:
생성자에서 클래스 멤버를 초기화할 때 사용합니다.
예:
Point(int a, int b) : x(a), y(b) { }
레이블 정의:
goto
문과 함께 사용하는 레이블을 정의할 때 사용합니다.
삼항 연산자 구분자:
조건 연산자에서
?
다음의 두 값을 구분합니다.
C++ 예시:
멤버 초기화 리스트:
#include <iostream> using namespace std; class Point { private: int x, y; public: // 생성자: 멤버 초기화 리스트 사용 Point(int a, int b) : x(a), y(b) { } void print() const { cout << "(" << x << ", " << y << ")" << endl; } }; int main() { Point p(3, 4); p.print(); // 출력: (3, 4) return 0; }
레이블과 goto:
#include <iostream> using namespace std; int main() { int count = 0; start: // 레이블 정의 cout << "Count: " << count << endl; if (++count < 3) goto start; // 레이블로 점프 return 0; }
삼항 연산자:
#include <iostream> using namespace std; int main() { int a = 10, b = 20; int max = (a > b) ? a : b; // 조건식의 결과에 따라 값 선택 cout << "Max: " << max << endl; return 0; }
Java와의 비교
1. 범위 해제 연산자 vs. 클래스 멤버 접근
C++ (
::
):::
는 네임스페이스나 클래스의 정적 멤버에 접근할 때 사용합니다.예:
std::cout
,MyClass::value
Java:
Java에서는 클래스의 정적 멤버에 접근할 때 점(.) 연산자를 사용합니다.
예:
System.out.println()
또는Math.PI
비교:
C++의
::
와 Java의.
는 모두 해당 이름의 소속 범위를 지정하여 접근합니다.
2. 콜론 (:
) 사용 비교
:
) 사용 비교C++에서의 콜론:
멤버 초기화 리스트:
생성자에서 멤버를 초기화할 때 사용 (예:
Point(int a, int b) : x(a), y(b) { }
)
레이블 정의:
goto
와 함께 사용하여 점프 위치를 지정
삼항 연산자:
조건 연산자에서 값들을 구분 (Java와 동일)
Java에서의 대응:
Java에는 멤버 초기화 리스트가 없습니다.
대신, 생성자 본문 내에서 멤버를 초기화합니다.
Java에는
goto
문이 존재하지 않으므로 레이블 사용도 하지 않습니다.*삼항 연산자 (
? :
)**는 C++와 동일하게 사용됩니다.
3. 예시 비교
C++ (멤버 초기화 리스트):
class Point { private: int x, y; public: Point(int a, int b) : x(a), y(b) { } };
Java (생성자 내 초기화):
public class Point { private int x, y; public Point(int a, int b) { this.x = a; this.y = b; } }
C++와 Java (정적 멤버 접근):
C++:
class MyClass { public: static int value; }; int MyClass::value = 42; // 접근: MyClass::value
Java:
public class MyClass { public static int value = 42; } // 접근: MyClass.value
종합 정리
C++의
::
(범위 해제 연산자):네임스페이스, 클래스 정적 멤버, 전역 변수 등에 접근할 때 사용합니다.
Java에서는 이 역할을 점(.) 연산자가 수행합니다.
C++의
:
(콜론):생성자 멤버 초기화 리스트, 레이블 정의, 삼항 연산자 구분자로 사용됩니다.
Java에서는 생성자 내 초기화는 직접 할당하며,
goto
가 없고, 삼항 연산자는 동일하게 사용됩니다.
Last updated