10년 전 C 언어를 공부한 당신을 위한 Python 입문 가이드

By | 2026년 5월 12일
Table of Contents

10년 전 C 언어를 공부한 당신을 위한 Python 입문 가이드

"C를 알았던 나, Python은 얼마나 다를까?"
결론부터 말하면: 훨씬 쉽고, 훨씬 빠르고, 훨씬 재밌습니다.


목차

  1. Python이란 무엇인가?
  2. C와 Python, 뭐가 다른가?
  3. 개발 환경 설정
  4. 기초 문법 — C와 비교하며 배우기
  5. 자료형과 컬렉션
  6. 함수
  7. 파일 입출력
  8. 클래스와 객체지향 (선택)
  9. Python만의 강점 — 라이브러리 생태계
  10. 다음 단계

1. Python이란 무엇인가?

Python은 1991년에 등장한 인터프리터 언어입니다. 컴파일 없이 코드를 바로 실행할 수 있고, 문법이 영어 문장처럼 읽히도록 설계되었습니다.

오늘날 Python은 다음 분야에서 압도적으로 사용됩니다:

  • 데이터 분석 / 머신러닝 (pandas, NumPy, TensorFlow)
  • 웹 백엔드 (Django, FastAPI)
  • 자동화 스크립트 (업무 자동화, 크롤링)
  • 과학 연구 (물리, 바이오, 금융공학)

2. C와 Python, 뭐가 다른가?

C를 공부했던 기억을 떠올려 보세요. Python이 어떻게 다른지 한눈에 비교해 봅시다.

항목 C Python
실행 방식 컴파일 후 실행 인터프리터가 바로 실행
변수 선언 타입 명시 필수 (int x = 5;) 타입 자동 추론 (x = 5)
메모리 관리 직접 관리 (malloc, free) 자동 (가비지 컬렉터)
세미콜론 필수 없음
블록 구분 { } 들여쓰기(indentation)
문자열 처리 번거로움 (char[], strlen) 매우 간단
포인터 핵심 개념 없음
속도 매우 빠름 느리지만 생산성이 높음

핵심 마인드셋: C는 "컴퓨터에게 정확히 무엇을 하라"고 지시합니다. Python은 "내가 원하는 게 이거야"라고 말합니다. 컴퓨터가 나머지를 알아서 합니다.


3. 개발 환경 설정

Python 설치

python.org에서 최신 버전(3.x)을 다운로드합니다.

# 설치 확인
python --version
# Python 3.12.x 출력되면 성공

코드 에디터 추천

  • VS Code (추천): 무료, 가볍고 Python 확장 지원 우수
  • PyCharm Community: Python 전용, 기능이 풍부

첫 실행 — 인터랙티브 모드

C에는 없던 기능입니다. 터미널에 python을 입력하면 바로 코드를 쳐볼 수 있습니다.

>>> 2 + 3
5
>>> print("Hello, World!")
Hello, World!
>>> exit()

4. 기초 문법 — C와 비교하며 배우기

4-1. Hello World

// main.c
#include <stdio.h>
int main() {
    printf("Hello, World!\n");
    return 0;
}
# main.py
# python main.py
print("Hello, World!")

헤더 파일도, main() 함수도, 세미콜론도 없습니다. 딱 한 줄입니다.


4-2. 변수 선언

C에서는 타입을 반드시 선언해야 했습니다. Python은 그냥 쓰면 됩니다.

/* C */
int age = 30;
float height = 175.5;
char name[] = "철수";
# Python
age = 30
height = 175.5
name = "철수"

# 타입 확인도 가능
print(type(age))     # <class 'int'>
print(type(height))  # <class 'float'>
print(type(name))    # <class 'str'>

4-3. 조건문 (if/else)

/* C */
if (score >= 90) {
    printf("A등급\n");
} else if (score >= 80) {
    printf("B등급\n");
} else {
    printf("C등급 이하\n");
}
# Python — 중괄호 대신 들여쓰기!
if score >= 90:
    print("A등급")
elif score >= 80:       # 'else if' 대신 'elif'
    print("B등급")
else:
    print("C등급 이하")

⚠️ 들여쓰기가 문법입니다. C에서는 스타일이었지만, Python에서는 들여쓰기가 틀리면 오류가 납니다. 탭(Tab) 또는 스페이스 4칸을 일관되게 사용하세요.


4-4. 반복문 (for / while)

/* C — for 루프 */
for (int i = 0; i < 5; i++) {
    printf("%d\n", i);
}
# Python — for 루프
for i in range(5):      # 0, 1, 2, 3, 4
    print(i)

# range(1, 6) → 1, 2, 3, 4, 5
# range(0, 10, 2) → 0, 2, 4, 6, 8 (2씩 증가)

Python의 for문은 C보다 훨씬 강력합니다. 리스트, 문자열, 파일 등 모든 순회 가능한 객체를 바로 돌릴 수 있습니다.

fruits = ["사과", "바나나", "포도"]
for fruit in fruits:
    print(fruit)

# 문자열도 한 글자씩 순회
for char in "Python":
    print(char)

while문은 C와 거의 같습니다.

count = 0
while count < 3:
    print(count)
    count += 1      # count++는 Python에 없음, +=를 사용

4-5. 입출력

/* C */
int n;
scanf("%d", &n);
printf("입력값: %d\n", n);
# Python — 포인터(&) 없음, 형식 지정자(%d) 없음
n = input("숫자를 입력하세요: ")   # 항상 문자열로 반환됨
n = int(n)                         # 정수로 변환 필요
print(f"입력값: {n}")              # f-string 포맷팅

f-string은 Python 3.6부터 지원되는 강력한 문자열 포맷 방식입니다.

name = "홍길동"
age = 30
print(f"이름: {name}, 나이: {age}살")
# 출력: 이름: 홍길동, 나이: 30살

# 계산식도 넣을 수 있음
print(f"10년 후 나이: {age + 10}살")

5. 자료형과 컬렉션

C에는 배열과 구조체가 있었다면, Python에는 더 풍부한 자료구조가 기본 내장되어 있습니다.

5-1. 리스트 (List) — 배열의 진화형

# 선언 — 크기 지정 불필요, 타입 혼합 가능
numbers = [1, 2, 3, 4, 5]
mixed = [1, "hello", 3.14, True]

# 인덱싱 — C와 동일 (0부터 시작)
print(numbers[0])    # 1
print(numbers[-1])   # 5 (뒤에서 첫 번째!)

# 슬라이싱 — C에는 없던 강력한 기능
print(numbers[1:4])  # [2, 3, 4]
print(numbers[:3])   # [1, 2, 3]
print(numbers[::2])  # [1, 3, 5] (2칸씩 건너뜀)

# 추가/삭제 — 동적 크기 조절 자동
numbers.append(6)    # 끝에 추가
numbers.insert(0, 0) # 0번 위치에 삽입
numbers.remove(3)    # 값 3 삭제
popped = numbers.pop()  # 마지막 요소 제거 & 반환

# 유용한 함수
print(len(numbers))  # 길이
print(sum(numbers))  # 합계
print(max(numbers))  # 최대값

5-2. 딕셔너리 (Dictionary) — C의 구조체와 비슷

C에서 여러 속성을 묶으려면 struct를 사용했죠. Python의 딕셔너리는 키-값 쌍으로 데이터를 저장합니다.

person = {
    "name": "홍길동",
    "age": 30,
    "job": "개발자"
}

# 접근
print(person["name"])        # 홍길동
print(person.get("age"))     # 30 (없으면 None 반환, 안전)

# 추가 / 수정
person["email"] = "hong@email.com"
person["age"] = 31

# 순회
for key, value in person.items():
    print(f"{key}: {value}")

5-3. 튜플 (Tuple) — 수정 불가능한 리스트

point = (3, 5)       # 좌표처럼 변경할 필요 없는 데이터
x, y = point         # 언패킹 — 매우 편리!
print(x, y)          # 3 5

5-4. 집합 (Set) — 중복 없는 자료구조

nums = {1, 2, 3, 2, 1}  # 중복 자동 제거
print(nums)              # {1, 2, 3}

a = {1, 2, 3}
b = {2, 3, 4}
print(a | b)   # 합집합: {1, 2, 3, 4}
print(a & b)   # 교집합: {2, 3}
print(a - b)   # 차집합: {1}

6. 함수

기본 함수 선언

/* C */
int add(int a, int b) {
    return a + b;
}
# Python — 타입 선언 없음
def add(a, b):
    return a + b

result = add(3, 5)  # 8

기본값 매개변수

def greet(name, greeting="안녕하세요"):
    print(f"{greeting}, {name}님!")

greet("철수")           # 안녕하세요, 철수님!
greet("영희", "반가워요")  # 반가워요, 영희님!

여러 값 반환

C에서는 구조체나 포인터를 써야 했지만, Python은 여러 값을 간단히 반환합니다.

def min_max(numbers):
    return min(numbers), max(numbers)

lo, hi = min_max([3, 1, 5, 2, 4])
print(lo, hi)  # 1 5

람다 (익명 함수)

# 간단한 연산은 lambda로 한 줄에
square = lambda x: x ** 2
print(square(5))  # 25

# 정렬 기준 지정에 자주 쓰임
people = [("철수", 30), ("영희", 25), ("민수", 35)]
people.sort(key=lambda p: p[1])  # 나이 기준 정렬

7. 파일 입출력

C의 fopen, fclose를 기억하시나요? Python에서는 with 문을 쓰면 파일을 자동으로 닫아줍니다.

/* C */
FILE *f = fopen("data.txt", "r");
char line[256];
while (fgets(line, sizeof(line), f)) {
    printf("%s", line);
}
fclose(f);
# Python — with 블록 끝나면 자동으로 파일 닫힘
with open("data.txt", "r", encoding="utf-8") as f:
    content = f.read()         # 전체 읽기
    # 또는
    lines = f.readlines()      # 줄 단위 리스트로 읽기
    # 또는
    for line in f:             # 줄 단위 순회
        print(line.strip())

# 쓰기
with open("output.txt", "w", encoding="utf-8") as f:
    f.write("첫 번째 줄\n")
    f.write("두 번째 줄\n")

8. 클래스와 객체지향 (선택)

C에서 struct로 데이터를 묶었다면, Python의 class는 데이터와 함수를 함께 묶습니다.

class Person:
    def __init__(self, name, age):   # 생성자 (C의 초기화 함수)
        self.name = name
        self.age = age

    def introduce(self):
        print(f"저는 {self.name}이고, {self.age}살입니다.")

    def birthday(self):
        self.age += 1
        print(f"생일 축하! 이제 {self.age}살이 되었습니다.")

# 사용
p = Person("홍길동", 30)
p.introduce()   # 저는 홍길동이고, 30살입니다.
p.birthday()    # 생일 축하! 이제 31살이 되었습니다.

객체지향이 낯설다면 처음엔 건너뛰어도 됩니다. 스크립트 작성이나 데이터 분석은 클래스 없이도 충분합니다.


9. Python만의 강점 — 라이브러리 생태계

Python의 진짜 강점은 방대한 라이브러리입니다. C에서 직접 구현해야 했던 것들을 한 줄로 해결합니다.

패키지 설치 — pip

pip install pandas          # 데이터 분석
pip install requests        # HTTP 요청
pip install matplotlib      # 그래프

자주 쓰이는 표준 라이브러리

# os — 파일/디렉터리 조작
import os
files = os.listdir(".")         # 현재 폴더 파일 목록
os.mkdir("새폴더")               # 폴더 생성

# datetime — 날짜/시간
from datetime import datetime
now = datetime.now()
print(now.strftime("%Y-%m-%d %H:%M"))  # 2025-01-15 14:30

# random — 난수
import random
print(random.randint(1, 10))    # 1~10 사이 정수
random.shuffle([1, 2, 3, 4, 5])

# json — JSON 파싱
import json
data = '{"name": "홍길동", "age": 30}'
obj = json.loads(data)          # 문자열 → 딕셔너리
print(obj["name"])              # 홍길동

requests — 웹에서 데이터 가져오기

import requests

response = requests.get("https://api.github.com")
print(response.status_code)    # 200
data = response.json()         # JSON 응답을 딕셔너리로

C에서 이 작업을 직접 구현했다면 수백 줄이 필요했을 것입니다.


10. 다음 단계

추천 학습 경로

기초 문법 완성
    ↓
실습 프로젝트 (아래 중 하나 선택)
    ↓
관련 라이브러리 심화
    ↓
포트폴리오 / 실무 적용

입문용 미니 프로젝트 아이디어

난이도 프로젝트 핵심 기술
가계부 텍스트 파일 관리 파일 I/O, 리스트
⭐⭐ 엑셀 데이터 자동 정리 pandas
⭐⭐ 날씨 정보 가져오기 requests, API
⭐⭐⭐ 웹 크롤러 만들기 requests, BeautifulSoup
⭐⭐⭐ 간단한 REST API 서버 FastAPI

참고 자료

  • 공식 튜토리얼: docs.python.org/ko
  • 점프 투 파이썬: 한국어 무료 온라인 책, 입문자에게 최고
  • Python Tutor: 코드 실행 흐름을 시각화해주는 사이트

마치며

10년 전 C를 공부하셨다면 이미 프로그래밍의 핵심 개념인 변수, 조건문, 반복문, 함수를 알고 계십니다. Python은 그 위에서 "귀찮은 것들"을 대신 처리해주는 언어입니다.

처음엔 포인터도 없고, malloc도 없고, 세미콜론도 없는 것이 어색하게 느껴질 수 있습니다. 하지만 그 덕분에 "무엇을 만들고 싶은가"에만 집중할 수 있습니다.

작은 스크립트 하나부터 시작해 보세요. C 시절의 기억이 생각보다 큰 도움이 될 것입니다.


이 글이 도움이 되셨나요? 궁금한 점은 댓글로 남겨주세요!

답글 남기기