[Python] 파이썬 기본 연산자(+, -, , /) 완벽 정리

 

ChatGPT 생성형 이미지

파이썬에서 가장 먼저 이해해야 할 기본 연산자 +, -, *, /의 개념과 동작 원리를 실제 예제로 단계별로 정리합니다. 계산 결과가 왜 그렇게 나오는지 정확히 설명합니다.


파이썬을 처음 접할 때 가장 먼저 마주치는 요소는 연산자입니다.
연산자는 숫자를 계산하기 위한 가장 기본적인 도구이며, 모든 프로그램의 출발점이라고 볼 수 있습니다.

하지만 많은 경우 +, -, *, /를 이미 알고 있다는 이유로 대충 넘어가게 됩니다.
이 과정에서 “왜 이런 결과가 나오는지”, “언제 문제가 생기는지”, “숫자가 아닌 값과 만나면 어떻게 동작하는지”를 정확히 이해하지 못한 채 다음 단계로 넘어가게 됩니다.

이 글의 목적은 단순히 연산자를 나열하는 것이 아닙니다.
각 연산자가 어떤 규칙으로 작동하는지, 어떤 상황에서 실수가 발생하는지, 어떤 형태로 활용되는지를 하나씩 분해해서 설명하는 데 있습니다.

특히 다음과 같은 부분을 중점적으로 다룹니다.

  • 연산자의 기본 문법 구조

  • 계산 순서와 결과가 달라지는 이유

  • 정수와 실수 계산의 차이

  • 연산자 사용 시 자주 발생하는 오류

이 과정을 통해 연산자를 “외워서 쓰는 도구”가 아니라, “이해하고 제어할 수 있는 도구”로 바꾸는 것이 목표입니다.


파이썬 기본 연산자의 구조 이해

파이썬의 기본 산술 연산자는 다음 네 가지입니다.

  • 더하기 +

  • 빼기 -

  • 곱하기 *

  • 나누기 /

이 연산자들은 두 개의 값(피연산자) 사이에 위치하여 계산을 수행합니다.

결과 = 값1 연산자 값2


예를 들어 다음과 같은 구조입니다.

result = 10 + 5

여기서 중요한 개념은 다음 세 가지입니다.

  1. 연산자는 항상 왼쪽 값과 오른쪽 값을 기준으로 동작합니다.

  2. 계산 결과는 새로운 값으로 생성됩니다.

  3. 기존 값은 자동으로 변경되지 않습니다.

  4. 이 구조를 이해하지 못하면, 변수 계산 과정에서 혼란이 생기기 쉽습니다.



연산 결과의 자료형 변화

파이썬 연산자의 또 다른 핵심은 결과의 자료형입니다.

a = 10 b = 3 c = a / b

이 경우 결과는 3.3333... 이며, 자료형은 실수(float) 입니다.

반면 다음은 다르게 동작합니다.

a = 10 b = 3 c = a * b

결과는 30이며 자료형은 정수(int) 입니다.

즉, 같은 숫자를 사용하더라도 연산자에 따라 결과의 형태가 달라질 수 있습니다.
이 차이를 이해하지 못하면 이후 계산에서 예상치 못한 오류가 발생합니다.


연산자 우선순위

파이썬은 수학과 동일한 연산 우선순위를 따릅니다.

  1. 곱하기 *, 나누기 /

  2. 더하기 +, 빼기 -

예제를 보겠습니다.

result = 10 + 5 * 2

이 코드는 다음 순서로 계산됩니다.

  1. 5 * 2 = 10

  2. 10 + 10 = 20

만약 계산 순서를 바꾸고 싶다면 괄호를 사용해야 합니다.

result = (10 + 5) * 2

이 경우 결과는 30이 됩니다.


더하기 연산자 + (직접 입력 + 중간값 디버깅)

  • a + b가 왜 합이 되는지

  • 계산이 어디서 일어나고, 어디에 저장되는지

  • 같은 변수로 다시 계산하면 어떤 흐름이 되는지






왜 이렇게 작동할까요?

  • result = a + b에서 a + b가 먼저 계산됩니다.

  • 계산 결과(여기서는 10)가 만들어지고, 그 다음에 result저장됩니다.

  • ab는 “읽기만” 했기 때문에 값이 바뀌지 않습니다.

직접 디버깅 체크 포인트

  • ab가 바뀌려면, 이런 형태가 있어야 합니다. a = a + b

  • 이때는 a + b를 계산해서 다시 a에 넣기 때문에 a가 바뀝니다.


예제 2. 빼기 연산자 - (값의 “방향” 규칙 확인 + 음수 디버깅)

  • total - used가 어떤 규칙을 따르는지

  • 음수가 나오는 상황이 “오류”가 아니라 “규칙”임을 확인

  • 값을 바꾸면서 결과가 어떻게 움직이는지 확인

코드

# 1) 직접 값 입력 total = 10 used = 4 # 2) 디버깅: 현재 값 확인 print("total =", total) print("used =", used) # 3) 계산 remain = total - used # 4) 디버깅: 결과 확인 print("remain =", remain) # 5) 음수 테스트(used가 더 클 때) used = 14 print("\n[값 변경 후]") print("total =", total) print("used =", used) remain = total - used print("remain =", remain)






왜 이렇게 작동할까요?

  • 빼기는 “차감”이 아니라 더 정확히 말하면 두 값의 차이를 구합니다.

  • 규칙은 단순합니다: 왼쪽 값에서 오른쪽 값을 뺍니다.

  • 따라서 10 - 14-4가 됩니다.

  • 음수는 “계산 불가”가 아니라 “결과가 그 방향으로 갔다”는 뜻입니다.

직접 디버깅 체크 포인트

  • “남은 값(remain)” 같은 변수는 기준이 무엇인지가 항상 중요합니다.

    • 기준이 바뀌면 같은 -인데도 의미가 달라지기 때문입니다.


예제 3. 곱하기 연산자 * (반복의 규칙 + 단계별 누적 디버깅)

  • 곱셈이 왜 “반복된 더하기” 느낌으로 이해될 수 있는지

  • 중간 과정이 궁금할 때 어떻게 디버깅하는지

  • 실제로 값이 누적되는 흐름 확인

코드 (곱셈 기본)

price = 1200 count = 5 print("price =", price) print("count =", count) total_price = price * count print("total_price =", total_price)

코드 (반복 누적 디버깅: 곱셈이 어떤 느낌인지 확인)

price = 1200 count = 5 sum_value = 0 print("초기 sum_value =", sum_value) # 곱셈을 '반복 덧셈'처럼 확인해보기 sum_value = sum_value + price print("1회 누적:", sum_value) sum_value = sum_value + price print("2회 누적:", sum_value) sum_value = sum_value + price print("3회 누적:", sum_value) sum_value = sum_value + price print("4회 누적:", sum_value) sum_value = sum_value + price print("5회 누적:", sum_value) print("\n곱셈 결과(price * count) =", price * count)




왜 이렇게 작동할까요?

  • 파이썬의 *는 두 수를 곱해서 새로운 값을 만들어냅니다.
  • 곱셈의 의미를 “반복된 합산” 관점으로 보면, 왜 커지는지가 직관적으로 보입니다.
  • 위 디버깅은 “곱셈이 내부적으로 정말 저렇게 동작한다”는 뜻은 아닙니다.
  • 다만 “곱의 의미”를 흐름으로 이해하는 데 도움을 줍니다.

직접 디버깅 체크 포인트

  • pricecount를 바꿔보면 결과가 즉시 달라집니다.
  • 특히 count를 0으로 바꾸면 왜 결과가 0인지도 바로 납득됩니다.


  • 파이썬에서 + 연산을 할 때 계산은 언제 이루어집니까?
    • 파이썬에서 + 연산은 대입 연산자 =보다 먼저 수행됩니다. 즉, 항상 오른쪽에 있는 a + b가 먼저 계산됩니다.
    • 그 계산 결과가 하나의 값으로 만들어집니다. 이후 그 값이 왼쪽 변수에 저장됩니다.
    • 이 순서를 이해하지 못하면 변수 값이 왜 바뀌는지 헷갈리게 됩니다.
    • print()는 계산을 하지 않고 현재 값을 보여주기만 합니다. 따라서 print(a + b)result = a + b는 역할이 다릅니다.
    • 연산자와 대입 연산자는 분리해서 생각해야 합니다.
    • 계산과 저장은 동시에 일어나는 것처럼 보이지만 실제로는 단계가 나뉩니다.
    • 이 규칙은 모든 산술 연산자에 공통으로 적용됩니다.
  • a = a + b에서 a의 값이 바뀌는 이유는 무엇입니까?
    • 이 문장은 두 단계로 나누어 생각해야 합니다. 먼저 오른쪽의 a + b가 계산됩니다.
    • 이때 사용되는 a는 “기존의 a 값”입니다. 계산 결과가 만들어진 후, 그 결과가 다시 a에 저장됩니다.
    • 즉, a는 계산 재료로 한 번 쓰이고, 결과 저장소로 한 번 더 쓰입니다.
    • 이 때문에 a의 값이 바뀌는 것입니다. 연산자 + 자체가 값을 바꾸는 것은 아닙니다.
    • 값을 바꾸는 결정적인 역할은 =입니다.
    • 이 구조를 이해하면 누적 계산이 왜 가능한지 명확해집니다.
    • 같은 변수를 양쪽에 쓰는 것은 규칙 위반이 아닙니다.
  • 빼기 연산에서 음수가 나오는 것은 문제가 아닙니까?
    • 음수 결과는 계산 오류가 아니라 정상적인 결과입니다.
    • 빼기 연산은 “남은 양”이 아니라 “차이”를 계산합니다. 왼쪽 값에서 오른쪽 값을 단순히 뺍니다.
    • 오른쪽 값이 더 크면 결과는 음수가 됩니다. 이것은 파이썬의 예외 상황이 아닙니다.
    • 수학적 규칙 그대로 적용된 결과입니다.
    • 음수는 방향이나 상태를 표현하는 데 사용될 수 있습니다.
    • 따라서 음수가 나왔다는 이유만으로 코드를 의심할 필요는 없습니다.
    • 중요한 것은 기준이 되는 값이 무엇인지입니다.
    • 기준을 잘못 잡으면 결과 해석이 어려워집니다.
  • 곱하기 연산자는 어떤 규칙으로 결과를 만듭니까?
    • 곱하기 연산자는 두 값을 곱해 하나의 새로운 값을 만듭니다.
    • 정수와 정수를 곱하면 정수가 나옵니다. 실수가 포함되면 결과는 실수가 됩니다.
    • 곱셈은 “값의 크기를 늘리는 연산”으로 자주 사용됩니다.
    • 반복되는 양을 한 번에 계산할 때 유용합니다. 내부 동작은 숨겨져 있지만 결과는 항상 결정적입니다.
    • 곱셈은 덧셈보다 우선순위가 높습니다. 이 때문에 계산 순서에서 먼저 실행됩니다.
    • 이 규칙을 모르면 예상과 다른 결과가 나올 수 있습니다. 괄호를 사용하면 계산 흐름을 명확히 제어할 수 있습니다.
  • / 연산자는 항상 실수 결과를 반환합니까?
    • 파이썬의 /는 정확한 나눗셈을 목표로 설계되었습니다.
    • 몫만 계산하지 않고 실제 값을 표현합니다. 따라서 소수점이 생기면 그대로 유지됩니다.
    • 심지어 나누어떨어지는 경우에도 실수 형태로 나올 수 있습니다. 이것은 오류가 아니라 언어의 설계 규칙입니다.
    • 정수 계산과 나눗셈을 구분하기 위한 선택입니다.
    • 실수 결과를 기본으로 하면 계산 손실을 줄일 수 있습니다.
    • 자료형 변화는 자동으로 일어납니다. 이 점을 모르면 자료형 오류로 오해하기 쉽습니다.
    • 나눗셈 후에는 결과의 자료형을 항상 확인하는 습관이 필요합니다.
  • 연산 우선순위는 왜 중요한가요?
    • 연산 우선순위는 계산 순서를 결정합니다. 곱하기와 나누기는 더하기와 빼기보다 먼저 계산됩니다.
    • 이 규칙은 수학과 동일합니다. 파이썬은 이 규칙을 그대로 따릅니다.
    • 우선순위를 모르고 코드를 작성하면 결과를 예측하기 어렵습니다.
    • 같은 수식이라도 결과가 달라질 수 있습니다. 괄호는 우선순위를 강제로 바꾸는 도구입니다.
    • 괄호를 사용하면 코드의 의도가 분명해집니다. 읽는 사람도 계산 흐름을 쉽게 이해할 수 있습니다.
    • 실수 방지를 위해 복잡한 계산에는 괄호를 쓰는 것이 좋습니다.
  • print()는 연산자와 어떤 관계가 있습니까?
    • print()는 연산을 수행하지 않습니다. 이미 계산된 값을 화면에 보여주는 역할만 합니다.
    • print(a + b)는 계산 후 즉시 출력하는 형태입니다.
    • result = a + b는 계산 결과를 저장하는 형태입니다.
    • 출력과 저장은 완전히 다른 개념입니다. 디버깅에서는 print가 매우 중요한 도구입니다.
    • 중간 값을 확인할 때 사용합니다. 연산 결과가 예상과 다를 때 원인을 찾는 데 도움을 줍니다.
    • print를 많이 쓰는 것은 잘못이 아닙니다. 오히려 계산 흐름을 이해하는 데 필수적입니다.
  • 왜 계산 전에 변수 값을 출력하는 것이 중요한가요?
    • 계산 결과는 입력값에 따라 결정됩니다. 입력값이 잘못되면 결과도 당연히 잘못됩니다.
    • 계산 전 출력은 입력 상태를 확인하는 과정입니다. 이 과정이 없으면 원인 추적이 어렵습니다.
    • 특히 값이 여러 번 바뀌는 코드에서 중요합니다. 이전 계산의 영향이 남아 있을 수 있습니다.
    • 초기 상태를 확인하면 문제 범위를 줄일 수 있습니다. 디버깅의 시작은 항상 입력 확인입니다.
    • 이 습관은 복잡한 코드에서도 그대로 적용됩니다. 작은 코드일수록 더 철저히 확인하는 것이 좋습니다.
  • 계산 결과를 다시 사용하는 패턴은 왜 자주 쓰이나요?
    • 현실적인 계산은 대부분 누적 구조를 가집니다. 이전 결과 위에 새로운 계산을 더합니다.
    • 이때 같은 변수를 다시 사용하게 됩니다. 이 구조는 매우 자연스럽습니다.
    • 파이썬은 이를 명확한 규칙으로 지원합니다. 오른쪽 계산 후 왼쪽에 저장하는 방식입니다.
    • 이 흐름을 이해하면 상태 변화가 눈에 보입니다. 누적 계산에서 오류가 나면 바로 확인할 수 있습니다.
    • 이 패턴은 반복문과 함께 자주 사용됩니다. 기본 연산자를 이해하지 못하면 이 구조도 이해하기 어렵습니다.
  • 연산 결과의 자료형은 왜 확인해야 합니까?
    • 자료형은 이후 연산에 영향을 줍니다. 정수와 실수는 다르게 동작합니다.
    • 특히 나눗셈 이후에는 자료형이 바뀔 수 있습니다. 자료형을 모르고 연산을 이어가면 오류가 생깁니다.
    • type()은 이를 확인하는 가장 쉬운 방법입니다. 결과가 이상할 때 가장 먼저 확인해야 합니다.
    • 자료형 변화는 자동으로 일어납니다. 이 자동 변환을 이해해야 예측이 가능합니다.
    • 계산 로직이 복잡해질수록 중요해집니다. 자료형 확인은 디버깅의 기본입니다.
  • 같은 연산자를 써도 결과가 달라지는 이유는 무엇입니까?
    • 연산자는 값만 보고 계산합니다. 값이 다르면 결과도 달라집니다.
    • 자료형이 달라도 결과가 달라집니다. 연산 순서가 달라도 결과가 달라집니다.
    • 이 네 가지가 가장 큰 이유입니다. 연산자 자체는 항상 같은 규칙을 따릅니다.
    • 문제는 연산자가 아니라 주변 조건입니다. 따라서 연산자 오작동은 거의 없습니다.
    • 값과 흐름을 먼저 의심해야 합니다. 이 관점이 디버깅을 단순하게 만듭니다.
  • 계산 흐름을 글로 설명할 수 있어야 하는 이유는 무엇입니까?
    • 글로 설명할 수 있다는 것은 이해했다는 뜻입니다. 코드만 보고 이해했다고 착각하기 쉽습니다.
    • 하지만 말로 풀어보면 빈틈이 드러납니다. 연산 순서를 설명할 수 있어야 합니다.
    • 왜 그 결과가 나왔는지도 설명할 수 있어야 합니다. 이 과정에서 이해가 정리됩니다.
    • 설명이 되면 수정도 쉬워집니다. 문제 발생 시 원인을 빠르게 찾을 수 있습니다.
    • 연산자는 단순하지만 흐름은 중요합니다. 설명 가능한 코드는 안정적인 코드입니다.
  • 디버깅에서 가장 흔한 실수는 무엇입니까?
    • 결과만 보고 원인을 추측하는 것입니다. 입력값을 확인하지 않는 경우가 많습니다.
    • 중간 과정을 생략하는 것도 문제입니다. 한 번에 많은 코드를 수정하려고 합니다.
    • 이러면 문제가 더 커집니다. print를 아끼는 것도 흔한 실수입니다.
    • 자료형을 확인하지 않는 경우도 많습니다. 연산자보다 변수를 의심해야 합니다.
    • 작게 쪼개서 확인하는 습관이 필요합니다. 디버깅은 추측이 아니라 확인의 과정입니다.
  • 왜 간단한 연산자부터 철저히 이해해야 합니까?
    • 모든 복잡한 로직은 단순한 연산의 조합입니다. 기본이 흔들리면 전체가 흔들립니다.
    • 연산자는 가장 많이 쓰이는 요소입니다. 실수가 반복되면 큰 오류로 이어집니다.
    • 기본 연산을 이해하면 다른 문법도 쉬워집니다. 조건문과 반복문도 연산 위에서 동작합니다.
    • 계산 흐름을 이해하면 코드 해석이 빨라집니다. 문제 해결 속도도 빨라집니다.
    • 기본은 시간이 지나도 변하지 않습니다. 그래서 가장 먼저 확실히 다져야 합니다.
  • 연산자와 변수 중 무엇이 더 중요합니까?
    • 둘은 분리할 수 없습니다. 연산자는 값을 만드는 역할을 합니다.
    • 변수는 값을 저장하는 역할을 합니다. 연산자만 있으면 결과를 남길 수 없습니다.
    • 변수만 있으면 계산이 되지 않습니다. 하지만 오류는 대부분 변수 사용에서 발생합니다.
    • 연산 규칙은 고정되어 있기 때문입니다. 따라서 변수 흐름을 더 주의 깊게 봐야 합니다.
    • 연산자는 규칙, 변수는 상태입니다. 상태 관리가 계산의 핵심입니다.
  • 같은 코드인데 실행할 때마다 결과가 달라질 수 있나요?
    • 기본 연산자만 사용한다면 거의 없습니다. 같은 입력이면 같은 결과가 나옵니다.
    • 이것이 결정적 계산입니다. 결과가 달라진다면 입력이 달라졌을 가능성이 큽니다.
    • 또는 이전 코드의 영향이 남아 있을 수 있습니다. 변수 초기화가 안 된 경우도 원인입니다.
    • 연산자는 랜덤하게 동작하지 않습니다. 결과 변화는 항상 이유가 있습니다.
    • 그 이유를 찾는 것이 디버깅입니다. 입력부터 다시 확인해야 합니다.
  • 계산 중간에 print를 많이 쓰면 성능이 나빠지나요?
    • 학습 단계에서는 전혀 문제가 되지 않습니다. 오히려 권장되는 방식입니다.
    • 중간 과정을 눈으로 확인하는 것이 중요합니다. 성능 문제는 대규모 처리에서 고려합니다.
    • 기본 연산 학습과는 관계가 없습니다. print는 이해를 돕는 도구입니다. 이해가 끝나면 제거하면 됩니다.
    • 처음부터 줄이려고 할 필요는 없습니다. 명확함이 우선입니다.
    • 디버깅 단계에서는 적극적으로 사용해야 합니다.
  • 왜 계산 결과를 변수에 저장하는 것이 중요한가요?
    • 저장하지 않으면 결과는 사라집니다. 다음 계산에 사용할 수 없습니다.
    • 코드는 위에서 아래로 실행됩니다. 이전 결과를 기억하려면 변수가 필요합니다.
    • 변수는 계산의 기록입니다. 연산자는 순간적인 동작입니다.
    • 둘의 역할을 구분해야 합니다. 저장이 있어야 흐름이 생깁니다.
    • 흐름이 있어야 로직이 됩니다. 그래서 대입 연산자는 매우 중요합니다.
  • 연산자 학습에서 가장 중요한 태도는 무엇입니까?
    • 결과를 외우지 않는 것입니다. 항상 “왜”를 먼저 생각해야 합니다.
    • 코드를 직접 바꿔보는 태도가 중요합니다. 예측하고 실행해보는 습관이 필요합니다.
    • 틀린 결과를 두려워할 필요는 없습니다. 틀린 결과가 가장 좋은 힌트입니다.
    • 하나씩 확인하는 인내가 필요합니다. 연산자는 단순하지만 깊이가 있습니다.
    • 서두르지 않는 것이 중요합니다. 이 태도가 이후 모든 학습에 영향을 줍니다.
  • 기본 연산자를 제대로 이해했다는 기준은 무엇입니까?
    • 코드를 보지 않고도 결과를 예측할 수 있어야 합니다. 왜 그런 결과가 나오는지 말로 설명할 수 있어야 합니다.
    • 연산 순서를 정확히 설명할 수 있어야 합니다. 자료형 변화를 예상할 수 있어야 합니다.
    • 값을 바꿨을 때 결과 변화를 예측할 수 있어야 합니다. 에러가 나면 원인을 좁혀갈 수 있어야 합니다.
    • print와 type을 적절히 사용할 수 있어야 합니다. 연산자와 대입을 구분해서 설명할 수 있어야 합니다.
    • 이 기준을 만족하면 기본기는 충분합니다. 그 다음 단계로 넘어갈 준비가 된 것입니다.

이 블로그의 인기 게시물

[Notion] 노션에서 페이지 간 링크 연결하는 방법 총정리

[Notion] 노션 기본 템플릿 5가지 소개와 활용 팁

[Notion] 노션 문서 PDF로 저장하는 방법