본문 바로가기

Books

(21)
[스터디] OOP - 상속과 코드 재사용 2021. 11. 25. 21:09 요약 상속을 통해 코드를 재사용하면 부모-자식이 강하게 결합된다. 특히 `super` 참조를 통해 자식에서 부모 클래스의 메소드를 직접 호출하면 두 클래스는 강하게 결합되고, 자식이 부모의 내부 구현을 알아야 하여 캡슐화를 위반한다. 높은 결합도는 변경에 취약한 클래스를 낳는데, 이를 취약한 기반 클래스 문제라고 한다. 취약한 기반 클래스 문제는 다음 세가지 문제를 야기한다. 1. 상속받은 부모 클래스의 메소드가 자식 클래스의 내부 구조에 대한 규칙을 깨트릴 수 있다. 2. 자식 클래스가 부모 클래스의 메소드를 오버라이딩하는 경우, 부모 클래스가 자신의 메소드를 사용하는 방법(내부 구현)을 자식이 알아야 한다. 3. 높은 결합도로 인해 자식 클래스와 부모 클래스의 구현을 fix하던가, 아니면 동시에 변경..
[스터디] OOP - 의존성 관리하기 2021. 11. 4. 20:58 의존성 어떤 객체가 협력하기 위해 다른 객체를 필요로 할 때 두 객체 사이에 의존성이 존재한다고 말할 수 있다. class A implements I { methodOfA(b: B) { return b.methodOfB().filter((item) => item.chceked) } } class B { methodOfB(c: C) { return c.methodOfC() } } class C { methodOfC() {} } 위 예제의 클래스 A는 methodOfA 메소드에서 클래스 B를 인자로 받아 B에게 methodOfB 메시지를 전송한다. 이 경우, A는 자신의 작업을 수행하기 위해 B 객체를 필요로 하는데 이 경우 A는 B에 의존한다고 한다. 의존성은 변경과 관련이 있다. 의존되는 요소(B)가 변..
[스터디] OOP - 책임 할당하기 2021. 10. 25. 13:18 책임 주도 설계를 향해 아래 두 가지 원칙을 기억하고 따른다. 데이터보다 행동을 먼저 결정하라. 협력 문맥 속에서 책임을 결정하라. 협력 문맥 속에서 책임을 결정하라. 책임은 객체의 입장이 아니라 객체가 참여하는 협력에 적합해야 한다. 다시 말해, 메시지 전송자에게 적합한 책임을 말한다. ⌲ 따라서, 메시지 송신자는 메시지 수신자에 대한 어떠한 가정도 할 수 없다. (캡슐화) 객체가 수행할 책임이 정리될 때까지 객체의 상태에 대해 정의하지 않는다. GRASP 패턴 GRASP 패턴이란? General Responsibility Assignment Software Pattern의 약자로, 객체에게 책임을 할당할 때 지침으로 삼을 원칙들의 집합을 패턴 형식으로 정리한 것 설계 순서 1. 도메인 개념에서 출발하..
[스터디] OOP - 역할과 책임, 협력 2021. 9. 28. 22:16 조영호님의 '오브젝트'(2021) 의 3장을 읽으면서 요약한 것입니다. 많은 사람들이 객체지향 패러다임을 설계할 때 클래스를 어떻게 정의하고, 어떤 걸 상속할지 등등 구체적인 구현에 초점을 맞춘다. 그러나 객체지향의 핵심은 역할, 책임, 협력에 있다. 다시 말하면 협력을 구성하기 위해 적절한 객체를 찾고 적절한 책임을 할당하는 것이 핵심이다. 협력이란 어떤 기능을 구현하기 위해 객체들 간 상호작용을 말한다. 책임은 객체가 협력에 참여하기 위해 수행하는 로직을 말한다. 이러한 책임들의 집합이 객체의 역할을 구성한다. 협력 객체지향 : 자율적인 객체들의 공동체 즉, 객체가 다른 객체에게 도움을 요청할 때 협력이 가능하다. ('메세지 전송'이라고도 한다.) * 메세지 !== 메서드이다. 객체는 메세지를 받고,..
제 5장. 예 2021. 6. 12. 20:35 제 4장. 수식과 명제보다 제 5장을 먼저 읽은 관계로 5장을 먼저 포스팅한다. 기본 1. 전형적인 예를 사용한다. 전형적인 예를 먼저 사용하고, 극단적인 예시를 사용한다. 글쓴이 사견 : 예시 코드를 작성할 때 일반적인 기능에 대한 구현을 예로 들면 더 효과적이겠다. 2. 들어맞는 예 -> 들어맞지 않는 예를 기술한다. 들어맞는 예와 들어맞지 않는 예는 비슷하지만 다른 성질을 갖는 예를 들면 좋다. 두 예가 아예 동떨어지면 본 개념에 대한 이해가 흐려질 수 있다. 3. 일반적인 예를 사용한다. 특수한 조건이 붙는 예를 활용하지 않는다. 4. 독자의 지식을 고려한 예를 사용한다. 글을 읽을 독자들이 알고 있는 배경 지식을 고려한다. 독자들에게 알기 쉬운 것, 익숙한 것, 알고 있는 것으로부터 예를 만든다..
제 3장. 순서와 계층 2021. 5. 31. 11:45 1. 순서는 글을 배열하는 것 독자가 글을 읽기 쉬운 순서로 나열한다. 작업 순서로 글을 나열할 때 번호를 추가하면 순서가 더 명확해진다. 번호 뿐만 아니라 글의 형식또한 통일한다. 아는 것에서 모르는 것으로 독자가 이미 알고 있는 것을 간결하게 쓴다. 알고 있는 것과 모르는 것이 섞인 내용을 쓴다. 모르는 것에 대해 자세히 쓴다. 2번의 알고 있는 것과 모르는 것이 섞인 내용을 쓸 때에는 예시를 제시하거나, 질문은 던져본다. 구체에서 추상으로 구체적인(특수한) 예시를 먼저 제시하고, 추상적인(일반적인) 경우를 설명한다. 또한 구체적으로 설명한 문단과 추상적인 문단은 병렬적인 형식을 취한다. (병렬법 참고) 특수 로그인 화면의 테스트 코드를 작성할 때 가장 먼저 화면의 입력란이 렌더링되었는지 확인하는 코..
제 1장. 독자 ~ 제 2장. 기본 2021. 5. 22. 00:08 유키 히로시의 「이공계 x의 글쓰기책」 을 읽으면서 글쓴이가 기억하고 싶은 문장과 핵심 내용을 정리하였습니다. 매우 주관적인 정리입니다. 제 1장. 독자 글을 쓸 때, 독자의 입장을 생각하면서 글을 써야 한다. 독자의 입장을 생각하는 방법 1. 독자의 지식 독자는 글을 읽으면서 상황에 따라 변한다. 따라서 글의 순서를 의식하면서 글을 써야한다. 여기까지 읽은 독자는 무엇을 알고 있는가 2. 독자의 의욕 독자가 글에 흥미를 느끼고 글을 계속 읽을 수 있는 의욕을 향상하기 위해 글의 논조에 변화를 준다. 추상적인 이야기 ▶ 구체적인 예를 든다 구체적인 이야기 ▶ 요약 정리를 한다 글로 된 설명의 지속 ▶ 그림, 그래프, 표를 삽입한다. 의욕은 아하! 하고 무릎을 탁 치는 발견이 있을 때 매우 향상된다. 3...
마틴파울러의 리팩터링 2판 Gitbook 소개 2021. 1. 30. 15:21 스터디는 작년에 끝났지만 정리를 못(안)하고 있던 스터디 내용을 Gitbook을 사용하여 전자도서로 만들어보았습니다! https://yujeongjeon.github.io/ 스터디 소개 · 리팩터링 2판 스터디 No results matching "" yujeongjeon.github.io 총 12장으로 이루어졌지만 복습하면서 만드는 중이라 업데이트 중입니다 😃 사내 프로젝트와 관련하여 얘기한 내용은 논의 사항에 넣어 다양한 의견을 나누었던 내용을 추가합니다. 책의 주옥같은 내용들을 전부 넣진 못해서 직접 구매하셔서 읽어보시는것 또한 추천드립니다. 개인적으로 작년에 읽었던 개발도서 중 최고였습니다 👍
스코프와 클로저 2020. 10. 5. 01:29 본 내용은 카일 심슨의 YOU DON'T KNOW JS 타입과 문법, 스코프와 클로저(2017)를 읽고 서술적인 내용을 Q&A 형식으로 정리한 글입니다. 들어가기 전에 개인적으로 이 장은 코어 자바스크립트에서 학습했던 실행 컨텍스트와 클로저를 참고하는 편이 훨씬 이해가 더 잘될거 같았다. 따라서 복습할 겸해서 정리하기로 하였다. 1. 스코프 1.1 자바스크릡트의 컴파일레이션 과정을 설명하시오. 아래는 예시 코드 var a = 2 토크나이징(렉싱) 〰️파싱 〰️코드 생성으로 진행된다. 토크나이징(렉싱) Tokenizing(Lexing) 문자열을 공백 기준으로 나누어 의미 있는 조각(토큰)을 생성한다. 상태 유지 파싱 규칙을 적용하여 어떤 문자열이 별개의 토큰인지, 다른 토큰의 일부인지를 판단하는 것을 렉..
리팩터링 스터디 2주차 (Ch.2 ~ Ch.3) 2020. 9. 29. 23:50 본 포스트는 마틴 파울러의 리팩터링 2판(2020, 한빛미디어)를 기반으로 진행한 사내 스터디에서 배운 점과 기억하고 싶은 점을 개인적으로 정리한 글입니다. 진행한 챕터 02 리팩터링 원칙 03 코드에서 나는 악취 챕터 2 리팩터링 원칙 챕터 2는 왜 리팩터링을 해야 하며, 리팩터링을 하면 좋은점과 언제 리팩터링을 해야 하는지에 대해 다루고 있었다. 챕터 2의 내용이 글이 많아서 좀 정리가 어려웠는데 개인적으로 꼭 이해하고 싶은 면은 다음과 같다. 리팩터링은 언제 해야 할까? 1. 일단 복붙하더라도 (혹은 함수를 매개변수화하여 사용) 기능을 쉽게 추가할 수 있도록 한다. 2. 코드를 이해하기 쉽게 만든다. 3. 원래 하려던 일을 하던 도중에 리팩터링할 로직을 발견하면 간단한거라면 즉시 수정하고 복잡하다면..
리팩터링 스터디 1주차 (Ch.1) 2020. 9. 22. 00:25 본 포스트는 마틴 파울러의 리팩터링 2판(2020, 한빛미디어)를 기반으로 진행한 사내 스터디에서 배운 점과 기억하고 싶은 점을 개인적으로 정리한 글입니다. 진행한 챕터 01 리팩터링: 첫 번째 예시 (1.1 ~ 1.10) 팀에서 모집한 사내 스터디에 참여하게 되었다 🥳 마틴 파울러님의 리팩터링 2판을 기반으로 리팩터링에 대해 앞으로 공부하는 시간을 가질 것이다. 오늘은 그 첫날로, 챕터 1인 구체적인 실예시코드에 앞으로 배울 리팩터링 방법을 적용하여 어떻게 코드를 개선하는지에 대한 전반적인 소개를 읽고 그 감상과 자유토론하는 시간을 가졌다. 오늘 나눈 대화에서 기억하고 싶은 키워드, 자세를 기록하기로 하였다. 글쓴이 포함 총 4명이서 나눈 대화로, 지금부터 개발자 A, B, C, 글쓴이라고 지칭합니다 ..
문법 2020. 9. 8. 19:46 본 내용은 카일 심슨의 YOU DON'T KNOW JS 타입과 문법, 스코프와 클로저(2017)를 읽고 서술적인 내용을 Q&A 형식으로 정리한 글입니다. 1. 문과 표현식의 차이는? const a = 2*3 // ----- (1) const b = a // ----- (2) b // ----- (3) 문은 '문장'이며 표현식은 '어구'와 일맥상통한다.(연산자는 '구두점') 모든 표현식은 단일한 특정 값으로 계산된다. (1)의 우항, (2)의 우항, (3) 모두 표현식이며, const가 빠진 (1), (2)는 할당 표현식이라고도 부른다. (1), (2)는 const 변수를 선언하는 선언문이다. (3)은 표현식이기도 하지만 그 자체가 문이 되기도 하여 표현식 문이라고 한다. 모든 문은 완료값을 가진다. 콘솔..