용어집
Apply (어플라이)
섹션 제목: “Apply (어플라이)”여러 검증을 병렬로 실행하고 모든 오류를 수집하는 함수형 패턴. Validation<Error, T> 타입과 함께 사용.
(ValidateA(), ValidateB(), ValidateC()) .Apply((a, b, c) => new Result(a, b, c));Always Valid (항상 유효)
섹션 제목: “Always Valid (항상 유효)”값 객체가 생성된 이후에는 항상 유효한 상태를 유지하는 패턴. 팩토리 메서드에서 검증 후 생성.
Bind (바인드)
섹션 제목: “Bind (바인드)”모나드의 핵심 연산. 성공 값을 다른 연산에 전달하고 실패 시 단락(short-circuit). SelectMany와 동일.
result.Bind(value => NextOperation(value));ComparableValueObject
섹션 제목: “ComparableValueObject”IComparable<T> 인터페이스를 구현한 값 객체. 정렬과 비교 연산 지원.
CQRS (Command Query Responsibility Segregation)
섹션 제목: “CQRS (Command Query Responsibility Segregation)”명령(쓰기)과 조회(읽기)의 책임을 분리하는 아키텍처 패턴.
DDD (Domain-Driven Design)
섹션 제목: “DDD (Domain-Driven Design)”도메인 모델을 중심으로 소프트웨어를 설계하는 방법론.
DomainError
섹션 제목: “DomainError”DomainError.For<T>() 정적 메서드를 통해 값 객체의 도메인 오류를 생성하는 헬퍼 클래스. 에러 코드를 DomainErrors.{ValueObjectName}.{ErrorName} 형식으로 자동 생성.
using static Functorium.Domains.Errors.DomainErrorType;DomainError.For<Email>(new Empty(), value, "Email cannot be empty");DomainError.For<Password>(new TooShort(MinLength: 8), value, "Password too short");DomainErrorType
섹션 제목: “DomainErrorType”도메인 에러 타입의 기본 record 클래스. sealed record 계층으로 타입 안전한 에러를 정의. 기본 제공 타입: Empty, Null, TooShort, TooLong, WrongLength, OutOfRange, Negative, NotPositive, InvalidFormat 등. Custom record를 파생하여 커스텀 에러 타입 정의 가능.
// 커스텀 에러 타입 정의public sealed record Unsupported : DomainErrorType.Custom;Entity (엔티티)
섹션 제목: “Entity (엔티티)”고유 식별자를 가지며 생명주기 동안 변경될 수 있는 도메인 객체. 값 객체와 대비되는 개념.
Error Type (오류 타입)
섹션 제목: “Error Type (오류 타입)”LanguageExt의 Error 타입. 코드와 메시지를 포함한 구조화된 오류 정보.
Factory Method (팩토리 메서드)
섹션 제목: “Factory Method (팩토리 메서드)”객체 생성을 캡슐화하는 정적 메서드. 값 객체에서는 검증을 포함한 Create 메서드.
Fin
섹션 제목: “Fin”LanguageExt의 결과 타입. 성공(Succ) 또는 실패(Fail)를 표현.
Fin<User> result = User.Create(name, email);Functor (펑터)
섹션 제목: “Functor (펑터)”Map 연산을 지원하는 타입. 컨테이너 내부의 값을 변환.
GetEqualityComponents
섹션 제목: “GetEqualityComponents”ValueObject의 동등성 비교에 사용되는 구성 요소를 반환하는 메서드.
protected override IEnumerable<object> GetEqualityComponents(){ yield return Property1; yield return Property2;}Immutability (불변성)
섹션 제목: “Immutability (불변성)”객체가 생성된 후 상태가 변경되지 않는 특성. 값 객체의 핵심 원칙.
IValueObject
섹션 제목: “IValueObject”값 객체임을 나타내는 마커 인터페이스.
LanguageExt
섹션 제목: “LanguageExt”C#용 함수형 프로그래밍 라이브러리. Fin<T>, Option<T>, Validation<E, T> 등 제공.
LINQ Expression
섹션 제목: “LINQ Expression”from, select, where 등의 쿼리 구문. 모나드 연산과 결합 가능.
var result = from a in GetA() from b in GetB(a) select Combine(a, b);Map (맵)
섹션 제목: “Map (맵)”펑터/모나드의 변환 연산. 내부 값에 함수를 적용하고 결과를 같은 컨테이너로 래핑.
Fin<int> number = 10;Fin<string> text = number.Map(n => n.ToString());Match (매치)
섹션 제목: “Match (매치)”패턴 매칭. 성공/실패, Some/None 등의 경우에 따라 다른 로직 실행.
result.Match( Succ: value => HandleSuccess(value), Fail: error => HandleError(error));Monad (모나드)
섹션 제목: “Monad (모나드)”Bind 연산을 지원하는 타입. Map과 Bind를 모두 지원.
Option
섹션 제목: “Option”값이 있거나 없을 수 있는 타입. null 대신 사용.
Option<User> user = Some(new User());Option<User> noUser = None;Operator Overloading (연산자 오버로딩)
섹션 제목: “Operator Overloading (연산자 오버로딩)”+, -, ==, implicit 등의 연산자를 커스텀 구현.
Prelude
섹션 제목: “Prelude”LanguageExt의 정적 헬퍼 메서드 모음. using static LanguageExt.Prelude;로 사용.
Pure Function (순수 함수)
섹션 제목: “Pure Function (순수 함수)”부수 효과 없이 입력에 대해 항상 같은 출력을 반환하는 함수.
Railway Oriented Programming (철도 지향 프로그래밍)
섹션 제목: “Railway Oriented Programming (철도 지향 프로그래밍)”성공/실패 경로를 철도 선로에 비유한 함수형 오류 처리 패턴.
성공 경로 ─────────────────────────▶ ↘ ↘ 실패 경로 ────▶────────▶───────────▶Sealed Class (봉인 클래스)
섹션 제목: “Sealed Class (봉인 클래스)”상속이 금지된 클래스. 값 객체는 sealed로 선언하는 것이 권장됨.
Short-Circuit (단락)
섹션 제목: “Short-Circuit (단락)”Bind 체인에서 실패 발생 시 이후 연산을 건너뛰는 동작.
SimpleValueObject
섹션 제목: “SimpleValueObject”단일 값을 래핑하는 기본 값 객체 클래스.
SmartEnum
섹션 제목: “SmartEnum”행위와 속성을 가진 열거형. Ardalis.SmartEnum 라이브러리 기반.
Success-Driven Development (성공 주도 개발)
섹션 제목: “Success-Driven Development (성공 주도 개발)”예외 대신 명시적 결과 타입으로 성공 경로를 중심으로 개발하는 방법론.
TypedValidation<TValueObject, T>
섹션 제목: “TypedValidation<TValueObject, T>”ValidationRules<T>의 반환 타입으로, 검증 체이닝 중 값 객체 타입 정보를 전달하는 readonly struct. Validation<Error, T>로 암시적 변환 가능.
Unit
섹션 제목: “Unit”반환값이 없음을 나타내는 타입. void 대신 사용하여 함수형 조합 가능.
Fin<Unit> SaveData(data) => unit;Validation<Error, T>
섹션 제목: “Validation<Error, T>”병렬 검증과 오류 수집을 지원하는 타입. Apply 패턴과 함께 사용.
ValidationRules
섹션 제목: “ValidationRules”타입 파라미터를 한 번만 지정하여 검증 체인을 시작하는 정적 클래스. NotNull, NotEmpty, MinLength, MaxLength 등의 시작 메서드와 ThenNotEmpty, ThenMaxLength 등의 체이닝 메서드를 제공. 에러 코드에 값 객체 타입 이름이 자동으로 포함됨.
ValidationRules<Email>.NotNull(value).ThenNotEmpty().ThenMaxLength(255)Value Equality (값 동등성)
섹션 제목: “Value Equality (값 동등성)”참조가 아닌 값으로 동등성을 판단. Equals, GetHashCode 구현 필요.
Value Object (값 객체)
섹션 제목: “Value Object (값 객체)”식별자 없이 값으로만 정의되는 불변 객체. DDD의 핵심 빌딩 블록.
특성:
- 불변성 (Immutability)
- 값 동등성 (Value Equality)
- 자체 검증 (Self-Validation)
- 부수 효과 없음 (Side-Effect Free)
다음 단계
섹션 제목: “다음 단계”참고 자료를 확인합니다.
→ D. 참고 자료