코드의 논리가 아무리 완벽해도, 언어마다 요구하는 사소한 기호나 선언 방식을 틀리면 매정하게 빨간 줄(에러)이 그어진다. 가장 빈번하게 헷갈리는 문법적 차이 3가지를 정리했다.

1. 명령어의 끝: 세미콜론(;)의 유무

명령이 끝났음을 컴퓨터에게 알려주는 마침표 역할이다.

  • Java & C (필수): 하나의 코드가 끝날 때마다 반드시 세미콜론(;)을 찍어야 한다. 빼먹으면 즉시 컴파일 에러가 발생한다.
  • Python (생략): 세미콜론을 쓰지 않는다. 엔터(줄바꿈)를 치는 순간 하나의 명령어가 끝난 것으로 알아서 인식한다.
// [Java & C] 마침표(;)가 없으면 문장이 안 끝난 줄 안다.
int a = 10;
System.out.println(a);
# [Python] 엔터만 치면 끝난다. (세미콜론을 써도 에러는 안 나지만, 파이썬 생태계에선 쓰지 않는 것이 국룰이다)
a = 10
print(a)

2. 함수나 조건문을 여는 방식: 중괄호 {} vs 콜론 :

이전 포스트에서 다룬 ‘코드 블록’을 시작할 때 사용하는 기호다.

  • Java & C: 조건문(if), 반복문(for), 함수 선언 시 항상 괄호 () 뒤에 중괄호 { 를 열어서 시작을 알린다.
  • Python: 중괄호 대신 콜론(:)을 찍고, 다음 줄부터 들여쓰기를 한다. 파이썬에서 :은 “자, 이제부터 진짜 내용이 시작될 거야!”라는 뜻이다.
// [Java] 함수 선언 시 괄호 뒤에 { 를 연다.
public void doSomething() { 
    // 내용
}
# [Python] 함수 선언(def) 시 괄호 뒤에 무조건 : 을 찍어야 한다.
def do_something():
    # 내용

3. 변수 선언: 깐깐한 타입 지정 vs 눈치껏 할당

  • Java & C (정적 타이핑): 변수를 만들 때, 이 바구니에 정수(int)를 담을지, 문자(Stringchar)를 담을지 미리 명시해야 한다. 한 번 정해진 타입은 바꿀 수 없다.
  • Python (동적 타이핑): 타입 따위는 적지 않는다. 그냥 변수 이름에 값을 넣으면, 들어오는 값의 형태를 보고 파이썬이 눈치껏 타입을 결정한다. 중간에 다른 타입의 값을 넣어도 알아서 변신한다.
// [Java & C] 타입을 반드시 명시해야 함
int age = 20; 
String name = "홍길동";
// age = "스무살"; // 💥 에러! int 바구니에 문자열을 넣을 수 없음
# [Python] 값만 넣으면 끝
age = 20 
name = "홍길동"
age = "스무살" # 에러 안 남! int였던 age가 순간적으로 String으로 바뀜