Books 10

객체지향의 사실과 오해 - 객체 지도

이번 챕터는 글로 써 내려가는 것보다 그림을 통해 이해하는 게 쉽다. 길을 묻는 방법은 현재의 마을에서 다른 마을로 이동하는 현재의 요구만을 만족시킬 수 있다. 지도는 현재의 목적뿐만 아니라 다양한 목적을 위해 재사용될 수 있다. 즉 지도는 범용적이다. 훌륭한 기능은 훌륭한 소프트웨어를 만들고 훌륭한 구조는 훌륭한 소프트웨어를 만들기 위한 필요조건이다. 게임 플레이어들은 게임 도메인을 캐릭터와 몬스터, 그리고 아이템 간의 관계로 표현한다. 중고 자동차 판매상은 구매되는 자동차와 판매되는 자동차의 교환으로 자동차 도메인을 바라본다. 코드의 구조가 도메인의 구조를 반영하기 때문에 도메인을 이해하면 코드를 이해하기가 수월해진다. 시스템에 할당된 커다란 책임은 시스템 안의 작은 규모의 객체들이 수행해야 하는 더..

객체지향의 사실과 오해 - 책임과 메시지

여러 내용들이 가리키는 하나의 목적은 소프트웨어의 유연한 변경, 즉 유지보수를 편하게 하는 것 자율성 객체가 어떤 행동을 하는 유일한 이유는 다른 객체로부터 요청을 수신했기 때문이다. 요청을 처리하기 위해 객체가 수행하는 행동을 책임이라고 한다. 자율적인 객체란 스스로의 의지와 판단에 따라 각자 맡은 책임을 수행하는 객체를 의미한다. 모자 장수는 왕에게 증언할 책임은 있지만, 증언을 위한 구체적인 방법이나 절차에 대해서는 최대한의 자유를 누린다. 여기서 문제는 여러 책임들이 모자 장수가 증언하기 위해 선택할 수 있는 자유의 범위를 지나치게 제한한다는 점이다. 두 번째 모자 장수는 자율적으로 책임을 수행할 수 없다. 객체가 자율적이기 위해서는 객체에게 할당되는 책임의 수준 역시 자율적이어야 한다. 그러나 ..

객체지향의 사실과 오해 - 타입과 추상화 | 역할, 책임, 협력

책을 읽으며 객체지향과 더불어 하나의 컴포넌트가 가지게 되는 역할과 책임에 대해서 계속 생각하게 된다. 재사용성이 가능한 컴포넌트를 만들기 위해서 작은 단위의 컴포넌트로 잘게 쪼개는 상황이 생기는데, 이때 조금 더 각각의 컴포넌트들이 역할과 책임을 작게 작게 가져가게 된다. 많은 설명이 개념 중심이라 배운 것들을 어디서 적용해볼지 고민도 많이 해봐야겠다. 결국에는 직접 설계하고 코드를 짜봐야 내 것이 되니깐... 코드를 빨리 짜는 것이 중요한 게 아니라 유지보수성이 뛰어난 애플리케이션을 구축하기 위해서는 견고한 설계가 우선시 되어야 한다. 타입과 추상화 지하철 승객의 목적 : 하나의 역에서 다른 역으로 이동하는 것 승객이 원하는 것 : 빠르게 목적지에 도착할 수 있는지를 직관적이고 단순하게 보여주는 것 ..

객체지향의 사실과 오해 - 이상한 나라의 객체

여러 개념들을 머릿속에서 잘 정립하지 않은 상태에서, 혹은 '개념을 정확히 이해하지 못한 채로 애플리케이션 설계를 하고 있지 않았나?' 반성해본다. 이전에는 뭉뚱그려서 자의적으로 해석했던 여러 개념들을 다시 한번 차곡차곡 정리할 수 있었다. 특히, 상태에 대한 개념과 애플리케이션 설계에서 행동을 중심으로 고민하고 프로그램을 설계해 나아가야 한다는 것이 굉장히 와닿았다. 같이 스터디를 한 친구들도 마찬가지인 것 같다. :) 잘못된 설계는 결국 많은 시간을 더 소요하도록 만드는데, 이런 가장 기본적인 개념이 설계를 함에 있어서 더 좋은 방향으로 가이드해주는 것이 아닐까? 들어가며, 물체가 여러 부분으로 구성되어 있더라도 함께 움직일 경우 그 물체를 하나의 유기적인 단위로 인식한다. 세상을 더 작은 객체로 분..

객체지향의 사실과 오해 - 협력하는 객체들의 공동체

객체란 현실 세계에 존재하는 사물에 대한 추상화라는 것 이다. 어플리케이션을 개발하면서 객체에 직접적으로 대응되는 실세계의 사물을 발견할 확률은 그다지 높지 않다. 객체지향 설계의 핵심 사상인 '연결완전성'을 설명하는 데 적합한 틀을 제공한다. 객체지향에서 가장 중요한 개념 세가지 역할 책임 협력 1장에서 나오는 카페에서 커피를 주문 후 커피를 받기까지의 과정 일반적으로 하나의 문제를 해결하기 위해 다수의 사람 혹은 역할이 필요하다. 한 사람에 대한 요청이 또 다른 사람에 대한 요청을 유발하는 것이 일반적이다. 요청은 연쇄적이다. 요청 받은 사람 또한 주어진 책임을 다하면서 지식이나 서비스를 제공한다. 요청의 방향과 반대 방향으로 연쇄적으로 전달된다. 역할과 책임 역할이라는 단어는 일반적으로 책임이라는 ..

실용주의 프로그래머 (Day 6, 7)

오늘 TIL 3줄 요약 현재 사용하는 도구들을 더 효율적으로 사용할 수 있도록 습관을 개선시켜보자. 테스트와 지속적인 메모, 그리고 디버깅을 통해 안정적이고 더 좋은 프로그램 설계해보자 항상 작은 단계를 밟아가며 프로그래밍을 하고 너무 먼 미래를 예측하려 하지말자. 대신에 언제나 교체 가능한 코드를 작성하여 대비하자. TIL (Today I Learned) 날짜 2022.03.24 - 2022.03.25 오늘 읽은 범위 3장. 기본도구 ~ 4장. 실용주의 편집증 책에서 기억하고 싶은 내용 쉘 스크립트를 통해 좀 더 효율적인 프로그래밍을 할 수 있다. 어느 정도 에디터를 써야 유창하다고 볼 수 있을까에 대한 과제 목록들 (마우스를 사용하지 않고 진행해보기) 디버깅에 대한 사고방식; 한발짝 뒤로 물러나서 버..

실용주의 프로그래머 (Day-5)

오늘의 노개북 미션은 단순했다. 복습과 다른 노개북 TIL을 3개 읽는 것 - 읽은 TIL 목록 https://cindybaby.notion.site/DAY-03-04-5b811fbb19ab4683aad52b66b47e14fc https://pleed0215.notion.site/TIL-2022-03-20-4ca7872472914687a2f74b7f66b8e477 https://hyuuny.tistory.com/56 모두 전체적으로 깔끔한 정리와 각 용어별 정리가 인상깊었다. 다른 사람들의 TIL을 통해 '어떻게 하면 좀 더 잘 읽힐 수 있는 글이 될 수 있을까?' 고민해보게 되는 하루 * 출근 전, 퇴근 후 조금씩 시간내어 책 읽는 것은 생각만큼 쉽진 않다! 그래도 이러한 과정을 통해 습관이 되면 좀 ..

실용주의 프로그래머 TIL (Day 3,4)

오늘 TIL 3줄 요약 DRY 원칙과 ETC (easier to change)를 따르자 예광탄 개발 방법 추정하기 TIL (Today I Learned) 날짜 2022.03.20 - 2022.03.21 오늘 읽은 범위 2장 실용주의 접근법 책에서 기억하고 싶은 내용 1. DRY 원칙과 ETC DRY를 따르지 않으면 똑같은 것이 두 군데 이상에 표현될 것이다. 하나를 바꾸면 나머지도 바꿔야 함을 기억해야 한다. 하지만 모든 코드의 중복이 지식의 중복은 아니라는 것을 알아야한다. 예를 들어, 코드가 동일하지만 표현하고자 하는 지식(목적)이 다를 때다. 각각 서로 다른 것을 검증하지만 우연히 규칙이 같은 것 뿐. 스스로 자꾸 물어보자. '내가 방금 한 일이 전체 시스템을 바꾸기 쉽게 만들까?, 어렵게 만들었을..

실용주의 프로그래머 TIL (Day-2)

오늘 TIL 3줄 요약 '깨진 창문'을 고치지 않은 채로 내버려 두지 말자. 지식 포트폴리오 관리는 투자 포트폴리오 관리와 매우 유사하다. 독자를 생각하며 코드를 쓰자 TIL (Today I Learned) 날짜 2022.03.19 오늘 읽은 범위 서문 ~ 1장.실용주의 철학 책에서 기억하고 싶은 내용 1. 깨진 창문을 내버려두지 말자. 나쁜 설계, 잘못된 결정, 혹은 형편없는 코드 등이 모두 깨진 창문이다. 발견하자 마자 고치자! 적절히 고칠 시간이 없다면 판자로 덮는 것만 이라도 하라한다. 더 이상의 손상을 예방하기 위해 나는 어떤 조치든 취해야 하며 내가 상황을 잘 관리하고 있다는 것을 보여주어야 한다. 2. 지식 포트폴리오 관리는 투자 포트폴리오 관리와 매우 유사하다. 우리에게 있어서 지식과 경험..