Book

    7. 객체지향의 개념, 명세, 구현  | 객체지향의 사실과 오해 7장

    7. 객체지향의 개념, 명세, 구현 | 객체지향의 사실과 오해 7장

    마틴 파울러는 객체지향 설계 안에 존재하는 세 가지 상호 연관된 세 가지 관점을 설명했다. 1. 개념 관점 개념 관점에서 설계는 도메인 안에 존재하는 개념과 개념들 사이의 관계를 표현한다. 도메인은 특정 분야/주제이며, 소프트웨어는 도메인 내 문제를 해결하기 위해 개발된다. (ex. 커피 전문점, 재판장 등) 개념 관점은 사용자가 도메인을 바라보는 관점을 반영하기 때문에, 실제 도메인의 규칙과 제약을 최대한 유사하게 반영하는 것이 핵심이다. 2. 명세 관점 사용자의 영역인 도메인을 벗어나 개발자의 영역인 소프트웨어로 초점이 옮겨진다. 도메인의 개념이 아닌 실제 소프트웨어 내 객체들의 책임에 초점을 맞추어 객체의 인터페이스를 바라보게 된다. 프로그래머는 객체가 협력을 위해 '무엇'을 할 수 있는가에 초점을..

    6. 다이어그램으로 보는 도메인 모델 | 객체지향의 사실과 오해 6장

    6. 다이어그램으로 보는 도메인 모델 | 객체지향의 사실과 오해 6장

    길을 지나가는 사람에게 물어보는 방법은 기능적이고 해결책 지향적인 접근법, 길을 지도를 보고 찾아가는 방법은 구조적이고 문제 지향적인 접근법이다. 지도는 구체적인 기능이 아닌 구조를 제공하며, 다양한 목적을 위해 재사용될 수 있다. 지도는 기능에 비해 상대적으로 잘 변하지 않는 안정적인 지형 정보를 기반으로 하기 때문에, 요구사항이 변함에도 수용할 수 있다. 즉, 기능이 아니라 구조를 기반으로 모델을 구축하는 편이 좀 더 범용적이고 이해하기 쉬우며 변경에 안정적이다. 객체지향은 안정적인 구조를 기반으로 시스템을 구조화한다. 자주 변경되는 기능이 아니라 안정적인 구조를 따라 역할, 책임, 협력을 구성하라. 모든 소프트웨어 제품의 설계에는 기능과 구조의 측면이 존재하며 조화를 이루도록 해야 한다. 기능 측면..

    1. 타입스크립트 내려다보기 | 타입스크립트 프로그래밍 1~2장

    1. 타입스크립트 내려다보기 | 타입스크립트 프로그래밍 1~2장

    준수하면 좋을 규칙 가장 최신 자바스크립트 문법과 기능 사용하기(esnext) 가능하면 스프레드를 활용하여 자료구조를 불변으로 만들기 모든 것에 타입을 붙이고, 가능하면 구체적인 타입으로 추론될 수 있게 하기. 명시적 타입을 너무 남용하지 않기. 재사용할 수 있는 범용 코드를 만들려 노력하기 (다형성) 자바스크립트에는 포인터나 참조가 없다. 그 대신 값과 참조 타입을 사용한다. 값은 불변이다. (문자열, 숫자, 불) 참조는 보통 가변이다. (배열과 객체 같은 자료구조나 함수) 타입스크립트는 더 안전한 프로그램을 구현할 수 있게 한다. 안전한은 타입 안정성이다. 타입을 이용해 프로그램이 유효하지 않은 작업ㅇ르 수행하지 않도록 방지한다 자바스크립트는 명백히 잘못된 동작임에도 넘어가곤 한다. 자바스크립트는 프..

    13. 타입스크립트로 마이그레이션하기 | 이펙티브 타입스크립트 8장 (END)

    13. 타입스크립트로 마이그레이션하기 | 이펙티브 타입스크립트 8장 (END)

    자바스크립트 프로젝트에서 발견된 버그의 상당수는 타입스크립트를 사용했다면 컴파일 시점에서 미리 방지했을 수 있었을 것이다. 58. 모던 자바스크립트로 작성하기 타입스크립트는 특정 버전의 자바스크립트로 컴파일하는 기능도 갖고 있다. (즉, 트랜스파일러) 마이그레이션을 어디서부터 시작해야 할지 모르겠다면 최신 버전의 자바스크립트로 바꾸는 것부터 시작하자. 1. ECMAScript 모듈 사용하기 es6 버전부터 모던 자바스크립트라고 부른다. es6부터는 import/export를 사용하는 ECMAScript 모듈이 표준이 되었다. ES 모듈 시스템은 모듈 단휘로 전화할 수 있게 해주기 때문에 점진적 마이그레이션이 원활해진다. // CommonJS // a.js const b = require("./b"); c..

    12. 코드를 작성하고 실행하기 | 이펙티브 타입스크립트 7장

    12. 코드를 작성하고 실행하기 | 이펙티브 타입스크립트 7장

    53. 타입스크립트 기능보다는 ECMAScript 기능을 사용하기 TC39(자바스크립트 표준 기구)는 내장 기능을 추가해왔다. 그러면서 타입스크립트 초기 버전과의 호환성 문제가 발생했다. 타입스크립트는 자바스크립트의 신규 기능을 그대로 채택하고 타입스크립트 초기 버전과의 호환성을 포기했다. 그렇게 TC39는 런타임 기능을 발전시키고, 타입스크립트 팀은 타입 기능만 발전시킨다는 원칙을 세우고 지켜오고 있다. 이 원칙이 세워지기 전에 이미 사용되고 있던, 타입 공간과 값 공간의 경계를 혼란스럽게 만드는, 피해야 하는 기능을 살펴보자. 다음 기능들으 ㅣ경우에는 타입 정보를 제거한다고 자바스크립트가 되지는 않는다. 1. 열거형(enum) enum Flavor { VANILLA = 0, CHOCOLATE = 1,..

    5. 코드로 보는 객체의 자율적인 책임 | 객체지향의 사실과 오해 5장

    5. 코드로 보는 객체의 자율적인 책임 | 객체지향의 사실과 오해 5장

    1. 협력에 참여하는 객체의 책임이 자율적이어야 한다. 자율적인 책임이 설계의 품질을 좌우한다 객체지향 공동체를 구성하는 기본 단위는 '자율적'인 객체다. 자율적인 객체란 스스로 정한 원칙에 따라 판단하고 스스로의 의지를 기반으로 행동하는 객체다. 객체가 어떤 행동을 하는 유일한 이유는 다른 객체로 부터 요청을 수신했기 때문이다. 요청을 처리하기 위해 객체가 수행하는 행동이 책임이다. 즉 자율적인 객체란 스스로의 의지와 판단에 따라 각자 맡은 책임을 수행하는 객체다. 적절한 책임이 자율적인 객체를 낳고, 자율적인 객체들이 모여 유연하고 단순한 협력을 낳는다. 객체에게 할당되는 책임은 자율적이어야 한다. class King implements Judge { listenToTestimony(trialHelp..

    11. 타입 선언과 @types(2/2) | 이펙티브 타입스크립트 6장

    11. 타입 선언과 @types(2/2) | 이펙티브 타입스크립트 6장

    49. 콜백에서 this에 대한 타입 제공하기 let/const로 선언된 변수가 렉시컬 스코프인 반면, this는 다이나믹 스코프입니다. 다이나믹 스코프의 값은 정의된 방식이 아닌 호출된 방식에 따라 달라진다. this는 객체의 현재 인스턴스를 참조하는 클래스에서 가장 많이 쓰인다. class C { vals = [1, 2, 3]; logSquares() { for (const val of this.vals) { console.log(val * val); } } } const c = new C(); c.logSquares(); const method = c.logSquares(); method(); // undefined의 'vals' 속성을 읽을 수 없습니다. 내부 메서드를 외부 변수에 넣고 호출하면 ..

    10. 타입 선언과 @types(1/2) | 이펙티브 타입스크립트 6장

    10. 타입 선언과 @types(1/2) | 이펙티브 타입스크립트 6장

    45. devDependencies에 typescript와 @types 추가하기 npm은 세 가지 종류의 의존성을 구분해서 관리하며, 각각의 의존성은 package.json 파일 내 별도 영역에 들어 있다. dependencies 현재 프로젝트를 실행하는 데 필수적인 라이브러리들이 포함된다. lodash 같이 프로젝트의 런타임에 사용되는 라이브러리들이 포함되어야 한다. npm에 공개하여 다른 사용자가 설치할 경우, dependencies에 들어 있는 라이브러리도 함께 설치된다. (전이 의존성) devDependencies 현재 프로젝트를 개발하고 테스트하는 데 사용되지만, 런타임에는 필요 없는 라이브러리들이 포함된다. 트스트 프레임워크 같은 라이브러리들이 포함될 수 있다. npm에 공개하여 다른 사용자가..