ALL
인생의 중심 잡기 | "역사의 쓸모"를 읽고
서점을 구경하다 갑자기 교양서적을 사고 싶은 마음이 들어 교양 베스트셀러 항목 쪽으로 걸어갔다. 맨 위에 올려진 책들을 둘러보았다. 익숙한 얼굴이 들어간 책 띠지가 시선을 사로잡았다. 최태성 선생님이었다. 최태성 선생님은 내 마음속 은사로 자리 잡고 계신 분이다. 고등학생 시절 어떤 한국사 강의를 들을지 몰라 헤매던 와중 기대 없이 들어간 EBS에서 오히려 빛을 발견하게 해 준 분이다. "꿈은 명사가 아닌 동사여야 한다"는 말씀으로 그 시절 내 마음을 울렸던 분. 역시나 그 내용도 이 책에 쓰여 있었다. 망설임 없이 책을 집어 계산대로 향했다. 난 역사 지식에 참 약한 사람이다. 어릴 때는 역사 만화책을 읽었고 수험생 시절에도 한국사 강의를 열심히 듣고 좋은 성적도 받았지만, 현재 내 머릿속에 남은 건 ..
해피해킹 프로페셔널 하이브리드 Type-S 리뷰! 해피해킹 프로2와 비교! Happy Hacking Professional Hybrid type-s VS Happy Hacking Professional 2 ( + 타건 영상 )
회사에서 재택 업무기기 지원비로 30만 원을 지원해주는데요, 입사 후 6개월 동안 쓰지 않고 고민만 하다 결국 키보드를 사기로 마음을 먹었습니다 😎 저는 기존에 해피해킹 프로2 블랙 무각 모델을 사용하고 있었는데요, 그래서 그런지 아무리 둘러봐도 30만원 이하로는 눈에 들어오는 아이가 없더라고요.. 🥲 결국 제 사비를 보태서 해피해킹을 또 사기로 했습니다 ㅎㅎㅎ 친한 개발자분이 쓰시던 해피해킹을 선물받아서 쓰고 있었던 터라, 이번에는 새 상품을 사봐야겠다 싶었어요! 관세 38,160원까지 해서 거의 50만원에 얻은 녀석.. 상자를 열자마자 너무 예뻐서 감탄했습니다 ㅠㅠ 화이트 무각 너무 예뻐요!!!! 비교 사진 둘 다 예쁘긴 하죠?! 그래도 전 화이트가 더 취향.. :) 커스텀 키캡도 너무 잘 어울리더라..
9. 코드로 이해하는 의존성 관리 | 오브젝트 8장
협력은 필수적이지만 과도한 협력은 과도한 의존성을 낳아 애플리케이션을 수정하기 어렵게 만든다. 1. 의존성 이해하기 변경과 의존성 의존성은 실행 시점과 구현 시점에 서로 다른 의미를 가진다. 실행 시점: 의존하는 객체가 정상적으로 동작하기 위해서는 실행 시에 의존 대상 객체가 반드시 존재해야 함 구현 시점: 의존 대상 객체가 변경될 경우 의존하는 객체도 함께 변경됨 class PeriodCondition implements DiscountCondition { private dayOfWeek: DayOfWeek; private startTime: LocalTime; private endTime: LocalTime; public isSatisfiedBy(screening: Screening): boolean..
8. 객체에게 로직을 분배하는 방법, 객체 분해 | 오브젝트 7장
실제로 문제를 해결하기 위해 사용하는 저장소는 장기 기억이 아닌 단기 기억이다. 문제 해결에 필요한 요소의 수가 단기 기억의 용량을 초과하는 순간 인지 과부하가 발생한다. 인지 과부화를 방지하기 위해 불필요한 정보를 제거하고 현재의 문제 해결에 필요한 핵심만 남기는 작업이 추상화다. 가장 일반적인 추상화 방법은 한 번에 다뤄야 하는 문제의 크기를 줄이는 것이다. 큰 문제를 해결 가능한 작은 문제로 나누는 작업이 분해다. 추상화를 더 큰 규모의 추상화로 압축시킴으로써 단기 기억의 한계를 초월할 수 있다. 1. 프로시저 추상화와 데이터 추상화 프로그래밍 패러다임은 다음 두 가지로 결정된다. 프로그래밍을 구성하기 위해 사용하는 추상화의 종류 이 추상화를 이용해 소프트웨어를 분해하는 방법 모든 프로그래밍 패러다..
7. 코드로 이해하는 메시지와 인터페이스 | 오브젝트 6장
훌륭한 객체지향을 위해서는 클래스가 아닌 객체를 지향해야 한다. 협력 안에서 객체가 수행하는 책임에 추점을 맞춰야 한다. 책임은 객체가 수신할 수 있는 메시지의 기반이 된다. 객체지향 애플리케이션의 가장 중요한 재료는 객체들이 주고받는 메시지다. 매시지들이 객체의 퍼블리 인터페이스를 구성한다. 1. 협력과 메시지 클라이언트-서버 모델 클라이언트: 메시지를 전송하는 객체 Screening은 '가격을 계산하라' 메시지를 전송함으로써 도움 요청 Movie는 '할인 요금을 계산하라' 메시지를 전송함으로써 도움 요청 서버: 메시질르 수신하는 객체 Movie는 가격을 계산하는 서비스를 제공함으로써 메시지에 응답 DiscountPolicy는 할인 요금을 계산하는 서비스를 제공함으로써 메시지에 응답 협력: 클라이언트가..
바닐라JS(TS)로 리액트 SPA 구현하기 | (6) JSX 구현해보기
1. 기본 세팅 2. 클래스로 컴포넌트 구현 3. 클래스로 HashRouter 구현 4. 클래스로 BrowserRouter 구현 5. 간단한 웹 구현해보기 6. JSX 구현해보기 JSX란? React는 별도의 파일에 마크업과 로직을 넣어 기술을 인위적으로 분리하는 대신, 마크업과 로직을 모두 포함하는 “컴포넌트”라고 부르는 느슨하게 연결된 유닛으로 관심사를 분리합니다. JSX도 결국엔 표현식입니다. 컴파일이 끝나면, JSX는 JavaScript 객체로 인식됩니다. 이전 글에서, 우리는 마크업과 해당 엘리먼트 내의 로직을 따로 분리하여 코드를 작성했었습니다. JSX를 구현하여 이를 함께 포함할 수 있도록 해봅시다! JSX를 구현한 후, 우리는 컴포넌트 내 렌더함수에서 다음과 같은 형태로 컴포넌트를 작성하게..
6. 코드로 이해하는 객체의 책임 할당, GRASP 패턴 | 오브젝트 5장
어떤 객체에게 어떤 책임을 할당할지를 결정하는 것은 쉽지 않다. 책임 할당 과정은 일종의 트레이드오프이며, 올바른 책임을 할당하기 위해서는 다양한 관점에서 설계를 평가할 수 있어야 한다. 이번에 살펴볼 GRASP 패턴은 책임 할당의 어려움을 해결해준다. 1. 책임 주도 설계를 향해 데이터보다 행동을 먼저 결정하라 데이터는 책임을 수행하는 데 필요한 재료를 제공할 뿐이다. 객체의 데이터에서 행동으로 무게 중심을 옮겨야 한다. 데이터 중심 설계 이 객체가 포함해야 하는 데이터가 무엇인가 => 데이터를 처리하는 데 필요한 오퍼레이션은 무엇인가 책임 중심 설계 이 객체가 수행해야 하는 책임은 무엇인가 => 이 책임을 수행하는 데 필요한 데이터는 무엇인가 협력이라는 문맥 안해서 책임을 결정하라 책임의 품질은 협력..
5. 코드로 이해하는 설계 품질(2/2) | 오브젝트 4장
4. 자율적인 객체를 향해 캡슐화를 지켜라 캡슐화는 설계의 제1원리다. private으로 설정했다고 해도 접근자와 수정자를 통해 속성을 외부로 제공하고 있다면 캡슐화를 위반하는 것이다. Rectangle 클래스를 보자. class Rectangle { private left: number; private top: number; private right: number; private bottom: number; constructor(left: number, top: number, right: number, bottom: number) { this.left = left; this.top = top; this.right = right; this.bottom = bottom; } public getLeft():..