Learning
When: 1학년 11월 13일
Understanding:
간단 설명: C++에서는 iostream이라는 표준 헤더 파일의 cin이라는 객체에 >> 라는 연산자 오버로딩으로 만들어진 특별한 << 연산자를 사용하여 입력받고, cout이라는 객체에 << 라는 연산자 오버로딩된 연산자를 사용하여 출력할 수 있습니다.
- cin: 입력은 iostream의 cin의 객체를 사용하여 하는데,
Standard Library의 약자인 std라는 네임스페이스 안에 있기 때문에
std::cin >> input; 이렇게 써야 합니다. 맨 처음 것은 방금 설명했고, >>는 원래 시프트 연산자가 맞지만,
오버로딩을 통해 메서드를 같은 이름에 여러 기능처럼 쓸 수 있듯, 연산자도 오버로딩해서
다양하게 사용할 수 있습니다. 쉽게 이해하기 위해선 cin이라는 객체와 input이라는 함수가 연산된다고
생각하지 말고, >>이라는 메서드의 첫 번째 인수로 cin 객체가, 두 번째 인수로 input 변수가 참조자 형태로
사용된다고 생각하시면 됩니다. 그리고 그 >> 메서드에서 입력받고, 입력을 변수의 타입에 맞게 형변환 한 후,
변수에 할당합니다. 다시 cin을 반환하는데, cin을 반환하는 이유는 연산을 한번 하고 끝내는 것이 아닌,
끝난 연산의 결과에서 또다시 연산할 수 있게 만드는 메서드 체이닝을 위해서입니다. - cout: 출력도 입력과 아주 유사합니다. 차이점은 cin이 아닌 cout이라는 것과 연산자가 <<이라는 것이고,
또 하나는 맨 마지막에 endl까지 붙여줘야 한다는 것입니다. 당연히 입력이 변수에 값을 할당하는 것이라면
출력은 콘솔에 출력하는 것이고, cin과 마찬가지고 std::cout << "Hello World!" << std::endl;
이렇게 std::를 붙여서 cout 객체의 네임스페이스를 명시해 주어야 합니다. 이번에도 << 메서드에
인수로 cout과 "Hello World!"를 2개 넣고, 그 메서드의 구현부에서 "Hello World!"라는 문자열을
콘솔에 출력하고 메서드 체이닝으로 다시 std::cout을 반환합니다. 여기선 설명했던 메서드 체이닝을
왜 썼는지 확실히 알 수 있는데, std::cout << "Hello World!"를 <<라는 메서드의 호출이라고 생각하고
다시 cout 객체가 반환된다면 뒤에 있는 std::endl;은 std::cout << std::endl;와 같이
다시 <<라는 메서드의 첫 번째 인수를 cout 객체, 오른쪽을 endl 객체라고 생각하시면
연속으로 << 연산자를 2번 쓰는 게 어떻게 가능한 건지 알 수 있습니다. 그런데 왜 std::endl을 써야 할까요?
그 이유는 2가지가 있는데 하나는 줄 바꿈이고 하나는 flush라는 작업을 하기 위해서입니다.
flush는 모아두었던 데이터들을 한 번에 출력하는 작업인데, 사실 콘솔에서는 자동으로 해주기 때문에
굳이 필요하지 않을 수도 있지만 줄 바꿈과 가독성을 위해 꼭 추가해 주는 것이 좋습니다.
Result: 엄청 극초반에 배운 내용인데 깊게 파면 끝도 없을 것 같아 조금 겉핥기식으로 공부했기 때문에 나중에 개념이 더 쌓이면 다시 공부해 볼 것 같습니다.
'C++' 카테고리의 다른 글
| [C++] 포인터, delete (0) | 2025.12.01 |
|---|---|
| [C++] signed, unsigned 키워드, 2의 보수 (0) | 2025.11.13 |
| [C++] class와 struct (C# 하던 사람 관점) (0) | 2025.11.10 |
| [C++] 전처리 지시문(Preprocessor directives) (0) | 2025.11.09 |
| [C++] 빌드 (Build) (0) | 2025.11.08 |