글 작성자: nouu

일급 함수 클래스 


함수/클래스를 비롯한 모든 대상이 객체이다.

 

런타임에 새로운 변수를 생성할 수 있듯 런타임에 새로운 함수/클래스를 생성할 수 있습니다.

함수/클래스를 변수에 할당하고, 인수로 사용하고, 함수 반환값으로 사용할 수 있습니다.

 

즉 인자로서 함수를 넘길 수 있고, 리턴값으로 함수를 리턴할 수 있습니다.

 

이러한 기능이 제공이 되면, 그 언어는 일급함수/클래스를 지원한다라고 말한다.

 

일급 함수 예제 

def greeting(name):
    return 'Hello ' + name

def call_function(fn, arg):
    return fn(arg)

# 함수를 변수에 할당
say_hello = greeting

# 함수를 다른 함수의 인자로 전달
print(call_function(say_hello, 'Alice'))

# 함수에서 새로운 함수를 반환
def make_adder(x):
    def adder(y):
        return x + y
    return adder

# 함수를 데이터 구조에 저장
functions = [say_hello, make_adder(5)]
print(functions[0]('Bob'))  # 'Hello Bob'
print(functions[1](10))     # 15

 

 

 

 

 

 

 

일급 클래스 예제 

class Greeter:
    def __init__(self, name):
        self.name = name

    def greet(self):
        return "Hello " + self.name

# 클래스를 변수에 할당
G = Greeter

# 클래스 인스턴스 생성
g = G("Alice")
print(g.greet())  # "Hello Alice"

# 클래스를 데이터 구조에 저장
classes = [Greeter, dict, list, set]
# 클래스 리스트에서 인스턴스 생성
instance = classes[0]("Bob")
print(instance.greet())  # "Hello Bob"