전체 글 82

[뇌를 자극하는 윈도우즈 시스템 프로그래밍] Chapter3, Chapter10

📚 목차🔸 Chapter 3: 64비트 기반 프로그래밍 🔸 Chapter 10: 컴퓨터 구조에 대한 세 번째 이야기 🔸 32비트 vs 64비트, 구분 기준이 뭐야?컴퓨터가 "몇 비트"인지를 나누는 기준은 두 가지다.한 번에 전송/수신할 수 있는 데이터 크기 (버스 폭)한 번에 처리할 수 있는 데이터 크기 (ALU 처리 단위)이 두 가지가 모두 32비트면 32비트 컴퓨터, 64비트면 64비트 컴퓨터다.📌 만약 처리 능력은 64비트인데 전송은 32비트라면?정답은 없다. 제조사는 64비트라 홍보하고, 성능에 민감한 사람은 32비트라 부를 것이다.🔸 왜 32비트 시스템에서는 32비트 포인터가 최선이었나?포인터 연산을 생각해보자. cppint arr[5] = {1, 2, 3, 4, 5};int* p..

[Effective C#] 예외 처리

📚 목차🔸 ITEM 45: 메서드가 실패했음을 알리기 위해서 예외를 이용하라🔸 ITEM 46: 리소스 정리를 위해 using과 try/finally를 활용하라 🔸 ITEM 47: 사용자 지정 예외 클래스를 완벽하게 작성하라🔸 ITEM 48: 강력한 예외 보증을 준수하는 것이 좋다🔸 ITEM 49: 예 catch 후 예외를 다시 발생시키는 것보다 예외 필터가 낫다🔸 ITEM 50: 예외 필터의 다른 활용 예를 살펴보라 🔷 아이템 45: 메서드가 실패했음을 알리기 위해서 예외를 이용하라예외 vs 오류 코드메서드가 실패했을 때 알리는 방법이 두 가지 있다. 오류 코드를 반환값으로 전달하는 방식은 호출자가 무시해버릴 수 있다. 예외는 콜 스택을 따라 전파되므로 무시할 수 없고, 오류를 발생시키는..

[Effective C#] LINQ 활용

📚 목차🔸 ITEM 29: 컬렉션을 반환하기보다 이터레이터를 반환하는 것이 낫다🔸 ITEM 30: 루프보다 쿼리구문이 낫다.🔸 ITEM 31: 시퀀스에 사용할 수 있는 조합 가능한 API를 작성하라🔸 ITEM 32: Action, Predicate, Function과 순회 방식을 분리하라🔸 ITEM 33. 필요한 시점에 필요한 요소를 생성하라.🔸 ITEM 34. 함수를 매개변수로 사용하여 결합도를 낮춰라.🔸 ITEM 35. 확장 메서드는 절대 오버로드 하지마라.🔸 ITEM 36. 쿼리 표현식과 메서드 호출 구문이 어떻게 대응되는지 이해하라.🔸 ITEM 37. 쿼리를 사용할 때는 즉시 평가보다 지연 평가가 낫다.🔸 ITEM 38. 메서드보다 람다 표현식이 낫다.🔸 ITEM 39. fu..

[Effective C#] Generic 활용

📚 목차🔸 ITEM 18: 반드시 필요한 제약 조건만 설정하라.🔸 ITEM 19: 런타임에 타입을 확인하여 최적의 알고리즘을 사용하라.🔸 ITEM 20: IComparable 와 IComparer 를 이용하여 객체의 선후 관계를 정의하라.🔸 ITEM 21: 타입 매개변수가 IDisposable을 구현한 경우를 대비하여 Generic 클래스를 작성하라.🔸 ITEM 22. 공변성과 반공변성을 지원하라.🔸 ITEM 23. 타입 매개변수에 대해 메서드 제약 조건을 설정하라면 Delegate를 활용하라.🔸 ITEM 24. 베이스 클래스나 인터페이스에 대해서 Generic을 특화하지 말라.🔸 ITEM 25. 타입 매개변수로 인스턴스 필드를 만들 필요가 없다면 Generic 메서드를 정의하라.🔸 I..

[Effective C#] .NET 리소스 관리

📚 목차🔸 ITEM 11: .NET 리소스 관리에 대한 이해🔸 ITEM 12: 할당 구문보다 맴버 초기화 구문이 좋다.🔸 ITEM 13: 정적 클래스 멤버를 올바르게 초기화하라.🔸 ITEM 14: 초기화 코드가 중복되는 것을 최소화하라.🔸 ITEM 15: 불필요한 객체를 만들지 말라.🔸 ITEM 16: 생성자 내에서는 절대로 가상 함수를 호출하지 말라.🔸 ITEM 17: 표준 Dispose 패턴을 구현하라.◾ GC 동작 원리C++ → 개발자가 직접 deleteC# → GC가 알아서 메모리 해제 대신 언제 해제할지 모름GC는 세대별로 관리한다0세대 → 새로 생성된 객체 GC가 가장 자주 검사, 빠름1세대 → 0세대에서 살아남은 객체2세대 → ..

[Effective C#] C#언어 요소

📚 목차🔸 ITEM 1: 지역변수를 사용할 때는 var를 사용하라🔸 ITEM 2: const보다는 readonly가 좋다🔸 ITEM 3: 캐스트보다는 is, as가 좋다.🔸 ITEM 4: string.Format()을 보간 문자열로 대체하라🔸 ITEM 5: 화권 별로 다른 문자열을 생성하려면 FormattableString을 사용하라🔸 ITEM 6: nameof() 연산자를 적극 활용하라🔸 ITEM 7: 델리게이트를 이용하여 콜백을 표현하라🔸 ITEM 8: 이벤트 호출 시에는 null 조건 연산자를 사용하라🔸 ITEM 9: 박싱과 언박싱을 최소화하라🔸 ITEM 10: 베이스 클래스가 업그레이드된 경우에만 new 한정자를 사용하라 ▪️ 아이템 1: var를 사용하라타입 추론을 컴파일러..

[뇌를 자극하는 윈도우즈 시스템 프로그래밍] Chapter1, Chapter4

📚 목차🔸 Chapter 1: 시스템 프로그래밍의 이해와 접근🔸 Chapter 4: 컴퓨터 구조의 접근 방법 시스템 프로그래밍이란?시스템(컴퓨터 시스템)의 범위하드웨어 + 운영체제시스템 프로그래밍컴퓨터 시스템을 활용하는 소프트웨어 개발모든 응용 프로그래밍에 시스템 프로그래밍이 있다window 운영체제 자체의 기능을 십분 활용하는 프로그래밍응용 소프트웨어 개발과의 차이점시스템 프로그래밍은 모든 응용 프로그램에 포함되는 요소컴퓨터 시스템의 주요 구성 요소 (컴구조 + 운영체제)CPU, 캐쉬컴퓨터 하드웨어 구조운영체제메인 메모리메모리 관리 기법하드디스크 컴퓨터 하드웨어 구성(전체)CPU중앙 처리 장치연산이 이뤄지는 원리는 무엇인가?메인 메모리RAM프로그램 실행 방식을 이해하는 것입출력 버스데이터 송 수신..

[Effective C++] Chapter 7, Chapter 8

📚 목차🔸 Chater 7: 템플릿과 일반화 프로그래밍 🔸 Chater 8: new 와 delete를 내 맘대로 41. 템플릿 프로그래밍의 암시적 인터페이스와 컴파일타임, 다형성클래스 및 템플릿은 모두 인터페이스와 다형성을 지원한다.템플릿 매개변수의 경우 인터페이스는 암시적이며 컴파일 타임 다형성을 사용한다.template void f(T x) { x.size(); // T는 size()를 제공해야 한다 x += 1; // T는 += 연산자를 제공해야 한다}​템플릿은 x가 어떤 타입인지 모르지만 해당 타입이 ‘size() 멤버 함수가 있을 것’ 이라는 전제를 하고 사용한다.컴파일러가 T 타입의 사용을 보고 **추론**한다. 템플릿은 컴파일 타임에 다형성을 제공한다.tem..

[Effective C++] Chapter 5, Chapter 6

📚 목차🔸 Chater 5: 구현🔸 Chater 6: 상속, 그리고 객체 지향 설계 26. 변수 정의는 늦출 수 있을 만큼 늦춰라변수는 정의되는 시점에 생성자 호출 + 메모리 확보가 자동으로 발생한다.필요도 없는 변수를 미리 만들지 말자는 것이 이번 파트의 목표장점필요 시점을 명확하게 알 수 있어 유지보수와 가독성이 좋아진다.예외처리로 사용되지 않을 상황을 방지하여 불필요한 메모리를 아낄 수 있다.필요 시점에 초기화 해줌으로써 안정성이 높아진다. → 초기화 오류 방지예외 (반복문)반복문은 내부에서 데이터를 초기화하는 것을 원칙으로하지만, 외부에서 정의하는 것이 효율적일 수 있다.문자열, 무거운 객체 등 반복문안에서 생성 및 파괴를 반복해 성능에 영항을 줄 수 있기 때문에 상황을 고려하여 초기화 시점..

[Effective C++] Chapter 3, Chapter 4

📚 목차🔸 Chater 3: 자원 관리🔸 Chater 4: 설계 및 선언책에 나오는 auto_ptr은 C++ 17 이후 완전 폐기현재는 unique_ptr, shared_ptr, weak_ptr 세가지가 존재한다unique_ptr : 단 하나의 소유자(owner)만 사용하는 스마트 포인터복사가 불가능하고 오직 이동만 가능하다소유자가 스코프를 벗어나면 자동 삭제된다가장 빠르고 가벼운 스마트 포인터보통 리소스를 오직 하나의 객체에서만 관리해야할 때 사용한다.shared_ptr : 여러 개의 소유자를 허용하는 스마트 포인터참조 카운팅으로 소유자 수를 관리 → 카운트가 0되면 자원 해제unique_ptr 보다 비용이 더 크다(참조 카운트 증가/감소 비용)복사가 가능함여러 객체가 같은 리소스를 공유해야 할 ..