본문 바로가기
백엔드

파이썬 vs 자바 차이점

by cook_code 2025. 5. 4.

⭐ 기본적인 차이점 

항목 파이썬 자바
언어 철학 간결함, 가독성 ("There should be one obvious way to do it") 엄격한 명시성, 객체지향 중심
타입 시스템 동적 타이핑 (런타임 타입 결정) 정적 타이핑 (컴파일 시 타입 결정)
실행 방식 인터프리터 방식 (CPython, PVM) JVM 위에서 바이트코드 실행
코드 작성량 코드 간결함, 빠른 개발 코드 장황하지만 명확한 구조화
메모리 관리 자동 가비지 컬렉션 + 레퍼런스 카운팅 JVM 기반 가비지 컬렉션
멀티스레딩 GIL(Global Interpreter Lock) 존재, 병렬에 제한 멀티스레딩 최적화 (JVM 수준)
플랫폼 의존성 인터프리터 설치 필요 JVM이 설치된 환경이면 어디서나 실행
주 사용 분야 스크립트, 웹, 데이터 분석, AI 엔터프라이즈 웹, 안드로이드, 대형 시스템
속도 상대적으로 느림 컴파일 최적화로 빠름
라이브러리 풍부한 데이터·AI 라이브러리 대규모 시스템용 안정된 프레임워크

⭐ 클래스 차이점

구분 파이썬 자바
선언 키워드 class 클래스명: class 클래스명 {}
생성자 __init__() 메서드 클래스명과 동일한 이름
self / this self 명시 (모든 인스턴스 메서드) this는 명시할 수도 있고 안 할 수도 있음
접근 제어 명시적 키워드 없음 (_, __ 사용) public, private, protected 명시
타입 선언 동적 타이핑 (타입 안 씀) 정적 타이핑 (자료형 명시 필수)
상속 괄호에 부모 클래스 (class A(B):) extends, implements 사용
메서드 오버로딩 X (기본 문법에 없음) O (메서드 이름 같고 매개변수 다르면 가능)
메서드 오버라이딩 def 메서드명(...) 재정의 @Override로 명시적 표시 필요
추상 클래스 abc 모듈 사용 (@abstractmethod) abstract class, interface 키워드
실행 구조 스크립트처럼 바로 실행 가능 main() 필요, 클래스 기반 실행

⭐ 디자인 패턴 차이점

구성요소 Django (Python, MTV 구조) Spring MVC (Java, 전통적인 MVC)
Model Django ORM 모델 클래스 (models.Model) JPA 엔티티, MyBatis 매핑 객체
View 템플릿 파일 (HTML + Jinja 문법) JSP, Thymeleaf, JSON 응답 등
Controller views.py 함수 또는 클래스 기반 뷰(CBV) @Controller, @RestController
라우팅 urls.py에서 URL과 뷰 매핑 @RequestMapping 또는 @GetMapping 등
비즈니스 로직 뷰 함수 안 또는 별도 서비스 클래스 Service 계층 (@Service) 분리 필수
템플릿 엔진 Jinja2 기반 Thymeleaf, JSP 등 선택 가능
ORM 연동 Django ORM 자동 연동 JPA, Hibernate 또는 MyBatis 선택
설정 settings.py로 구성 application.properties, Java config
테스트 구조 단위 테스트 및 테스트 클라이언트 포함 JUnit, Mockito 등으로 계층별 테스트
의존성 주입 (DI) 별도 프레임워크 없음 (함수 위주) Spring 자체 DI 컨테이너 지원

 

  • 파이썬 MVC: 간결하고 유연함. Django는 MTV(Model-Template-View) 구조 사용.
  • 자바 MVC: 계층 구조 명확. Spring MVC는 Controller-Service-DAO로 세분화.
  • Django는 MTV 구조로 컨트롤러 역할을 views.py가 담당하며 간결한 코드자동화된 구성에 초점.
  • Spring MVC는 계층 분리와 DI 기반 구조가 명확하여 대규모 서비스에 적합.

⭐ "self" vs "this"

항목 파이썬-self  자바-this
의미 현재 인스턴스를 참조하는 매개변수 현재 인스턴스를 참조하는 예약어
사용 방식 메서드 첫 번째 인자로 명시적으로 작성 자동으로 전달되어 명시할 필요 없음
필드 접근 self.name처럼 명시적으로 self 사용 this.name 또는 생략 가능
생략 가능 여부 절대 생략 불가 생략 가능 (필요 시만 사용)
정적 메서드 @staticmethod은 self 없음 static 메서드는 this 사용 불가
클래스 메서드 @classmethod는 cls 사용 없음 (Java는 클래스 참조를 다른 방식으로 처리)
반응형