본문 바로가기
프로그래밍/python

[python] java 개발자가 배우는 python - NoneType

by 사바라다 2020. 6. 2.

안녕하세요. 오늘은 java 개발자가 배우는 python이라는 주제로 찾아뵙습니다.

오늘 알아볼 것은 python의 NoneType입니다. java와 유사한 개념은 무엇이며 어떻게 사용하는지 알아보도록 하겠습니다.

NoneType

python에서 NoneType은 값이 존재하지 않음(None Object)을 나타내는 Type입니다. java에서 null과 유사한 의미를 가진다고 할 수 있을 것 같습니다. 하지만 java의 null과는 근본적으로 다른 점도 존재합니다.

python의 함수는 반드시 return이 있습니다. 즉, java에서의 void 형식의 메서드가 존재하지 않는다는 것입니다. 아래에서 예제로 비교를 해보겠습니다.

public void compute() {
    ...로직... 
}

java 에서 위와 같이 메서드를 정의했다고 하겠습니다. 위 메서드는 로직이 실행되지만 아무런 return 값도 존재하지 않는 메서드입니다. 이러한 메서드는 python으로 구현하면 아래와 같습니다.

>>> def compute():
...     ...로직...

그리고 Client 코드를 보도록하겠습니다.

public void Client() {
    compute();
}

java code는 일반적으로 위와같이 사용할 수 있습니다. 컴파일은 물론 런타임에서도 정상적으로 동작합니다. 아래의 python 코드또한 마찬가지 입니다.

>>> compute()

그렇다면 아래와 같은 코드는 어떨까요?

public void Client() {
    Object a = compute();
}

위와같은 코드는 컴파일에러를 출력합니다. 왜냐하면 compute는 void형 return 값이기 때문입니다. 하지만 python은 다릅니다.

>>> a = compute()

위와 같이 코딩했을 때 에러가 출력되지 않으며 정상적으로 로직이 흐릅니다. 그렇다면 a의 값은 무엇일까요? 해당값을 호출했을 때 아무런 값도 출력되지 않습니다.

>>> a
>>>
>>> type(a)
<class 'NonType'>

타입을 한번보도록 하겠습니다. NonType 이라는 값을 가지는 것을 확인할 수 있었습니다. 즉 우리는 여기서 compute() 함수는 아무런 값이 없다라는 값을 리턴했다라는 사실을 얻을 수 있었습니다.

이를 어떻게 이용할 수 있을까요 ? java에서 아래와 같은 코드가 있다고 하겠습니다.

public String compute(String value) {
    if (value.length() > 5) {
        return value;
    } else {
        return null;
    } 
}

value의 길이기 5 이상이라면 해당 문자열을 그대로 리턴하고 그렇지 않다면 null을 리턴하도록 하겠습니다. python에서는 위 코드를 아래와 같이 적용할 수 있습니다.

def compute(value):
    if len(value) > 5:
        return value

else에 관한 부분은 직접 코딩하는 것이 아닌 python의 런타임에 맡길 수 있게 되었습니다. 명시적인 return 이 필요한 부분은 실제 return을, 그렇지 않은 부분은 런타임에 맡겨 NoneType이 리턴되도록 할 수 있습니다.

마무리

오늘은 python의 NoneType에 대해서 알아보는 시간을 가졌습니다. 배우기 쉬운 언어가 어떤 것일까를 생각했을 때 많은 부분은 런타임에서 처리하는 언어라는 문구를 들은 적이 있습니다. 로직에 집중할 수 있도록 부가적인 부분은 런타임이 대신처리해 준다는 것이지요.

오늘 알아본 내용은 python의 이러한 부분이 아닐까 합니다.

감사합니다.

참조

python docs

댓글