독서 12

[이펙티브 타입스크립트] 2022-02-15 TIL

[1장 - 아이템 3] - 타입 관련 코드는 런타임과 무관하다 → 따라서 런타임 중에는 타입 체크가 이루어지지 않으며 런타임 성능에 타입이 영향을 주지도 않는다. (대신 빌드 타임에 대한 오버헤드는 있을 수 있다) - 런타임 중에도 타입 검사하는 방법은 다음과 같다: (1) 속성 검사: 타입의 내부 속성을 통해 타입을 검사함 (eg. 'name' in person) (2) 태그된 유니온: 타입의 속성에 타입의 정보를 표기하는 태그를 추가 (eg. 'type', 'kind') (3) 클래스 사용: 클래스는 타입과 값 모두로 사용 가능 [1장 - 아이템 4] - 자바스크립트는 덕 타이핑을 기반으로 한다. 덕 타이핑(Duck typing)은 객체가 특정 타입에 해당하는 변수 및 메소드를 포함하고 있으면 해당 ..

[이펙티브 타입스크립트] 2022-02-14 TIL

[1장 - 아이템 2] - 타입스크립트 컴파일러 설정은 command line argument와 tsconfig.json을 통해 설정할 수 있다. - 타입스크립트 컴파일러 설정은 주로 입출력과 관련된 내용을 다루지만 핵심적인 기능에 대한 설정도 존재한다. (1) noImplicitAny: enable시 암시적인 any를 사용할 수 없게 된다. 따라서 명시적인 any 혹은 분명한 타입을 제시해줘야 한다. 일반적인 경우에서는 해당 옵션을 enable하는 것이 좋다. 다만, javascript 코드를 typescript 코드로 전환하는 과정에서는 (migration) 제외한다. (2) strictNullChecks: 기본적으로 null과 undefined는 모든 타입의 변수에 할당될 수 있다. (예를 들어서 ..

[클린코드] 2022-03-09 TIL

TIL (Today I Learned) 2022.03.09 오늘 TIL 3줄 요약 거대한 하나의 클래스보다 잘 쪼갠 여러 클래스가 낫다. 클래스는 하나의 책임만을 가져야 한다. (이것이 지켜졌는지 여부는 이름을 지을 때 티가 난다.) 클래스의 응집도를 높이려면 메소드의 매개변수 수를 줄이자. 오늘 읽은 범위 10장. 클래스 책에서 기억하고 싶은 내용을 써보세요. 표준 자바 관례에 따르면 클래스는 static public 상수 → static private 변수 → private 변수 (인스턴스 변수) → 공개 함수 → 호출되는 비공개 함수의 순서로 내용이 구성된다. public 변수가 필요한 경우는 거의 존재하지 않으며 비공개 함수는 자신을 호출하는 공개 메소드의 바로 아래에 위치시킨다. (p.172) ..

독서/클린코드 2022.03.09

[클린코드] 2022-03-06 TIL

TIL (Today I Learned) 2022.03.06 오늘 읽은 범위 9장. 단위 테스트 책에서 기억하고 싶은 내용을 써보세요. TDD의 세 가지 법칙 : 실패하는 단위 테스트를 작성할 때까지 실제 코드를 작성하지 않는다. / 컴파일은 실패하지 않으면서 실행이 실패하는 정도로만 단위 테스트를 작성한다. / 현재 실패하는 테스트를 통과할 정도로만 실제 코드를 작성한다. (p.155) 실제 코드가 변경되면 테스트 코드 역시 변경이 필요할 수 있다. 테스트 코드를 복잡하게 마음대로 작성하면 이 과정이 매우 골치아파진다. 따라서 테스트 코드의 품질은 실제 코드만큼이나 중요하다. (p.156) 실제 코드에 유연성, 유지보수성, 재사용성을 제공하는 버팀목이 바로 단위 테스트다. 테스트 케이스가 있으면 버그를 ..

독서/클린코드 2022.03.07

[클린코드] 2022-03-05 TIL

TIL (Today I Learned) 2022.03.05 오늘 읽은 범위 8장. 경계 책에서 기억하고 싶은 내용을 써보세요. 경계 인터페이스를 사용할 때에는 클래스로 감싸줌으로써 해당 경계 인터페이스가 전체 프로그램에 끼치는 의도치 않은 영향을 방지하고 프로그램에 필요한 기능만을 추출한다. (p.145) 외부 코드를 사용할 때에는 먼저 자기 프로그램을 작성하는 것이 아니라 간단한 테스트를 작성하여 외부 코드의 사용법을 익히는 학습 테스트를 이용하자. (p. 146) 경계를 최대한 줄이고 그 외의 요소들로부터 분리시킴으로써 프로그램에 대한 통제성을 높이자. 경계를 잘 관리하지 않으면 우리가 통제할 수 없는 영역의 외부 코드에 의해 너무 휘둘릴 수 있다. 최소한 경계 코드는 우리가 통제권을 쥘 수 있다. ..

독서/클린코드 2022.03.07

[클린코드] 2022-03-04 TIL

TIL (Today I Learned) 2022.03.04 오늘 읽은 범위 7장. 오류 처리 책에서 기억하고 싶은 내용을 써보세요. try 블록에서 무슨 일이 생기든지 catch 블록은 프로그램 상태를 일관성 있게 유지해야 한다. (p.132) 모든 예외를 잡아야하는 아주 중요한 라이브러리가 아니라면 확인된 예외는 코드의 유지보수성이나 캡슐화의 측면에서 효율적이지 못하다. (p.134) 예외를 던질 때는 실패한 연산, 유형 등의 정보를 함께 첨부한다. 그러면 훨씬 수월하게 오류의 원인과 위치를 찾을 수 있다. (p.135) 오류를 분류할 때에는 오류 자체의 유형보다는 오류에 대응하는 방식으로 분류하는 것이 좋다. (p.135) 클래스를 만들거나 객체를 조작하여 특수 사례를 처리하면 (특수 사례패턴, Sp..

독서/클린코드 2022.03.05

[클린코드] 2022-03-01 TIL

TIL (Today I Learned) 2022.03.01 오늘 읽은 범위 6장. 객체와 자료 구조 책에서 기억하고 싶은 내용을 써보세요. 변수를 private으로 선언하고 get, set 함수를 제공한다고 그 내부 구현이 감춰지는 것은 아니다. 내부 구현을 감추기 위해서는 추상 인터페이스를 만들어줘야 한다. (p.118) 자료 구조를 사용하는 절차적인 코드는 기존 자료 구조를 변경하지 않으면서 새 함수를 추가하기 쉽다. 반면 객체 지향 코드는 기존 함수를 변경하지 않으면서 새 클래스를 추가하기 쉽다. (p.122) 객체는 자료를 숨기고 함수를 공개한다. 하지만 자료구조는 내부 구조를 당연히 노출하므로 디미터 법칙이 적용되지 않는다. (p.123) 디미터 법칙 : 모듈은 자신이 조작하는 객체의 속사정을 ..

독서/클린코드 2022.03.02

[클린코드] 2022-02-28 TIL

TIL (Today I Learned) 2022.02.28 오늘 읽은 범위 5장. 형식 맞추기 책에서 기억하고 싶은 내용을 써보세요. 코드가 바뀌어도 맨 처음 잡아놓은 구현 스타일과 가독성 수준은 유지보수 용이성과 확장성에 계속 영향ㅇ르 미친다. 원래 코드는 사라질지라도 개발자의 스타일과 규율은 사라지지 않는다. (p.96) 파일을 잘 쪼개자. 일반적으로 작은 파일이 큰 파일보다 이해하기 쉽다. (p.97) 소스코드는 신문 기사처럼 초반에는 전체적인 그림을 보여주어야 한다. 첫 부분에는 고차원 개념과 알고리즘을 설명하고 아래로 내려갈수록 그 의도를 세세하게 묘사하자. (p.98) import문, 각 함수 사이 등 서로 다른 개념 사이에는 빈 행을 위치시켜서 개념을 분리시켜주자. (p.98) 서로 밀접한 ..

독서/클린코드 2022.03.01

[클린코드] 2022-02-25 TIL

TIL (Today I Learned) 2022.02.25 오늘 읽은 범위 4장. 주석 책에서 기억하고 싶은 내용을 써보세요. 나쁜 코드에 주석을 달지 마라. 새로 짜라. (p.68) 저작권 정보와 소유권 정보와 같은 법적인 이유로 회사가 정립한 표준에 맞춰서 주석을 작성하는 것은 타당하다. (p.70) 경우에 다라 해당 방식으로 구현하게 된 의도를 주석으로 작성해주면 코드에 대한 이해도를 향상시킬 수 있다. (p.71) 인수나 반환값이 표준 라이브러리나 변경 불가능한 코드에 속하는데 그 의미가 한 눈에 드러나지 않는다면 주석을 사용하는 것도 좋다. ex) JAVA - a.compareTo(b) == 0 // a == b (p.72) 주석을 프로그램의 결과에 대한 경고로 활용할 수도 있다. 그를 통해 다..

독서/클린코드 2022.02.26

[클린코드] 2022-02-22 TIL

TIL (Today I Learned) 2022.02.22 오늘 읽은 범위 3장. 함수 책에서 기억하고 싶은 내용을 써보세요. if 문/else 문/while 문 등에 들어가는 블록은 한 줄이어야 한다는 의미다. 대개 거기서 함수를 호출한다. 함수에서 들여쓰기 수준은 1단이나 2단을 넘어서면 안 된다. 그래야 함수는 읽고 이해하기 쉬워진다. (p.44) 단순히 다른 표현이 아니라 의미 있는 이름으로 다른 함수를 추출할 수 있다면 그 함수는 여러 작업을 하는 셈이다. (p.45) 함수가 확시히 '한 가지' 작업만 하려면 함수 내 모든 문장의 추상화 수준이 동일해야 한다. (p.45) 함수에서 이상적인 인수 개수는 0개(무항)다. 다음은 1개(단항)고, 다음은 가능한 피하는 편이 좋다. 4개 이상(다항)은 ..

독서/클린코드 2022.02.22