목록전체 글 (34)
지식조각모음
💡 이번 장에서 살펴볼 내용 왜 일급 값이 좋은지 알아봅니다. 문법을 일급 함수로 만드는 방법에 대해 알아봅니다. 고차 함수로 문법을 감싸는 방법을 알아봅니다. 일급 함수와 고차 함수를 사용한 리팩터링 두 개를 살펴봅니다. 들어가기 전에 앞으로 배울 코드의 냄새와 중복을 없는 두 가지 리팩터링 방법입니다. 코드의 냄새 ❓ 함수 이름에 있는 암묵적 인자 👉 함수 본문에서 사용하는 어떤 값이 함수 이름에 나타나는 경우 이런 암묵적 인자로 코드의 냄새를 알아볼 수 있다. 리팩터링 방법 ❓ 암묵적 인자 드러내기 👉 암묵적 인자가 일급 값이 되도록 함수에 인자를 추가한다. ❓ 함수 본문을 콜백으로 바꾸기 👉 비슷한 함수에 있는 서로 다른 부분을 콜백으로 바꾼다. 서로 다른 동작 부분은 일급 함수로 전달한다. 문제..
💡 이번 장에서 살펴볼 내용 - 함수형 사고가 무엇인지 설명합니다. - 다른 함수형 프로그래밍 책과 어떻게 다른지 알 수 있습니다. - 함수형 프로그래머가 코드를 바라보는 특별한 방법을 알게 됩니다. 함수형 프로그래밍은 무엇인가요? 함수형 프로그래밍의 정의 수학 함수를 사용하고 부수 효과(side effect)를 피하는 것이 특징인 프로그래밍 패러다임 부수 효과 없이 순수 함수(pure function)만 사용하는 프로그래밍 스타일 부수 효과 함수가 리턴값 이외에 하는 모든 일 예: 파일 읽기, 전역 상태 수정하기 부수 효과의 문제점: 리턴값을 얻기 위해 함수를 호출할 때마다 의도하지 않은 행동이 발생함 순수 함수 인자에만 의존하고(같은 인자를 넣으면 항상 같은 결과를 돌려줌) 부수 효과가 없는 함수 =..
추상화 기법 추상화: 도메인의 복잡성을 단순화하고 직관적인 멘탈 모델을 만드는 데 사용할 수 있는 가장 기본적인 인지 수단이다. 추상화 기법의 종류 분류와 인스턴스화 분류: 객체의 세부 사항을 숨김. 인스턴스 간의 공통적 특성을 기반으로 범주를 설정 인스턴스: 분류의 역. 범주로부터 객체를 생성 일반화와 특수화 일반화: 범주 간 공통적인 특성을 강조 특수화: 일반화의 역 집합과 분해 집합: 세부사항 보다 부분을 이용해서 전체를 형성하는 과정 분해: 집함의 역. 전체를 부분으로 분리. 분류와 인스턴스화 개념과 범주 개념 속성과 행위가 유사한 객체에 공통적으로 적용되는 관념 = 타입 예: 승용차, 버스, 트럭 ➡️ 바퀴가 있고 사람들을 이동시키는 운송수단 ➡️ 자동차 분류 객체에 개념을 적용하는 과정 객체를..
객체지향 설계 안에 존재하는 세가지 상호 연관된 관점 개념 관점 도메인 안에 존재하는 개념과 개념들 사이의 관계를 표현한다. 실제 도메인의 규칙과 제약이 최대한 유사하게 반영된다 명세 관점 실제 개발하는 소프트웨어의 관점 객체가 협력을 위해 무엇을 할 수 있는가 인터페이스 중심의 관점 구현 관점 가장 익숙한 관점 실제 작업을 수행하는 동작하는 코드 작성 객체가 책임을 어떻게 수행할 것인가 도메인 찾기 요구사항 또는 예제에 대한 설명에서 도메인 찾기 예: 커피 주문하기 손님, 바리스타, 메뉴판, 메뉴 항목, 아메리카노, 카푸치노, 에스프레소, 카라멜 마키아또 객체로 구성된다. 객체 간의 관계 확인 예: 손님은 메뉴판에서 주문할 커피를 고르기 때문에 메뉴판 객체를 알아야 한다. 즉, 관계를 맺는다. 객체의 ..
자주 변경되는 기능이 아니라 안정적인 구조를 따라 역할, 책임, 협력을 구성하라 기능 설계 대 구조 설계 기능 측면의 설계 제품이 사용자를 위해 무엇을 할 수 있는지에 초점을 맞춘다. 기능을 중심으로 설계한 후 구조가 기능에 따르게 한다 소프트웨어 개발의 충분조건 초기 단계의 핵심. 사람들이 필요한 것을 만들어야 한다. 구조 측면의 설계 제품의 형태가 어떠해야 하는지에 초첨을 맞춘다. 소프트웨어 개발의 필요조건 변화하는 요구사항을 쉽게 반영할 수 있는 기반 시스템 기능을 객체 간의 책임으로 분배 ➡️ 기능이 변경되더라도 객체가 변경되지 구조는 그대로 유지된다 설계를 할 때에 두 가지 측면을 함께 녹여 조화를 이뤄야 한다. p. 182 좋은 설계는 나중에라도 변경할 수 있는 여지를 남겨 놓는 설계다. 설계..
적은 것이 더 낫다 가치는 투자 자체에서 나오는 것이 아니라 투자의 결과에서 나옵니다. (중략) 그러나 코드에 너무 집착하면 원래 문제에서 초점을 잃고 결국 문제를 수동으로 해결하는 데 걸리는 것보다 문제를 자동화하는 데 더 많은 시간을 소비하게 됩니다. 복잡성 제거를 위한 코드 삭제 시스템은 시간이 갈수록 성장한다. 즉 복잡성이 증가한다. 도메인 복잡성: 우리가 해결하고 있는 문제. 기본적으로 가지고 있는 복잡성 부수적 복잡성: 도메인에서 요구하지 않았지만 우연히 추가된 모든 복잡성 부수적 복잡성 제거를 위해 집중해야 할 부분은 다음과 같다. 경험 부족으로 인한 기술적 무지 몰라서 추가한 불필요한 결합 등 ➡️ 의도적인 연습으로 기술을 향상시켜서 줄일 수 있다. 시간 압박으로 인한 기술적 낭비 시간 부..