C++에서 식별자(identifier)는 변수, 함수, 클래스, 모듈 등 사용자가 정의하는 모든 항목을 구별하기 위해 붙이는 이름입니다. 식별자는 반드시 영문 대문자(A~Z), 소문자(a~z) 또는 밑줄(_)로 시작해야 하며, 그 뒤에는 글자, 밑줄, 숫자(0~9)가 0개 이상 이어질 수 있습니다.단, C++에서는 @, $, % 와 같은 특수 문장 부호를 식별자 내부에 사용할 수 없습니다. 또한 C++은 대소문자를 엄격하게 구분하는 언어이므로, Manpower와 manpower은 서로 전혀 다른 두 개의 식별자로 취급됩니다.식별자
단항 연산자(Unary Operator)란 하나의 피연산자만을 대상으로 작용하여 새로운 값을 만들어내는 연산자를 말합니다. C++에서 사용되는 대표적인 단항 연산자는 다음과 같습니다.C++의 주요 단항 연산자역참조 연산자 (*)포인터 변수에 작용하며, 포인터가 가리키는 주소에 저장된 값에 해당하는 l-value를 반환합니다. 이 과정을 흔히 포인터 역참조(dereferencing)라고 부릅니다.주소 연산자 (&)피연산자의 메모리 주소를 가져오는 연산자입니다. 피연산자는 함수 지정자이거나, 비트 필드(bit-field)가 아니
C++에서 조건문 뒤의 세미콜론, 왜 문제가 될까?C++ 코드를 작성하다 보면 실수로 조건문 바로 뒤에 세미콜론(;)을 붙이는 경우가 있습니다. 예를 들어 다음과 같은 코드가 있다고 가정해 봅시다.while (expression);이 경우 while 루프는 표현식(expression)이 참이든 거짓이든 상관없이 동작합니다. 마찬가지로 아래와 같은 코드에서도,if (expression);if 문에 속한 실행문은 표현식의 참·거짓 여부와 관계없이 항상 실행됩니다. 그렇다면 이런 현상이 발생하는 이유는 무엇일까요?if와 while의 기본
C++ 프로그램을 세미콜론 없이 작성하는 방법은 여러 가지가 있습니다. 다만 이러한 기법은 매우 나쁜 코딩 습관에 해당하며 실제 코드에서는 절대 사용해서는 안 됩니다. 본 글은 순수하게 정보 제공 목적으로 소개하는 내용입니다.if 문을 활용한 세미콜론 생략세미콜론 없이 C++ 프로그램을 작성하는 가장 쉬운 방법은 if 문을 활용하는 것입니다. C++에서 거의 모든 문장은 표현식(expression)으로 취급될 수 있습니다. 따라서 해당 문장을 if 문의 조건 자리에 넣고 빈 중괄호 쌍만 남겨두면, 문장 끝에 세미콜론을 붙이지 않아도
Python for 루프를 while 루프로 변환하는 방법Python의 for 루프는 while 루프와 달리 반복 횟수를 세는 별도의 카운팅 변수가 필요하지 않습니다. for 루프는 range 객체, 리스트, 문자열과 같은 이터러블(iterable)을 직접 순회하기 때문입니다. 따라서 for 루프를 동일하게 동작하는 while 루프로 변환하려면, 이러한 구조적 차이를 고려하여 카운팅 변수를 직접 초기화하고 갱신해 주어야 합니다.1. 변환 대상: 간단한 for 루프다음은 range(5)를 순회하며 0부터 4까지 출력하는 기본적인 fo
C++에서 공백(Whitespace)이란?공백(Whitespace)은 코드의 서식을 지정하기 위해 사용되는 문자들을 가리키는 용어입니다. C++에서 공백은 주로 스페이스(space), 탭(tab), 그리고 경우에 따라서는 줄바꿈(newline)을 의미합니다.C++ 컴파일러는 몇 가지 사소한 예외를 제외하면 일반적으로 공백을 무시합니다. 따라서 공백이 얼마나 많거나 적게 들어가더라도 프로그램의 실행 결과에는 영향을 주지 않습니다.컴파일러가 공백을 무시하는 예예를 들어, 아래의 4줄은 모두 동일한 의미를 갖습니다.cout<<
C++에서 증가(++) 연산자와 감소(--) 연산자는 가장 중요한 단항(unary) 연산자 두 가지입니다. 이 연산자들을 클래스에 대해 오버로딩하면 사용자 정의 타입에서도 기본 타입처럼 자연스럽게 값을 증감시킬 수 있습니다. 다음 예제는 전위(prefix) 방식과 후위(postfix) 방식 모두에 대해 증가(++) 연산자를 오버로딩하는 방법을 보여줍니다. 동일한 방식으로 감소(--) 연산자도 오버로딩할 수 있습니다. 핵심 개념: 전위와 후위를 구분하는 방법 컴파일러는 함수 매개변수의 유무로 두 버전을 구분합니다. 매개변수가 없으면
C++의 operator 키워드는 특정 연산자 기호가 클래스의 인스턴스에 적용될 때 어떤 의미를 갖는지 정의하는 함수를 선언합니다. 이를 통해 하나의 연산자가 여러 가지 의미를 가질 수 있게 되며, 이것을 바로 오버로드(overload)라고 합니다. 컴파일러는 피연산자의 타입을 검사하여 해당 연산자가 지닌 서로 다른 의미를 구분합니다. 단항 연산자(Unary Operator)란? 단항 연산자는 하나의 피연산자에만 작용하는 연산자를 말하며, 대표적인 예는 다음과 같습니다. 증가(++) 및 감소(--) 연산자 단항 빼기(-) 연산자
C++에서 operator 키워드는 클래스의 인스턴스에 적용될 때 특정 연산자 기호가 어떤 의미를 갖는지 정의하는 함수를 선언합니다. 이를 통해 하나의 연산자에 여러 가지 의미를 부여할 수 있으며, 이를 오버로딩(overloading)이라고 합니다. 컴파일러는 피연산자의 타입을 검사하여 연산자의 서로 다른 의미를 구분합니다.단항 연산자란?단항 연산자(unary operator)는 하나의 피연산자만을 대상으로 동작하는 연산자입니다. 대표적인 단항 연산자는 다음과 같습니다.증감 연산자: ++ (증가), -- (감소)단항 마이너스 연산자
C++에서 operator 키워드는 클래스 인스턴스에 특정 연산자 기호가 적용될 때 그 의미를 정의하는 함수를 선언합니다. 이를 통해 하나의 연산자가 여러 가지 의미를 가질 수 있게 되며, 이를 오버로딩(overloading)이라고 부릅니다. 컴파일러는 피연산자의 타입을 검사하여 연산자의 서로 다른 의미를 구분합니다. 단항 연산자란 무엇인가? 단항 연산자(unary operator)는 하나의 피연산자에만 작용하는 연산자입니다. 대표적인 단항 연산자는 다음과 같습니다. 증가(++) 및 감소(--) 연산자 단항 마이너스(-) 연산자
같은 반에 피유시(Piyush)라는 이름을 가진 학생이 두 명 있다고 상상해 보세요. 이 둘을 구분하려면 이름만으로는 부족하고, 반드시 추가 정보가 필요합니다. 사는 동네가 다르다면 지역명을 붙이거나, 부모님의 성함을 함께 언급하는 식으로 말이죠.네임스페이스가 필요한 이유C++ 프로그램에서도 똑같은 상황이 벌어질 수 있습니다. 예를 들어 여러분이 작성한 코드에 xyz()라는 함수가 있는데, 프로젝트에 포함된 다른 라이브러리에도 우연히 같은 이름의 xyz() 함수가 존재한다면 어떻게 될까요? 컴파일러는 코드 안에서 xyz()를 호출했
주석(Comment)은 C++ 코드 안에 포함할 수 있는 설명문입니다. 주석은 소스 코드를 읽는 사람이 코드의 의도와 동작을 쉽게 이해하도록 돕는 중요한 역할을 합니다. 실제로 모든 프로그래밍 언어는 어떤 형태로든 주석 기능을 제공하며, 잘 작성된 주석은 유지보수성과 협업 효율을 크게 높여줍니다. C++는 한 줄 주석(single-line comment)과 여러 줄 주석(multi-line comment), 두 가지 방식을 지원합니다. 주석 내부에 포함된 모든 문자는 컴파일 과정에서 완전히 무시되므로, 프로그램의 실행 결과에는 아무
변수(variable)는 프로그램이 조작할 수 있는 이름이 붙은 저장 공간을 의미합니다. C++에서 모든 변수는 반드시 특정 자료형(type)을 가지며, 이 자료형은 다음 세 가지를 결정합니다.변수가 차지하는 메모리의 크기와 구조해당 메모리에 저장할 수 있는 값의 범위변수에 적용할 수 있는 연산의 종류C++ 변수 선언 방법가장 간단한 변수 선언 예시는 다음과 같습니다.int my_val = 5;위 코드에서 my_val은 int(정수)형 변수이며, 값 5를 저장하고 있습니다. 일반적인 변수 선언 형식은 다음과 같습니다.type var
원시 타입(primitive type)이란 숫자, 문자, 참/거짓 값처럼 매우 단순한 성격의 값을 표현하는 데이터 타입을 말합니다. 원시 타입은 모든 프로그래밍 언어에서 가장 기본적인 빌딩 블록 역할을 하며, 구조체나 클래스 같은 더 복잡한 데이터 타입을 만드는 기반이 됩니다.C++의 주요 기본 데이터 타입C++에서는 다음과 같은 여섯 가지 기본(원시) 데이터 타입을 제공합니다.번호타입설명1bool참(true) 또는 거짓(false) 두 가지 값만 저장하는 불리언 타입입니다.2char일반적으로 1바이트(옥텟) 크기로, 하나의 문자를
C++ 단항 연산자 오버로딩이란? 단항 연산자(unary operator)는 하나의 피연산자만을 대상으로 작동하는 연산자입니다. C++ 컴파일러는 피연산자의 자료형을 검사함으로써 같은 연산자 기호라도 상황에 따라 다른 의미로 해석합니다. C++에서 대표적으로 사용되는 단항 연산자는 다음과 같습니다. 증가(++) 및 감소(--) 연산자 단항 마이너스(-) 연산자 논리 NOT(!) 연산자 단항 연산자는 호출된 객체 자신에 대해 작동하며, 일반적으로 !obj, -obj, ++obj처럼 객체의 왼쪽(전위, prefix)에 위치합니다.
C++ 비트별 XOR(^) 연산자란?비트별 배타적 OR(Bitwise Exclusive OR) 연산자인 ^는 첫 번째 피연산자의 각 비트를 두 번째 피연산자의 대응하는 비트와 하나씩 비교합니다. 두 비트 중 하나가 0이고 다른 하나가 1일 때만 해당 결과 비트가 1로 설정되며, 그 외의 경우(두 비트가 모두 0이거나 모두 1인 경우)에는 결과 비트가 0으로 설정됩니다.비트별 XOR 연산자의 양쪽 피연산자는 반드시 정수 계열 타입(integral type)이어야 합니다. 즉, int, unsigned short, long 같은 정수형
기본형(primitive type), 즉 원시 자료형은 표현할 수 있는 값이 매우 단순한 성격을 지닌 데이터 타입을 말합니다. 숫자, 문자, 참/거짓(truth-value) 같은 값들이 대표적이며, 원시 자료형은 모든 프로그래밍 언어의 가장 근본적인 빌딩 블록 역할을 합니다. 이러한 기본 타입들을 조합하여 구조체(struct), 클래스(class)처럼 더 복잡하고 다양한 데이터 타입을 만들 수 있습니다.C++의 대표적인 원시 자료형C++는 아래와 같은 기본 데이터 타입을 제공합니다. 각 타입의 특성과 용도를 살펴보겠습니다.번호타입설
C++에서 비트 AND 연산자(&)는 첫 번째 피연산자의 각 비트를 두 번째 피연산자의 대응하는 비트와 하나씩 비교하는 이항 연산자입니다. 비교 규칙은 매우 단순합니다.두 비트가 모두 1이면 → 결과 비트는 1그 외의 경우(하나라도 0이면) → 결과 비트는 0즉, 논리 곱(AND)을 비트 단위로 수행한다고 생각하면 됩니다. 참고로 비트 AND 연산자의 양쪽 피연산자는 반드시 정수형(integral type)이어야 하며, float나 double 같은 부동소수점 타입에는 사용할 수 없습니다.비트 AND 진리표ABA &
비트 OR 연산자(|)는 첫 번째 피연산자의 각 비트를 두 번째 피연산자의 대응하는 비트와 하나씩 비교하는 연산자입니다. 비교 결과, 두 비트 중 하나라도 1이면 해당 위치의 결과 비트는 1로 설정되고, 둘 다 0인 경우에만 결과 비트가 0으로 설정됩니다.비트 OR 연산의 기본 규칙비트 OR 연산은 다음과 같은 진리표를 따릅니다.0 | 0 = 00 | 1 = 11 | 0 = 11 | 1 = 1즉, 어느 한쪽이라도 1이면 결과는 항상 1이 됩니다. 이러한 특성 때문에 비트 OR는 특정 비트를 강제로 1로 설정(플래그 설정)할 때 자주
프로그램 주석(comment)은 C++ 코드 안에 포함할 수 있는 설명문으로, 소스 코드를 읽는 사람이 코드의 의도와 동작을 쉽게 이해하도록 돕습니다. C++를 비롯한 거의 모든 프로그래밍 언어는 일정 형태의 주석 기능을 제공합니다.C++는 크게 한 줄 주석과 여러 줄 주석 두 가지 유형을 지원합니다. 주석 내부에 작성된 모든 문자는 컴파일 과정에서 완전히 무시되므로, 프로그램 실행 결과에는 어떠한 영향도 주지 않습니다.1. 한 줄 주석 (Single-line Comment)한 줄 주석은 // 표기법을 사용하여 작성합니다. 주석을