본문 바로가기

Python 입문

Java 개발자가 Python 처음 배울 때 헷갈리는 것들


Java 개발자로 몇 년 일하다가 Python 처음 봤을 때, 솔직히 당황했어요.

분명 코드인데 왜 이렇게 낯설지? 싶었거든요. 문법 자체는 단순한데 Java랑 발상이 달라서 계속 헷갈리는 부분들이 있었어요.

저처럼 Java/C# 배경으로 Python 입문하는 분들한테 도움이 됐으면 해서 정리해봤어요.


1. 중괄호가 없다 — 들여쓰기가 문법이에요

Java에서는 이렇게 쓰죠:

if (score >= 90) {
    System.out.println("A학점");
} else {
    System.out.println("기타");
}

Python은 이래요:

if score >= 90:
    print("A학점")
else:
    print("기타")

중괄호 {} 대신 들여쓰기로 블록을 구분해요. 처음엔 불안한데, 익숙해지면 오히려 깔끔해요.

⚠️ 들여쓰기 칸 수가 안 맞으면 에러 나요. 탭이랑 스페이스 섞어 쓰는 것도 에러예요. VS Code에서 Python 쓸 때는 스페이스 4칸으로 통일하는 게 국룰이에요.


2. 타입 선언이 없다

Java는 타입을 명시하죠:

String name = "잠탱이";
int age = 30;
List<String> list = new ArrayList<>();

Python은 그냥 넣으면 돼요:

name = "잠탱이"
age = 30
list = []

타입 추론이 자동이에요. 편하긴 한데 처음엔 "이게 맞나?" 싶기도 해요.

타입 명시하고 싶으면 타입 힌트 쓸 수 있어요 (강제는 아니에요):

name: str = "잠탱이"
age: int = 30

AI 개발할 때는 타입 힌트 쓰는 게 코드 읽기 편해서 습관 들이는 걸 추천해요.


3. == 비교 vs is 비교

Java에서 객체 비교할 때 == 는 주소 비교, .equals() 는 값 비교였죠.

Python은 좀 달라요:

a = [1, 2, 3]
b = [1, 2, 3]

a == b   # True  → 값 비교
a is b   # False → 다른 객체인지 비교

Python에서 값 비교는 ==, 동일 객체인지는 is 예요. 대부분은 == 만 쓰면 돼요.

None 비교할 때는 == None 말고 is None 쓰는 게 파이썬 스타일이에요.

if result is None:
    print("결과 없음")

4. 세미콜론이 없다

Java는 줄 끝에 ; 붙이죠. Python은 없어도 돼요.

name = "잠탱이"  # 세미콜론 없어도 됨
age = 30

붙여도 에러는 안 나는데, Python 스타일이 아니에요. 그냥 안 쓰는 습관 들이세요.


5. 리스트 컴프리헨션 — 처음 보면 당황해요

Java에서 리스트 만들 때:

List<Integer> result = new ArrayList<>();
for (int i = 0; i < 10; i++) {
    if (i % 2 == 0) {
        result.add(i * 2);
    }
}

Python은 한 줄로:

result = [i * 2 for i in range(10) if i % 2 == 0]

처음엔 읽기 어려운데, 익숙해지면 진짜 편해요. AI 개발할 때 데이터 가공할 일이 많아서 꼭 익혀두는 게 좋아요.


6. self — Java의 this 랑 비슷한데 명시해야 해요

Java에서 this 는 생략 가능하죠. Python은 self 를 항상 명시해야 해요:

class ChatBot:
    def __init__(self, name):
        self.name = name  # self 필수

    def greet(self):      # self 필수
        print(f"안녕하세요, {self.name}입니다")

깜빡하고 self 빼면 에러 나요. 처음엔 귀찮은데 금방 익숙해져요.


7. 예외처리 — try/catch 가 try/except 로

Java:

try {
    // 코드
} catch (Exception e) {
    System.out.println(e.getMessage());
}

Python:

try:
    # 코드
except Exception as e:
    print(str(e))

catch 대신 except, 괄호 없이 as 로 받아요. 구조는 거의 같아서 금방 적응돼요.


정리

Java/C# Python 비고
{} 블록 들여쓰기 스페이스 4칸 통일
타입 선언 필수 타입 추론 타입 힌트 선택사항
.equals() == None 비교는 is
; 필수 ; 없음 붙여도 에러는 아님
this 생략 가능 self 필수 클래스 메서드마다
catch except 구조는 동일

Java/C# 개발자라면 문법보다 발상의 전환이 더 중요해요. Python은 간결함을 추구하는 언어라서, Java처럼 장황하게 쓰면 오히려 이상해 보여요.

다음 글은 Python 가상환경 venv — Maven이랑 비교해서 이해하기예요!