2025.05.22 - [프로그래밍] - [PCCE] LV3 파이썬 완전정복: Part 1 PCCE 시험 개요와 LV3 등급 분석
변수와 연산자의 중요성
변수와 자료형, 그리고 연산자는 프로그래밍 언어의 가장 기초적인 요소입니다. 변수는 값을 저장하고 이름을 붙여 관리할 수 있게 하며, 자료형은 그 값의 종류(숫자, 문자열 등)를 결정합니다. 연산자는 이러한 값들을 계산하거나 조작하는 도구입니다. PCCE 시험에서는 변수 선언과 기본 자료형 사용은 물론, 자료형에 따른 연산 결과의 차이, 그리고 연산 우선순위 등의 개념을 제대로 이해하고 있는지를 평가합니다. 예를 들어 앞서 Part 1에서 본 빈칸 채우기 예시도 정수와 문자열 타입 차이에 따른 출력 결과를 묻는 문제였죠. 이번 파트에서는 Python을 기준으로 변수와 자료형을 다루는 방법, 그리고 산술/논리/대입 연산자의 사용법을 자세히 살펴보겠습니다.
프로그래밍을 처음 시작하는 독자라면, 이 부분을 확실히 이해하는 것만으로도 코드의 절반 이상은 숙달했다고 할 수 있습니다. PCCE에서도 자주 출제되는 기본 중의 기본이니 꼼꼼히 챙겨보세요.
변수와 자료형, 그리고 연산자
1. 변수와 대입: 변수(variable)란 값을 저장하는 그릇으로, 프로그래밍에서는 특정 값을 가리키는 이름표라고 생각하면 됩니다. Python에서는 변수 선언 시에 별도의 키워드가 필요 없으며, = 연산자를 사용해 값을 대입(assign)하면 자동으로 선언됩니다. 예를 들면 x = 5라고 쓰면, 정수 5를 담는 변수 x가 생성됩니다. 변수 이름은 문자, 숫자, 밑줄 _의 조합으로 만들 수 있고, 숫자로 시작할 수 없으며 대소문자를 구분합니다.
2. 기본 자료형: Python의 주요 내장 자료형에는 정수(int), 실수(float), 문자열(str), 그리고 불리언(bool) 등이 있습니다.
- 정수는 0, -1, 42와 같은 소수점 없는 숫자이고, 실수는 3.14, -0.5처럼 소수점 있는 수를 말합니다.
- 문자열은 "Hello"나 'PCCE'처럼 문자들의 나열이며, 큰따옴표나 작은따옴표로 감싸서 표현합니다.
- 불리언은 참(True)과 거짓(False) 두 값만 가지는 형이며, 주로 조건식의 결과로 사용됩니다.
Python은 동적 타이핑 언어라서, 변수를 선언할 때 자료형을 명시할 필요는 없지만, 변수에 어떤 형의 값이 들어있는지는 여전히 중요합니다. 다양한 자료형을 사용할 때는 형 변환(type casting) 개념도 필요합니다. 예를 들어, 정수와 문자열은 덧셈 연산을 직접 할 수 없으므로, 정수를 문자열로 변환하거나 (str(5) → "5"), 문자열 숫자를 정수로 변환하는 (int("5") → 5) 처리가 필요합니다.
3. 산술 연산자: 숫자에 대해 사용할 수 있는 기본 산술 연산자는 **+(더하기), -(빼기), *(곱하기), /(나누기)**입니다. 이 중 / 연산자는 Python에서 항상 실수 결과를 반환한다는 점에 유의하세요. 예를 들어 5/2는 2.5 (float)입니다. 정수 몫이 필요하면 정수 나눗셈 연산자인 //를 사용하고 (5//2는 2), 나머지는 % 연산자로 구할 수 있습니다 (5%2는 1). 거듭제곱은 ** 연산자로, 2**3은 8을 의미합니다. Python에서는 연산자 우선순위도 알아두어야 하는데, 곱셈/나눗셈이 덧셈/뺄셈보다 먼저 계산됩니다. 필요하면 괄호 ()를 사용하여 우선순위를 명확히 지정하세요.
4. 비교 및 논리 연산자: 두 값을 비교하는 연산자로는 ==(같다), !=(다르다), <, >, <=, >= 등이 있습니다. 이들은 불리언 결과(True/False)를 반환하여, 주로 조건문이나 반복문의 조건식에서 활용됩니다. 또한 여러 조건을 결합할 때는 논리 연산자 and, or, not을 사용합니다. and는 양쪽 조건이 모두 참일 때만 참, or는 한쪽이라도 참이면 참, not은 참/거짓을 반대로 뒤집습니다. 예를 들어 (x > 0 and x < 10)은 “x가 0보다 크고 10보다 작다”는 복합 조건입니다.
5. 대입 연산자: 앞서 언급한 =는 대입(assignment) 연산자입니다. 왼쪽의 변수에 오른쪽 값을 할당하죠. 이외에도 편의를 위한 복합 대입 연산자가 있습니다. +=, -= 등의 형태인데, 예를 들어 a += 5는 a = a + 5와 동일한 의미로, 현재 a 값에 5를 더해 다시 a에 저장합니다. 마찬가지로 *=나 /= 등도 가능합니다. 이러한 연산자는 값을 업데이트할 때 코드를 줄여주지만, 동작 원리를 정확히 알고 써야 합니다 (특히 a *= 2+3 처럼 복잡하게 쓰지 말고 a *= (2+3)처럼 괄호로 의도를 명확히!).
6. 변수의 사용 범위(Scope): 변수는 정의된 위치에 따라 사용 가능한 영역이 정해집니다. 이를 변수의 **스코프(scope)**라고 합니다. Python에서 함수 내부에서 정의된 변수는 함수 밖에서 접근할 수 없고 (지역 변수), 함수 밖에서 정의된 변수는 함수 내부에서 곧바로 사용할 수 없습니다. (물론 함수 내부에서 전역 변수를 쓰려면 global 키워드를 이용하는 예외가 있지만, 기본적으로는 지역 변수를 사용합니다.) PCCE에서는 함수 스코프까지 깊게 묻지는 않더라도, 예를 들어 반복문 안에서 사용한 변수와 밖에서의 변수 사용 등을 꼼꼼히 살펴야 할 디버깅 문제가 나올 수 있습니다. 가령 이런 코드가 있다고 합시다:
# 코드 예시 |
for i in range(5): pass print(i) |
이 경우 i는 반복문에서 마지막으로 할당된 값(4)을 출력합니다. Python의 for loop 변수 i는 loop 종료 후에도 남아있기 때문입니다. 반면 C언어 같았으면 루프 안에서만 유효하고 밖에서는 사라지죠. 이러한 차이를 알고 있어야 변수 범위 관련 버그를 잡을 수 있습니다.
실습 예제 코드: 변수와 연산자 활용
아래 예제는 다양한 자료형의 변수를 선언하고 연산을 수행하는 Python 코드입니다. 각 줄에 주석으로 설명을 달았습니다. 실제로 코드를 실행하면서, 출력 결과와 주석을 비교해 보세요.
# 코드 예시 |
# 1. 변수 선언과 자료형 확인 a = 5 # 정수형 변수 b = 2.5 # 실수형 변수 c = "Hello" # 문자열 변수 d = True # 불리언 변수 print(type(a), type(b), type(c), type(d)) # 출력: <class 'int'> <class 'float'> <class 'str'> <class 'bool'> # 각 변수의 자료형을 출력합니다. # 2. 산술 연산 x = 7 y = 3 print("x+y =", x+y) # 7+3 = 10 print("x-y =", x-y) # 7-3 = 4 print("x*y =", x*y) # 7*3 = 21 print("x/y =", x/y) # 7/3 = 2.333... (실수 나눗셈) print("x//y =", x//y) # 7//3 = 2 (정수 나눗셈 몫) print("x%y =", x%y) # 7%3 = 1 (나머지) print("x**y =", x**y) # 7**3 = 343 (거듭제곱) # 3. 문자열과 숫자 연산 num = 5 text = "5" # print(num + text) # TypeError: 서로 다른 형식은 덧셈 불가 print(str(num) + text) # "5" + "5" = "55" (정수를 문자열로 변환 후 연결) print(num + int(text)) # 5 + 5 = 10 (문자열을 정수로 변환 후 덧셈) # 4. 비교와 논리 연산 age = 20 is_adult = (age >= 20) print("성인인가?", is_adult) # age가 20 이상이면 True print(age > 0 and age < 100) # True and True -> True (나이는 0보다 크고 100보다 작다) print(age < 10 or age > 18) # False or True -> True (한쪽 조건이라도 만족) print(not (age == 20)) # not True -> False (age == 20의 반대) # 5. 대입과 복합 대입 count = 10 count += 1 # count = count + 1 print("count:", count) # 11 count *= 2 # count = count * 2 print("count:", count) # 22 # 6. 변수 스코프 예시 for i in range(3): val = i * 2 # 반복문 내부에서 정의된 변수 print(val, end=" ") print("\n최종 i:", i) # 반복문 종료 후 i 값 (2까지 돈 후 최종 i=2) # print(val) # 만약 여기서 val 출력 시도하면 NameError (val은 loop 안에서만 유효) |
위 코드를 순서대로 실행해보면 각 연산자의 동작과 결과를 확인할 수 있습니다. 특히 문자열과 숫자의 처리에서 형 변환이 필요함을 보여주는 부분과, //와 % 연산자의 결과, and/or/not의 작동 방식 등을 눈여겨보세요.
몇 가지 핵심 포인트를 짚어보면:
- type() 함수를 사용하면 변수의 자료형을 알 수 있습니다. PCCE에서는 직접 type()을 쓰게 하진 않겠지만, 개발 중에 이를 출력해보는 것은 디버깅에 유용합니다.
- str(num) + text와 num + int(text)의 대비는 자료형에 따른 연산 방식 차이를 보여줍니다. 문자열 간 +는 이어붙이기(문자열 결합)이고, 숫자 간 +는 산술 덧셈입니다. 초보자 분들이 "3" + "10"을 "310"으로 잘 출력해놓고, 정작 "3" + 10을 시도했다가 에러를 맞는 경우가 많습니다. 항상 피연산자의 타입을 확인하세요.
- 비교/논리 연산자의 결과로 나오는 True/False는 곧바로 출력해보는 습관을 들이면 논리를 이해하는 데 도움이 됩니다. 예컨대 age < 10 or age > 18 같은 복합 조건은 머리로만 생각하지 말고 여러 값을 대입해보며 True/False 결과를 확인해보세요.
- 반복문 안팎의 i와 val 예시는 Python에서 loop 변수가 loop 종료 후에도 남아있음을 보여줍니다. 이러한 동작은 언어마다 다르므로 Python의 규칙을 기억하세요. 또한 val처럼 루프 내부에서 선언한 변수는 loop가 끝나도 존재는 하지만, val 이름은 loop가 돌면서 마지막 할당된 값만 남습니다. 코드에서 print(val)을 주석 해제하고 돌리면 val이 마지막 값(4)을 갖고 출력될 것입니다. (이 예제는 조금 난이도 있는 개념일 수 있으므로 이해가 잘 안 되면 넘어가셔도 괜찮습니다. 중요한 건 변수의 유효 범위가 있다는 점이에요.)
PCCE 출제 포인트 분석: 변수/연산자 분야
PCCE 시험에서 변수와 연산자와 관련해 나올 수 있는 포인트를 정리해보겠습니다:
- 자료형에 따른 출력/계산 차이: 앞서 살펴본 것처럼, 동일한 표현식이라도 자료형에 따라 결과가 달라집니다. 시험에서는 “문자열 + 숫자”처럼 에러를 발생시키는 코드를 찾아내는 디버깅 문제나, 숫자를 문자열로 변환해서 출력해야 제대로 나오는 경우 등을 물을 수 있습니다. 실제 기출 1번 문제에서도 숫자 3과 문자열 "3"을 구분해 사용해야 올바른 출력이 나왔습니다.
- 연산 우선순위와 괄호 사용: 단순 계산에서도 우선 계산되어야 할 부분에 괄호를 안 씌우면 오답이 되는 경우가 있습니다. 예를 들어 기출 2번 “피타고라스의 정리” 문제에서는 (c^2 - a^2)를 계산해야 하는데, 처음 틀린 코드에서는 int b_square = c - a;처럼 괄호를 생략한 바람에 의도와 다른 계산이 되어버렸습니다. Python에서는 산술 우선순위가 일반 수학과 같지만, 복잡한 식은 괄호로 의도를 분명히 하는 습관을 들이세요. 특히 거듭제곱과 곱셈/나눗셈의 조합에서는 조심해야 합니다.
- 정수 나눗셈과 실수 나눗셈: PCCE는 초급 시험이라 매우 큰 수의 오차까지 묻진 않겠지만, /와 //의 차이는 이해하고 있어야 합니다. 출력이 정수로 딱 떨어져야 할 때 부동소수점이 섞여 나오면 오답 처리될 수 있습니다. 예를 들어 100만을 70만으로 나누는 상황이면 1000000/700000을 하면 1.42857... 같은 실수값이 나오겠지만, 의도는 1 또는 2와 같은 정수 횟수일 수 있죠. 문제에서 요구하는 형식이 정수라면 //를 사용하는 게 맞습니다.
- 변수 초기화와 값 변경: 디버깅 문제에서 흔히 나오는 실수 중 하나는 변수를 초기화하지 않거나 잘못 초기화해서 생기는 오류입니다. Python에서는 초기화하지 않은 변수에 접근하면 바로 NameError가 나와 알아차리기 쉽지만, 알고리즘적 논리 오류로서 초기값이 잘못 설정된 경우 결과가 엉뚱하게 나올 수 있습니다. 예를 들어 합계를 구할 때 sum = 1로 잘못 시작하거나, 루프 안에서 누적해야 할 변수를 루프마다 새로 0으로 초기화해버리는 실수가 그러합니다. 항상 변수의 초기값을 올바르게 설정하고, 반복문 안에서 변경될 변수라면 loop 전에 한 번만 설정하는지 확인하세요.
- 변수 사용 범위 오류: 앞서 변수 스코프를 언급한 이유는, PCCE 디버깅 문제에서 이런 것이 등장할 수 있기 때문입니다. 예를 들어 함수 안에서 계산한 결과를 함수 밖에서 출력하려 하는데 반환을 안 했다거나, 루프 안에서 만든 리스트를 나와서 쓰려 하거나 하는 경우입니다. 이러한 오류는 사실 코드 실행 자체가 안 되거나(파이썬의 경우) 논리 버그로 이어지므로, 변수가 어디에서 선언되고 어디까지 유효한지 항상 인지해야 합니다.
요약하면, 변수와 연산자 파트에서는 기본에 충실해야 합니다. 단순한 문제일수록 사소한 실수가 치명적일 수 있으니, 부호 하나까지 세심하게 검토하세요.
마무리 요약 및 꿀팁
변수, 자료형, 연산자는 코딩의 알파벳과 같습니다. 이 부분을 정확히 이해하면 뒤에 나올 조건문, 반복문도 한결 쉽게 받아들일 수 있습니다. 이번 내용을 요약하면: “변수에는 자료형이 있고, 자료형에 따라 연산 결과가 달라지므로 항상 올바른 형으로 변환해서 써야 한다”는 것입니다. 또한 Python 문법의 특징 (동적 타이핑, /의 결과는 float, and/or 등의 사용법)을 숙지하세요.
꿀팁:
- 값을 확인하고 싶으면 프린트해보세요! 변수에 어떤 값이 들어있는지, 어떤 자료형인지 헷갈릴 때는 print()로 출력해보는 것이 가장 빠른 디버깅 방법입니다. PCCE 준비 단계에서는 특히 파이썬 셸이나 작은 스크립트를 활용해 실험을 많이 해보길 권장합니다.
- 의미 있는 변수 이름 사용 습관을 들이세요. 단순한 계산에도 val1, val2보다는 width, height처럼 맥락을 담은 이름이 좋습니다. 시험에서는 큰 프로젝트를 코딩하진 않지만, 가독성은 곧 실수 예방과 직결됩니다. 이름만 봐도 이 변수에 어떤 값이 있어야 할지 추측 가능해야 디버깅할 때 헷갈리지 않습니다.
- 연산자 표를 만들어 외워두세요. 더하기, 빼기는 쉬워도 //, %, ** 등은 초보자가 잊기 쉽습니다. 각 연산자의 기능과 우선순위를 정리한 표를 만들어 수시로 복습하면 실전에서 실수가 줄어듭니다.
추천 연습 문제
- [PCCE 기출문제] 1번: 출력 – 간단한 코드 완성으로 문자열과 숫자 출력을 다룹니다. 자료형에 따른 출력 차이를 연습하기 좋습니다.
- [PCCE 기출문제] 2번: 피타고라스의 정리 – 수식 계산과 형 변환이 필요한 문제로, Math.pow와 캐스팅을 사용하는 자바 코드가 기출되었지만 Python으로는 거듭 제곱(**)과 int 변환을 연습해볼 수 있습니다.
- 프로그래머스 Lv0: 숫자 비교하기 – 두 정수를 비교해 같으면 1, 다르면 -1을 반환하는 문제. 단순한 조건이지만 비교 연산자와 반환값 처리를 연습하기 좋습니다. Python에서는 bool을 바로 int로 변환할 수 있다는 것도 알 수 있습니다.
- 프로그래머스 Lv0: 나머지 구하기 – 두 수를 입력받아 나눈 나머지를 출력하는 문제. % 연산자 사용과 입력/출력 형식에 익숙해질 수 있습니다.
2025.05.22 - [프로그래밍] - [PCCE] LV3 파이썬 완전정복: Part 1 PCCE 시험 개요와 LV3 등급 분석
'프로그래밍' 카테고리의 다른 글
[PCCE] LV3 파이썬 완전정복: Part 6 함수 정의와 활용, 표준 라이브러리 (math, random) (0) | 2025.05.25 |
---|---|
[PCCE] LV3 파이썬 완전정복: Part 5 리스트와 2차원 리스트 – 자료구조 입문 (0) | 2025.05.24 |
[PCCE] LV3 파이썬 완전정복: Part 4 반복문 – while, for, 중첩 반복 (0) | 2025.05.24 |
[PCCE] LV3 파이썬 완전정복: Part 3 조건문 – 흐름 제어 기초 (0) | 2025.05.23 |
[PCCE] LV3 파이썬 완전정복: Part 1 PCCE 시험 개요와 LV3 등급 분석 (0) | 2025.05.22 |