CS/CS Book (29) 썸네일형 리스트형 [컴퓨터 시스템 딥다이브] ch04.01 ~ 03 바이너리와 데이터 표현 💡이 글은 컴퓨터 시스템 딥다이브(수잰 J. 매슈스, 한빛미디어 2024)를 읽고 적은 글입니다.인트로부터 좋았다. 그냥 이건 이래가 아니라 어떻게 쓸모가 있고 인류가 정보를 기록하고 저장하는 과정의 발전과 사례들을 간략하게 나열해 주면서 거대한 저장 장치인 디지털 컴퓨팅을 소개해준다. 이 부분들을 통해 그냥 배우기만 했다면 컴퓨터의 쓸모에 대해 좀 더 생각해 보게 되지는 않았을 텐데 인류에게 있어 기록과 저장으로서의 컴퓨터의 의미를 떠올려볼 수 있어서 좋다. 바이너리와 데이터 표현은 컴퓨터 과학이 추상화의 예술이라는 말을 다시 한번 느끼게 해 준다.전기신호가 있고(1), 없는(0) 것으로 이진수로 표현할 수 있고 그 이진수의 수열로 값을 표현할 수 있게 된다. 이진수 자릿수가 한 자리씩 늘어날 때마다.. [컴퓨터 시스템 딥다이브] ch06 어셈블리에 뛰어들기 💡이 글은 컴퓨터 시스템 딥다이브(수잰 J. 매슈스, 한빛미디어 2024)를 읽고 적은 글입니다. 컴퓨터가 동작하기 위해서는 0,1로 되어있는 기계어가 필요하다.어셈블리어는 기계어에 가깝다. 효율적인 어셈블리 코드를 작성하기 위해서는 기계 아키텍처 동작을 구석구석 이해 해야 한다고 한다.컴파일러 개발 이후에는 컴파일러가 사람이 읽을 수 있는 형태의 언어를 기계가 이해할 수 있는 언어로 번역해 주기에 어셈블리를 배울 이유가 모호해질 수 있다 느낄 수 있다.하지만 어셈블리를 배워야 할 타당한 이유가 있다.가치 있는 프로그램의 세부 사항을 감추는 고수준의 추상화아래의 코드 경우 결과가 어떻게 될 것인가assign() 함수를 호출하지만 호출하는 곳에서 return 값을 변수에 담아두지 않는다.adder() 함.. [오브젝트] ch13 서브클래싱과 서브타이핑 💡이 글은 조영호, 『오브젝트: 코드로 이해하는 객체지향 설계』, 위키북스(2019) 책을 읽고 작성한 글입니다. 타입부터 시작하여 설명을 진행한다비트열에 의미를 부여하고 제약과 규칙을 정한게 타입을 말한다. 객체지향 관점에서의 타입은 수신할 수 있는 메시지의 종류를 정의한다는 것이다. 어떤 행동을 하게 될지 결정되는 것이 타입이고 타입의 경우 일반화된 것에서 부분 집합이 되는 타입은 특수화 되었음 "프로그래밍 언어"> "객체지향 언어" > "클래스 기반 언어" 등의 에시로 설명해주어 와닿았다. 글의 전개가 잘 읽히게 구성되어 있어 객체지향 뿐만 아니라 글쓰기에 대해서도 배우는 기분이다. [오브젝트] ch12 다형성 💡이 글은 조영호, 『오브젝트: 코드로 이해하는 객체지향 설계』, 위키북스(2019) 책을 읽고 작성한 글입니다. 저자는 다형성(polymorphism) 그리스어로 다양한을 의미하는 poly와 형태를 의미하는 morph의 합성어임을 12장 앞에서 설명해 주며 시작한다. 동물 클래스가 있을 때 소리 내는 행위가 있고 고양이 클래스에서는 야옹, 강아지 클래스에서는 왈왈이라 하였을 때 고양이의 소리 내는 소리 내는 것을 동물 클래스의 소리 내는 것으로 형태를 바꾸어 표현할 수 있다.이렇게 소리 낸다는 행위는 같지만 누가 그 행위를 하였는가에 따라 다양하게 표현할 수 있게 된다.다형성의 분류다형성의 분류에는 매개변수 다형성, 포함 다형성, 오버로딩 다형성, 강제 다형성 4가지가 있음을 알려준다. 매개변수 다형.. [컴퓨터 시스템 딥다이브] ch03 C 디버깅 도구 💡이 글은 컴퓨터 시스템 딥다이브(수잰 J. 매슈스, 한빛미디어 2024)를 읽고 적은 글입니다.GDB, Valgrind, DDD 등 디버깅 도구들에 대해 소개 및 활용방법에 대해 알려준다.아무래도 컴퓨터 시스템이 주제이다 보니 이후에 나오는 내용들에 대해 실습을 할 수 있고 그럴 때 디버깅을 해야 할 일이 생기기 쉬울 테니 알려주는 것 같다.C++ 홍정모님의 자료구조 강의를 듣고 실습 중이었는데 책에 소개된 디버깅 방법들을 활용해 보았다.Source CodeLinkedNode.cpp#include using namespace std;struct Node{ int item = 0; // item next); }}void IterPrint(Node* node){ // TODO: std::cout it.. [오브젝트] ch07 객체분해 💡이 글은 조영호, 『오브젝트: 코드로 이해하는 객체지향 설계』, 위키북스(2019) 책을 읽고 작성한 글입니다. 저자의 글 전개 방식에 다시 한번 감탄하며 읽을 수 있었다. 단기 기억과 장기 기억을 이야기하며 사람의 단기 기억은 한번에 5~9개 정도만 기억 가능하고 단기 기억에 넣을 수 있는 정보량을 넘어서면 인지 과부하가 되어 문제 해결 능력이 급격히 떨어짐을 알려주며 시작한다. 인지 과부하를 방지하는 좋은 방법으로 단기 기억에 보관할 정보의 양을 조정하는 것이라 하며 불필요한 정보를 제거하고 문제 해결에 필요한 핵심만 남기는 작업을 추상화라 한다. 일반적인 추상화 방법으로 한 번에 다루어야 하는 문제 크기를 작게 줄이는 것, 이렇게 큰 문제를 해결 가능한 문제로 나누는 작업을 분해(decompost.. [컴퓨터 시스템 딥다이브] ch02 C프로그래밍 심화 part02(2.7~2.9) 💡이 글은 컴퓨터 시스템 딥다이브(수잰 J. 매슈스, 한빛미디어 2024)를 읽고 적은 글입니다. 구조체 구조체는 서로 다른 데이터 타입을 하나로 묶을 수 있다. typedef struct student { size_t age; char name20 } t_student; 구조체 내부 필드에 동적할당하여 쓰는 경우 코드에서 head를 반복문 안에서 아래와 같이 쓰는 것을 보고 저렇게 하면 처음 head에 넣은 값(여기서는 10)이 head가 앞에 있지 않을 텐데 어떻게 되는 거지 하고 궁금하여 코드를 적어보았다. temp->data = i; temp->next = head; head = temp; #include #include typedef struct node { int data; struct nod.. [오브젝트] ch05 책임 할당하기 조영호, 『오브젝트: 코드로 이해하는 객체지향 설계』, 위키북스(2019) 책을 1개 챕터씩 읽고 후기를 매주 일요일 23:59까지 남기는 챌린지 스타일의 스터디를 하고 있다. 지금은 23:59를 넘긴 새벽이지만 읽은 감상을 남겨본다. 역시 여러 번 조금씩 분량을 나누어서 읽어야 하는 책이라 생각 든다. 이번에도 몰아치기로 읽었지만 이번 장은 지난 장의 데이터 중심 설계의 단점을 지적했던 부분에서 나아가서 책임 할당에 대해 이야기하고 있다. 책을 삼키느라 다 소화하지 못하였기에 기억에 남는 키워드와 감상 위주로 짧게 남겨보겠다. 캡슐화! 유연한 설계! 객체보다는 행동! 메시지를 정하고서 객체를 선택한다. 이번 챕터는 구현을 통해 개념을 좀 더 와닿게 구체적으로 설명해준다 생각 들었다. public 키워드.. [Clean Code] 노마드코더 챌린지 후기 책을 완독 한 것은 아니고 10장까지만 읽고 후기를 남기고 일부 실습을 한 부분이었지만 먼지 쌓여있던 책을 털어낼 수 있던 것만 해도 시작이 반이다라는 말을 오랜만에 공감해볼 수 있었습니다. 블로그에 글 쓰는 것에 대해서도 부담감이 있었는데 가볍게 적어볼 수 있어서 덕분에 다른 책 후기도 남겨보고 책 읽고 블로그에 감상 남긴 것을 인증하는 스터디들도 만들게 되었습니다. 로버트 마틴분의 clean 시리즈에 대해 비판적으로 보는 시선들도 있는 상태에서 보았어서 결국 저자의 관점에서의 clean code이다라고 생각하며 보았었지만 통계와 시각화를 포함하는 자료들이 있었기에 저자의 글에 설득되어 가며 글 읽게 되었습니다. 주석에 관해서도 안남기고 어떤 의미인지 알릴 수 있으면 좋다는 관점과 그럼에도 남겨야 한다.. [컴퓨터 시스템 딥다이브] ch02 C프로그래밍 심화 part01(2.1~2.6) 💡이 글은 컴퓨터 시스템 딥다이브(수잰 J. 매슈스, 한빛미디어 2024)를 읽고 적은 글입니다. 이번 장에서는 배열, 포인터, 동적 메모리 할당, 문자열 및 문자열 라이브러리, C구조체, C의 입출력 등에 대해서 다룬다. 이미지를 통해 메모리 구조, 포인터와 동적할당을 잘 보여주어서 굉장히 접근하기 좋았다. 포인터를 통해 데이터에 간접 접근을 할 수 있다. 간접 접근 함으로써 큰 데이터를 직접 옮기지 않고 가리키는 포인터만으로 가볍게 처리할 수 있다. 포인터는 표지판에 비유할 수 있을 거 같다. 종묘는 한 곳에 있지만 종묘를 가리키는 표지판(포인터)은(는) 여러 개가 있을 수 있고 다른 곳에서 종묘(데이터)에 접근하고 싶다면 표지판(포인터)을 통해 접근할 수 있다. 굳이 종묘라는 곳을 똑같이 새롭게 만.. 이전 1 2 3 다음