⭐ 기본적인 차이점
항목 | 파이썬 | 자바 |
언어 철학 | 간결함, 가독성 ("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는 클래스 참조를 다른 방식으로 처리) |
반응형
'백엔드' 카테고리의 다른 글
IPv4 vs IPv6 비교 (2) | 2025.05.04 |
---|---|
페이지 교체 알고리즘(FIFO) 와 스래싱(THRASHING) (1) | 2025.05.04 |
자바 2차원 배열에 대한 고찰... (2) | 2025.05.04 |
자바 연산자 우선순위 우선순위 높은 순 -> 낮은 순 정리 (2) | 2025.05.04 |
비트연산자 <<, >> 사용이유 및 계산법 (0) | 2025.05.04 |