모던 C#: 타입 시스템 마스터하기

모던 C#: 타입 시스템 마스터하기

$31.31
Description
타입 시스템에 대한 진짜 이해, 어디까지 해봤나요?

C#은 단순하고 현대적인 언어처럼 보일 수 있지만, 그 내부에는 깊이 있는 개념들이 숨어 있습니다. 그중에서도 '타입 시스템'은 모든 C# 프로그램의 기반이자, 좋은 설계를 위한 핵심 도구입니다. 《모던 C# - 타입 시스템 마스터하기》는 값 타입과 참조 타입의 차이를 단순한 문법 설명에 그치지 않고, 코드 설계와 성능, 의미 전달까지 연결해 설명하는 해설서입니다.

이 책은 특히 ‘왜 값을 값 타입으로 만들어야 하는가’라는 질문에 명확한 답을 제시합니다. 값 타입은 단순히 성능 향상을 위한 수단이 아니라, 코드에 의도를 명확히 담아내는 방법입니다. 예를 들어 int 대신 Meter, Temperature와 같은 도메인에 특화된 타입을 사용함으로써, 해당 값이 어떤 용도로 쓰이는지를 코드 레벨에서 바로 이해할 수 있게 만듭니다. 이는 곧 코드의 안전성과 가독성을 높이고, 협업과 유지보수의 효율성까지 향상시키는 결과로 이어집니다.

《모던 C#》은 복사와 참조의 작동 방식, 값 타입의 설계 기준, 메모리 구조와 성능 측정, 도메인 모델링에서의 타입 활용 등, 타입 시스템의 본질을 다양한 각도에서 조망합니다. C#의 최신 문법을 나열하는 대신, 앞으로도 변하지 않을 '핵심'을 중심에 두고 설명하며, 실무에서 적용 가능한 통찰을 제공합니다.
저자

스티브러브

저자:스티브러브
C#을사용해20여년이상개발을계속한전문개발자이다.
물류,공공서비스,회계부문등다양한업계에서C#을사용했다.
CVu,themembers’journaloftheACCU(https://accu.org)의편집자인동시에다양한콘퍼런스에서연사로활동하고있다.

역자:김모세(creatinov.kim@gmail.com)
소프트웨어엔지니어,소프트웨어품질엔지니어,애자일코치등다양한역할로소프트웨어개발에참여했다.
재미있는일,나와조직이함께성장하도록돕는일을하고자2019년부터번역을시작했다.여러일본어/영어IT기술서적및실용서적을번역했다.

목차

감사의말
들어가며

1장타입시스템활용하기
좋은이름의가치
타입을이용해명확하게하기
이름있는인수
커스텀타입
캡슐화
불변성
값검증
테스팅
리팩터링
매직넘버를이름있는상수로대체하기
속성과값을단순화하기
산술연산자오버로딩
새로운타입에대한필요를결정하기
단위인코딩하기
열거형을사용해단위를아이템화하기
정적생성메서드
설계의대칭성
단위를명시적으로만들기
가장자연스러운사용방법선택하기
단위의의미를사용해타입반환하기
완전한형태의캡슐화된값
타입추상화위치결정하기
정리

2장값타입과참조타입
사용자정의타입
구조체와클래스
레코드와레코드구조체
상속
타입인스턴스의수명
변수
변수vs값
결정적할당
인스턴스와스토리지
내장된값
박스된값
시맨틱과타입
공통타입시스템
복사시맨틱
레코드,구조체,값시맨틱
생성과초기화
기본초기화
인스턴스생성자
필드초기자
객체초기자
비파괴변형
null값과기본값
제네릭과null
제네릭과기본값
nullable값타입
nullable참조타입
null-forgiving연산자
정리

3장참조매개변수와값매개변수
메서드매개변수와인수
참조타입vs참조로전달되는매개변수
값타입과매개변수
참조의값
참조변수와앨리어싱
변경할수있는참조로전달하는매개변수
참조로참조전달하기
참조로값전달하기
출력매개변수다루기
참조전달매개변수의한계
속성값
참조전달매개변수에대한오버로딩
필드사용하기
확장메서드
사이드이펙트와다이렉트이펙트
변경vs생성
선언적코드와성능
읽기전용참조및참조로반환하기
참조로값반환하기
데이터수정방지하기
범위안에서참조전달변수유지하기
성능vs단순함고려하기
변경할수있는참조전달매개변수정리
정리

4장암묵적복사하기와명시적복사하기
단순한할당으로복사하기
값복사동작
읽기전용속성vs불변타입
새객체만들기
값덮어쓰기
값타입생성하기
레코드를값타입처럼복사하기
불필요한박스하기식별하기
인터페이스로박스하기
메서드호출안
메서드매개변수와인수
값으로전달하기와반환하기
속성에접근하기
연산자와함께표현식사용하기
반환타입인스턴스수정하기
참조타입속성
인스턴스메서드와가변성
읽기전용매개변수를위한인수로서의속성
방어적복사본
변경할수있는값타입과in매개변수
자동속성vs비자동속성
읽기전용참조변수
읽기전용필드
변경방어하기
읽기전용접근자와메서드
읽기전용타입
정리

5장등치타입
내장등치
정수
부동소수점값
참조등치
문자열등치및값등치
클래스에대한커스텀등치
등치연산자정의하기
null과의비교다루기
타입안전한비교만들기
해시코드다루기
구조체와등치
구조체에대한Equals오버라이드하기
값박스하기및신원비교하기
제네릭변수비교하기
제네릭코드와Equals메서드
IEquatable인터페이스
컴파일러에의해생성된등치
레코드및레코드구조체
nullable값에대한등치
값튜플과등치
정리

6장값의특성
값vs참조시맨틱
복사및등치비교동작
가변성
기계적문법(메커니즘)vs의미적문법(시맨틱)
객체관계
객체의종류
객체특성
객체역할모델링을위한설계개선
추상과용어
중복제거하기
클래스불변량구축하기
대칭성을사용해명확하게만들기
캡슐화와public인터페이스
인터페이스확장하기
내부인터페이스줄이기
추상화조합하기
값시맨틱과참조시맨틱선택하기
기본변수의함정회피하기
커스텀동작vs생성된동작구현하기
생성된메서드오버라이드하기
순서비교
동등vs등치
비교를위한계약
다른유형의순서
균일성과일관성의위험성
산술타입과비산술타입
비표준적연산자의동작
정리

7장값타입과다형성
값타입이봉인돼있는이유
구현상속
클래스에대한값기반등치
파생된클래스에서의등치동작
등치비교와타입대체
포함다형성과서브타이핑
가상메서드의Input과Output타입다루기
타입의계약유지하기
레코드타입상속하기
구현상속피하기
타입을상속하지않고포함하기
제네릭을사용한매개변수를갖는다형성
제네릭제약사항과프로토콜인터페이스
제네릭메서드매개변수와타입추론
매개변수화된타입
오버로딩을통한애드혹다형성
오버로드된연산자를갖는심볼릭다형성
다형성을위한제네릭델리게이트
변환을사용한다형성강제
확대변환vs축소변환
표현에대해
목적에대해
정리

8장성능과효율
성능측정하기및최적화하기
JIT컴파일러
성능벤치마크
프로파일러
Equals를사용해기본성능측정하기
단순함에숨겨진비용
ValueType.Equals메서드
ValueType.GetHashCode메서드
HashCode.Combine메서드
등치최적화하기
IEquatable의영향
속성접근
등치연산자
타입이성능에미치는영향
복사비용측정하기
큰인스턴스복사하기
객체생성비용측정하기
컴파일러가생성한Equals메서드측정하기
공통적인이디엄과프랙티스가성능에미치는영향
루핑과이터레이션
패턴매칭과셀렉션
정리

마치며
부록:더읽어보기

출판사 서평

주요내용

1장.타입시스템활용하기
의미있는사용자정의값타입을설계하고,코드의가독성과명확성을높이는방법을다룹니다.

2장.값타입과참조타입
이둘의동작방식차이와메모리구조,복사/등치비교시의영향등을정리합니다.

3장.참조매개변수와값매개변수
메서드호출시어떤방식으로인자가전달되는지,성능과안전성에어떤영향을미치는지설명합니다.

4장.암묵적복사와명시적복사
값복사에따른예기치않은결과를방지하기위한전략을살펴봅니다.

5장.등치타입
값의비교방식,안전한동등성구현방법,컴파일러기능활용팁등을다룹니다.

6장.값의특성
값타입이단순한저장소를넘어의미를가지는설계단위로기능할수있는조건들을설명합니다.

7장.값타입과다형성
값타입에서상속과다형성이어떻게제한되는지,그대안을중심으로설명합니다.

8장.성능과효율
타입설계가애플리케이션성능에끼치는영향과,GC(가비지컬렉션)를고려한최적화전략을제시합니다.