10년 전 C 언어를 공부한 당신을 위한 Python 입문 가이드
"C를 알았던 나, Python은 얼마나 다를까?"
결론부터 말하면: 훨씬 쉽고, 훨씬 빠르고, 훨씬 재밌습니다.
목차
- Python이란 무엇인가?
- C와 Python, 뭐가 다른가?
- 개발 환경 설정
- 기초 문법 — C와 비교하며 배우기
- 자료형과 컬렉션
- 함수
- 파일 입출력
- 클래스와 객체지향 (선택)
- Python만의 강점 — 라이브러리 생태계
- 다음 단계
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 시절의 기억이 생각보다 큰 도움이 될 것입니다.
이 글이 도움이 되셨나요? 궁금한 점은 댓글로 남겨주세요!