프로그래밍 세계에서 문법은 곧 질서와 같다고 생각해요. 하지만, 그 질서가 너무 유연하면 종종 머리를 감싸쥐게 되는 일이 생기죠. 저는 JavaScript를 사용할 때마다 이 사실을 체감합니다.
JS는 마치 자유로운 영혼을 가진 언어처럼 느껴져요. 타입 선언도 필요 없고, 변수 스코프도 헷갈리기 쉽고, 심지어 함수 호출 문법조차 때로는 모호하게 느껴지죠. 하지만 프론트엔드 개발을 위해서는 어쩔 수 없이 사용해야 하니, 저에겐 JS가 그야말로 애증의 대상입니다.
그에 비해 Python은 훨씬 명확하고 규칙적인 문법을 제공해요. 그런데, 그런 Python에서도 종종 마음에 걸리는 부분이 있죠. 그 중 하나가 바로 딕셔너리 마지막 쉼표 문제입니다.
Python 딕셔너리, 마지막 쉼표의 진실
Python에서 딕셔너리를 정의할 때, 마지막 key: value
쌍 뒤에 쉼표(,
)를 넣어야 할까요, 아니면 생략해야 할까요? 저는 이 질문이 문법적으로 무엇이 더 올바른지 알아보고 싶었어요.
결론적으로 쉼표를 넣어도 되고, 넣지 않아도 작동합니다. 하지만, PEP 8 스타일 가이드를 따르는 Python 개발자들은 종종 마지막 항목에도 쉼표를 넣는 것을 권장합니다. 특히 여러 줄로 작성된 딕셔너리에서는 가독성도 좋아지고, 나중에 항목을 추가할 때 편리하죠.
예를 들어:
my_dict = {
'name': 'Alice',
'age': 25,
}
위와 같이 마지막에 쉼표를 넣는 것이 Python 커뮤니티에서 선호됩니다. 코드가 더 깔끔해 보이거든요. 하지만 단일 줄로 작성할 때는 쉼표를 생략하는 경우가 많습니다:
my_dict = {'name': 'Alice', 'age': 25}

이 작은 차이지만, 코드를 읽고 작성하는 데 있어 일관성과 가독성을 좌우할 수 있는 요소라 생각합니다.
C++에서 딕셔너리를 찾아서: std::map
과 std::unordered_map
이야기를 하다 보니 C++도 생각났습니다. C++에는 Python의 딕셔너리와 유사한 키-값 저장소로 std::map
과 std::unordered_map
이 있습니다. 둘 다 키와 값을 쌍으로 저장하지만, 약간의 차이가 있죠.
std::map
: 키가 정렬된 순서로 저장됩니다. 검색과 삽입이 효율적이며 로그 시간 복잡도를 가집니다.std::unordered_map
: 해시 테이블 기반으로, 저장 순서는 보장되지 않지만 검색이 빠릅니다. 상수 시간 복잡도를 제공합니다.
초기화 예시는 다음과 같아요:
#include <map>
#include <iostream>
int main() {
std::map<std::string, int> my_map = {
{"Alice", 25},
{"Bob", 30}
};
for (const auto& pair : my_map) {
std::cout << pair.first << ": " << pair.second << std::endl;
}
return 0;
}
Python과는 달리 C++에서는 키와 값의 타입을 명시적으로 지정해야 합니다. 타입 안정성을 중요시하는 C++답죠. 그리고 이렇게 명확한 규칙들이 있기에 저는 C++을 사용하면서 마음이 한결 편안해지는 것을 느낍니다.
마무리하며
프로그래밍 언어는 각자의 철학과 특성을 지니고 있어요. 자유로운 영혼의 JS, 규칙을 강조하는 Python, 그리고 타입 안정성을 중요시하는 C++까지. 이렇게 다양한 언어를 다루며 문법적 유연성과 엄격함 사이에서 균형을 찾아가는 것이 개발자의 역할이겠죠.
그래서 오늘도 저는 문법에 관한 고민을 잠시 접어두고, 코딩이라는 재미를 다시금 떠올리며 키보드 위에 손을 얹습니다. 당신은 어떤 언어를 애증하며 사용하고 있나요?
Add a New Comment