1.3 프로그래밍 언어의 호환성

1. "개발 환경 설정", 그리고 개발자
A. "개발 환경 설정"을 이루는 13개 분야
: S/W 개발에 필요한 체크사항들
- 프로그래밍 언어/ 런타임(실행)
- 패키지 관리
- 가상환경
- IDE/에디터
- 빌드/실행 환경
- 프로젝트 구조
- Git 버전 관리
- 테스트·품질 관리
- 배포 환경
- 환경 변수·보안
- OS 설정
- DB·네트워크 환경
- 문서화/협업
B. 사용자 관점과 개발자 관점
: 환경설정의 어려움


2. 프로그래밍 언어 버전 정책과 호환성 (C, C++, C#, Java)
A. 프로그래밍 언어는 일반적으로 매우 강한 하위 호환성을 가진다.
- C/C++
: 컴파일러/표준 라이브러리 변화는 크지만, 기존 코드는 대체로 컴파일하면 잘 돌아감 - C#/Java
: 강력한 하위 호환성. 과거 코드 대부분 그대로 실행됨
B. 예시
B.1 C / C++
// C99
#include <stdio.h>
int main() {
int x = 10;
printf("%d\n", x);
}
C99 코드는 C11 / C17에서도 새 C++ 표준에서도 대부분 그대로 컴파일, 실행 가능 99% 그대로 동작
컴파일러 옵션만 필요한 경우도 있지만, 문법 자체는 거의 그대로 유지되어 호환성이 매우 강하다.
B.2 C#
// C# 2.0
using System;
class Program {
static int Add(int a, int b) {
return a + b;
}
static void Main() {
Console.WriteLine(Add(3, 5));
}
}
C# 7, 8, 10, 12에서도 그대로 컴파일됨, CLR(.NET 런타임)이 과거 버전 코드를 거의 영구적으로 유지 지원.
B.3 Java
// Java 8 (2014)
public class Main {
static int add(int a, int b) {
return a + b;
}
public static void main(String[] args) {
System.out.println(add(3, 5));
}
}
Java 17, Java 21에서도 그대로 실행됨, Java는 20년 전 코드도 JVM에서 그대로 돌아가는 것을 목표로 함
3. 프로그래밍 언어 버전 정책과 호환성 (Python)
A. Python
A.1 Python은 위 언어들과 달리, 버전 별로 문법/표준 라이브러리/동작 방식이 바뀌면 코드가 실제로 안 돌아갈 수 있음.
호환성이 없는, 버전별 생태계가 분리됨. 한두가지 함수 동작이 같다고 해서 호환성이라고 할 수 없음.
C, C++, Java, C#, 기타 대부분의 언어는 “과거 코드 유지”를 목표로 하지만
Python은 “새 버전마다 생태계가 한 세트씩 존재하는 언어”라 버전 호환성을 특별히 고려해야 한다.
A.2 파이썬은 서드파티 라이브러리(패키지) 중심의 구현이 주로 이루어지기 때문에 새 Python 버전이 나오면
- 어떤 라이브러리는 바로 지원
- 어떤 라이브러리는 아직 wheel이 없어서 설치 에러 (특히 C 확장 포함한 numpy, PySide6, PyTorch 등)
- 반대로, 최신 버전 라이브러리가 오래된 Python 지원을 끊기도 합니다.
B. 예시
B.1 기존 함수 삭제
# ~Python 3.7까지 정상
import time
start = time.clock()
# ... some work ...
end = time.clock()
Python 3.8부터 완전 삭제되어 에러 발생
B.2 외부 라이브러리 변경
import numpy as np
x = np.int(3) # Deprecated → NumPy 1.24 이후 제거
y = np.float(3.14)
NumPy 1.24 ~ 2.0 + Python 3.11 환경에서 실행:
Python만 업그레이드했는데, “NumPy 최신 버전”이 따라오면서 API가 바뀌어 기존 코드가 깨짐.
df = df.astype("int")
pandas 2.0 이후: 과거엔 묵시적으로 변환되던 것이 이제는 에러 처리됨 → 동작이 변경됨.