default value parameter 가 가독성에 미치는 해악

default value parameter 는 함수에 파라미터를 지정할 때 자주 쓰이는 방법이다. def foo(a: bool = True): if a: return "foo" else: return "bar" 문제는 이 방법이 함수의 제작자의 경우에는 명시적으로 느껴지지만 사용자 혹은 독자의 경우에는 굉장히 묵시적이라는데 있다. # default argument >> foo() "foo" # positional argument >> foo(True) "foo" # keyword argument >> foo(a=False) "bar" default value parameter 는 positional / keyword argument 외에도 하나의 방법을 더 늘려주는데, 명시적으로 argument 를 넘기지 않아도 이미 지정된 default value 를 함수 내에서 사용할 수 있게 끔 한다. ...

December 18, 2023 · 2 min · Dongwook Kim

Mixin class 사용시 app 간 계층 구조

앞서 포스팅한 circular import 에 대한 생각 에서 해당 문제가 발생한 경우, 계층 구조를 먼저 생각해보자는 이야기를 했었다. 이번에는 이어서 class 의 공통된 기능을 뽑아낼 때 계층 구조를 잘 잡기 위한 방법을 생각해보았다. 일반적으로 Mixin class 는 하위 클래스들의 공통을 묶어 상위 abstract 로 뽑는데 사용되나, 가끔은 상위 클래스들에 공통된 기능을 붙이는 용도로도 사용된다. django 로 가정하고 예시를 든다. # A app class A(models.Model): nickname = models.CharField(...) def validate_nickname(self): ... # B app class B(models.Model): nickname = models.CharField(...) def validate_nickname(self): ... 이렇게 공통된 field 와 method가 있는 경우, 파편화를 막기 위해 abstract model 을 이용하여 상위의 abstract class 를 만든다. ...

December 18, 2023 · 3 min · Dongwook Kim