기본 콘텐츠로 건너뛰기

라벨이 유지보수인 게시물 표시

Python의 enum, namedtuple, TypedDict 등 구조화 기법 비교

파이썬 개발하다 보면, 데이터를 깔끔하게 관리하는 게 얼마나 중요한지 절실히 느껴지죠? 저도 처음엔 그냥 딕셔너리만 썼는데, 프로젝트가 커지니까 코드가 스파게티처럼 엉켜서 유지보수가 힘들더라고요. 그래서 파이썬에서 데이터 구조를 효율적으로 관리하는 방법을 찾아보다가 enum , namedtuple , TypedDict 를 알게 됐어요. 이 세 가지, 각각의 매력이 다르니까 상황에 맞춰 골라 쓰는 게 중요한데, 제가 직접 써보면서 느낀 점들을 정리해 볼게요. 먼저, enum (열거형)부터 볼까요? 이건 마치 이름표를 붙여주는 것과 같아요. 예를 들어 HTTP 상태 코드(200, 400, 500 등) 같은 고정된 값들을 관리할 때 딱이죠. 숫자만 써놓으면 나중에 코드 보고 무슨 의미인지 헷갈릴 수 있잖아요? enum 을 쓰면 HTTPStatus.OK 이렇게 직관적으로 쓸 수 있어서 코드가 훨씬 깔끔해져요. 저는 한번은 이걸 안 쓰고 숫자만으로 관리했는데, 나중에 코드 수정하다가 숫자 뜻을 까먹어서 한참 헤맨 적이 있답니다. 그때 enum 의 소중함을 깨달았죠! enum.Enum 클래스를 상속받아서 간단하게 만들 수 있어요. 다음은 namedtuple (명명된 튜플) 입니다. 튜플은 데이터를 묶어서 다루는 데 좋지만, 각 요소가 숫자로만 표시되니 뭐가 뭔지 알기 어려울 때가 있죠. namedtuple 은 각 요소에 이름을 붙여줄 수 있어서, 훨씬 이해하기 쉬워요. 마치 레코드처럼 사용할 수 있다고 생각하면 됩니다. 예를 들어, 사용자 정보를 저장할 때 User = namedtuple('User', ['id', 'name', 'email']) 이렇게 정의하면 user.name 으로 바로 이름에 접근할 수 있죠. collections.namedtuple 함수를 사용하면 쉽게 만들 수 있습니다. 단, 튜플이기 때문에 값을 변경할 수 없...

Python 타입 힌팅과 mypy로 안전한 코드 작성하기

파이썬으로 꽤 큰 프로젝트를 진행하다 보니, 코드가 산으로 가는 경험을 여러 번 했어요. 특히 팀으로 작업할 때는요. 변수 타입을 일일이 확인하지 않아도 되는 파이썬의 동적 타이핑이 오히려 독이 되는 순간이었죠. 그래서 제가 찾은 해결책이 바로 '타입 힌팅'과 'mypy'입니다. 이 둘을 활용하면 훨씬 안전하고 효율적인 파이썬 코딩이 가능해져요! 한 번 같이 살펴볼까요? 타입 힌팅? mypy? 뭐가 뭔가요? 쉽게 말해 타입 힌팅은 파이썬 코드에 변수나 함수의 타입을 명시적으로 적어주는 거예요. 예를 들어 name: str = "철수" 라고 하면 name 변수는 문자열 타입이라는 걸 미리 알려주는 거죠. : 기호 뒤에 타입을 적어주면 됩니다. int, float, str, bool 같은 기본 타입은 물론이고, list, dict, tuple도 당연히 가능해요. 함수의 매개변수와 반환값에도 타입을 지정할 수 있는데, 이걸 타입 어노테이션이라고 합니다. def greet(name: str) -> str: 이렇게요. 함수 greet 는 문자열을 입력받아 문자열을 반환한다는 뜻이죠. 그럼 mypy는 뭘까요? mypy는 이렇게 타입 힌팅을 해놓은 코드를 검사하는 도구입니다. 코드를 실행하기 전에 미리 타입 오류를 찾아주는 거죠. "어? 여기서 int 타입을 기대했는데 str 타입이 들어왔네?" 이런 식으로요. 마치 코드의 문법 검사기 같은 역할이라고 생각하면 돼요. mypy your_script.py 명령어로 간단하게 실행할 수 있습니다. 저는 처음에 이걸 몰라서 엄청 헤맸는데, 알고 나니 정말 신세계였어요. 실제로 어떻게 쓰는 거예요? 제가 예전에 만들었던 코드를 조금 수정해서 보여드릴게요. 두 점 사이의 거리를 계산하는 함수와, 유저 정보를 가져오는 함수, 그리고 데이터 리스트의 합을 계산하는 함수예요. fro...