여러 언어를 넘나들며 공부하다 보면 문법이 섞여서 에러가 나는 경우가 많다. 특히 정보처리기사 실기 시험에서는 세 언어의 코드가 모두 출제되기 때문에, 각 언어의 고유한 특징을 명확히 구분해 두는 것이 필수적이다.

가장 대표적인 세 가지 차이점을 비교해 본다.

1. 코드 블록(구역)을 나누는 기준: 중괄호 {} vs 들여쓰기

조건문이나 반복문이 “어디서부터 어디까지인지” 구역을 정하는 방식이 완전히 다르다.

  • Java & C (중괄호파): 무조건 중괄호 { }를 사용해서 구역을 나눈다. 들여쓰기(띄어쓰기)는 사람이 보기 편하려고 하는 것일 뿐, 엉망으로 작성해도 중괄호만 맞으면 에러 없이 돌아간다.
  • Python (들여쓰기파): 중괄호가 아예 없다. 오직 들여쓰기(Indentation) 간격으로만 구역을 인식한다. 띄어쓰기 한 칸만 어긋나도 곧바로 치명적인 컴파일 에러(IndentationError)를 뱉어낸다.
// [Java & C] 중괄호로 구역을 묶음
if (score > 90) {
    System.out.println("합격"); 
    // 들여쓰기가 엉망이어도 에러 안 남
}
# [Python] 들여쓰기(콜론과 공백)로 구역을 묶음
if score > 90:
    print("합격") 
  print("에러발생") # 들여쓰기 줄이 안 맞으면 치명적 오류 💥

2. 배열(Array)의 유연성: 고정 크기 vs 무한 확장

수십 개의 데이터를 담는 바구니인 배열을 다루는 철학도 다르다.

  • Java & C (엄격한 고정형): 배열을 처음 만들 때 크기를 무조건 지정해야 하며, 한 번 정해진 방의 개수는 도중에 늘리거나 줄일 수 없다. 더 큰 방이 필요하면 아예 새로 이사를 가야 한다.
  • Python (자유로운 동적형): 리스트(List)라는 형태로 배열을 다루며, 데이터를 넣으면 넣는 대로 방 크기가 무한히 알아서 늘어난다. (append() 함수 하나면 끝)
// [Java & C] 5칸짜리 배열. 6번째 데이터를 넣으려 하면 프로그램이 터짐
int[] arr = new int[5]; 
arr[0] = 10;
# [Python] 빈 리스트를 만들고 계속 밀어 넣어도 OK
my_list = []
my_list.append(10)
my_list.append(20)

3. 메모리 청소 (Garbage Collection)와 포인터

다 쓴 메모리(데이터 찌꺼기)를 누가 치우느냐의 문제다.

  • C (완전 수동): 개발자가 직접 메모리를 예약(malloc)하고, 다 쓰면 반드시 직접 청소(free)해야 한다. 까먹으면 메모리가 꽉 차서 컴퓨터가 뻗어버리는 메모리 누수(Memory Leak)가 발생한다. 또한, 메모리의 실제 주소를 직접 건드리는 포인터(Pointer)라는 무시무시한 문법이 존재한다.
  • Java & Python (완전 자동): 든든한 청소부인 가비지 컬렉터(GC)가 백그라운드에 상주하며 다 쓴 메모리를 알아서 치워준다. 개발자는 비즈니스 로직(기능 구현)에만 집중하면 된다.

💡 [핵심 요약]

비교 항목 Java Python C
1. 코드 블록 지정 중괄호 { } 들여쓰기 (Space/Tab) 중괄호 { }
2. 기본 배열 크기 고정 (크기 변경 불가) 동적 (무한 확장 가능) 고정 (크기 변경 불가)
3. 다 쓴 메모리 정리 자동 (가비지 컬렉터) 자동 (가비지 컬렉터) 수동 (직접 삭제 필수)