일급(first class) 객체
일급 객체는 일반적으로 모든 객체에서 사용과 수정이 가능한 객체로 다음과 같이 실행할 수 있습니다.
- 변수에 할당
- 저장
- 함수에 인수로 전달
- 함수의 반환값
- 수정할 수 있으며 객체에 할당 가능
파이썬에서 모든 데이터는 객체 또는 객체간의 관계로 표현됩니다.
def hello(name): return f"{name}님 안녕하세요!"
위 함수 hello()의 실행결과는 다음과 같이 문자열 객체입니다.
B=hello('A');B
'A님 안녕하세요!'
type(B)
str
다음 결과와 같이 힘수 hello 자체는 함수의 결과와는 다른 의미를 가집니다. 즉, hello는 모듈의 메인함수 hello(name)를 포함하고 있는 이름객체입니다.
help(hello)
Help on function hello in module __main__: hello(name)
위 결과의 __main__은 그 모듈의 시작점을 의미하는 내장속성(builtin attribute)로서 프로그램 실행시 내부적으로 이름객체를 호출하는 내장속성인 __name__과 함께 사용합니다. 즉, 다음 코드와 같이 사용되며 호출된 이름이 __main__일 경우 프로그램을 실행함을 의미합니다.
if __name__="__main__"
즉, 이름 객체인 hello는 함수 hello()를 포함하는 것으로 다른 변수에 할당할 수 있습니다. 다음은 greet 변수에 hello를 할당하는 것으로 greet는 hello() 함수의 모든 내용을 포함합니다.
위 함수 hello는 return 문을 포함하는 함수이며 1급객체입니다. 그러므로 다음 코드와 같이 다른 변수인 greet에 할당할 수 있습니다.
greet=hello greet("영희")
'영희님 안녕하세요!'
help(greet)
Help on function hello in module __main__: hello(name)
객체 hello와 greet는 참조위치가 동일한 같은 객체입니다.
greet is hello
위 결과에 의하면 함수의 이름은 함수의 내용을 참조하는 것으로 다양한 참조위치를 같게 설정하면 다양한 이름으로 함수를 사용할 있습니다. 이는 함수의 모든 내용을 변수에 할당할 수 있습니다. 즉, 일급객체임을 의미합니다. 함수의 이러한 특성으로 인해 중첩함수나 클로저로의 적용이 가능한 것입니다.
댓글
댓글 쓰기