-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Deploying to gh-pages from @ c35a572 🚀
- Loading branch information
Showing
26 changed files
with
43 additions
and
33 deletions.
There are no files selected for viewing
Large diffs are not rendered by default.
Oops, something went wrong.
Large diffs are not rendered by default.
Oops, something went wrong.
Large diffs are not rendered by default.
Oops, something went wrong.
Large diffs are not rendered by default.
Oops, something went wrong.
Large diffs are not rendered by default.
Oops, something went wrong.
Large diffs are not rendered by default.
Oops, something went wrong.
Large diffs are not rendered by default.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1 +1 @@ | ||
{"componentChunkName":"component---src-templates-post-jsx","path":"/about-tdd/","result":{"data":{"site":{"siteMetadata":{"title":"log4dh"}},"markdownRemark":{"id":"6a5cce31-fad7-5c11-bd05-2e75410c5cd0","excerpt":"TDD란? Test Driven Development. 테스트 주도 개발이다. 보통 '~~ 주도 개발' 이라고 이름이 붙으면, 개발할 때 '~~' 를 1순위로 여기며 개발하는 방법론을 의미한다. 즉, 테스트 주도 개발은 테스트를 1순위로 여기며 개발하는 개발 방법론이다. 개발 방법론! 어떻게 하나? 결론: 테스트 코드 작성 -> 프로덕션 코드 작성 -> …","html":"<h2>TDD란?</h2>\n<p>Test Driven Development. 테스트 주도 개발이다.</p>\n<p>보통 '<em>~~ 주도 개발</em>' 이라고 이름이 붙으면, 개발할 때 '<em>~~</em>' 를 1순위로 여기며 개발하는 <strong>방법론</strong>을 의미한다.</p>\n<p>즉, 테스트 주도 개발은 테스트를 1순위로 여기며 개발하는 <strong>개발 방법론</strong>이다.</p>\n<p><strong>개발 방법론!</strong></p>\n<h2>어떻게 하나?</h2>\n<p>결론: <em>테스트 코드 작성 -> 프로덕션 코드 작성 -> 리팩터링</em> 순으로 진행한다.</p>\n<h3>1. 테스트 코드 작성</h3>\n<p>우선 구현하려는 기능에 대해 단위 테스트를 작성한다.</p>\n<p>작성하고 돌리면 당연히 실패한다. 왜? 아직 프로덕션 코드가 없으니까.<br>\n어쩌면 컴파일 조차 안될 것이다.</p>\n<h3>2. 프로덕션 코드 작성</h3>\n<p>이제 기능을 구현한다.</p>\n<p>테스트 코드와 프로덕션 코드를 이상없이 작성했다면 테스트가 통과할 것이다.</p>\n<p>이때 중요한 점은, 코드 품질은 신경쓰지 않아도 된다.</p>\n<h3>3. 리팩터링</h3>\n<p>코드 품질은 이제 신경쓴다.</p>\n<p>돌아가는 쓰레기를 만들었다면, 이제 이쁜 쓰레기로 만들 차례이다.</p>\n<p>테스트 코드, 프로덕션 코드 모두 리팩터링을 진행한다.</p>\n<h2>왜 하나?</h2>\n<p>TDD를 해본 경험으로 이야기하자면, 버그가 생길 확률이 현저하게 떨어진다. <br>\n(높은 테스트 커버리지는 덤)</p>\n<p>확실히 테스트 코드로 내가 구현하려는 기능에 대해 확실한 <strong>안전 장치</strong>를 걸고 기능을 추가하니까, 아무래도 안전하다.</p>\n<p>구현하려는 기능에 대한 도메인 이해도가 어느 정도 있고, 주어진 시간이 충분하다면 나는 TDD를 가급적 할 것이다.</p>\n<p>주변 지인들에게도 추천할 것이다.</p>\n<h2>단점은?</h2>\n<p>기능을 작성하는 데까지 시간이 오래 걸린다.</p>\n<p>아무래도 돌다리르 건널 때 두들겨보고 건너는 개념인데, 이 두들기는 시간이 상당하다.</p>\n<p>체감 상 바로 프로덕션 코드를 작성할 때에 비해 2~3배는 걸리는 것 같다.</p>\n<p>또, 내가 구현하려는 기능에 대해 설계 방법이나 감이 잘 오지 않거나 개발 초기 단계라서 변화가 매우 빠른 상황이라면 나는 비추한다.</p>\n<p>TDD는 테스트 코드를 필연적으로 낳게 되는데, 이 테스트 코드는 위 상황에서는 걸림돌이기 때문이다.</p>\n<p>TDD는 개발 <strong>방법론</strong>일 뿐이니 너무 맹신하지말자.</p>\n<p>무엇이든 <strong>상황에 맞게 판단</strong>하자.</p>","frontmatter":{"title":"TDD에 대해","date":"November 29, 2023","update":"November 29, 2023","tags":["tdd"],"series":null},"fields":{"slug":"/about-tdd/","readingTime":{"minutes":3.46}}},"seriesList":{"edges":[{"node":{"id":"3b94cbd6-f64a-5d82-96a2-0761602c250b","fields":{"slug":"/dbcp/"},"frontmatter":{"title":"DBCP와 HikariCP 이해하기"}}},{"node":{"id":"15ca77a9-4e26-59d5-8c4a-94f6fbae3a07","fields":{"slug":"/unit-test/"},"frontmatter":{"title":"단위 테스트"}}},{"node":{"id":"89b57813-f839-5a4e-b503-545830aec1fb","fields":{"slug":"/using-junit-and-assertJ/"},"frontmatter":{"title":"JUnit과 AssertJ 활용법"}}},{"node":{"id":"6a5cce31-fad7-5c11-bd05-2e75410c5cd0","fields":{"slug":"/about-tdd/"},"frontmatter":{"title":"TDD에 대해"}}},{"node":{"id":"014bd317-3394-5c4d-9a72-e1319712838a","fields":{"slug":"/03-user-identification/"},"frontmatter":{"title":"MySQL에서의 사용자 식별에 대해"}}},{"node":{"id":"10e0dab4-d2e7-52df-8daa-31bfef1b08b6","fields":{"slug":"/static-with-memory-structure/"},"frontmatter":{"title":"static을 더 잘 사용하기"}}},{"node":{"id":"c773b0a0-9610-5605-bdb9-9089df57f52b","fields":{"slug":"/about-garbage-collection/"},"frontmatter":{"title":"JVM의 Garbage Collection과 동작 원리"}}},{"node":{"id":"0bf99b61-98a4-5c40-b8ce-05a918d212f7","fields":{"slug":"/garbage-collection-tuning/"},"frontmatter":{"title":"Garbage Collection 튜닝에 대해"}}},{"node":{"id":"61bd95c2-424a-54c8-96d9-bec4c8a4f58c","fields":{"slug":"/garbage-collection-algorithms/"},"frontmatter":{"title":"Garbage Collection 알고리즘"}}},{"node":{"id":"c87443bb-4e35-55e7-94d5-a5cb70d2dbc8","fields":{"slug":"/cautions-for-using-collections-in-Java/"},"frontmatter":{"title":"Java에서 컬렉션을 사용할 때 주의할 점"}}}]},"previous":{"fields":{"slug":"/db-interview-study-2week/"},"frontmatter":{"title":"DB 면접 스터디 2주차"}},"next":{"fields":{"slug":"/os-interview-study-4week/"},"frontmatter":{"title":"[JSCODE] - OS 면접 스터디 4주차"}}},"pageContext":{"id":"6a5cce31-fad7-5c11-bd05-2e75410c5cd0","series":null,"previousPostId":"d25aa4fc-f56a-5bf0-956a-040f1dc94491","nextPostId":"964be3af-4d8b-5d26-9b8f-9be8e7a34ad2"}},"staticQueryHashes":[],"slicesMap":{}} | ||
{"componentChunkName":"component---src-templates-post-jsx","path":"/about-tdd/","result":{"data":{"site":{"siteMetadata":{"title":"log4dh"}},"markdownRemark":{"id":"91a7a622-00f8-5cca-b6c1-e4f7db7ee31e","excerpt":"TDD란? Test Driven Development. 테스트 주도 개발이다. 보통 '~~ 주도 개발' 이라고 이름이 붙으면, 개발할 때 '~~' 를 1순위로 여기며 개발하는 방법론을 의미한다. 즉, 테스트 주도 개발은 테스트를 1순위로 여기며 개발하는 개발 방법론이다. 개발 방법론! 어떻게 하나? 결론: 테스트 코드 작성 -> 프로덕션 코드 작성 -> …","html":"<h2>TDD란?</h2>\n<p>Test Driven Development. 테스트 주도 개발이다.</p>\n<p>보통 '<em>~~ 주도 개발</em>' 이라고 이름이 붙으면, 개발할 때 '<em>~~</em>' 를 1순위로 여기며 개발하는 <strong>방법론</strong>을 의미한다.</p>\n<p>즉, 테스트 주도 개발은 테스트를 1순위로 여기며 개발하는 <strong>개발 방법론</strong>이다.</p>\n<p><strong>개발 방법론!</strong></p>\n<h2>어떻게 하나?</h2>\n<p>결론: <em>테스트 코드 작성 -> 프로덕션 코드 작성 -> 리팩터링</em> 순으로 진행한다.</p>\n<h3>1. 테스트 코드 작성</h3>\n<p>우선 구현하려는 기능에 대해 단위 테스트를 작성한다.</p>\n<p>작성하고 돌리면 당연히 실패한다. 왜? 아직 프로덕션 코드가 없으니까.<br>\n어쩌면 컴파일 조차 안될 것이다.</p>\n<h3>2. 프로덕션 코드 작성</h3>\n<p>이제 기능을 구현한다.</p>\n<p>테스트 코드와 프로덕션 코드를 이상없이 작성했다면 테스트가 통과할 것이다.</p>\n<p>이때 중요한 점은, 코드 품질은 신경쓰지 않아도 된다.</p>\n<h3>3. 리팩터링</h3>\n<p>코드 품질은 이제 신경쓴다.</p>\n<p>돌아가는 쓰레기를 만들었다면, 이제 이쁜 쓰레기로 만들 차례이다.</p>\n<p>테스트 코드, 프로덕션 코드 모두 리팩터링을 진행한다.</p>\n<h2>왜 하나?</h2>\n<p>TDD를 해본 경험으로 이야기하자면, 버그가 생길 확률이 현저하게 떨어진다. <br>\n(높은 테스트 커버리지는 덤)</p>\n<p>확실히 테스트 코드로 내가 구현하려는 기능에 대해 확실한 <strong>안전 장치</strong>를 걸고 기능을 추가하니까, 아무래도 안전하다.</p>\n<p>구현하려는 기능에 대한 도메인 이해도가 어느 정도 있고, 주어진 시간이 충분하다면 나는 TDD를 가급적 할 것이다.</p>\n<p>주변 지인들에게도 추천할 것이다.</p>\n<h2>단점은?</h2>\n<p>기능을 작성하는 데까지 시간이 오래 걸린다.</p>\n<p>아무래도 돌다리르 건널 때 두들겨보고 건너는 개념인데, 이 두들기는 시간이 상당하다.</p>\n<p>체감 상 바로 프로덕션 코드를 작성할 때에 비해 2~3배는 걸리는 것 같다.</p>\n<p>또, 내가 구현하려는 기능에 대해 설계 방법이나 감이 잘 오지 않거나 개발 초기 단계라서 변화가 매우 빠른 상황이라면 나는 비추한다.</p>\n<p>TDD는 테스트 코드를 필연적으로 낳게 되는데, 이 테스트 코드는 위 상황에서는 걸림돌이기 때문이다.</p>\n<p>TDD는 개발 <strong>방법론</strong>일 뿐이니 너무 맹신하지말자.</p>\n<p>무엇이든 <strong>상황에 맞게 판단</strong>하자.</p>\n<h2>착각하기 쉬운 것</h2>\n<p>프로젝트에 TDD를 적용한다고 했을 때, 항상 모든 기능에 대해 테스트 코드를 먼저 작성할 수 없다.</p>\n<p>물론 구현하려는 기능에 대해 분명하고 확실한 상황이라면 TDD를 적용할 수 있지만, 개발이라는 게 처음 생각한대로 구현하다보면 생각지도 못한 기능을 함께 구현해야 하는 경우가 종종 있다.</p>\n<p>따라서 TDD를 처음 시도해보려는 사람들이 혹여나 \"테스트 코드를 먼저 작성하기 전까지는 기능 구현 안할거야 !!\" 라는 생각을 가질 수 있다고 생각한다.</p>\n<p>본인이 구현하려는 기능이 무엇인지 분명히 아는 선에서, TDD를 적용하는 것이 바람직해보인다. </p>","frontmatter":{"title":"TDD 이해하기","date":"November 29, 2023","update":null,"tags":["tdd","test"],"series":null},"fields":{"slug":"/about-tdd/","readingTime":{"minutes":4.55}}},"seriesList":{"edges":[{"node":{"id":"3b94cbd6-f64a-5d82-96a2-0761602c250b","fields":{"slug":"/dbcp/"},"frontmatter":{"title":"DBCP와 HikariCP 이해하기"}}},{"node":{"id":"c5760ea9-e137-5edf-8244-3a93e25b067b","fields":{"slug":"/unit-test/"},"frontmatter":{"title":"단위 테스트 이해하기"}}},{"node":{"id":"8ae82b3f-5b72-555c-89fe-9939dcf8377c","fields":{"slug":"/using-junit-and-assertJ/"},"frontmatter":{"title":"JUnit과 AssertJ 활용법"}}},{"node":{"id":"91a7a622-00f8-5cca-b6c1-e4f7db7ee31e","fields":{"slug":"/about-tdd/"},"frontmatter":{"title":"TDD 이해하기"}}},{"node":{"id":"014bd317-3394-5c4d-9a72-e1319712838a","fields":{"slug":"/03-user-identification/"},"frontmatter":{"title":"MySQL에서의 사용자 식별에 대해"}}},{"node":{"id":"10e0dab4-d2e7-52df-8daa-31bfef1b08b6","fields":{"slug":"/static-with-memory-structure/"},"frontmatter":{"title":"static을 더 잘 사용하기"}}},{"node":{"id":"c773b0a0-9610-5605-bdb9-9089df57f52b","fields":{"slug":"/about-garbage-collection/"},"frontmatter":{"title":"JVM의 Garbage Collection과 동작 원리"}}},{"node":{"id":"0bf99b61-98a4-5c40-b8ce-05a918d212f7","fields":{"slug":"/garbage-collection-tuning/"},"frontmatter":{"title":"Garbage Collection 튜닝에 대해"}}},{"node":{"id":"61bd95c2-424a-54c8-96d9-bec4c8a4f58c","fields":{"slug":"/garbage-collection-algorithms/"},"frontmatter":{"title":"Garbage Collection 알고리즘"}}},{"node":{"id":"c87443bb-4e35-55e7-94d5-a5cb70d2dbc8","fields":{"slug":"/cautions-for-using-collections-in-Java/"},"frontmatter":{"title":"Java에서 컬렉션을 사용할 때 주의할 점"}}}]},"previous":{"fields":{"slug":"/db-interview-study-2week/"},"frontmatter":{"title":"DB 면접 스터디 2주차"}},"next":{"fields":{"slug":"/os-interview-study-4week/"},"frontmatter":{"title":"[JSCODE] - OS 면접 스터디 4주차"}}},"pageContext":{"id":"91a7a622-00f8-5cca-b6c1-e4f7db7ee31e","series":null,"previousPostId":"d25aa4fc-f56a-5bf0-956a-040f1dc94491","nextPostId":"964be3af-4d8b-5d26-9b8f-9be8e7a34ad2"}},"staticQueryHashes":[],"slicesMap":{}} |
2 changes: 1 addition & 1 deletion
2
page-data/cautions-for-using-collections-in-Java/page-data.json
Large diffs are not rendered by default.
Oops, something went wrong.
Oops, something went wrong.