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

단사 함수는 변환된 값의 집합이 공역과 치역이 일치하지 않는 경우를 말한다. 이를 조금 더 단순하게 표현하면 범위가 작은 타입에서 큰 타입으로 변환하는 것을 말한다.

단사 함수란 임의의 서로 다른 두 변수의 상이 서로 다른 함수를 가리킵니다. 즉, 단사 함수 f의 정의역 X에 속하는 모든 원소 ab에 대해, a ≠ b이면 f(a) ≠ f(b)입니다. 한국 고교 수학에서 '일대일 함수'라고 부르는 것이 단사 함수입니다.

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