From a24c8f52dd65fad9bf89b011eef4a8498c8d178f Mon Sep 17 00:00:00 2001 From: SEOHEE CHOI <165611407+karnelll@users.noreply.github.com> Date: Sat, 26 Jul 2025 14:29:59 +0900 Subject: [PATCH 1/8] =?UTF-8?q?Create=20=EC=B5=9C=EC=84=9C=ED=9D=AC.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../\354\265\234\354\204\234\355\235\254.md" | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 "8\354\236\245/\354\265\234\354\204\234\355\235\254.md" diff --git "a/8\354\236\245/\354\265\234\354\204\234\355\235\254.md" "b/8\354\236\245/\354\265\234\354\204\234\355\235\254.md" new file mode 100644 index 0000000..bcda9a2 --- /dev/null +++ "b/8\354\236\245/\354\265\234\354\204\234\355\235\254.md" @@ -0,0 +1,24 @@ +# 8장. 경계 + +## 인상 깊은 내용 + +* **경계 살피고 익히기** + + 곧바로 우리쪽 코드를 작성해 외부 코드를 호출하는 대신 먼저 간단한 테스트 케이스를 작성해 외부 코드를 익히면 어떨까? 짐 뉴커크는 이를 학습 테스트라고 부른다. 학습 테스트는 API를 사용하려는 목적에 초점을 맞춘다. + +* **학습 테스트는 공짜 이상이다** + + 경계 테스트가 있다면 패키지의 새 버전으로 이전하기 쉬워진다. 그렇지 않다면 낡은 버전을 필요 이상으로 오랫동안 사용하라는 유혹에 빠지기 쉽다. + +* **아직 존재하지 않는 코드를 사용하기** + + 아는 코드와 모르는 코드를 분리하라. + +* **깨끗한 경계** + + 통제가 불가능한 외부 패키지에 의존하는 대신 통제가 가능한 우리 코드에 의존하는 편이 훨씬 좋다. + 외부 패키지를 호출하는 코드를 가능한 줄여 경계를 관리하자. + +--- + +## 💭 느낀 점 From ca2af84d56cb2a0119ed668bc0ed0731cfefee1a Mon Sep 17 00:00:00 2001 From: SEOHEE CHOI <165611407+karnelll@users.noreply.github.com> Date: Sat, 26 Jul 2025 15:24:48 +0900 Subject: [PATCH 2/8] =?UTF-8?q?Create=20=EC=B5=9C=EC=84=9C=ED=9D=AC.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../\354\265\234\354\204\234\355\235\254.md" | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 "9\354\236\245/\354\265\234\354\204\234\355\235\254.md" diff --git "a/9\354\236\245/\354\265\234\354\204\234\355\235\254.md" "b/9\354\236\245/\354\265\234\354\204\234\355\235\254.md" new file mode 100644 index 0000000..b8f0f1d --- /dev/null +++ "b/9\354\236\245/\354\265\234\354\204\234\355\235\254.md" @@ -0,0 +1,21 @@ +# 9장. 단위 테스트 + +## 인상 깊은 내용 + +* **TDD 법칙 세 가지** + + 첫째 법칙: 실패하는 단위 테스트를 작성할 때까지 설계 코드를 작성하지 않는다. + 둘째 법칙: 컴파일은 실패하지 않으면서 실행이 실패하는 정도로만 단위 테스트를 작성한다. + 셋째 법칙: 현재 실패하는 테스트를 통과할 정도로만 실제 코드를 작성한다. + +* **테스트 당 개념 하나** + + 테스트 함수마다 한 개념만 테스트하라 + +* **F.I.R.S.T** + + 빠르게(Fast): 테스트는 빨라야 한다. 테스트는 빨리 돌아야 한다는 말이다. 테스트가 느리면 자주 돌릴 엄두를 못 낸다. + 독립적으로(Independent): 각 테스트는 서로 의존하면 안 된다. + 반복가능하게(Repeatable): 실제 환경, QA 환경, 버스를 타고 집으로 가는 길에 사용하는 (네트워크에 연결되지 않은) 노트북 환경에서도 실행할 수 있어야 한다. + 자가검증하는(Self-Validating): 테스트는 부울(bool) 값으로 결과를 내야 한다. 성공 아니면 실패다. 통과 여부를 알리고 로그 파일을 읽게 만들어서는 안 된다. + 적시에(timely): 단위 테스트는 테스트하려는 실제 코드를 구현하기 직전에 구현한다. From 14d22a95ece42b61b0b6fda178c66e1453a9783b Mon Sep 17 00:00:00 2001 From: SEOHEE CHOI <165611407+karnelll@users.noreply.github.com> Date: Sat, 26 Jul 2025 15:37:01 +0900 Subject: [PATCH 3/8] =?UTF-8?q?Update=20=EC=B5=9C=EC=84=9C=ED=9D=AC.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../\354\265\234\354\204\234\355\235\254.md" | 34 ++++++++++--------- 1 file changed, 18 insertions(+), 16 deletions(-) diff --git "a/9\354\236\245/\354\265\234\354\204\234\355\235\254.md" "b/9\354\236\245/\354\265\234\354\204\234\355\235\254.md" index b8f0f1d..c03407f 100644 --- "a/9\354\236\245/\354\265\234\354\204\234\355\235\254.md" +++ "b/9\354\236\245/\354\265\234\354\204\234\355\235\254.md" @@ -1,21 +1,23 @@ # 9장. 단위 테스트 -## 인상 깊은 내용 +## 인상 깊은 내용 -* **TDD 법칙 세 가지** - - 첫째 법칙: 실패하는 단위 테스트를 작성할 때까지 설계 코드를 작성하지 않는다. - 둘째 법칙: 컴파일은 실패하지 않으면서 실행이 실패하는 정도로만 단위 테스트를 작성한다. - 셋째 법칙: 현재 실패하는 테스트를 통과할 정도로만 실제 코드를 작성한다. +### TDD 법칙 세 가지 -* **테스트 당 개념 하나** - - 테스트 함수마다 한 개념만 테스트하라 +1. 실패하는 단위 테스트를 작성할 때까지 설계 코드를 작성하지 않는다. +2. 컴파일은 실패하지 않으면서 실행이 실패하는 정도로만 단위 테스트를 작성한다. +3. 현재 실패하는 테스트를 통과할 정도로만 실제 코드를 작성한다. -* **F.I.R.S.T** - - 빠르게(Fast): 테스트는 빨라야 한다. 테스트는 빨리 돌아야 한다는 말이다. 테스트가 느리면 자주 돌릴 엄두를 못 낸다. - 독립적으로(Independent): 각 테스트는 서로 의존하면 안 된다. - 반복가능하게(Repeatable): 실제 환경, QA 환경, 버스를 타고 집으로 가는 길에 사용하는 (네트워크에 연결되지 않은) 노트북 환경에서도 실행할 수 있어야 한다. - 자가검증하는(Self-Validating): 테스트는 부울(bool) 값으로 결과를 내야 한다. 성공 아니면 실패다. 통과 여부를 알리고 로그 파일을 읽게 만들어서는 안 된다. - 적시에(timely): 단위 테스트는 테스트하려는 실제 코드를 구현하기 직전에 구현한다. +### 테스트 당 개념 하나 + +- 테스트 함수마다 **한 개념만 테스트**한다. + +### F.I.R.S.T 원칙 + +| 원칙 | 설명 | +|-------------|------| +| **Fast** | 테스트는 빨라야 한다. 느리면 자주 실행할 수 없다. | +| **Independent** | 테스트는 서로 의존하지 않아야 한다. | +| **Repeatable** | 실제 환경, QA 환경, 네트워크가 없는 환경에서도 실행 가능해야 한다. | +| **Self-Validating** | 테스트는 불리언 값으로 결과를 알려야 한다. 로그를 읽게 해선 안 된다. | +| **Timely** | 단위 테스트는 실제 코드를 구현하기 **직전**에 작성해야 한다. | \ No newline at end of file From 80e7fd9219acd861c88e19560fdef075b51f623a Mon Sep 17 00:00:00 2001 From: SEOHEE CHOI <165611407+karnelll@users.noreply.github.com> Date: Sat, 26 Jul 2025 15:38:13 +0900 Subject: [PATCH 4/8] =?UTF-8?q?Update=20=EC=B5=9C=EC=84=9C=ED=9D=AC.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- "9\354\236\245/\354\265\234\354\204\234\355\235\254.md" | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git "a/9\354\236\245/\354\265\234\354\204\234\355\235\254.md" "b/9\354\236\245/\354\265\234\354\204\234\355\235\254.md" index c03407f..3f68da4 100644 --- "a/9\354\236\245/\354\265\234\354\204\234\355\235\254.md" +++ "b/9\354\236\245/\354\265\234\354\204\234\355\235\254.md" @@ -2,17 +2,15 @@ ## 인상 깊은 내용 -### TDD 법칙 세 가지 +* **TDD 법칙 세 가지** 1. 실패하는 단위 테스트를 작성할 때까지 설계 코드를 작성하지 않는다. 2. 컴파일은 실패하지 않으면서 실행이 실패하는 정도로만 단위 테스트를 작성한다. 3. 현재 실패하는 테스트를 통과할 정도로만 실제 코드를 작성한다. -### 테스트 당 개념 하나 +* **테스트 당 개념 하나** -- 테스트 함수마다 **한 개념만 테스트**한다. - -### F.I.R.S.T 원칙 +* **F.I.R.S.T 원칙** | 원칙 | 설명 | |-------------|------| From d79b46a48d7302691178e83c5d3b7427f81ded65 Mon Sep 17 00:00:00 2001 From: SEOHEE CHOI <165611407+karnelll@users.noreply.github.com> Date: Sat, 26 Jul 2025 15:39:05 +0900 Subject: [PATCH 5/8] =?UTF-8?q?Update=20=EC=B5=9C=EC=84=9C=ED=9D=AC.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../\354\265\234\354\204\234\355\235\254.md" | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git "a/9\354\236\245/\354\265\234\354\204\234\355\235\254.md" "b/9\354\236\245/\354\265\234\354\204\234\355\235\254.md" index 3f68da4..650c776 100644 --- "a/9\354\236\245/\354\265\234\354\204\234\355\235\254.md" +++ "b/9\354\236\245/\354\265\234\354\204\234\355\235\254.md" @@ -4,18 +4,18 @@ * **TDD 법칙 세 가지** -1. 실패하는 단위 테스트를 작성할 때까지 설계 코드를 작성하지 않는다. -2. 컴파일은 실패하지 않으면서 실행이 실패하는 정도로만 단위 테스트를 작성한다. -3. 현재 실패하는 테스트를 통과할 정도로만 실제 코드를 작성한다. + 1. 실패하는 단위 테스트를 작성할 때까지 설계 코드를 작성하지 않는다. + 2. 컴파일은 실패하지 않으면서 실행이 실패하는 정도로만 단위 테스트를 작성한다. + 3. 현재 실패하는 테스트를 통과할 정도로만 실제 코드를 작성한다. * **테스트 당 개념 하나** * **F.I.R.S.T 원칙** -| 원칙 | 설명 | -|-------------|------| -| **Fast** | 테스트는 빨라야 한다. 느리면 자주 실행할 수 없다. | -| **Independent** | 테스트는 서로 의존하지 않아야 한다. | -| **Repeatable** | 실제 환경, QA 환경, 네트워크가 없는 환경에서도 실행 가능해야 한다. | -| **Self-Validating** | 테스트는 불리언 값으로 결과를 알려야 한다. 로그를 읽게 해선 안 된다. | -| **Timely** | 단위 테스트는 실제 코드를 구현하기 **직전**에 작성해야 한다. | \ No newline at end of file + | 원칙 | 설명 | + |-------------|------| + | **Fast** | 테스트는 빨라야 한다. 느리면 자주 실행할 수 없다. | + | **Independent** | 테스트는 서로 의존하지 않아야 한다. | + | **Repeatable** | 실제 환경, QA 환경, 네트워크가 없는 환경에서도 실행 가능해야 한다. | + | **Self-Validating** | 테스트는 불리언 값으로 결과를 알려야 한다. 로그를 읽게 해선 안 된다. | + | **Timely** | 단위 테스트는 실제 코드를 구현하기 **직전**에 작성해야 한다. | \ No newline at end of file From a1b303480e87c49f11d40d18afe43dbb01d03a20 Mon Sep 17 00:00:00 2001 From: SEOHEE CHOI <165611407+karnelll@users.noreply.github.com> Date: Mon, 25 Aug 2025 16:49:15 +0900 Subject: [PATCH 6/8] =?UTF-8?q?Update=20=EC=B5=9C=EC=84=9C=ED=9D=AC.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- "8\354\236\245/\354\265\234\354\204\234\355\235\254.md" | 4 ---- 1 file changed, 4 deletions(-) diff --git "a/8\354\236\245/\354\265\234\354\204\234\355\235\254.md" "b/8\354\236\245/\354\265\234\354\204\234\355\235\254.md" index bcda9a2..1ea38f8 100644 --- "a/8\354\236\245/\354\265\234\354\204\234\355\235\254.md" +++ "b/8\354\236\245/\354\265\234\354\204\234\355\235\254.md" @@ -18,7 +18,3 @@ 통제가 불가능한 외부 패키지에 의존하는 대신 통제가 가능한 우리 코드에 의존하는 편이 훨씬 좋다. 외부 패키지를 호출하는 코드를 가능한 줄여 경계를 관리하자. - ---- - -## 💭 느낀 점 From 1e0a2f7c883d8324ec07ad490519f756068cb9a5 Mon Sep 17 00:00:00 2001 From: SEOHEE CHOI <165611407+karnelll@users.noreply.github.com> Date: Mon, 25 Aug 2025 17:04:03 +0900 Subject: [PATCH 7/8] =?UTF-8?q?Create=20=EC=B5=9C=EC=84=9C=ED=9D=AC.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../\354\265\234\354\204\234\355\235\254.md" | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 "10\354\236\245/\354\265\234\354\204\234\355\235\254.md" diff --git "a/10\354\236\245/\354\265\234\354\204\234\355\235\254.md" "b/10\354\236\245/\354\265\234\354\204\234\355\235\254.md" new file mode 100644 index 0000000..0ec73ad --- /dev/null +++ "b/10\354\236\245/\354\265\234\354\204\234\355\235\254.md" @@ -0,0 +1,17 @@ +# 10장. 클래스 + +## 인상 깊은 내용 + +* **클래스 체계 - 캡슐화** + + 변수와 유틸리티 함수는 가능한 공개하지 않는 편이 낫지만 반드시 숨겨야 한다는 법칙도 없다. 캡슐화를 풀어주는 결정은 언제나 최후의 수단이다. + +* **클래스는 작아야 한다! - 단일 책임 원칙/응집도** + + 단일 책임 원칙은 클래스나 모듈을 변경할 이유가 하나, 단 하나뿐이어야 한다는 원칙. + +* **변경하기 쉬운 클래스 - 변경으로부터 격리.** + + 깨끗한 시스템은 클래스를 체계적으로 정리해 변경에 수반하는 위험을 낮춘다. + 객체 지향 프로그래밍 입문에서 우리는 구체적인 클래스와 추상 클래스가 있다고 배웠다. 구체적인 클래스는 상세한 구현(코드)을 포함하며 추상 클래스는 개념만 포함한다고 배웠다. 상세한 구현에 의존하는 클라이언트 클래스는 구현이 바뀌면 위험에 빠진다. 그래서 우리는 인터페이스와 추상 클래스를 사용해 구현이 미치는 영향을 격리한다. + 시스템의 결합도를 낮추면 유연성과 재사용성도 더욱 높아진다. 결합독 낮다는 소리는 각 시스템 요소가 다른 요소로부터 그리고 변경으로부터 잘 격리되어 있다는 의미다. From f102d1132335a451d3fdf9a32102a4fac01052ba Mon Sep 17 00:00:00 2001 From: SEOHEE CHOI <165611407+karnelll@users.noreply.github.com> Date: Mon, 25 Aug 2025 17:05:48 +0900 Subject: [PATCH 8/8] =?UTF-8?q?Update=20=EC=B5=9C=EC=84=9C=ED=9D=AC.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- "10\354\236\245/\354\265\234\354\204\234\355\235\254.md" | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git "a/10\354\236\245/\354\265\234\354\204\234\355\235\254.md" "b/10\354\236\245/\354\265\234\354\204\234\355\235\254.md" index 0ec73ad..804fbe2 100644 --- "a/10\354\236\245/\354\265\234\354\204\234\355\235\254.md" +++ "b/10\354\236\245/\354\265\234\354\204\234\355\235\254.md" @@ -14,4 +14,4 @@ 깨끗한 시스템은 클래스를 체계적으로 정리해 변경에 수반하는 위험을 낮춘다. 객체 지향 프로그래밍 입문에서 우리는 구체적인 클래스와 추상 클래스가 있다고 배웠다. 구체적인 클래스는 상세한 구현(코드)을 포함하며 추상 클래스는 개념만 포함한다고 배웠다. 상세한 구현에 의존하는 클라이언트 클래스는 구현이 바뀌면 위험에 빠진다. 그래서 우리는 인터페이스와 추상 클래스를 사용해 구현이 미치는 영향을 격리한다. - 시스템의 결합도를 낮추면 유연성과 재사용성도 더욱 높아진다. 결합독 낮다는 소리는 각 시스템 요소가 다른 요소로부터 그리고 변경으로부터 잘 격리되어 있다는 의미다. + 시스템의 결합도를 낮추면 유연성과 재사용성도 더욱 높아진다. 결합도가 낮다는 소리는 각 시스템 요소가 다른 요소로부터 그리고 변경으로부터 잘 격리되어 있다는 의미다.