Class

  • 함수 (Function): 혼자서도 잘 노는 애들 (print(), len(), sorted())

  • 메서드 (Method): 특정 객체(리스트, 문자열 등)에 소속되어 있는 함수 (list.sort(), str.split())

결국 둘 다 **“입력값을 받아 일을 하는 코드 뭉치”**라는 점은 같기 때문에, key라는 옵션(매개변수)은 양쪽 모두에서 똑같은 이름과 똑같은 역할로 쓰일 수 있는 것입니다.

와, 정말 날카로운 지적입니다! 질문자님 말씀이 정확해요. .sort()는 리스트의 메서드임에도 불구하고 key를 아주 잘 사용합니다.

제가 앞서 “함수에게 전달하는 옵션”이라고 설명했던 건 sorted(), max(), min() 같은 내장 함수들을 예로 들다 보니 그렇게 표현된 것인데, 사실 메서드도 넓은 의미에서는 ‘함수’의 한 종류이기 때문에 같은 원리가 적용되는 것입니다.

질문자님의 혼란을 완전히 없애기 위해 정체와 사용처를 확실히 정리해 드릴게요.


1. .sort() 메서드에서도 key는 똑같이 쓰입니다

리스트 전용 메서드인 .sort()도 정렬 기준이 필요할 때 key 인자를 받습니다.

Python

names = ["Alice", "Bob", "Charlie"]

# 원본 리스트를 '길이' 기준으로 직접 정렬할 때
names.sort(key=len) 

print(names) # ['Bob', 'Alice', 'Charlie']

이처럼 **.sort()(메서드)**와 **sorted()(함수)**는 key를 사용하는 방식이 100% 동일합니다.


2. ‘함수’ vs ‘메서드’의 관계 (왜 헷갈릴까?)

파이썬에서 이 둘은 사실 형제 같은 사이입니다.


3. “key”의 진짜 정체: 키워드 인자(Keyword Argument)

정확한 프로그래밍 용어로 말하자면, key는 함수나 메서드에 정의된 **‘키워드 전용 매개변수’**입니다.

파이썬 설계자들이 정렬과 관련된 도구를 만들 때, **“기준이 필요할 때는 무조건 key라는 이름을 쓰기로 약속하자!”**라고 정해둔 것이죠. 그래서 우리는 다음 도구들에서 모두 key를 만날 수 있습니다.

  • 함수: sorted(), max(), min(), map(), filter() (일부)

  • 메서드: list.sort()


💡 결론: 단정 지을 수 있을까?

“함수에만 쓰인다”고 단정 짓기보다는, **“정렬이나 비교를 수행하는 파이썬의 도구(함수든 메서드든)라면 key라는 옵션을 공통적으로 가질 수 있다”**고 이해하시는 게 가장 완벽합니다!


요약 표

도구 종류예시key 사용 가능 여부
내장 함수sorted(it, key=...)O
리스트 메서드list.sort(key=...)O
최댓값/최솟값 함수max(it, key=...)O

질문자님처럼 **“이거 메서드인데 왜 함수라고 하지?”**라는 의문을 가지는 게 파이썬의 구조(객체지향)를 깊게 이해하는 아주 좋은 시작이에요!

이제 keylambda를 실전에서 써보실 준비가 되셨나요? 아니면 혹시 key를 여러 개 사용하는 다중 조건 정렬 방식도 한번 구경해 보시겠어요? (예: “나이순으로 하되, 나이가 같으면 이름순으로!“)Would you like me to show you an example of that?