10강 / 20강
함수 — 하나에 하나씩만 짝지어 주는 규칙
단사 · 전사 · 전단사, 그리고 해시와 암호
9강의 관계 중에서 특별한 조건을 만족하는 것을 함수(function)라고 부릅니다. 조건은 딱 두 가지예요.
- 출발 집합(정의역)의 모든 원소에 짝이 있다 — 빠뜨리는 게 없다
- 각 원소의 짝은 정확히 하나다 — 화살표가 두 개 나가면 안 된다
"자판기"를 떠올리면 쉽습니다. 버튼을 누르면(입력) 음료가 하나 나옵니다(출력). 같은 버튼을 눌렀는데 어떨 땐 콜라, 어떨 땐 사이다가 나오면 고장난 자판기죠 — 그건 함수가 아닙니다.
치역 ⊆ 공역. 안 쓰인 값이 있어도 함수는 함수입니다.
Python
브라우저에서 실행
🎮 화살표를 그어 보세요
왼쪽 원소를 오른쪽 원소에 이어 보세요. 함수인지 아닌지, 함수라면 단사·전사·전단사 중 무엇인지 즉시 판정해 드립니다. 화살표를 두 개 그으면 왜 함수가 아닌지도 보여 줘요.
세 가지 이름
| 이름 | 조건 | 비유 |
|---|---|---|
| 단사 (일대일, injective) | 서로 다른 입력 → 서로 다른 출력 | 도착지 원소에 화살표가 많아야 하나 |
| 전사 (위로의, surjective) | 공역의 모든 원소가 쓰인다 | 도착지에 화살표가 적어도 하나씩 |
| 전단사 (일대일 대응, bijective) | 단사이면서 전사 | 도착지에 화살표가 정확히 하나씩 |
전단사일 때만 역함수가 있습니다. 되돌리려면 짝이 딱 맞아떨어져야 하니까요. 암호를 복호화할 수 있는 것도, 압축을 풀 수 있는 것도 그 변환이 전단사이기 때문입니다.
같은 규칙이라도 공역을 어떻게 잡느냐에 따라 전사 여부가 달라집니다.
Python
브라우저에서 실행
합성함수 — 자판기를 이어 붙이기
(g ∘ f)(x) = g(f(x)). f 의 출력을 g 에 넣는 것입니다.
순서가 중요합니다 — 양말을 신고 신발을 신는 것과 반대는 결과가 다르죠.
전단사이므로 딕셔너리를 통째로 뒤집어 역함수를 만들 수 있습니다.
Python
브라우저에서 실행
🤔 확인 문제
어떤 규칙이 함수가 아닌 경우는?
해설 함수의 규칙은 입력 하나 → 출력 하나입니다. 출력이 두 개면 자판기가 고장난 것이고, 함수가 아니에요. ①은 단사가 아닐 뿐, ③은 전사가 아닐 뿐 — 둘 다 함수는 맞습니다.
🤔 확인 문제
역함수가 존재하기 위한 조건은?
해설 되돌리려면 겹치지도(단사), 빠지지도(전사) 않아야 합니다. 도착지의 각 원소에 화살표가 정확히 하나씩 꽂혀 있어야 화살표를 거꾸로 따라갈 수 있어요.
🤔 확인 문제
비밀번호를 해시로 저장하는 이유를 함수의 언어로 말하면?
해설 해시는 서로 다른 입력이 같은 출력을 낼 수 있는 단사가 아닌 함수이고, 애초에 되돌릴 수 없게 설계됩니다. 그래서 DB가 털려도 원래 비밀번호는 바로 드러나지 않아요. 겹침 자체는 16강 비둘기집 원리에서 다시 만납니다.