티스토리 뷰

이번에는 가변 인자에 대해서 공부해보겠습니다.

 

가변 인자란 말 그대로 변할 수 있는 인자를 의미하는데요. 유재석씨와 김태호씨가 고등학교를 졸업하고 대학교를 가서 보다 많은 프로그래밍 언어를 공부했다고 가정하겠습니다. 다음 표와 같이 유재석씨는 프로그래밍 언어를 무려 5개나 공부했고, 김태호씨는 2개를 공부했습니다.

 

언어 유재석 김태호
1 Python Kotlin
2 Java Swift
3 C  
4 C++  
5 C#  

 

profile() 함수를 바꿔야할텐데 우선은 최대 5개 프로그래밍 언어를 할 수 있다는 가정 하에 전달값은 lang1 ~ lang5 라고 정의하겠습니다. 그리고 print() 문은 2개로 나눠서 처음에는 이름, 나이만 출력하고 다음에는 lang1 ~ lang5 까지 출력하겠습니다.

이 때, 2개의 출력내용을 한 줄에 연달아서 출력하기 위해 첫 번째 print() 의 끝에 end=" " 를 적어주겠습니다. print() 를 실행하면 기본적으로 문장 출력 후에 줄바꿈을 하기 때문에 이후에 나오는 문장들은 새로운 줄에 표시되는데, end 값을 변경하면 변경된 값을 문장의 마지막으로 사용하게 됩니다. 그래서 줄바꿈이 아닌 띄어쓰기로, 즉 " " 로 문장을 끝내고 이후에 있는 print() 의 내용도 같은 줄에 이어서 출력할 수 있게 됩니다.

def profile(name, age, lang1, lang2, lang3, lang4, lang5):
    print("이름 : {0}\t나이 : {1}\t".format(name, age), end=" ") # 문장 출력 후 줄바꿈 대신 띄어쓰기
    print(lang1, lang2, lang3, lang4, lang5)

이제 함수를 해봅시다.

유재석씨는 5개의 언어에 대해 각각 명시를 해주면 되는데, 김태호씨는 2개 언어에 대해서는 적었지만 나머지 부분은  빈 값으로 채웠습니다.

profile("유재석", 20, "Python", "Java", "C", "C++", "C#")
profile("김태호", 25, "Kotlin", "Swift", "", "", "")

 

그런데 만약에 profile() 함수를 호출해야 하는 사람들이 훨씬 더 많아지면 어떨까요? 각 사람들마다 다룰 줄 아는 프로그래밍 언어 갯수가 달라질 것이므로 5개 미만인 사람들은 늘 빈 값들을 채우는 번거로운 작업을 해야할 것입니다.

 

하지만 더 큰 문제는 따로 있는데요. 유재석씨가 너무 재밌다고 프로그래밍 언어를 또 하나 공부하게 되면 어떨까요? 이미 5개 언어를 가득 채웠는데 또 하나를 추가하게 되면, 이제는 함수 자체를 변경해야 하는 것이죠.

 

이 때 사용할 수 있는 것이 바로 가변 인자입니다.

def 함수이름(전달값1, 전달값2, ..., *가변인자):
    실행 명령문1
    실행 명령문2
    ....
    return 반환값

가변 인자는 앞에 * 표시를 하나 추가해주면 됩니다.

 

함수를 다시 적어볼까요?

def profile(name, age, *language): # 언어 정보를 전달하고 싶은 갯수 만큼 전달 가능    
    print("이름 : {0}\t나이 : {1}\t".format(name, age), end=" ")
    
    # print(type(language)) # tuple
    for lang in language:
        print(lang, end=" ") # 언어들을 모두 한 줄에 표시
    print() # 줄바꿈 목적

이번에는 language 를 가변인자로 정의하였으므로 함수를 호출하는 곳에서는 전달하고 싶은 갯수 만큼 전달을 하면 됩니다. 가변 인자의 type 정보를 확인해보면 튜플임을 알 수 있는데요. 그렇기 때문에 for 반복문을 사용하면 가변 인자로 전달받은 값들을 하나씩 반복하면서 사용할 수 있답니다. 각 언어들을 한 줄에 표시하기 위해 이번에도 end=" " 를 추가하였으며 모든 언어 정보를 출력하고 나면 줄바꿈을 해주기 위해 비어 있는 print() 를 적어줍니다.

 

이제는 가변 인자 덕분에 유재석씨는 JavaScript 를 포함한 총 6개의 프로그래밍 언어 정보를 전달할 수 있게 되었고, 김태호씨는 2개의 언어만 전달하면서도 뒤에 불필요한 빈 값을 적지 않아도 되겠네요.

profile("유재석", 20, "Python", "Java", "C", "C++", "C#", "JavaScript") # JavaScript 추가
profile("김태호", 25, "Kotlin", "Swift")

실행 결과는 이렇습니다.

이름 : 유재석   나이 : 20        Python Java C C++ C# JavaScript
이름 : 김태호   나이 : 25        Kotlin Swift

이처럼 서로 다른 갯수의 값들을 전달해야 하는 경우에 가변 인자를 활용할 수 있습니다.

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함