본문 바로가기

CS/CS Book

(24)
[오브젝트] 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의 입출력 등에 대해서 다룬다. 이미지를 통해 메모리 구조, 포인터와 동적할당을 잘 보여주어서 굉장히 접근하기 좋았다. 포인터를 통해 데이터에 간접 접근을 할 수 있다. 간접 접근 함으로써 큰 데이터를 직접 옮기지 않고 가리키는 포인터만으로 가볍게 처리할 수 있다. 포인터는 표지판에 비유할 수 있을 거 같다. 종묘는 한 곳에 있지만 종묘를 가리키는 표지판(포인터)은(는) 여러 개가 있을 수 있고 다른 곳에서 종묘(데이터)에 접근하고 싶다면 표지판(포인터)을 통해 접근할 수 있다. 굳이 종묘라는 곳을 똑같이 새롭게 만..
[오브젝트] ch04 설계 품질과 트레이드오프 후기 데이터 중심 설계의 단점을 언급한다. 상태를 기반으로 하고 설계라는 것은 결국 변화할 수밖에 없는데 초기에 데이터에 집중해서 만들다 보면 추상화가 아닌 구체화가 되고 캡슐화가 안된 코드가 나오게 되어서 좋지 않다라고 나는 이해하였다. 응집도와 결합도에 대해서도 여러 코드를 기반으로 설명해 준다. 읽으면서 드는 생각은 내가 그동안 주로 죽어있는 프로그램을 만들었구나라는 생각이었다. 한번 만들고 계속 유저가 있어서 피드백 받는 프로그램들이 아니었기에 처음 설계한 방식에서 바뀔 일이 잘 없었다. 코드가 보기 좋지 않아서 수정하는 정도가 아닌 다음에는 기능적으로 변경이나 추가가 없었다. 그랬기에 책에서 나오는 데이터 중심으로 설계한 프로그램의 사례의 단점이 확 와닿지 않았다. 나쁜 설계와 좋은 설계를 같이..
[컴퓨터 시스템 딥다이브] ch00, 01 시작하며, C 프로그래밍 기초 이 글은 컴퓨터 시스템 딥다이브(수잰 J. 매슈스, 한빛미디어 2024)를 읽고 적은 글입니다. ch00 시작하며 컴퓨터 시스템이 무엇인지 소개하고 시작한다. 컴퓨터 구조, 컴퓨터 시스템, 시스템 프로그래밍, 운영체제 컴퓨터 구조와 운영체제는 확실하게 구분되었었지만 컴퓨터 구조, 컴퓨터 시스템, 시스템 프로그래밍의 경우 개인적으로 구분이 모호했었다. 책에서는 컴퓨터 시스템을 하드웨어(CPU, RAM, DISK) + 운영체제라며 확실하게 범위를 명시해 준다. 범용성에 중점을 둔다 하며 그 의미는 재사용이 가능하다는 의미라 한다. 하드웨어와 시스템 소프트웨어(운영체제)에 바뀌더라도 프로그램의 실행을 지원한다. 현대 컴퓨터 소개에 데스크탑, 랩탑을 넘어서 라즈베리파이까지 소개해주어 좋았다. 라즈베리파이의 경우..
[오브젝트] ch03 역할, 책임, 협력 OOP 패러다임의 본질은 협력하는 객체들의 공동체를 만드는 것 “객체지향 설계의 핵심은 협력을 구성하기 위해 적절한 객체를 찾고 적절한 책임을 할당하는 과정에서 드러난다.”73p 하지만 적절하다는 표현에 대한 의구심은 들었다. 적절하다는 것은 이미 경험해본 사람만이 정할 수 있는 것 아닌가 와 경험해 본 사람들 간에서도 차이가 있을 수 있다. 아직은 초반이니 그려러니하고 우선 읽어 나아가 보고 적용해 봐야 저 말의 의미를 조금은 알 수 있겠다 싶다. 협력 “객체들이 애플리케이션의 기능을 구현하기 위해 수행하는 상호작용을 협력이라고 한다.”74p “객체가 협력에 참여하기 위해 수행하는 로직은 책임이라고 부른다.”75p “객체들이 협력 안에서 수행하는 책임들이 모여 객체가 수행하는 역할을 구성한다.”75p ..
[서평] 러스트 프로그래밍 공식 가이드 2판 JYP "러.스.트" 처음 노마드 코더의 영상을 보고 C와 속도차이가 그렇게 크지 않다는 것과 (c가 1.0걸린다면 rust는 1.05) 메모리 오염 등의 이슈를 사전에 방지할 수 있다는 점에서 멋진 언어라 생각 들었다. 시스템콜 쓰는 프로그램이나 시스템 프로그래밍을 한다면 러스트를 어지간하면 써야겠단 생각도 들게 했다. 책 구성 러스트 설치 및 기본적인 언어 형식에 대한 설명부터 러스트의 특징들(소유권, 제네릭 타입, 트레이트) 등을 소개하며 진행된다. 마지막에는 웹서버를 구축하는 것으로 끝은 맺는다. 감상 우선 가독성이 좋다. 오픈 커뮤니티에서 참여해서 그런지 집단지성의 힘을 느낄 수 있었다. 온라인으로도 무료로 볼 수 있지만 나에게는 종이책이 좀더 잘 읽혔기에 더 가독성이 좋다 느꼈다. 읽으면서 드..
[오브젝트] ch02 객체지향 프로그래밍 🖋️ 후기 객체지향적으로 코딩을 한다고 하면 우선 클래스를 생각하고 동작이 무엇이고 그에 필요한 데이터는 무엇인가부터 생각했었습니다. 객체지향은 객체를 지향하라는 것. 그렇기에 클래스보다 객체에 초점을 맞추어야 진정한 객체지향 패러다임으로의 전환을 얻을 수 있다는 것이 인상 깊습니다. 어떤 객체가 필요한지 고민, 어떤 객체들이 어떤 상태와 행동을 가지는지 먼저 결정한다. 객체는 기능을 구현하기 위해 협력하는 공동체의 일원 객체지향에서 캡슐화가 중요하며 재사용성이 중요합니다 상속을 통해 중복되는 부분은 부모클래스로 받아와서 재사용성을 높일 수 있습니다. 하지만 상속의 경우 자식 클래스에서 부모클래스에 접근할 수 있고 부모클래스가 변동될 때 자식클래스도 바뀌기 쉽다는 점과 부모, 자식 클래스의 관계를 컴파일..