# 타입을 이용하여 안전한 코딩을 위한 Type-Driven Development

> Clean Markdown view of GeekNews topic #15959. Use the original source for factual precision when an external source URL is present.

## Metadata

- GeekNews HTML: [https://news.hada.io/topic?id=15959](https://news.hada.io/topic?id=15959)
- GeekNews Markdown: [https://news.hada.io/topic/15959.md](https://news.hada.io/topic/15959.md)
- Type: news
- Author: [kciter1](https://news.hada.io/@kciter1)
- Published: 2024-07-22T10:34:51+09:00
- Updated: 2024-07-22T10:34:51+09:00
- Original source: [kciter.so](https://kciter.so/posts/type-driven-development/)
- Points: 18
- Comments: 2

## Summary

타입 주도 개발은 타입을 먼저 정의하고 이를 통해 코드를 작성하는 방법론으로, 로직의 입력과 출력을 타입으로 추상화하여 설계할 수 있습니다. 이를 통해 컴파일 시간에 안정성을 체크하고, 제네릭, 팬텀 타입, 유니온 타입 등 다양한 타입 시스템을 활용하여 여러 문제를 해결할 수 있습니다. 타입 주도 개발은 테스트 주도 개발과도 잘 어울리며, 코드의 가독성과 유지보수성을 높이는 데 도움이 됩니다.

## Topic Body

* 타입은 함수와 데이터가 준수해야 하는 엄격한 계약  
* 타입은 어떠한 값이 속할 수 있는 집합  
* 타입은 함수를 통해 변환될 수 있고 이를 통해 범위가 변경 될 수 있다  
  * 단사 함수 - 범위가 작은 타입에서 큰 타입으로 변환하는 것  
  * 전사 함수 - 범위가 큰 타입에서 작은 타입으로 변환하는 것  
  * 전단사 함수 - 일대일로 대응  
* 로직의 입력과 출력을 타입으로 나타낼 수 있음  
  * 이말은 타입을 통해 로직을 추상화 하는 것이 가능하다는 것  
  * 입력과 출력을 타입으로 나타내고 이를 통해 로직을 설계할 수 있다  
* 기본 데이터 타입에 이름을 붙여 다른 타입으로 구분할 수 있음  
* 타입 시스템을 활용하면 여러 문제를 해결할 수 있음  
  * 제네릭을 이용한 일반화  
  * 팬텀 타입을 이용한 범위 제한  
  * 유니온 타입(혹은 합타입)을 이용한 행동 제한  
  * 최소 타입을 이용한 TODO 처리  
  * 타입을 이용한 유한 상태 머신 구현  
  * 의존 타입을 이용한 검증  
* 타입 주도 개발은 타입을 먼저 정의하고 이를 통해 코드를 작성하는 방법론  
* 타입 주도 개발은 원한다면 어디에도 적용할 수 있으며 각 절차에 대한 결과를 타입으로 정의하는 것으로 시작  
* 요구사항을 분석할 때 타입으로 추상화 해볼 것  
* 같은 기본 데이터 타입이더라도 의미가 다르다면 이를 구분하기 위해 다른 타입으로 정의하는 것이 좋음  
* 요구사항을 분석하고 타입을 생각했다면 로직을 타입으로 추상화해볼 것  
  * `(String) -> List&lt;Token&gt;`과 같은 느낌으로 추상화 가능  
* 타입 주도 개발은 테스트 주도 개발과 어울림  
  * 입력과 출력 결과를 미리 정의하고 코드를 작성한다는 점에서 타입 주도 개발과 테스트 주도 개발은 유사  
  * 타입 주도 개발이 타입 시스템을 이용하여 컴파일 시간에 미리 안정성을 체크할 수 있다면 테스트 주도 개발은 타입만으로는 잡아낼 수 없는 오류나 예외 상황을 테스트 코드를 통해 잡아낼 수 있음  
* 설계자의 입장에 타입 시스템을 활용한다는 것은 다른 개발자를 위한 코드 규칙을 만드는 것과 같음  
* 다만 일일히 타입의 정의하여 타입이 너무 많아지거나 타입의 정의가 복잡해지면 오히려 코드를 작성하기 힘들어지거나 가독성을 떨어뜨릴 수 있기에 항상 적절한 상태를 유지하는 것이 중요

## Comments



### Comment 27485

- Author: chabulhwi
- Created: 2024-07-23T14:11:04+09:00
- Points: 1

> 단사 함수는 변환된 값의 집합이 공역과 치역이 일치하지 않는 경우를 말한다. 이를 조금 더 단순하게 표현하면 범위가 작은 타입에서 큰 타입으로 변환하는 것을 말한다.  
  
단사 함수란 임의의 서로 다른 두 변수의 상이 서로 다른 함수를 가리킵니다. 즉, 단사 함수 `f`의 정의역 `X`에 속하는 모든 원소 `a`와 `b`에 대해, `a ≠ b`이면 `f(a) ≠ f(b)`입니다. 한국 고교 수학에서 '일대일 함수'라고 부르는 것이 단사 함수입니다.

### Comment 27486

- Author: kciter1
- Created: 2024-07-23T14:23:15+09:00
- Points: 1
- Parent comment: 27485
- Depth: 1

상세한 설명 감사합니다. :) 제가 잘못 이해하고 있었네요. 안그래도 몇 번 지적받은 부분이라 조금 더 공부해서 내용을 다시 정리하겠습니다.
