From 641826aab21f4cd6a305be8f1781252b55f19259 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Wed, 28 Aug 2024 12:42:39 +0000 Subject: [PATCH] Rename and update Markdown files based on h1 titles --- ...hm \352\264\200\353\240\250 bookmark_.md" | 30 + .../algorithm/_ \352\265\254\355\230\204_.md" | 298 ++++ ...4\352\263\240\353\246\254\354\246\230_.md" | 186 +++ ... \352\267\270\353\246\254\353\224\224_.md" | 350 +++++ ...4\355\225\240\354\240\225\353\263\265_.md" | 386 +++++ ...\355\203\235 \354\240\225\353\240\254_.md" | 734 +++++++++ ...s LinkedList \354\260\250\354\235\264_.md" | 138 ++ .../data-structure/_ Big O_.md | 426 +++++ ...\355\225\234 \354\240\225\353\246\254_.md" | 210 +++ .../_ \353\260\260\354\227\264_array__.md" | 95 ++ ...\355\203\235\352\263\274 \355\201\220_.md" | 120 ++ ... \353\246\254\354\212\244\355\212\270_.md" | 136 ++ ...\354\235\230 \354\260\250\354\235\264_.md" | 149 ++ ...4\352\267\200\355\225\250\354\210\230_.md" | 373 +++++ .../_ \355\212\270\353\246\254_.md" | 518 +++++++ ...\354\273\244\355\224\274\354\261\227__.md" | 422 +++++ ...\354\204\234\354\232\270\352\271\214__.md" | 226 +++ ...\353\212\224 \353\260\251\353\262\225_.md" | 187 +++ ...\354\235\270 \354\260\276\352\270\260_.md" | 38 + ...5\264\353\223\234 4\354\236\245 _ _3__.md" | 38 + ...35\264\353\223\234 4\354\236\245 __1__.md" | 643 ++++++++ ...35\264\353\223\234 4\354\236\245 __2__.md" | 515 +++++++ ...354\235\264\353\223\234 1\354\236\245_.md" | 137 ++ ...354\235\264\353\223\234 2\354\236\245_.md" | 284 ++++ ...354\235\264\353\223\234 3\354\236\245_.md" | 243 +++ ... \352\263\265\353\217\231\354\262\264_.md" | 191 +++ ...\355\201\254 \353\252\250\354\235\214_.md" | 3 + ...\355\225\234 \354\236\221\354\227\205_.md" | 462 ++++++ ...\353\220\234 \354\247\200\354\213\235_.md" | 34 + ... \353\252\205\353\240\271\354\226\264_.md" | 98 ++ ...2\270 github \354\247\200\354\213\235_.md" | 196 +++ ...\353\217\231 \355\225\230\352\270\260_.md" | 217 +++ ... CS \352\264\200\353\240\250 BOOKMARK_.md" | 20 + ...4\232\264 cs \354\247\200\354\213\235_.md" | 424 +++++ ...\353\223\234 \355\231\234\354\232\251_.md" | 246 +++ ... \353\251\224\354\204\234\353\223\234_.md" | 272 ++++ ...1\355\203\234\354\275\224\353\223\234_.md" | 241 +++ ...\353\260\230 \355\227\244\353\215\224_.md" | 429 ++++++ ...\354\235\230 \352\270\260\353\263\270_.md" | 258 ++++ ...\354\262\255 \355\235\220\353\246\204_.md" | 157 ++ ...4\355\212\270\354\233\214\355\201\254_.md" | 166 ++ ...\354\204\261\355\225\234\353\213\244__.md" | 267 ++++ ...4\353\241\244\353\241\234\352\267\270_.md" | 17 + ...54\242\213\354\235\204\352\271\214____.md" | 2 + ...\354\235\230 \354\213\244\355\203\234_.md" | 16 + ...4\354\227\207\354\235\270\352\260\200_.md" | 172 +++ developLog/ex/credential/_ ADsP_.md | 2 + developLog/ex/credential/_ SQLD_.md | 16 + ...\352\270\260 \355\233\204\352\270\260_.md" | 176 +++ .../_ \354\213\244\352\270\260_.md" | 8 + ...\353\246\260 \353\262\204\354\240\204_.md" | 282 ++++ ...\353\260\217 \355\233\204\352\270\260_.md" | 498 ++++++ ...354\235\214_ \352\262\260\352\263\274_.md" | 743 +++++++++ ...3\212\224_ 20\352\260\200\354\247\200_.md" | 245 +++ ...3\354\226\264\352\260\200\352\270\260_.md" | 132 ++ ...\355\212\270 \355\232\214\352\263\240_.md" | 338 ++++ ...\353\246\277 \352\263\265\354\234\240_.md" | 21 + ...\353\246\277 \352\263\265\354\234\240_.md" | 11 + ... \355\232\214\352\263\240\353\241\235_.md" | 170 ++ ...\354\235\230 \354\240\204\355\231\230_.md" | 280 ++++ ...\354\233\224 \353\252\251\355\221\234_.md" | 135 ++ ...\354\233\224 \353\252\251\355\221\234_.md" | 204 +++ ...354\247\204\355\231\224 level up 2024_.md" | 584 +++++++ ...\354\233\224 \352\263\204\355\232\215_.md" | 216 +++ ...\354\233\224 \353\252\251\355\221\234_.md" | 353 +++++ ... \355\232\214\352\263\240\353\241\235_.md" | 345 +++++ ... \355\232\214\352\263\240\353\241\235_.md" | 439 ++++++ ...\354\233\224 \355\232\214\352\263\240_.md" | 454 ++++++ ...\354\227\205\354\206\214\354\213\235__.md" | 359 +++++ ... \354\260\270\354\241\260\355\230\225_.md" | 183 +++ ...\354\225\204\353\263\264\354\236\220__.md" | 250 +++ ...354\240\225\353\246\254 1\355\216\270_.md" | 486 ++++++ ...354\240\225\353\246\254 2\355\216\270_.md" | 569 +++++++ ...\354\235\230 \354\240\225\353\246\254_.md" | 1146 ++++++++++++++ ...\352\263\201\353\223\234\353\246\260__.md" | 1372 +++++++++++++++++ ...4\353\241\244\353\241\234\352\267\270_.md" | 124 ++ ...\353\245\230 \354\262\230\353\246\254_.md" | 818 ++++++++++ ...4\353\262\204\353\241\234\353\224\251_.md" | 974 ++++++++++++ ... \354\212\244\355\204\260\353\224\224_.md" | 95 ++ ...4\354\247\200\355\206\240\353\246\254_.md" | 31 + ...\354\235\270\352\260\200\354\232\224__.md" | 274 ++++ developLog/spring/basic/_ MVC_.md | 127 ++ ...\354\235\270\352\260\200\354\232\224__.md" | 79 + ...60\251\353\262\225__Component_ _Bean__.md" | 60 + ...1\354\236\221\354\233\220\353\246\254_.md" | 69 + ...\354\227\207\354\235\270\352\260\200__.md" | 169 ++ ...205_ Setter \354\243\274\354\236\205__.md" | 137 ++ ...\355\225\234 \352\270\260\354\210\240_.md" | 173 +++ ...4\353\241\244\353\241\234\352\267\270_.md" | 148 ++ developLog/tip-bookmark/_ Bookmark_.md | 228 +++ ...3\264\352\270\260_tistory_ github_io__.md" | 54 + ...225\353\246\254\353\220\234 tech blog_.md" | 9 + ...\352\263\274 \353\260\251\354\225\210_.md" | 159 ++ ...\354\261\227\354\235\264\353\236\200__.md" | 329 ++++ ...3\212\224 BE \353\220\230\352\270\260_.md" | 254 +++ 95 files changed, 25098 insertions(+) create mode 100644 "developLog/algorithm-datastructure/_ Algorithm \352\264\200\353\240\250 bookmark_.md" create mode 100644 "developLog/algorithm-datastructure/algorithm/_ \352\265\254\355\230\204_.md" create mode 100644 "developLog/algorithm-datastructure/algorithm/_ \352\267\270\353\236\230\355\224\204 \354\225\214\352\263\240\353\246\254\354\246\230_.md" create mode 100644 "developLog/algorithm-datastructure/algorithm/_ \352\267\270\353\246\254\353\224\224_.md" create mode 100644 "developLog/algorithm-datastructure/algorithm/_ \353\217\231\354\240\201 \352\263\204\355\232\215\353\262\225\352\263\274 \353\266\204\355\225\240\354\240\225\353\263\265_.md" create mode 100644 "developLog/algorithm-datastructure/algorithm/_ \353\262\204\353\270\224 \354\240\225\353\240\254_ \354\202\275\354\236\205 \354\240\225\353\240\254_ \354\204\240\355\203\235 \354\240\225\353\240\254_.md" create mode 100644 "developLog/algorithm-datastructure/data-structure/_ Array vs ArrayList vs LinkedList \354\260\250\354\235\264_.md" create mode 100644 developLog/algorithm-datastructure/data-structure/_ Big O_.md create mode 100644 "developLog/algorithm-datastructure/data-structure/_ BigInteger\354\227\220 \353\214\200\355\225\234 \354\240\225\353\246\254_.md" create mode 100644 "developLog/algorithm-datastructure/data-structure/_ \353\260\260\354\227\264_array__.md" create mode 100644 "developLog/algorithm-datastructure/data-structure/_ \354\212\244\355\203\235\352\263\274 \355\201\220_.md" create mode 100644 "developLog/algorithm-datastructure/data-structure/_ \354\227\260\352\262\260 \353\246\254\354\212\244\355\212\270_.md" create mode 100644 "developLog/algorithm-datastructure/data-structure/_ \354\232\260\354\204\240\354\210\234\354\234\204 \355\201\220\354\231\200 \355\236\231\354\235\230 \354\260\250\354\235\264_.md" create mode 100644 "developLog/algorithm-datastructure/data-structure/_ \354\236\254\352\267\200\355\225\250\354\210\230_.md" create mode 100644 "developLog/algorithm-datastructure/data-structure/_ \355\212\270\353\246\254_.md" create mode 100644 "developLog/book/_ \354\232\224\354\246\230 \352\260\234\353\260\234\354\236\220 \354\232\224\354\225\275 \353\260\217 \354\213\240\354\236\205 \352\260\234\353\260\234\354\236\220\354\235\230 \353\260\251\355\226\245\354\204\261 \354\260\276\352\270\260_feat_ \354\273\244\355\224\274\354\261\227__.md" create mode 100644 "developLog/book/learn-errors/_ 1\354\236\245 \354\227\220\353\237\254\352\260\200 \354\231\234 \353\254\264\354\204\234\354\232\270\352\271\214__.md" create mode 100644 "developLog/book/learn-errors/_ 2\354\236\245 \354\227\220\353\237\254\353\245\274 \354\236\230 \354\235\275\353\212\224 \353\260\251\353\262\225_.md" create mode 100644 "developLog/book/learn-errors/_ 3\354\236\245 \355\232\250\354\234\250\354\240\201\354\234\274\353\241\234 \354\227\220\353\237\254\354\235\230 \354\233\220\354\235\270 \354\260\276\352\270\260_.md" create mode 100644 "developLog/book/onboarding/4/_ \352\260\234\353\260\234\354\236\220 \354\230\250\353\263\264\353\224\251 \352\260\200\354\235\264\353\223\234 4\354\236\245 _ _3__.md" create mode 100644 "developLog/book/onboarding/4/_ \352\260\234\353\260\234\354\236\220 \354\230\250\353\263\264\353\224\251 \352\260\200\354\235\264\353\223\234 4\354\236\245 __1__.md" create mode 100644 "developLog/book/onboarding/4/_ \355\225\204\353\217\205 \352\260\234\353\260\234\354\236\220 \354\230\250\353\263\264\353\224\251 \352\260\200\354\235\264\353\223\234 4\354\236\245 __2__.md" create mode 100644 "developLog/book/onboarding/_ \355\225\204\353\217\205 \352\260\234\353\260\234\354\236\220 \354\230\250\353\263\264\353\224\251 \352\260\200\354\235\264\353\223\234 1\354\236\245_.md" create mode 100644 "developLog/book/onboarding/_ \355\225\204\353\217\205 \352\260\234\353\260\234\354\236\220 \354\230\250\353\263\264\353\224\251 \352\260\200\354\235\264\353\223\234 2\354\236\245_.md" create mode 100644 "developLog/book/onboarding/_ \355\225\204\353\217\205 \352\260\234\353\260\234\354\236\220 \354\230\250\353\263\264\353\224\251 \352\260\200\354\235\264\353\223\234 3\354\236\245_.md" create mode 100644 "developLog/book/oop/_ 1\354\236\245 _ \355\230\221\353\240\245\355\225\230\353\212\224 \352\260\235\354\262\264\353\223\244\354\235\230 \352\263\265\353\217\231\354\262\264_.md" create mode 100644 "developLog/ci-cd/github-action/_ Github Action \353\247\201\355\201\254 \353\252\250\354\235\214_.md" create mode 100644 "developLog/ci-cd/github-action/_ OAuth \354\225\261\354\227\220 \353\214\200\355\225\234 \353\262\224\354\234\204 \353\260\217 gitbook\352\263\274 github_io\353\245\274 \354\236\220\353\217\231\355\231\224\353\245\274 \354\234\204\355\225\234 \354\236\221\354\227\205_.md" create mode 100644 "developLog/ci-cd/github/_ Git\354\227\220\354\204\234 \354\225\214\352\262\214 \353\220\234 \354\247\200\354\213\235_.md" create mode 100644 "developLog/ci-cd/github/_ github \354\236\220\354\243\274 \354\223\260\353\212\224 \353\252\205\353\240\271\354\226\264_.md" create mode 100644 "developLog/ci-cd/github/_ \355\214\200\355\224\204\353\241\234\354\240\235\355\212\270\353\225\214 \354\225\214\354\225\204\353\202\270 github \354\247\200\354\213\235_.md" create mode 100644 "developLog/ci-cd/github/github.io/_ github_io Chipy \355\205\214\353\247\210 \354\227\260\353\217\231 \355\225\230\352\270\260_.md" create mode 100644 "developLog/cs/_ CS \352\264\200\353\240\250 BOOKMARK_.md" create mode 100644 "developLog/cs/etc/_ \353\251\200\355\213\260\354\272\240\355\215\274\354\212\244\354\227\220\354\204\234 \353\260\260\354\232\264 cs \354\247\200\354\213\235_.md" create mode 100644 "developLog/cs/http/_ HTTP \353\251\224\354\204\234\353\223\234 \355\231\234\354\232\251_.md" create mode 100644 "developLog/cs/http/_ HTTP \353\251\224\354\204\234\353\223\234_.md" create mode 100644 "developLog/cs/http/_ HTTP \354\203\201\355\203\234\354\275\224\353\223\234_.md" create mode 100644 "developLog/cs/http/_ HTTP \355\227\244\353\215\224 1 _ \354\235\274\353\260\230 \355\227\244\353\215\224_.md" create mode 100644 "developLog/cs/http/_ HTTP\354\235\230 \352\270\260\353\263\270_.md" create mode 100644 "developLog/cs/http/_ URI\354\231\200 \354\233\271 \353\270\214\353\235\274\354\232\260\354\240\200\354\235\230 \354\232\224\354\262\255 \355\235\220\353\246\204_.md" create mode 100644 "developLog/cs/http/_ \354\235\270\355\204\260\353\204\267 \353\204\244\355\212\270\354\233\214\355\201\254_.md" create mode 100644 "developLog/cs/network/_ Story 01_ HTTP \353\246\254\355\200\230\354\212\244\355\212\270 \353\251\224\354\204\270\354\247\200\353\245\274 \354\236\221\354\204\261\355\225\234\353\213\244__.md" create mode 100644 "developLog/cs/network/_ \353\204\244\355\212\270\354\233\214\355\201\254 \352\263\265\353\266\200\355\225\230\352\270\260 \355\224\204\353\241\244\353\241\234\352\267\270_.md" create mode 100644 "developLog/cs/os/_ \355\224\204\353\241\234\354\204\270\354\212\244_ \354\212\244\353\240\210\353\223\234_ \353\251\200\355\213\260\355\203\234\354\212\244\355\202\271_ \353\251\200\355\213\260\354\212\244\353\240\210\353\224\251_ \353\251\200\355\213\260\355\224\204\353\241\234\354\204\270\354\213\261_ \353\251\200\355\213\260\355\224\204\353\241\234\352\267\270\353\236\230\353\260\215\352\263\274 \354\212\244\353\240\210\353\223\234\353\245\274 \353\247\216\354\235\264 \354\223\270\354\210\230\353\241\235 \355\225\255\354\203\201 \354\204\261\353\212\245\354\235\264 \354\242\213\354\235\204\352\271\214____.md" create mode 100644 "developLog/cs/security/_ \354\232\260\353\246\254\353\202\230\353\235\274 \353\263\264\354\225\210\354\235\230 \354\213\244\355\203\234_.md" create mode 100644 "developLog/cs/sever/_ \355\206\260\354\274\223\354\235\264\353\236\200 \353\254\264\354\227\207\354\235\270\352\260\200_.md" create mode 100644 developLog/ex/credential/_ ADsP_.md create mode 100644 developLog/ex/credential/_ SQLD_.md create mode 100644 "developLog/ex/credential/engineer-information-processing/_ \353\214\200\355\225\231\354\203\235_ \354\267\250\354\244\200\354\203\235_ \354\213\240\354\236\205\352\260\234\353\260\234\354\236\220\354\235\230 \352\263\274\354\240\225\352\263\274 \355\225\250\352\273\230\355\225\234 \354\240\225\353\263\264\354\262\230\353\246\254\352\270\260\354\202\254 4\355\212\270 2024\353\205\204 1\355\232\214 \354\213\244\352\270\260 \355\233\204\352\270\260_.md" create mode 100644 "developLog/ex/credential/engineer-information-processing/_ \354\213\244\352\270\260_.md" create mode 100644 "developLog/ex/employment-job-change/si/_ \354\225\240\353\247\244\355\225\234 \354\213\240\354\236\205\352\260\234\353\260\234\354\236\220\354\235\230 \354\244\221\354\206\214_ si \354\267\250\354\244\200\352\270\260_feat_ \354\235\264\353\240\245\354\204\234 \353\260\217 \355\217\254\355\212\270\355\217\264\353\246\254\354\230\244 \354\236\221\354\204\261\353\262\225_ \353\251\264\354\240\221 \355\233\204\352\270\260_ _ \352\260\204\354\266\224\353\246\260 \353\262\204\354\240\204_.md" create mode 100644 "developLog/ex/employment-job-change/si/_ \354\225\240\353\247\244\355\225\234 \354\214\251\354\213\240\354\236\205\352\260\234\353\260\234\354\236\220 \354\244\221\354\206\214_ si \354\267\250\354\244\200\352\270\260 1\355\203\204 \354\235\264\353\240\245\354\204\234 \353\260\217 \355\217\254\355\212\270\355\217\264\353\246\254\354\230\244 \354\236\221\354\204\261\353\262\225 \353\260\217 \355\233\204\352\270\260_.md" create mode 100644 "developLog/ex/employment-job-change/si/_ \354\225\240\353\247\244\355\225\234 \354\214\251\354\213\240\354\236\205\352\260\234\353\260\234\354\236\220 \354\244\221\354\206\214_ si \354\267\250\354\244\200\352\270\260 2\355\203\204 \353\251\264\354\240\221 \355\233\204\352\270\260_ \354\247\210\353\254\270_ \354\267\250\354\227\205 \352\264\200\353\240\250 \354\202\254\354\235\264\355\212\270 \353\252\250\354\235\214_ \352\262\260\352\263\274_.md" create mode 100644 "developLog/ex/employment-job-change/si/_ \354\243\274\353\213\210\354\226\264\352\260\200 \354\262\253 \355\232\214\354\202\254 \353\213\244\353\213\210\353\251\264\354\204\234 \352\271\250\353\213\254\354\235\200__\352\271\250\353\213\254\354\225\204\352\260\200\353\212\224_ 20\352\260\200\354\247\200_.md" create mode 100644 "developLog/ex/knowledge/_ \355\212\270\354\234\204\355\204\260\353\245\274 \355\206\265\355\225\234 \353\252\250\353\245\264\353\212\224 \354\247\200\354\213\235\354\235\204 \354\226\273\354\226\264\352\260\200\352\270\260_.md" create mode 100644 "developLog/ex/my-story/_ \353\214\200\355\225\231 \354\236\205\355\225\231 \354\240\204 __ \354\267\250\354\227\205 \354\240\204\352\271\214\354\247\200\354\235\230 \354\225\204\353\245\264\353\260\224\354\235\264\355\212\270 \355\232\214\352\263\240_.md" create mode 100644 "developLog/ex/template/_ \353\205\270\354\205\230 \355\214\200 \354\212\244\355\204\260\353\224\224 \355\205\234\355\224\214\353\246\277 \352\263\265\354\234\240_.md" create mode 100644 "developLog/ex/template/_ \355\214\200\355\224\204\353\241\234\354\240\235\355\212\270 \352\264\200\353\240\250 \353\205\270\354\205\230 \355\205\234\355\224\214\353\246\277 \352\263\265\354\234\240_.md" create mode 100644 "developLog/memoir/2023/_ 2023\353\205\204 11\354\233\224 \355\232\214\352\263\240\353\241\235_.md" create mode 100644 "developLog/memoir/2023/_ 2023\353\205\204 7\354\233\224 \355\232\214\352\263\240 \352\262\270 8\354\233\224 \353\252\251\355\221\234\354\231\200 \354\203\235\352\260\201\354\235\230 \354\240\204\355\231\230_.md" create mode 100644 "developLog/memoir/2023/_ 2023\353\205\204 8\354\233\224 \355\232\214\352\263\240 \353\260\217 9\354\233\224 \353\252\251\355\221\234_.md" create mode 100644 "developLog/memoir/2023/_ 2023\353\205\204 9\354\233\224_ 10\354\233\224 \355\232\214\352\263\240\352\270\200 \353\260\217 11\354\233\224 \353\252\251\355\221\234_.md" create mode 100644 "developLog/memoir/2023/_ \353\263\200\355\231\224 Change\354\235\230 2023 \353\212\246\354\235\200 \355\232\214\352\263\240 \354\247\204\355\231\224 level up 2024_.md" create mode 100644 "developLog/memoir/2024/_ 2024\353\205\204 3\354\233\224 \355\232\214\352\263\240\353\241\235 \353\260\217 4\354\233\224 \352\263\204\355\232\215_.md" create mode 100644 "developLog/memoir/2024/_ 2024\353\205\204 4\354\233\224_ 5\354\233\224 \354\244\221\352\260\204 \355\232\214\352\263\240\353\241\235 \353\260\217 5\354\233\224_ 6\354\233\224 \353\252\251\355\221\234_.md" create mode 100644 "developLog/memoir/2024/_ 2024\353\205\204 6\354\233\224 \355\232\214\352\263\240\353\241\235_.md" create mode 100644 "developLog/memoir/2024/_ 2024\353\205\204 7\354\233\224 \355\232\214\352\263\240\353\241\235_.md" create mode 100644 "developLog/memoir/2024/_ \354\214\251 \354\213\240\354\236\205\352\260\234\353\260\234\354\236\220 \354\267\250\354\244\200\352\270\260 \355\232\214\352\263\240_ 1\354\243\274\354\235\274 \354\266\234\352\267\274 \352\262\270 1\354\233\224 \355\232\214\352\263\240_.md" create mode 100644 "developLog/memoir/2024/_ \354\244\221\354\206\214 \354\213\240\354\236\205 \352\260\234\353\260\234\354\236\220 \355\225\234 \353\213\254 \354\266\234\352\267\274 \352\262\270 2024\353\205\204 2\354\233\224 \355\232\214\352\263\240 _ feat_ \352\265\255\353\271\204 \353\271\204\354\240\204\352\263\265\354\236\220 \354\271\234\352\265\254 \354\267\250\354\227\205\354\206\214\354\213\235__.md" create mode 100644 "developLog/programming-lanuage/java/grammar/_ Call by value vs Call by Reference\352\263\274 \352\270\260\353\263\270\355\230\225\352\263\274 \354\260\270\354\241\260\355\230\225_.md" create mode 100644 "developLog/programming-lanuage/java/grammar/_ NullPointException\354\227\220 \353\214\200\355\225\264 \354\225\214\354\225\204\353\263\264\354\236\220__.md" create mode 100644 "developLog/programming-lanuage/java/grammar/_ \354\236\220\353\260\224 \353\254\270\353\262\225 \355\225\234\353\210\210\354\227\220 \354\240\225\353\246\254 1\355\216\270_.md" create mode 100644 "developLog/programming-lanuage/java/grammar/_ \354\236\220\353\260\224 \353\254\270\353\262\225 \355\225\234\353\210\210\354\227\220 \354\240\225\353\246\254 2\355\216\270_.md" create mode 100644 "developLog/programming-lanuage/java/younghan-lecture/_ \354\236\220\353\260\224 \354\236\205\353\254\270 \352\260\225\354\235\230 \354\240\225\353\246\254_.md" create mode 100644 "developLog/programming-lanuage/python/_ \354\240\225\353\263\264\354\262\230\353\246\254\352\270\260\354\202\254 \354\213\244\352\270\260\353\245\274 \354\234\204\355\225\234 \355\214\214\354\235\264\354\215\254 \354\240\225\353\246\254_\354\225\275\352\260\204\354\235\230 \354\240\221\354\210\230 \355\233\204\352\270\260\353\245\274 \352\263\201\353\223\234\353\246\260__.md" create mode 100644 "developLog/programming-lanuage/python/_ \355\214\214\354\235\264\354\215\254 \355\224\204\353\241\244\353\241\234\352\267\270_.md" create mode 100644 "developLog/programming-lanuage/rust/_ Chater 06_ \354\230\244\353\245\230 \354\262\230\353\246\254_.md" create mode 100644 "developLog/programming-lanuage/rust/_ Chater 12_ \354\227\260\354\202\260\354\236\220 \354\230\244\353\262\204\353\241\234\353\224\251_.md" create mode 100644 "developLog/programming-lanuage/rust/_ Rust\352\260\200 \353\226\240\354\230\244\353\245\270 \354\235\264\354\234\240 _ \354\225\210\354\240\204\354\204\261_ \354\276\214\354\240\201\355\225\234 \354\202\254\354\232\251 _ \354\232\260\354\225\204\355\225\234 \354\212\244\355\204\260\353\224\224 \353\260\217 \354\236\207\354\270\240 \354\212\244\355\204\260\353\224\224_.md" create mode 100644 "developLog/programming-lanuage/rust/_ \354\236\254\353\257\270 \354\236\210\353\212\224 \353\246\254\355\217\254\354\247\200\355\206\240\353\246\254_.md" create mode 100644 "developLog/spring/basic/_ JPA\353\236\200 \353\254\264\354\227\207\354\235\270\352\260\200\354\232\224__.md" create mode 100644 developLog/spring/basic/_ MVC_.md create mode 100644 "developLog/spring/basic/_ messageConverter\352\260\200 \353\254\264\354\227\207\354\235\270\352\260\200\354\232\224__.md" create mode 100644 "developLog/spring/basic/_ \354\212\244\355\224\204\353\247\201 \353\271\210\354\235\204 \353\223\261\353\241\235\355\225\230\353\212\224 \353\221\220 \352\260\200\354\247\200 \353\260\251\353\262\225__Component_ _Bean__.md" create mode 100644 "developLog/spring/basic/_ \354\212\244\355\224\204\353\247\201\353\266\200\355\212\270 \353\217\231\354\236\221\354\233\220\353\246\254_.md" create mode 100644 "developLog/spring/basic/_ \354\212\244\355\224\204\353\247\201\354\235\230 \355\225\265\354\213\254\354\235\200 \353\254\264\354\227\207\354\235\270\352\260\200__.md" create mode 100644 "developLog/spring/basic/_ \354\235\230\354\241\264\354\204\261 \354\243\274\354\236\205 3\352\260\200\354\247\200 \353\260\251\353\262\225 _ _\354\203\235\354\204\261\354\236\220 \354\243\274\354\236\205_ Field \354\243\274\354\236\205_ Setter \354\243\274\354\236\205__.md" create mode 100644 "developLog/spring/book/_ \354\202\254\353\236\214\354\235\204 \354\202\254\353\236\221\355\225\234 \352\270\260\354\210\240_.md" create mode 100644 "developLog/spring/lecture/undefined/_ \354\212\244\355\224\204\353\247\201 \353\266\200\355\212\270 \354\204\234\353\262\204 \352\260\234\353\260\234 \355\224\204\353\241\244\353\241\234\352\267\270_.md" create mode 100644 developLog/tip-bookmark/_ Bookmark_.md create mode 100644 "developLog/tip-bookmark/_ \353\270\224\353\241\234\352\267\270 \355\205\214\353\247\210 \353\252\250\354\225\204\353\263\264\352\270\260_tistory_ github_io__.md" create mode 100644 "developLog/tip-bookmark/_ \354\236\230 \354\240\225\353\246\254\353\220\234 tech blog_.md" create mode 100644 "developLog/tip-bookmark/coffeechat/_ \354\235\270\355\224\204\353\237\260 \353\251\230\355\206\240 \354\232\260\354\227\260\353\213\230 \355\233\204\352\270\260\354\235\264\354\236\220 \353\260\251\355\226\245\354\204\261 _ \354\264\210\353\263\264\352\260\234\353\260\234\354\236\220\354\235\230 \352\263\240\353\257\274\352\263\274 \353\260\251\354\225\210_.md" create mode 100644 "developLog/tip-bookmark/coffeechat/_ \354\273\244\355\224\274\354\261\227\354\235\264\353\236\200__.md" create mode 100644 "developLog/tip-bookmark/conference/_ \354\240\220\355\225\217 \352\260\225\354\227\260 \354\204\274\354\212\244\354\236\210\353\212\224 BE \353\220\230\352\270\260_.md" diff --git "a/developLog/algorithm-datastructure/_ Algorithm \352\264\200\353\240\250 bookmark_.md" "b/developLog/algorithm-datastructure/_ Algorithm \352\264\200\353\240\250 bookmark_.md" new file mode 100644 index 0000000..edaf3b1 --- /dev/null +++ "b/developLog/algorithm-datastructure/_ Algorithm \352\264\200\353\240\250 bookmark_.md" @@ -0,0 +1,30 @@ +--- +icon: circle-bookmark +--- + +# Algorithm ๊ด€๋ จ bookmark + +### ๐Ÿ“Œ ์•Œ๊ณ ๋ฆฌ์ฆ˜ + +> ์กฐ๊ธˆ ๊ดœ์ฐฎ์€ ๊ธฐ์—…์œผ๋กœ ๊ฐ€๋ ค๋ฉด ํ•„์ˆ˜์ธ ์•Œ๊ณ ๋ฆฌ์ฆ˜๊ณผ ์ฝ”๋”ฉํ…Œ์ŠคํŠธ + +* [์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ณต๋ถ€์— ๋Œ€ํ•œ ๋กœ๋“œ๋งต](https://blog.yena.io/studynote/2018/11/14/Algorithm-Basic.html) ์ดˆ๋ณด์ž ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ณต๋ถ€ ์‹œ์ž‘ ๋ฐฉ๋ฒ• ๋ฐ ์ˆœ์„œ +* [์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ •๋ฆฌ ๋ธ”๋กœ๊ทธ](https://velog.io/@matisse/%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-%ED%83%90%EC%83%89-%EC%A0%95%EB%A0%AC-%EA%B0%84%EB%8B%A8-%EC%A0%95%EB%A6%AC) ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ฐ„๋‹จ ์ •๋ฆฌ ๋ธ”๋กœ๊ทธ +* [์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฐ”๋ณด ์ทจ์—…์„ ์œ„ํ•œ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ •๋ฆฌ](https://covenant.tistory.com/220) ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฐ”๋ณด์˜ ์ทจ์ค€์„ ์œ„ํ•œ ์ฝ”ํ…Œ ๊ณต๋ถ€๋ฐฉ๋ฒ• +* [์ฝ”๋”ฉํ…Œ์ŠคํŠธ ๋Œ€๋น„ ๋ฌธ์ œ์ง‘ with Baekjoon](https://github.com/tony9402/baekjoon) ์ฝ”๋”ฉํ…Œ์ŠคํŠธ ๋Œ€๋น„ ๋ฌธ์ œ์ง‘์œผ๋กœ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ฒ˜์Œ ์‹œ์ž‘ ์‹œ ์ฐธ๊ณ ํ•ด์•ผ ํ•˜๋Š” ๋ธ”๋กœ๊ทธ๋“ค๋„ ๋‚˜์™€ ์žˆ๋‹ค. +* [๋งˆ๋ฒ•์˜ ์Šˆํผ๋งˆ๋ฆฌ์˜ค ๋„ค์ด๋ฒ„ ๋ธ”๋กœ๊ทธ](https://m.blog.naver.com/PostList.nhn?blogId=kks227\&categoryNo=299\&logCode=0\&categoryName=%EB%8C%80%ED%9A%8C%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98) ์œ ๋ช…ํ•œ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋„ค์ด๋ฒ„ ๋ธ”๋กœ๊ทธ +* [์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ดˆ๋ณด ๋ฒ—์–ด๋‚˜๊ธฐ 3๋‹จ๊ณ„](https://claudiajkang.medium.com/%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-%EC%B4%88%EB%B3%B4%EC%97%90%EC%84%9C-%EB%B2%97%EC%96%B4%EB%82%98%EA%B8%B0-%EC%9C%84%ED%95%9C-%EC%97%AC%EC%A0%95-1ffb6bdfec6b) ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ณด๋ณด ๋ฒ—์–ด๋‚˜๊ธฐ ์œ„ํ•œ ๋ฐฉ์•ˆ์— ๋Œ€ํ•ด ๋‚˜์™€ ์žˆ์Œ +* [๋ฐฑ์ค€ ์˜จ๋ผ์ธ ์‚ฌ์ดํŠธ๋กœ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ดˆ๋ณด๊ฐ€ ๊ณต๋ถ€ํ•˜๋Š” ๋ฐฉ๋ฒ•](https://velog.io/@dragoocho/%EB%B0%B1%EC%A4%80-%EC%98%A8%EB%9D%BC%EC%9D%B8-%EC%82%AC%EC%9D%B4%ED%8A%B8%EB%A1%9C-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-%EA%B3%B5%EB%B6%80%ED%95%98%EB%8A%94-%EB%B0%A9%EB%B2%95) ๋ฒจ๋กœ๊ทธ ๊ธ€์ธ๋ฐ ์‹ค์ฒœ์ ์ธ ๋ฐฉ์•ˆ ์ž˜ ๋‚˜์™€์žˆ์Œ +* [ํ”„๋กœ๊ทธ๋ž˜๋ฐ๊ณผ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ณต๋ถ€๋ฒ•](https://seamless.tistory.com/96) ์›”๊ฐ„ ๋งˆ์†Œ 2002๋…„์— ๊ธฐ๊ณ ๋œ ๊น€์ฐฝ์ค€ ๋‹˜์˜ "์–ด๋–ป๊ฒŒ ๊ณต๋ถ€ํ• ๊นŒ: ํ”„๋กœ๊ทธ๋ž˜๋จธ๋ฅผ ์œ„ํ•œ ๊ณต๋ถ€๋ก "์ด๋ผ๋Š” ๊ธฐ์‚ฌ ๋‚ด์šฉ ํฌ์ŠคํŒ… ๋˜์–ด ์žˆ๋Š” ๋ธ”๋กœ๊ทธ ๊ธ€ +* [์ดˆ๊ธ‰-์ค‘๊ธ‰ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์Šคํ„ฐ๋”” ์ปค๋ฆฌํ˜๋Ÿผ ์ถ”์ฒœ (3๊ฐœ์›”)](https://dev-dain.tistory.com/155) ์ดˆ๊ธ‰ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ปค๋ฆฌํ˜๋Ÿผ์— ๋Œ€ํ•ด ๋‚˜์™€ ์žˆ์Œ +* [์›ํ‹ฐ๋“œ ๊ฐœ๋ฐœ์ž ๋ฉด์ ‘ ์™„์ „ ์ •๋ณตํ•˜๊ธฐ (1) - ์ฝ”๋”ฉ ํ…Œ์ŠคํŠธ ํŽธ](https://www.wanted.co.kr/events/22\_11\_s01\_b15) ์›ํ‹ฐ๋“œ ์ฝ”๋”ฉ ํ…Œ์ŠคํŠธ ํŽธ + + \ + + +### ๐Ÿ“Œ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ํ’€์ด ์‚ฌ์ดํŠธ + +* [๋ฐฑ์ค€](https://www.acmicpc.net/) +* [ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค](https://programmers.co.kr/) +* [์ •์˜ฌ](https://jungol.co.kr/) +* [solved](https://solved.ac/) diff --git "a/developLog/algorithm-datastructure/algorithm/_ \352\265\254\355\230\204_.md" "b/developLog/algorithm-datastructure/algorithm/_ \352\265\254\355\230\204_.md" new file mode 100644 index 0000000..6c23595 --- /dev/null +++ "b/developLog/algorithm-datastructure/algorithm/_ \352\265\254\355\230\204_.md" @@ -0,0 +1,298 @@ +# ๊ตฌํ˜„ + + [๊ตฌํ˜„ ๋…ธ์…˜ ์ •๋ฆฌ ๋ฒ„์ „](https://incredible-gem-98e.notion.site/04-eacbe1bf99664c9e89479eb609f7d0f7) + +
+ +### ๐Ÿ“š ์•„์ด๋””์–ด๋ฅผ ์ฝ”๋“œ๋กœ ๋ฐ”๊พธ๋Š” ๊ตฌํ˜„ + +*** + +> * ํ”ผ์ง€์ปฌ๋กœ ์Šน๋ถ€ํ•˜๊ธฐ โ‡’ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์˜ ๋ฌธ๋ฒ•์— ๋Šฅ์ˆ™ํ•˜๊ณ  ์ฝ”๋“œ ์ž‘์„ฑ ์†๋„๊ฐ€ ๋น ๋ฅธ ์‚ฌ๋žŒ + +* **๊ตฌํ˜„** : ๋จธ๋ฆฟ์†์— ์žˆ๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์†Œ์Šค์ฝ”๋“œ๋กœ ๋ฐ”๊พธ๋Š” ๊ณผ์ • +* ๊ตฌํ˜„ ๋ฌธ์ œ ์œ ํ˜•์€ ๋ชจ๋“  ๋ฒ”์œ„์˜ ์ฝ”๋”ฉ ํ…Œ์ŠคํŠธ ๋ฌธ์ œ ์œ ํ˜•์„ ํฌํ•จํ•˜๋Š” ๊ฐœ๋… +* ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์‚ฌ์šฉ ๊ฒฝํ—˜์„ ์ต์ˆ™ํ•˜๊ฒŒ ํ•˜์ž + +#### ๐Ÿ“ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ํ’€ ๋•Œ ๊ณผ์ • + +1. ์ƒ๊ฐํ•ด๋‚ธ ๋ฌธ์ œ ํ’€์ด ๋ฐฉ๋ฒ•์„ ์šฐ๋ฆฌ๊ฐ€ ์›ํ•˜๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋กœ ์ •ํ™•ํžˆ ๊ตฌํ˜„ +2. ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์˜ ๋ฌธ๋ฒ•์„ ์ •ํ™•ํžˆ ์•Œ๊ณ  ์žˆ์–ด์•ผ ํ•จ + +#### ๐Ÿ“ ๋ฌธ์ œ ํ•ด๊ฒฐ ๋ถ„์•ผ์—์„œ ๊ตฌํ˜„ ์œ ํ˜•์˜ ๋ฌธ์ œ๋ž€? + +1. ํ’€์ด๋ฅผ ๋– ์˜ฌ๋ฆฌ๋Š” ๊ฒƒ์€ ์‰ฌ์šฐ๋‚˜ ์†Œ์Šค์ฝ”๋“œ๋กœ๋Š” ์˜ฎ๊ธฐ๊ธฐ ์–ด๋ ค์šด ๋ฌธ์ œ +2. ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ๊ฐ„๋‹จํ•œ๋ฐ ์ฝ”๋“œ๊ฐ€ ์ง€๋‚˜์น  ๋งŒํผ ๊ธธ์–ด์ง€๋Š” ๋ฌธ์ œ +3. ์‹ค์ˆ˜ ์—ฐ์‚ฐ์„ ๋‹ค๋ฃจ๊ณ , ํŠน์ • ์†Œ์ˆ˜์  ์ž๋ฆฌ๊นŒ์ง€ ์ถœ๋ ฅํ•ด์•ผ ํ•˜๋Š” ๋ฌธ์ œ +4. ์ ์ ˆํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ฐพ์•„์„œ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š” ๋ฌธ์ œ + +#### ๐Ÿ“ ๊ตฌํ˜„์˜ ์œ ํ˜• + +1. **์™„์ „ ํƒ์ƒ‰** : `๋ชจ๋“  ๊ฒฝ์šฐ์˜ ์ˆ˜`๋ฅผ ์ฃผ์ € ์—†์ด ๋‹ค ๊ณ„์‚ฐํ•˜๋Š” ํ•ด๊ฒฐ๋ฐฉ๋ฒ• +2. **์‹œ๋ฎฌ๋ ˆ์ด์…˜** : ๋ฌธ์ œ์—์„œ ์ œ์‹œํ•œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ํ•œ ๋‹จ๊ณ„์”ฉ `์ฐจ๋ก€๋กœ` ์ง์ ‘ ์ˆ˜ํ–‰ โ‡’ **๋ฐฉํ–ฅ ๋ฒกํ„ฐ**๊ฐ€ ์ž์ฃผ ํ™œ์šฉ + +#### ๐Ÿ“ํ–‰๋ ฌ + +* 2์ฐจ์› ๊ณต๊ฐ„(๋ฐ˜๋ณต์ ์œผ๋กœ ์บ๋ฆญํ„ฐ ์ด๋™ ๋ฌธ์ œ) +* ์—ด๊ณผ ํ–‰์ด ์žˆ์Œ + +| (0, 0) | (0,1) | (0, 2) | (0, 3) | +| ------ | ------ | ------ | ------ | +| (1, 0) | (1, 1) | (1, 2) | (1, 3) | +| (2, 0) | (2, 1) | (2, 2) | (2, 3) | + +```python +for i in range(5): + for j in range(5): + print('(', i, ',', j ')', end=' ') +print() +``` + +```python +# ๋™ ๋ถ ์„œ ๋‚จ +dx = [0, -1, 0, 1] # ์„ธ๋กœ์ถ• ๊ธฐ์ค€์œผ๋กœ +dy = [1, 0, -1, 0] + +# ํ˜„์žฌ ์œ„์น˜ +x, y =1, 2 + +for i in range(4): + # ๋‹ค์Œ ์œ„์น˜ + nx = x + dx[i] + ny = y + dy[i] + print(nx, ny) +``` + +**๋ถ€๊ฐ€์„ค๋ช…** : ๋™์ชฝ์œผ๋กœ ๋‚ด๋ ค๊ฐ€๋ฉด ์—ด์€ ์ฆ๊ฐ€ํ•˜์ง€ ์•Š๊ณ  ํ–‰์€ ์ฆ๊ฐ€ํ•จ + +EX. (1, 0) โ†’ (2, 0)\ +\ + + +### ๐Ÿ“š ๊ตฌํ˜„ ์‹œ ๊ณ ๋ คํ•ด์•ผ ํ•  ๋ฉ”๋ชจ๋ฆฌ ์ œ์•ฝ ์‚ฌํ•ญ + +*** + +**1. C/C++์—์„œ ๋ณ€์ˆ˜์˜ ํ‘œํ˜„ ๋ฒ”์œ„** - ์ •์ˆ˜ํ˜• int(4๋ฐ”์ดํŠธ) < int๋ณด๋‹ค ํฐ long long(8๋ฐ”์ดํŠธ) < `BigInteger(ํด๋ž˜์Šค)` : **๊ฐ€๋ณ€์ **์ด๋ฉฐ, ์ž๋ฃŒํ˜•์˜ ๋ฒ”์œ„๋Š” **์ œํ•œ ์—†์Œ** - ํ•˜์ง€๋งŒ c++์˜ ๊ฒฝ์šฐ ํ‘œ์ค€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ํฌํ•จ๋˜์–ด ์žˆ์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์™ธ๋ถ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํ˜•ํƒœ๋ฅผ ๊ฐ€์ ธ์™€ ์‚ฌ์šฉ + +**2. ํŒŒ์ด์ฌ** - ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ์ง์ ‘ ์ž๋ฃŒํ˜• ์ง€์ •ํ•  ํ•„์š” ์—†์Œ, ๋งค์šฐ ํฐ ์ˆ˜์˜ ์—ฐ์‚ฐ ๋˜ํ•œ ๊ธฐ๋ณธ์œผ๋กœ ์ง€์› - ์ •์ˆ˜ํ˜• ๋ณ€์ˆ˜์˜ ์—ฐ์‚ฐ ๋•Œ๋ฌธ์— ๊ณ ๋ฏผ No! - but, **์‹ค์ˆ˜ํ˜• ๋ณ€์ˆ˜**๋Š” ๋‹ค๋ฅธ ์–ธ์–ด์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์œ ํšจ์ˆซ์ž์— ๋”ฐ๋ผ์„œ ์—ฐ์‚ฐ ๊ฒฐ๊ณผ๊ฐ€ ์›ํ•˜๋Š” ๊ฐ’์ด ๋‚˜์˜ค์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Œ + +3. ํŒŒ์ด์ฌ์—์„œ `๋ฆฌ์ŠคํŠธ`์˜ ๊ณ ๋ ค์‚ฌํ•ญโœจ + 1. ํŒŒ์ด์ฌ์—์„œ๋Š” ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋ณ€์ˆ˜ ์‚ฌ์šฉ์‹œ ๋ฆฌ์ŠคํŠธ ์ด์šฉ + 2. **๋ฉ”๋ชจ๋ฆฌ ์‚ฌํ•ญ** ๊ณ ๋ ค + + * ์ฝ”๋”ฉํ…Œ์ŠคํŠธ์—์„œ 128\~512MB๋กœ **๋ฉ”๋ชจ๋ฆฌ ์ œํ•œ ์—ผ๋‘**์— ๋‘๊ณ  ํ’€์–ด์•ผ ํ•จ + * ํฌ๊ธฐ๊ฐ€ 1,000๋งŒ ์ด์ƒ ๋ฆฌ์ŠคํŠธ๊ฐ€ ์žˆ๋‹ค๋ฉด, ๋ฉ”๋ชจ๋ฆฌ ์šฉ๋Ÿ‰ ์ œํ•œ์œผ๋กœ ํ’€์ง€ ๋ชปํ•จ + * int ์ž๋ฃŒํ˜• ๋ฐ์ดํ„ฐ์˜ ๊ฐœ์ˆ˜์— ๋”ฐ๋ฅธ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰ + + | ๋ฐ์ดํ„ฐ์˜ ๊ฐœ์ˆ˜(๋ฆฌ์ŠคํŠธ์˜ ๊ธธ์ด) | ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰ | + | ---------------- | ------- | + | 1,000 | ์•ฝ 4KB | + | 1,000,000 | ์•ฝ 4MB | + | 10,000,000 | ์•ฝ 40MB | + |



| | + +### ๐Ÿ“š ์ฑ„์  ํ™˜๊ฒฝ + +*** + +* ์‹œ๊ฐ„ ์ œํ•œ : 1์ดˆ +* ๋ฉ”๋ชจ๋ฆฌ ์ œํ•œ : 128MB + + โ‡’ ํŒŒ์ด์ฌ์˜ ๊ฒฝ์šฐ **1์ดˆ์— 2,000๋งŒ๋ฒˆ**์˜ ์—ฐ์‚ฐ ์ˆ˜ํ–‰ ๊ฐ€๋Šฅํ•œ ๊ฒƒ๋งŒ ์•Œ๋ฉด ๋จ +* ์‹œ๊ฐ„ ์ œํ•œ : 1์ดˆ, ๋ฐ์ดํ„ฐ์˜ ๊ฐœ์ˆ˜ : 100๋งŒ๊ฐœ + + โ‡’ ์‹œ๊ฐ„ ๋ณต์žก๋„ `O(NlogN)` ์ด๋‚ด์˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ด์šฉํ•ด์„œ ๋ฌธ์ œ๋ฅผ ํ’€์–ด์•ผ ํ•จ + +๐Ÿ’ก **TIP)** ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ๋ฅผ ํ’€ ๋•Œ๋Š” `์‹œ๊ฐ„ ์ œํ•œ`๊ณผ `๋ฐ์ดํ„ฐ์˜ ๊ฐœ์ˆ˜`๋ฅผ ๋จผ์ € ํ™•์ธ ํ•œ ๋’ค, ์ด ๋ฌธ์ œ๋ฅผ ์–ด๋Š ์ •๋„์˜ `์‹œ๊ฐ„๋ณต์žก๋„`์˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ ์ž‘์„ฑํ•ด์•ผ ํ’€ ์ˆ˜ ์žˆ์„ ๊ฒƒ์ธ์ง€ ์˜ˆ์ธก + +\ +\ + + +### ๐Ÿ“š ๊ตฌํ˜„ ๋ฌธ์ œ์— ์ ‘๊ทผํ•˜๋Š” ๋ฐฉ๋ฒ• + +*** + +* ์‚ฌ์†Œํ•œ ์ž…๋ ฅ ์กฐ๊ฑด ๋“ฑ ๋ฌธ์ œ์—์„œ ๋ช…์‹œํ•ด์ฃผ๋ฉฐ, ๋ฌธ์ œ์˜ ๊ธธ์ด ํฐ ํŽธ +* ํŒŒ์ด์ฌ์œผ๋กœ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ํ’€ ์‹œ ์ข‹์€ ์  ๋‹ค๋ฅธ ์–ธ์–ด์™€ ๋น„๊ต + +| | ๊ตฌํ˜„ ๋‚œ์ด๋„ | ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰ ์‹œ๊ฐ„ | +| ----- | ------ | ---------- | +| ํŒŒ์ด์ฌ | ์‰ฌ์šด ํŽธ | ๊ธด ํŽธ | +| PyPy | ์‰ฌ์šด ํŽธ | ๋‹ค์†Œ ์งง์€ ํŽธ | +| C/C++ | ์–ด๋ ค์šด ํŽธ | ์งง์€ ํŽธ | + +* ํŒŒ์ด์ฌ์œผ๋กœ ํ”„๋กœ๊ทธ๋žจ์„ ๊ฐœ๋ฐœ์‹œ, ๊ทธ๋ž˜ํ”ฝ ์ฒ˜๋ฆฌ ์žฅ์น˜(GPU)๋ฅผ ์—ฐ๋™ํ•˜๋ฉฐ, ๋ฐ˜๋ณต์ ์ธ ํ–‰๋ ฌ ๊ณ„์‚ฐ์„ ์š”๊ตฌํ•˜๋Š” ๋ณต์žกํ•œ ์ˆ˜ํ•™ ๋ฌธ์ œ์‹œ C์–ธ์–ด๋กœ ์ž‘์„ฑ๋œ ํŒŒ์ด์ฌ ์ฝ”์–ด ์†Œํ”„ํŠธ์›จ์–ด ๋™์ž‘ +* BUT, ์•Œ๊ณ ๋ฆฌ์ฆ˜ ํ™˜๊ฒฝ์—์„œ๋Š” GPU ์—ฐ์‚ฐ ์“ฐ๋Š” ๊ฒฝ์šฐ๊ฐ€ ์—†์Œ +* ์ž๋™ ์ฑ„์ ๋ฐฉ์‹ ์ฝ”๋”ฉ ํ…Œ์ŠคํŠธ ํ™˜๊ฒฝ์—์„œ๋Š” **PyPy3**๋ฅผ ์ง€์›ํ•˜๋Š” ๊ณณ์ด ์ฆ๊ฐ€ + + โ‡’ PyPy3๋ž€ ํŒŒ์ด์ฌ 3์˜ ๋ฌธ๋ฒ•์„ ๊ทธ๋Œ€๋กœ ์ง€์›, ํŒŒ์ด์ฌ3๋ณด๋‹ค **์‹คํ–‰ ์†๋„๊ฐ€ ๋น ๋ฅด๋‹ค** +* ํŒŒ์ด์ฌ ์ด์šฉ์‹œ API ๊ฐœ๋ฐœ ๋ฌธ์ œ๋ฅผ ๋ณด๋”๋ผ๋„ ์ƒ๋Œ€์ ์œผ๋กœ ๋ฌด๋‚œํ•˜๊ฒŒ ๋Œ€์ฒ˜ ๊ฐ€๋Šฅ\ + \ + + +#### ์˜ˆ์ œ 4-1 ์ƒํ•˜์ขŒ์šฐ + +*** + +> * ๋ฌธ์ œ p.110 - ์—ฌํ–‰์ž A๋Š” N\*N ํฌ๊ธฐ์˜ ์ •์‚ฌ๊ฐํ˜• ๊ณต๊ฐ„ ์œ„ ์„œ ์žˆ์Œ - ๊ฐ€์žฅ ์™ผ์ชฝ ์œ„ ์ขŒํ‘œ **(1,1)**, ๊ฐ€์žฅ ์˜ค๋ฅธ์ชฝ ์•„๋ž˜ ์ขŒํ‘œ\*\*(N, N)\*\* - ์‹œ์ž‘ ์ขŒํ‘œ๋Š” ํ•ญ์ƒ (1,1) ์ƒ,ํ•˜,์ขŒ,์šฐ ์ด๋™ ๊ฐ€๋Šฅ - ๊ณ„ํš์„œ : ํ•˜๋‚˜์˜ ์ค„์— ๋„์–ด์“ฐ๊ธฐ ๊ธฐ์ค€์œผ๋กœ **L,R,U,D** ์ค‘ ํ•˜๋‚˜์˜ ๋ฌธ์ž๊ฐ€ ๋ฐ˜๋ณต์ ์œผ๋กœ ์ ํ˜€ ์žˆ์Œ + +* L : ์™ผ์ชฝ์œผ๋กœ ํ•œ ์นธ ์ด๋™, R : ์˜ค๋ฅธ์ชฝ์œผ๋กœ ํ•œ ์นธ ์ด๋™, U : ์œ„๋กœ ํ•œ ์นธ ์ด๋™, D : ์•„๋ž˜๋กœ ํ•œ ์นธ ์ด๋™ + + * N\*N ํฌ๊ธฐ์˜ ์ •์‚ฌ๊ฐํ˜• ๊ณต๊ฐ„์„ ๋ฒ—์–ด๋‚˜๋Š” ์›€์ง์ž„์€ ๋ฌด์‹œ + * ๊ณ„ํš์„œ๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ ์—ฌํ–‰์ž A๊ฐ€ ์ตœ์ข…์ ์œผ๋กœ ๋„์ฐฉํ•  ์ง€์ ์˜ ์ขŒํ‘œ + + โ“ ์ž…๋ ฅ์กฐ๊ฑด + + * ์ฒซ์งธ ์ค„ ๊ณต๊ฐ„์˜ ํฌ๊ธฐ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” N์ด ์ฃผ์–ด์ง„๋‹ค$(1\leq N \leq 100)$ + * ๋‘˜์งธ ์ค„์— ์—ฌํ–‰์ž A๊ฐ€ ์ด๋™ํ•  ๊ณ„ํš์„œ ๋‚ด์šฉ์ด ์ฃผ์–ด์ง„๋‹ค ($1 \leq ์ด๋™ํšŸ์ˆ˜ \leq 100)$ + + โ“ ์ถœ๋ ฅ์กฐ๊ฑด + + * ์ฒซ์งธ ์ค„์— ์—ฌํ–‰๊ฐ€ A๊ฐ€ ์ตœ์ข…์ ์œผ๋กœ ๋„์ฐฉํ•  ์ง€์ ์˜ ์ขŒํ‘œ(X,Y)๋ฅผ ๊ณต๋ฐฑ์œผ๋กœ ๊ตฌ๋ถ„ํ•˜์—ฌ ์ถœ๋ ฅ + +๐Ÿ‘Œ ๋ฌธ์ œ ํ•ด๊ฒฐ + +* ์‹œ๊ฐ„ ๋ณต์žก๋„ : O(N) ์‹œ๊ฐ„ ๋ณต์žก๋„๊ฐ€ ๋„‰๋„‰ํ•œ ํŽธ +* ์ผ๋ จ์˜ ๋ช…๋ น์— ๋”ฐ๋ผ์„œ ๊ฐœ์ฒด๋ฅผ `์ฐจ๋ก€๋Œ€๋กœ` ์ด๋™์‹œํ‚จ๋‹ค๋Š” ์  : **์‹œ๋ฎฌ๋ ˆ์ด์…˜** ์œ ํ˜• +* ์ฐธ๊ณ  **for๋ฌธ** + + * ํŒŒ์ด์ฌ์—์„œ for๋ฌธ์€ ๋“ค์—ฌ์“ฐ๊ธฐ๊ฐ€ ์ค‘์š” + * for\*\*\[๋ณ€์ˆ˜1]\*\* in **\[๋ฌธ์ž์—ด1, ๋ฆฌ์ŠคํŠธ1, ํŠœํ”Œ1]**: + + ```python + arr = [1, 2, 3, 4, 5] + for i in arr: + print(i) + + ``` + +```python +# N์„ ์ž…๋ ฅ๋ฐ›๊ธฐ +n = int(input()) +x, y = 1, 1 # ํ˜„์žฌ ์œ„์น˜ +plans = input().split() + +# L,R,U,D ๋ฐฉํ–ฅ์— ๋”ฐ๋ฅธ ์ด๋™ ์ด๋™, **๋ฐฉํ–ฅ ๋ฒกํ„ฐ** +dx = [0,0,-1,1] # x์ขŒํ‘œ๋Š” ์ขŒ์šฐ +dy = [-1,1,0,0] # y์ขŒํ‘œ๋Š” ์œ„์•„๋ž˜ +move_types=['L', 'R', 'U', 'D'] + +# ์ด๋™ ๊ณ„ํš์„ ํ•˜๋‚˜์”ฉ ํ™•์ธ +for plan in plans : + # ์ด๋™ ํ›„ ์ขŒํ‘œ ๊ตฌํ•˜๊ธฐ + for i in range(len(move_types)): + if plan == move_types[i]: + nx = x + dx[i] + ny = y + dy[i] + # ์˜์—ญ์„ ๋ฒ—์–ด๋‚˜๋Š” ๊ฒฝ์šฐ ๋ฌด์‹œ + if nx<1 or ny<1 or nx>n or ny>n: + countinue # ์ค‘๊ฐ„์— ๋ฉˆ์ถ”๊ณ  ์ฒ˜์Œ์œผ๋กœ ๋Œ์•„๊ฐ€์ž + # ์ด๋™ ์ˆ˜ํ–‰ + x, y = nx, ny + +print(x, y) +``` + +โ‡’ ์ž…๋ ฅ๋ฐ›์„ ๊ฒŒ ๋ฌด์—‡์ธ์ง€ ์ƒ๊ฐํ•ด๋ณด๊ณ  ์ฐจ๋ก€๋กœ ์ˆ˜ํ–‰ํ•ด ๋‚˜๊ฐ€๊ธฐ + +#### ๐Ÿ“ ์˜ˆ์ œ 4-2 ์‹œ๊ฐ + +*** + +* ๋ฌธ์ œ p.113 + + * ์ •์ˆ˜ N์ด ์ž…๋ ฅ๋˜๋ฉด 00์‹œ 00๋ถ„ 00์ดˆ๋ถ€ํ„ฐ N์‹œ 59๋ถ„ 59์ดˆ๊นŒ์ง€์˜ ๋ชจ๋“  ์‹œ๊ฐ ์ค‘ 3์ด ํ•˜๋‚˜๋ผ๋„ ํฌํ•จ๋˜๋Š” ๋ชจ๋“  ๊ฒฝ์šฐ์˜ ์ˆ˜ ๊ตฌํ•˜๊ธฐ + + โ“ ์ž…๋ ฅ์กฐ๊ฑด + + * ์ฒซ์งธ ์ค„์— ์ •์ˆ˜ N์ด ์ž…๋ ฅ๋œ๋‹ค$(0 \leq N \leq 23)$ + + โ“ ์ถœ๋ ฅ์กฐ๊ฑด + + * 00์‹œ 00๋ถ„ 00์ดˆ๋ถ€ํ„ฐ N์‹œ 59๋ถ„ 59์ดˆ๊นŒ์ง€์˜ ๋ชจ๋“  ์‹œ๊ฐ ์ค‘ 3์ด ํ•˜๋‚˜๋ผ๋„ ํฌํ•จ๋˜๋Š” ๋ชจ๋“  ๊ฒฝ์šฐ์˜ ์ˆ˜ ๊ตฌํ•˜๊ธฐ + +๐Ÿ‘Œ ๋ฌธ์ œํ•ด๊ฒฐ + +* ๋ชจ๋“  ์‹œ๊ฐ์˜ ๊ฒฝ์šฐ๋ฅผ ํ•˜๋‚˜์”ฉ ๋ชจ๋‘ ์…ˆ +* ๋ชจ๋“  ๊ฒฝ์šฐ์˜ ์ˆ˜๊ฐ€ 100,000๊ฐœ๊ฐ€ ์•ˆ๋˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฌธ์ž์—ด ์—ฐ์‚ฐ ์ด์šฉํ•ด๋„ ์‹œ๊ฐ„ ์ œํ•œ 2์ดˆ์•ˆ์— ๋ฌธ์ œ ํ•ด๊ฒฐ ๊ฐ€๋Šฅ +* ๋‹จ์ˆœํžˆ ์‹œ๊ฐ์„ 1์”ฉ ์ฆ๊ฐ€์‹œํ‚ค๋ฉด์„œ ํ™•์ธ โ‡’ **์™„์ „ ํƒ์ƒ‰** ์œ ํ˜•(๋น„ํšจ์œจ์ ์ด๋ผ ๋ฐ์ดํ„ฐ ๊ฐœ์ˆ˜๊ฐ€ ํฐ ๊ฒฝ์šฐ ์ž‘๋™ ์•ˆํ•  ์ˆ˜ ์žˆ์Œ) +* ๊ฒฝ์šฐ์˜ ์ˆ˜ \*\*24(์‹œ๊ฐ„)_60(๋ถ„)60(์ดˆ) โ‡’ `3์ค‘ ๋ฐ˜๋ณต๋ฌธ` ์ด์šฉ_ +* `๋ฌธ์ž์—ด`๋กœ ๋ฐ”๊ฟ”์„œ ํ™•์ธ โ‡’ EX. 03์‹œ20๋ถ„23์ดˆ๋ผ๋ฉด โ€˜032023โ€™๋กœ ๋งŒ๋“ค์–ด์„œ ํ™•์ธ +* ์ฐธ๊ณ  str + + **ํŒŒ์ด์ฌ ๋ฌธ์ž์—ด ๋ณ€ํ™˜ - str()** + +```python +# H๋ฅผ ์ž…๋ ฅ๋ฐ›๊ธฐ +h = int(input()) + +count = 0 + +# h๋ถ€ํ„ฐ 1์”ฉ ์ฆ๊ฐ€ +for i in range(h + 1): + for j in range(60): # ์ž…๋ ฅ๋ฐ›๋Š” ๊ฒƒ์€ ์‹œ๊ฐ„ ๋ฟ์ด๊ธฐ ๋•Œ๋ฌธ์— ๋ถ„, ์ดˆ๋Š” 0๋ถ€ํ„ฐ 60๊นŒ์ง€๋กœ **๋ฒ”์œ„ ์„ค์ • ๋ฐ ์ฆ๊ฐ€ ํ•˜๊ฒŒ** + for k in range(60): + # ๋งค ์‹œ๊ฐ ์•ˆ์— 3์ด ํฌํ•จ๋˜์–ด ์žˆ๋‹ค๋ฉด ์นด์šดํŠธ ์ฆ๊ฐ€ + if '3' in str(i) + str(j) + str(k): # ์‹œ๊ฐ์„ **๋ฌธ์ž์—ด ๋ฐ”๊พผ ๋‹ค์Œ** ๋ฌธ์ž์—ด์— '3'์ด ํฌํ•จ๋๋Š”์ง€ ํ™•์ธ + count+=1 + +print(count) +``` + +\ +\ + + +### ๐Ÿ“š ์‹ค์ „๋ฌธ์ œ ์™•์‹ค์˜ ๋‚˜์ดํŠธ + +*** + +> * ๋ฌธ์ œ p.115 - ์™•์‹ค ์ •์› 8\*8 ์ขŒํ‘œ ํ‰๋ฉด - ๋‚˜์ดํŠธ๋Š” ๋ง์„ ํƒ€๊ณ  ์žˆ๊ธฐ์— ์ด๋™์‹œ, L์ž ํ˜•ํƒœ๋กœ๋งŒ ์ด๋™ ๊ฐ€๋Šฅ, ์ •์› ๋ฐ–์œผ๋กœ ์ด๋™ ๋ถˆ๊ฐ€ 1. ์ˆ˜ํ‰์œผ๋กœ ๋‘ ์นธ ์ด๋™ํ•œ ๋’ค์— ์ˆ˜์ง์œผ๋กœ ํ•œ ์นธ ์ด๋™ 2. ์ˆ˜์ง์œผ๋กœ ๋‘ ์นธ ์ด๋™ํ•œ ๋’ค์— ์ˆ˜ํ‰์œผ๋กœ ํ•œ ์นธ ์ด๋™ + +``` +โ“ ์ž…๋ ฅ์กฐ๊ฑด + +- ์ฒซ์งธ ์ค„์— 8*8 ์ขŒํ‘œ ํ‰๋ฉด์ƒ์—์„œ ํ˜„์žฌ ๋‚˜์ดํŠธ๊ฐ€ ์œ„์น˜ํ•œ ๊ณณ์˜ ์ขŒํ‘œ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๋‘ ๋ฌธ์ž๋กœ ๊ตฌ์„ฑ๋œ ๋ฌธ์ž์—ด์ด ์ž…๋ ฅ๋œ๋‹ค. ์ž…๋ ฅ ๋ฌธ์ž๋Š” a1์ฒ˜๋Ÿผ ์—ด๊ณผ ํ–‰์œผ๋กœ ์ด๋ฃจ์–ด์ง„๋‹ค + +โ“ ์ถœ๋ ฅ์กฐ๊ฑด + +- ์ฒซ์งธ ์ค„์— ๋‚˜์ดํŠธ๊ฐ€ ์ด๋™ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜ ์ถœ๋ ฅ +``` + +๐Ÿ‘Œ ๋ฌธ์ œํ•ด๊ฒฐ + +* ๋‚˜์ดํŠธ๊ฐ€ ์ด๋™ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ๋กœ๋ฅผ ํ•˜๋‚˜์”ฉ ํ™•์ธํ•˜์—ฌ ์ด๋™ +* ๋‹ค๋งŒ, 8\*8ํ‰๋ฉด์„ ๋ฒ—์–ด๋‚˜์ง€ ์•Š๋„๋ก ๊ผผ๊ผผํžˆ ๊ฒ€์‚ฌ +* ๋‚˜์ดํŠธ ์ด๋™ ๊ฒฝ๋กœ๋ฅผ steps ๋ณ€์ˆ˜์— ๋„ฃ๋Š”๋‹ค๋ฉด + +```python +steps = [(-2, -1), (-1, -2), (1, -2), (-2, 1), (2, 1), (1, 2), (-1, 2), (-2, 1)] +``` + +* <์ฝ”๋“œ> + +```python +# ํ˜„์žฌ ๋‚˜์ดํŠธ ์œ„์น˜ ๋ฐ›๊ธฐ +input_data = input() +# ๋‘ ๋ฒˆ์งธ ์œ„์น˜์˜ ์ˆซ์ž๋ฅผ ๋ฐ”๊พผ ๊ฒƒ์ด ํ–‰ +row = int(input_data[1]) +# ๋ฌธ์ž๋กœ ๋“ค์–ด์˜จ ๊ฐ’์„ ์•„์Šคํ‚ค ์ฝ”๋“œ๋กœ ๋ฐ”๊พธ๊ณ  +column = int(ord(input_data[0]))-int(ord('a')) + 1 + +# ๋‚˜์ดํŠธ๊ฐ€ ์ด๋™ํ•  ์ˆ˜ ์žˆ๋Š” 8๊ฐ€์ง€ ๋ฑกํ–ฅ ์ •์˜, dx, dy์‚ฌ์šฉํ•ด๋„ ๊ฐ€๋Šฅ +steps = [(-2, -1), (-1, -2), (1, -2), (-2, 1), (2, 1), (1, 2), (-1, 2), (-2, 1)] + +# 8๊ฐ€์ง€ ๋ฐฉํ–ฅ์— ๋Œ€ํ•˜์—ฌ ๊ฐ ์œ„์น˜๋กœ ์ด๋™์ด ๊ฐ€๋Šฅํ•œ์ง€ ํ™•์ธ +result = 0 +for step in steps: + # ์ด๋™ํ•˜๊ณ ์ž ํ•˜๋Š” ์œ„์น˜ ํ™•์ธ + next_row = row + step[0] + next_column = column + step[1] + # ํ•ด๋‹น ์œ„์น˜๋กœ ์ด๋™์ด ๊ฐ€๋Šฅํ•˜๋‹ค๋ฉด ์นด์šดํŠธ ๋‹ค์šด + if next_row >=1 and next_row < =8 and next_column >=1 and next_column <= 8: + result +=1 + +print(result) +``` diff --git "a/developLog/algorithm-datastructure/algorithm/_ \352\267\270\353\236\230\355\224\204 \354\225\214\352\263\240\353\246\254\354\246\230_.md" "b/developLog/algorithm-datastructure/algorithm/_ \352\267\270\353\236\230\355\224\204 \354\225\214\352\263\240\353\246\254\354\246\230_.md" new file mode 100644 index 0000000..3a49f97 --- /dev/null +++ "b/developLog/algorithm-datastructure/algorithm/_ \352\267\270\353\236\230\355\224\204 \354\225\214\352\263\240\353\246\254\354\246\230_.md" @@ -0,0 +1,186 @@ +# ๊ทธ๋ž˜ํ”„ ์•Œ๊ณ ๋ฆฌ์ฆ˜ + +> ๐Ÿ’ซ ๋น„์„ ํ˜• ๊ตฌ์กฐ๋ž€ ์ผ๋ ฌ๋กœ ๋‚˜์—ดํ•˜์ง€ ์•Š๊ณ  ์ž๋ฃŒ๊ตฌ์กฐ๋‚˜ ๊ด€๊ณ„๊ฐ€ ๋ณต์žกํ•œ ๊ตฌ์กฐ๋ฅผ ๋งํ•œ๋‹ค. + +## ๊ทธ๋ž˜ํ”„ + +### ๐Ÿ ๊ฐœ๋… + +* ๋…ธ๋“œ(์ •์ )์™€ ๊ฐ„์„ ์œผ๋กœ ํ‘œํ˜„ + +![](https://velog.velcdn.com/images/prettylee620/post/d133edf3-7d66-4e4d-8314-b6248f510270/image.png) + +#### ์ •์ ๊ณผ ๊ฐ„์„  + +> ์–ด๋– ํ•œ ๊ณณ์—์„œ ์–ด๋– ํ•œ ๊ณณ์œผ๋กœ ๋ฌด์–ธ๊ฐ€๋ฅผ ํ†ตํ•ด ๊ฐ„๋‹ค๊ณ  ํ–ˆ์„ ๋•Œ + +* ์ •์  : ์–ด๋– ํ•œ ๊ณณ, ์ถœ๋ฐœ์ง€์™€ ๋„์ฐฉ์ง€ +* ๊ฐ„์„  : ๋ฌด์–ธ๊ฐ€๊ฐ€ ๋˜๋ฉฐ, ๊ฐ€๋Š” ๊ธธ + +#### ๋‹จ๋ฐฉํ–ฅ ๊ฐ„์„  + +* ์ง์‚ฌ๋ž‘ : ์ผ๋ฐฉ์  ๊ฐ„์„  +* ์‚ฌ๋ž‘ : ์–‘๋ฐฉํ–ฅ ๊ฐ„์„  + +### ๐Ÿ ๊ทธ๋ž˜ํ”„์˜ ๊ธฐ๋ณธ๊ตฌ์กฐ + +* **๊ทธ๋ž˜ํ”„ ํƒ์ƒ‰**์ด๋ž€? ํ•˜๋‚˜์˜ ๋…ธ๋“œ๋ฅผ ์‹œ์ž‘์œผ๋กœ ๋‹ค์ˆ˜์˜ ๋…ธ๋“œ์— ๋ฐฉ๋ฌธํ•˜๋Š” ๊ฒƒ +* ๋‘ ๋…ธ๋“œ๋Š” `์ธ์ ‘ํ•˜๋‹ค` = ๋‘ ๋…ธ๋“œ๊ฐ€ ๊ฐ„์„ ์œผ๋กœ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋‹ค + +### ๐Ÿ ์šฉ์–ด + +> 8/23 ๊ตญ๋น„์—์„œ ๋ฐฐ์šด ๋‚ด์šฉ ์ถ”๊ฐ€ + +* ๋…ธ๋“œ (Node): ์œ„์น˜, ์ •์ (Vertex) +* ๊ฐ„์„  (Edge): ์œ„์น˜ ๊ฐ„์˜ ๊ด€๊ณ„๋ฅผ ํ‘œ์‹œํ•œ ์„ . ๋…ธ๋“œ๋ฅผ ์—ฐ๊ฒฐํ•œ ์„ (link ๋˜๋Š” branch) +* ์ธ์ ‘ ์ •์  (Adjacent Vertex) : ๊ฐ„์„ ์œผ๋กœ ์ง์ ‘ ์—ฐ๊ฒฐ๋œ ์ •์ (๋˜๋Š” ๋…ธ๋“œ) +* ์ •์ ์˜ ์ฐจ์ˆ˜ (Degree): ๋ฌด๋ฐฉํ–ฅ ๊ทธ๋ž˜ํ”„์—์„œ ํ•˜๋‚˜์˜ ์ •์ ์— ์ธ์ ‘ํ•œ ์ •์ ์˜ ์ˆ˜ +* ์ง„์ž… ์ฐจ์ˆ˜ (In-Degree): ๋ฐฉํ–ฅ ๊ทธ๋ž˜ํ”„์—์„œ ์™ธ๋ถ€์—์„œ ์˜ค๋Š” ๊ฐ„์„ ์˜ ์ˆ˜ +* ์ง„์ถœ ์ฐจ์ˆ˜ (Out-Degree): ๋ฐฉํ–ฅ ๊ทธ๋ž˜ํ”„์—์„œ ์™ธ๋ถ€๋กœ ํ–ฅํ•˜๋Š” ๊ฐ„์„ ์˜ ์ˆ˜ +* ๊ฒฝ๋กœ ๊ธธ์ด (Path Length): ๊ฒฝ๋กœ๋ฅผ ๊ตฌ์„ฑํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋œ ๊ฐ„์„ ์˜ ์ˆ˜ +* ๋‹จ์ˆœ ๊ฒฝ๋กœ (Simple Path): ์ฒ˜์Œ ์ •์ ๊ณผ ๋ ์ •์ ์„ ์ œ์™ธํ•˜๊ณ  ์ค‘๋ณต๋œ ์ •์ ์ด ์—†๋Š” ๊ฒฝ๋กœ +* ์‚ฌ์ดํด (Cycle): ๋‹จ์ˆœ ๊ฒฝ๋กœ์˜ ์‹œ์ž‘ ์ •์ ๊ณผ ์ข…๋ฃŒ ์ •์ ์ด ๋™์ผํ•œ ๊ฒฝ์šฐ + +### ๐Ÿ ๊ทธ๋ž˜ํ”„์˜ ํ‘œํ˜„๋ฒ• 2๊ฐ€์ง€ + +#### 1. **์ธ์ ‘ ํ–‰๋ ฌ(Adjacency Matrix)** : **2์ฐจ์› ๋ฐฐ์—ด**๋กœ ์—ฐ๊ฒฐ ๊ด€๊ณ„๋ฅผ ํ‘œํ˜„ํ•˜๋Š” ๋ฐฉ์‹ + +* 2์ฐจ์› ๋ฐฐ์—ด์— ๊ฐ ๋…ธ๋“œ๊ฐ€ ์—ฐ๊ฒฐ๋œ ํ˜•ํƒœ๋ฅผ ๊ธฐ๋กํ•˜๋Š” ๋ฐฉ์‹ +* `2์ฐจ์› ๋ฆฌ์ŠคํŠธ` +* ์—ฐ๊ฒฐ๋˜์–ด ์žˆ์ง€ ์•Š์€ ๋…ธ๋“œ๋ผ๋ฆฌ ๋ฌดํ•œ์˜ ๋น„์šฉ์ด๋ผ๊ณ  ์ž‘์„ฑ + +1. ์žฅ์  + +* **์†๋„ ์ธก๋ฉด** : ํŠน์ •ํ•œ ๋‘ ๋…ธ๋“œ๊ฐ€ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋Š”์ง€์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ์–ป๋Š” **์†๋„๊ฐ€ ์ธ์ ‘ ๋ฆฌ์ŠคํŠธ๋ณด๋‹ค ๋น ๋ฅด๋‹ค โ‡’ ๊ทธ๋ž˜ํ”„ ๋‚ด์˜ ๋…ธ๋“œ ๊ฐ„ ๊ด€๊ณ„๋ฅผ ์ƒ์ˆ˜ ์‹œ๊ฐ„(O(1))์— ํ™•์ธ ๊ฐ€๋Šฅ โ‡’ ์ด์œ  : ๋ชจ๋“  ๊ด€๊ณ„๋ฅผ ์ €์žฅํ•˜๊ณ  ์žˆ์œผ๋‹ˆ๊นŒ** +* ๊ฐ„์„ ์˜ ์œ ๋ฌด์™€ ๊ฐ€์ค‘์น˜๋ฅผ ์ €์žฅํ•˜๊ธฐ์— ์œ ์šฉ + * ์ด์œ  : ๋ชจ๋“  ๊ด€๊ณ„ ์ €์žฅํ•˜๋‹ˆ๊นŒ +* ์ž‘์€ ๋ฐ€์ง‘ ๊ทธ๋ž˜ํ”„์—์„œ ๋ฉ”๋ชจ๋ฆฌ ๋” ํšจ์œจ์  ์‚ฌ์šฉ ๊ฐ€๋Šฅ + * **๋ฉ”๋ชจ๋ฆฌ ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ์ž‘์Œ**: ์ž‘์€ ๊ทธ๋ž˜ํ”„์˜ ๊ฒฝ์šฐ ์ธ์ ‘ ํ–‰๋ ฌ์€ ๋…ธ๋“œ ์ˆ˜์— ๋น„ํ•ด ์ƒ๋Œ€์ ์œผ๋กœ ์ ์€ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์‚ฌ์šฉ + * **๊ฐ„์„  ๊ฐœ์ˆ˜๊ฐ€ ์ƒ๋Œ€์ ์œผ๋กœ ๋งŽ์Œ**: `๋ฐ€์ง‘ ๊ทธ๋ž˜ํ”„`๋Š” **๊ฐ„์„ ์ด ๋…ธ๋“œ ์ˆ˜์— ๋น„ํ•ด ๋งŽ์ด ์กด์žฌํ•˜๋Š” ๊ฒฝ์šฐ**๋ฅผ ๊ฐ€๋ฆฌํ‚จ๋‹ค. ์ธ์ ‘ ๋ฆฌ์ŠคํŠธ๋Š” ๊ฐ ๋…ธ๋“œ๋งˆ๋‹ค ์—ฐ๊ฒฐ๋œ ๋…ธ๋“œ์˜ ๋ฆฌ์ŠคํŠธ๋ฅผ ์œ ์ง€ํ•ด์•ผ ํ•˜๋ฏ€๋กœ, ๊ฐ„์„ ์ด ๋งŽ์€ ๊ฒฝ์šฐ์—๋Š” ์ด ๋ฆฌ์ŠคํŠธ๋“ค์˜ ํฌ๊ธฐ๊ฐ€ ์ปค์ ธ์„œ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ์ด ์ฆ๊ฐ€ํ•จ ์ด์™€ ๋‹ฌ๋ฆฌ ์ธ์ ‘ ํ–‰๋ ฌ์€ ๊ฐ„์„ ์˜ ์œ ๋ฌด๋งŒ ํ‘œ์‹œํ•˜๋ฉด ๋˜๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ„์„ ์˜ ๊ฐœ์ˆ˜์™€๋Š” ๋ฌด๊ด€ํ•˜๊ฒŒ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์ด ์ผ์ • + * **๋น ๋ฅธ ๊ฐ„์„  ์กฐํšŒ**: ์ธ์ ‘ ํ–‰๋ ฌ์€ ๊ฐ„์„ ์˜ ์œ ๋ฌด๋ฅผ ์ƒ์ˆ˜ ์‹œ๊ฐ„(O(1))์— ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. ์ž‘์€ ๋ฐ€์ง‘ ๊ทธ๋ž˜ํ”„์—์„œ๋Š” ์ด๋Ÿฐ ๊ฐ„์„  ์กฐํšŒ๊ฐ€ ๋” ํšจ์œจ์  + +2. ๋‹จ์  + +* **๋ฉ”๋ชจ๋ฆฌ ์ธก๋ฉด** : ๋ชจ๋“  ๊ด€๊ณ„๋ฅผ ์ €์žฅํ•˜๋ฏ€๋กœ ๋…ธ๋“œ ๊ฐœ์ˆ˜๊ฐ€ ๋งŽ์„์ˆ˜๋ก ๋ฉ”๋ชจ๋ฆฌ ๋‚ญ๋น„ + +```python +INF = 999999999 # ๋ฌดํ•œ์˜ ๋น„์šฉ ์„ ์–ธ(์—ฐ๊ฒฐ๋˜์–ด ์žˆ์ง€ ์•Š์€ ๋…ธ๋“œ) + +# 2์ฐจ์› ํžˆ์ŠคํŠธ๋ฅผ ์ด์šฉํ•ด ์ธ์ ‘ํ•œ ํ–‰๋ ฌ ํ‘œํ˜„ +graph = [ + [0, 7, 5], + [7, 0, INF], + [5, INF, 0] +] + +print(graph) +``` + +**\[๊ฒฐ๊ณผ์ฐฝ]** + +![](https://velog.velcdn.com/images/prettylee620/post/e7cde8b5-5430-452b-af54-28e547a9fe2a/image.png) + +![](https://velog.velcdn.com/images/prettylee620/post/54457ecb-fb97-42a2-a59b-c807f112d0be/image.png) + +#### 2. **์ธ์ ‘ ๋ฆฌ์ŠคํŠธ(Adjacency List)** : ๋ฆฌ์ŠคํŠธ๋กœ ๊ทธ๋ž˜ํ”„์˜ ์—ฐ๊ฒฐ ๊ด€๊ณ„๋ฅผ ํ‘œํ˜„ํ•˜๋Š” ๋ฐฉ์‹ + +* C++ Java์˜ ๊ฒฝ์šฐ, ๋ณ„๋„์˜ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ ๊ธฐ๋Šฅ์„ ์œ„ํ•œ ํ‘œ์ค€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ œ๊ณต +* ํŒŒ์ด์ฌ์˜ ๊ฒฝ์šฐ ๊ธฐ๋ณธ ์ž๋ฃŒํ˜•์ธ ๋ฆฌ์ŠคํŠธ ์ž๋ฃŒํ˜•์ด `append()`์™€ ๋ฉ”์†Œ๋“œ ์ œ๊ณต + + โ‡’ ๋ฐฐ์—ด๊ณผ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ์˜ ๊ธฐ๋Šฅ์„ ๋ชจ๋‘ **๊ธฐ๋ณธ**์œผ๋กœ ์ œ๊ณต +* ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ๋ฅผ ์ด์šฉํ•ด ๊ทธ๋ž˜ํ”„๋ฅผ ํ‘œํ˜„ํ•˜๊ณ ์ž ํ•  ๋•Œ์—๋„ `2์ฐจ์› ๋ฆฌ์ŠคํŠธ` ์ด์šฉํ•˜๋ฉด ๋จ + +1. ์žฅ์  + +* **๋ฉ”๋ชจ๋ฆฌ ์ธก๋ฉด** : ์—ฐ๊ฒฐ๋œ ์ •๋ณด\[๋…ธ๋“œ]๋งŒ์„ ์ €์žฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ธ์ ‘ํ–‰๋ ฌ๋ฐฉ์‹๋ณด๋‹ค ํšจ์œจ์  +* ๊ทธ๋ž˜ํ”„์˜ ํฌ๊ธฐ๋‚˜ ๋…ธ๋“œ ์ˆ˜์— ๋ฌด๊ด€ํ•˜๊ฒŒ ์ƒ๋Œ€์ ์œผ๋กœ ์ž‘์€ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์‚ฌ์šฉ +* ๊ทธ๋ž˜ํ”„ ํƒ์ƒ‰ ์‹œ ์—ฐ๊ฒฐ๋œ ๋…ธ๋“œ ๋น ๋ฅด๊ฒŒ ์ˆœํšŒ ๊ฐ€๋Šฅ +* ํฌ์†Œ ๊ทธ๋ž˜ํ”„์—์„œ ์ ํ•ฉํ•จ + * `ํฌ์†Œ ๊ทธ๋ž˜ํ”„`๋ž€ ๊ทธ๋ž˜ํ”„ ๋‚ด์— ๊ฐ„์„ ์˜ ์ˆ˜๊ฐ€ ์ƒ๋Œ€์ ์œผ๋กœ **์ ์€** ๊ฒฝ์šฐ + * **๋ฉ”๋ชจ๋ฆฌ ์ ˆ์•ฝ**: ์ธ์ ‘ ๋ฆฌ์ŠคํŠธ๋Š” ๊ฐ ๋…ธ๋“œ๋งˆ๋‹ค ์—ฐ๊ฒฐ๋œ ๋…ธ๋“œ๋“ค์„ ์ €์žฅํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ์—ฐ๊ฒฐ๋˜์ง€ ์•Š์€ ๋…ธ๋“œ ์‚ฌ์ด์—๋Š” ๊ณต๊ฐ„์ด ๋‚ญ๋น„๋˜์ง€ ์•Š์Œ + * **๋น ๋ฅธ ๊ฐ„์„  ์กฐํšŒ**: ์ธ์ ‘ ๋ฆฌ์ŠคํŠธ๋Š” ๋…ธ๋“œ๋งˆ๋‹ค ์—ฐ๊ฒฐ๋œ ๋…ธ๋“œ๋“ค์„ ์ˆœํšŒํ•˜๋ฏ€๋กœ ์—ฐ๊ฒฐ๋œ ๋…ธ๋“œ๋“ค์— ๋Œ€ํ•œ ์กฐํšŒ๊ฐ€ ๋น ๋ฅด๊ฒŒ ์ด๋ฃจ์–ด์ง„๋‹ค. ํฌ์†Œ ๊ทธ๋ž˜ํ”„์—์„œ๋Š” ๋…ธ๋“œ ๊ฐ„์˜ ์—ฐ๊ฒฐ์ด ์ ์–ด์„œ ์ธ์ ‘ ๋ฆฌ์ŠคํŠธ๋กœ ์—ฐ๊ฒฐ๋œ ๋…ธ๋“œ๋ฅผ ๋น ๋ฅด๊ฒŒ ์กฐํšŒ ๊ฐ€๋Šฅ + * **์‹œ๊ฐ„ ๋ณต์žก๋„ ๊ฐœ์„ **: ์ธ์ ‘ ๋ฆฌ์ŠคํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํฌ์†Œ ๊ทธ๋ž˜ํ”„์—์„œ ๊ทธ๋ž˜ํ”„ ํƒ์ƒ‰ ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๋ฅผ ๊ฐœ์„ ํ•  ์ˆ˜ ์žˆ๋‹ค. ๋…ธ๋“œ ๊ฐ„์˜ ๊ด€๊ณ„๊ฐ€ ์ ์–ด์„œ ํƒ์ƒ‰์„ ์ค‘์ง€ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋” ๋งŽ๊ธฐ ๋•Œ๋ฌธ + +2. ๋‹จ์  + +* **์†๋„ ์ธก๋ฉด** : ์—ฐ๊ฒฐ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ํ•˜๋‚˜์”ฉ ํ™•์ธํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํŠน์ •ํ•œ ๋‘ ๋…ธ๋“œ๊ฐ€ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋Š”์ง€์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ์–ป๋Š” **์†๋„๊ฐ€ ๋Š๋ฆฌ๋‹ค.** + +3. ์˜ˆ์ œ + +* ํ•ด์„ + * \*\*`graph[0]`\*\*์— ์ €์žฅ๋œ ์ •๋ณด : ๋…ธ๋“œ 0๊ณผ ์—ฐ๊ฒฐ๋œ ๋…ธ๋“œ 1, ๊ฑฐ๋ฆฌ 7 + ๋…ธ๋“œ 0๊ณผ ์—ฐ๊ฒฐ๋œ ๋…ธ๋“œ 2, ๊ฑฐ๋ฆฌ 5 + * \*\*`graph[1]`\*\*์— ์ €์žฅ๋œ ์ •๋ณด : ๋…ธ๋“œ 1๊ณผ ์—ฐ๊ฒฐ๋œ ๋…ธ๋“œ 0 ์ €์žฅ + * \*\*`graph[2]`\*\*์— ์ €์žฅ๋œ ์ •๋ณด : ๋…ธ๋“œ 2์™€ ์—ฐ๊ฒฐ๋œ ๋…ธ๋“œ 0๋งŒ์ด ์ €์žฅ + +```python +# ํ–‰(Row)์ด 3๊ฐœ์ธ 2์ฐจ์› ๋ฆฌ์ŠคํŠธ๋กœ ์ธ์ ‘ ๋ฆฌ์ŠคํŠธ ํ‘œํ˜„ +graph = [[] for _ in range(3)] + +# ๋…ธ๋“œ 0์— ์—ฐ๊ฒฐ๋œ ๋…ธ๋“œ ์ •๋ณด ์ €์žฅ(์—ฐ๊ฒฐ๋œ ๋…ธ๋“œ, ๊ฑฐ๋ฆฌ) +graph[0].append((1, 7)) +graph[0].append((2, 5)) + +# ๋…ธ๋“œ 1์— ์—ฐ๊ฒฐ๋œ ๋…ธ๋“œ ์ •๋ณด ์ €์žฅ +graph[1].append((0, 7)) + +# ๋…ธ๋“œ 2์— ์—ฐ๊ฒฐ๋œ ๋…ธ๋“œ ์ •๋ณด ์ €์žฅ +graph[2].append((0, 5)) + +print(graph) +``` + +* ์ฝ”๋“œ ์‹œ๊ฐํ™” ์‚ฌ์ง„ + +![](https://velog.velcdn.com/images/prettylee620/post/74c15462-583a-4c68-9bc6-395e3b6122ec/image.png) + +**\[๊ฒฐ๊ณผ์ฐฝ]** + +![](https://velog.velcdn.com/images/prettylee620/post/7fb6d339-7edf-4fec-99dc-e9421513793d/image.png) + +### ๐Ÿ ๊ทธ๋ž˜ํ”„ (Graph) ์ข…๋ฅ˜ + +#### ๋ฌด๋ฐฉํ–ฅ ๊ทธ๋ž˜ํ”„ (Undirected Graph) + +* ๋ฐฉํ–ฅ์ด ์—†๋Š” ๊ทธ๋ž˜ํ”„ +* ๊ฐ„์„ ์„ ํ†ตํ•ด, ๋…ธ๋“œ๋Š” ์–‘๋ฐฉํ–ฅ์œผ๋กœ ๊ฐˆ ์ˆ˜ ์žˆ์Œ + +#### ๋ฐฉํ–ฅ ๊ทธ๋ž˜ํ”„ (Directed Graph) + +* ๊ฐ„์„ ์— ๋ฐฉํ–ฅ์ด ์žˆ๋Š” ๊ทธ๋ž˜ํ”„ + +#### ๊ฐ€์ค‘์น˜ ๊ทธ๋ž˜ํ”„ (Weighted Graph) ๋˜๋Š” ๋„คํŠธ์›Œํฌ (Network) + +* ๊ฐ„์„ ์— ๋น„์šฉ ๋˜๋Š” ๊ฐ€์ค‘์น˜๊ฐ€ ํ• ๋‹น๋œ ๊ทธ๋ž˜ํ”„ + +#### ์—ฐ๊ฒฐ ๊ทธ๋ž˜ํ”„ (Connected Graph) + +* ๋ฌด๋ฐฉํ–ฅ ๊ทธ๋ž˜ํ”„์— ์žˆ๋Š” ๋ชจ๋“  ๋…ธ๋“œ์— ๋Œ€ํ•ด ํ•ญ์ƒ ๊ฒฝ๋กœ๊ฐ€ ์กด์žฌํ•˜๋Š” ๊ฒฝ์šฐ + +#### ๋น„์—ฐ๊ฒฐ ๊ทธ๋ž˜ํ”„ (Disconnected Graph) + +* ๋ฌด๋ฐฉํ–ฅ ๊ทธ๋ž˜ํ”„์—์„œ ํŠน์ • ๋…ธ๋“œ์— ๋Œ€ํ•ด ๊ฒฝ๋กœ๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ + +#### ์‚ฌ์ดํด (Cycle) + +* ๋‹จ์ˆœ ๊ฒฝ๋กœ์˜ ์‹œ์ž‘ ๋…ธ๋“œ์™€ ์ข…๋ฃŒ ๋…ธ๋“œ๊ฐ€ ๋™์ผํ•œ ๊ฒฝ์šฐ + +#### ๋น„์ˆœํ™˜ ๊ทธ๋ž˜ํ”„ (Acyclic Graph) + +* ์‚ฌ์ดํด์ด ์—†๋Š” ๊ทธ๋ž˜ํ”„ + +#### ์™„์ „ ๊ทธ๋ž˜ํ”„ (Complete Graph) + +* ๊ทธ๋ž˜ํ”„์˜ ๋ชจ๋“  ๋…ธ๋“œ๊ฐ€ ์„œ๋กœ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋Š” ๊ทธ๋ž˜ํ”„ + +### ๐Ÿ ๊ทธ๋ž˜์„œ ์–ด๋””์„œ ์“ฐ๋ƒ?\[chat gpt์˜ ๋‹ต๋ณ€] + +> ์ฆ‰, ๊ทธ๋ž˜ํ”„๋Š” ๊นŠ์ด ์šฐ์„  ํƒ์ƒ‰๊ณผ ๋„ˆ๋น„ ์šฐ์„  ํƒ์ƒ‰์„ ํ•˜๊ธฐ ์œ„ํ•œ ๋ชฉ์  + +1. **์ตœ๋‹จ ๊ฒฝ๋กœ ์•Œ๊ณ ๋ฆฌ์ฆ˜**: ๋‘ ๋…ธ๋“œ ์‚ฌ์ด์˜ ์ตœ๋‹จ ๊ฒฝ๋กœ๋ฅผ ์ฐพ๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ, ๋‹ค์ต์ŠคํŠธ๋ผ ์•Œ๊ณ ๋ฆฌ์ฆ˜, ๋ฒจ๋งŒ-ํฌ๋“œ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋“ฑ์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค. +2. **์‹ ์žฅ ํŠธ๋ฆฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜**: ๊ทธ๋ž˜ํ”„ ๋‚ด์˜ ๋ชจ๋“  ๋…ธ๋“œ๋ฅผ ํฌํ•จํ•˜๋Š” ํŠธ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ, ํ”„๋ฆผ ์•Œ๊ณ ๋ฆฌ์ฆ˜๊ณผ ํฌ๋ฃจ์Šค์นผ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค. +3. **ํ๋ฆ„ ๋„คํŠธ์›Œํฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜**: ๋„คํŠธ์›Œํฌ์˜ ํ๋ฆ„์„ ์ตœ์ ์œผ๋กœ ๊ด€๋ฆฌํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ, ํฌ๋“œ-ํ’€์ปค์Šจ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ๋Œ€ํ‘œ์ ์ž…๋‹ˆ๋‹ค. +4. **๊ทธ๋ž˜ํ”„ ํƒ์ƒ‰ ์•Œ๊ณ ๋ฆฌ์ฆ˜**: ๊ทธ๋ž˜ํ”„ ๋‚ด์˜ ๋ชจ๋“  ๋…ธ๋“œ๋ฅผ ํƒ์ƒ‰ํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ, ๊นŠ์ด ์šฐ์„  ํƒ์ƒ‰(DFS)๊ณผ ๋„ˆ๋น„ ์šฐ์„  ํƒ์ƒ‰(BFS)์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค. +5. **์œ„์ƒ ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜**: ๋ฐฉํ–ฅ ๊ทธ๋ž˜ํ”„์—์„œ ์ˆœ์„œ๊ฐ€ ์žˆ๋Š” ์ž‘์—…์„ ์ •๋ ฌํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ž…๋‹ˆ๋‹ค. +6. **์ตœ์†Œ ์‹ ์žฅ ํŠธ๋ฆฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜**: ๊ฐ€์ค‘์น˜๊ฐ€ ์žˆ๋Š” ๊ทธ๋ž˜ํ”„์—์„œ ๋ชจ๋“  ๋…ธ๋“œ๋ฅผ ํฌํ•จํ•˜๋Š” ์‹ ์žฅ ํŠธ๋ฆฌ ์ค‘ ๊ฐ€์ค‘์น˜์˜ ํ•ฉ์ด ์ตœ์†Œ์ธ ํŠธ๋ฆฌ๋ฅผ ์ฐพ๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ, ํ”„๋ฆผ ์•Œ๊ณ ๋ฆฌ์ฆ˜๊ณผ ํฌ๋ฃจ์Šค์นผ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ์žˆ์Šต๋‹ˆ๋‹ค. +7. **๊ฒฝ๋กœ ์ฐพ๊ธฐ ์•Œ๊ณ ๋ฆฌ์ฆ˜**: ๋‘ ๋…ธ๋“œ ๊ฐ„์˜ ๊ฒฝ๋กœ๋ฅผ ์ฐพ๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ, ๊นŠ์ด ์šฐ์„  ํƒ์ƒ‰(DFS)์ด๋‚˜ ๋„ˆ๋น„ ์šฐ์„  ํƒ์ƒ‰(BFS)์„ ํ™œ์šฉํ•˜์—ฌ ๊ตฌํ˜„๋ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. +8. **๋„คํŠธ์›Œํฌ ํ”Œ๋กœ์šฐ ์•Œ๊ณ ๋ฆฌ์ฆ˜**: ํŠน์ • ์กฐ๊ฑดํ•˜์—์„œ ๋„คํŠธ์›Œํฌ ๋‚ด์—์„œ ์ •๋ณด๋‚˜ ๋ฌผ๋Ÿ‰์˜ ํ๋ฆ„์„ ์ตœ์ ์œผ๋กœ ๊ด€๋ฆฌํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ž…๋‹ˆ๋‹ค. diff --git "a/developLog/algorithm-datastructure/algorithm/_ \352\267\270\353\246\254\353\224\224_.md" "b/developLog/algorithm-datastructure/algorithm/_ \352\267\270\353\246\254\353\224\224_.md" new file mode 100644 index 0000000..39b6515 --- /dev/null +++ "b/developLog/algorithm-datastructure/algorithm/_ \352\267\270\353\246\254\353\224\224_.md" @@ -0,0 +1,350 @@ +# ๊ทธ๋ฆฌ๋”” + + [๊ทธ๋ฆฌ๋”” ์ •๋ฆฌ ๋…ธ์…˜ ๋ฒ„์ „](https://incredible-gem-98e.notion.site/02-Big-O-e6f9ea423f4a42d183b99a138d645913) + +
+ +### ๐Ÿ“š ๋‹น์žฅ ์ข‹์€ ๊ฒƒ์„ ์„ ํƒํ•˜๋Š” ๊ทธ๋ฆฌ๋”” ์•Œ๊ณ ๋ฆฌ์ฆ˜ + +*** + +* ๋‹จ์ˆœํ•˜์ง€๋งŒ ๊ฐ•๋ ฅํ•œ ๋ฌธ์ œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ• +* `ํƒ์š•๋ฒ•` ์•Œ๊ณ ๋ฆฌ์ฆ˜ : ํ˜„์žฌ ์ƒํ™ฉ์—์„œ ์ง€๊ธˆ ๋‹น์žฅ ์ข‹์€ ๊ฒƒ๋งŒ ๊ณ ๋ฅด๋Š” ๋ฐฉ๋ฒ•์˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜ +* ์ฐฝ์˜๋ ฅ์„ ์š”๊ตฌ, ๋‹จ์ˆœํžˆ ํ˜„์žฌ ์ƒํ™ฉ์—์„œ ๊ฐ€์žฅ ์ข‹์•„ ๋ณด์ด๋Š” ๊ฒƒ๋งŒ ์„ ํƒํ•ด๋„ ok +* ์ˆœ๊ฐ„ ๊ฐ€์žฅ ์ข‹์•„ ๋ณด์ด๋Š” ๊ฒƒ์„ ์„ ํƒ, ํ˜„์žฌ์˜ ์„ ํƒ์ด **๋‚˜์ค‘์— ๋ฏธ์น  ์˜ํ–ฅ ๊ณ ๋ ค No!** +* **์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜**๊ณผ ์ง์„ ์ด๋ค„์„œ ์ถœ์ œ โ‡’ โ€˜๊ฐ€์žฅ ํฐ ์ˆœ์„œ๋Œ€๋กœโ€™์™€ ๊ฐ™์€ ๊ธฐ์ค€ ์ œ์‹œ + +#### ๐Ÿ“ ์ฝ”ํ…Œ์—์„œ ๋งŒ๋‚˜๊ฒŒ ๋  ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์œ ํ˜• + +1. ์‚ฌ์ „์— ์™ธ์šฐ๊ณ  ์žˆ์ง€ ์•Š์•„๋„ ํ’€ ์ˆ˜ ์žˆ์„ ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์€ ๋ฌธ์ œ ์œ ํ˜•์ด๋ผ๋Š” ํŠน์ง• : **๊ทธ๋ฆฌ๋””** +2. ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์‚ฌ์šฉ ๋ฐฉ๋ฒ•์„ ์ •ํ™•ํžˆ ์•Œ๊ณ  ์žˆ์–ด์•ผ ํ•ด๊ฒฐ ๊ฐ€๋Šฅ : **์ •๋ ฌ, ์ตœ๋‹จ๊ฒฝ๋กœ** ๋“ฑ + +\ +\ + + +#### ๐Ÿ“ ์˜ˆ์‹œ1 ๊ฑฐ์Šค๋ฆ„๋ˆ + +*** + +๊ฐ€์ •) ์นด์šดํ„ฐ์— ๊ฑฐ์Šค๋ฆ„๋ˆ์œผ๋กœ ์‚ฌ์šฉํ•  500, 100, 50, 10์›์งœ๋ฆฌ ๋™์ „์ด ๋ฌดํ•œ ์กด์žฌํ•œ๋‹ค๊ณ  ๊ฐ€์ •์‹œ ์†๋‹˜์—๊ฒŒ ๊ฑฐ์Šฌ๋Ÿฌ ์ค˜์•ผ ํ•  N์›์ผ ๋•Œ, ๊ฑฐ์Šฌ๋Ÿฌ ์ค˜์•ผ ํ•  ๋™์ „์˜ ์ตœ์†Œ ๊ฐœ์ˆ˜๋Š”?(๋‹จ, ๊ฑฐ์Šฌ๋Ÿฌ์ค˜์•ผ ํ•  ๋ˆ **N์€ ํ•ญ์ƒ 10์˜ ๋ฐฐ์ˆ˜**) + +A : **โ€˜๊ฐ€์žฅ ํฐ ํ™”ํ ๋‹จ์œ„๋ถ€ํ„ฐโ€™** ๋ˆ์„ ๊ฑฐ์Šฌ๋Ÿฌ ์ฃผ๋Š” ๊ฒƒ + +1. ๊ฐ€์ •) ๋‚จ์€๋ˆ **N์›** : 1260์› +2. 500์› ์งœ๋ฆฌ 2๊ฐœ๋ฅผ ์คŒ + + ๋‚จ์€ ๋ˆ : 260์› +3. 100์›์งœ๋ฆฌ 2๊ฐœ๋ฅผ ์คŒ + + ๋‚จ์€ ๋ˆ : 60์› +4. 50์›์งœ๋ฆฌ 1๊ฐœ๋ฅผ ์คŒ + + ๋‚จ์€ ๋ˆ : 10์› +5. 10์›์งœ๋ฆฌ 1๊ฐœ๋ฅผ ์คŒ โ‡’ **๋™์ „์˜ ์ตœ์†Œ ๊ฐœ์ˆ˜ : 6๊ฐœ** + +* ์ฐธ๊ณ ) **ํŒŒ์ด์ฌ ๊ธฐํ˜ธ** + * `**` : ๊ฑฐ๋“ญ ์ œ๊ณฑ + * `/` : ๋‚˜๋ˆ„๊ธฐ + * `//` : ๋‚˜๋ˆ„๊ธฐ ์—ฐ์‚ฐ ํ›„ ์†Œ์ˆ˜์  ์ดํ•˜์˜ ์ˆ˜๋ฅผ ๋ฒ„๋ฆฌ๊ณ , ์ •์ˆ˜ ๋ถ€๋ถ„์˜ ์ˆ˜๋งŒ ๊ตฌํ•จ + * `%` : ๋‚˜๋ˆ„๊ธฐ ์—ฐ์‚ฐ ํ›„ ๋ชซ์ด ์•„๋‹Œ ๋‚˜๋จธ์ง€๋ฅผ ๊ตฌํ•จ + +```python +n = 1260 -int(input()) +count = 0 + +# ํฐ ๋‹จ์œ„์˜ ํ™”ํ๋กœ๋ถ€ํ„ฐ ์ฐจ๋ก€๋Œ€๋กœ ํ™•์ธ +coin_types = [500,100,50,10] + +for i in coin_types: # ํ™”ํ์˜ ์ข…๋ฅ˜๋งŒํผ ๋ฐ˜๋ณต ์ˆ˜ํ–‰, **for ๋ณ€์ˆ˜ in ๋ฆฌ์ŠคํŠธ(๋˜๋Š” ํŠœํ”Œ, ๋ฌธ์ž์—ด)** + count += (n//coin_types[i]) # ํ™”ํ๋กœ ๋ถ€ํ„ฐ ๊ฑฐ์Šฌ๋Ÿฌ ์ค„ ์ˆ˜ ์žˆ๋Š” ๋™์ „์˜ ๊ฐœ์ˆ˜ ์„ธ๊ธฐ + n %= coin_types[i] + +print(count) +``` + +**๐ŸŽ ์˜ˆ์‹œ1์˜ ์‹œ๊ฐ„๋ณต์žก๋„** + +* ๋ฐ˜๋ณต๋ฌธ์—์„œ ํ™”ํ์˜ ์ข…๋ฅ˜๋งŒํผ ๋ฐ˜๋ณตํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํ™”ํ์˜ ์ข…๋ฅ˜๊ฐ€ K๊ฐœ๋ผ๊ณ  ๊ฐ€์ •์‹œ : `O(K)` +* ๊ฑฐ์Šฌ๋Ÿฌ ์ฃผ์–ด์•ผ ํ•  ๋ˆ N์€ ์ฐพ์•„๋ณผ ์ˆ˜ ์—†์Œ +* ์ฆ‰, ์ด ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” **๋™์ „์˜ ์ด ์ข…๋ฅ˜**๋งŒ ์˜ํ–ฅ, ๊ฑฐ์Šฌ๋Ÿฌ ์ค˜์•ผ ํ•˜๋Š” ๊ธˆ์•ก๊ณผ๋Š” ๋ฌด๊ด€ + +#### ๐ŸŽ‹ ์œ ์‚ฌ๋ฌธ์ œ + +[๋ฐฑ์ค€ 5585๋ฒˆ: ๊ฑฐ์Šค๋ฆ„๋ˆ](https://www.acmicpc.net/problem/5585) + +```python +N = 1000 - int(input()) +count = 0 + +coin_types = [500, 100, 50, 10, 5, 1] + +for i in range(6): + count += (N//coin_types[i]) + N %= coin_types[i] + +print(count) +``` + +### ๐Ÿ“š ๊ทธ๋ฆฌ๋”” ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ์ •๋‹น์„ฑ + +*** + +* ๋ชจ๋“  ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ์ ์šฉ ๋ถˆ๊ฐ€ +* BUT, ๊ฑฐ์Šค๋ฆ„๋ˆ ๋ฌธ์ œ์—์„œ โ€˜๊ฐ€์žฅ ํฐ ํ™”ํ ๋‹จ์œ„๋ถ€ํ„ฐโ€™ ๋ˆ์„ ๊ฑฐ์Šฌ๋Ÿฌ ์ฃผ๋Š” ๊ฒƒ๊ณผ ๊ฐ™์ด, `ํƒ์š•์ `์œผ๋กœ ๋ฌธ์ œ ์ ‘๊ทผ์‹œ ์ •ํ™•ํ•œ ๋‹ต์„ ์ฐพ์„ ์ˆ˜ ์žˆ๋‹ค๋Š” ๋ณด์žฅ์ด ์žˆ์„์‹œ **ํšจ๊ณผ์ , ์ง๊ด€์ ** +* ํ•ด๋ฒ•์„ ์ฐพ์„ ์‹œ ํ•ด๋ฒ•์ด `์ •๋‹นํ•œ์ง€` ๊ฒ€ํ†  + +> ๊ฑฐ์Šค๋ฆ„๋ˆ ๋ฌธ์ œ๋ฅผ ๊ทธ๋ฆฌ๋“œ ๋ฌธ์ œ๋กœ ํ•ด๊ฒฐ ๊ฐ€๋Šฅํ•œ **์ด์œ ** : ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๋™์ „ ์ค‘์—์„œ ํฐ ๋‹จ์œ„๊ฐ€ ํ•ญ์ƒ ์ž‘์€ ๋‹จ์œ„์˜ ๋ฐฐ์ˆ˜์ด๋ฏ€๋กœ ์ž‘์€ ๋‹จ์œ„์˜ ๋™์ „๋“ค์„ ์ข…ํ•ฉํ•ด ๋‹ค๋ฅธ ํ•ด๊ฐ€ ๋‚˜์˜ฌ ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ + +* ๋Œ€๋ถ€๋ถ„์˜ ๊ทธ๋ฆฌ๋”” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ์—์„œ ์ด์ฒ˜๋Ÿผ ๋ฌธ์ œ ํ’€์ด๋ฅผ ์œ„ํ•œ ์ตœ์†Œํ•œ์˜ ์•„์ด๋””์–ด๋ฅผ ๋– ์˜ฌ๋ฆฌ๊ณ  ์ด๊ฒƒ์ด ์ •๋‹นํ•œ์ง€ ๊ฒ€ํ† ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ๋‹ต ๋„์ถœ ๊ฐ€๋Šฅ +* ๋งŒ์•ฝ, ๊ฑฐ์Šค๋ฆ„๋ˆ ๋ฌธ์ œ์ด๋‚˜ ๋™์ „(ํ™”ํ)์˜ ๋‹จ์œ„์ฒ˜๋Ÿผ ์„œ๋กœ ๋ฐฐ์ˆ˜ ํ˜•ํƒœ๊ฐ€ ์•„๋‹ˆ๋ผ, `๋ฌด์ž‘์œ„`์‹œ ํ•ด๊ฒฐ ๋ถˆ๊ฐ€ + +๐Ÿ’ก **TIP) ์ฝ”๋”ฉ ํ…Œ์ŠคํŠธ์‹œ ๋ฌธ์ œ ์œ ํ˜• ํŒŒ์•…** + +1. ๋ฐ”๋กœ ๋ฌธ์ œ ์œ ํ˜• ํŒŒ์•… ์–ด๋ ค์šธ์‹œ, ๊ทธ๋ฆฌ๋”” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์˜์‹ฌํ•˜๊ณ , ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š” `ํƒ์š•์ ์ธ ๋ฐฉ๋ฒ•`์ด ์กด์žฌํ•˜๋Š”์ง€ ๊ณ ๋ฏผ +2. ๋ฐฉ๋ฒ•์ด ์—†๋‹ค๋ฉด, ์ดํ›„์— ๊ณต๋ถ€ํ•  ๋‹ค์ด๋‚˜๋ฏน ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด๋‚˜ ๊ทธ๋ž˜ํ”„ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋“ฑ์œผ๋กœ ๋ฌธ์ œ ํ•ด๊ฒฐ ๊ฐ€๋Šฅํ•œ์ง€ ๊ณ ๋ฏผ + +### ๐Ÿ“š ์‹ค์ „๋ฌธ์ œ) ํฐ ์ˆ˜์˜ ๋ฒ•์น™ + +*** + +* ๋‹ค์–‘ํ•œ ์ˆ˜๋กœ ์ด๋ฃจ์–ด์ง„ ๋ฐฐ์—ด์ด ์žˆ์„ ๋•Œ ์ฃผ์–ด์ง„ ์ˆ˜๋“ค์„ M๋ฒˆ ๋”ํ•˜์—ฌ **๊ฐ€์žฅ ํฐ ์ˆ˜**๋ฅผ ๋งŒ๋“œ๋Š” ๋ฒ•์น™ +* ๋‹จ, ๋ฐฐ์—ด์˜ ํŠน์ •ํ•œ \*\*์ธ๋ฑ์Šค(๋ฒˆํ˜ธ)\*\*์— ํ•ด๋‹นํ•˜๋Š” ์ˆ˜๊ฐ€ ์—ฐ์†ํ•ด์„œ K๋ฒˆ์„ ์ดˆ๊ณผํ•˜์—ฌ ๋”ํ•ด์งˆ ์ˆ˜ ์—†๋Š” ๊ฒƒ์ด ํŠน์ง• + +> ์ˆœ์„œ๋Œ€๋กœ 2, 4, 5, 4, 6์œผ๋กœ ์ด๋ฃจ์–ด์ง„ ๋ฐฐ์—ด์ด ์žˆ์„ ์‹œ, M์ด 8์ด๊ณ , K๊ฐ€ 3์ด๋ผ ๊ฐ€์ • + +ํŠน์ •ํ•œ ์ธ๋ฑ์Šค ์ˆ˜๊ฐ€ **์—ฐ์†ํ•ด์„œ 3๋ฒˆ๊นŒ์ง€๋งŒ** ๋”ํ•ด ์งˆ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ, ํฐ ์ˆ˜์˜ ๋ฒ•์น™์— ๋”ฐ๋ผ 6 + 6 + 6 + **5** + 6 + 6 + 6 + **5**์ธ 46์ด ๋จ(์—ฐ์†๋˜์ง€ ์•Š๊ฒŒ **์ค‘๊ฐ„์— 5๋ฅผ ๋„ฃ๊ณ ** ๊ทธ ๋‹ค์Œ ๋‹ค์‹œ 6์œผ๋กœ 3๋ฒˆ ๋ฐ˜๋ณต) + +* ๋‹จ, `์„œ๋กœ ๋‹ค๋ฅธ ์ธ๋ฑ์Šค`์— ํ•ด๋‹นํ•˜๋Š” ์ˆ˜๊ฐ€ **๊ฐ™์€ ์ˆ˜** ์ผ ๊ฒฝ์šฐ์—๋Š”, **์„œ๋กœ ๋‹ค๋ฅธ ๊ฒƒ์œผ๋กœ ๊ฐ„์ฃผ**ํ•œ๋‹ค. + +> ์ˆœ์„œ๋Œ€๋กœ 3, 4, 3, 4, 3์œผ๋กœ ์ด๋ฃจ์–ด์ง„ ๋ฐฐ์—ด์‹œ, M์ด 7์ด๊ณ , K๊ฐ€ 2๋ผ๊ณ  ๊ฐ€์ • + +ํฐ ์ˆ˜์˜ ๋ฒ•์น™์— ๋”ฐ๋ผ, 4+4(์ธ๋ฑ์Šค1์ธ 4)+4+4(์ธ๋ฑ์Šค3์ธ 4)+4+4(์ธ๋ฑ์Šค 1์ธ 4) + 4 = 28 + +#### ๐Ÿ“š **์‹ค์ „๋ฌธ์ œ** + +*** + +์ฐธ๊ณ ) `\leq` ๊ฐ€ $\leq$ + +โ“ ์ž…๋ ฅ์กฐ๊ฑด + +* ์ฒซ์งธ ์ค„ N($2\leq N \leq 1000)$, M$(1\leq M \leq 10,000)$, K$(1\leq K \leq 10,000)$์˜ ์ž์—ฐ์ˆ˜๊ฐ€ ์ฃผ์–ด์ง€๋ฉฐ, ๊ฐ ์ž์—ฐ์ˆ˜๋Š” ๊ณต๋ฐฑ์œผ๋กœ ๊ตฌ๋ถ„ +* ๋‘˜์งธ ์ค„์— N๊ฐœ์˜ ์ž์—ฐ์ˆ˜๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ๊ฐ ์ž์—ฐ์ˆ˜๋Š” ๊ณต๋ฐฑ์œผ๋กœ ๊ตฌ๋ถ„, ๋‹จ, ๊ฐ๊ฐ์˜ ์ž์—ฐ์ˆ˜๋Š” 1 ์ด์ƒ 10,000 ์ดํ•˜์˜ ์ˆ˜๋กœ ์ฃผ์–ด์ง„๋‹ค +* ์ž…๋ ฅ์œผ๋กœ ์ฃผ์–ด์ง€๋Š” K๋Š” ํ•ญ์ƒ M๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™๋‹ค + +โ“ ์ถœ๋ ฅ์กฐ๊ฑด + +* ์ฒซ์งธ ์ค„์— ๋™๋นˆ์ด์˜ ํฐ ์ˆ˜์˜ ๋ฒ•์น™์— ๋”ฐ๋ผ ๋”ํ•ด์ง„ ๋‹ต์„ ์ถœ๋ ฅ + +๐Ÿ‘Œ ๋ฌธ์ œํ•ด๊ฒฐ + +* ์ผ๋‹จ, ์ž…๋ ฅ๊ฐ’ ์ค‘์—์„œ ๊ฐ€์žฅ ํฐ ์ˆ˜์™€ ๋‘๋ฒˆ์งธ๋กœ ํฐ ์ˆ˜๋งŒ ์ €์žฅํ•˜๋ฉด ๋จ +* ์—ฐ์†์œผ๋กœ ๋”ํ•  ์ˆ˜ ์žˆ๋Š” ํšŸ์ˆ˜๋Š” **์ตœ๋Œ€ K๋ฒˆ**์ด๋ฏ€๋กœ โ€˜๊ฐ€์žฅ ํฐ ์ˆ˜๋ฅผ K๋ฒˆ ๋”ํ•˜๊ณ , ๋‘ ๋ฒˆ์งธ๋กœ ํฐ ์ˆ˜๋ฅผ ํ•œ ๋ฒˆ ๋”ํ•˜๋Š” ์—ฐ์‚ฐโ€™ ๋ฐ˜๋ณต +* ๋‹จ์ˆœํ•˜๊ฒŒ ํ‘ธ๋Š” ์˜ˆ์‹œ + +> ์ฐธ๊ณ  ) **ํŒŒ์ด์ฌ ๋ฌธ๋ฒ•** + +1. map - ๋ฆฌ์ŠคํŠธ์˜ ์š”์†Œ๋ฅผ ์ง€์ •๋œ ํ•จ์ˆ˜๋กœ ์ฒ˜๋ฆฌํ•ด์ฃผ๋Š” ํ•จ์ˆ˜ - ํ˜•ํƒœ : **map(ํ•จ์ˆ˜, ๋ฆฌ์ŠคํŠธ)** +2. list - ํ˜•ํƒœ : **list(๋ฆฌ์ŠคํŠธ)** +3. split ํ•จ์ˆ˜ - ์ž…๋ ฅ๊ฐ’์„ ๋‘ ๊ฐœ ์ด์ƒ์œผ๋กœ ๊ตฌ๋ถ„ - ๊ฐ๊ฐ์˜ ๊ฐ’์„ ๋ฆฌ์ŠคํŠธ๋กœ ๋‚˜๋ˆ ์คŒ - `๊ณต๋ฐฑ`์„ ์•Œ์•„์„œ ๊ตฌ๋ถ„ํ•ด์คŒ + +```python +# N, M, K๋ฅผ ๊ณต๋ฐฑ์œผ๋กœ ๊ตฌ๋ถ„ํ•˜์—ฌ ์ž…๋ ฅ๋ฐ›๊ธฐ +n, m, k = map(int, input().split()) +# N๊ฐœ์˜ ์ˆ˜๋ฅผ ๊ณต๋ฐฑ์œผ๋กœ ๊ตฌ๋ถ„ํ•˜์—ฌ ์ž…๋ ฅ๋ฐ›๊ธฐ +data = list(map(int, input().split())) + +data.sort() # ์ž…๋ ฅ๋ฐ›์€ ์ˆ˜๋“ค ์ •๋ ฌ +first = data[n-1] # ๊ฐ€์žฅ ํฐ ์ˆ˜ +second = data[n-2] # ๋‘ ๋ฒˆ์งธ๋กœ ํฐ ์ˆ˜ + +result = 0 + +while True: + for i in range(k): # ๊ฐ€์žฅ ํฐ ์ˆ˜๋ฅผ K๋ฒˆ ๋”ํ•˜๊ธฐ + if m == 0 # m์ด 0์ด๋ผ๋ฉด ๋ฐ˜๋ณต๋ฌธ ํƒˆ์ถœ + break + result+ = first + m = -1 # ๋”ํ•  ๋•Œ๋งˆ๋‹ค 1์”ฉ ๋นผ๊ธฐ + if m == 0 # m์ด 0์ด๋ผ๋ฉด ๋ฐ˜๋ณต๋ฌธ ํƒˆ์ถœ + break + result+ = second # ๋‘ ๋ฒˆ์งธ๋กœ ํฐ ์ˆ˜ **ํ•œ ๋ฒˆ** ๋”ํ•˜๊ธฐ + m = -1 # ๋”ํ•  ๋•Œ๋งˆ๋‹ค 1์”ฉ ๋นผ๊ธฐ + + print(result) +``` + +#### ๐Ÿ“š ์‹ฌํ™”๋ฌธ์ œ + +*** + +๊ฐ€์ •) M์˜ ํฌ๊ธฐ๊ฐ€ 100์–ต ์ด์ƒ โ‡’ ์œ„์™€ ๊ฐ™์ด ํ’€ ์‹œ **์‹œ๊ฐ„ ์ดˆ๊ณผ ํŒ์ •** + +๐Ÿ‘Œ ๋ฌธ์ œํ•ด๊ฒฐ + +* ์ด์ฒ˜๋Ÿผ, ๊ฐ€์žฅ ๋จผ์ € `๋ฐ˜๋ณต๋˜๋Š” ์ˆ˜์—ด`์— ๋Œ€ํ•ด์„œ ํŒŒ์•… + * ์•„์ด๋””์–ด : ๋งŒ์•ฝ N์ด 5์ด๊ณ  ์ž…๋ ฅ ๊ฐ’์„ 2, 4, 5, 4, 6์„ ๋ฐ›์•˜๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๋ฉด, + * ์—ฌ๊ธฐ์„œ ๊ฐ€์žฅ ํฐ ์ˆ˜๋Š” 6์ด๊ณ , ๋‘ ๋ฒˆ์งธ๋กœ ํฐ ์ˆ˜๋Š” 5๋‹ค. + * ์ด๋•Œ, M = 8, K =3์ด๋ฉด (6+6+6+5)+(6+6+6+5) = 46์ด ๋œ๋‹ค. +* **์ˆ˜์—ด์˜ ๊ธธ์ด** : `K+1`(๋‘๋ฒˆ์งธ ํฐ ์ˆ˜ 1๊ฐœ ๋”ํ•จ), **๋ฐ˜๋ณต๋˜๋Š” ํšŸ์ˆ˜** : `M/(K+1)` + * ์ด๋•Œ, K+1์ด ๋‚˜๋ˆ„์–ด ๋–จ์–ด์ง€์ง€ ์•Š๋Š” ๊ฒฝ์šฐ๋„ ๊ณ ๋ ค + + : M์„ (K+1)๋กœ ๋‚˜๋ˆˆ ๋‚˜๋จธ์ง€๋งŒํผ ๊ฐ€์žฅ ํฐ ์ˆ˜๊ฐ€ ์ถ”๊ฐ€๋กœ ๋”ํ•ด์ง + * ๊ฐ€์žฅ ํฐ ์ˆ˜๊ฐ€ ๋”ํ•ด์ง€๋Š” ํšŸ์ˆ˜ : ์ด๋ฅผ ์ด์šฉํ•˜๋ฉด ๊ฐ€์žฅ ํฐ ์ˆ˜๊ฐ€ ๋”ํ•ด์ง€๋Š” ํšŸ์ˆ˜๋ฅผ ๊ตฌํ•œ ๋‹ค์Œ, ์ด๋ฅผ ์ด์šฉํ•ด **๋‘ ๋ฒˆ์งธ๋กœ ํฐ ์ˆ˜๊ฐ€ ๋”ํ•ด์ง€๋Š” ํšŸ์ˆ˜**๋„ ๊ตฌํ•  ์ˆ˜ ์žˆ๋‹ค. + + : **int((M / (K+1) ) \* K + M % (K+1) )** + + ```python + # N, M, K๋ฅผ ๊ณต๋ฐฑ์œผ๋กœ ๊ตฌ๋ถ„ํ•˜์—ฌ ์ž…๋ ฅ๋ฐ›๊ธฐ + n, m, k = map(int, input().split()) + # N๊ฐœ์˜ ์ˆ˜๋ฅผ ๊ณต๋ฐฑ์œผ๋กœ ๊ตฌ๋ถ„ํ•˜์—ฌ ์ž…๋ ฅ๋ฐ›๊ธฐ + data = list(map(int, input().split())) + + data.sort() # ์ž…๋ ฅ๋ฐ›์€ ์ˆ˜๋“ค ์ •๋ ฌ + first = data[n-1] # ๊ฐ€์žฅ ํฐ ์ˆ˜ + second = data[n-2] # ๋‘ ๋ฒˆ์งธ๋กœ ํฐ ์ˆ˜ + + # ๊ฐ€์žฅ ํฐ ์ˆ˜๊ฐ€ ๋”ํ•ด์ง€๋Š” **ํšŸ์ˆ˜** ๊ณ„์‚ฐ + count = int((m/(k+1))*k) + count+ = m%(k+1) + + result = 0 + result+ =(count) * first # ๊ฐ€์žฅ ํฐ ์ˆ˜ ๋”ํ•˜๊ธฐ + result+ = (m-count)*second # ๋‘ ๋ฒˆ์งธ๋กœ ํฐ ์ˆ˜ ๋”ํ•˜๊ธฐ + + print(result) + ``` + +### ๐Ÿ“š ์‹ค์ „๋ฌธ์ œ) ์ˆซ์ž ์นด๋“œ ๊ฒŒ์ž„ + +*** + +์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ˆซ์ž ์นด๋“œ ์ค‘์—์„œ ๊ฐ€์žฅ ๋†’์€ ์ˆซ์ž๊ฐ€ ์“ฐ์ธ ์นด๋“œ ํ•œ ์žฅ์„ ๋ฝ‘๋Š” ๊ฒŒ์ž„ + +๋‹จ, ๊ฒŒ์ž„์˜ ๋ฃฐ์„ ์ง€ํ‚ค๋ฉฐ, ์นด๋“œ๋ฅผ ๋ฝ‘์•„์•ผ ํ•จ + +* ๊ฒŒ์ž„์˜ ๋ฃฐ + 1. ์ˆซ์ž๊ฐ€ ์“ฐ์ธ ์นด๋“œ๋“ค์ด N $\*$ M ํ˜•ํƒœ๋กœ ๋†“์—ฌ ์žˆ๋‹ค. ์ด ๋•Œ, N์€ ํ–‰์˜ ๊ฐœ์ˆ˜๋ฅผ ์˜๋ฏธ, M์€ ์—ด์˜ ๊ฐœ์ˆ˜๋ฅผ ์˜๋ฏธ + 2. ๋จผ์ € ๋ฝ‘๊ณ ์ž ํ•˜๋Š” ์นด๋“œ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ๋Š” ํ–‰์„ ์„ ํƒ + 3. ๊ทธ ๋‹ค์Œ ์„ ํƒ๋œ ํ–‰์— ํฌํ•จ๋œ ์นด๋“œ๋“ค ์ค‘ ๊ฐ€์žฅ ์ˆซ์ž๊ฐ€ ๋‚ฎ์€ ์นด๋“œ๋ฅผ ๋ฝ‘์•„์•ผ ํ•œ๋‹ค. + 4. ๋”ฐ๋ผ์„œ ์ฒ˜์Œ์— ์นด๋“œ๋ฅผ ๊ณจ๋ผ๋‚ผ ํ–‰์„ ์„ ํƒ์‹œ, ์ดํ›„์— ํ•ด๋‹น ํ–‰์—์„œ **๊ฐ€์žฅ ์ˆซ์ž๊ฐ€ ๋‚ฎ์€ ์นด๋“œ๋ฅผ ๋ฝ‘์„ ๊ฒƒ์„ ๊ณ ๋ คํ•˜์—ฌ ์ตœ์ข…์ ์œผ๋กœ ๊ฐ€์žฅ ๋†’์€ ์ˆซ์ž์˜ ์นด๋“œ๋ฅผ ๋ฝ‘์„ ์ˆ˜ ์žˆ๋„๋ก ์ „๋žต** + +โ“ ์ž…๋ ฅ์กฐ๊ฑด + +* **์ฒซ์งธ ์ค„**์— ์ˆซ์ž ์นด๋“œ๋“ค์ด ๋†“์ธ ํ–‰์˜ ๊ฐœ์ˆ˜ N๊ณผ ์—ด์˜ ๊ฐœ์ˆ˜ M์ด **๊ณต๋ฐฑ์„ ๊ธฐ์ค€**์œผ๋กœ ํ•˜์—ฌ ๊ฐ๊ฐ ์ž์—ฐ์ˆ˜๋กœ ์ฃผ์–ด์ง„๋‹ค.$(1\leq N, M\leq100)$ +* **๋‘˜์งธ ์ค„๋ถ€ํ„ฐ** N๊ฐœ์˜ ์ค„์— ๊ฑธ์ณ, ๊ฐ ์นด๋“œ์— ์ ํžŒ ์ˆซ์ž๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ๊ฐ ์ˆซ์ž๋Š” 1์ด์ƒ 10,000์ดํ•˜์˜ ์ž์—ฐ์ˆ˜์ด๋‹ค. + +โ“ ์ถœ๋ ฅ์กฐ๊ฑด + +์ฒซ์งธ ์ค„์— ๊ฒŒ์ž„์˜ ๋ฃฐ์— ๋งž๊ฒŒ ์„ ํƒํ•œ ์นด๋“œ์— ์ ํžŒ ์ˆซ์ž ์ถœ๋ ฅ + +๐Ÿ‘Œ ๋ฌธ์ œํ•ด๊ฒฐ + +* ์•„์ด๋””์–ด : **๊ฐ ํ–‰๋งˆ๋‹ค ๊ฐ€์žฅ ์ž‘์€ ์ˆ˜๋ฅผ ์ฐพ์€ ๋’ค์— ๊ทธ ์ˆ˜ ์ค‘์—์„œ ๊ฐ€์žฅ ํฐ ์ˆ˜** +* **min() ํ•จ์ˆ˜**๋ฅผ ์ด์šฉํ•˜๋Š” ๋‹ต์•ˆ ์˜ˆ์‹œ + +```python +# N๊ณผ M์„ ๊ณต๋ฐฑ์œผ๋กœ ๊ตฌ๋ถ„ํ•˜์—ฌ ์ž…๋ ฅ๋ฐ›๊ธฐ +n, m = map(int, input().split()) + +result = 0 +# ํ•œ ์ค„์”ฉ ์ž…๋ ฅ๋ฐ›์•„ ํ™•์ธ +for i in range(n): + data = list(map(int, input().split())) + # ํ˜„์žฌ ์ค„์—์„œ '๊ฐ€์žฅ ์ž‘์€ ์ˆ˜' ์ฐพ๊ธฐ + min_value = min(data) + # '๊ฐ€์žฅ ์ž‘์€ ์ˆ˜'๋“ค ์ค‘์—์„œ ๊ฐ€์žฅ ํฐ ์ˆ˜ ์ฐพ๊ธฐ + result = max(result, min_value) + +print(result) +``` + +* **2์ค‘ ๋ฐ˜๋ณต๋ฌธ ๊ตฌ์กฐ**๋ฅผ ์ด์šฉํ•˜์—ฌ ๋‹ต์•ˆ ์˜ˆ์‹œ + +```python +# N๊ณผ M์„ ๊ณต๋ฐฑ์œผ๋กœ ๊ตฌ๋ถ„ํ•˜์—ฌ ์ž…๋ ฅ๋ฐ›๊ธฐ +n, m = map(int, input().split()) + +result = 0 + +for i in range(n): + data = list(map(int, input().split())) + # ํ˜„์žฌ ์ค„์—์„œ '๊ฐ€์žฅ ์ž‘์€ ์ˆ˜' ์ฐพ๊ธฐ + min_value = 10001 + for a in data: + min_value = min(min_value, a) + # ๊ฐ€์žฅ ์ ์€ ์ˆ˜ ๋“ค ์ค‘ ๊ฐ€์žฅ ํฐ ์ˆ˜ ์ฐพ๊ธฐ + result = max(result, min_value) + +print(result) +``` + +### ๐Ÿ“š ์‹ค์ „๋ฌธ์ œ) 1์ด ๋  ๋•Œ๊นŒ์ง€ + +*** + +์–ด๋– ํ•œ ์ˆ˜ N์ด 1์ด ๋  ๋•Œ๊นŒ์ง€ ๋‹ค์Œ์˜ ๋‘ ๊ณผ์ • ์ค‘ ํ•˜๋‚˜๋ฅผ ๋ฐ˜๋ณต์ ์œผ๋กœ ์ˆ˜ํ–‰ํ•˜๋ ค๊ณ  ํ•œ๋‹ค.๋‹จ, ๋‘ ๋ฒˆ์งธ ์—ฐ์‚ฐ์€ N์ด K๋กœ ๋‚˜๋ˆ„์–ด๋–จ์–ด์งˆ ๋•Œ๋งŒ ์„ ํƒ ๊ฐ€๋Šฅ + +1. N์—์„œ 1์„ ๋บ€๋‹ค. +2. N์„ K๋กœ ๋‚˜๋ˆˆ๋‹ค. + +โ“ ์ž…๋ ฅ์กฐ๊ฑด + +* ์ฒซ์งธ ์ค„์— N($2\leq N \leq 100,000)$๊ณผ K($2 \leq K \leq 100,000)$๊ฐ€ ๊ณต๋ฐฑ์œผ๋กœ ๊ตฌ๋ถ„๋˜๋ฉฐ ๊ฐ๊ฐ ์ž์—ฐ์ˆ˜๋กœ ์ฃผ์–ด์ง„๋‹ค. ์ด๋•Œ ์ž…๋ ฅ์œผ๋กœ ์ฃผ์–ด์ง€๋Š” N์€ ํ•ญ์ƒ K๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™๋‹ค. + +โ“ ์ถœ๋ ฅ์กฐ๊ฑด + +* ์ฒซ์งธ ์ค„์ด N์ด 1์ด ๋  ๋•Œ๊นŒ์ง€ 1๋ฒˆ ํ˜น์€ 2๋ฒˆ์˜ ๊ณผ์ •์„ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•˜๋Š” ํšŸ์ˆ˜์˜ ์ตœ์†Ÿ๊ฐ’์„ ๊ตฌํ•ด๋ผ + +๐Ÿ‘Œ ๋ฌธ์ œํ•ด๊ฒฐ + +์•„์ด๋””์–ด : ์ตœ๋Œ€ํ•œ ๋งŽ์ด ๋‚˜๋ˆ„๊ธฐ + +* ์˜ˆ : N = 25, K =3 ์ผ ๊ฒฝ์šฐ + * 1๋‹จ๊ณ„ : N์—์„œ 1๋นผ๊ธฐ\*\*(๋‚˜๋ˆ„์–ด ๋–จ์–ด์ง€์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— 2๋ฒˆ ๋ถˆ๊ฐ€) โ‡’\*\* 24 + * 2๋‹จ๊ณ„ : N์—์„œ K๋กœ ๋‚˜๋ˆ„๊ธฐ โ‡’ 8 + * 3๋‹จ๊ณ„ : N์—์„œ 1๋นผ๊ธฐ โ‡’ 7 + * 4๋‹จ๊ณ„ : N์—์„œ 1๋นผ๊ธฐ โ‡’ 6 + * 5๋‹จ๊ณ„ : N์—์„œ K๋‚˜๋ˆ„๊ธฐ โ‡’ 2 + * 6๋‹จ๊ณ„ : N์—์„œ 1๋นผ๊ธฐ โ‡’ 1 +* ๋‹จ์ˆœํ•˜๊ฒŒ ํ’€๊ธฐ + +```python +n,k = map(int, input().split()) +result = 0 + +# N์ด K์ด์ƒ์ด๋ผ๋ฉด ๊ณ„์† ๋‚˜๋ˆ„๊ธฐ +while n>=k: + # N์ด K๋กœ ๋‚˜๋ˆ„์–ด ๋–จ์–ด์ง€์ง€ ์•Š๋Š”๋‹ค๋ฉด N์—์„œ 1๋นผ๊ธฐ +while n % k !=0 : + n-= 1 + result+ =1 +# k๋กœ ๋‚˜๋ˆ„๊ธฐ +n//=k +result+=1 + +print(result) +``` + +* ์ˆ˜๊ฐ€ ์ปค์งˆ ๋•Œ + +```python +n,k = map(int, input().split()) +result = 0 + +while True: + #(N==K๋กœ ๋‚˜๋ˆ„์–ด๋–จ์–ด์ง€๋Š” ์ˆ˜)๊ฐ€ ๋  ๋•Œ๊นŒ์ง€ 1์”ฉ ๋นผ๊ธฐ + target = (n//k) * k + result+ = (n-target) + n = target + # N์ด K๋ณด๋‹ค ์ž‘์„๋•Œ ๋ฐ˜๋ณต๋ฌธ ํƒˆ์ถœ + if n ๋™์  ๊ณ„ํš๋ฒ•์œผ๋กœ ๋ฌธ์ œ๋ฅผ ํ’€ ๋•Œ๋Š”, ์šฐ์„  ์ž‘์€ ๋ฌธ์ œ๋ถ€ํ„ฐ ํ•ด๊ฒฐํ•ด๋‚˜๊ฐ€๋ณด๋Š” ๊ฒƒ์ด ์ข‹๋‹ค. ์ž‘์€ ๋ฌธ์ œ๋“ค์„ ํ’€์–ด๋‚˜๊ฐ€๋‹ค๋ณด๋ฉด ์ด์ „์— ๊ตฌํ•ด๋‘” ๋” ์ž‘์€ ๋ฌธ์ œ๋“ค์ด ํ™œ์šฉ๋˜๋Š” ๊ฒƒ์„ ํ™•์ธํ•˜๊ฒŒ ๋œ๋‹ค. ์ด์— ๋Œ€ํ•œ ๊ทœ์น™์„ ์ฐพ์•˜์„ ๋•Œ **์ ํ™”์‹**์„ ๋„์ถœํ•ด๋‚ด์–ด ๋™์  ๊ณ„ํš๋ฒ•์„ ์ ์šฉ์‹œํ‚ค์ž + +### ๐ŸŒ ๊ฐœ๋… + +> ๋ณต์žกํ•œ ๋ฌธ์ œ๋ฅผ ๊ฐ„๋‹จํ•œ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋ฌธ์ œ๋กœ ๋‚˜๋ˆ„์–ด ํ‘ธ๋Š” ๋ฐฉ๋ฒ•, ์ž‘์€ ํ•˜์œ„ ๋ฌธ์ œ์˜ ํ•ด๋ฅผ ์ €์žฅํ•˜๊ณ  ํ™œ์šฉํ•˜์—ฌ ์ค‘๋ณต ๊ณ„์‚ฐ์„ ํ”ผํ•˜๋ฉฐ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐ ์ค‘์  + +* ์ž…๋ ฅ ํฌ๊ธฐ๊ฐ€ ์ž‘์€ ๋ถ€๋ถ„ ๋ฌธ์ œ๋“ค์„ ํ•ด๊ฒฐํ•œ ํ›„, ํ•ด๋‹น ๋ถ€๋ถ„ ๋ฌธ์ œ์˜ ํ•ด๋ฅผ ํ™œ์šฉํ•ด์„œ, ๋ณด๋‹ค ํฐ ํฌ๊ธฐ์˜ ๋ถ€๋ถ„ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐ, ์ตœ์ข…์ ์œผ๋กœ ์ „์ฒด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜ +* **์ƒํ–ฅ์‹ ์ ‘๊ทผ๋ฒ•**์œผ๋กœ, ๊ฐ€์žฅ ์ตœํ•˜์œ„ ํ•ด๋‹ต์„ ๊ตฌํ•œ ํ›„, ์ด๋ฅผ ์ €์žฅํ•˜๊ณ , ํ•ด๋‹น ๊ฒฐ๊ณผ๊ฐ’์„ ์ด์šฉํ•ด์„œ ์ƒ์œ„ ๋ฌธ์ œ๋ฅผ ํ’€์–ด๊ฐ€๋Š” ๋ฐฉ์‹ +* ํ•œ ๊ฐ€์ง€ ๋ฌธ์ œ์— ๋Œ€ํ•ด์„œ, ๋‹จ ํ•œ๋ฒˆ๋งŒ ํ’€๋„๋ก ๋งŒ๋“ค์–ด์ฃผ๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜ + * ์ฆ‰, **๋˜‘๊ฐ™์€ ์—ฐ์‚ฐ์„ ๋ฐ˜๋ณตํ•˜์ง€ ์•Š๋„๋ก ๋งŒ๋“ค์–ด์ค€๋‹ค.** ์‹คํ–‰์‹œ๊ฐ„์„ ์ค„์ด๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋˜๋Š” ์ˆ˜ํ•™์  ์ ‘๊ทผ ๋ฐฉ์‹์˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜ +* `Memoization` ๊ธฐ๋ฒ•์„ ์‚ฌ์šฉํ•จ + +### ๐ŸŒ ์ ‘๊ทผ ๋ฐฉ์‹ + +* ์ปค๋‹ค๋ž€ ๋ฌธ์ œ๋ฅผ ์‰ฝ๊ฒŒ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์ž‘๊ฒŒ ์ชผ๊ฐœ์„œ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•์ธ ๋ถ„ํ•  ์ •๋ณต๊ณผ ๋งค์šฐ ์œ ์‚ฌํ•˜์ง€๋งŒ **๊ฐ„๋‹จํ•œ ๋ฌธ์ œ๋กœ ๋งŒ๋“œ๋Š” ๊ณผ์ •์—์„œ ์ค‘๋ณต ์—ฌ๋ถ€์— ๋Œ€ํ•œ ์ฐจ์ด์ **์ด ์กด์žฌํ•œ๋‹ค. +* ์ฆ‰, ๋™์  ๊ณ„ํš๋ฒ•์€ ๊ฐ„๋‹จํ•œ ์ž‘์€ ๋ฌธ์ œ๋“ค ์†์—์„œ `๊ณ„์† ๋ฐ˜๋ณต๋˜๋Š” ์—ฐ์‚ฐ`์„ ํ™œ์šฉํ•˜์—ฌ ๋น ๋ฅด๊ฒŒ ํ’€ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด ํ•ต์‹ฌ + +### ๐ŸŒ ์ข…๋ฅ˜ + +1. ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜์—ด +2. ๋ฐฐ๋‚ญ ๋ฌธ์ œ +3. ์ตœ์žฅ ๊ณตํ†ต ๋ถ€๋ถ„ ์ˆ˜์—ด +4. ์ตœ๋‹จ ๊ฒฝ๋กœ ๋ฌธ์ œ +5. ์ตœ์†Œ ๊ฑฐ์Šค๋ฆ„๋ˆ ๋ฌธ์ œ +6. ๋งคํŠธ๋ฆญ์Šค ์ฒด์ธ ๊ณฑ์…ˆ +7. ํ–‰๋ ฌ ๊ฒฝ๋กœ ๋ฌธ์ œ + +### ๐ŸŒ Memoization ๊ธฐ๋ฒ•์ด๋ž€? + +* Memoization (๋ฉ”๋ชจ์ด์ œ์ด์…˜) ์ด๋ž€: ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰ ์‹œ ์ด์ „์— ๊ณ„์‚ฐํ•œ ๊ฐ’์„ ์ €์žฅํ•˜์—ฌ, ๋‹ค์‹œ ๊ณ„์‚ฐํ•˜์ง€ ์•Š๋„๋ก ํ•˜์—ฌ ์ „์ฒด ์‹คํ–‰ ์†๋„๋ฅผ ๋น ๋ฅด๊ฒŒ ํ•˜๋Š” ๊ธฐ์ˆ  +* ๋ฌธ์ œ๋ฅผ ์ž˜๊ฒŒ ์ชผ๊ฐค ๋•Œ, ๋ถ€๋ถ„ ๋ฌธ์ œ๋Š” ์ค‘๋ณต๋˜์–ด, ์žฌํ™œ์šฉ๋จ + + * ์˜ˆ: ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜์—ด 1 1 2 3 5 8 โ€ฆ. 1 1๋กœ ์‹œ์ž‘ํ•˜๊ณ  ๋’ค์˜ ๋ชจ๋“  ํ•ญ์€ ๋ฐ”๋กœ ์•ž ๋‘ํ•ญ์˜ ํ•ฉ์˜ ์ˆ˜์—ด + + > ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜์—ด์—์„œ ์žฌ๊ท€๋ฅผ ํ™œ์šฉํ•˜์—ฌ ํ’€ ๊ฒฝ์šฐ, ๊ฐ™์€ ์—ฐ์‚ฐ์„ ๊ณ„์† ๋ฐ˜๋ณตํ•จ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค. + > + > ์ด๋•Œ, `๋ฉ”๋ชจ์ด์ œ์ด์…˜`์„ ํ†ตํ•ด **๊ฐ™์€ ์ž‘์—…์„ ๋˜ํ’€์ด ํ•˜์ง€ ์•Š๋„๋ก ๊ตฌํ˜„ํ•˜๋ฉด ํšจ์œจ์ **์ด๋‹ค. + + * return f(n) = f(n-1) + f(n-2) +* ์ฝ”๋“œ\[์žฌ๊ท€] : ์‹œ๊ฐ„ ๋ณต์žก๋„ `O(2^n)` + +```java +import java.util.Scanner; + +public class Fibonacci { + private static int fibonacci(int n){ + if(n <= 1) return n; + return fibonacci(n - 1) + fibonacci(n - 2); + } + + public static void main(String[] args){ + Scanner in = new Scanner(System.in); + int n = in.nextInt(); + + int result = fibonacci(n); + System.out.printf("ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜์—ด์˜ %d๋ฒˆ์งธ ๊ฐ’ : %d", n, result); + } +} +``` + +* ์ฝ”๋“œ 2\[๋™์  ๋ฐฉ๋ฒ• ์ด์šฉ] : ์‹œ๊ฐ„ ๋ณต์žก๋„ `O(N)` + +```java +public class Dynamic { + + public int dynamicFunc(int data){ + Integer[] cache = new Integer[data+1]; + cache[0] = 0; + cache[1] = 1; + for(int index=2; index ๋ถ„ํ•  ์ •๋ณต์€ ์ฃผ๋กœ ํฐ ๋ฌธ์ œ๋ฅผ ์ž‘์€ ํ•˜์œ„ ๋ฌธ์ œ๋กœ ๋‚˜๋ˆ„์–ด ํ•ด๊ฒฐํ•˜๋Š” ๋ฐ ์ค‘์  + +* ๋ฌธ์ œ๋ฅผ ๋‚˜๋ˆŒ ์ˆ˜ ์—†์„ ๋•Œ๊นŒ์ง€ ๋‚˜๋ˆ„์–ด์„œ ๊ฐ๊ฐ์„ ํ’€๋ฉด์„œ ๋‹ค์‹œ ํ•ฉ๋ณ‘ํ•˜์—ฌ ๋ฌธ์ œ์˜ ๋‹ต์„ ์–ป๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜ +* ํ•˜์–‘์‹ ์ ‘๊ทผ๋ฒ•์œผ๋กœ, ์ƒ์œ„์˜ ํ•ด๋‹ต์„ ๊ตฌํ•˜๊ธฐ ์œ„ํ•ด, ์•„๋ž˜๋กœ ๋‚ด๋ ค๊ฐ€๋ฉด์„œ ํ•˜์œ„์˜ ํ•ด๋‹ต์„ ๊ตฌํ•˜๋Š” ๋ฐฉ์‹ + * ์ผ๋ฐ˜์ ์œผ๋กœ ์žฌ๊ท€ํ•จ์ˆ˜๋กœ ๊ตฌํ˜„ +* ๋ฌธ์ œ๋ฅผ ์ž˜๊ฒŒ ์ชผ๊ฐค ๋•Œ, ๋ถ€๋ถ„ ๋ฌธ์ œ๋Š” ์„œ๋กœ ์ค‘๋ณต๋˜์ง€ ์•Š์Œ + * ์˜ˆ: ๋ณ‘ํ•ฉ ์ •๋ ฌ, ํ€ต ์ •๋ ฌ ๋“ฑ + +### ๐ŸŒ Merge Sort\[๋ณ‘ํ•ฉ ์ •๋ ฌ] + +๊ด€๋ จ ๋™์ž‘ ๋ฐฉ๋ฒ•์€ [๋…ธ์…˜](https://incredible-gem-98e.notion.site/8-22-248bec70cb274c17b0eee9199ab7011e?pvs=4)์—.. + +#### ๊ฐœ๋… + +1. ๋ถ„ํ•  ์ •๋ณต ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ํ•˜๋‚˜๋กœ, **ํฐ ๋ฌธ์ œ๋ฅผ ์ž‘์€ ๋ฌธ์ œ๋กœ ๋ถ„ํ• ํ•˜์—ฌ ํ•ด๊ฒฐ**ํ•˜๋Š” ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜์—ฌ ์ •๋ ฌ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜ +2. ๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ์— ๊ฑฐ์˜ `O(n log n)`์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๋ฅผ ๊ฐ€์ง€๋ฏ€๋กœ ๋Œ€๊ทœ๋ชจ ๋ฐ์ดํ„ฐ ์ •๋ ฌ์— ๋งŽ์ด ์‚ฌ์šฉ +3. ํ•ฉ๋ณ‘ ์ •๋ ฌ์€ ๋ฐ์ดํ„ฐ ์–‘์ด ๋งŽ์•„์„œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ๊ด€๋ฆฌํ•ด์•ผ ํ•  ๋•Œ๋‚˜ ์•ˆ์ •์ ์ธ ์ •๋ ฌ์„ ์›ํ•  ๋•Œ ์ฃผ๋กœ ์„ ํƒ๋˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜ + +#### ๋™์ž‘๋ฐฉ๋ฒ• + +> ์•„๋ž˜์˜ ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•˜๋ฉด์„œ ์ž‘์€ ๋ฐฐ์—ด๋ถ€ํ„ฐ ์ •๋ ฌํ•˜์—ฌ ํ•ฉ์ณ๋‚˜๊ฐ€๋ฉด, ์ „์ฒด ๋ฐฐ์—ด์ด ์ •๋ ฌ๋œ ์ƒํƒœ๊ฐ€ ๋œ๋‹ค. `ํ•ฉ๋ณ‘ ์ •๋ ฌ`์€ **์žฌ๊ท€์ ์ธ ๊ตฌ์กฐ**๊ฐ€ ๋˜๋ฏ€๋กœ, ์•„๋ž˜ ์„ธ ๋‹จ๊ณ„๋ฅผ ์žฌ๊ท€์ ์œผ๋กœ ์ˆ˜ํ–‰ํ•ด ๋‚ด๋‚˜๊ฐ€๋ฉฐ ์ •๋ ฌ์ด ์™„์„ฑ๋œ๋‹ค. + +1. **๋ถ„ํ• (Divide)** : ์ •๋ ฌํ•  ๋ฐฐ์—ด์„ ๋ฐ˜์œผ๋กœ ๋‚˜๋ˆˆ๋‹ค. ์ด๋ฅผ ๊ณ„์†ํ•ด์„œ ์ž‘์€ ๋ฐฐ์—ด์ด ๋  ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณต์ ์œผ๋กœ ๋ถ„ํ•  +2. **์ •๋ณต(Conquer)** : ๋ถ„ํ• ๋œ ์ž‘์€ ๋ฐฐ์—ด์„ ์ •๋ ฌ, ๋งŒ์•ฝ **๋ฐฐ์—ด์˜ ๊ธธ์ด๊ฐ€ 1์ด๊ฑฐ๋‚˜ 0์ด๋ผ๋ฉด ์ด๋ฏธ ์ •๋ ฌ๋œ ์ƒํƒœ** +3. **ํ•ฉ๋ณ‘(Merge)** : ์ •๋ ฌ๋œ ์ž‘์€ ๋ฐฐ์—ด๋“ค์„ ํ•˜๋‚˜๋กœ ํ•ฉ๋ณ‘ํ•œ๋‹ค. ์ด๋•Œ, ๋‘ ๋ฐฐ์—ด์„ ๋น„๊ตํ•˜์—ฌ ์ •๋ ฌ๋œ ์ˆœ์„œ๋Œ€๋กœ ํ•ฉ์น˜๋Š”๋ฐ, ์ž‘์€ ๊ฐ’๋ถ€ํ„ฐ ์ˆœ์„œ๋Œ€๋กœ ๋ณ‘ํ•ฉ + +```java +import java.util.ArrayList; + +public class MergeSort { + + private ArrayList mergeFunc(ArrayList leftArr, ArrayList rightArr) { + + ArrayList mergedList = new ArrayList(); + int leftPoint = 0; + int rightPoint = 0; + + // CASE 1 : left/right๊ฐ€ ๋‘˜ ๋‹ค ์žˆ์„ ๋•Œ + while(leftArr.size() > leftPoint && rightArr.size() > rightPoint){ + //์ž๋ฆฌ๋ฐ”๊ฟˆ์ด ์ผ์–ด๋‚˜๋Š” ์กฐ๊ฑด + if(leftArr.get(rightPoint) > rightArr.get(rightPoint)){ + mergedList.add(rightArr.get(rightPoint)); + rightPoint += 1; + } + else{ + mergedList.add(leftArr.get(leftPoint)); + leftPoint += 1; + } + } + + // CASE 2 : right ๋ฐ์ดํ„ฐ๊ฐ€ ์—†์„ ๋•Œ + while(leftArr.size() > leftPoint){ + mergedList.add(leftArr.get(leftPoint)); + leftPoint += 1; + } + + // CASE 3 : left ๋ฐ์ดํ„ฐ๊ฐ€ ์—†์„ ๋•Œ + while(rightArr.size() > rightPoint){ + mergedList.add(rightArr.get(rightPoint)); + rightPoint += 1; + } + + return mergedList; + } + + public ArrayList margeSplitFunc(ArrayList arrayList) { + if(arrayList.size() <= 1){return arrayList;} + // ์ค‘๊ฐ„๊ฐ’์„ ๊ธฐ์ค€์œผ๋กœ ๋ณ‘ํ•ฉํ•˜๋Š” ๋Š๋‚Œ + int medium = arrayList.size()/2; + + ArrayList leftArr = new ArrayList(); + ArrayList rightArr = new ArrayList(); + + leftArr = new ArrayList(arrayList.subList(0, medium)); + rightArr = new ArrayList(arrayList.subList(medium, arrayList.size())); + + // ์ •๋ ฌํ•˜๋Š” ํ•จ์ˆ˜ ๋งŒ๋“ค๊ธฐ + return this.mergeFunc(leftArr, rightArr); + } + + public static void main(String[] args){ + ArrayList testData = new ArrayList<>(); + + for(int index=0; index<100; index++){ + testData.add((int)(Math.random()*100)); + } + + System.out.println(testData); + MergeSort mergeSort = new MergeSort(); + System.out.println(mergeSort.margeSplitFunc(testData)); + } +} +``` + +#### ํ•ฉ๋ณ‘ ์ •๋ ฌ ํŠน์ง• + +1. ์•ˆ์ •์ ์ธ ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜ : ๋™์ผํ•œ ๊ฐ’์˜ ์ƒ๋Œ€์ ์ธ ์ˆœ์„œ๊ฐ€ ๋ณ€ํ•˜์ง€ ์•Š๋Š”๋‹ค. +2. ์™ธ๋ถ€ ์ •๋ ฌ์— ์ ํ•ฉ : ๋ฐ์ดํ„ฐ์˜ ์–‘์ด ๋งŽ์•„์„œ ๋ฉ”๋ชจ๋ฆฌ์— ๋ชจ๋‘ ์˜ฌ๋ฆฌ๊ธฐ ์–ด๋ ค์šด ๊ฒฝ์šฐ์—๋„ ์‚ฌ์šฉ ๊ฐ€๋Šฅ +3. ์ถ”๊ฐ€์ ์ธ ๋ฉ”๋ชจ๋ฆฌ ํ•„์š” : ๋ฐฐ์—ด์„ ๋ถ„ํ• ํ•˜๊ณ  ํ•ฉ์น˜๋Š” ๊ณผ์ •์—์„œ ์ž„์‹œ ๋ฐฐ์—ด์ด ํ•„์š”ํ•˜๋ฏ€๋กœ, ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ถ”๊ฐ€์ ์œผ๋กœ ์‚ฌ์šฉํ•œ๋‹ค. +4. ํ‰๊ท  ๋ฐ ์ตœ์•… ์‹œ๊ฐ„ ๋ณต์žก๋„: `O(n log n)` +5. ์ตœ์„ ์˜ ๊ฒฝ์šฐ ์‹œ๊ฐ„ ๋ณต์žก๋„: `O(n log n)` +6. ์ •๋ ฌ๋œ ์ƒํƒœ์—์„œ๋„ ํšจ์œจ์ : ์ด๋ฏธ ์ •๋ ฌ๋œ ๋ฐฐ์—ด์„ ํ•ฉ์น˜๋Š” ๊ฒฝ์šฐ์—๋„ ํšจ์œจ์ ์œผ๋กœ ์ž‘๋™ + +### ๐ŸŒ ํ€ต ์ •๋ ฌ(QuickSort) + +#### ํ€ต์ •๋ ฌ์˜ ์ •์˜ + +* ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉ๋˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜ +* ์ •๋ ฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ๊ทผ๊ฐ„์ด ๋˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜ + +#### ๊ธฐ์ค€ ๋ฐ์ดํ„ฐ ์„ค์ •, **๊ทธ ๊ธฐ์ค€๋ณด๋‹ค ํฐ ๋ฐ์ดํ„ฐ์™€ ์ž‘์€ ๋ฐ์ดํ„ฐ์˜ ์œ„์น˜๋ฅผ ๋ฐ”๊พธ๋ฉด** ? + +* ๊ธฐ์ค€์„ ์„ค์ •ํ•œ ๋‹ค์Œ ํฐ ์ˆ˜์™€ ์ž‘์€์ˆ˜๋ฅผ ๊ตํ™˜ํ•œ ํ›„ ๋ฆฌ์ŠคํŠธ๋ฅผ ๋ฐ˜์œผ๋กœ ๋‚˜๋ˆ„๋Š” ๋ฐฉ์‹ +* `ํ”ผ๋ฒ—`์ด ์‚ฌ์šฉ + + โ‡’ ํฐ ์ˆซ์ž์™€ ์ž‘์€ ์ˆซ์ž ๊ตํ™˜์‹œ, ๊ตํ™˜ํ•˜๊ธฐ ์œ„ํ•œ **๊ธฐ์ค€** + + โ‡’ ํ€ธ ์ •๋ ฌ์„ **์ˆ˜ํ–‰ํ•˜๊ธฐ ์ „** ํ”ผ๋ฒ—์„ ์–ด๋–ป๊ฒŒ ์„ค์ •ํ• ๊ฒƒ์ธ์ง€ ๋ฏธ๋ฆฌ ๋ช…์‹œ ํ•ด์•ผ ํ•จ +* ํ”ผ๋ฒ—๊ณผ ๋ฐ์ดํ„ฐ๋ฅผ ๋น„๊ตํ•˜๋Š” ๋น„๊ต ์—ฐ์‚ฐ ํšŸ์ˆ˜๊ฐ€ ์ฆ๊ฐ€ํ•˜๋ฏ€๋กœ, ์‹œ๊ฐ„ ๋ฉด์—์„œ๋Š” ์กฐ๊ธˆ ๋น„ํšจ์œจ์  but, ์ง๊ด€์ ์ด๊ณ  ๊ธฐ์–ตํ•˜๊ธฐ ์‰ฝ๋‹ค + +#### ํ˜ธ์–ด ๋ถ„ํ•  ๋ฐฉ์‹ + +* ์žฌ๊ท€ ํ•จ์ˆ˜ ๋™์ž‘์›๋ฆฌ๊ฐ€ ๊ฐ™์Œ + + โ‡’ **์ข…๋ฃŒ์กฐ๊ฑด**์ด ์žˆ์–ด์•ผ ํ•จ : ํ˜„์žฌ ๋ฆฌ์ŠคํŠธ์˜ ๋ฐ์ดํ„ฐ ๊ฐœ์ˆ˜๊ฐ€ 1๊ฐœ์ธ ๊ฒฝ์šฐ + +1. ๋ฆฌ์ŠคํŠธ์—์„œ **์ฒซ ๋ฒˆ์งธ ๋ฐ์ดํ„ฐ**๋ฅผ ํ”ผ๋ฒ—์œผ๋กœ ์ •ํ•œ๋‹ค +2. ํ”ผ๋ฒ— ์„ค์ •ํ•œ ๋’ค์—๋Š” `์™ผ์ชฝ`์—์„œ๋ถ€ํ„ฐ ํ”ผ๋ฒ—๋ณด๋‹ค **ํฐ** ๋ฐ์ดํ„ฐ๋ฅผ ์ฐพ๊ณ , `์˜ค๋ฅธ์ชฝ`์—์„œ๋ถ€ํ„ฐ ํ”ผ๋ฒ—๋ณด๋‹ค **์ž‘์€** ๋ฐ์ดํ„ฐ๋ฅผ ์ฐพ์Œ +3. ํฐ ๋ฐ์ดํ„ฐ์™€ ์ž‘์€ ๋ฐ์ดํ„ฐ์˜ **์œ„์น˜๋ฅผ ์„œ๋กœ ๊ตํ™˜** + +#### ํ€ต ์ •๋ ฌ ๋ฐฉ์‹(ํ˜ธ์–ด ๋ถ„ํ•  ๋ฐฉ์‹ ์˜ˆ์‹œ) + +โœจ **1ํŒŒํŠธ** + +1. ๋ฆฌ์ŠคํŠธ์˜ ์ฒซ ๋ฒˆ์งธ ๋ฐ์ดํ„ฐ๋ฅผ ํ”ผ๋ฒ—์œผ๋กœ ์„ค์ •ํ•˜๋ฏ€๋กœ ํ”ผ๋ฒ—์€ โ€˜5โ€™ ์ดํ›„์— `์™ผ์ชฝ`์—์„œ๋ถ€ํ„ฐ โ€˜5โ€™๋ณด๋‹ค **ํฐ** ๋ฐ์ดํ„ฐ๋ฅผ ์„ ํƒํ•˜๋ฏ€๋กœ โ€˜7โ€™์ด ์„ ํƒ, `์˜ค๋ฅธ์ชฝ`์—์„œ๋ถ€ํ„ฐ โ€˜5โ€™๋ณด๋‹ค **์ž‘์€** ๋ฐ์ดํ„ฐ๊ฐ€ ์„ ํƒ๋˜๋ฏ€๋กœ โ€˜4โ€™๊ฐ€ ์„ ํƒ โ‡’ ๋‘ ๋ฐ์ดํ„ฐ์˜ ์œ„์น˜ ์„œ๋กœ ๋ณ€๊ฒฝ + +![](https://velog.velcdn.com/images/prettylee620/post/c6188d6b-7b23-4eb4-84da-ed98f23dbc0f/image.png) + +2. ๊ทธ๋‹ค์Œ ๋‹ค์‹œ ํ”ผ๋ฒ—๋ณด๋‹ค ํฐ ๋ฐ์ดํ„ฐ์™€ ์ž‘์€ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ๊ฐ ์ฐพ๊ณ , ๊ทธ ๋’ค ๋‘ ๊ฐ’์˜ ์œ„์น˜๋ฅผ ์„œ๋กœ ๋ณ€๊ฒฝ + +![](https://velog.velcdn.com/images/prettylee620/post/9460cdf3-6db0-4f43-8534-9d5521e54c05/image.png) + +3. ๊ทธ ๋‹ค์Œ ๋‹ค์‹œ ํ”ผ๋ฒ—๋ณด๋‹ค ํฐ ๋ฐ์ดํ„ฐ์™€ ์ž‘์€ ๋ฐ์ดํ„ฐ๋ฅผ ์ฐพ๋Š”๋‹ค. + 1. ๋‹จ, ํ˜„์žฌ ์™ผ์ชฝ์—์„œ๋ถ€ํ„ฐ ์ฐพ๋Š” ๊ฐ’๊ณผ ์˜ค๋ฅธ์ชฝ์—์„œ๋ถ€ํ„ฐ ์ฐพ๋Š” ๊ฐ’์˜ **์œ„์น˜๊ฐ€ ์„œ๋กœ ์—‡๊ฐˆ๋ฆด ์ˆ˜**๋„ ์žˆ๋‹ค. + 2. ์ด๋ ‡๊ฒŒ ๋‘ ๊ฐ’์ด ์—‡๊ฐˆ๋ฆฐ ๊ฒฝ์šฐ์—๋Š” โ€˜์ž‘์€ ๋ฐ์ดํ„ฐโ€™์™€ โ€˜ํ”ผ๋ฒ—โ€™์˜ ์œ„์น˜๋ฅผ ์„œ๋กœ ๋ณ€๊ฒฝํ•œ๋‹ค. + 3. ์ž‘์€ ๋ฐ์ดํ„ฐ์˜ โ€˜1โ€™๊ณผ ํ”ผ๋ฒ—์ธ โ€˜5โ€™์˜ ์œ„์น˜๋ฅผ ์„œ๋กœ ๋ณ€๊ฒฝํ•˜์—ฌ `๋ถ„ํ•  ์ˆ˜ํ–‰` + +![](https://velog.velcdn.com/images/prettylee620/post/f253a992-05ae-47a9-9ef7-15b66c592f55/image.png) + +4. `๋ถ„ํ•  ์™„๋ฃŒ` : ์ด์™€ ๊ฐ™์ด ํ”ผ๋ฒ—์ด ์ด๋™ํ•œ ์ƒํƒœ์—์„œ ์™ผ์ชฝ ๋ฆฌ์ŠคํŠธ์™€ ์˜ค๋ฅธ์ชฝ ๋ฆฌ์ŠคํŠธ๋ฅผ ์‚ดํŽด๋ณด์ž + 1. ์ด์ œ โ€˜5โ€™ ์™ผ์ชฝ์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋Š” ๋ชจ๋‘ โ€˜5๋ณด๋‹ค ์ž‘๊ณ , ์˜ค๋ฅธ์ชฝ์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋Š” โ€˜5โ€™๋ณด๋‹ค ํฌ๋‹ค๋Š” ํŠน์ง• + 2. `๋ถ„ํ• ` ํ˜น์€ `ํŒŒํ‹ฐ์…˜` : ํ”ผ๋ฒ—์˜ **์™ผ์ชฝ**์—๋Š” **ํ”ผ๋ฒ—๋ณด๋‹ค ์ž‘์€ ๋ฐ์ดํ„ฐ**๊ฐ€ ์œ„์น˜, ํ”ผ๋ฒ—์˜ **์˜ค๋ฅธ์ชฝ**์—๋Š” **ํ”ผ๋ฒ—๋ณด๋‹ค ์ž‘์€ ๋ฐ์ดํ„ฐ**๊ฐ€ ์œ„์น˜ + +![](https://velog.velcdn.com/images/prettylee620/post/18a068bd-ea22-4fba-9bbd-60456859b915/image.png) + +โœจ 2**ํŒŒํŠธ** + +์™ผ์ชฝ ๋ฆฌ์ŠคํŠธ์—์„œ ๋‹ค์Œ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด ์ •๋ ฌ ์ง„ํ–‰, ๊ตฌ์ฒด์ ์ธ ์ •๋ ฌ ๊ณผ์ •์€ ๋™์ผ + +![](https://velog.velcdn.com/images/prettylee620/post/e72f5399-4447-4641-a155-b63857c949d7/image.png) + +โœจ 3**ํŒŒํŠธ** + +์˜ค๋ฅธ์ชฝ ๋ฆฌ์ŠคํŠธ์—์„œ ๋‹ค์Œ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด ์ •๋ ฌ ์ง„ํ–‰, ๊ตฌ์ฒด์ ์ธ ์ •๋ ฌ ๊ณผ์ •์€ ๋™์ผ + +![](https://velog.velcdn.com/images/prettylee620/post/a0d80f58-ae56-4345-aacc-f5906b461675/image.png) + +#### ํ€ต ์ •๋ ฌ์˜ ์‹œ๊ฐ„๋ณต์žก๋„ + +* ํ‰๊ท ์  ์‹œ๊ฐ„๋ณต์žก๋„ : $`O(NlogN)`$ +* ์ตœ์•…์˜ ๊ฒฝ์šฐ ์‹œ๊ฐ„๋ณต์žก๋„ : $`O(N^2)`$ + + โ‡’ ๋ฐ์ดํ„ฐ๊ฐ€ ์ด๋ฏธ ์ •๋ ฌ๋˜์–ด ์žˆ๋Š” ๊ฒฝ์šฐ ๋งค์šฐ ๋Š๋ฆฌ๊ฒŒ ์ž‘๋™ +* ์•ž์— ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜๋“ค์˜ ๋น„ํ•ด ์—„์ฒญ ๋น ๋ฅธ ํŽธ +* ๋ถ„ํ• ์ด ์ด๋ฃจ์–ด์ง€๋Š” ํšŸ์ˆ˜๊ฐ€ ๊ธฐํ•˜๊ธ‰์ˆ˜์ ์œผ๋กœ ๊ฐ์†Œ + +```java + +package Danymic; + +import java.util.Scanner; + +public class QuickSortEx { + + public static void main(String[] args){ + Scanner in = new Scanner(System.in); + int arr[] = {3, 33, 38, 5, 2, 7, 15, 36, 26, 27, 2}; + + System.out.println("์ •๋ ฌ ์ „ :"+arr); + + System.out.println("์ •๋ ฌ ํ›„"); + quickSort(arr, 0, arr.length-1); + } + + public static void quickSort(int[] array, int left, int right) { + if(left >= right) return; + + //๋ถ„ํ•  + int pivot = partition(array, left, right); + + // ์ž๊ธฐ ์ž์‹ ์„ ์žฌ๊ท€์ ์œผ๋กœ ๋ถ€๋ฆ„ + quickSort(array, left, pivot); + quickSort(array, pivot+1, right); + } + + private static int partition(int[] array, int left, int right) { + int pivot = array[left]; + int i = left, j= right; + while (i < j){ + // ํ”ผ๋ฒ—์„ ๊ธฐ์ค€์œผ๋กœ j๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์ฐพ์Œ + while(pivot < array[j]){ + j--; + } + while(i= array[i]){ + i++; + } + swap(array, i, j); + } + array[left] = array[i]; + array[i] = pivot; + + return i; + + } + + private static void swap(int[] array, int i, int j) { + int tmp = array[i]; + array[i] = array[j]; + array[j] = tmp; + } +} +``` + +#### arrayList๋ฅผ ์ด์šฉํ•œ ๋™์ž‘์›๋ฆฌ + +```java +import java.util.ArrayList; +import java.util.Arrays; + +public class QuickSort { + public ArrayList sort(ArrayList dataList) { + if (dataList.size() <= 1) { + return dataList; + } + int pivot = dataList.get(0); + + ArrayList leftArr = new ArrayList(); + ArrayList rightArr = new ArrayList(); + + for (int index = 1; index < dataList.size(); index++) { + if (dataList.get(index) > pivot) { + rightArr.add(dataList.get(index)); + } else { + leftArr.add(dataList.get(index)); + } + } + + + ArrayList mergedArr = new ArrayList(); + mergedArr.addAll(sort(leftArr)); + mergedArr.addAll(Arrays.asList(pivot)); + mergedArr.addAll(sort(rightArr)); + + return mergedArr; + } + + public static void main(String[] args) { + ArrayList testData = new ArrayList(); + + for (int index = 0; index < 100; index++) { + testData.add((int)(Math.random() * 100)); + } + QuickSort qSort = new QuickSort(); + System.out.println(qSort.sort(testData)); + } +} +``` + +### ๐ŸŒ ์ข…๋ฅ˜ + +1. ํ•ฉ๋ณ‘ ์ •๋ ฌ +2. ํ€ต ์ •๋ ฌ +3. ๊ฑฐ๋“ญ์ œ๊ณฑ ์•Œ๊ณ ๋ฆฌ์ฆ˜ +4. ๋ณ‘๋ ฌ ํ–‰๋ ฌ ๊ณฑ์…ˆ +5. ์ตœ๊ทผ์ ‘ ์  ์Œ ์ฐพ๊ธฐ +6. ์ตœ๋Œ€ ๋ถ€๋ถ„๋ฐฐ์—ด ๋ฌธ์ œ + +### ๐ŸŒ๊ณตํ†ต์ ๊ณผ ์ฐจ์ด์  + +* ๊ณตํ†ต์  + * ๋ฌธ์ œ๋ฅผ ์ž˜๊ฒŒ ์ชผ๊ฐœ์„œ, ๊ฐ€์žฅ ์ž‘์€ ๋‹จ์œ„๋กœ ๋ถ„ํ•  +* ์ฐจ์ด์  + * ๋™์  ๊ณ„ํš๋ฒ• + * ๋ถ€๋ถ„ ๋ฌธ์ œ๋Š” ์ค‘๋ณต๋˜์–ด, ์ƒ์œ„ ๋ฌธ์ œ ํ•ด๊ฒฐ ์‹œ ์žฌํ™œ์šฉ๋จ + * `Memoization` ๊ธฐ๋ฒ• ์‚ฌ์šฉ (๋ถ€๋ถ„ ๋ฌธ์ œ์˜ ํ•ด๋‹ต์„ ์ €์žฅํ•ด์„œ ์žฌํ™œ์šฉํ•˜๋Š” ์ตœ์ ํ™” ๊ธฐ๋ฒ•์œผ๋กœ ์‚ฌ์šฉ) + * ๋ถ„ํ•  ์ •๋ณต + * ๋ถ€๋ถ„ ๋ฌธ์ œ๋Š” ์„œ๋กœ ์ค‘๋ณต๋˜์ง€ ์•Š์Œ + * `Memoization` ๊ธฐ๋ฒ• ์‚ฌ์šฉ ์•ˆํ•จ diff --git "a/developLog/algorithm-datastructure/algorithm/_ \353\262\204\353\270\224 \354\240\225\353\240\254_ \354\202\275\354\236\205 \354\240\225\353\240\254_ \354\204\240\355\203\235 \354\240\225\353\240\254_.md" "b/developLog/algorithm-datastructure/algorithm/_ \353\262\204\353\270\224 \354\240\225\353\240\254_ \354\202\275\354\236\205 \354\240\225\353\240\254_ \354\204\240\355\203\235 \354\240\225\353\240\254_.md" new file mode 100644 index 0000000..9bc8e5e --- /dev/null +++ "b/developLog/algorithm-datastructure/algorithm/_ \353\262\204\353\270\224 \354\240\225\353\240\254_ \354\202\275\354\236\205 \354\240\225\353\240\254_ \354\204\240\355\203\235 \354\240\225\353\240\254_.md" @@ -0,0 +1,734 @@ +# ๋ฒ„๋ธ” ์ •๋ ฌ, ์‚ฝ์ž… ์ •๋ ฌ, ์„ ํƒ ์ •๋ ฌ + +## ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜ + +> ์ฐธ๊ณ  ๋™์ž‘ ๋ฐฉ์‹ ๋งํฌ : https://visualgo.net/en/sorting + +### ๐Ÿ‡ ์ •์˜ + +* ์–ด๋–ค ๋ฐ์ดํ„ฐ๋“ค์ด ์ฃผ์–ด์กŒ์„๋•Œ, ์ด๋ฅผ ์ •ํ•ด์ง„ ์ˆœ์„œ๋Œ€๋กœ ๋‚˜์—ดํ•˜๋Š” ๊ฒƒ +* ๋ญ”๊ฐ€๋ฅผ `์ •๋ ฌ`ํ•˜๋Š” ๊ฒƒ + * A๋ถ€ํ„ฐ Z๊นŒ์ง€ ๊ธฐ์ค€์œผ๋กœ ์ •๋ ฌ + * ํฐ ์ˆ˜์—์„œ ์ž‘์€ ์ˆ˜ ๊ธฐ์ค€์œผ๋กœ ์ •๋ ฌ +* ๋ฐ์ดํ„ฐ๋ฅผ ํŠน์ •ํ•œ ๊ธฐ์ค€์— ๋”ฐ๋ผ์„œ ์ˆœ์„œ๋Œ€๋กœ ๋‚˜์—ดํ•˜๋Š” ๊ฒƒ +* ํ”„๋กœ๊ทธ๋žจ ์ž‘์„ฑ ์‹œ ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉ +* `์ด์ง„๊ฒ€์ƒ‰`์ฒ˜๋Ÿผ ๋น ๋ฅธ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์‚ฌ์šฉ์„ ์œ„ํ•ด์„œ +* ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ `ํšจ์œจ์„ฑ`์„ ์‰ฝ๊ฒŒ ์ดํ•ด ๊ฐ€๋Šฅ +* ๋‚ด๋ฆผ์ฐจ์ˆœ์€ ์˜ค๋ฆ„์ฐจ์ˆœ์€ **reverse**๋ฅผ ์ด์šฉํ•ด์„œ ๋’ค์ง‘์œผ๋ฉด ๋จ + +### ๐Ÿ‡ ๋ฒ„๋ธ” ์ •๋ ฌ + +* ๋‘ ์ธ์ ‘ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๋น„๊ตํ•ด์„œ , **์•ž์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ๋’ค์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ณด๋‹ค ํฌ๋ฉด, ์ž๋ฆฌ๋ฅผ ๋ฐ”๊พธ๋Š”** ์•Œ๊ณ ๋ฆฌ์ฆ˜ +* ์ž์ฃผ ์‚ฌ์šฉ๋˜์ง€๋Š” ์•Š์Œ ๋” ๋น ๋ฅธ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ๋งŽ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. + +#### ์ •๋ ฌ๋ฐฉ๋ฒ• + +* ๋ฐฐ์—ด์˜ 2๊ฐœ์˜ ์•„์ดํ…œ์„ `์„ ํƒ` +* `๋น„๊ต(comparisons)` : **์™ผ์ชฝ**์ด ์˜ค๋ฅธ์ชฝ๋ณด๋‹ค **ํฌ๋ฉด** `๊ตํ™˜(swap)` +* ์˜ค๋ฅธ์ชฝ์œผ๋กœ `์ด๋™`ํ•ด์„œ, ํ•ด๋‹น ํ”„๋กœ์„ธ์Šค `๋ฐ˜๋ณต` , ์˜ˆ๋ฅผ ๋“ค์–ด 5์™€ 6์„ ๋น„๊ต + + โ‡’ ์™ผ์ชฝ์ด ์˜ค๋ฅธ์ชฝ๋ณด๋‹ค ์ž‘์œผ๋ฏ€๋กœ ๊ตํ™˜ํ•˜์ง€ ์•Š์Œ + +1. ๊ทธ ๋‹ค์Œ์€ 6๊ณผ 3์„ ๋น„๊ต โ‡’ ๊ตํ™˜ **๊ฒฐ๊ณผ** : 2 5 3 6 1 4 +2. 6๊ณผ 1์„ ๋น„๊ต โ‡’ ๊ตํ™˜ **๊ฒฐ๊ณผ** : 2 5 3 1 6 4 +3. 6๊ณผ 4๋ฅผ ๋น„๊ต โ‡’ ๊ตํ™˜ **๊ฒฐ๊ณผ** : 2 5 3 1 4 6 โ‡’ ์ฒซ๋ฒˆ์งธ ์‚ฌ์ดํด ๋ ๋‘๋ฒˆ์งธ๋„ ์™ผ์ชฝ์—์„œ ์ฒ˜์Œ๋ถ€ํ„ฐ ๋ฐ”๊ฟˆ + +![](https://velog.velcdn.com/images/prettylee620/post/24c2746c-813b-40b2-ab58-faffd2907fc7/image.png) + +#### โœจ ๋ฒ„๋ธ”์ •๋ ฌ์˜ ์‹œ๊ฐ„๋ณต์žก๋„ + +1. **comparisons(๋น„๊ต)** : `N-1` + + N(item์˜ ๋งˆ์ง€๋ง‰ ๋ฒˆํ˜ธ), ๋ฐฐ์—ด์˜ N-1์˜ ์•„์ดํ…œ์„ ๋น„๊ต + + EX. ์•„์ดํ…œ์ด 6๊ฐœ๋ฉด, 5๋ฒˆ ๋น„๊ต +2. **swap(๊ตํ™˜)**: ์ตœ์•…์˜ ๊ฒฝ์šฐ, ๋ชจ๋“  ์•„์ดํ…œ์„ ๊ตํ™˜ํ•ด์•ผ ํ•จ +3. ๊ทธ๋ž˜ํ”„ + +![](https://velog.velcdn.com/images/prettylee620/post/87f518fc-a9d7-465a-a676-504ae5eddbca/image.png) + +#### โœจ ๋ฒ„๋ธ”์ •๋ ฌ ์˜ˆ์ œ 1 + +> ๋ฒ„๋ธ” ์ •๋ ฌ์€ ๊ฐ„๋‹จํ•˜์ง€๋งŒ ํฐ ๋ฆฌ์ŠคํŠธ์— ๋Œ€ํ•ด์„œ๋Š” ๋น„ํšจ์œจ์ ์ผ ์ˆ˜ ์žˆ์œผ๋‹ˆ ์ฐธ๊ณ  + +```java +import java.util.ArrayList; +import java.util.Collections; + +public class BubbleSorting { + + public static void main(String[] args){ + ArrayList dataList = new ArrayList(); + dataList.add(9); + dataList.add(2); + dataList.add(4); + dataList.add(8); + dataList.add(1); + + // 9, 7, 1 + for(int index=0; index < dataList.size()-1; index++) { + boolean swap = false; + // 7, 9, 1 + for(int index2 = 0; index2 < dataList.size() - 1 - index; index2++) { + if (dataList.get(index2) > dataList.get(index2 + 1)) { + Collections.swap(dataList, index2, index2 + 1); + // 1, 7, 9 + swap = true; + } + } + } + System.out.println(dataList); + } +} +``` + +#### โœจ ๋ฒ„๋ธ”์ •๋ ฌ ์˜ˆ์ œ 2 + +* ๊ธฐ์กด ์ฝ”๋“œ์˜ ํด๋ž˜์Šค๋ฅผ ์ด์šฉํ•ด์„œ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ• + +1. BubbleSorting2 + +```java +package sorting; + +import java.util.ArrayList; +import java.util.Collections; + +public class BubbleSorting2 +{ + + public void sort(ArrayList arr) { + ArrayList dataList = new ArrayList(); + dataList = arr; + + for (int index = 0; index < dataList.size() - 1; index++) + { + boolean swap = false; + + for (int index2 = 0; index2 < dataList.size() - 1 - index; index2++) + { + if (dataList.get(index2) > dataList.get(index2 + 1)) + { + Collections.swap(dataList, index2, index2 + 1); + swap = true; + } + } + System.out.println(dataList); + } + } + +} +``` + +2. BublleSorting + +```java +import java.util.ArrayList; + +public class BubbleSorting +{ + + public static void main(String[] args) + { + ArrayList testList = new ArrayList(); + + for (int index = 0; index < 10; index++) + { + testList.add((int)(Math.random() * 100)); + + } + System.out.println(testList); + + BubbleSorting2 bSort = new BubbleSorting2(); + + bSort.sort(testList); + + } + +} +``` + +#### โœจ ๋ฒ„๋ธ”์ •๋ ฌ ์˜ˆ์ œ 3 + +1. ๋ฌธ์ œ๋งํฌ : https://jungol.co.kr/problem/1157?cursor=eyJwcm9ibGVtc2V0IjoiNiIsImZpZWxkIjo2LCJpZHgiOjJ9 +2. ์ฝ”๋“œ + +```java +import java.util.ArrayList; +import java.util.Collections; +import java.util.Scanner; + +public class BubbleSorting3 { + + private ArrayList sort(ArrayList dataList){ + + for(int index=0; index < dataList.size()-1; index++) { + boolean swap = false; + + for(int index2 = 0; index2 < dataList.size() - 1 - index; index2++) { + + if (dataList.get(index2) > dataList.get(index2 + 1)) { + + Collections.swap(dataList, index2, index2 + 1); + swap = true; + } + + } + + for(int i = 0; i dataList = new ArrayList(); + + int n = in.nextInt(); + + for(int i=0; i arr[j+1]) + { + int temp = arr[j]; + arr[j]=arr[j+1]; + arr[j+1]=temp; + + } + + } + + for (int j = 0; j < numlength; j++) { + System.out.printf("%d ", arr[j]); + } + System.out.println(); + + + + + } + + } + +} +``` + +4. ํŒŒ์ด์ฌ ์ฝ”๋“œ + +```java +def bubble_sort(arr): + end = len(arr) - 1 + while end > 0: + last_swap = 0 + for i in range(end): + if arr[i] > arr[i + 1]: + arr[i], arr[i + 1] = arr[i + 1], arr[i] + last_swap = i + end = last_swap + print(arr) +``` + +### ๐Ÿ‡ ์„ ํƒ์ •๋ ฌ + +* ์ „์ฒด **๋ชจ๋“  ์•„์ดํ…œ ์Šค์บ”** +* ๋ฐ์ดํ„ฐ๊ฐ€ ๋ฌด์ž‘์œ„๋กœ ์—ฌ๋Ÿฌ ๊ฐœ ์žˆ์„ ๋•Œ, ์ด์ค‘์—์„œ **๊ฐ€์žฅ ์ž‘์€ ๋ฐ์ดํ„ฐ๋ฅผ ์„ ํƒ**ํ•ด ๋งจ ์•ž์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ์™€ ๋ฐ”๊พธ๊ณ , ๊ทธ๋‹ค์Œ ์ž‘์€ ๋ฐ์ดํ„ฐ๋ฅผ ์„ ํƒํ•ด ์•ž์—์„œ ๋‘ ๋ฒˆ์งธ ๋ฐ์ดํ„ฐ์™€ ๋ฐ”๊พธ๋Š” ๊ณผ์ • **๋ฐ˜๋ณต** +* ํ˜„์žฌ **๋ฐ์ดํ„ฐ์˜ ์ƒํƒœ ์ƒ๊ด€์—†์ด** ๋ฌด์กฐ๊ฑด ๋ชจ๋“  ์›์†Œ๋ฅผ ๋น„๊ตํ•˜๊ณ  ์œ„์น˜๋ฅผ ๋ฐ”๊ฟˆ +* `๊ฐ€์žฅ ์ž‘์€ ๊ฒƒ`์„ ์„ ํƒ, `๋น„ํšจ์œจ์ ` + +#### โœจ ์ •๋ ฌ๋ฐฉ๋ฒ• + +1. ์ „์ฒด ์•„์ดํ…œ ์ค‘ **๊ฐ€์žฅ ์ž‘์€ ์•„์ดํ…œ์˜ ์œ„์น˜**๋ฅผ ๊ทธ ์œ„์น˜๋ฅผ ๋ณ€์ˆ˜์— ์ €์žฅ +2. 5๋ถ€ํ„ฐ ์ฐจ๋ก€๋กœ ํ™•์ธ ํ›„ ๋งจ ์ฒ˜์Œ์€ **5๊ฐ€ ์ œ์ผ ์ž‘๊ธฐ๋•Œ๋ฌธ์—** ์œ„์น˜๋ฅผ ๋ณ€์ˆ˜์— ์ €์žฅ +3. ๊ทธ ๋‹ค์Œ 2์—์„œ **2๊ฐ€ 5๋ณด๋‹ค ์ž‘์œผ๋‹ˆ๊นŒ** ์œ„์น˜๋ฅผ ๋ณ€์ˆ˜์— ์ €์žฅ +4. ์ญ‰ ํ•˜๋‹ค๊ฐ€ **1์ด 2๋ณด๋‹ค ์ž‘์œผ๋‹ˆ๊นŒ** ์œ„์น˜๋ฅผ ๋ณ€์ˆ˜ ์ €์žฅ +5. 4๊นŒ์ง€ ํ™•์ธ ํ›„ ์‚ฌ์ดํด์„ ๋๋ƒ„ + + โ‡’ **๋ฐฐ์—ด์—์„œ ๊ฐ€์žฅ ์ž‘์€ ์ˆซ์ž**๊ฐ€ ์–ด๋””์— ์žˆ๋Š”์ง€ ์•ˆ๋‹ค +6. ๊ทธ ๋‹ค์Œ `swaps(๋ฐ”๊พธ๊ธฐ)` : **๊ฐ€์žฅ ์ž‘์€ ์ˆซ์ž(์œ„์น˜**๋ฅผ ์•Œ์ง€!) ๊ทธ๊ฒƒ์„ **์ฒซ ๋ฒˆ์งธ ์•„์ดํ…œ๊ณผ** ๋ฐ”๊ฟˆ +7. ๊ทธ ๋‹ค์Œ ์‚ฌ์ดํด์„ ์ง„ํ–‰์‹œ 1๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜์ง€ ์•Š์Œ. **1์€** `์ •๋ ฌ`๋œ ์ˆซ์ž, **์ •๋ ฌ๋˜์ง€ ์•Š์€** ๋ถ€๋ถ„ ์ค‘์—์„œ ๊ฐ€์žฅ ์ž‘์€ ์ˆซ์ž๋ฅผ ์ฐพ์Œ +8. ์ด๊ฒƒ์„ ๋ฐ˜๋ณต + +![](https://velog.velcdn.com/images/prettylee620/post/d502821c-893b-44ff-99fb-2594dea9ca84/image.png) + +#### โœจ ์„ ํƒ์ •๋ ฌ ์˜ˆ์ œ1 + +```java +import java.util.ArrayList; +import java.util.Collections; + +public class SelectionSortingEx { + + private ArrayList sort(ArrayList dataList){ + int lowest; + for(int stand = 0; stand < dataList.size()-1; stand++){ + lowest = stand; + for(int index = stand+1; index < dataList.size(); index++){ + if(dataList.get(lowest) > dataList.get(index)) { + lowest = index; + } + } + Collections.swap(dataList, lowest, stand); + } + + return dataList; + } + + public static void main(String[] args){ + ArrayList testData = new ArrayList(); + + for(int i=0; i<10; i++){ + testData.add((int)(Math.random()*100)); + } + SelectionSortingEx selection = new SelectionSortingEx(); + System.out.println(selection.sort(testData)); + } +} +``` + +#### โœจ ์„ ํƒ์ •๋ ฌ ์˜ˆ์ œ 2 + +1. ์ •์˜ฌ ๋ฌธ์ œ : https://jungol.co.kr/problem/1146/submission?cursor=eyJwcm9ibGVtc2V0IjoiNiIsImZpZWxkIjo2LCJpZHgiOjB9 +2. ์ฝ”๋“œ + +```java +import java.util.ArrayList; +import java.util.Collections; +import java.util.Scanner; + +public class SelectionSortingEx2 { + + private ArrayList sort(ArrayList dataList){ + int lowest; + for(int stand = 0; stand < dataList.size()-1; stand++){ + lowest = stand; + for(int index = stand+1; index < dataList.size(); index++){ + if(dataList.get(lowest) > dataList.get(index)) { + lowest = index; + } + } + Collections.swap(dataList, lowest, stand); + for(int i = 0; i testData = new ArrayList(); + + int n = in.nextInt(); + + for(int i=0; i arr[j]) { + small = arr[j]; + pos = j; + } + } + int c = arr[i]; + arr[i] = arr[pos]; + arr[pos] = c; + + for (j = 0; j < n; j++) { + System.out.printf("%d ", arr[j]); + } + System.out.printf("\n"); + + } + } + +} + +``` + +4. ํŒŒ์ด์ฌ ์ฝ”๋“œ + +```java +def selection_sort(arr): + for i in range(len(arr) - 1): + min_idx = i + for j in range(i + 1, len(arr)): + if arr[j] < arr[min_idx]: + min_idx = j + arr[i], arr[min_idx] = arr[min_idx], arr[i] + print(arr) +``` + +### ๐Ÿ‡ ์‚ฝ์ž… ์ •๋ ฌ + +* **ํ•„์š”ํ•œ ์•„์ดํ…œ๋งŒ** ์Šค์บ” +* ์„ ํƒ์ •๋ ฌ๋ณด๋‹ค ๋น ๋ฆ„, ํšจ์œจ์  +* ๋ฐ์ดํ„ฐ๋ฅผ ํ•˜๋‚˜์”ฉ ํ™•์ธํ•˜๋ฉฐ, ๊ฐ ๋ฐ์ดํ„ฐ๋ฅผ ์ ์ ˆํ•œ ์œ„์น˜์— ์‚ฝ์ž… + +โ‡’ ํ•„์š”ํ•œ ๋•Œ๋งŒ ์œ„์น˜๋ฅผ ๋ฐ”๊พธ๋ฏ€๋กœ **๋ฐ์ดํ„ฐ๊ฐ€ ๊ฑฐ์˜ ์ •๋ ฌ๋˜์–ด ์žˆ์„ ๋•Œ** ํ›จ์”ฌ ํšจ์œจ์  + +* ํŠน์ •ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์ ์ ˆํ•œ ์œ„์น˜์— โ€˜์‚ฝ์ž…โ€™ํ•œ๋‹ค๋Š” ์˜๋ฏธ + + โ‡’ ํŠน์ •ํ•œ ๋ฐ์ดํ„ฐ๊ฐ€ ์ ์ ˆํ•œ ์œ„์น˜์— ๋“ค์–ด๊ฐ€๊ธฐ ์ด์ „์—, **๊ทธ ์•ž๊นŒ์ง€์˜ ๋ฐ์ดํ„ฐ๋Š” ์ด๋ฏธ `์ •๋ ฌ`๋˜์–ด ์žˆ๋‹ค**๊ณ  ๊ฐ€์ • + +#### ์ •๋ ฌ๋ฐฉ๋ฒ• + +1. ์ธ๋ฑ์Šค 1๋ถ€ํ„ฐ ์‹œ์ž‘์‹œ, **์™ผ์ชฝ์—** ์ˆซ์ž โ€˜2โ€™๋ณด๋‹ค ํฐ ์ˆซ์ž๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธ + + โ‡’ ๋‘ ๋ฒˆ์งธ ๋ฐ์ดํ„ฐ ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๋Š” ์ด์œ ๋Š” **์ฒซ ๋ฒˆ์งธ๋Š” ๊ทธ ์ž์ฒด๋กœ ์ •๋ ฌ๋˜์–ด ์žˆ๋‹ค**๊ณ  ํŒ๋‹จ + + ``` + Left > Right + ``` +2. 2์™€ 5 ์ž๋ฆฌ ๋ฐ”๊พธ๊ธฐ `swap` +3. 2๋ฒˆ์งธ ์‚ฌ์ดํด : **6์„ ์„ ํƒ**, ์™ผ์ชฝ์— ๋” ํฐ ์ˆซ์ž๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธ, ์˜ค๋ฅธ์ชฝ์ด ๋” ํฌ๊ธฐ ๋•Œ๋ฌธ์— ๊ณ„์† ์ง„ํ–‰ + + ``` + Left < Right + ``` +4. 3๋ฒˆ์งธ ์‚ฌ์ดํด : **3์„ ์„ ํƒ**, ์™ผ์ชฝ์— ๋” ํฐ ์ˆซ์ž๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธ, + + ``` + Left > Right + ``` +5. 6๊ณผ 3์„ `swap` +6. 3 ์™ผ์ชฝ์— ์žˆ๋Š” 5๋ฅผ ๋น„๊ต(comparisons) + + ``` + Left > Right + ``` +7. 5๊ณผ 3์„ `swap` +8. 3์— ์™ผ์ชฝ์— ์žˆ๋Š” 2๋Š” 3๋ณด๋‹ค ์ž‘๊ธฐ ๋•Œ๋ฌธ์— ์•ˆ๋ฐ”๊ฟˆ +9. ๋ฐ˜๋ณต + +> โ— ์‚ฝ์ž… ์ •๋ ฌ์€, ์ •๋ ฌ์ด ์ด๋ฃจ์–ด์ง„ ์›์†Œ๋Š” ํ•ญ์ƒ `์˜ค๋ฆ„์ฐจ์ˆœ`์„ ์œ ์ง€ํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ํŠน์ •ํ•œ ๋ฐ์ดํ„ฐ๊ฐ€ **์‚ฝ์ž…๋  ์œ„์น˜๋ฅผ ์„ ์ •ํ•  ๋•Œ**(์‚ฝ์ž…๋  ์œ„์น˜๋ฅผ ์ฐพ๊ธฐ ์œ„ํ•˜์—ฌ ์™ผ์ชฝ์œผ๋กœ ํ•œ ์นธ์”ฉ ์ด๋™ํ•  ๋•Œ) ์‚ฝ์ž…๋  ๋ฐ์ดํ„ฐ๋ณด๋‹ค ์ž‘์€ ๋ฐ์ดํ„ฐ๋ฅผ ๋งŒ๋‚˜๋ฉด ๊ทธ ์œ„์น˜์—์„œ ๋ฉˆ์ถ”๋ฉด ๋œ๋‹ค. + +> ๐Ÿ’ก ํŠน์ •ํ•œ ๋ฐ์ดํ„ฐ์˜ **์™ผ์ชฝ์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋“ค์€ ์ด๋ฏธ ์ •๋ ฌ์ด ๋œ ์ƒํƒœ**์ด๋ฏ€๋กœ ์ž๊ธฐ๋ณด๋‹ค ์ž‘์€ ๋ฐ์ดํ„ฐ๋ฅผ ๋งŒ๋‚ฌ๋‹ค๋ฉด, ๋” ์ด์ƒ ๋ฐ์ดํ„ฐ ์‚ดํŽด๋ณผ ํ•„์š” ์—†์ด ์‚ฝ์ž…ํ•˜๋ฉด ๋จ + +#### โœจ ์‚ฝ์ž…์ •๋ ฌ ์ฝ”๋“œ + +```java +import java.util.ArrayList; +import java.util.Collections; + +public class InsertionSort { + + public ArrayList sort(ArrayList dataList){ + for(int index=0; index 0; index2--){ + if(dataList.get(index2) < dataList.get(index2-1)){ + Collections.swap(dataList, index2, index2-1); + } + else{ + break; + } + } + } + return dataList; + } + + public static void main(String[] args) { + ArrayList dataList = new ArrayList(); + + for (int i = 0; i < 10; i++) { + dataList.add((int) (Math.random() * 100)); + } + InsertionSort insertion = new InsertionSort(); + System.out.println(insertion.sort(dataList)); + } +} +``` + +#### โœจ ์‚ฝ์ž…์ •๋ ฌ ์ •์˜ฌ ์˜ˆ์ œ + +1. ๋ฌธ์ œ๋งํฌ : https://jungol.co.kr/problem/1158?cursor=eyJwcm9ibGVtc2V0IjoiNiIsImZpZWxkIjo2LCJpZHgiOjF9 +2. ์ฝ”๋“œ + +```java +import java.util.ArrayList; +import java.util.Collections; +import java.util.Scanner; + +public class Main { + + public ArrayList sort(ArrayList dataList){ + for(int index=0; index 0; index2--){ + if(dataList.get(index2) < dataList.get(index2-1)){ + Collections.swap(dataList, index2, index2-1); + } + else{ + break; + } + } + for(int i = 0; i dataList = new ArrayList(); + Scanner in = new Scanner(System.in); + int n = in.nextInt(); + + for (int i = 0; i < n; i++) { + dataList.add(in.nextInt()); + } + Main insertion = new Main(); + insertion.sort(dataList); + } +} +``` + +3. ๋‹ค๋ฅธ ์‚ฌ๋žŒ ์ฝ”๋“œ + +```java +import java.util.Scanner; + +public class Main { + + public static void main(String[] args) { + // TODO Auto-generated method stub + Scanner scan = new Scanner(System.in); + + int n, i, j; + int arr[] = new int[101]; + + n = scan.nextInt(); + + for (i = 0; i < n; i++) { + arr[i] = scan.nextInt(); + } + + for (i = 1; i < n; i++) { + for (j = i; j > 0; j--) { + if (arr[j] < arr[j - 1]) + { + int c = arr[j]; + arr[j]=arr[j-1]; + arr[j-1]=c; + } + else break; + } + for (j = 0; j < n; j++) { + System.out.printf("%d ", arr[j]); + } + System.out.printf("\n"); + } + } +} +``` + +#### โœจ ์˜ˆ์ œ + +```python +array = [7, 5, 9, 0, 3, 1, 6, 2, 4, 8] + +for i in range(1, len(array)): + for j in range(i, 0, -1): # j๋ณ€์ˆ˜๊ฐ€ ์ธ๋ฑ์Šค i๋ถ€ํ„ฐ 1๊นŒ์ง€ 1์”ฉ ๊ฐ์†Œํ•˜๋ฉด์„œ ๋ฐ˜๋ณตํ•˜๋Š” ๋ฌธ๋ฒ• + if array[j] < array[j-1]: # ํ•œ ์นธ ์”ฉ ์™ผ์ชฝ์œผ๋กœ ์ด๋™ + array[j], array[j-1] = array[j-1], array[j] + else: # ์ž๊ธฐ๋ณด๋‹ค ์ž‘์€ ๋ฐ์ดํ„ฐ๋ฅผ ๋งŒ๋‚˜๋ฉด ๊ทธ ์œ„์น˜์—์„œ ๋ฉˆ์ถค + break +print(array) +``` + +> ๐Ÿ’ก range์˜ ์„ธ ๋ฒˆ์งธ ๋ณ€์ˆ˜ : range์˜ ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” 3๊ฐœ`(start, end, step)`์ด๋‹ค. ์„ธ ๋ฒˆ์งธ ๋งค๊ฐœ๋ณ€์ˆ˜์ธ step์— -1์ด ๋“ค์–ด๊ฐ€๋ฉด start์ธ๋ฑ์Šค๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ด์„œ end+1์ธ๋ฑ์Šค๊นŒ์ง€ 1์”ฉ ๊ฐ์†Œํ•œ๋‹ค. + +#### โœจ ์‚ฝ์ž…์ •๋ ฌ์˜ ์‹œ๊ฐ„๋ณต์žก๋„ + +* ์‹œ๊ฐ„๋ณต์žก๋„ : $`O(N^2)`$ + + โ‡’ **2์ค‘ ๋ฐ˜๋ณต๋ฌธ**์„ ์ด์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ + +![](https://velog.velcdn.com/images/prettylee620/post/596fedfe-8e75-40a3-a975-08e13cd66aba/image.png) + +โ‡’ ์„ ํƒ์ •๋ ฌ๋ณด๋‹ค ๋นจ๋ผ๋„ ์‹œ๊ฐ„๋ณต์žก๋„๋Š” `๊ฐ™์Œ` + +โ‡’ ์‚ฝ์ž… ์ •๋ ฌ์€ ํ˜„์žฌ ๋ฆฌ์ŠคํŠธ์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ๊ฑฐ์˜ ์ •๋ ฌ๋˜์–ด ์žˆ๋Š” ์ƒํƒœ๋ผ๋ฉด ๋งค์šฐ ๋น ๋ฅด๊ฒŒ ๋™์ž‘ + +> โœจ ์‹œ๊ฐ„๋ณต์žก๋„๊ฐ€ **๋™์ผํ•œ ์ด์œ **๋Š” ์ตœ์•…์˜ ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ๋ณด์ง€๋ง๊ณ , **ํ‰๊ท ** ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ๋ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ + +## ์‚ฝ์ž… ์ •๋ ฌ, ๋ฒ„๋ธ” ์ •๋ ฌ, ์„ ํƒ ์ •๋ ฌ ์„ธ ๊ฐ€์ง€ ๋น„๊ต + +1. ๋ฒ„๋ธ” ์ •๋ ฌ + +* ๋งจ ์ฒ˜์Œ์— ์žˆ๋Š” ๊ฒƒ์„ ์ €์žฅ ํ›„ ๋‹ค์Œ ์žˆ๋Š” ๊ฒƒ์„ ๋น„๊ต ํ•ด์„œ ๋‹ค์Œ ๊ฒƒ์ด ์ง€๊ธˆ ์žˆ๋Š” ๊ฒƒ๋ณด๋‹ค ์ ๋‹ค๋ฉด ๊ทธ ์ˆ˜๋ฅผ swapํ•จ โ‡’ ์ด๋Ÿฐ์‹์œผ๋กœ ๋ฐ˜๋ณต + +```java +public static void bubbleSort(int[] array) { + int n = array.length; + for (int i = 0; i < n - 1; i++) { // ๋ชจ๋“  ์š”์†Œ๋ฅผ ์ˆœํšŒ + for (int j = 0; j < n - i - 1; j++) { // i๊นŒ์ง€๋Š” ์ด๋ฏธ ์ •๋ ฌ๋˜์—ˆ์œผ๋ฏ€๋กœ ๋น„๊ตํ•  ํ•„์š”๊ฐ€ ์—†์Œ + if (array[j] > array[j + 1]) { // ๋‹ค์Œ ์š”์†Œ๊ฐ€ ํ˜„์žฌ ์š”์†Œ๋ณด๋‹ค ์ž‘์œผ๋ฉด ๊ตํ™˜ + int temp = array[j]; + array[j] = array[j + 1]; + array[j + 1] = temp; + } + } + } +} +``` + +* ํŒŒ์ด์ฌ ์ฝ”๋“œ + +```java +def bubble_sort(arr): + n = len(arr) + for i in range(n): + for j in range(0, n-i-1): + if arr[j] > arr[j+1]: + arr[j], arr[j+1] = arr[j+1], arr[j] + +# ์‚ฌ์šฉ ์˜ˆ์‹œ +arr = [5, 3, 8, 2, 1, 4] +bubble_sort(arr) +print("๋ฒ„๋ธ” ์ •๋ ฌ ๊ฒฐ๊ณผ:", arr) +``` + +2. ์‚ฝ์ž… ์ •๋ ฌ + +* ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ํ›‘์–ด๋ด„ ์ผ๋‹จ, **๊ฐ€์žฅ ์ž‘์€ ๋ฐ์ดํ„ฐ๋ฅผ ์„ ํƒ**ํ•ด ๋งจ ์•ž์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ์™€ ๋ฐ”๊พธ๊ณ , ๊ทธ๋‹ค์Œ ์ž‘์€ ๋ฐ์ดํ„ฐ๋ฅผ ์„ ํƒํ•ด ์•ž์—์„œ ๋‘ ๋ฒˆ์งธ ๋ฐ์ดํ„ฐ์™€ ๋ฐ”๊พธ๋Š” ๊ณผ์ • **๋ฐ˜๋ณต** + +```java +public static void insertionSort(int[] array) { + int n = array.length; + for (int i = 1; i < n; i++) { // ๋‘ ๋ฒˆ์งธ ์š”์†Œ๋ถ€ํ„ฐ ์‹œ์ž‘ + int key = array[i]; // ํ˜„์žฌ ์š”์†Œ๋ฅผ ์ €์žฅ + int j = i - 1; + while (j >= 0 && array[j] > key) { // ์™ผ์ชฝ์˜ ๋ชจ๋“  ์š”์†Œ์™€ ๋น„๊ตํ•˜์—ฌ key๋ณด๋‹ค ํฐ ๊ฐ’์€ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ์ด๋™ + array[j + 1] = array[j]; + j--; + } + array[j + 1] = key; // key ๊ฐ’์„ ์ ์ ˆํ•œ ์œ„์น˜์— ์‚ฝ์ž… + } +} +``` + +* ํŒŒ์ด์ฌ ์ฝ”๋“œ + +```java +def insertion_sort(arr): + n = len(arr) + for i in range(1, n): + key = arr[i] + j = i - 1 + while j >= 0 and key < arr[j]: + arr[j + 1] = arr[j] + j -= 1 + arr[j + 1] = key + +# ์‚ฌ์šฉ ์˜ˆ์‹œ +arr = [5, 3, 8, 2, 1, 4] +insertion_sort(arr) +print("์‚ฝ์ž… ์ •๋ ฌ ๊ฒฐ๊ณผ:", arr) +``` + +3. ์„ ํƒ ์ •๋ ฌ + +* ํ•„์š”ํ•  ๋•Œ๋งŒ ๋ฐ”๊ฟ”์„œ ํšจ์œจ์  +* ๋‘ ๋ฒˆ์งธ ์ฆ‰, 1์ธ๋ฑ์Šค๋ถ€ํ„ฐ ํ›‘์–ด๋ด„ ์™œ๋ƒ ์ฒซ ๋ฒˆ์งธ๊บผ๋Š” ์ •๋ ฌ๋˜์–ด ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋‹ˆ๊นŒ +* ๊ทธ๋ฆฌ๊ณ  ๋‘๋ฒˆ์งธ๊ฐ€ ์™ผ์ชฝ์„ ๋ฐ”๋ผ๋ณด๊ณ  ์™ผ์ชฝ์ด ๋” ํฌ๋‹ค๋ฉด ๋ฐ”๊ฟˆ +* ์ด๋Ÿฐ์‹์œผ๋กœ ์ ์ ˆํ•œ ์œ„์น˜์— ๋„ฃ๊ธฐ ๋•Œ๋ฌธ์— ๊ฑฐ์˜ ์ •๋ ฌ๋˜์–ด ์žˆ๋‹ค๊ณ  ํŒ๋‹จ๋˜๋Š” ๊ฒƒ์— ์ข‹์Œ + +```java +public static void selectionSort(int[] array) { + int n = array.length; + for (int i = 0; i < n - 1; i++) { // ๋งจ ๋งˆ์ง€๋ง‰ ์š”์†Œ๋Š” ์ž๋™์œผ๋กœ ์ •๋ ฌ๋˜๋ฏ€๋กœ n-1๊นŒ์ง€๋งŒ ์ˆœํšŒ + int minIndex = i; + for (int j = i + 1; j < n; j++) { // i ์ดํ›„์˜ ์š”์†Œ๋“ค๊ณผ ๋น„๊ตํ•˜์—ฌ ์ตœ์†Ÿ๊ฐ’์˜ ์œ„์น˜๋ฅผ ์ฐพ์Œ + if (array[j] < array[minIndex]) { + minIndex = j; + } + } + int temp = array[minIndex]; // ์ตœ์†Ÿ๊ฐ’์„ ํ˜„์žฌ ์œ„์น˜๋กœ ์ด๋™ + array[minIndex] = array[i]; + array[i] = temp; + } +} +``` + +* ํŒŒ์ด์ฌ ์ฝ”๋“œ + +```java +def selection_sort(arr): + n = len(arr) + for i in range(n): + min_index = i + for j in range(i+1, n): + if arr[j] < arr[min_index]: + min_index = j + arr[i], arr[min_index] = arr[min_index], arr[i] + +# ์‚ฌ์šฉ ์˜ˆ์‹œ +arr = [5, 3, 8, 2, 1, 4] +selection_sort(arr) +print("์„ ํƒ ์ •๋ ฌ ๊ฒฐ๊ณผ:", arr) +``` diff --git "a/developLog/algorithm-datastructure/data-structure/_ Array vs ArrayList vs LinkedList \354\260\250\354\235\264_.md" "b/developLog/algorithm-datastructure/data-structure/_ Array vs ArrayList vs LinkedList \354\260\250\354\235\264_.md" new file mode 100644 index 0000000..ccbd56c --- /dev/null +++ "b/developLog/algorithm-datastructure/data-structure/_ Array vs ArrayList vs LinkedList \354\260\250\354\235\264_.md" @@ -0,0 +1,138 @@ +# Array vs ArrayList vs LinkedList ์ฐจ์ด + +> ์ถœ์ฒ˜ : https://gyoogle.dev/blog/computer-science/data-structure/Array%20vs%20ArrayList%20vs%20LinkedList.html + +## 1. tmi ์ •๋ฆฌํ•˜๋Š” ์ด์œ  + +> ์˜ค๋Š˜ ์Šคํ„ฐ๋”” ํ•˜๋Š” ๋ฐ ๋‹ค๋ฅธ ํŒ€์›๋ถ„๋“ค์„ ์–˜๊ธฐํ•ด์ค€ ๊ฒƒ์„ ๋ฐ”ํƒ•์œผ๋กœ ์ดํ•ดํ•œ ๊ฒƒ๊ณผ ์ฐพ์•„๋ณธ ๊ฑฐ ๊ธฐ๋ฐ˜์œผ๋กœ ์ข€ ๋” ์ •๋ฆฌํ•ด์•ผ ํ•  ๊ฒƒ ๊ฐ™์•„์„œ ์ •๋ฆฌํ•จ + 8/17 ์ˆ˜์—…์‹œ๊ฐ„ ์ •๋ฆฌ ๋‚ด์šฉ ์ถ”๊ฐ€ + +## 2. Array(๋ฐฐ์—ด) + +![](https://velog.velcdn.com/images/prettylee620/post/27145c70-46a5-439e-9919-d1521ee3f818/image.png) + +1. ์„ ์–ธํ•  ๋•Œ ํฌ๊ธฐ์™€ ๋ฐ์ดํ„ฐ ํƒ€์ž…์„ ์ง€์ •ํ•ด์•ผ ํ•œ๋‹ค. + +```java +int arr[10]; +String arr[5]; +``` + +```java +int[] myArray = new int[10]; +``` + +2. ๋ฐฐ์—ด์„ ์‚ฌ์šฉํ•˜๋ฉด index๊ฐ€ ์กด์žฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์œ„์น˜๋ฅผ ๋ฐ”๋กœ ์•Œ ์ˆ˜ ์žˆ์–ด ๊ฒ€์ƒ‰์— ํŽธํ•œ ์žฅ์ ์ด ์žˆ๋‹ค. +3. ๋ฐ์ดํ„ฐ ํฌ๊ธฐ๊ฐ€ ์ •ํ•ด์ ธ ์žˆ๋Š” ๊ฒฝ์šฐ ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ์— ์šฉ์ด + +### ๐Ÿ ๋‹จ์  + +1. ์ •์  ํ• ๋‹น(static allocation) : ๊ณ ์ •๋œ ํฌ๊ธฐ์˜ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋กœ ์„ ์–ธ ํ•  ๋•Œ ํฌ๊ธฐ๋ฅผ ์ง€์ •ํ•˜๋ฉฐ, ํ•œ ๋ฒˆ ์ƒ์„ฑ๋œ ๋ฐฐ์—ด์˜ ํฌ๊ธฐ๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒƒ์€ ์–ด๋ ต๋‹ค. +2. ๋ฐฐ์—ด์˜ ํฌ๊ธฐ๋ฅผ ๋ณ€๊ฒฝํ•˜๊ฑฐ๋‚˜ ์š”์†Œ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ์‚ญ์ œํ•˜๋Š” ๊ฒƒ์€ ๋ฒˆ๊ฑฐ๋กญ๋‹ค. ์™œ๋ƒํ•˜๋ฉด ์›๋ž˜๊ฐ’์„ ๋ฐ€์–ด๋‚ด๊ณ  ํ•ด๋‹น INDEX์— ๋ฎ์–ด์”Œ์›Œ์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. + +## 3. ArrayList + +> List๋Š” array์ฒ˜๋Ÿผ ํฌ๊ธฐ๋ฅผ ์ •ํ•ด์ฃผ์ง€ ์•Š์•„๋„ ๋˜๊ธฐ ๋•Œ๋ฌธ์— ํฌ๊ธฐ์˜ ๋ฌธ์ œ์ธ ๊ฒƒ์„ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด์„œ ๋‚˜์˜จ ๊ฒƒ์œผ๋กœ array์—์„œ๋Š” index๊ฐ€ ์ค‘์š”ํ–ˆ๋‹ค๋ฉด, List์—์„œ๋Š” ์ˆœ์„œ๊ฐ€ ์ค‘์š”ํ•˜๋‹ค. + +![](https://velog.velcdn.com/images/prettylee620/post/ef3d50b8-eff6-42aa-84c8-d1f28de8199b/image.png) + +1. ArrayList๋Š” ํฌ๊ธฐ๊ฐ€ ๋™์ ์œผ๋กœ ํ™•์žฅ๋˜๋Š” ๋ฐฐ์—ด์˜ ๊ตฌํ˜„์ฒด๋กœ ์š”์†Œ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ์‚ญ์ œํ•ด๋„ ๋‚ด๋ถ€์ ์œผ๋กœ ํฌ๊ธฐ๊ฐ€ ์ž๋™์œผ๋กœ ์กฐ์ ˆ๋œ๋‹ค. +2. ArrayList๋Š” ๊ฐ์ฒด์— ์ €์žฅํ•˜๋ฉฐ, ๊ฐ์ฒด ์ถ”๊ฐ€/์‚ญ์ œ์— ์šฉ์ดํ•˜๋„๋ก ๊ตฌํ˜„๋˜์–ด ์žˆ๋‹ค. +3. ArrayList๋Š” ๋‚ด๋ถ€์ ์œผ๋กœ ๋ฐฐ์—ด๋กœ ๊ตฌํ˜„๋˜์ง€๋งŒ, ํฌ๊ธฐ๊ฐ€ ๋™์ ์œผ๋กœ ํ™•์žฅ๋˜๋ฏ€๋กœ **๋ฐฐ์—ด์˜ ํฌ๊ธฐ ์ œํ•œ ๊ทน๋ณต ๊ฐ€๋Šฅ** +4. Java์˜ ์ œ๋„ค๋ฆญ(Generic) ๊ธฐ๋Šฅ์„ ์ด์šฉํ•˜๋ฉด ArrayList์˜ ํƒ€์ž…์„ ๋ฏธ๋ฆฌ ์ง€์ •ํ•˜์—ฌ ์‚ฌ์šฉํ•จ์œผ๋กœ์จ ํƒ€์ž… ์•ˆ์ •์„ฑ์„ ํ™•๋ณด + +### ๐Ÿ ํŠน์ง• + +1. ์—ฐ์†์ ์ธ ๋ฐ์ดํ„ฐ์˜ ๋ฆฌ์ŠคํŠธ(์ค‘๊ฐ„์— ๋นˆ ๊ณต๊ฐ„์ด ์žˆ์œผ๋ฉด ์•ˆ๋œ๋‹ค.) +2. ArrayList ํด๋ž˜์Šค๋Š” ๋‚ด๋ถ€์ ์œผ๋กœ Object\[] ๋ฐฐ์—ด์„ ์ด์šฉํ•˜์—ฌ ์š”์†Œ๋ฅผ ์ €์žฅ +3. ๋ฐฐ์—ด์„ ์ด์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ธ๋ฑ์Šค๋ฅผ ์ด์šฉํ•ด์„œ ์š”์†Œ์— ๋น ๋ฅด๊ฒŒ ์ ‘๊ทผ ๊ฐ€๋Šฅ +4. ๋ฐ์ดํ„ฐ์˜ ์ ์žฌ๋Ÿ‰(Capacity)์— ๋”ฐ๋ผ ๊ฐ€๋ณ€์ ์œผ๋กœ ๊ณต๊ฐ„์„ ๋Š˜๋ฆฌ๊ฑฐ๋‚˜ ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค. + +### ๐Ÿ ๋‹จ์  + +1. ์ค‘๊ฐ„์— ๋ฐ์ดํ„ฐ๋ฅผ ๋ฆฌ์ŠคํŠธ ์ค‘๊ฐ„์— ์‚ฝ์ž…/์‚ญ์ œ ์‹œ, ์‹œ๊ฐ„์ด ์˜ค๋ž˜๊ฑธ๋ฆฌ๋Š” ๋‹จ์ ์ด ์กด์žฌํ•œ๋‹ค. (๋”ํ•˜๊ฑฐ๋‚˜ ๋บ„๋•Œ๋งˆ๋‹ค ์ค„์ค„์ด ๋‹น๊ฒจ์ง€๊ฑฐ๋‚˜ ๋ฐ€๋ ค๋‚  ๋•Œ ์ง„ํ–‰๋˜๋Š” ์—ฐ์‚ฐ์ด ์ถ”๊ฐ€, ๋ฉ”๋ชจ๋ฆฌ๋„ ๋‚ญ๋น„..) ๋นˆ ๊ณต๊ฐ„์ด ์ƒ๊ธฐ์ง€ ์•Š๋„๋ก ์ธ๋ฑ์Šค๋ฅผ ์กฐ์ •ํ•ด์•ผ ํ•˜๋Š” ๊ณผ์ •์ด ํ•„์š”ํ•˜๋ฉฐ ๋™์ž‘์ด ๋Š๋ฆฌ๋‹ค. +2. ๋ฐฐ์—ด๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ **๋™์ผํ•œ ํƒ€์ž…์˜ ์š”์†Œ๋ฅผ ์ €์žฅํ•˜๋Š”๋ฐ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์—** ํ•œ ๋ฒˆ ์ƒ์„ฑํ•œ ArrayList๋Š” ๊ทธ ๋‚ด๋ถ€์˜ ์š”์†Œ ํƒ€์ž… ๋ณ€๊ฒฝํ•˜๊ธฐ๋Š” ์–ด๋ ต๋‹ค. +3. ์กฐํšŒ ๊ธฐ๋Šฅ์— ์ ํ•ฉํ•œ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ + +```java +import java.util.ArrayList; + +// ArrayList ์ƒ์„ฑ +ArrayList myList = new ArrayList<>(); + +// ์š”์†Œ ์ถ”๊ฐ€ +myList.add(10); +myList.add(20); + +// ์š”์†Œ ์ ‘๊ทผ +int element = myList.get(0); + +// ์š”์†Œ ์‚ญ์ œ +myList.remove(0); +``` + +## 4. LinkedList + +> ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ์—๋Š” ๋‹จ์ผ, ๋‹ค์ค‘ ๋“ฑ ์—ฌ๋Ÿฌ๊ฐ€์ง€๊ฐ€ ์กด์žฌํ•œ๋‹ค. ์ข…๋ฅ˜๊ฐ€ ๋ฌด์—‡์ด๋“ , ํ•œ ๋…ธ๋“œ์— ์—ฐ๊ฒฐ๋  ๋…ธ๋“œ์˜ ํฌ์ธํ„ฐ ์œ„์น˜๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ๋ฐฉ์‹ + +![](https://velog.velcdn.com/images/prettylee620/post/176f58be-fcac-4f30-8abb-84e9cd8b5caa/image.png) + +1. ์ด๋Ÿฐ ๋ฐฉ์‹์„ ํ™œ์šฉํ•˜๋ฉด์„œ, ๋ฐ์ดํ„ฐ์˜ ์ค‘๊ฐ„์— ์‚ฝ์ž… ๋ฐ ์‚ญ์ œ๋ฅผ ํ•˜๋”๋ผ๋„ ์ „์ฒด๋ฅผ ๋Œ์ง€ ์•Š์•„๋„ ์ด์ „ ๊ฐ’๊ณผ ๋‹ค์Œ๊ฐ’์ด ๊ฐ€๋ฅด์ผฐ๋˜ ์ฃผ์†Œ๊ฐ’๋งŒ ์ˆ˜์ •ํ•˜์—ฌ ์—ฐ๊ฒฐ์‹œ์ผœ์ฃผ๋ฉด ๋˜๊ธฐ ๋•Œ๋ฌธ์— ๋น ๋ฅด๊ฒŒ ์ง„ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค. +2. ์ด๋ ‡๊ฒŒ๋งŒ ๋ณด๋ฉด ๊ฐ€์žฅ ์ข‹์€ ๋ฐฉ๋ฒ• ๊ฐ™์•„๋ณด์ด์ง€๋งŒ, `List์˜ k๋ฒˆ์งธ ๊ฐ’์„ ์ฐพ์•„๋ผ`์—์„œ๋Š” ๋น„ํšจ์œจ์  + +### ๐Ÿ ๋‹จ์  + +1. array๋‚˜ arrayList์—์„œ index๋ฅผ ๊ฐ–๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ฒ€์ƒ‰์ด ๋น ๋ฅด์ง€๋งŒ, LinkedList๋Š” ์ฒ˜์Œ๋ถ€ํ„ฐ ์‚ดํŽด๋ด์•ผํ•˜๋ฏ€๋กœ(์ˆœ์ฐจ) ๊ฒ€์ƒ‰์— ์žˆ์–ด์„œ๋Š” ์‹œ๊ฐ„์ด ๋” ๊ฑธ๋ฆฐ๋‹ค๋Š” ๋‹จ์  +2. ์ƒํ™ฉ์— ๋งž๊ฒŒ ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Œ + +## 5. ์ „์ฒด ๋น„๊ต ์š”์•ฝ + +### ๐Ÿ ํฌ๊ธฐ ์ œํ•œ + +๋ฐฐ์—ด: ๊ณ ์ • ํฌ๊ธฐ, ๋ณ€๊ฒฝ์ด ์–ด๋ ค์›€. ArrayList: ํฌ๊ธฐ ๋™์  ์กฐ์ ˆ ๊ฐ€๋Šฅ. Linked List: ํฌ๊ธฐ ๋™์  ์กฐ์ ˆ ๊ฐ€๋Šฅ. + +### ๐Ÿ์š”์†Œ ์ถ”๊ฐ€/์‚ญ์ œ + +๋ฐฐ์—ด: ์š”์†Œ ์ถ”๊ฐ€/์‚ญ์ œ์— ์ œ์•ฝ์ด ์žˆ์Œ. ArrayList: ์š”์†Œ ์ถ”๊ฐ€/์‚ญ์ œ ์šฉ์ด. Linked List: ์š”์†Œ ์ถ”๊ฐ€/์‚ญ์ œ ์šฉ์ด (ํŠนํžˆ ์ค‘๊ฐ„์— ์‚ฝ์ž…/์‚ญ์ œ). + +### ๐Ÿ ๊ฒ€์ƒ‰ ์†๋„ + +๋ฐฐ์—ด: ์ธ๋ฑ์Šค๋ฅผ ํ†ตํ•œ ๋น ๋ฅธ ์ ‘๊ทผ ๊ฐ€๋Šฅ. ArrayList: ์ธ๋ฑ์Šค๋ฅผ ํ†ตํ•œ ๋น ๋ฅธ ์ ‘๊ทผ ๊ฐ€๋Šฅ. (๊ฒ€์ƒ‰์€ ๋ฐฐ์—ด๊ณผ ์œ ์‚ฌ) Linked List: ๊ฒ€์ƒ‰ ์†๋„๊ฐ€ ๋ฐฐ์—ด, ArrayList์— ๋น„ํ•ด ๋Š๋ฆผ. + +### ๐Ÿ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ + +๋ฐฐ์—ด: ์—ฐ์†๋œ ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅ. ArrayList: ๋‚ด๋ถ€์ ์œผ๋กœ ๋ฐฐ์—ด ์‚ฌ์šฉ, ํฌ๊ธฐ ์กฐ์ ˆ ๊ฐ€๋Šฅ. Linked List: ๊ฐ ์š”์†Œ๊ฐ€ ๋…ธ๋“œ๋กœ ์—ฐ๊ฒฐ๋˜์–ด ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„ ๋” ์‚ฌ์šฉ. + +### ๐Ÿ ์‚ฌ์šฉ ์‚ฌ๋ก€ + +๋ฐฐ์—ด: ํฌ๊ธฐ ๋ณ€๊ฒฝ์ด ๊ฑฐ์˜ ์—†๋Š” ๊ฒฝ์šฐ, ๋น ๋ฅธ ์ธ๋ฑ์Šค ์ ‘๊ทผ์ด ์ค‘์š”ํ•œ ๊ฒฝ์šฐ. ArrayList: ํฌ๊ธฐ ๋ณ€๊ฒฝ์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ, ๋น ๋ฅธ ์ธ๋ฑ์Šค ์ ‘๊ทผ์ด ์ค‘์š”ํ•œ ๊ฒฝ์šฐ. Linked List: ์š”์†Œ์˜ ์ถ”๊ฐ€/์‚ญ์ œ๊ฐ€ ๋นˆ๋ฒˆํ•œ ๊ฒฝ์šฐ. + +## 6. ์ฐธ๊ณ  + +> 8/23 ๊ตญ๋น„์—์„œ ํ…Œ์ŠคํŠธ ๋ณด๋‹ค๊ฐ€ ๋†“์นœ ๋ถ€๋ถ„์ธ ๊ฒƒ ๊ฐ™์•„ ์ถ”๊ฐ€ํ•จ + +### ๐Ÿ ๋ชจ๋“  ๋ฆฌ์ŠคํŠธ๋Š” ๋จผ์ € ๋“ค์–ด์˜จ ๋ฐ์ดํ„ฐ๊ฐ€ ์ œ์ผ ๋จผ์ € ๋‚˜๊ฐ„๋‹ค๋ผ๋Š” ๋ง์€ ๋งž๋Š” ๋ง์ผ๊นŒ? + +> ์ผ๋‹จ ๋‹ต์€ NO์ด๋‹ค + +1. `ArrayList` + +* ๋‚ด๋ถ€์ ์œผ๋กœ ๋ฐฐ์—ด์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•œ๋‹ค. +* ๋ฐ์ดํ„ฐ๊ฐ€ ์ˆœ์ฐจ์ ์œผ๋กœ ์ €์žฅ๋˜๋ฉฐ, ์ธ๋ฑ์Šค๋กœ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค. +* ์ด ๋•Œ๋ฌธ์— ArrayList์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ญ์ œํ•˜๋ฉด ๊ทธ ๋‹ค์Œ ์ธ๋ฑ์Šค์— ์žˆ๋˜ ๋ฐ์ดํ„ฐ๊ฐ€ ์•ž์œผ๋กœ ๋‹น๊ฒจ์ง„๋‹ค. +* ๋”ฐ๋ผ์„œ "๋จผ์ € ๋“ค์–ด์˜จ ๋ฐ์ดํ„ฐ๊ฐ€ ์ œ์ผ ๋จผ์ € ๋‚˜๊ฐ„๋‹ค"๋Š” ๊ฒƒ์€ **์‚ญ์ œ๋œ ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ๋”๋ผ๋„ ํ•ด๋‹น ์œ„์น˜์— null ๋˜๋Š” ๋‹ค๋ฅธ ๊ฐ’์ด ๋“ค์–ด์žˆ๋Š” ์ฑ„๋กœ ๋‚จ์•„์žˆ๊ฒŒ ๋œ๋‹ค.** + +2. `LinkedList` + +* ๊ฐ ๋ฐ์ดํ„ฐ๋Š” ์ด์ „ ๋ฐ์ดํ„ฐ์™€ ๋‹ค์Œ ๋ฐ์ดํ„ฐ์˜ ์ฐธ์กฐ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. +* ๋”ฐ๋ผ์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ์‚ญ์ œํ•  ๋•Œ ์ด์ „ ๋ฐ์ดํ„ฐ์™€ ๋‹ค์Œ ๋ฐ์ดํ„ฐ์˜ ์ฐธ์กฐ๋งŒ ๋ณ€๊ฒฝ๋˜๋ฏ€๋กœ, "๋จผ์ € ๋“ค์–ด์˜จ ๋ฐ์ดํ„ฐ๊ฐ€ ์ œ์ผ ๋จผ์ € ๋‚˜๊ฐ„๋‹ค"๋Š” ๊ทœ์น™์ด ์ผ๋ฐ˜์ ์œผ๋กœ ์œ ์ง€ + +๋”ฐ๋ผ์„œ "๋ชจ๋“  ๋ฆฌ์ŠคํŠธ๋Š” ๋จผ์ € ๋“ค์–ด์˜จ ๋ฐ์ดํ„ฐ๊ฐ€ ์ œ์ผ ๋จผ์ € ๋‚˜๊ฐ„๋‹ค"๋Š” ์„ค๋ช…์€ **ArrayList์™€ ๊ฐ™์€ ๋ฐฐ์—ด ๊ธฐ๋ฐ˜ ๋ฆฌ์ŠคํŠธ์—์„œ๋Š” ์ •ํ™•ํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ๋‹ค.** + +### ๐Ÿ LinkedList์—๋„ ์ธ๋ฑ์Šค๋Š” ์žˆ๋‹ค. + +1. LinkedList๋„ ๊ฐ ์š”์†Œ์— ์ธ๋ฑ์Šค๊ฐ€ ์žˆ๋‹ค. ํ•˜์ง€๋งŒ ArrayList์™€๋Š” ๋‹ค๋ฅด๊ฒŒ LinkedList์˜\*\* ์ธ๋ฑ์Šค๋กœ ์ง์ ‘์ ์ธ ์ ‘๊ทผ์€ ์„ฑ๋Šฅ์ƒ์˜ ์ด์œ ๋กœ ๊ถŒ์žฅ๋˜์ง€ ์•Š๋Š”๋‹ค.\*\* +2. LinkedList๋Š” ๊ฐ ์š”์†Œ๊ฐ€ ๋‹ค์Œ ์š”์†Œ์™€ ์ด์ „ ์š”์†Œ์— ๋Œ€ํ•œ ์ฐธ์กฐ๋งŒ์„ ๊ฐ€์ง€๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, ์›ํ•˜๋Š” ์œ„์น˜๋กœ ๋ฐ”๋กœ ์ ‘๊ทผํ•˜๋ ค๋ฉด \*\*์ฒ˜์Œ๋ถ€ํ„ฐ ์ˆœ์ฐจ์ ์œผ๋กœ ์ฐพ์•„๊ฐ€์•ผ ํ•œ๋‹ค. \*\*๋ฐ˜๋ฉด์— ArrayList๋Š” ๋‚ด๋ถ€์ ์œผ๋กœ ๋ฐฐ์—ด์„ ์‚ฌ์šฉํ•˜๊ณ  ์ธ๋ฑ์Šค๋กœ ์ง์ ‘ ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋น ๋ฅธ ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•˜๋‹ค. + +## 7. ํšŒ๊ณ  + +> ์Šคํ„ฐ๋””์—์„œ ์ข‹์€ ์ ์€ ๋‚ด๊ฐ€ ๋†“์นœ ๋ถ€๋ถ„ ํ•œ๋ฒˆ ๋” ์ •๋ฆฌ ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ํ™”์ดํŒ… diff --git a/developLog/algorithm-datastructure/data-structure/_ Big O_.md b/developLog/algorithm-datastructure/data-structure/_ Big O_.md new file mode 100644 index 0000000..422d26b --- /dev/null +++ b/developLog/algorithm-datastructure/data-structure/_ Big O_.md @@ -0,0 +1,426 @@ +--- +cover: >- + https://file.notion.so/f/f/3f5af70e-5587-4c7a-8846-c7c5c0a904e2/bb5eb3c8-3a67-42a3-9f79-5b9e7ae18004/Untitled.png?table=block&id=b0e23518-b129-4308-b83b-ec65feb78ce5&spaceId=3f5af70e-5587-4c7a-8846-c7c5c0a904e2&expirationTimestamp=1723118400000&signature=rnD47Ut9ef14TJYUsQjV9D1VaLm05HlFUi3ZDGKTiYQ&downloadName=Untitled.png +coverY: 0 +layout: + cover: + visible: true + size: hero + title: + visible: true + description: + visible: true + tableOfContents: + visible: true + outline: + visible: true + pagination: + visible: true +--- + +# Big O + +![](https://velog.velcdn.com/images/prettylee620/post/cbfefa92-15c0-46e9-bd52-ac40aace2420/image.png) + +## 1. ์ž๋ฃŒ๊ตฌ์กฐ์™€ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ํ•„์š”ํ•œ ์ด์œ  + +### 1) ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋ž€? + +์ปดํ“จํ„ฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ ์–ด๋– ํ•œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด์„œ ์“ฐ์—ฌ์ง€๋Š” ์–ธ์–ด + +์ž๋ฃŒ๊ตฌ์กฐ์™€ ์•Œ๊ณ ๋ฆฌ์ฆ˜์— ๋Œ€ํ•œ ์ดํ•ด๊ฐ€ ์žˆ๋‹ค๋ฉด ๊ตฌํ˜„ํ•˜๊ณ ์ž ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ๋ณด๋‹ค ์‰ฝ๊ณ  ํšจ์šธ์ ์œผ๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ๊ฒŒ ๋„์™€์คŒ + +ํ˜„์—…์˜ ๊ฒฝ์šฐ ์ฝ”๋”ฉํ…Œ์ŠคํŠธ๋ฅผ ๊ณต๋ถ€ํ•˜์ง€ ์•Š์Œ ๋Œ€๋ถ€๋ถ„์€ ์–ธ์–ด๋‚˜ ํ”„๋ ˆ์ž„์›Œํฌ๋‚˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—์„œ ์ด๋ฏธ ์ž˜ ๋งŒ๋“ค์–ด์ง„ ์•„์ด๋“ค์„ ๊ฐ€์ ธ์™€์„œ ๋งŒ๋“ค๊ณ ์ž ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ๊ฐ€์ ธ์™€์„œ ์‚ฌ์šฉ + +### 2) ๊ทธ๋ ‡๋‹ค๋ฉด ์™œ ์ฝ”๋”ฉํ…Œ์ŠคํŠธ๋ฅผ ๋ณผ๊นŒ? + +์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ž‘์„ฑ ํ›„ ์งˆ์˜/์‘๋‹ต์„ ํ†ตํ•ด ์ž๋ฃŒ๊ตฌ์กฐ์™€ ์•Œ๊ณ ๋ฆฌ์ฆ˜์— ๋Œ€ํ•ด ์–ผ๋งˆ๋‚˜ ์ดํ•ดํ•˜๊ณ  ์žˆ๊ณ  ์‹œ๊ฐ„๊ณผ ๊ณต๊ฐ„ ๋ณต์žก๋„์— ๋Œ€ํ•œ ์ดํ•ด๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธํ•ด๋ณด๊ธฐ ์œ„ํ•จ + +EX. + +* ํ•˜ํ•„ ์ด ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์„ ํƒํ•œ ์ด์œ ๋Š”? +* ์ด๊ฒƒ์ด ์ €๊ฒƒ๋“ค์˜ ๋น„ํ•ด ์žฅ๋‹จ์ ์€? +* ์ €๊ฒƒ๊ณผ ์ด๊ฒƒ์˜ ์ฐจ์ด๋Š”? + +## 2. ์•Œ๊ณ ๋ฆฌ์ฆ˜๊ณผ ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ๊ณต๋ถ€๋ฐฉ๋ฒ• + +์ž๋ฃŒ ๊ตฌ์กฐ๋Š” ์–ด๋Š ์ƒํ™ฉ์— ์“ฐ์ด๋Š” ๊ฒƒ์ด ์ข‹๊ณ  ๋˜ ์–ด๋–ค ์‹์˜ API๋“ค์ด ์žˆ๋Š”์ง€ ์ด๋Ÿฐ ๊ฒƒ๋“ค ์กฐ๊ธˆ ํฐ ๊ทธ๋ฆผ์„ ๋ณด๋ฉด์„œ ๊ณต๋ถ€ + +### 1) ์ž๋ฃŒ๊ตฌ์กฐ + +์„œ๋น„์Šค๋‚˜ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์— ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฉ”๋ชจ๋ฆฌ์— ์–ด๋–ป๊ฒŒ ๊ตฌ์กฐ์ ์œผ๋กœ ์ž˜ ์ •๋ฆฌํ•ด์„œ ๋‹ด์•„๋‘๊ณ , ๊ด€๋ฆฌํ•˜๊ณ  **ํšจ์œจ์ ์ธ ๋ฐฉ์‹์œผ๋กœ ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ์— ๋น ๋ฅด๊ฒŒ ์ ‘๊ทผํ•˜๊ณ  ํ•„์š”ํ•œ ์ˆ˜์ • ์‚ฝ์ž… ์‚ญ์ œ** ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ค€๋‹ค. ๊ธฐ๋Šฅ์— ์ ํ•ฉํ•œ ์•Œ๋งž๋Š” ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ์“ฐ๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๋‹ค. + +> ๐Ÿ’ก ์ž๋ฃŒ ๊ตฌ์กฐ ๊ณต๋ถ€์‹œ Point + +1. Order : ์ž๋ฃŒ ๊ตฌ์กฐ ์•ˆ์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋“ค์˜ ์ˆœ์„œ๊ฐ€ ๋ณด์žฅ? +2. Unique : ์ค‘๋ณต๋œ ๋ฐ์ดํ„ฐ๊ฐ€ ๋“ค์–ด ๊ฐˆ ์ˆ˜ ์žˆ๋Š”๊ฐ€? +3. Search : ๊ฒ€์ƒ‰์— ์–ผ๋งˆ๋‚˜ ํšจ์œจ์ ์ธ๊ฐ€? +4. Modification : ์šฐ๋ฆฌ๊ฐ€ ์›ํ•˜๋Š” ๊ธฐ๋Šฅ์— ๋”ฐ๋ผ์„œ ์ˆ˜์ •์‹œ ์–ผ๋งˆ๋‚˜ ํšจ์œจ์ ์ธ์ง€? + +## 3. BigO + +> ์ถœ์ฒ˜ : ๋‹ˆ๊ผด๋ผ์Šค https://www.youtube.com/watch?v=BEVnxbxBqi8 + +### 1) ๊ฐœ์š” + +* ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ **์Šคํ”ผ๋“œ**๋ฅผ ์–ด๋–ป๊ฒŒ ํ‘œํ˜„ํ•˜๋Š”์ง€ ์•Œ์•„๋ด„ +* ๋น ๋ฅด๋‹ค, ๋Š๋ฆฌ๋‹ค์˜ ๋ง์ด ์•„๋‹Œ `CS์ง€์‹` + +### 2) ์•Œ๊ณ ๋ฆฌ์ฆ˜ + +*** + +์ œํ•œ๋œ ๊ณต๊ฐ„๊ณผ ์‹œ๊ฐ„ ์•ˆ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์–ด๋–ป๊ฒŒ ์ฒ˜๋ฆฌํ•  ๊ฒƒ์ธ์ง€๋ฅผ ์ •ํ•ด๋†“์€ ๋กœ์ง + +์ฃผ์–ด์ง„ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฒ€์ƒ‰ํ•˜๊ฑฐ๋‚˜ ์ •๋ ฌ ๋˜๋Š” ์ด์ ์„ ๊ตฌํ•˜๋Š” ๋“ฑ์˜ ๋‹ค์–‘ํ•œ ๊ณ„์‚ฐ์„ ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์„ ๋งํ•จ + +![](https://velog.velcdn.com/images/prettylee620/post/2e69337f-9686-4508-93f8-8dd558bc16e3/image.png) + +์ฆ‰, ์ฃผ์–ด์ง„ `input`์œผ๋กœ **์ •์˜๋œ ๊ณ„์‚ฐ์„ ์ˆ˜ํ–‰**ํ•œ ๋‹ค์Œ `output` ๊ฒฐ๊ณผ๊ฐ’์„ ๋‚ด๋Š” ๊ฒƒ + +### 3) ์‹œ๊ฐ„๋ณต์žก๋„ + +*** + +> ๐Ÿ’ซ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐ ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„๊ณผ ์ž…๋ ฅ์˜ ํ•จ์ˆ˜ ๊ด€๊ณ„ + +1. โ€œ๋น ๋ฅด๋‹คโ€, โ€œ๋Š๋ฆฌ๋‹คโ€๋Š” `์‹œ๊ฐ„`์œผ๋กœ **ํ‘œํ˜„ํ•˜์ง€ ์•Š์Œ(์‹œ๊ฐ„ ๋ณต์žก๋„)** + * ๊ฐ™์€ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋ผ๋„ ๋‚ด ์ปดํ“จํ„ฐ๊ฐ€ ์นœ๊ตฌ์˜ ์ปดํ“จํ„ฐ๋ณด๋‹ค ๋น ๋ฅผ ์ˆ˜ ์žˆ์Œ + * ์ปดํ“จํ„ฐ๋ผ๋Š” **ํ•˜๋“œ์›จ์–ด**๊ฐ€ ๊ฒฐ์ •ํ•˜๊ธฐ ๋•Œ๋ฌธ + * โ€œ์™„๋ฃŒ๊นŒ์ง€ ๊ฑธ๋ฆฌ๋Š” ์ ˆ์ฐจ์˜ ์ˆ˜โ€`STEPS` + * ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์œ„ํ•ด ํ•„์š”ํ•œ ์—ฐ์‚ฐ์˜ ํšŸ์ˆ˜ + * ํŠน์ • ํฌ๊ธฐ์˜ ์ž…๋ ฅ์— ๋Œ€ํ•˜์—ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ์–ผ๋งˆ๋‚˜ ์˜ค๋ž˜ ๊ฑธ๋ฆฌ๋Š”์ง€\ + +2. **์„ ํ˜• ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ๊ฒฝ์šฐ** ์‚ฌ์ด์ฆˆ๊ฐ€ **N**๊ฐœ์ด๋ฉด, **N**์Šคํ…์ด ํ•„์š”ํ•จ + +### 4) ๊ณต๊ฐ„๋ณต์žก๋„ + +*** + +* ๊ณต๊ฐ„๋ณต์žก๋„ : ํŠน์ •ํ•œ ํฌ๊ธฐ์˜ ์ž…๋ ฅ์— ๋Œ€ํ•˜์—ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ์–ผ๋งˆ๋‚˜ ๋งŽ์€ `๋ฉ”๋ชจ๋ฆฌ`๋ฅผ ์ฐจ์ง€ํ•˜๋Š”์ง€ +* ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์œ„ํ•ด ํ•„์š”ํ•œ ๋ฉ”๋ชจ๋ฆฌ์˜ ์–‘ +* ์˜ˆ๋ฅผ ๋“ค์–ด `int a[1004];`๋ผ๋Š” ๋ฐฐ์—ด์ด๋ฉด a ๋ฐฐ์—ด์€ 1004X4๋ฐ”์ดํŠธ์˜ ํฌ๊ธฐ๋ฅผ ๊ฐ€์ง€๊ฒŒ ๋จ + +### 5) Big O + +*** + +> ๐Ÿ’ซ ์‚ฌ์ด์ฆˆ๊ฐ€ N๊ฐœ๋ฉด, N์Šคํ…์ด ํ•„์š”ํ•ด์š”!!! ๋ณด๋‹ค๋Š” ์„ ํ˜•๊ฒ€์ƒ‰์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„ = O(N) ์ด๋ ‡๊ฒŒ ์„ค๋ช…ํ•˜๋Š” ์ปจ์…‰์„ Big O + +1. Big O๋ž€ ์‹œ๊ฐ„๋ณต์žก๋„๋ฅผ ํ‘œํ˜„ํ•˜๋Š” **ํ‘œ๊ธฐ๋ฒ•** +2. ์–ธ์ œ ๋ฌด์—‡์„ ์“ธ์ง€ ๋น ๋ฅด๊ฒŒ ํŒŒ์•… ๊ฐ€๋Šฅํ•˜๋ฉฐ, ์ž์‹ ์˜ ์ฝ”๋“œ๋ฅผ ํ‰๊ฐ€ ๊ฐ€๋Šฅ + * ์™œ..? ๋ฏธ๋ž˜์— ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์•Œ ์ˆ˜ ์žˆ์œผ๋‹ˆ + * Big O๋ฅผ ์ดํ•ด์‹œ, ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ **๋น ๋ฅด๊ฒŒ ๋ถ„์„** ๊ฐ€๋Šฅ, ์–ธ์ œ ๋ฌด์—‡์„ ์“ธ์ง€ ํŒŒ์•… ๊ฐ€๋Šฅ +3. ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ํผํฌ๋จผ์Šค๋ฅผ ์ดํ•ดํ•˜๊ธฐ ์‰ฝ๊ณ  `ํšจ์œจ์ `์œผ๋กœ ์ž‘์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ• + +* ์„ ํ˜•๊ฒ€์ƒ‰์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„ = `O(N)` +* but, ํ•ญ์ƒ Big O๊ฐ€ ๋ชจ๋“  ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์™„๋ฒฝํžˆ ์„ค๋ช…ํ•˜๋Š” ๊ฒƒ์€ ์•„๋‹˜ + +4. ๋ฐฐ์—ด์„ ์ธํ’‹์œผ๋กœ ์‚ฌ์šฉํ•  ํ•จ์ˆ˜, ์ธํ’‹์˜ ํฌ๊ธฐ ์ƒ๊ด€์—†์ด **๋™์ผํ•œ ์ˆ˜์˜ ์Šคํ…**์ด ํ•„์š” + * ์•„๋ž˜์˜ ์ฝ”๋“œ๋Š” print\_first๋ผ๋Š” ํŒŒ์ด์ฌ ํ•จ์ˆ˜๋ฅผ ์ •์˜ํ•˜๋ฉฐ, ๋งค๊ฐœ๋ณ€์ˆ˜ arr์—๊ฒŒ ๋ฐ›์œผ๋ฉฐ, arr์˜ ์ฒซ ๋ฒˆ์งธ ์ธ๋ฑ์Šค๋ฅผ ์ถœ๋ ฅํ•ด๋ƒ„ + * `์ธ๋ฑ์Šค`๋ฅผ ์ด์šฉํ•˜์—ฌ ํ•œ ๋ฒˆ์— ์ฐพ์œผ๋‹ˆ๊นŒ + * ์ด ํ•จ์ˆ˜์˜ ์‹œ๊ฐ„๋ณต์žก๋„๋Š” `constant time(์ƒ์ˆ˜ ์‹œ๊ฐ„)` : **N์˜ ํฌ๊ธฐ ์ƒ๊ด€์—†์ด** ๋๋‚ด๋Š”๋ฐ ๋™์ผํ•œ ์ˆซ์ž์˜ ์Šคํ…์ด ํ•„์š” + +```python +def print_first(arr): + print(arr[0]) +``` + +![](https://velog.velcdn.com/images/prettylee620/post/c2af3677-4a8c-46b0-9e59-77d7510ad855/image.png) + +1. ์ด ์ฝ”๋“œ์˜ ๊ฒฝ์šฐ 2๋ฒˆ์˜ print๊ฐ€ ์žˆ๋Š”๋ฐ 2๊ฐœ์˜ ์Šคํ…์ด ํ•„์š”ํ•œ ๊ฒƒ + +```python +def print_first(arr): + print(arr[0]) + print(arr[0]) +``` + +๐Ÿ’ซ ์ด๋ ‡๋‹ค๋ฉด O\[2] ์ผ๊นŒ? NO! ์—ฌ์ „ํžˆ **O\[1]** + +* Big O๋Š” ํ•จ์ˆ˜์˜ ๋””ํ…Œ์ผ์— ๊ด€์‹ฌ์ด ์—†๊ณ , ๋Ÿฌํ”„ํ•˜๊ฒŒ ์–ด๋–ป๊ฒŒ ์ด ํ•จ์ˆ˜๊ฐ€ `์ธํ’‹์˜ ์‚ฌ์ด์ฆˆ`์— ๋”ฐ๋ผ์„œ ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•˜๋Š”์ง€๊ฐ€ ์ค‘์š” +* ํ•จ์ˆ˜๋Š” ์ธํ’‹ ์‚ฌ์ด์ฆˆ๊ฐ€ ์—„์ฒญ๋‚˜๊ฒŒ ์ปค์ ธ๋„ ์ƒ๊ด€์—†์ด ๋ฏธ๋ฆฌ ์ •ํ•ด์ง„ ์ˆซ์ž์— ๋”ฐ๋ผ ์ž‘๋™ + +1. ์ฆ‰, Big O๋Š” ํฐ ์›๋ฆฌ์—๋งŒ ๊ด€์‹ฌ์„ ๊ฐ€์ง +2. ๊ผญ ๊ธฐ์–ตํ•ด ๋‘ฌ์•ผ ํ•  ๊ฒƒ์€ ๋น…์˜ค๋Š” `์ƒ์ˆ˜`๋ฅผ ์‹ ๊ฒฝ ์“ฐ์ง€ ์•Š์Œ + +### 6) Constant Time Algorithm(์ƒ์ˆ˜ ์‹œ๊ฐ„ ์•Œ๊ณ ๋ฆฌ์ฆ˜) + +*** + +* constant time `(์ผ์ •ํ•œ ์‹œ๊ฐ„/์ƒ์ˆ˜)` +* ์ธํ’‹์‚ฌ์ด์ฆˆ์™€ ๊ด€๊ณ„์—†์ด ์Šคํ…์ด ์ •ํ•ด์ง„ ์•Œ๊ณ ๋ฆฌ์ฆ˜๋“ค +* ํ•ญ์ƒ ์„ ํ˜ธํ•˜๋Š” ๊ฒƒ โ‡’ ์ธํ’‹์ด ๋Š˜์–ด๋‚˜๋„ **๋ณ€ํ•˜์ง€ ์•Š์Œ** +* ํ˜„์‹ค์ ์œผ๋กœ **ํ•ญ์ƒ** ๋งŒ๋“ค๊ธฐ ํž˜๋“ค๋‹ค + +![](https://velog.velcdn.com/images/prettylee620/post/0a202750-4308-4eca-b0a5-08647c382c6b/image.png) + +#### O(n) ์ž๋ฐ” ์ฝ”๋“œ๋กœ ๋‚˜ํƒ€๋‚ด๋ฉด + +```java +// ์‹œ๊ฐ„ ๋ณต์žก๋„ O(n)์ด ๊ณ„์‚ฐ๋œ๋‹ค. O(1) +public class OneToSum { + + public int sum(int n){ + int sum = 0; + + return n * (n + 1) / 2; + } + + + public static void main(String[] args) { + int n = 5; + // static์œผ๋กœ ์ฃผ์ง€ ์•Š์„ ๋•Œ + OneToSum object = new OneToSum(); + System.out.println(object.sum(10)); + } +} +``` + +### 7) ์‹œ๊ฐ„๋ณต์žก๋„ 1: Big O์˜ ์‹œ๊ฐ„๋ณต์žก๋„, ์„ ํ˜• ์‹œ๊ฐ„ ๋ณต์žก๋„ + +*** + +๋ฐฐ์—ด์˜ ์‚ฌ์ด์ฆˆ๊ฐ€ 10์ด๋ผ๋ฉด, 10๋ฒˆ ํ”„๋ฆฐํŠธ ํ•˜๋Š” ํ•จ์ˆ˜ : **O(N)** + +```python +def print_all(arr): + for n in arr: + print(n) +``` + +Q: ๋งŒ์•ฝ ๋ฐ˜๋ณต๋ฌธ์„ ๋‘๋ฒˆ์ด๋ผ๋ฉด O(2N)์ผ๊นŒ? \*\*\*\* + +```python +def print_all(arr): + for n in arr: + print(n) + for n in arr: + print(n) +``` + +A: **2๋Š” ์ƒ์ˆ˜**์ด๊ธฐ์— **๋ฒ„๋ ค๋‘๊ณ **, ์—ฌ์ „ํžˆ `O(N)`์œผ๋กœ ํ‘œํ˜„, ํ•ต์‹ฌ์€ ๋ณ€ํ•˜์ง€ ์•Š์•˜์ง€ ๋•Œ๋ฌธ + +๋ฉ”์„ธ์ง€๊ฐ€ ๊ฐ™๋‹ค โ‡’ `์ธํ’‹์ด ์ฆ๊ฐ€`ํ•˜๋ฉด `์Šคํ…๋„ ์„ ํ˜•์ ์œผ๋กœ ์ฆ๊ฐ€` + +#### O(N)์ด๋‚˜ ์„ ํ˜• ์‹œ๊ฐ„๋ณต์žก๋„๋ฅผ ๊ทธ๋ž˜ํ”„ + +![](https://velog.velcdn.com/images/prettylee620/post/ef219a14-8b13-4409-ae85-56d2855b5cf9/image.png) + +### 8) ์‹œ๊ฐ„๋ณต์žก๋„ 2 : Quadratic Time(2์ฐจ ์‹œ๊ฐ„) + +*** + +* `Nested Loops(์ค‘์ฒฉ ๋ฐ˜๋ณต)`์ด ์žˆ์„ ๋•Œ, ๋ฐœ์ƒ +* ์•„๋ž˜์˜ ๊ฒฝ์šฐ ๋ฐฐ์—ด์˜ ๊ฐ ์•„์ดํ…œ์— ๋Œ€ํ•ด ๋ฃจํ”„๋ฅผ ๋ฐ˜๋ณต, ์‹คํ–‰ + +```python +def print_twice(arr) + for n in arr: + for x in arr: + print(x, n) +``` + +* ์‹œ๊ฐ„๋ณต์žก๋„ : **์ธํ’‹ $n^2$** + + EX. ์ธํ’‹์ด 10๊ฐœ์‹œ 100๋ฒˆ์˜ ์Šคํ… : **๋ฃจํ”„ ์•ˆ์˜ ๋ฃจํ”„**์—์„œ ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰์‹œํ‚ค๊ธฐ ๋•Œ๋ฌธ + +#### 2์ฐจ ์‹œ๊ฐ„๋ณต์žก๋„ ๊ทธ๋ž˜ํ”„๋ฅผ ์„ ํ˜• ์‹œ๊ฐ„๋ณต์žก๋„์™€ ๋น„๊ต ๊ทธ๋ž˜ํ”„ + +![](https://velog.velcdn.com/images/prettylee620/post/b01548a2-0d8d-4a8d-ba5d-9026aa5ba5a0/image.png) + +**์„ ํ˜• ์‹œ๊ฐ„๋ณต์žก๋„**๊ฐ€ 2์ฐจ ์‹œ๊ฐ„๋ณต์žก๋„๋ณด๋‹ค ๋” **ํšจ์œจ์ ** + +### 9) ์‹œ๊ฐ„๋ณต์žก๋„ 3 : ๋กœ๊ทธ ์‹œ๊ฐ„(Logarithmic Time) + +*** + +1. ์ด์ง„๊ฒ€์ƒ‰ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์„ค๋ช…์‹œ ์‚ฌ์šฉ โ‡’ ์–ผ๋งˆ๋‚˜ `๋น ๋ฅธ์ง€` ์„ค๋ช… ๊ฐ€๋Šฅ + 1. ์ด์ง„ ๊ฒ€์ƒ‰ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ์ธํ’‹ ์‚ฌ์ด์ฆˆ๊ฐ€ 2๋ฐฐ๊ฐ€ ๋˜์–ด๋„ ํ•„์š”ํ•œ step์˜ ์ˆ˜๋Š” 1๊ฐœ๋ฐ–์— ์•ˆ๋“ค์–ด๋‚จ + 2. ์™œ๋ƒ? ์ด์ง„๊ฒ€์ƒ‰์€ ๊ฐ ํ”„๋กœ์„ธ์Šค์˜ ์Šคํ…์„ ์ ˆ๋ฐ˜์œผ๋กœ ๋‚˜๋ˆ ์„œ ํ•˜๊ธฐ ๋•Œ๋ฌธ์ด +2. ํ‘œํ˜„๋ฒ• : `O(log N)` +3. ์ •๋ ฌ๋œ ๋ฐฐ์—ด์—๋งŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅ +4. exponent(์ง€์ˆ˜) โ†” logarithm(๋กœ๊ทธ) + +* n = $log\_232$ n์€ 32๋ฅผ 2๋กœ ๋ช‡๋ฒˆ์„ ๋‚˜๋ˆ ์•ผ 1์ด ๋‚˜์˜ฌ๊นŒ? + +> ๐Ÿ’ซ 32 / 2 = 16 โ† 1 16 / 2 = 8 โ† 2 8 / 2 = 4 โ† 3 4 / 2 = 2 โ† 4 2 / 2 = 1 โ† 5 times + +* n์€ 5 + + โ‡’ ์ด์ง„ ๊ฒ€์ƒ‰๊ณผ ๊ฐ™์Œ ์ธํ’‹์„ ๋ฐ˜์œผ๋กœ ๋‚˜๋ˆ„๊ณ  ์‹œ์ž‘ํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ + + โ‡’ Big O์˜ ํŠน์„ฑ์ƒ n = $log32$ ์•„๋ž˜์˜ 2๊ฐ€ ์‚ฌ๋ผ์ง + + โ‡’ So, `log N`์ด ๋˜๋Š” ๊ฒƒ +* ๋กœ๊ทธ ์‹œ๊ฐ„๋ณต์žก๋„์˜ **๊ทธ๋ž˜ํ”„** + +![](https://velog.velcdn.com/images/prettylee620/post/a41f1623-b1e9-46b2-a071-72a38c32956d/image.png) + +**์„ ํ˜•์‹œ๊ฐ„**๋ณด๋‹ค๋Š” `๋น ๋ฅด๊ณ `, **์ƒ์ˆ˜ ์‹œ๊ฐ„**๋ณด๋‹ค๋Š” `๋Š๋ฆผ` + +### 10) **O(1) & O(N) & O(logN) ๊ทธ๋ž˜ํ”„** + +*** + +**O(1) > O(logN) > O(N) ์ˆœ์œผ๋กœ ๊ฐ€์žฅ ํšจ์œจ์ ์ด๋‹ค.** + +O(logN)์€ ์•„์ฃผ ์กฐ๊ธˆ์”ฉ ์ฆ๊ฐ€ํ•˜๋Š” ๊ณก์„ ์„ ๊ทธ๋ฆฌ๊ณ  ์žˆ๋Š”๋ฐ O(1)๋ณด๋‹ค๋Š” ๋œ ํšจ์œจ์ ์ด์ง€๋งŒ O(N)๋ณด๋‹ค๋Š” ํ›จ์”ฌ ํšจ์œจ์ ์ด๋‹ค. + +์‚ฌ์ง„ ์ถœ์ฒ˜ : https://velog.io/@welloff\_jj/Complexity-and-Big-O-notation + +![](https://velog.velcdn.com/images/prettylee620/post/8a5efee5-46db-43cb-b974-7f1c9006b473/image.png) + +### 11) ๊ทธ๋ ‡๋‹ค๋ฉด ์—ฐ์Šต๋ฌธ์ œ + +*** + +์ถœ์ฒ˜ : https://velog.io/@on-n-on-turtle/๋ˆ„๊ตฌ๋‚˜-์ž๋ฃŒ๊ตฌ์กฐ์™€-์•Œ๊ณ ๋ฆฌ์ฆ˜-๋น…์˜คํ‘œ๊ธฐ๋ฒ• + +#### ๐Ÿ“– ๋ฆฌ์ŠคํŠธ ๋‚ด ๋ชจ๋“  ํ•ญ๋ชฉ์„ ์ถœ๋ ฅํ•จ + +```jsx +public static void printThings() { + String[] things = {"apples", "chairs", "files", "notes"}; + + for (String thing : things) + System.out.printf("Here's a thing : %s \n", thing); +} +``` + +์ด ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ `for`๋ฃจํ”„์—์„œ ๋ฐฐ์—ด์˜ ์›์†Œ๊ฐ€ 4๊ฐœ์ด๊ธฐ ๋•Œ๋ฌธ์— 4๋‹จ๊ณ„๊ฐ€ ๊ฑธ๋ฆฐ๋‹ค. + +๋งŒ์•ฝ ๋ฐฐ์—ด์˜ ์›์†Œ๊ฐ€ 10๊ฐœ์ด๋ฉด 10๋‹จ๊ณ„๊ฐ€ ๊ฑธ๋ฆด ๊ฒƒ์ด๋‹ค. + +**`for`๋ฃจํ”„์— ๋Œ€์ž…๋˜๋Š” ๋ฐฐ์—ด์˜ ์›์†Œ ๊ฐฏ์ˆ˜๋งŒํผ ๋‹จ๊ณ„๊ฐ€ ๊ฑธ๋ฆฌ๋ฏ€๋กœ ์ด ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ํšจ์œจ์„ฑ์€ O(N)์ด๋‹ค.** + +#### ๐Ÿ“– **์ฃผ์–ด์ง„ ํ•ด๊ฐ€ ์œค๋…„์ธ์ง€ ์•Œ์•„๋ด„** + +```jsx +public static boolean isLeapYear(int year) { + return (year % 100 == 0) ? (year % 400 == 0) : (year % 4 == 0); +} +``` + +**`N`์€ `number`์ด๋‹ค.** + +**ํ•จ์ˆ˜๋กœ ์ „๋‹ฌ๋œ ์ˆ˜์— ์ƒ๊ด€์—†์ด ๋‹จ๊ณ„ ์ˆ˜๊ฐ€ ์ผ์ •ํ•˜๋ฏ€๋กœ O(1)์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‹ค.** + +### 12) ์Šคํ„ฐ๋””์—์„œ ์–ป์€ ์ž์ฃผ ์“ฐ์ด๋Š” ์ž๋ฃŒ๊ตฌ์กฐ์˜ ์‹œ๊ฐ„๋ณต์žก๋„ ์ •๋ฆฌ + +> 8์›” 23์ผ ๊ตญ๋น„ ๊ฐ•์˜ ๋“ค์œผ๋ฉด์„œ ์ €๋ฒˆ์ฃผ์— ์ง„ํ–‰ํ•œ ์Šคํ„ฐ๋””์—์„œ ๋‹ค๋ฅธ ๋ถ„์ด ์ •๋ฆฌ ํ•œ ์ถ”๊ฐ€ ๋‚ด์šฉ + +#### **1๏ธโƒฃ ๋ฐฐ์—ด** + +1. ์‚ฝ์ž…/์‚ญ์ œ: O(N) +2. ํƒ์ƒ‰: O(1) + +> ๐Ÿ‘‰ ํŒŒ์ด์ฌ์—์„œ๋Š” ๋‹จ์ˆœํžˆ **List๋กœ ๊ตฌํ˜„**ํ•œ๋‹ค. ๐Ÿ‘‰ **ํƒ์ƒ‰ํ•  ๋•Œ ์‚ฌ์šฉํ•˜๊ธฐ ์ข‹์€ ์ž๋ฃŒ๊ตฌ์กฐ**(์‚ฝ์ž…์ด๋‚˜ ์‚ญ์ œ๋Š” ํ•œ์ž๋ฆฌ์”ฉ ๋’ค๋กœ ์˜ฎ๊ธฐ๊ฑฐ๋‚˜ ํ•˜๋Š” ์‹์œผ๋กœ ์ด๋ฃจ์–ด์งˆ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, ์‹œ๊ฐ„๋ณต์žก๋„๊ฐ€ O(N)์ด๋œ๋‹ค.) + +#### **2๏ธโƒฃ ๋ฒกํ„ฐ (= ๋™์ ๋ฐฐ์—ด)** + +์‚ฝ์ž…/์‚ญ์ œ: O(N) + +ํƒ์ƒ‰: O(1) + +> ๐Ÿ‘‰ ํŒŒ์ด์ฌ์—์„œ๋Š” ๋‹จ์ˆœํžˆ **List๋กœ ๊ตฌํ˜„**ํ•œ๋‹ค. C++ ๊ฐ™์€ ์–ธ์–ด์—์„œ๋Š” ๋ฐฐ์—ด๊ณผ ๋ฒกํ„ฐ๋Š” ๋‹ค๋ฅด๋‹ค. ํ•˜์ง€๋งŒ ํŒŒ์ด์ฌ์—์„œ๋Š” ๋ฐฐ์—ด๊ณผ ๊ฐ™์€ List๋กœ ์“ฐ๋ฉด ๋œ๋‹ค. List ์ž์ฒด๊ฐ€ ์ด๋ฏธ **๋™์  ๋ฐฐ์—ด์„ ์ง€์›ํ•ด์ฃผ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.** + +#### **3๏ธโƒฃ ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ** + +1. ์‚ฝ์ž…/์‚ญ์ œ: O(1) +2. ํƒ์ƒ‰: O(N) + +![](https://velog.velcdn.com/images/prettylee620/post/d1b14dd7-77fb-4682-8a2a-088c7197e469/image.png) + +3. ๋งํฌ๋“œ ๋ฆฌ์ŠคํŠธ + +> ๐Ÿ‘‰ ์‹œ๊ฐ„๋ณต์žก๋„ ์ธก๋ฉด์—์„œ ๋ฐฐ์—ด(List)์™€ ๋ฐ˜๋Œ€ ๋œ๋‹ค. (ํƒ์ƒ‰์„ ํ•˜๋ ค๋ฉด ์ˆœ๊ฐ„์ ์œผ๋กœ ํฌ์ธํ„ฐ ๋ถ€๋ถ„์„ ์ฐ๊ณ  ์ฐ๊ณ  ๊ฐ€์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํƒ์ƒ‰์ด O(N)์ด ๋˜๊ณ , **์—ฐ๊ฒฐ ์ž์ฒด์˜ ์•ž๋’ค๋กœ ์ˆ˜์ •๋งŒ ํ•˜๋ฉด ๋˜๋ฏ€๋กœ ์‚ฝ์ž…/์‚ญ์ œ์‹œ ์‹œ๊ฐ„ ๋ณต์žก๋„๊ฐ€ O(1)์ด ๋œ๋‹ค.** + +๐Ÿ‘‰ ๋งํฌ๋“œ ๋ฆฌ์ŠคํŠธ๋Š” ๋ฐฑ์ค€ ๋ฌธ์ œ๋ฅผ ํ’€๋ฉฐ ๋ง‰ ์‚ฌ์šฉํ• ์ผ์ด ๋งŽ์ง€๋Š” ์•Š์ง€๋งŒ, ๋‹ค๋ฅธ ์ž๋ฃŒ๊ตฌ์กฐ ๊ตฌํ˜„์—๋„ ๋งŽ์ด ์“ฐ์ด๋‹ˆ ์ด๋ก ์ƒ ์•Œ์•„๋‘˜ ํ•„์š”๊ฐ€ ์žˆ๋‹ค. + +**(๋ฉด์ ‘์งˆ๋ฌธ์œผ๋กœ๋„ ๋‚˜์˜ฌ ์ˆ˜ ์žˆ๊ฒ ๋‹ค! ex) "์šฐ๋ฆฌ ํ”„๋กœ๊ทธ๋žจ์€ ์‚ฝ์ž…/์‚ญ์ œ๊ฐ€ ๋นˆ๋ฒˆํ•œ๋ฐ ์–ด๋–ค ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ์“ธํ…๊ฐ€??")** + +#### **4๏ธโƒฃ ์Šคํƒ LIFO** + +1. ์‚ฝ์ž…/์‚ญ์ œ: O(1) + +> ๐Ÿ‘‰ Last In First Out ๐Ÿ‘‰ ํŒŒ์ด์ฌ์—์„œ ๊ตฌํ˜„์€ List๋กœ ํ•œ๋‹ค. + +```python +s = [1,2,3,4,5,6] + +while(len(s)>0): + print(s[-1]) + s.pop(-1) +``` + +์œ„์˜ ์ฝ”๋“œ ์ฒ˜๋Ÿผ ๊ตฌํ˜„ ๋˜๋ฉด ๋˜๋Š”๋ฐ, ๋ฐฐ์—ด์˜ ๋งˆ์ง€๋ง‰ ๊ฑฐ๋ฅผ ๊บผ๋‚ด๋Š” ๊ฑฐ๋‹ค. + +#### **5๏ธโƒฃ ํ LILO** + +1. ์‚ฝ์ž…/์‚ญ์ œ: O(1) + +> ๐Ÿ‘‰ ์ค„์„œ๊ธฐ Last in Last Out ๐Ÿ‘‰ from collections import deque ๋กœ ์ž„ํฌํŠธํ•˜์—ฌ ๋ฐํ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. + +```python +from collectionsimport deque + +q = deque() +q.append(1) +q.append(2) +q.append(3) + +while(len(q) >0): + print(q.popleft()) + +``` + +์œ„ ์ฝ”๋“œ์—์„œ ๋ณด๋ฉด popleft() ๋ผ๋Š” ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ์ฒ˜์Œ์— ์žˆ๋Š” ๊ฐ’์„ ๋นผ๋Š”๋ฐ, ๋ฐํ๋Š” popright()๋ผ๋Š” ํ•จ์ˆ˜๋„ ์ง€์›ํ•œ๋‹ค. + +๐Ÿ‘‰ ๋˜ํ•œ **ํŒŒ์ด์ฌ์—๋Š” Queue๋„ ์žˆ๊ณ  Deque๋„ ์žˆ๋Š”๋ฐ Queue๋Š” ๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋”ฉ๋„ ์ง€์›ํ•˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—ฌ์„œ Deque๋ณด๋‹ค ๋Š๋ฆฌ๋‹ค. ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ๋ฅผ ํ‘ธ๋Š” ์ž…์žฅ์ด๋ฏ€๋กœ Deque๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด๋‹ค.** + +#### **6๏ธโƒฃ ์šฐ์„ ์ˆœ์œ„ํ(๋‚ด๋ถ€๊ฐ€ Heap์œผ๋กœ ๊ตฌ์„ฑ)** + +1. ์‚ฝ์ž…/์‚ญ์ œ : O(logN) + +```python +import heapq + +# ๋ฆฌ์ŠคํŠธ๋ฅผ ํ•˜๋‚˜ ๋งŒ๋“ค๊ณ  ์‚ฌ์šฉํ•œ๋‹ค. +pq = [] +heapq.heappush(pq,3) +heapq.heappush(pq,1) +heapq.heappush(pq,2) + +while(len(pq) >0): + print(heapq.heappop(pq)) +``` + +๐Ÿ‘‰ **ํŒŒ์ด์ฌ์€ MinHeap** ์ด๋‹ค.(์ด์ง„ํŠธ๋ฆฌ์˜ ์ตœ์ƒ์œ„๋Š” ํ•ญ์ƒ ์ตœ์†Œ๊ฐ’์ธ) + +๐Ÿ‘‰ **์šฐ์„  ์ˆœ์œ„ ํ ๊ฐ™์€ ๊ฒฝ์šฐ์—๋Š” , ๋ฌธ์ œ๋ฅผ ํ’€๋ฉด์„œ ์—ฌ๋Ÿฌ ๊ฐ’๋“ค์„ ๋„ฃ๊ณ  ๋บ„๋•Œ๋งˆ๋‹ค ์ ค ์ž‘์€ ๊ฐ’์ด๋‚˜ ์ ค ํฐ ๊ฐ’์„ ์•Œ์•„์•ผ ํ•  ๋•Œ ์จ์•ผ ํ•œ๋‹ค.** Sort() ๊ฐ™์€ ๊ฒฝ์šฐ ์ „์ฒด ๋ฆฌ์ŠคํŠธ ์ž์ฒด๋ฅผ ์ •๋ ฌํ•ด์ค€๋‹ค๋Š” ์ ์—์„œ ํฐ ์ฐจ์ด์ ์„ ๊ฐ€์ง„๋‹ค. + +#### **7๏ธโƒฃ Map(๋”•์…”๋„ˆ๋ฆฌ)** + +1. ์‚ฝ์ž…/์‚ญ์ œ: O(1) + +๐Ÿ‘‰ **ํŒŒ์ด์ฌ์€ ๋”•์…”๋„ˆ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค.** + +์ถ”๊ฐ€๋กœ, c++๊ฐ™์€ ๊ฒฝ์šฐ๋Š” O(logN)์ด ๋˜๋Š”๋ฐ ์ด๋Š” c++์˜ ๋งต์€ ์†์„ ๋“ค์—ฌ๋‹ค ๋ณด๋ฉด ์ด์ง„ ๊ทธ๋ž˜ํ”„๋กœ ๊ตฌํ˜„์ด ๋˜์–ด์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๊ณ , python์˜ ๋”•์…”๋„ˆ๋ฆฌ์˜ ๊ฒฝ์šฐ๋Š” ํ•ด์‹œ๋กœ ๊ตฌํ˜„์ด ๋˜์–ด์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. + +#### **8๏ธโƒฃ ์ง‘ํ•ฉ(set)** + +์‚ฝ์ž…/์‚ญ์ œ: O(logN) + +๐Ÿ‘‰**์ค‘๋ณต์„ ์ œ๊ฑฐ**ํ•˜๋Š”๊ฒŒ ํฐ ํŠน์ง•! + +### 13) ๋น…์˜ค์˜ ์‹คํ–‰ ์‹œ๊ฐ„์ด ์งง์€ ๊ฒƒ๋ถ€ํ„ฐ ์˜ค๋ž˜ ๊ฑธ๋ฆฌ๋Š” ๊ฒƒ๊นŒ์ง€ ๋‚˜์—ด + +1. `O(1)` - ์ƒ์ˆ˜ ์‹œ๊ฐ„(Constant Time): ์ž…๋ ฅ ํฌ๊ธฐ์™€ ์ƒ๊ด€์—†์ด ํ•ญ์ƒ ์ผ์ •ํ•œ ์‹œ๊ฐ„์ด ์†Œ์š” +2. `O(log n)` - ๋กœ๊ทธ ์‹œ๊ฐ„(Logarithmic Time): ์ž…๋ ฅ์˜ ํฌ๊ธฐ์— ๋Œ€ํ•ด ๋กœ๊ทธ์˜ ํ˜•ํƒœ๋กœ ์ฆ๊ฐ€ํ•˜๋Š” ์‹œ๊ฐ„์ด ์†Œ์š” +3. `O(n)` - ์„ ํ˜• ์‹œ๊ฐ„(Linear Time): ์ž…๋ ฅ ํฌ๊ธฐ์— ๋น„๋ก€ํ•˜์—ฌ ์‹œ๊ฐ„์ด ์„ ํ˜•์œผ๋กœ ์ฆ๊ฐ€ +4. `O(n log n)` - ์„ ํ˜• ๋กœ๊ทธ ์‹œ๊ฐ„(Linearithmic Time): n๊ณผ log n์˜ ๊ณฑ๋งŒํผ ์‹œ๊ฐ„์ด ์ฆ๊ฐ€ +5. `O(n^2)` - ์ด์ฐจ ์‹œ๊ฐ„(Quadratic Time): ์ž…๋ ฅ ํฌ๊ธฐ์˜ ์ œ๊ณฑ์— ๋น„๋ก€ํ•˜์—ฌ ์‹œ๊ฐ„์ด ์ฆ๊ฐ€ +6. `O(n^k)` - ๋‹คํ•ญ ์‹œ๊ฐ„(Polynomial Time): ์ž…๋ ฅ ํฌ๊ธฐ์˜ k ์ œ๊ณฑ์— ๋น„๋ก€ํ•˜๋Š” ์‹œ๊ฐ„์ด ์†Œ์š”(k๋Š” ์ƒ์ˆ˜). +7. `O(2^n)` - ์ง€์ˆ˜ ์‹œ๊ฐ„(Exponential Time): ์ž…๋ ฅ ํฌ๊ธฐ์— ๋Œ€ํ•ด ์ง€์ˆ˜์ ์œผ๋กœ ์‹œ๊ฐ„์ด ์ฆ๊ฐ€ +8. `O(n!)` - ํŒฉํ† ๋ฆฌ์–ผ ์‹œ๊ฐ„(Factorial Time): ์ž…๋ ฅ ํฌ๊ธฐ์˜ ํŒฉํ† ๋ฆฌ์–ผ์— ๋น„๋ก€ํ•˜๋Š” ์‹œ๊ฐ„์ด ์†Œ์š” diff --git "a/developLog/algorithm-datastructure/data-structure/_ BigInteger\354\227\220 \353\214\200\355\225\234 \354\240\225\353\246\254_.md" "b/developLog/algorithm-datastructure/data-structure/_ BigInteger\354\227\220 \353\214\200\355\225\234 \354\240\225\353\246\254_.md" new file mode 100644 index 0000000..10fe88f --- /dev/null +++ "b/developLog/algorithm-datastructure/data-structure/_ BigInteger\354\227\220 \353\214\200\355\225\234 \354\240\225\353\246\254_.md" @@ -0,0 +1,210 @@ +--- +description: BigInteger์— ๋Œ€ํ•œ ์ •๋ฆฌ ๊ธ€ +--- + +# BigInteger์— ๋Œ€ํ•œ ์ •๋ฆฌ + +## 1. BigInteger๋ž€? + +> `BigInteger`๋Š” ์ž๋ฐ”์—์„œ ์ œ๊ณตํ•˜๋Š” ํด๋ž˜์Šค๋กœ, ์ž„์˜ ์ •๋ฐ€๋„ ์ •์ˆ˜(arbitrary-precision integers)๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๋ฐ ์‚ฌ์šฉ๋œ๋‹ค. + +์ •์ˆ˜๋ฅผ ํ‘œํ˜„ํ•  ๋•Œ ์ผ๋ฐ˜์ ์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ๊ธฐ๋ณธ ์ž๋ฃŒํ˜•(int, long ๋“ฑ)์€ ํฌ๊ธฐ์— ์ œํ•œ์ด ์žˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, int๋Š” 32๋น„ํŠธ์ด๋ฏ€๋กœ ์ตœ๋Œ€๊ฐ’์€ 2์˜ 31์Šน - 1์ด ๋ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ BigInteger๋Š” ์ด๋Ÿฌํ•œ ์ œํ•œ์ด ์—†์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋งค์šฐ ํฐ ์ •์ˆ˜ ๊ฐ’๋„ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ์Œ!! + +### 1) ์žฅ์  + +BigInteger ํด๋ž˜์Šค๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฉ”์„œ๋“œ๋ฅผ ์ œ๊ณตํ•˜์—ฌ ์ •์ˆ˜ ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค + +* ๋”ํ•˜๊ธฐ, ๋นผ๊ธฐ, ๊ณฑํ•˜๊ธฐ +* ๋‚˜๋ˆ„๊ธฐ, ๋‚˜๋จธ์ง€ ์—ฐ์‚ฐ +* ๊ฑฐ๋“ญ์ œ๊ณฑ +* ๋น„ํŠธ ์—ฐ์‚ฐ +* ๋น„๊ต + +์˜ˆ๋ฅผ ๋“ค์–ด, ์•„์ฃผ ํฐ ๋‘ ์ •์ˆ˜๋ฅผ ๋”ํ•˜๊ณ  ์‹ถ์„ ๋•Œ, int๋‚˜ long์œผ๋กœ๋Š” ๋ฒ”์œ„๋ฅผ ์ดˆ๊ณผํ•˜์—ฌ ์˜ค๋ฒ„ํ”Œ๋กœ์šฐ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, BigInteger๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค. + +> ์ฆ‰, ์—ฐ์‚ฐ ๋ฉ”์„œ๋“œ๊ฐ€ ๋‚ด์žฅ๋˜์–ด ์žˆ๋‹ค๊ณ  ๋ณผ ์ˆ˜ ์žˆ์Œ + +### 2) ๋‚ด์žฅ๋œ ๋ฉ”์„œ๋“œ ์ •๋ฆฌ + +> [์ฐธ๊ณ ๋ฌธ์„œ](https://docs.oracle.com/javase/8/docs/api/java/math/BigInteger.html) + +1. **add(BigInteger val)**: ํ˜„์žฌ BigInteger์™€ ์ธ์ˆ˜๋กœ ์ „๋‹ฌ๋œ BigInteger๋ฅผ ๋”ํ•œ๋‹ค. +2. **subtract(BigInteger val)**: ํ˜„์žฌ BigInteger์—์„œ ์ธ์ˆ˜๋กœ ์ „๋‹ฌ๋œ BigInteger๋ฅผ ๋บ€๋‹ค. +3. **multiply(BigInteger val)**: ํ˜„์žฌ BigInteger์— ์ธ์ˆ˜๋กœ ์ „๋‹ฌ๋œ BigInteger๋ฅผ ๊ณฑํ•œ๋‹ค. +4. **divide(BigInteger val)**: ํ˜„์žฌ BigInteger๋ฅผ ์ธ์ˆ˜๋กœ ์ „๋‹ฌ๋œ BigInteger๋กœ ๋‚˜๋ˆˆ๋‹ค. ๋ชซ์„ ๋ฐ˜ํ™˜ +5. **remainder(BigInteger val)**: ํ˜„์žฌ BigInteger๋ฅผ ์ธ์ˆ˜๋กœ ์ „๋‹ฌ๋œ BigInteger๋กœ ๋‚˜๋ˆˆ ๋‚˜๋จธ์ง€๋ฅผ ๋ฐ˜ํ™˜ +6. **pow(int exponent)**: ํ˜„์žฌ BigInteger๋ฅผ ์ง€์ˆ˜๋กœ ์ œ๊ณฑ +7. **abs()**: ํ˜„์žฌ BigInteger์˜ ์ ˆ๋Œ“๊ฐ’์„ ๋ฐ˜ํ™˜ +8. **negate()**: ํ˜„์žฌ BigInteger์˜ ๋ถ€ํ˜ธ๋ฅผ ๋ฐ”๊พผ๋‹ค. +9. **compareTo(BigInteger val)**: ํ˜„์žฌ BigInteger๋ฅผ ์ธ์ˆ˜๋กœ ์ „๋‹ฌ๋œ BigInteger์™€ ๋น„๊ตํ•ฉ๋‹ˆ๋‹ค. ๊ฐ’์ด ๊ฐ™์œผ๋ฉด 0, ํ˜„์žฌ BigInteger๊ฐ€ ํฌ๋ฉด ์–‘์ˆ˜, ์ž‘์œผ๋ฉด ์Œ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. +10. **equals(Object x)**: ํ˜„์žฌ BigInteger์™€ ์ง€์ •๋œ ๊ฐ์ฒด๋ฅผ ๋น„๊ตํ•˜์—ฌ ๊ฐ™์œผ๋ฉด true๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. +11. **toString()**: BigInteger๋ฅผ ๋ฌธ์ž์—ด๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. + +## ๐Ÿค” ์™œ? ์ฐพ์•„๋ดค๋Š”๋ฐ? + +### 1) ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ณต๋ถ€ํ•˜๋‹ค๊ฐ€ + +> [์—„์ฒญ๋‚œ ๋ถ€์ž2](https://www.acmicpc.net/problem/1271) + +![](https://velog.velcdn.com/images/prettylee620/post/bbf184a6-b64e-4960-af65-6f1f55f95263/image.png) + +์—ฌ๊ธฐ์„œ ๊ฐ€์žฅ ํ•ต์‹ฌ์€ ![](https://velog.velcdn.com/images/prettylee620/post/1fce6176-b174-4d35-bba0-ac9cbf39aba7/image.png) + +์ด๊ฑฐ์ž„!! + +๊ทผ๋ฐ ๋‚˜๋Š” ํ’€์ด ๊ณผ์ •์—์„œ ๋‹ค๋ฅธ ๊ฑธ ๋ฌธ์ œ ์‚ผ๊ณ  ์žˆ์—ˆ๋‹ค. + +### 2) ํ•ด๊ฒฐ๊ณผ์ • + +#### 1.InputMismatch ๋Ÿฐํƒ€์ž„์—๋Ÿฌ + +![](https://velog.velcdn.com/images/prettylee620/post/1a9abcba-45e0-498f-b82a-854f8c2a1195/image.png) + +์ด ๋Ÿฐํƒ€์ž„์—๋Ÿฌ๋Š” InputMismatchException์€ **์ž…๋ ฅ ๋ฐ์ดํ„ฐ๊ฐ€ ์˜ˆ์ƒํ•œ ํ˜•์‹๊ณผ ์ผ์น˜ํ•˜์ง€ ์•Š์„ ๋•Œ ๋ฐœ์ƒํ•˜๋Š” ๋Ÿฐํƒ€์ž„ ์˜ˆ์™ธ**๋กœ, ์ด ์˜ˆ์™ธ๋Š” ์ฃผ๋กœ Scanner ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ž…๋ ฅ์„ ํŒŒ์‹ฑํ•  ๋•Œ ๋ฐœ์ƒํ•œ๋‹ค. + +```java +import java.util.Scanner; + +public class Main { + public static void main(String[] args) { + + int m = 0; + int n = 0; + + try { + Scanner in = new Scanner(System.in); + + m = in.nextInt(); + n = in.nextInt(); + + int result = m / n; + int remainder = m % n; + + System.out.println(result); + System.out.println(remainder); + } catch (Exception e) { + e.printStackTrace(); + } + } +} +``` + +> ์—ฌ๊ธฐ์„œ ์Œ... int์— ๋ฌธ์ œ์ธ๊ฐ€ ์‹ถ์–ด์„œ long์œผ๋กœ ๋ฐ”๊ฟจ์Œ + +```java +import java.util.Scanner; + +public class Main { + public static void main(String[] args) { + + long m = 0; + long n = 0; + + Scanner in = new Scanner(System.in); + + m = in.nextLong(); + n = in.nextLong(); + + long result = m / n; + long remainder = m % n; + + System.out.println(result); + System.out.println(remainder); + + + } +} +``` + +๊ทธ๋Ÿฌ๋‚˜.. ๋˜‘๊ฐ™์•˜๊ณ ... ์ฐพ์•„๋ณด๋‹ˆ ์ผ๋ฐ˜ ํƒ€์ž…์œผ๋กœ๋Š” ์•ˆ๋˜์—ˆ๋˜ ๊ฒƒ... BigInteger์ด ํ•„์š”ํ–ˆ๋‹ค. + +#### 2. NoSuchElement ๋Ÿฐํƒ€์ž„์—๋Ÿฌ + +![](https://velog.velcdn.com/images/prettylee620/post/176c2c3e-7553-463b-bc43-985d898bdd6c/image.png) + +NoSuchElement ๋Ÿฐํƒ€์ž„์—๋Ÿฌ๋Š” Scanner ๊ฐ์ฒด์—์„œ nextLine() ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ–ˆ์„ ๋•Œ ์ž…๋ ฅ ์ŠคํŠธ๋ฆผ์—์„œ ์ฝ์„ ์š”์†Œ๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ์— ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ์˜ˆ์™ธ๋กœ, ์ด๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ์ž…๋ ฅ์ด ๋๋‚œ ํ›„์— ๋˜ ๋‹ค์‹œ ์ž…๋ ฅ์„ ์š”๊ตฌํ•  ๋•Œ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค. + +์˜ˆ๋ฅผ ๋“ค์–ด, ์‚ฌ์šฉ์ž๊ฐ€ ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰ ์ค‘์— ์—”ํ„ฐํ‚ค๋ฅผ ๋ˆ„๋ฅด๊ฑฐ๋‚˜ ์ž…๋ ฅ์„ ๋งˆ์น˜๊ณ  ์—”ํ„ฐํ‚ค๋ฅผ ์ž…๋ ฅํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ์— ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Œ!! + +```java +import java.util.Scanner; +import java.math.BigInteger; + +public class Main { + public static void main(String[] args) { + + String m; + String n; + + Scanner in = new Scanner(System.in); + + BigInteger number1; + BigInteger number2; + + try{ + m = in.nextLine(); + n = in.nextLine(); + + number1 = new BigInteger(m); + number2 = new BigInteger(n); + + BigInteger result = number1.divide(number2); + BigInteger remainder = number1.remainder(number2); + + System.out.println(result); + System.out.println(remainder); + } + catch (NumberFormatException e) { + System.out.println("์˜ฌ๋ฐ”๋ฅธ ์ˆซ์ž ํ˜•์‹์ด ์•„๋‹™๋‹ˆ๋‹ค."); + } + + } +} +``` + +์ฆ‰, `nextLine`์œผ๋กœ ๋ฐ›์•„์„œ ๊ทธ๋Ÿผ + +### 3) ์ตœ์ข… ์ฝ”๋“œ + +```java +import java.util.Scanner; +import java.math.BigInteger; + +public class Main { + public static void main(String[] args) { + + String m; + String n; + + Scanner in = new Scanner(System.in); + + BigInteger number1; + BigInteger number2; + + try{ + m = in.next(); + n = in.next(); + + number1 = new BigInteger(m); + number2 = new BigInteger(n); + + BigInteger result = number1.divide(number2); + BigInteger remainder = number1.remainder(number2); + + System.out.println(result); + System.out.println(remainder); + } + catch (NumberFormatException e) { + System.out.println("์˜ฌ๋ฐ”๋ฅธ ์ˆซ์ž ํ˜•์‹์ด ์•„๋‹™๋‹ˆ๋‹ค."); + } + catch (ArithmeticException e) { + System.out.println("0์œผ๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค."); + } + + } +} +``` + +## ์†Œ๊ฐ + +ํ•ญ์ƒ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ณต๋ถ€ ๋ฏธ๋ค˜๋Š”๋ฐ.. ํŒŒ์ด์ฌ์œผ๋กœ ํ•˜๊ธฐ ์ „์— ํšŒ์‚ฌ์—์„œ ์ž๋ฐ”์“ฐ๋‹ˆ๊นŒ ์ž๋ฐ”๋กœ ๊ณต๋ถ€ํ•ด๋ด์•ผ์ง€ diff --git "a/developLog/algorithm-datastructure/data-structure/_ \353\260\260\354\227\264_array__.md" "b/developLog/algorithm-datastructure/data-structure/_ \353\260\260\354\227\264_array__.md" new file mode 100644 index 0000000..e0a31ea --- /dev/null +++ "b/developLog/algorithm-datastructure/data-structure/_ \353\260\260\354\227\264_array__.md" @@ -0,0 +1,95 @@ +# ๋ฐฐ์—ด(array) + +> ์ถœ์ฒ˜ : https://www.youtube.com/watch?v=NFETSCJON2M\&list=PL7jH19IHhOLMdHvl3KBfFI70r9P0lkJwL\&index=3 + +## 1. ์‹œ๊ฐ„๋ณต์žก๋„๋ž€? + +*** + +* ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ์˜ ์˜คํผ๋ ˆ์ด์…˜ ํ˜น์€ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ์–ผ๋งˆ๋‚˜ ๋Š๋ฆฌ๊ณ  ๋น ๋ฅธ์ง€ ์ธก์ •ํ•˜๋Š” ๊ฒƒ +* `์‹ค์ œ ์‹œ๊ฐ„`์„ ์ธก์ •ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์–ผ๋งˆ๋‚˜ `๋งŽ์€ ๋‹จ๊ณ„[steps]`๊ฐ€ ์žˆ๋Š”๊ฐ€๋กœ ์ธก์ • +* ๋‹จ๊ณ„๊ฐ€ ์ ์„์ˆ˜๋ก ์ข‹์€ ๊ฒƒ +* 5 step > 20 step + +## 2. ๋ฉ”๋ชจ๋ฆฌ ๊ด€์ ์—์„œ ๋ฐฐ์—ด์ด ์–ด๋–ป๊ฒŒ ๋ณด์ผ๊นŒ? + +*** + +### **โœจ** ๋ฉ”๋ชจ๋ฆฌ์˜ ์ข…๋ฅ˜ + +1. **volatile(ํœ˜๋ฐœ์„ฑ) ๋ฉ”๋ชจ๋ฆฌ** : RAM, ์ปดํ“จํ„ฐ๋ฅผ ๊ป๋‹ค ํ‚ค๋ฉด ๋ฐ์ดํ„ฐ๊ฐ€ ์‚ฌ๋ผ์ง + +* ํ”„๋กœ๊ทธ๋žจ์ด ๋Œ์•„๊ฐ€๊ณ , `๋ณ€์ˆ˜๋ฅผ ์ƒ์„ฑ` ํ•  ๋•Œ, RAM์— ์ €์žฅ +* **RAM**(Random Access Memory) : ํ•˜๋“œ ๋“œ๋ผ์ด๋ธŒ๋ณด๋‹ค ๋ฐ์ดํ„ฐ ์ฝ๋Š” ๊ฒƒ์ด ๋น ๋ฅด๋ฉฐ, ๋ฐ์ดํ„ฐ ์ ‘์†์„ ๋žœ๋ค์œผ๋กœ ๊ฐ€๋Šฅ + +| 001 | 002 | 003 | +| --- | --- | --- | +| 004 | 005 | 006 | +| 007 | 008 | 009 | +| 010 | 011 | 012 | + + + +* ์œ„์™€ ๊ฐ™์ด RAM์ด `๋ฐ์ดํ„ฐ๋ฅผ ๋„ฃ์€ ๋ฐ•์Šค`๋ผ๊ณ  ์ƒ๊ฐํ•ด๋ณด๋ฉด ํ”„๋กœ๊ทธ๋žจ์ด **RAM์—๊ฒŒ 006์œผ๋กœ ๊ฐ€์ฃผ์„ธ์š” ํ•˜๋ฉด ๋žœ๋คํ•˜๊ฒŒ ์ ‘์† ๊ฐ€๋Šฅ**ํ•˜๊ธฐ์— ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๋Š” ๊ฒƒ์ด ๋น ๋ฅธ ๊ฒƒ, ๋ฐ”๋กœ ์ด๋™ ๊ฐ€๋Šฅ(์ˆœ์ฐจ์ ์œผ๋กœ ๊ฐ€๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ)\ + + +2. **non-volatile(๋น„ํœ˜๋ฐœ์„ฑ) ๋ฉ”๋ชจ๋ฆฌ** + +* ํ•˜๋“œ ๋“œ๋ผ์ด๋ธŒ ๊ฐ™์€ ๊ฒƒ, ์ปดํ“จํ„ฐ๋ฅผ ๊ป๋‹ค ํ‚ค๋ฉด ๋ฐ์ดํ„ฐ๊ฐ€ ์‚ฌ๋ผ์ง€์ง€ ์•Š์Œ +* ์ฆ‰, ๋ฉ”๋ชจ๋ฆฌ ๊ด€์ ์—์„œ ๋ฐฐ์—ด์„ ๋งŒ๋“ค๋•Œ, ์ปดํ“จํ„ฐ์—๊ฒŒ **์ด๊ฒŒ ์–ผ๋งˆ๋‚˜ ๊ธด์ง€** ์„ค๋ช…ํ•ด์•ผ ํ•จ +* ๋‚˜์˜ ๋ฐฐ์—ด์€ 4๊ฐœ ๋งŒํผ ๊ธธ์–ด ๋ฏธ๋ฆฌ **์˜ˆ์•ฝ/ํ• ๋‹น**ํ•ด์ค˜! ๋ฉ”๋ชจ๋ฆฌ ์•ˆ์—์„œ ๋ฐ•์Šค๋“ค์ด ๋‚˜๋ž€ํžˆ ์œ„์น˜ํ•  ์ˆ˜ ์žˆ๊ฒŒ +* ๋ฐฐ์—ด์€ ๊ฒ€์ƒ‰, ์ถ”๊ฐ€,์‚ญ์ œ์‹œ ๋Š๋ ค์ง + +## 3. ๋ฐฐ์—ด + +*** + +### **โœจ** Reading : O(1) + +**๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ** 001 002 003 004 + +**index** 0 1 2 3 + +* **์œ„์น˜**๋งŒ ์•Œ๋ฉด, ๋ฐฐ์—ด์˜ ๋ฐ์ดํ„ฐ์— ์ ‘์† ๊ฐ€๋Šฅ + + โ‡’ **๋ฐฐ์—ด์—์„œ ์ฝ์–ด๋‚ด๋Š” ๊ฒƒ์ด ๋น ๋ฆ„**, ์ปดํ“จํ„ฐ๋Š” ๋ฐฐ์—ด์ด ์–ด๋””์„œ ์‹œ์ž‘๋˜๋Š” ์ง€ ์•„๋‹ˆ๊นŒ +* EX. ํ”ผ์ž๋ฅผ ์›ํ•˜๋ฉด ์ปดํ“จํ„ฐ์—๊ฒŒ ์ธ๋ฑ์Šค 1๋ฒˆ์˜ ๊ฐ’์„ ๋‹ฌ๋ผ๊ณ  ํ•˜๋ฉด ๋จ +* ๋งŽ์€ ์ž๋ฃŒ๋ฅผ ์ฝ์–ด๋‚ด๋ ค๋ฉด ๋ฐฐ์—ด์ด Good, ๋ฐฐ์—ด์˜ ์š”์†Œ์˜ ๊ฐœ์ˆ˜ ์ƒ๊ด€์—†์ด `Random` ํ•˜๊ฒŒ ์ฝ์–ด๋‚ด๋‹ˆ๊นŒ +* ๋ฐฐ์—ด์—์„œ ์š”์†Œ์— ์ ‘๊ทผํ•˜๊ฑฐ๋‚˜ ๊ฐ’์„ ๋ณ€๊ฒฝํ•˜๋Š” ์ž‘์—…์€ **ํ•ญ์ƒ ์ž…๋ ฅ ํฌ๊ธฐ์˜ ๊ด€๊ณ„ ์—†์ด ์ผ์ •ํ•œ ์‹œ๊ฐ„ ๋‚ด์— ์‹คํ–‰** +* ์˜ˆ๋ฅผ ๋“ค์–ด, ๋ฐฐ์—ด์˜ ์ฒซ ๋ฒˆ์งธ ์š”์†Œ์— ์ ‘๊ทผํ•˜๊ฑฐ๋‚˜ ๊ฐ’์„ ๋ณ€๊ฒฝํ•˜๋Š” ์ž‘์—…์€ ํ•ญ์ƒ ๊ณ ์ •๋œ ์‹œ๊ฐ„๋งŒํผ ๊ฑธ๋ฆฐ๋‹ค. +* ์ด๋Š” ์ž…๋ ฅ ํฌ๊ธฐ์— ๊ด€๊ณ„์—†์ด ๋™์ผํ•˜๊ฒŒ ๋น ๋ฅด๊ฒŒ ์‹คํ–‰๋˜๋ฉฐ, ์ด๋Ÿฌํ•œ ํŠน์„ฑ ๋•Œ๋ฌธ์— ๋ฐฐ์—ด์˜ Big O ํ‘œ๊ธฐ๋ฒ•์€ \*\*`O(1)`\*\*๋กœ ํ‘œํ˜„ + +### **โœจ** Searching : O(n) + +* ํ•ด๋‹น ๊ฐ’(=ex. ํ”ผ์ž)๊ฐ€ **๋ฐฐ์—ด์— ์žˆ๋Š”์ง€, ์—†๋Š”์ง€ ๋ชจ๋ฆ„** +* ์–ด๋””์— ์žˆ๋Š”์ง€๋„ ๋ชจ๋ฅด๊ธฐ ๋•Œ๋ฌธ์— ๊ฒ€์ƒ‰ +* ํ•˜๋‚˜ํ•˜๋‚˜ ๋‹ค ๋’ค์ ธ๋ด์•ผ ํ•จ +* So, ์ฝ๋Š” ๊ฒƒ๋ณด๋‹ค ์‹œ๊ฐ„์ด ๋งŽ์ด ๊ฑธ๋ฆผ +* `Random Access`๊ฐ€ ์žˆ์–ด ์ฃผ์†Œ๋ฅผ ์ฐพ์•„ ๋ฐ•์Šค์— ์‰ฝ๊ฒŒ ์ ‘๊ทผ์€ ๊ฐ€๋Šฅํ•˜๋‚˜, ๊ทธ ๋ฐ•์Šค๋ฅผ ์—ด์–ด์•ผ ๊ฐ’์„ ํ™•์ธ ๊ฐ€๋Šฅ +* ๋ฐฐ์—ด์˜ ์•„์ดํ…œ์„ ํ•˜๋‚˜ํ•˜๋‚˜ **์—ด์–ด๋ณด๊ณ  ๋งž๋Š”์ง€ ์ฒดํฌํ•˜๋Š” ๊ณผ์ •์„ ํ•˜๋‚˜ํ•˜๋‚˜ ํ•ด์•ผ**ํ•จ +* **Linear Search\[์„ ํ˜• ๊ฒ€์ƒ‰]** : ์ˆœ์„œ๋Œ€๋กœ 0๋ถ€ํ„ฐ ๋๊นŒ์ง€ ์ฐจ๊ทผ์ฐจ๊ทผ ์ฐพ๋Š” ๊ฒƒ + +### **โœจ** Insert\[Add] ํ˜น์€ ๋ฐฐ์—ด์— ์“ฐ๊ธฐ : O(n) + +* ๋งŒ์•ฝ, โ€œtomatoโ€๋ฅผ ๋„ฃ๊ณ  ์‹ถ๋‹ค๋ฉด, ๋ฏธ๋ฆฌ ๊ณต๊ฐ„์„ ํ™•๋ณดํ•ด๋’€์œผ๋‹ˆ๊นŒ ๊ณต๊ฐ„ ๊ฑฑ์ •์€ No! +* ๊ฒฐ๊ตญ `์–ด๋””์—` ํ† ๋งˆํ† ๋ฅผ ์ถ”๊ฐ€ํ•  ๊ฒƒ์ธ๊ฐ€! +* ๋งŒ์•ฝ ์ค‘๊ฐ„์ด ์•ž์— `์ถ”๊ฐ€`ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด **๋‚˜๋จธ์ง€ ๊ฐ’๋“ค์„ ์˜ฎ๊ฒจ์•ผ ํ•จ**(์•„๋ž˜์™€ ๊ฐ™์ด) +* ๊ทผ๋ฐ ๋งŒ์•ฝ.. **๊ณต๊ฐ„์ด ๊ฝ‰ ์ฐจ ์žˆ๋Š”๋ฐ** ๊ฐ’์„ ์ถ”๊ฐ€ํ•˜๋ฉด ๋ฐฐ์—ด์˜ ๊ธธ์ด๋Š” ์ •ํ•ด์ ธ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ณค๋ž€ +* โ‡’ **ํ•ด๊ฒฐ๋ฐฉ์•ˆ** : ์ƒˆ๋กœ์šด ๋ฐฐ์—ด์„ ๋งŒ๋“ค๊ณ , ๊ทธ ๋ฐฐ์—ด์— ์ด์ „ ๋ฐฐ์—ด์„ `๋ณต์‚ฌ`ํ•˜๊ณ , ์ƒˆ๋กœ `์ถ”๊ฐ€`ํ•ด์•ผ ํ•จ +* ๊ทธ๋ž˜์„œ ์‹œ๊ฐ„์ด ์˜ค๋ž˜๊ฑธ๋ฆฌ๊ณ  ๋ณต์žก + +### **โœจ** Delete : O(N) + +๋ฐฐ์—ด์— ๋ญ”๊ฐ€๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ๊ณผ ๋น„์Šท + +๋ฐฐ์—ด์„ ์ด๋ฆฌ์ €๋ฆฌ ์›€์ง์—ฌ์•ผ ํ•จ + +EX. โ€œice creamโ€์„ ์—†์• ๊ณ  ์‹ถ์–ด โ‡’ ์‚ญ์ œ ํ›„ ๊ณต๊ฐ„์„ ์ฑ„์šฐ๊ธฐ ์œ„ํ•ด ์•ž์œผ๋กœ ๋•ก๊ฒจ์•ผ ํ•จ + +## 4. ๊ฒฐ๋ก  + +*** + +* ๋ฐฐ์—ด์˜ ํ†ตํ•ฉ์ ์ธ ๋น…์˜ค๋Š” ๋ฐฐ์—ด์˜ ๊ฐ ์—ฐ์‚ฐ์˜ ์ตœ์•…์˜ ๊ฒฝ์šฐ(**`O(N)`**)๋ฅผ ์ข…ํ•ฉํ•œ ๊ฒฐ๊ณผ์ผ ์ˆ˜ ์žˆ๋‹ค. +* ๋ฐฐ์—ด์€ ์ ‘๊ทผ ์—ฐ์‚ฐ์„ ์ œ์™ธํ•˜๋ฉด **ํƒ์ƒ‰, ์‚ฝ์ž…, ์‚ญ์ œ ์—ฐ์‚ฐ์— ๋Œ€ํ•ด ๋น„๊ต์  ํšจ์œจ์ ์ด์ง€ ์•Š์€ ํŽธ**์ด๋ฏ€๋กœ, ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์„ค๊ณ„ํ•  ๋•Œ ์ด๋Ÿฌํ•œ ์—ฐ์‚ฐ์˜ ํšจ์œจ์„ฑ์„ ๊ณ ๋ ค +* ์˜คํžˆ๋ ค ๋ฐ์ดํ„ฐ ์ถ”๊ฐ€ ๋ฐ ์‚ญ์ œ๋Š” ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ๊ฐ€ ๋” ๋น ๋ฅด๊ณ  ๋ฐฐ์—ด์€ ๋Š๋ฆผ ๋ฐฐ์—ด์€ ๋ชจ๋“  ์ƒ์ž๋ฅผ ์•ž์œผ๋กœ ์˜ฏ๊ฒจ์•ผ ์ถ”๊ฐ€๊ฐ€ ๊ฐ€๋Šฅํ•˜์ง€๋งŒ, ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ๋Š” ์„ ์„ ๋ฐ”๊ฟ”์„œ ์—ฐ๊ฒฐํ•ด์ฃผ๊ธฐ๋งŒ ํ•˜๋ฉด ๋˜๊ธฐ ๋•Œ๋ฌธ diff --git "a/developLog/algorithm-datastructure/data-structure/_ \354\212\244\355\203\235\352\263\274 \355\201\220_.md" "b/developLog/algorithm-datastructure/data-structure/_ \354\212\244\355\203\235\352\263\274 \355\201\220_.md" new file mode 100644 index 0000000..02e6831 --- /dev/null +++ "b/developLog/algorithm-datastructure/data-structure/_ \354\212\244\355\203\235\352\263\274 \355\201\220_.md" @@ -0,0 +1,120 @@ +# ์Šคํƒ๊ณผ ํ + +> ์ถœ์ฒ˜ : https://www.youtube.com/watch?v=Nk\_dGScimz8 + +## 1. ๋“ค์–ด๊ฐ€๊ธฐ ์ „ + +> ์Šคํƒ๊ณผ ํ๋Š” ์šฐ๋ฆฌ์˜ ์ƒ์ƒ์—๋งŒ ์กด์žฌ ์‹ค์ œ๋กœ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋“ค์—์„œ๋Š” ์กด์žฌํ•˜์ง€ ์•Š์Œ ์Šคํƒ๊ณผ ํ๋Š” **์ผ์ข…์˜ ๊ทœ์น™** + +### ์ถ”์ƒ์  ์ž๋ฃŒ๊ตฌ์กฐ + +* ์ž๋ฃŒ๊ตฌ์กฐ์˜ ๋ฐฉ๋ฒ•์ด ์ฝ”๋“œ๋กœ ์ •์˜ ๋œ ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ๊ทธ ๊ตฌ์กฐ์˜ ํ–‰๋™ ์–‘์‹์—๋งŒ ์„ค๋ช… +* ์Šคํƒ๊ณผ ํ๋Š” **๊ฒฐ๊ตญ ๋ฐฐ์—ด ์œ„์— ์–ด๋–ค ๊ทœ์น™์„ ์„ค์ •ํ•œ ๋ชจ์Šต** + +## **2. ์Šคํƒ** + +### 1) **์Šคํƒ์˜ ๊ฐœ๋…** + +์Šคํƒ์€ ํ•œ ๋ฐฉํ–ฅ์œผ๋กœ๋งŒ ์ž๋ฃŒ๋ฅผ ๋„ฃ๊ณ  ๊บผ๋‚ผ ์ˆ˜ ์žˆ๋Š” **`LIFO(Last-In-First-Out)`** ํ˜•์‹์˜ ์ž๋ฃŒ ๊ตฌ์กฐ + +* **`์„ ์ž…ํ›„์ถœ`** ๊ตฌ์กฐ ๋˜๋Š” **`ํ›„์ž… ์„ ์ถœ`** ๊ตฌ์กฐ : ๋ฐ•์Šค๋Š” ์•„๋ž˜๋ถ€ํ„ฐ ์œ„๋กœ ์Œ“๋Š”๋ฐ ๊ทธ ์•„๋ž˜์— ์žˆ๋Š” ๋ฐ•์Šค๋ฅผ ์น˜์šฐ๊ธฐ ์œ„ํ•ด์„œ ์œ„์— ์žˆ๋Š” ๋ฐ•์Šค๋ถ€ํ„ฐ ๋‚ด๋ ค์•ผ ํ•จ +* stack.append() : **์‚ฝ์ž…(PUSH)**, stack.pop() : **์‚ญ์ œ(POP)** +* print(stack\[::-1]) : ์ตœ์ƒ๋‹จ ์›์†Œ๋ถ€ํ„ฐ ์ถœ๋ ฅ +* print(stack) : ์ตœํ•˜๋‹จ ์›์†Œ๋ถ€ํ„ฐ ์ถœ๋ ฅ(๋จผ์ € ๋“ค์–ด์˜จ ๋ฐ์ดํ„ฐ๋“ค) + +### 2) ์˜ˆ์‹œ + +* ํŒฌ์ผ€์ดํฌ๋ฅผ ์œ„๋กœ ์Œ“๋Š”๋‹ค๊ณ  ํ–ˆ์„ ๋•Œ ๋ง‰ ๋งŒ๋“  ๊ฑธ ์œ„๋กœ ์˜ฌ๋ฆผ ๊ทธ๋ฆฌ๊ณ  ๋งˆ์ง€๋ง‰์— ์˜ฌ๋ฆฐ ๊ฑฐ\[Last in] ๋จผ์ € ๋จน๋Š”\[First Out] ํ˜•์‹ + +### 3) **์Šคํƒ์˜ ๊ตฌ์กฐ** + +* **ํ•œ ๋ฐฉํ–ฅ์œผ๋กœ๋งŒ** PUSH์™€ POP์„ ์ด์šฉํ•˜์—ฌ ์ž๋ฃŒ๋ฅผ ๋„ฃ๊ณ  ๊บผ๋‚ธ๋‹ค +* TOP์€ ์Šคํƒ์—์„œ ๊ฐ€์žฅ ์œ„์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋กœ, **์Šคํƒ ํฌ์ธํ„ฐ**๋กœ ๋ถˆ๋ฆฐ๋‹ค. + +![](https://velog.velcdn.com/images/prettylee620/post/2dcc061c-d90c-45fc-ac02-13c3e9973105/image.png) + +### 4) **์Šคํƒ ์‘์šฉ ๋ถ„์•ผ** + +* **์ธํ„ฐ๋ŸฝํŠธ์˜ ์ฒ˜๋ฆฌ** : ํ˜„์žฌ ์ง„ํ–‰ ์ค‘์ธ ๋ช…๋ น์–ด ์œ„์น˜๋ฅผ ์Šคํƒ์— pushํ•˜๊ณ , ์ธํ„ฐ๋ŸฝํŠธ ๋ฐœ์ƒ ์ƒํ™ฉ ์ฒ˜๋ฆฌ ํ›„ ์Šคํƒ์—์„œ pop์„ ํ†ตํ•ด ์ „์— ์ง„ํ–‰์ค‘์ด๋˜ ๊ฒƒ์„ ๋ฐ›์•„์˜ด, **์„œ๋ธŒ๋ฃจํ‹ด ํ˜ธ์ถœ ์ž‘์—…** +* **ํ•จ์ˆ˜ ํ˜ธ์ถœ(์žฌ๊ท€ ํ˜ธ์ถœ ํฌํ•จ)** : ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœ ์‹œ ํ˜„์žฌ ์ง„ํ–‰ ์ค‘์ธ ๋ช…๋ น์–ด ์ฃผ์†Œ๋ฅผ ์Šคํƒ์— ์ €์žฅ +* **ํ›„์œ„ํ‘œํ˜„ ์—ฐ์‚ฐ** : postifix ๊ณ„์‚ฐ์‹œ ์‚ฌ์šฉ +* **๊นŠ์ด ์šฐ์„  ํƒ์ƒ‰(DFS : Depth-First Search)** : ๊นŠ์ด ๋‚ด๋ ค๊ฐˆ ๋•Œ๋งˆ๋‹ค ์Šคํƒ์— ๊ฐ’์„ pushํ•˜๊ณ , ๋” ์ด์ƒ ๊นŠ์ด ๊ฐˆ ๊ณณ์ด ์—†์„ ๊ฒฝ์šฐ ์Šคํƒ์—์„œ popํ•œ ๋…ธ๋“œ์™€ ์ธ์ ‘ํ•œ ๋…ธ๋“œ๋ฅผ ์ฐพ์Œ +* ํƒ์ƒ‰์„ ํ•˜๊ณ  ์žˆ๋Š” ๋ถ„๊ธฐ์—์„œ **์™„๋ฒฝํ•˜๊ฒŒ ํƒ์ƒ‰์„ ํ•œ ์ดํ›„** ๋‹ค๋ฅธ ๋ถ„๊ธฐ๋ฅผ ํƒ์ƒ‰ + +![](https://velog.velcdn.com/images/prettylee620/post/a30c0618-c8b7-4091-bc49-b0205ad71469/image.png) + +### 5) **BFS๋ž€** + +* ๋„ˆ๋น„ ์šฐ์„  ํƒ์ƒ‰ +* **๊ฐ€๊นŒ์šด ๋…ธ๋“œ๋ถ€ํ„ฐ ํƒ์ƒ‰** +* ์„ ์ž…์„ ์ถœ ๋ฐฉ์‹์ธ ํ ์ž๋ฃŒ๊ตฌ์กฐ ์ด์šฉ +* ์‹œ์ž‘ ๋…ธ๋“œ๋ฅผ ๋„ฃ์€ ๋‹ค์Œ ๋ฐฉ๋ฌธ ์ฒ˜๋ฆฌ ํ›„ ์‹œ์ž‘ ๋…ธ๋“œ๋ฅผ ๊บผ๋‚ด๊ณ  ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์€ ์ธ์ ‘ ๋…ธ๋“œ ๋ชจ๋‘๋ฅผ ํ์— ์‚ฝ์ž… +* ์‹ค์ œ ์ˆ˜ํ–‰ ์‹œ๊ฐ„ DFS๋ณด๋‹ค ์ข‹์€ ํŽธ +* **A(์ธ์ ‘ํ•œ B, C, D๋ฐฉ๋ฌธ) > B -> C -> D -> E(B์— ์ธ์ ‘ํ•œ)** **> F(C์— ์ธ์ ‘ํ•œ) > G(F์— ์ธ์ ‘ํ•œ)** + +## **3. ํ(Queue)** + +### **1) ํ์˜ ๊ฐœ๋…** + +: ํ๋Š” ํ•œ์ชฝ ๋์—์„œ๋Š” ์‚ฝ์ž… ์ž‘์—…์ด ์ด๋ค„์ง€๊ณ , ๋ฐ˜๋Œ€์ชฝ ๋์—์„œ๋Š” ์‚ญ์ œ ์ž‘์—…์ด ์ด๋ฃจ์–ด์ง€ **`FIFO(First-In-First-Out)`** ํ˜•์‹์˜ ์ž๋ฃŒ ๊ตฌ์กฐ + +* ๋Œ€๊ธฐ์ค„์— ๋น„์œ  +* **์„ ์ž…์„ ์ถœ ๊ตฌ์กฐ** : ๋‚˜์ค‘์— ์˜จ ์‚ฌ๋žŒ์ผ์ˆ˜๋ก ๋‚˜์ค‘์— ๋“ค์–ด๊ฐ€๋Š” ๊ณต์ •ํ•œ ์ž๋ฃŒ๊ตฌ์กฐ +* queue.append(): ์‚ฝ์ž…, `queue.popleft()` : ์‚ญ์ œ + +#### ์˜ˆ์‹œ + +* ์ค„ ๋งจ ์•ž์— ์„œ ์žˆ๋Š” ์‚ฌ๋žŒ์ด ๊ฐ€์žฅ ๋จผ์ € ๋ฒ„์Šค๋ฅผ ํƒ€๋Š” ์›๋ฆฌ +* ํ **๋’ค์—** ์š”์†Œ๋ฅผ `์ถ”๊ฐ€` +* ํ **์•ž์—** ์š”์†Œ๋ฅผ `์ œ๊ฑฐ`\[First Out] + +### **2) ํ ๊ตฌ์„ฑ๋„** + +![](https://velog.velcdn.com/images/prettylee620/post/eceea723-6e1a-42d8-81e6-0e7c7ab0508a/image.png) + +* ํ•œ์ชฝ์—์„œ๋Š” **ENQUEUE ์—ฐ์‚ฐ**์„ ์ด์šฉํ•ด์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋„ฃ๊ณ , ํ•œ์ชฝ์—์„œ๋Š” **DEQUEUE๋กœ ์—ฐ์‚ฐ**์„ ์ด์šฉํ•ด์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊บผ๋‚ธ๋‹ค. + +![](https://velog.velcdn.com/images/prettylee620/post/b7b02c3f-9aeb-4fa0-8be7-9b5e6c240561/image.png) + +* ๋ฐ์ดํ„ฐ๊ฐ€ **๊บผ๋‚ด๋Š” ์ชฝ์—์„œ** ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ๋ฐ์ดํ„ฐ๋ฅผ `Front[์•ž]`๋ผ๊ณ  ๋ฐ์ดํ„ฐ๋ฅผ **๋„ฃ๋Š” ์ชฝ์—** ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ๋ฐ์ดํ„ฐ๋ฅผ `Rear[๋’ค]`์ด๋ผ๊ณ  ํ•จ + +## **4. ํ…Œํฌ** + +### **1) ํ…Œํฌ(Deque:Double Ended Queue)์˜ ๊ฐœ๋…** + +![](https://velog.velcdn.com/images/prettylee620/post/5a1ed890-219c-4f66-abb5-115c682cc3b5/image.png) + +: ํ…Œํฌ๋Š” ํ์˜ ์–‘์ชฝ ๋์—์„œ ์‚ฝ์ž…๊ณผ ์‚ญ์ œ ๊ฐ€๋Šฅํ•œ ์ž๋ฃŒ๊ตฌ์กฐ + +### **2) ํ…Œํฌ์˜ ๊ตฌ์„ฑ๋„** + +* ๋‘ ๊ฐœ์˜ ํฌ์ธํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ, ์–‘์ชฝ์˜ ์‚ญ์ œ/์‚ฝ์ž…์ด ๊ฐ€๋Šฅํ•˜๋‹ค. +* ๋ฐํฌ๋ฅผ ์ด์šฉํ•œ ์Šคํƒ๊ณผ ํ์˜ ๊ตฌํ˜„ ๊ฐ€๋Šฅ +* PUSH : ์‚ฝ์ž… POP : ๋ฐํฌ์—์„œ Fornt์™€ Rear์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ํ•˜๋‚˜์”ฉ ๊บผ๋‚ด๋Š” ์—ฐ์‚ฐ + +## 5. ๊ทธ๋ž˜์„œ ์–ธ์ œ ์“ฐ๋Š”๋ฐ? + +#### ์Šคํƒ + +1. ๋’ค๋กœ๊ฐ€๊ธฐ + +* ๋’ค๋กœ ๊ฐ€๊ธฐ๋ฅผ ๋ˆ„๋ฅธ๋‹ค๋Š” ๊ฒƒ์€ ์›นํŽ˜์ด์ง€ ํžˆ์Šคํ† ๋ฆฌ ์Šคํƒ์˜ ๋งจ ์œ„์—์„œ ํ•œ ํŽ˜์ด์ง€๋ฅผ ๊ฐ€์ ธ ๊ฐ€๋Š” ๊ฒƒ + +![](https://velog.velcdn.com/images/prettylee620/post/fb9e92c5-18d6-4956-a3d2-42d8df67cc2c/image.png) + +2. ๋˜๋Œ๋ฆฌ๊ธฐ : ctrl + z + +* ์œ ์ €ํ•˜๋Š” ํ–‰๋™์„ ์ฐจ๊ณก์ฐจ๊ณก ์Œ“๋‹ค๊ฐ€ ๋˜๋Œ๋ฆฌ๊ธฐ ์ˆœ๊ฐ„ ์Šคํƒ์œผ๋กœ ๊ฐ€์‚ฌ ๊ณผ๊ฑฐ๋ฅผ ๋˜๋Œ๋ฆด ์ˆ˜ ์žˆ๋Š” + +![](https://velog.velcdn.com/images/prettylee620/post/7ae90aa8-a7af-4e1e-aa9d-1a0340b64705/image.png) + +#### ํ + +1. ์ด๋ฉ”์ผ ์ „๋‹ฌ +2. ํ‘ธ์‰ฌ ์•Œ๋ฆผ ๊ธฐ๋Šฅ +3. ์‡ผํ•‘๋ชฐ์—์„œ ์ฃผ๋ฌธ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ์‹ +4. ์ฝœ์„ผํ„ฐ์˜ ๋ฐฑ์—”๋“œ(์ „ํ™” ์˜จ ์ˆœ์„œ๋Œ€๋กœ ์ฒ˜๋ฆฌ) + +## ๊ฒฐ๋ก  + +> ์‹ค์ œ๋กœ ์กด์žฌํ•˜์ง€๋Š” ์•Š์ง€๋งŒ ๊ทœ์น™์„ ์ œ๊ณตํ•˜๊ณ  ๋•๋ถ„์— ์ž๋ฃŒ๋ฅผ ์ข€ ๋” ๊ตฌ์กฐ์ ์œผ๋กœ ์ƒ๊ฐ ๊ฐ€๋Šฅ diff --git "a/developLog/algorithm-datastructure/data-structure/_ \354\227\260\352\262\260 \353\246\254\354\212\244\355\212\270_.md" "b/developLog/algorithm-datastructure/data-structure/_ \354\227\260\352\262\260 \353\246\254\354\212\244\355\212\270_.md" new file mode 100644 index 0000000..d4c55fa --- /dev/null +++ "b/developLog/algorithm-datastructure/data-structure/_ \354\227\260\352\262\260 \353\246\254\354\212\244\355\212\270_.md" @@ -0,0 +1,136 @@ +# ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ + +์ถœ์ฒ˜ : [https://www.youtube.com/watch?v=K1PlysPgNZY\&t=20s](https://www.youtube.com/watch?v=K1PlysPgNZY\&t=20s) + +์‚ฌ์ง„ ์ถœ์ฒ˜ : ฤen @Quyetnguyen0330 + +## 1. ์„ ํ˜• ๊ตฌ์กฐ๋ž€? + +*** + +1. **์ž๋ฃŒ ๊ตฌ์กฐ์˜ ๋ถ„๋ฅ˜** + +| ๊ตฌ์กฐ | ์„ค๋ช… | ์ข…๋ฅ˜ | +| ------ | --------------------- | -------------- | +| ์„ ํ˜• ๊ตฌ์กฐ | ๋ฐ์ดํ„ฐ๋ฅผ ์—ฐ์†์ ์œผ๋กœ ์—ฐ๊ฒฐํ•œ ์ž๋ฃŒ ๊ตฌ์กฐ | ๋ฆฌ์ŠคํŠธ, ์Šคํƒ, ํ, ๋ฐํฌ | +| ๋น„์„ ํ˜• ๊ตฌ์กฐ | ๋ฐ์ดํ„ฐ๋ฅผ ๋น„์—ฐ์†์ ์œผ๋กœ ์—ฐ๊ฒฐํ•œ ์ž๋ฃŒ ๊ตฌ์กฐ | ํŠธ๋ฆฌ, ๊ทธ๋ž˜ํ”„ | + +2. **๋ฆฌ์ŠคํŠธ** + +| ์ข…๋ฅ˜ | ์„ค๋ช… | +| ------------------------------------------------------------ | --------------------------------------------------------------------------------- | +| ์„ ํ˜• ๋ฆฌ์ŠคํŠธ | | +| (Linear List) | - ๋ฐฐ์—ด๊ณผ ๊ฐ™์ด ์—ฐ์†๋˜๋Š” ๊ธฐ์–ต ์žฅ์†Œ์— ์ €์žฅ๋˜๋Š” ๋ฆฌ์ŠคํŠธ | +| ๋Œ€ํ‘œ์ ์ธ ๊ตฌ์กฐ : ๋ฐฐ์—ด(Array) ๋“ฑ | | +| ๊ฐ€์žฅ ๊ฐ„ํŽธํ•œ ์ž๋ฃŒ ๊ตฌ์กฐ์ด๋ฉฐ, ์ ‘๊ทผ ๊ตฌ์กฐ๊ฐ€ ๋น ๋ฆ„ | | +| ์ˆœ์ฐจ์  | | +| ์ž๋ฃŒ ์‚ฝ์ž…, ์‚ญ์ œ ์‹œ ๊ธฐ์กด ์ž๋ฃŒ์˜ ์ด๋™์ด ํ•„์š” | | +| ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ | | +| (Linked List) | ๋…ธ๋“œ(๋ฐ์ดํ„ฐ์˜ ์ €์žฅ ๋ถ€๋ถ„๊ณผ ํฌ์ธํ„ฐ ๋ถ€๋ถ„์œผ๋กœ ๊ตฌ์„ฑ๋œ ์ €์žฅ๊ณต๊ฐ„)์˜ ํฌ์ธํ„ฐ(=๋งํฌ) ๋ถ€๋ถ„์œผ๋กœ ์„œ๋กœ ์—ฐ๊ฒฐ์‹œํ‚จ ๋ฆฌ์ŠคํŠธ๋ฐ์ดํ„ฐ(Data)ํฌ์ธํ„ฐ(Pointer) | +| ์—ฐ๊ฒฐํ•˜๋Š” ๋ฐฉ์‹์— ๋”ฐ๋ผ ๋‹จ์ˆœ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ, ์›ํ˜• ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ, ์ด์ค‘ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ, ์ด์ค‘์›ํ˜• ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ๋กœ ๊ตฌ๋ถ„ | | +| ์ˆœ์ฐจ์ ์ด์ง€ ์•Š์Œ | | +| cf. ์—ฐ์† ๋ฆฌ์ŠคํŠธ(์ˆœ์ฐจ์ ) | | +| ๋…ธ๋“œ์˜ ์‚ฝ์ž…, ์‚ญ์ œ๊ฐ€ ์„ ํ˜• ๋ฆฌ์ŠคํŠธ์™€ ๋‹ฌ๋ฆฌ ํŽธ๋ฆฌ | | +| ์—ฐ๊ฒฐ์„ ์œ„ํ•œ ํฌ์ธํ„ฐ๊ฐ€ ์ถ”๊ฐ€๋˜์–ด ์ €์žฅ๊ณต๊ฐ„์ด ์ถ”๊ฐ€๋กœ ํ•„์š” | | +| ํฌ์ธํ„ฐ๋ฅผ ํ†ตํ•ด ์ฐพ๋Š” ์‹œ๊ฐ„์ด ์ถ”๊ฐ€๋˜์–ด ์„ ํ˜• ๋ฆฌ์ŠคํŠธ์— ๋น„ํ•ด ๋Š๋ฆผ | | + +## 2. ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ๋ž€? + +
+ +### 1) ๊ฐœ๋… + +* ์—ฐ์†๋œ `๋…ธ๋“œ(Node)`์˜ ์—ฐ๊ฒฐ์ฒด +* ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ์‹ผ ๋…ธ๋“œ๋ฅผ ํฌ์ธํ„ฐ๋กœ ์—ฐ๊ฒฐํ•ด์„œ ๊ณต๊ฐ„์ ์ธ ํšจ์œจ์„ฑ์„ ๊ทน๊ฐœํ™”์‹œํ‚จ ์ž๋ฃŒ ๊ตฌ์กฐ + +### 2) ๋…ธ๋“œ(Node) + +
+ +* ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ์—์„œ ์‚ฌ์šฉ๋˜๋Š” ํ•˜๋‚˜์˜ ๋ฐ์ดํ„ฐ ๋ฉ์–ด๋ฆฌ์ด๋ฉฐ, `๋ฐ์ดํ„ฐ & ๋งํฌ`์ด 2๊ฐ€์ง€์˜ ํ•„๋“œ๋ฅผ ๋‹ด๊ณ  ์žˆ๋Š” ๊ตฌ์กฐ +* data : ๋…ธ๋“œ๊ฐ€ ๋‹ด๊ณ  ์žˆ๋Š” ๋ฐ์ดํ„ฐ/๊ฐ’, ๋ฌธ์ž์—ด, ์ˆซ์ž ๋“ฑ๋“ฑ ์›ํ•˜๋Š” ๊ฐ’์„ ๋„ฃ๊ณ  ์ €์žฅ +* next : ๋งํฌ/ ํฌ์ธํ„ฐ ์—ญํ• , ๋‹ค์Œ ๋…ธ๋“œ์˜ ์ฃผ์†Œ๋ฅผ ์ €์žฅ +* **์–‘๋ฐฉํ–ฅ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ์˜ ๊ฒฝ์šฐ** `prev ํฌ์ธํ„ฐ(์ด์ „ ๋…ธ๋“œ์˜ ์ฃผ์†Œ)`์ถ”๊ฐ€ + +### 3) ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ์˜ ๊ตฌ์กฐ + +
+ +1. ๋งˆ์ง€๋ง‰ ์—ฐ๊ฒฐํ•  ๊ฒƒ์€ ์—†๊ธฐ์— null๊ณผ ์—ฐ๊ฒฐ +2. ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ์˜ ์ฒซ ๋ฒˆ์งธ ์ฆ‰, ์‹œ์ž‘ ์ง€์ ์— ์žˆ๋Š” ๊ฒƒ์„ `head`๋ผ๊ณ  ํ•จ +3. ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ์˜ ๋งˆ์ง€๋ง‰์€ `tail`๋ผ๊ณ  ๋ถ€๋ฆ„ + +### 4) ๋ฐฐ์—ด vs ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ + +
+ +#### ๋ฐฐ์—ด + +1. ๋ฐฐ์—ด์€ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„ ์•ˆ์— ๋ชจ๋“  ์›์†Œ๋“ค์ด ์ด์–ด์ง„ ๊ณต๊ฐ„์— ์ž๋ฆฌ ์žก์Œ +2. **์ธ๋ฑ์Šค**๋ฅผ ํ†ตํ•ด ์›์†Œ ํƒ์ƒ‰์„ ํšจ์œจ์ ์œผ๋กœ ๋น ๋ฅด๊ฒŒ ์‹คํ–‰ ๊ฐ€๋Šฅ +3. **random access ๊ฐ€๋Šฅ** : ๋ฐฐ์—ด์˜ n๋ฒˆ์งธ ์›์†Œ ๋ฐฉ๋ฌธ ์‹œ `O(1)` ์‹œ๊ฐ„์œผ๋กœ ๊ฐ€๋Šฅ EX. arr\[3] +4. ์›์†Œ ์‚ฝ์ž… & ์‚ญ์ œ ์ผ๋ฐ˜์ ์œผ๋กœ `O(N)` ์‹œ๊ฐ„ ์†Œ์š” โ‡’ ์›์†Œ ๊ฐœ์ˆ˜ ๋Œ€๋กœ ๋Š˜์–ด๋‚จ + +#### 5) ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ + +1. ์ด์–ด์ง„ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์ด ์•„๋‹Œ ๋ถˆํŠน์ •ํ•œ ๊ณต๊ฐ„์— ์กด์žฌ +2. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— **ํฌ์ธํ„ฐ, ์ฃผ์†Œ๋ฅผ ์ฐธ์กฐํ•˜๋Š” ๊ฒƒ**์„ ํ†ตํ•ด ์—ฐ๊ฒฐ +3. ๋…ธ๋“œ์˜ ํƒ์ƒ‰์€ **์„ ํ˜•์‹œ๊ฐ„์ด ๊ฑธ๋ฆผ** +4. c๋ฅผ ๊ฐ€๋ ค๋ฉด a, b๋ฅผ ๊ฑฐ์ณ ๊ฐ +5. `random access` ๋ถˆ๊ฐ€๋Šฅ : ๋ฆฌ์ŠคํŠธ์˜ n๋ฒˆ์งธ ๋…ธ๋“œ ๋ฐฉ๋ฌธ ์‹œ O(N)์‹œ๊ฐ„ ์†Œ์š” โ‡’ head ๋…ธ๋“œ๋ถ€ํ„ฐ n๋ฒˆ์งธ ๋…ธ๋“œ๊นŒ์ง€ ์ˆœํšŒ +6. ์ƒํ™ฉ์— ๋”ฐ๋ผ ๋ฐฐ์—ด๋ณด๋‹ค ๋นจ๋ผ์งˆ ์ˆ˜ ์žˆ๋Š” ๋…ธ๋“œ ์‚ฝ์ž… & ์‚ญ์ œ +7. ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ์˜ ๋…ธ๋“œ๋ฅผ ๋งจ ์•ž์— ์‚ฝ์ž… ์‹œ์ผœ์ค„ ๋•Œ๋Š” head ๋…ธ๋“œ์˜ ์ฐธ์กฐ์œ„์น˜๋งŒ ๋‹ฌ๋ผ์ง€๊ธฐ ๋•Œ๋ฌธ `O(1)` ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅ + +### 6) ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ์˜ ์ข…๋ฅ˜ + +#### Singly Linked List(๋‹จ์ผ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ) + +
+ +1. ๋Œ€๋ถ€๋ถ„์˜ ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ์˜ ๋ฌธ์ œ์˜ ์ฃผ๋ ฅ +2. ๋‹ค์Œ ๋…ธ๋“œ์— ๋Œ€ํ•œ ํฌ์ธํ„ฐ๋งŒ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค +3. ์ผ๋ฐฉํ–ฅ์ด๋‹ค. + +#### Doubly Linked List(์ด์ค‘ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ) + +
+ +1. ๋‹ค์Œ ๋…ธ๋“œ์— ๋Œ€ํ•œ ํฌ์ธํ„ฐ์™€ ์ด์ „ ๋…ธ๋“œ๋ฅผ ๊ฐ€๋ฅด์น˜๋Š” ํฌ์ธํ„ฐ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. +2. ์•ž ๋’ค๋กœ ํƒ์ƒ‰ํ•˜๋Š” ๊ฒŒ ๋น ๋ฅด๋‹ค๋Š” ์žฅ์ ์ด ์žˆ์ง€๋งŒ, ๋…ธ๋“œ๋งˆ๋‹ค 2๊ฐœ์˜ ํฌ์ธํ„ฐ๋ฅผ ๊ฐ€์ ธ์•ผ ํ•ด์„œ ๋ฐ์ดํ„ฐ์˜ ๊ตฌ์กฐ์™€ ํ๋ฆ„์ด ๋ณต์žกํ•ด์งˆ ์ˆ˜ ์žˆ์Œ + +#### Circular Linked List(์›ํ˜• ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ) + +
+ +* ์ด์ค‘์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ์™€ ๊ฐ™์ง€๋งŒ **๋งˆ์ง€๋ง‰ ๋…ธ๋“œ์˜ next ํฌ์ธํ„ฐ๊ฐ€ ํ—ค๋“œ ๋…ธ๋“œ**๋ฅผ ๊ฐ€๋ฅด์นœ๋‹ค. + +### 6) ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ ๊ตฌํ˜„ ๋ฐฉ๋ฒ• + +#### ๋…ธ๋“œ์˜ ๊ตฌํ˜„ ๋ฐฉ๋ฒ• + +
+ +```jsx +class Node{ + constructor(data){ + this.data = data; + this.next = null; + } +} +``` + +#### ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ + +
+ +```jsx +let head = new Node("a"); +head.next = new Node("b"); +head.next.next = new Node("c"); +head.next.next.next = new Node("d"); +``` + +1. ์‹œ์ž‘์  : head ๋ณ€์ˆ˜์— ์ƒˆ๋กœ์šด ๋…ธ๋“œ๋ฅผ a๋ผ๋Š” ๋ณ€์ˆ˜์™€ ํ•จ๊ป˜ ์ƒ์„ฑ +2. head๋ผ๋Š” ๋…ธ๋“œ์— next๋ผ๋Š” ์ฐธ์กฐ ํฌ์ธํ„ฐ๋ฅผ ์ƒˆ๋กœ ์ƒ์„ฑํ•  ๋…ธ๋“œ b๋กœ ์ง€์ • +3. ๋…ธ๋“œ b๋ฅผ ์ƒˆ๋กœ ์ƒ์„ฑํ•œ ๋…ธ๋“œ c๋กœ ์ง€์ • +4. ๋งˆ์ง€๋ง‰ ๋…ธ๋“œ ์ง€์ • diff --git "a/developLog/algorithm-datastructure/data-structure/_ \354\232\260\354\204\240\354\210\234\354\234\204 \355\201\220\354\231\200 \355\236\231\354\235\230 \354\260\250\354\235\264_.md" "b/developLog/algorithm-datastructure/data-structure/_ \354\232\260\354\204\240\354\210\234\354\234\204 \355\201\220\354\231\200 \355\236\231\354\235\230 \354\260\250\354\235\264_.md" new file mode 100644 index 0000000..4e1af82 --- /dev/null +++ "b/developLog/algorithm-datastructure/data-structure/_ \354\232\260\354\204\240\354\210\234\354\234\204 \355\201\220\354\231\200 \355\236\231\354\235\230 \354\260\250\354\235\264_.md" @@ -0,0 +1,149 @@ +# ์šฐ์„ ์ˆœ์œ„ ํ์™€ ํž™์˜ ์ฐจ์ด + +> ์‰ฌ์šด์ฝ”๋“œ๋‹˜ ๊ฐ•์˜๋“ค ๋“ฃ๊ณ  ์ •๋ฆฌํ–ˆ์Šต๋‹ˆ๋‹ค! ๋ฌธ์ œ ์‹œ ์‚ญ์ œํ• ๊ฒŒ์š” + +## 1. Priority queue(์šฐ์„ ์ˆœ์œ„ ํ) + +### ๐Ÿ‡ ๊ฐœ๋… + +* ํ์™€ ์œ ์‚ฌํ•˜์ง€๋งŒ ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋†’์€ ์•„์ดํ…œ์ด ๋จผ์ € ์ฒ˜๋ฆฌ๋จ + +### ๐Ÿ‡ ์šฐ์„ ์ˆœ์œ„ ํ ์ฃผ์š” ๋™์ž‘ + +1. insert : ์•„์ดํ…œ ์šฐ์„  ์ˆœ์œ„ ์ˆœ์œผ๋กœ ๋„ฃ์–ด์คŒ +2. delete : ๊ฐ€์žฅ ์šฐ์„  ์ˆœ์œ„๊ฐ€ ๋†’์€ ๊ฒƒ์„ ๋นผ๋ƒ„ +3. peek : delete์™€ ๊ฐ™์ง€๋งŒ ์šฐ์„ ์ˆœ์œ„ ํ์—์„œ ์ œ๊ฑฐ๋Š” ์•ˆํ•จ + +### ๐Ÿ‡ ์šฐ์„ ์ˆœ์œ„ ํ ๋™์ž‘ ๋ฐฉ์‹ ์„ค๋ช… + +![](https://velog.velcdn.com/images/prettylee620/post/273a6e9d-212d-48d9-870f-1c8657002fc8/image.png) + +1. delete๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๊ฐ€์žฅ ๋†’์€ 20์ด ์‚ฌ๋ผ์ง€๊ฒŒ ๋จ + +![](https://velog.velcdn.com/images/prettylee620/post/b058280b-41ab-4849-8803-345285d88a01/image.png) + +2. ๋‘ ๋ฒˆ์งธ๋กœ delete๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋†’์€ 10์ด ์‚ฌ๋ผ์ง€๊ฒŒ ๋จ + +![](https://velog.velcdn.com/images/prettylee620/post/a6b3a01b-5c3d-4fdd-9aa5-0a3c0c108277/image.png) + +3. ๋˜ delete๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด 5๊ธฐ ์‚ฌ๋ผ์ง€๊ฒŒ ๋œ๋‹ค. ![](https://velog.velcdn.com/images/prettylee620/post/febd8e08-de79-4724-92e3-76ff6c4ee32d/image.png) + +## 2. Heap + +### ๐Ÿ‡ ํž™์˜ ๊ฐœ๋… + +* ์ฃผ๋กœ ์ด์ง„ ํŠธ๋ฆฌ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ตฌํ˜„์ด ๋จ +* `ํŠธ๋ฆฌ(tree)` : ๋ถ€๋ชจ - ์ž๋…€์ฒ˜๋Ÿผ ๊ณ„์ธต์ ์ธ ํ˜•ํƒœ๋ฅผ ๊ฐ€์ง€๋Š” ๊ตฌ์กฐ +* `์ด์ง„ ํŠธ๋ฆฌ` : ์ž๋…€๊ฐ€ ์ตœ๋Œ€ ๋‘ ๊ฐœ์ธ ํŠธ๋ฆฌ + +#### max heap + +![](https://velog.velcdn.com/images/prettylee620/post/e3d76064-d7b4-4ef7-8b58-ffeda6a86b96/image.png) + +* ๋ถ€๋ชจ ๋…ธ๋“œ์˜ ํ‚ค๊ฐ€ ์ž์‹ ๋…ธ๋“œ์˜ ํ‚ค๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™์€ ํŠธ๋ฆฌ +* ์„œ๋ธŒํŠธ๋ฆฌ๋„ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์ ์šฉ๋˜์–ด์•ผ ํ•จ + +#### min heap + +* max heap์˜ ๋ฐ˜๋Œ€ + +### ๐Ÿ‡ ํž™ ์ฃผ์š” ๋™์ž‘ + +1. insert : ํž™์˜ ์•„์ดํ…œ์„ ์ง‘์–ด๋„ฃ์„ ๋•Œ ํ‚ค๊ฐ’๋„ ๊ฐ™์ด ๋„ฃ์–ด์ค˜์•ผ ํ•จ +2. delete : ํ‚ค ๊ฐ’์ด ๊ฐ€์žฅ ํฐ ๊ฐ’์„ ๋นผ๋ƒ„ +3. peek : delete์™€ ๊ฐ™์ง€๋งŒ ๊บผ๋‚ด์ง€๋Š” ์•Š๋Š”๋‹ค. + +### ๐Ÿ‡ max heap์˜ insert ๋™์ž‘ ์›๋ฆฌ ์„ค๋ช… + +![](https://velog.velcdn.com/images/prettylee620/post/3d7d80c8-f7cf-446a-911f-2cd3ab732680/image.png) + +1. max heap์—์„œ inert(17)ํ•˜๋ฉด 11๋ฒˆ์งธ ๊ณต๊ฐ„์— ์ผ๋‹จ 17์ด๋ผ๋Š” ๊ฐ’์„ ๋„ฃ์Œ + +![](https://velog.velcdn.com/images/prettylee620/post/8d1e69a7-c885-40e7-a98e-3b73c012a7ab/image.png) + +2. ๋ถ€๋ชจ๋ณด๋‹ค ๋” ํฌ๊ธฐ ๋•Œ๋ฌธ์— 3์ด๋ž‘ ์Šค์œ„์นญ + +![](https://velog.velcdn.com/images/prettylee620/post/5b8c99c5-2f48-43fb-8490-afdf174de003/image.png) + +3. 15์™€ ๋˜ ๋น„๊ตํ•ด์คŒ + +![](https://velog.velcdn.com/images/prettylee620/post/c8e4194c-86c4-402a-8f7d-46dd414175d6/image.png) + +4. 20์ด๋ž‘ ๋น„๊ต ํ›„ ์ž๋ฆฌ ์•ˆ ๋ฐ”๊ฟ”๋„ ๋ผ์„œ ๋์ด ๋‚จ + +### ๐Ÿ‡ max heap์˜ delete ๋™์ž‘ ์›๋ฆฌ ์„ค๋ช… + +1. ๋ฃจํŠธ ๋…ธ๋“œ์˜ ํ‚ค ๊ฐ’์ด ํŠธ๋ฆฌ ์ค‘์— ๊ฐ€์žฅ ํผ โ‡’ ์‚ญ์ œ๋ฅผ ํ•  ๋•Œ ๋ฃจํŠธ ๋…ธ๋“œ๊ฐ€ ์‚ฌ๋ผ์ง + +![](https://velog.velcdn.com/images/prettylee620/post/ace0ae45-e3af-456e-bae2-90eff4864a01/image.png) + +2. ๊ทธ๋Ÿผ ๋ญ๋ฅผ ๋ฃจํŠธ๋…ธ๋“œ๋กœ ์˜ฌ๋ฆด๊นŒ? + +![](https://velog.velcdn.com/images/prettylee620/post/34aa8bd5-ef54-413d-b9da-bf03411b7ae6/image.png) + +3. ๊ทธ๋ฆฌ๊ณ  max heap์„ ์œ ์ง€์‹œ์ผœ์ฃผ๊ธฐ ์œ„ํ•ด ์ž๋…€์™€ ๋น„๊ตํ•ด์„œ ์ฒด์ธ์ง€ ํ•ด์ค˜์•ผ ํ•จ + +* 15, 11๋ชจ๋‘ 2๋ณด๋‹ค ํฌ๊ธฐ์— ๊ทธ ์ค‘ ๋” ํฐ 15๋ฅผ ๋ฃจํŠธ ๋…ธ๋“œ๋กœ ์˜ฌ๋ฆผ + +![](https://velog.velcdn.com/images/prettylee620/post/312994b2-cd8c-4a72-94c5-0fbabe689c1f/image.png) + +4. ๋˜ ์ž๋…€์™€ ๋น„๊ต + +* 12, 3 ๋ชจ๋‘ 2๋ณด๋‹ค ํฐ๋ฐ 12๊ฐ€ ๋” ํฌ๊ธฐ ๋•Œ๋ฌธ์— 12์™€ ์ฒด์ธ์ง€ + +![](https://velog.velcdn.com/images/prettylee620/post/dada83bc-7ee3-4010-95a9-3fabe30f4d70/image.png) + +5. ๋งˆ์ฐฌ๊ฐ€์ง€ ์ž๋…€์™€ ๋น„๊ต + +* 7๊ณผ 5๋ชจ๋‘ 2๋ณด๋‹ค ํฐ๋ฐ ๊ทธ ์ค‘ ๋” ํฐ 7์„ ์œ„๋กœ ์˜ฌ๋ฆฐ๋‹ค. + +![](https://velog.velcdn.com/images/prettylee620/post/c3abe9b9-a8a3-43f8-b39d-db7e7f6f4c8b/image.png) + +## 3. priority queue์™€ Heap์˜ ๊ด€๊ณ„ + +### ๐Ÿ‡ ๊ด€๊ณ„ + +1. ํž™(Heap)์˜ ํ‚ค(key)๋ฅผ ์šฐ์„ ์ˆœ์œ„(priority)๋กœ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด, **ํž™์€ ์šฐ์„ ์ˆœ์œ„ ํ(priority queue)์˜ ๊ตฌํ˜„์ฒด๊ฐ€ ๋œ๋‹ค.** +2. Priority queue = ADT(๊ตฌํ˜„์„ ์„ค์ •ํ•˜์ง€ ์•Š๊ณ  ๊ฐœ๋…์ ์ธ ๊ฒƒ๋งŒ ์„ค๋ช…) + 1. **์ถ”์ƒ ์ž๋ฃŒํ˜•**(abstract data type) + 2. `์ถ”์ƒ ์ž๋ฃŒํ˜•`์€ **๊ตฌํ˜„ ๋ฐฉ๋ฒ•์„ ๋ช…์‹œํ•˜๊ณ  ์žˆ์ง€ ์•Š๋‹ค๋Š” ์ **์—์„œ ์ž๋ฃŒ ๊ตฌ์กฐ์™€ ๋‹ค๋ฅด๋‹ค. ๋น„์Šทํ•œ ๊ฐœ๋…์˜ ์ถ”์ƒ์  ์ž๋ฃŒ ๊ตฌ์กฐ๋Š” ๊ฐ ์—ฐ์‚ฐ์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๋ฅผ ๋ช…๊ธฐํ•˜๊ณ  ์žˆ์ง€๋งŒ ์ถ”์ƒ์  ์ž๋ฃŒํ˜•์—์„œ๋Š” ์ด๊ฒƒ์กฐ์ฐจ ๋ช…๊ธฐํ•˜์ง€ ์•Š๋Š”๋‹ค. + 3. ์ถ”์ƒ ์ž๋ฃŒํ˜•์€ ์ธํ„ฐํŽ˜์ด์Šค์™€ ๊ตฌํ˜„์„ ๋ถ„๋ฆฌํ•˜์—ฌ ์ถ”์ƒํ™” ๊ณ„์ธต์„ ๋‘” ๊ฒƒ์ด๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์ „๊ธฐ ๋ฐฅ์†ฅ์„ **์ถ”์ƒ ์ž๋ฃŒํ˜•**์— ๋น„์œ ํ•œ๋‹ค๋ฉด ๊ทธ ์†์— ๋“ค์–ด๊ฐ€๋Š” **๋ฐฅ์€ ์ž๋ฃŒ**๊ฐ€ ๋˜๊ณ , ๋ฐฅ์†ฅ์— ์žˆ๋Š” ์ทจ์‚ฌ, ์˜ˆ์•ฝ์ทจ์‚ฌ ๋ฒ„ํŠผ๋“ค๊ณผ ๋‚จ์€ ์‹œ๊ฐ„์„ ํ‘œ์‹œํ•˜๋Š” ๋””์Šคํ”Œ๋ ˆ์ด์— ์–ด๋–ค ๋‚ด์šฉ๋“ค์ด ํ‘œ์‹œ๋˜์–ด์•ผ ํ•˜๋Š”์ง€๋ฅผ ๋ช…๊ธฐํ•œ ๊ฒƒ์ด๋‹ค. +3. Heap = data structure(๊ตฌํ˜„๊นŒ์ง€ ์žˆ์Œ) +4. ์šฐ์„ ์ˆœ์œ„ ํ๋ฅผ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด ๋‹ค์–‘ํ•œ ๊ฒƒ๋“ค์ด ์žˆ๊ฒ ์ง€๋งŒ, ํž™์„ ๋Œ€์ฒด๋กœ ๋งŽ์ด ์‚ฌ์šฉํ•ด์„œ ๋™์ผ์‹œ ํ•˜๋Š” ์‚ฌ๋žŒ๋“ค์ด ์žˆ๋‹ค. + +## 4. ์šฐ์„ ์ˆœ์œ„ ํ์™€ ํž™์˜ ์‚ฌ์šฉ ์‚ฌ๋ก€ + +### ๐Ÿ‡ ํ”„๋กœ์„ธ์Šค ์Šค์ผ€์ค„๋ง(process scheduling) + +1. cpu์—์„œ ํ˜„์žฌ ๋™์ž‘ํ•˜๊ณ  ์žˆ๋Š” ํ”„๋กœ์„ธ์Šค๊ฐ€ p1์ด๋ผ๋ฉด p2, p3, p4๋Š” ๋Œ€๊ธฐํ•ด์•ผ ํ•˜๋Š”๋ฐ ๋Œ€๊ธฐํ•  ๋•Œ, `ready queue`์— ๋Œ€๊ธฐํ•œ๋‹ค. +2. ๊ทผ๋ฐ ready queue๊ฐ€ FIFO์ด ์•„๋‹ˆ๋ผ ์šฐ์„ ์ˆœ์œ„ ํ๋ผ๋ฉด P1์ด cpu ์ž‘์—…์„ ๋‹ค ๋๋ƒˆ์„ ๋•Œ, ๋“ค์–ด์˜จ ์ˆœ์ด ์•„๋‹ˆ๋ผ **์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋†’์€ ์• ๊ฐ€** ๋จผ์ € ์ž‘์—…์„ ํ•˜๊ฒŒ ๋จ + +![](https://velog.velcdn.com/images/prettylee620/post/96fdd7e2-c54e-45b9-8774-a3c8719d7922/image.png) + +### ๐Ÿ‡ heap sort(ํž™ ์ •๋ ฌ) + +1. ์ •๋ ฌ n๊ฐœ์˜ ์•„์ดํ…œ โ‡’ ํž™์— ๋‹ค ๋„ฃ์–ด์„œ ์ฐจ๋ก€์ฐจ๋ก€ delete() ์‹œ ์ •๋ ฌ๋˜์–ด์„œ ๋‚˜์˜ค๊ฒŒ ๋จ + +### ๐Ÿ‡ Heap ๋ฉ”๋ชจ๋ฆฌ๋„? ํž™๊ณผ ๊ฐ™๋‚˜..? + +* No, ํž™ ๋ฉ”๋ชจ๋ฆฌ์˜ ํž™์€ ์˜ค๋Š˜ ๋ฐฐ์šด ํž™๊ณผ๋Š” ๊ด€๋ จ์ด ์—†๋‹ค +* ํž™ ๋ฉ”๋ชจ๋ฆฌ์˜ ํž™์€ ๋ฉ”๋ชจ๋ฆฌ์— ์žˆ๋Š” ๋”๋ฏธ ๋Š๋‚Œ + +#### ํž™ ๋ฉ”๋ชจ๋ฆฌ + +1. **์Šคํƒ ๋ฉ”๋ชจ๋ฆฌ์˜ ๋‹จ์  ๋ณด์™„** + 1. ์ˆ˜๋ช… : ์Šคํƒ ๋ฉ”๋ชจ๋ฆฌ์˜ ๊ฒฝ์šฐ ํ•จ์ˆ˜๊ฐ€ ๋ฐ˜ํ™˜๋˜๋Š” ์ˆœ๊ฐ„ ๊ทธ ์•ˆ์— ์žˆ๋˜ ๋ฐ์ดํ„ฐ๊ฐ€ ๋‹ค ๋‚ ๋ผ๊ฐ€๋ฉฐ, ์ „์—ญ ๋ณ€์ˆ˜๋Š” ์–ธ์ œ๋‚˜ ์‚ด์•„์žˆ๊ณ , ์ง€์—ญ ๋ณ€์ˆ˜๋Š” ํ•จ์ˆ˜ ์•ˆ์—์„œ๋งŒ ์œ ํšจ + 2. ํฌ๊ธฐ : ์Šคํƒ๋ฉ”๋ชจ๋ฆฌ๋Š” ํŠน์ • ์šฉ๋„๋กœ ๋–ผ์–ด๋†“์€ ๊ฒƒ์ด๋ผ ํฌ๊ธฐ๊ฐ€ ์ž‘๋‹ค. ์šฉ๋Ÿ‰์˜ ์ œํ•œ์  +2. **ํž™ ๋ฉ”๋ชจ๋ฆฌ์˜ ์žฅ์ \[unmanaged]** + 1. ํฌ๊ธฐ : ์ปดํŒŒ์ผ๋Ÿฌ ๋ฐ CPU๊ฐ€ ์ž๋™์ ์œผ๋กœ ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ๋ฅผ ์•ˆ ํ•ด์ฃผ๊ธฐ ๋•Œ๋ฌธ์— **ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ์›ํ•˜๋Š” ๋•Œ, ์›ํ•˜๋Š” ๋งŒํผ ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น๋ฐ›์•„์™€ ์‚ฌ์šฉํ•˜๊ณ  ์›ํ•  ๋•Œ ๋ฐ˜๋‚ฉ(ํ•ด์ œ) ํ•  ์ˆ˜ ์žˆ๋‹ค.** + 2. ์šฉ๋Ÿ‰ ์ œํ•œ ์—†์Œ : ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ๋ฐ์ดํ„ฐ์˜ ์ˆ˜๋ช…์„ ์ง์ ‘ ์ œ์–ดํ•  ์ˆ˜ ์žˆ์–ด, ์ปดํ“จํ„ฐ์— ๋‚จ์•„์žˆ๋Š” ๋ฉ”๋ชจ๋ฆฌ๋งŒํผ ์‚ฌ์šฉ ๊ฐ€๋Šฅ โ‡’ ํ˜ธ์ถœ์ด ๋๋‚œ๋‹ค๊ณ  ์‚ฌ๋ผ์ง€์ง€ ์•Š๋Š”๋‹ค. +3. **ํž™ ๋ฉ”๋ชจ๋ฆฌ์˜ ๋‹จ์ ** + 1. **๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜ ์œ„ํ—˜์„ฑ ์žˆ์Œ** : ๋งค๋‹ˆ์ง€๋“œ ์–ธ์–ด์ธ JAVA๋Š” ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น๋ฐ›์„ ๋•Œ new ํ‚ค์›Œ๋“œ ์‚ฌ์šฉํ•˜๋ฉฐ, ์‚ฌ์šฉ ํ›„์—๋Š” ํ•ด์ œ ์‹ ๊ฒฝ์„ ์•ˆ์“ด๋‹ค. ๋ฉ”๋ชจ๋ฆฌ ํ•ด์ œ๋ฅผ ์•Œ์•„์„œ ํ•ด์ฃผ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ํ•˜์ง€๋งŒ **c๋Š” ์–ธ๋งค๋‹ˆ์ง€๋“œ๋ผ ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ์ง์ ‘ ํ•ด์ค˜์•ผ ํ•œ๋‹ค.** + 2. **์Šคํƒ์— ๋น„ํ•ด ํ• ๋‹น/ํ•ด์ œ ์†๋„๊ฐ€ ๋Š๋ฆผ** : ํ•จ์ˆ˜๊ฐ€ ์š”์ฒญํ•œ ๋งŒํผ์˜ ํฌ๊ธฐ ๋นˆ ๊ณต๊ฐ„์„ ์ฐพ์œผ๋ ค๊ณ  ์ด๋ฆฌ์ €๋ฆฌ ์ฐพ์•„์•ผ ํ•œ๋‹ค. + +#### ์Šคํƒ ๋ฉ”๋ชจ๋ฆฌ vs ํž™ ๋ฉ”๋ชจ๋ฆฌ + +| ์Šคํƒ ๋ฉ”๋ชจ๋ฆฌ | ํž™ ๋ฉ”๋ชจ๋ฆฌ | +| ------------------------------------- | ----------------------- | +| ์ •์  ๋ฉ”๋ชจ๋ฆฌ | ๋™์  ๋ฉ”๋ชจ๋ฆฌ | +| ์˜คํ”ˆ์…‹ ๊ฐœ๋…์œผ๋กœ ์ •ํ™•ํžˆ ๋ช‡ ๋ฐ”์ดํŠธ์”ฉ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š”์ง€ ์ปดํŒŒ์ผ ์‹œ ๊ฒฐ์ • | ์‹คํ–‰ ์ค‘์— ํฌ๊ธฐ์™€ ํ• ๋‹น/ํ•ด์ œ ์‹œ๊ธฐ๊ฐ€ ๊ฒฐ์ •๋จ | diff --git "a/developLog/algorithm-datastructure/data-structure/_ \354\236\254\352\267\200\355\225\250\354\210\230_.md" "b/developLog/algorithm-datastructure/data-structure/_ \354\236\254\352\267\200\355\225\250\354\210\230_.md" new file mode 100644 index 0000000..7698ccb --- /dev/null +++ "b/developLog/algorithm-datastructure/data-structure/_ \354\236\254\352\267\200\355\225\250\354\210\230_.md" @@ -0,0 +1,373 @@ +# ์žฌ๊ท€ํ•จ์ˆ˜ + +## 1. ์žฌ๊ท€ํ•จ์ˆ˜ + +### ๐Ÿ‡ ์žฌ๊ท€ํ•จ์ˆ˜๋ž€? + +* ์ž๊ธฐ ์ž์‹ ์„ ๋‹ค์‹œ ํ˜ธ์ถœํ•˜๋Š” ํ•จ์ˆ˜ : **recursive\_function()** +* ํŠน์ •ํ•œ ํ•จ์ˆ˜๊ฐ€ ์ž๊ธฐ์ž์‹ ์„ ํฌํ•จ +* **์žฌ๊ท€ํ•จ์ˆ˜**๋Š” ๋‚ด๋ถ€์ ์œผ๋กœ ์Šคํƒ ์ž๋ฃŒ๊ตฌ์กฐ์™€ ๋™์ผ + + โ‡’ ์ด์œ  : ํ•จ์ˆ˜๋ฅผ ๊ณ„์† ํ˜ธ์ถœ์‹œ ๊ฐ€์žฅ ๋งˆ์ง€๋ง‰์— ํ˜ธ์ถœํ•˜๊ธฐ ํ•จ์ˆ˜๊ฐ€ ๋จผ์ € ์ˆ˜ํ–‰์„ ๋๋‚ด์•ผ ๊ทธ ์•ž์˜ ํ•จ์ˆ˜ ํ˜ธ์ถœ์ด ์ข…๋ฃŒ๋˜๊ธฐ ๋•Œ๋ฌธ +* ์Šคํƒ ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ํ™œ์šฉํ•ด์•ผ ํ•˜๋Š” ์ƒ๋‹น์ˆ˜๋Š” **์žฌ๊ท€ ํ•จ์ˆ˜๋ฅผ ์ด์šฉ**ํ•ด์„œ ๊ฐ„ํŽธํ•˜๊ฒŒ ๊ตฌํ˜„ ๊ฐ€๋Šฅ + +1. ํŒŒ์ด์ฌ ์˜ˆ์ œ + +![](https://velog.velcdn.com/images/prettylee620/post/321d34d4-fcd7-4798-a87b-339b7440d1fb/image.png) + +* ๋ฌธ์ž์—ด์ด ๋ฌดํ•œํžˆ ์ถœ๋ ฅํ•˜๋‹ค๊ฐ€ ์žฌ๊ท€์˜ ์ตœ๋Œ€ ๊นŠ์ด ์ดˆ๊ณผ์‹œ ์˜ค๋ฅ˜๊ฐ€ ๋œธ + +```python +def recursive_function(): # def๋Š” ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ค ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ์˜ˆ์•ฝ์–ด + print('์žฌ๊ท€ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค.') + recursive_function() + +recursive_function() +``` + +### ๐Ÿ‡ ์ž์—ฐ์ˆ˜(์–‘์˜ ์ •์ˆ˜) + +* 1์€ ์ž์—ฐ์ˆ˜ +* ์ž์—ฐ์ˆ˜ n์˜ ๋ฐ”๋กœ ๋‹ค์Œ ์ •์ˆ˜๋„ ์ž์—ฐ์ˆ˜์ด๋‹ค. + +### ๐Ÿ‡์ •๋ ฌ์•Œ๊ณ ๋ฆฌ์ฆ˜(๋ณ‘ํ•ฉ, ํ€ต ์ •๋ ฌ) + +* ์ด์ง„๊ฒ€์ƒ‰ํŠธ๋ฆฌ ํ™œ์šฉ๋˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ด๋‹ค. + +#### ์ ‘๊ทผ ๋ฐฉ์‹ + +1. ํŒฉํ† ๋ฆฌ์–ผ ๊ตฌํ•˜๊ธฐ + +* ์Œ์ด ์•„๋‹Œ ์ •์ˆ˜์˜ ํŒฉํ† ๋ฆฌ์–ผ๊ฐ’ + +```java + +0! = 1 +n>0 ์ด๋ฉด n! = n x (n-1)! + +5! +5x4x3x2x1= 120 + +int result = 0 +for(int i = 5; i<0;i--){ +result = result * i; + +} +``` + +#### ์žฌ๊ท€ํ˜ธ์ถœ(recursive call) + +* ์ž์‹ ๊ณผ ๋˜‘๊ฐ™์€ ๊ตฌ์กฐ์˜ ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๋ฐฉ์‹ +* ๋ฌธ์ œ) 0 ์ด์ƒ์˜ ๋‘์ •์ˆ˜ n, m ์ด ์ฃผ์–ด์กŒ์„๋•Œ n ๊ตฌํ•˜์‹œ์˜ค + +#### ์žฌ๊ท€ ์ ‘๊ทผ + +1. ์ƒํƒœ ์ •์˜ + +* ์žฌ๊ท€๋Š” ๋ถ€๋ถ„๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ํ’€์ด ๋ฐฉ๋ฒ• +* ๋ถ€๋ถ„๋ฌธ์ œ๋Š” ๊ฐ๊ฐ ํ•˜๋‚˜์˜ ๋ช…ํ™•ํ•œ ๋ฌธ์ œ๋ฅผ ๋‚˜ํƒ€๋‚ด์–ด ํ•˜๋‚˜์˜ ๋‹ต์„ ๋‚ผ ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค. +* ๋‹ต์„ ๋‚ด๋Š”๋ฐ๋Š” ์ž…๋ ฅ๋˜๋Š” ๋ณ€์ˆ˜ +* ์ด๋ ‡๊ฒŒ ๋‹ต์„ ๊ฒฐ์ •ํ•˜๋Š” ๋ณ€์ˆ˜๋“ค์„ `์ƒํƒœ(state)` +* ํ•˜๋‚˜์˜ ์ƒํƒœ์— ๋Œ€ํ•œ ๋‹ต์„ ์ฐพ๋Š” ๋ฌธ์ œ +* 2๊ฐœ์˜ ๋ณ€์ˆ˜๊ฐ€ ์žˆ์œผ๋ฏ€๋กœ, ์ƒํƒœ(n,m) ์ •์˜ํ•˜์—ฌ ํ‘œ๊ธฐ + +2. ์ข…๋ฃŒ ์กฐ๊ฑด + +* ๋ถ€๋ถ„ ๋ฌธ์ œ๋“ค์„ ์ƒ์„ฑํ•˜์—ฌ ํ•ด๊ฒฐํ•ด ๋‚˜๊ฐ€๋‹ค๊ฐ€ ์–ธ์  ๊ฐ€๋Š” ์ข…๋ฃŒํ•ด์•ผ ํ•œ๋‹ค. +* ๋‹ต์ด ๋‚˜์˜ค๋Š” ์ƒํƒœ๋ฅผ ๊ฒ€์‚ฌํ•˜์—ฌ ๋ฐ˜ํ™˜ํ•  ์ˆ˜ ์žˆ๋„๋ก ์ข…๋ฃŒ์กฐ๊ฑด +* n์˜ 0์ œ๊ณฑ์„ ๊ตฌํ• ๋•Œ (m=0) ๋‹ต 1 +* 0์˜ m์ œ๊ณฑ ๊ตฌํ• ๋•Œ(n=0) 1 +* 1์˜ m์ œ๊ณฑ (n= 1) 1 + +```java +(n,0) = 1 +(0,m) =1 +(1,m) =1 +(n,m) = n*(n,m-1) +``` + +### ๐Ÿ‡ ๊ฑฐ๋“ญ ์ œ๊ณฑ ๊ฐ’ ๊ตฌํ•˜๊ธฐ + +![](https://velog.velcdn.com/images/prettylee620/post/8b722d03-c871-4582-9487-7e30d91951bc/image.png) + +```java +import java.util.Scanner; + +public class powerEx { + private static int power(int n, int m){ + if (m == 0 ) return 1; + if (n == 0) return 1; + if (n==0) return 1; + return n*power(n, m-1); + } + + public static void main(String[] args){ + Scanner in = new Scanner(System.in); + int n = in.nextInt(); + int m = in.nextInt(); + + int result = power(n, m); + System.out.printf("%d์˜ %d ๊ฑฐ๋“ญ์ œ๊ณฑ ๊ฐ’ : %d", n, m, result); + } +} +``` + +### ๐Ÿ‡ ์ตœ๋Œ€ ๊ณต์•ฝ์ˆ˜ ๊ตฌํ•˜๊ธฐ + +![](https://velog.velcdn.com/images/prettylee620/post/8c81b407-4431-4c79-a572-2fab6f6f4d7c/image.png) + +```java +import java.util.Scanner; + +public class Gcd { + + private static int gCD(int x, int y){ + if(y == 0) return x; + else return gCD(y, x%y); + } + + public static void main(String[] args){ + Scanner in = new Scanner(System.in); + int n = in.nextInt(); + int m = in.nextInt(); + + int result = gCD(n, m); + System.out.printf("%d์˜ %d ์ตœ๋Œ€๊ณต์•ฝ์ˆ˜ : %d", n, m, result); + } +} +``` + +### ๐Ÿ‡ ํ•˜๋…ธ์˜์˜ ํƒ‘ + +> ์„ธ ๊ฐœ์˜ ๊ธฐ๋‘ฅ๊ณผ ์›ํŒ๋“ค์ด ์ฃผ์–ด์กŒ์„ ๋•Œ, ํ•œ ๊ธฐ๋‘ฅ์—์„œ ๋‹ค๋ฅธ ๊ธฐ๋‘ฅ์œผ๋กœ ๋ชจ๋“  ์›ํŒ์„ ์˜ฎ๊ธฐ๋Š” ๋ฌธ์ œ์ด๋ฉฐ, ์›ํŒ๋“ค์€ ํฌ๊ธฐ์— ๋”ฐ๋ผ ๋‹ค๋ฅด๋ฉฐ, ํฐ ์›ํŒ ์œ„์— ์ž‘์€ ์›ํŒ์ด ์˜ฌ๋ผ๊ฐ€์•ผ ํ•œ๋‹ค. + +![](https://velog.velcdn.com/images/prettylee620/post/85c684c3-b80c-48d8-ad9d-8f87597e512f/image.png) + +> ํ•ต์‹ฌ : ๋ชฉํ‘œ๋Š” ๋ชจ๋“  ์›ํŒ์„ ๊ธฐ๋‘ฅ A์—์„œ ๊ธฐ๋‘ฅ C๋กœ ์˜ฎ๊ธฐ๋Š” ๊ฒƒ + +1. ๋ฌธ์ œ : https://school.programmers.co.kr/learn/courses/30/lessons/12946 +2. ๊ทœ์น™ + 1. ํ•œ ๋ฒˆ์— ํ•œ ๊ฐœ์˜ ์›ํŒ๋งŒ ์ด๋™ ๊ฐ€๋Šฅ + 2. ํฐ ์›ํŒ ์œ„์— ์ž‘์€ ์›ํŒ ์˜ฌ๋ฆด ์ˆ˜ ์—†์Œ + 3. ์–ด๋–ค ๊ธฐ๋‘ฅ ์œ„์— ์žˆ๋Š” ์›ํŒ์€ ๊ทธ ๊ธฐ๋‘ฅ์œผ๋กœ๋งŒ ์ด๋™์‹œํ‚ฌ ์ˆ˜ ์žˆ์Œ +3. ๋ถ„์„ + +> ๊ฒฐ๋ก  + +* ์›ํŒ์˜ ๊ฐœ์ˆ˜๊ฐ€ 1๊ฐœ์ผ ๊ฒฝ์šฐ : ๋ฐ”๋กœ ๊ธฐ๋‘ฅ A์—์„œ ๊ธฐ๋‘ฅ C๋กœ ์˜ฎ๊ธธ ์ˆ˜ ์žˆ๋‹ค. +* ์›ํŒ์˜ ๊ฐœ์ˆ˜๊ฐ€ 2๊ฐœ ์ด์ƒ์ธ ๊ฒฝ์šฐ : + +1. ๊ฐ€์žฅ ์ž‘์€ ์›ํŒ์„ ์ œ์™ธํ•œ ๋‚˜๋จธ์ง€ ์›ํŒ๋“ค์„ ๊ธฐ๋‘ฅ A์—์„œ ๊ธฐ๋‘ฅ B๋กœ ์˜ฎ๊ธด๋‹ค. +2. ๊ฐ€์žฅ ํฐ ์›ํŒ์„ ๊ธฐ๋‘ฅ A์—์„œ ๊ธฐ๋‘ฅ C๋กœ ์˜ฎ๊ธด๋‹ค. +3. ๊ธฐ๋‘ฅ B์— ์žˆ๋Š” ์›ํŒ๋“ค์„ ๊ธฐ๋‘ฅ C๋กœ ์˜ฎ๊ธด๋‹ค. +4. ์ƒํƒœ(๋ณ€์ˆ˜) + +* ์˜ฎ๊ธฐ๋ ค๋Š” ์›ํŒ์˜ ๊ฐœ์ˆ˜ n +* ์›ํŒ์ด ํ˜„์žฌ ์œ„์น˜ํ•˜๋Š” ๊ธฐ๋‘ฅ๊ฐ’ from +* ์›ํŒ์ด ์ด๋™ํ•ด์•ผ ํ•˜๋Š” ๊ธฐ๋‘ฅ to(n, from, to) +* ex. ์›ํŒ n๊ฐœ๋ฅผ ๊ธฐ๋‘ฅ 1์—์„œ ๊ธฐ๋‘ฅ 3์œผ๋กœ ์˜ฎ๊ฒจ๋ผ! (n, 1, 3) + * (n, from, to) โ‡’ ์›ํŒ n๊ฐœ๋ฅผ ๊ธฐ๋‘ฅ from์—์„œ ๊ธฐ๋‘ฅ to ์˜ฎ๊ธฐ๋Š” ๊ณผ์ • + +2. ์ข…๋ฃŒ์กฐ๊ฑด + +* ์›ํŒ์ด 1์ผ ๋•Œ ์ข…๋ฃŒ +* (1, form, to) = \[from, to] โ‡’ ์›ํŒ์ด 1๊ฐœ์ผ ๋•Œ๋Š” from์—์„œ to๋กœ ์˜ฎ๊ฒจ๋ผ + +3. ์ ํ™”์‹ + +* ์ƒํƒœ : (n, from, to) +* ์ข…๋ฃŒ : (1, from, to) +* ์ „์ด์ƒํƒœ : (n-1, from, to) + +4 . ์ฝ”๋“œ + +```java +import java.util.ArrayList; +import java.util.List; + +class Solution { + +private List hanoi(int n, int from, int to){ + if(n == 1) return List.of(new int[] {from, to}); //์ข…๋ฃŒ์กฐ๊ฑด n==1 ์ผ๋•Œ from to ์ด๋™๋งŒ ์‹œ์ผœ๋ผ + + //์ ํ™”์‹ ๊ตฌํ˜„ + int empty = 6 - from - to; + + List result = new ArrayList<>(); + result.addAll(hanoi(n-1,from,empty)); + result.addAll(hanoi(1,from,to)); + result.addAll(hanoi(n-1,empty,to)); + return result; + + } + + + public int[][] solution(int n) { + return hanoi(n,1,3).toArray(new int[0][]); + } +} +``` + +5. ๋‹ค๋ฅธ ์‚ฌ๋žŒ ์ฝ”๋“œ + +```java +import java.util.Arrays; + +class Hanoi { + public int[][] hanoi(int n) { + // 2์ฐจ์› ๋ฐฐ์—ด์„ ์™„์„ฑํ•ด ์ฃผ์„ธ์š”. + int[][] answer = {{1,3}}; + + System.out.println(n); + + return answer; + } + + // ์•„๋ž˜๋Š” ํ…Œ์ŠคํŠธ๋กœ ์ถœ๋ ฅํ•ด ๋ณด๊ธฐ ์œ„ํ•œ ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค. + public static void main(String[] args) { + Hanoi h = new Hanoi(); + System.out.println(Arrays.toString(h.hanoi(2))); + } +} +``` + +### ๐Ÿ‡ ํ•˜๋…ธ์˜ ์›๋ฐ˜์˜ ๊ฐœ์ˆ˜ + +* ํ•˜๋…ธ์ด ํƒ‘์˜ ๋™์ž‘์›๋ฆฌ๋ฅผ ์•Œ ์ˆ˜ ์žˆ์Œ + +![](https://velog.velcdn.com/images/prettylee620/post/76ce5015-3a6c-4c52-a247-a838c7cbf097/image.png) + +```java +// ํ•˜๋…ธ์ด์˜ ํƒ‘ +package recurive; +import java.util.Scanner; + +class Hanoi { + //--- no๊ฐœ์˜ ์›๋ฐ˜์„ x๋ฒˆ ๊ธฐ๋‘ฅ์—์„œ y๋ฒˆ ๊ธฐ๋‘ฅ์œผ๋กœ ์˜ฎ๊น€ ---// + static void move(int no, int x, int y) { + if (no > 1) + move(no - 1, x, 6 - x - y); + + System.out.printf("์›๋ฐ˜[%d]๋ฅผ %d๋ฒˆ ๊ธฐ๋‘ฅ์—์„œ %d๋ฒˆ ๊ธฐ๋‘ฅ์œผ๋กœ ์˜ฎ๊น€\n", no, x, y); + + if (no > 1) + move(no - 1, 6 - x - y, y); + } + + public static void main(String[] args) { + Scanner stdIn = new Scanner(System.in); + + System.out.println("ํ•˜๋…ธ์ด์˜ ํƒ‘"); + System.out.print("์›๋ฐ˜์˜ ๊ฐœ์ˆ˜ : "); + int n = stdIn.nextInt(); + + move(n, 1, 3); // ์ œ 1 ๊ธฐ๋‘ฅ์— ์Œ“์ธ n๊ฐœ๋ฅผ ์ œ 3 ๊ธฐ๋‘ฅ์œผ๋กœ ์˜ฎ๊น€ + } +} +``` + +### ๐Ÿ‡ ๋ชจ์Œ ์‚ฌ์ „ + +ํ•ด์„ค : https://ksb-dev.tistory.com/273 + +* A, E, I, O, U ๋งŒ์„ ์‚ฌ์šฉํ•˜์—ฌ 5์ž๋ฆฌ ์ด๋‚ด์˜ ๋ฌธ์ž๋ฅผ ๋งŒ๋“ค๊ณ , ์ •๋ ฌํ•˜์—ฌ ์ฃผ์–ด์ง€๋Š” ๋ฌธ์ž๊ฐ€ ๋ช‡ ๋ฒˆ์งธ์ธ์ง€ ๋ฐ˜ํ™˜ํ•ด์•ผ ํ•จ +* ์ฒซ ๋ฒˆ์งธ ๋‹จ์–ด๋Š” "A"์ด๊ณ , ๋‘ ๋ฒˆ์งธ ๋‹จ์–ด๋Š” "AA"์ด๋ฉฐ, ๋งˆ์ง€๋ง‰ ๋‹จ์–ด๋Š” "UUUUU" + +1. ๋ฌธ์ œ : https://school.programmers.co.kr/learn/courses/30/lessons/84512 +2. ๋ถ„์„ + +* ์ƒํƒœ(word) : (word)๋กœ ์‹œ์ž‘๋˜๋Š” ๋ชจ๋“  ๋‹จ์–ด +* ์ข…๋ฃŒ์กฐ๊ฑด : (๊ธธ์ด๊ฐ€ 5์ธ word) = word +* ์ ํ™”์‹(word) =\[word]+\[word+'A']+\[word+'E']+\[word+'I']+\[word+'O']+\[word+'U'] +* ์ข…๋ฃŒ์กฐ๊ฑด 5์ผ ๋•Œ, ๋ฐ”๋กœ word ๋ฐ˜ํ™˜ +* ๋ถ€๋ถ„๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐ + +```java +private List generate(String word){ + //์ข…๋ฃŒ ์กฐ๊ฑด, ์ ํ™”์‹ ๊ตฌํ˜„ +} + +// ์ข…๋ฃŒ์กฐ๊ฑด 5์ผ ๋•Œ, ๋ฐ”๋กœ word ๋ฐ˜ํ™˜ +private List generate(String word){ + //์ข…๋ฃŒ ์กฐ๊ฑด , ์ ํ™”์‹ ๊ตฌํ˜„ + List wrods = new ArrayList<>(); + words.add(word); + if(word.length() == 5) return words; + + //์ ํ™”์‹ + } +``` + +```java +private List generate(String word){ + //์ข…๋ฃŒ ์กฐ๊ฑด , ์ ํ™”์‹ ๊ตฌํ˜„ + List wrods = new ArrayList<>(); + words.add(word); + if(word.length() == 5) return words; + + //์ ํ™”์‹ :์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“  ๋ฌธ์ž๋ฅผ words ๋ถ™์—ฌ์•ผ ํ•œ๋‹ค. + private static fianl char[] CHARS = "AEIOU".toCharArray(); + + + } +``` + +3. ์ฝ”๋“œ + +```java +import java.util.ArrayList; +import java.util.List; + +class Solution { + + private static final char[] CHARS = "AEIOU".toCharArray(); + + private List generate(String word){ + + List words = new ArrayList<>(); + words.add(word); + if(word.length() == 5) return words; + + for(char c : CHARS){ + words.addAll(generate(word + c)); + } + return words; +} + + + + + public int solution(String word) { + + return generate("").indexOf(word); + } +} +``` + +4. ๋‹ค๋ฅธ ์‚ฌ๋žŒ ํ’€์ด + +```java +import java.util.*; +class Solution { + List list = new ArrayList<>(); + void dfs(String str, int len) { + if(len > 5) return; + list.add(str); + for(int i = 0; i < 5; i++) dfs(str + "AEIOU".charAt(i), len + 1); + } + public int solution(String word) { + dfs("", 0); + return list.indexOf(word); + } +} +``` + +```java +class Solution { + public int solution(String word) { + int answer = 0, per = 3905; + for(String s : word.split("")) answer += "AEIOU".indexOf(s) * (per /= 5) + 1; + return answer; + } +} +``` diff --git "a/developLog/algorithm-datastructure/data-structure/_ \355\212\270\353\246\254_.md" "b/developLog/algorithm-datastructure/data-structure/_ \355\212\270\353\246\254_.md" new file mode 100644 index 0000000..c1c1461 --- /dev/null +++ "b/developLog/algorithm-datastructure/data-structure/_ \355\212\270\353\246\254_.md" @@ -0,0 +1,518 @@ +# ํŠธ๋ฆฌ + +* ์‚ฌ์ง„ ์ถœ์ฒ˜ : [https://laurent.tistory.com/entry/์ž๋ฃŒ๊ตฌ์กฐ-ํŠธ๋ฆฌ-Tree](https://laurent.tistory.com/entry/%EC%9E%90%EB%A3%8C%EA%B5%AC%EC%A1%B0-%ED%8A%B8%EB%A6%AC-Tree) +* [https://velog.io/@juwon9733/์ฝ”๋”ฉ-ํ…Œ์ŠคํŠธ๋ฅผ-์œ„ํ•œ-ํŠธ๋ฆฌTree-์ž๋ฃŒ๊ตฌ์กฐ-10๋ถ„-ํ•ต์‹ฌ-์š”์•ฝ](https://velog.io/@juwon9733/%EC%BD%94%EB%94%A9-%ED%85%8C%EC%8A%A4%ED%8A%B8%EB%A5%BC-%EC%9C%84%ED%95%9C-%ED%8A%B8%EB%A6%ACTree-%EC%9E%90%EB%A3%8C%EA%B5%AC%EC%A1%B0-10%EB%B6%84-%ED%95%B5%EC%8B%AC-%EC%9A%94%EC%95%BD) +* ๊ฐ•์˜ ์ถœ์ฒ˜ : [๋™๋นˆ๋‚˜](https://www.youtube.com/watch?v=i5yHkP1jQmo\&t=3s) +* ๊ฐ•์˜ ์ถœ์ฒ˜ : [์‰ฌ์šด ์ฝ”๋“œ](https://www.youtube.com/watch?v=ohrwGtqeW-I\&list=PLcXyemr8ZeoT-\_8yBc\_p\_lVwRRqUaN8ET\&index=29) + +![](https://velog.velcdn.com/images/prettylee620/post/45561eed-be30-4c6a-8ab4-dd2ec6cb56b7/image.png) + +![](https://velog.velcdn.com/images/prettylee620/post/f8b3e83b-bd36-4aef-9009-0e61d771d644/image.png) + +## 1. ํŠธ๋ฆฌ + +> ํŠธ๋ฆฌ๋ฅผ ์ด์šฉํ•ด ์ง์ ‘ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒฝ์šฐ๋Š” ๊ฑฐ์˜ ์—†์ง€๋งŒ ๊ด€๋ จ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋‚˜ ๋ฌธ์„œ๋ฅผ ์ดํ•ดํ•  ๋•Œ ์ข‹๋‹ค + +### ๐Ÿ‡ ํŠธ๋ฆฌ๋ž€? + +* ๊ทธ๋ž˜ํ”„ ์ค‘ ํ•˜๋‚˜๋กœ ๊ทธ๋ž˜ํ”„์˜ ํŠน์ง•์ฒ˜๋Ÿผ ์ •์ ๊ณผ ๊ฐ„์„ ์œผ๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๊ณ , ํŠธ๋ฆฌ ๊ตฌ์กฐ๋กœ ๋ฐฐ์—ด๋œ ์ผ์ข…์˜ `๊ณ„์ธต์  ๋ฐ์ดํ„ฐ์˜ ์ง‘ํ•ฉ` +* ํŠธ๋ฆฌ๋กœ ์ด๋ฃจ์–ด์ง„ ์ง‘ํ•ฉ์„ ์ˆฒ์ด๋ผ๊ณ  ํ•จ +* ๋ฟŒ๋ฆฌ๊ฐ€ ์ตœ์ƒ์œ„๋กœ ์˜ฌ๋ผ๊ฐ +* ๊ฐ€๊ณ„๋„์™€ ๊ฐ™์Œ โ‡’ ๋‹จ๊ตฐ ํ• ์•„๋ฒ„์ง€๊ฐ€ A๊ฐ™์€ ๋Š๋‚Œ + +### ๐Ÿ‡ ํŠธ๋ฆฌ์˜ ํŠน์ง• + +1. ๋ถ€๋ชจ, ์ž์‹ ๊ณ„์ธต์  ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง„๋‹ค. +2. ๋ฐ์ดํ„ฐ๋ฅผ ์ˆœ์ฐจ์ ์œผ๋กœ ์ €์žฅํ•˜์ง€ ์•Š๋Š” **๋น„์„ ํ˜• ๊ตฌ์กฐ** +3. ํŠธ๋ฆฌ์— ์„œ๋ธŒํŠธ๋ฆฌ๊ฐ€ ์žˆ๋Š” **์žฌ๊ท€์  ๊ตฌ์กฐ** +4. V-1 = E๋ผ๋Š” ํŠน์ง•์„ ๊ฐ€์ง„๋‹ค. ๊ฐ„์„  ์ˆ˜= ๋…ธ๋“œ์ˆ˜ -1 +5. ์ž„์˜์˜ ๋‘ ๋…ธ๋“œ ์‚ฌ์ด ๊ฒฝ๋กœ๋Š” ์œ ์ผ๋ฌด์ดํ•˜๊ฒŒ ์กด์žฌํ•œ๋‹ค. +6. `๋ฃจํŠธ ๋…ธ๋“œ`๋Š” ํ•˜๋‚˜๋งŒ ์กด์žฌํ•œ๋‹ค. +7. ์‚ฌ์ดํด(cycle)์ด ์กด์žฌํ•˜์ง€ ์•Š์Œ + +![](https://velog.velcdn.com/images/prettylee620/post/136c709a-6b6c-4d5d-8912-81a7299f90ec/image.png) 8. ์ž๋…€ ๋…ธ๋“œ๋Š” ํ•˜๋‚˜์˜ ๋ถ€๋ชจ ๋…ธ๋“œ๋งŒ ์กด์žฌ + +![](https://velog.velcdn.com/images/prettylee620/post/ebb5a99f-0c89-4db9-96e7-a00fcbbefcb9/image.png) + +### ๐Ÿ‡ ํŠธ๋ฆฌ์˜ ์šฉ์–ด + +![](https://velog.velcdn.com/images/prettylee620/post/9f97ebc1-ec9f-44c4-be30-535be0b02e84/image.png) + +1. **๋ฃจํŠธ ๋…ธ๋“œ(Root Node)** + 1. ํŠธ๋ฆฌ์—์„œ ๋ถ€๋ชจ๊ฐ€ ์—†๋Š” ์ตœ์ƒ์œ„ ๋…ธ๋“œ, ํŠธ๋ฆฌ์˜ ์‹œ์ž‘์  + 2. 2 +2. **๋‹จ๋ง ๋…ธ๋“œ(Termial Node) = ์™ธ๋ถ€ ๋…ธ๋“œ(external) ๋…ธ๋“œ** + 1. ์ž์‹์ด ์—†๋Š” ๋…ธ๋“œ, ํŠธ๋ฆฌ์˜ ๊ฐ€์žฅ ๋ง๋‹จ์— ์œ„์น˜, degree๊ฐ€ 0 + 2. 3, 7, 8, 1, 4 + 3. leaf node, outer node, terminal node +3. **๋ ˆ๋ฒจ(Level)** + 1. ๋…ธ๋“œ์™€ ๋ฃจํŠธ ๋…ธ๋“œ ๊ฒฝ๋กœ์—์„œ ๊ฐ„์„ ์˜ ์ˆ˜ + 2. ๋ฃจํŠธ ๋…ธ๋“œ์˜ ๋ ˆ๋ฒจ์€ 0 (or 1) +4. **์กฐ์ƒ ๋…ธ๋“œ(Ancestor Node)** : ๋ถ€๋ชจ ๋…ธ๋“œ๋ฅผ ๋”ฐ๋ผ ๋ฃจํŠธ ๋…ธํŠธ๊นŒ์ง€ ์˜ฌ๋ผ๊ฐ€๋ฉฐ ๋งŒ๋‚˜๋Š” ๋ชจ๋“  ๋…ธ๋“œ + 1. 8์˜ ์กฐ์ƒ ๋…ธ๋“œ : 11, 9, 2 +5. **์ž์† ๋…ธ๋“œ(descendant Node)** : ์ž๋…€ ๋…ธ๋“œ๋ฅผ ๋”ฐ๋ผ ๋‚ด๋ ค๊ฐ€๋ฉฐ ๋งŒ๋‚  ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“  ๋…ธ๋“œ + 1. 9์˜ ์ž์† ๋…ธ๋“œ : 11, 8, 1, 4 +6. **์ž์‹ ๋…ธ๋“œ(Child Node)** : ํŠน์ • ๋…ธ๋“œ์— ์—ฐ๊ฒฐ๋œ ๋‹ค์Œ ๋ ˆ๋ฒจ์˜ ๋…ธ๋“œ + 1. 5๋ฒˆ ๋…ธ๋“œ์˜ ์ž์‹ ๋…ธ๋“œ๋Š” 6, 7 + 2. 6๋ฒˆ ๋…ธ๋“œ์˜ ์ž์‹ ๋…ธ๋“œ๋Š” 3 +7. **๋ถ€๋ชจ ๋…ธ๋“œ(Parent Node)** : ์ž๋…€ ๋…ธ๋“œ๋ฅผ ๊ฐ€์ง€๋Š” ๋…ธ๋“œ + 1. 2, 5, 9, 6, 11 +8. **ํ˜•์ œ ๋…ธ๋“œ(Sibling)** : ๊ฐ™์€ ๋ถ€๋ชจ๋ฅผ ๊ฐ€์ง„ ๋…ธ๋“œ + 1. {8, 1, 4}, {6, 7}, {5, 9} +9. **๋‚ด๋ถ€ ๋…ธ๋“œ(internal) =branch node = inner node** : ์ž๋…€ ๋…ธ๋“œ๋ฅผ ๊ฐ€์ง€๋Š” ๋…ธ๋“œ + 1. 2, 5, 9, 6, 11 +10. `๋…ธ๋“œ`์˜ ๊นŠ์ด(Depth) + 1. **๋ฃจํŠธ ๋…ธ๋“œ**์—์„œ ํ•ด๋‹น ๋…ธ๋“œ์— ๋„๋‹ฌํ•˜๊ธฐ ์œ„ํ•œ ๊ฐ„์„ ์˜ ์ˆ˜ + 2. 11์˜ ๊นŠ์ด : 2 + 3. ๋ฃจํŠธ ๋…ธ๋“œ์˜ ๊นŠ์ด : 0 +11. `ํŠธ๋ฆฌ`์˜ ๊นŠ์ด(depth) + 1. ํŠธ๋ฆฌ์— ์žˆ๋Š” ๋…ธ๋“œ๋“ค์˜ ๊นŠ์ด ์ค‘ ๊ฐ€์žฅ ๊ธด ๊นŠ์ด + 2. ํŠธ๋ฆฌ ๊นŠ์ด : 3 + 3. ํŠธ๋ฆฌ ๋†’์ด = ํŠธ๋ฆฌ ๊นŠ์ด +12. **๊ฒฝ๋กœ(path)** + 1. ํ•œ ๋…ธ๋“œ์—์„œ ๋‹ค๋ฅธ ๋…ธ๋“œ ์‚ฌ์ด์˜ ๋…ธ๋“œ๋“ค์˜ ์‹œํ€ธ์Šค(sequence) + 2. 2์—์„œ 7๋กœ์˜ ๊ฒฝ๋กœ : 2- 5 -7 + 3. **๊ฒฝ๋กœ ๊ธธ์ด(length of path)** + 4. ๊ฒฝ๋กœ์— ์žˆ๋Š” ๋…ธ๋“œ๋“ค์˜ ์ˆ˜ + 5. 2์—์„œ 7๋กœ์˜ ๊ฒฝ๋กœ ๊ธธ์ด : 3 + 6. 2์—์„œ 3์œผ๋กœ์˜ ๊ฒฝ๋กœ ๊ธธ์ด : 4 +13. **`๋…ธ๋“œ`์˜ ๋†’์ด(height) : ๋ฌธ์„œ๋งˆ๋‹ค ๋†’์ด๋ฅผ ๊ฐ„์„ ์œผ๋กœ ๋”ฐ์ง€๊ธฐ๋„ ํ•˜๊ณ  ๋…ธ๋“œ ์ˆ˜๋กœ ๋”ฐ์ง€๊ธฐ๋„** + 1. ๋…ธ๋“œ์—์„œ ๋ฆฌํ”„(leaf) ๋…ธ๋“œ๊นŒ์ง€์˜ ๊ฐ€์žฅ ๊ธด ๊ฒฝ๋กœ์˜ ๊ฐ„์„ (edge) ์ˆ˜ + 2. 5์˜ ๋†’์ด : 2 + 3. ๋ฆฌํ”„(left) ๋…ธ๋“œ์˜ ๋†’์ด : 0 +14. `ํŠธ๋ฆฌ`์˜ ๋†’์ด + 1. ๋ฃจํŠธ ๋…ธ๋“œ์˜ ๋†’์ด + 2. ํŠธ๋ฆฌ ๋†’์ด : 3 +15. **์ฐจ์ˆ˜(Degree)** + 1. ํŠน์ • ๋…ธ๋“œ์˜ ์—ฐ๊ฒฐ๋œ ์ž์‹ ๋…ธ๋“œ์˜ ์ˆ˜ + 2. ์ฐจ์ˆ˜๋ฅผ ๊ณ ๋ฅด๋ผ๋Š”๋ฐ **ํŠน์ • ๋…ธ๋“œ ์–ธ๊ธ‰ x => ๊ฐ€์žฅ ํฐ ์ฐจ์ˆ˜๋ฅผ ๊ฐ€์ง€๋Š” ๊ฐ’**์„ ๊ณ ๋ฅด๋ฉด ๋จ = ํŠธ๋ฆฌ์˜ ์ฐจ์ˆ˜(degree) + 3. 11์˜ ์ฐจ์ˆ˜ : 3 + 4. 3์˜ ์ฐจ์ˆ˜ : 0 +16. **`๋…ธ๋“œ`์˜ ํฌ๊ธฐ(size)** + 1. ์ž์‹ ์„ ํฌํ•จํ•œ ์ž์† ๋…ธ๋“œ์˜ ์ˆ˜ + 2. 9์˜ ํฌ๊ธฐ : 5 + 3. 5์˜ ํฌ๊ธฐ : 4 +17. `ํŠธ๋ฆฌ`์˜ ํฌ๊ธฐ(size) + 1. ํŠธ๋ฆฌ์˜ ๋ชจ๋“  ๋…ธ๋“œ์˜ ์ˆ˜ + 2. ํŠธ๋ฆฌ์˜ ํฌ๊ธฐ : 10 +18. **๋‘ ๋…ธ๋“œ ์‚ฌ์ด์˜ ๊ฑฐ๋ฆฌ(distance)** + 1. ๋‘ ๋…ธ๋“œ์˜ **์ตœ๋‹จ ๊ฒฝ๋กœ**์˜ ๊ฐ„์„  ์ˆ˜ + 2. distance(9, 8) : 2 + 3. distance(3, 8) : 6 +19. width ![](https://velog.velcdn.com/images/prettylee620/post/5a93d73a-d1d8-4e39-a1d7-bb81a39897c9/image.png) + +* ์ž„์˜์˜ ๋ ˆ๋ฒจ์—์„œ ๋…ธ๋“œ์˜ ์ˆ˜ +* level 2์˜ width : 3 + +20. ์„œ๋ธŒ ํŠธ๋ฆฌ(subtree) : ๊ฐ ๋…ธ๋“œ์˜ ์ž๋…€ ๋…ธ๋“œ๋“ค์„ ์žฌ๊ท€์ ์œผ๋กœ ์„œ๋ธŒ ํŠธ๋ฆฌ๋ฅผ ๊ตฌ์„ฑํ•œ๋‹ค. + +![](https://velog.velcdn.com/images/prettylee620/post/85a852de-de64-4032-9426-19ce12c6fac9/image.png) + +### ๐Ÿ‡ ํŠธ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ณณ\[chat gpt] + +> ๊ณ„์ธต ๊ตฌ์กฐ๋ฅผ ๋‚˜ํƒ€๋‚ด๊ฑฐ๋‚˜ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐ์งํ™”ํ•˜์—ฌ ์‚ฌ์šฉ๋˜๋Š” ์ค‘์š”ํ•œ ์ž๋ฃŒ๊ตฌ์กฐ + +![](https://velog.velcdn.com/images/prettylee620/post/1210dde4-6696-4e55-8252-4053c709832d/image.png) + +## 2. ์ด์ง„ ํŠธ๋ฆฌ + +### ๐Ÿ‡ ์ด์ง„ ํŠธ๋ฆฌ(Binary Tree) + +* ๊ฐ ๋…ธ๋“œ์˜ ์ž๋…€ ๋…ธ๋“œ ์ˆ˜ ์ตœ๋Œ€ 2๊ฐœ์ธ Tree๋ฅผ ์˜๋ฏธ +* left child | right child = ์™ผ์ชฝ ์ž๋…€ ๋…ธ๋“œ | ์˜ค๋ฅธ์ชฝ ์ž๋…€ ๋…ธ๋“œ + +### ๐Ÿ‡ ์ด์ง„ ํŠธ๋ฆฌ(Binary Tree) ์ข…๋ฅ˜ + +![](https://velog.velcdn.com/images/prettylee620/post/699d8990-2b5c-4a07-8177-d30568ec955c/image.png) + +![](https://velog.velcdn.com/images/prettylee620/post/330a7383-88a7-4a0e-a331-4902e5f3b9ae/image.png) + +1. **full binary tree(์ • ์ด์ง„ ํŠธ๋ฆฌ)** : ๋ชจ๋“  ๋…ธ๋“œ๋Š” ์ž๋…€ ๋…ธ๋“œ๊ฐ€ `์—†๊ฑฐ๋‚˜ ๋‘ ๊ฐœ`์ธ ํŠธ๋ฆฌ = ์ž๋…€ ๋…ธ๋“œ๊ฐ€ 1๊ฐœ์ธ ๋…ธ๋“œ๋Š” ์—†๋‹ค. + +![](https://velog.velcdn.com/images/prettylee620/post/24d2cc5a-7e94-444e-8d6a-3f8df64c8cb5/image.png) + +2. **complete binary tree(์™„์ „ ์ด์ง„ ํŠธ๋ฆฌ)** : ๋งˆ์ง€๋ง‰ ๋ ˆ๋ฒจ์„ ์ œ์™ธํ•œ **๋ชจ๋“  ๋ ˆ๋ฒจ์—์„œ ๋…ธ๋“œ๊ฐ€ ๋น ์ง์—†์ด ์ฑ„์›Œ์ ธ ์žˆ๊ณ ** ๋งˆ์ง€๋ง‰ ๋ ˆ๋ฒจ์€ **์™ผ์ชฝ๋ถ€ํ„ฐ ๋น ์ง์—†์ด ๋…ธ๋“œ๊ฐ€ ์ฑ„์›Œ์ ธ ์žˆ๋Š”** ํŠธ๋ฆฌ + +![](https://velog.velcdn.com/images/prettylee620/post/2065e97f-fea8-4e24-a2fa-be87c323e810/image.png) + +3. **perfect binary tree(ํฌํ™” ์ด์ง„ ํŠธ๋ฆฌ)** : ๋ชจ๋“  ๋ ˆ๋ฒจ์—์„œ ๋…ธ๋“œ๊ฐ€ ๋น ์ง์—†์ด ์ฑ„์›Œ์ ธ ์žˆ๋Š” ํŠธ๋ฆฌ + +![](https://velog.velcdn.com/images/prettylee620/post/f2c1bfa3-9616-47ac-9f3e-0e3d35f332aa/image.png) + +4. **degenerate binary tree(๋ณ€์งˆ ์ด์ง„ ํŠธ๋ฆฌ)** : ๋ชจ๋“  ๋ถ€๋ชจ ๋…ธ๋“œ๋Š” ํ•˜๋‚˜์˜ ์ž๋…€ ๋…ธ๋“œ๋งŒ์„ ๊ฐ€์ง + +* pathological binary tree๋ผ๊ณ ๋„ ๋ถˆ๋ฆผ +* left skewed binary tree : ๋ชจ๋“  ๋ถ€๋ชจ ๋…ธ๋“œ๋Š” `์™ผ์ชฝ` ์ž๋…€ ๋…ธ๋“œ๋งŒ ๊ฐ€์ง€๋Š” ํŠธ๋ฆฌ + +![](https://velog.velcdn.com/images/prettylee620/post/5ff4e697-b5c4-4aeb-b33e-e6d45cdd36a0/image.png) + +* right skewed binary tree : ๋ชจ๋“  ๋ถ€๋ชจ ๋…ธ๋“œ๋Š” ์˜ค๋ฅธ`์ชฝ` ์ž๋…€ ๋…ธ๋“œ๋งŒ ๊ฐ€์ง€๋Š” ํŠธ๋ฆฌ + +![](https://velog.velcdn.com/images/prettylee620/post/960f9d4a-b8c4-4b53-992e-a6ebed36f538/image.png) + +5. balanced binary tree(๊ท ํ˜• ์ด์ง„ ํŠธ๋ฆฌ) : ๋ชจ๋“  ๋…ธ๋“œ์—์„œ ์™ผ์ชฝ ์„œ๋ธŒ ํŠธ๋ฆฌ์™€ ์˜ค๋ฅธ์ชฝ ์„œ๋ธŒ ํŠธ๋ฆฌ์˜ ๋†’์ด ์ฐจ์ด๊ฐ€ ์ตœ๋Œ€ 1์ธ ํŠธ๋ฆฌ + +![](https://velog.velcdn.com/images/prettylee620/post/6da19ea3-78cb-4370-b0ba-612acf4c9bd3/image.png) + +6. **ํฌํ™” ์ด์ง„ ํŠธ๋ฆฌ** : ๋ชจ๋“  ์žŽ์˜ ๋ ˆ๋ฒจ์ด ๋™์ผํ•œ ์ด์ง„ ํŠธ๋ฆฌ์ด๋ฉฐ, ์žŽ์ด ์•„๋‹Œ ๋‚ด๋ถ€ ๋…ธ๋“œ๋“ค์€ ๋ชจ๋‘ 2๊ฐœ์˜ ์ž์‹์„ ๊ฐ€์ง€๋Š” ํŠธ๋ฆฌ + * `๋‚ด๋ถ€ ๋…ธ๋“œ` : ๋ฃจํŠธ ๋…ธ๋“œ์™€ ๋ฆฌํ”„ ๋…ธ๋“œ(leaf node)๋ฅผ ์ œ์™ธํ•œ ๋‚˜๋จธ์ง€ ๋…ธ๋“œ๋ฅผ ์˜๋ฏธ + * ์žŽ : ์ž์‹์ด ์—†๋Š” ๋…ธ๋“œ + +### ๐Ÿ‡ ์ด์ง„ ํŠธ๋ฆฌ ์žฅ์  + +1. ์‚ฝ์ž… ์‚ญ์ œ๊ฐ€ ์œ ์—ฐํ•˜๋‹ค +2. ๊ฐ’์˜ ํฌ๊ธฐ์— ๋”ฐ๋ผ ์ขŒ์šฐ ์„œ๋ธŒํŠธ๋ฆฌ๊ฐ€ ๋‚˜๋ˆ ์ง€๊ธฐ ๋•Œ๋ฌธ์— ์‚ฝ์ž…/์‚ญ์ œ/๊ฒ€์ƒ‰์ด ๋ณดํ†ต์€ ๋น ๋ฅด๋‹ค +3. ๊ฐ’์˜ ์ˆœ์„œ๋Œ€๋กœ ์ˆœํšŒ๊ฐ€๋Šฅ + +### ๐Ÿ‡ ์ด์ง„ ํŠธ๋ฆฌ ๋‹จ์  + +* ์ตœ์•…์˜ ๊ฒฝ์šฐ ๋ชจ๋“  ํŠธ๋ฆฌ์— ์žˆ๋Š” ๋…ธ๋“œ๋ฅผ ๋ฐฉ๋ฌธ ํ•ด์ค˜์•ผ ํ•จ +* ํŠธ๋ฆฌ๊ฐ€ ๊ตฌ์กฐ์ ์œผ๋กœ ํ•œ์ชฝ์œผ๋กœ ํŽธํ–ฅ๋˜๋ฉด ์‚ฝ์ž…, ์‚ญ์ œ, ๊ฒ€์ƒ‰ ๋“ฑ๋“ฑ ์—ฌ๋Ÿฌ ๋™์ž‘๋“ค์˜ ์ˆ˜ํ–‰์‹œ๊ฐ„ ์•…ํ™” +* ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด **์Šค์Šค๋กœ ๊ท ํ˜•์„ ์žก๋Š” ์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ**๊ฐ€ ์‚ฌ์šฉ + * AVL ํŠธ๋ฆฌ. Red-Black ํŠธ๋ฆฌ + +### ๐Ÿ‡ ๊ด€๋ จ ์ฝ”ํ…Œ ๋ฌธ์ œ + +#### ์˜ˆ์ œ : ๊ธธ์ฐพ๊ธฐ ๋ฌธ์ œ + +1. ๋ฌธ์ œ ๋งํฌ : https://school.programmers.co.kr/learn/courses/30/lessons/42892 +2. ๋‹ค๋ฅธ ์‚ฌ๋žŒ ํ’€์ด : https://choichumji.tistory.com/167 +3. ๊ฐ•์‚ฌ๋‹˜์˜ ์ฝ”๋“œ์™€ ์„ค๋ช… ๋ง๋ถ™ํž˜ + 1. **`preorder.stream().mapToInt(Integer::intValue).toArray()`** + 2. **`preorder`** ๋ฆฌ์ŠคํŠธ๋ฅผ ์ŠคํŠธ๋ฆผ์œผ๋กœ ๋ณ€ํ™˜ํ•˜๊ณ , ๊ฐ ์š”์†Œ๋ฅผ **`mapToInt()`** ๋ฉ”์„œ๋“œ๋ฅผ ์ด์šฉํ•ด **`int`** ํ˜•์œผ๋กœ ๋ณ€ํ™˜ + 3. \*\*mapToInt(Integer::intValue)\*\*๋Š” ๊ฐ ์š”์†Œ๋ฅผ **int**๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๋ฉ”์„œ๋“œ ์ฐธ + 4. \*\*`Integer::intValue`\*\*๋Š” **Integer** ํด๋ž˜์Šค์˜ **intValue** ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ **int**๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธ + 5. **`toArray()`** ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ•ด๋‹น ์ŠคํŠธ๋ฆผ์˜ ์š”์†Œ๋“ค์„ ๋ฐฐ์—ด๋กœ ๋ณ€ํ™˜ + +```java +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +public class Solution { + //์ด์ง„ ํŠธ๋ฆฌ ๋…ธ๋“œ(value : ๋…ธ๋“œ ์ˆซ์ž x,y : ๋…ธ๋“œ ์œ„์น˜ - ์ขŒํ‘œ ) + // left, right : ๊ฐ๊ฐ ์™ผ์ชฝ ์ž์‹์ธ์ง€ ์˜ค๋ฅธ์ชฝ ์ž์‹์ธ์ง€ ๊ตฌ๋ถ„ + private static class Node{ + public final int value; + public final int x; + public final int y; + + public Node left; + public Node right; + + private Node(int value, int x, int y){ + this.value = value; + this.x = x; + this.y = y; + } + } + + // ๋…ธ๋“œ๋ฅผ ์‚ฝ์ž…ํ•˜๋Š” ๋ฉ”์„œ๋“œ, ์ฃผ์–ด์ง„ ๋…ธ๋“œ๋ฅผ ํ˜„์žฌ ๋…ธ๋“œ์˜ ์™ผ์ชฝ ๋˜๋Š” ์˜ค๋ฅธ์ชฝ์— ์‚ฝ์ž… + // ์œ„์น˜ ์ขŒํ‘œ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋น„๊ตํ•˜์—ฌ ์ ์ ˆํ•œ ์œ„์น˜์— ๋…ธ๋“œ๋ฅผ ์‚ฝ์ž… + private void insert(Node root, Node node){ + if(node.x < root.x) { + if (root.left == null) { + root.left = node; + } else { + insert(root.left, node); + } + } + else{ + if(root.right == null){ + root.right = node; + } + else{ + insert(root, node); + } + } + } + + //๋…ธ๋“œ ๋ฐฐ์—ด์„ ๋ฐ›์•„ ์ด์ง„ ํŠธ๋ฆฌ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋ฉ”์„œ๋“œ + // ๋ฐฐ์—ด์˜ ์ฒซ ๋ฒˆ์งธ ๋…ธ๋“œ๋ฅผ ๋ฃจํŠธ๋กœ ์ง€์ •ํ•˜๊ณ , ๋‚˜๋จธ์ง€ ๋…ธ๋“œ๋“ค์„ insert ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด ์ ์ ˆํ•œ ์œ„์น˜์— ์‚ฝ์ž…ํ•˜์—ฌ ์ „์ฒด ํŠธ๋ฆฌ๋ฅผ ๊ตฌ์„ฑ + private Node constructTree(Node[] nodes){ + Node root = nodes[0]; + for(int i = 1; i visits){ + if(node == null) return; + visits.add(node.value); // ํ˜„์žฌ ๋…ธ๋“œ ๊ฐ’์„ ๋ฐฉ๋ฌธ ๋ฆฌ์ŠคํŠธ์— ์ถ”๊ฐ€ + pre(node.left, visits); // ์™ผ์ชฝ ์ž์‹ ๋…ธ๋“œ๋ฅผ ์ „์œ„ ์ˆœํšŒ + pre(node.right, visits); // ์˜ค๋ฅธ์ชฝ ์ž์‹ ๋…ธ๋“œ๋ฅผ ์ „์œ„ ์ˆœํšŒ + } + + // ํ›„์œ„ ์ˆœํšŒ + // ๋…ธ๋“œ์˜ ์™ผ์ชฝ ์ž์‹ ๋…ธ๋“œ์™€ ์˜ค๋ฅธ์ชฝ ์ž์‹ ๋…ธ๋“œ๋ฅผ ์žฌ๊ท€์ ์œผ๋กœ ์ˆœํšŒํ•œ ํ›„, ํ˜„์žฌ ๋…ธ๋“œ์˜ ๊ฐ’์„ ๋ฆฌ์ŠคํŠธ์— ์ถ”๊ฐ€ + private void post(Node node, List visits){ + if(node == null) return; + // ๋๋ถ€ํ„ฐ ํ›„ + post(node.left, visits); + post(node.right, visits); + // ๋งˆ์ง€๋ง‰์— ๋„ฃ์–ด์คŒ + visits.add(node.value); + } + + public int[][] solution(int[][] nodeinfo) + { + Node[] nodes = new Node[nodeinfo.length]; + for (int i = 0; i < nodes.length; i++) + { + // ๊ฐ ์ธ๋ฑ์Šค์— ๋…ธ๋“œ ์ •๋ณด ์ €์žฅ, i + 1์€ ๋…ธ๋“œ์˜ ๊ฐ’์„ ์˜๋ฏธํ•˜๋ฉฐ, nodeinfo[i][0]์€ x ์ขŒํ‘œ, nodeinfo[i][1]์€ y ์ขŒํ‘œ๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค + nodes[i] = new Node(i + 1, nodeinfo[i][0], nodeinfo[i][1]); + } + + Arrays.sort(nodes, (a, b) -> b.y - a.y); // ์œ—๋ถ€๋ถ„๋ถ€ํ„ฐ ์ˆœํšŒํ•˜๊ธฐ ์œ„ํ•ด์„œ y์ขŒํ‘œ๋ฅผ ๋‚ด๋ฆผ์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌ + // ๋…ธ๋“œ ์ •๋ณด๋“ค์ด ์ •๋ ฌ๋˜์—ˆ์œผ๋ฏ€๋กœ, ๋ฐฐ์—ด์˜ ์ฒซ ๋…ธ๋“œ๋ถ€ํ„ฐ ์ˆœํšŒํ•˜๋ฉฐ ํŠธ๋ฆฌ๋ฅผ ๊ตฌ์„ฑํ•œ๋‹ค. + + Node root = constructTree(nodes); // ์ด์ง„ ํŠธ๋ฆฌ ์ƒ์„ฑ + + List preorder = new ArrayList<>(); + pre(root,preorder); + + List postorder = new ArrayList<>(); + post(root,preorder); + + // preorder์™€ postorder ๋ฆฌ์ŠคํŠธ์˜ ์š”์†Œ๋“ค์„ ๊ฐ๊ฐ int ๋ฐฐ์—ด๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ์ตœ์ข…์ ์ธ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ + return new int[][] { + preorder.stream().mapToInt(Integer::intValue).toArray(), + postorder.stream().mapToInt(Integer::intValue).toArray(), + }; + + } +} +``` + +## 3. ์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ + +### ๐Ÿ‡ ์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ(Binary Search Tree) + +![](https://velog.velcdn.com/images/prettylee620/post/901016e1-9d1c-4488-9443-8335ce6e3762/image.png) + +* ์ด์ง„ `ํƒ์ƒ‰`์ด ๋™์ž‘ํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ณ ์•ˆ๋œ ํšจ์œจ์ ์ธ ํƒ์ƒ‰์ด ๊ฐ€๋Šฅํ•œ ์ž๋ฃŒ๊ตฌ์กฐ์˜ ์ผ์ข… +* ์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ์˜ ํŠน์ง• : ์™ผ์ชฝ ์ž์‹ ๋…ธ๋“œ < ๋ถ€๋ชจ ๋…ธ๋“œ < ์˜ค์ชฝ ์ž์‹ ๋…ธ๋“œ + * ๋ถ€๋ชจ ๋…ธ๋“œ๋ณด๋‹ค ์™ผ์ชฝ ๋…ธ๋“œ๊ฐ€ ์ž‘๋‹ค. + * ๋ถ€๋ชจ ๋…ธ๋“œ๋ณด๋‹ค ์˜ค๋ฅธ์ชฝ ๋…ธ๋“œ๊ฐ€ ํฌ๋‹ค + * ์ฆ‰, ๋ชจ๋“  ๋…ธ๋“œ์˜ **์™ผ์ชฝ ์„œ๋ธŒ ํŠธ๋ฆฌ**๋Š” ํ•ด๋‹น ๋…ธ๋“œ์˜ ๊ฐ’๋ณด๋‹ค **์ž‘์€ ๊ฐ’๋“ค๋งŒ** ๊ฐ€์ง€๊ณ  ๋ชจ๋“  ๋…ธ๋“œ์˜ **์˜ค๋ฅธ์ชฝ ์„œ๋ธŒ ํŠธ๋ฆฌ**๋Š” ํ•ด๋‹น ๋…ธ๋“œ์˜ ๊ฐ’๋ณด๋‹ค **ํฐ ๊ฐ’๋“ค๋งŒ** ๊ฐ€์ง„๋‹ค. +* ํƒ์ƒ‰ ๋ฒ”์œ„๊ฐ€ ์ด์ƒ์ ์ธ ๊ฒฝ์šฐ ์ ˆ๋ฐ˜ ๊ฐ€๊นŒ์ด ์ค„์–ด๋“ ๋‹ค. +* ํ•˜์ง€๋งŒ ๋ฐ˜๋Œ€๋กœ ๊ท ํ˜•์ด ๋งž์ง€ ์•Š์œผ๋ฉด ๊ฒ€์ƒ‰ ํšจ์œจ์ด ์ข‹์ง€ ์•Š๋‹ค. + +#### ์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ์˜ ์ตœ์†Ÿ๊ฐ’๊ณผ ์ตœ๋Œ€๊ฐ’ + +* ์ตœ์†Ÿ๊ฐ’ : ํŠธ๋ฆฌ์˜ ๊ฐ€์žฅ ์™ผ์ชฝ์— ์กด์žฌ +* ์ตœ๋Œ“๊ฐ’ : ํŠธ๋ฆฌ์˜ ๊ฐ€์žฅ ์˜ค๋ฅธ์ชฝ์— ์กด์žฌ + +### ๐Ÿ‡ ํŠธ๋ฆฌ ์ˆœํšŒ(Tree Traversal) + +* ํŠธ๋ฆฌ ์ž๋ฃŒ๊ตฌ์กฐ์— ํฌํ•จ๋œ ๋…ธ๋“œ๋ฅผ ํŠน์ •ํ•œ ๋ฐฉ๋ฒ•์œผ๋กœ ํ•œ ๋ฒˆ ์”ฉ ๋ฐฉ๋ฌธํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์˜๋ฏธ + * ํŠธ๋ฆฌ์˜ ์ •๋ณด๋ฅผ ์‹œ๊ฐ์ ์œผ๋กœ ํ™•์ธ ๊ฐ€๋Šฅ + +#### ๋Œ€ํ‘œ์ ์ธ ํŠธ๋ฆฌ ์ˆœํšŒ + +1. **์ „์œ„ ์ˆœํšŒ(Pre-Order Traversal)** + +![](https://velog.velcdn.com/images/prettylee620/post/fd25a405-82dd-4307-90f6-f249d1a7629a/image.png) + +![](https://velog.velcdn.com/images/prettylee620/post/52075908-495f-41f9-9d08-ec7abf0a2e63/image.png) + +* Root โ‡’ Left โ‡’ Right ์ˆœ์œผ๋กœ ๋ฐฉ๋ฌธ +* ๋ฃจํŠธ๋ฅผ ๋จผ์ € ๋ฐฉ๋ฌธ + +```java +// ์ „์œ„ ์ˆœํšŒ + private void pre(Node node, List visits){ + if(node == null) return; + visits.add(node.value); + pre(node.left, visits); + pre(node.right, visits); + } +``` + +2. **์ค‘์œ„ ์ˆœํšŒ(In-Order traversal)** + +![](https://velog.velcdn.com/images/prettylee620/post/e94899a8-6f69-466c-987b-0a234c8d7955/image.png) + +![](https://velog.velcdn.com/images/prettylee620/post/e34cd51a-f5bf-429f-b20b-b45f363ca96f/image.png) + +โ‡’ ์ž‘์€๊ฐ’ ๊ธฐ์ค€์œผ๋กœ ์ˆœ์„œ๋Œ€๋กœ ๋ฐฉ๋ฌธ + +> ์žฌ๊ท€์ ์œผ๋กœ ์™ผ์ชฝ ์„œ๋ธŒ ํŠธ๋ฆฌ ์ˆœํšŒ โ‡’ ํ˜„์žฌ ๋…ธ๋“œ ๋ฐฉ๋ฌธ(๊ฐ’ ์ถœ๋ ฅ) โ‡’ ์žฌ๊ท€์ ์œผ๋กœ ์˜ค๋ฅธ์ชฝ ์„œ๋ธŒ ํŠธ๋ฆฌ ์ˆœํšŒ + +![](https://velog.velcdn.com/images/prettylee620/post/66eb3f4d-0a62-43f4-9132-3f15e2d6298a/image.png) + +* left โ‡’ Root โ‡’ Right ์ˆœ์œผ๋กœ ๋ฐฉ๋ฌธ +* ์žฌ๊ท€์ ์œผ๋กœ ์™ผ์ชฝ ์ž์‹์„ ๋จผ์ € ๋ฐฉ๋ฌธ ํ›„ ๋ฃจํŠธ๋ฅผ ๋ฐฉ๋ฌธ + +3. **ํ›„์œ„ ์ˆœํšŒ(Post-Order)** + +![](https://velog.velcdn.com/images/prettylee620/post/f87996f2-962f-4af1-9a09-36578cfc210f/image.png) + +![](https://velog.velcdn.com/images/prettylee620/post/dbad292e-7c7d-4e45-9de4-436d541381c9/image.png) + +* left โ‡’ right โ‡’ root ์ˆœ์œผ๋กœ ๋ฐฉ๋ฌธ +* ์˜ค๋ฅธ์ชฝ ์ž์‹์„ ๋ฐฉ๋ฌธ ํ›„ ๋ฃจํŠธ ๋ฐฉ๋ฌธ + +```java +// ํ›„์œ„ ์ˆœํšŒ + private void post(Node node, List visits){ + if(node == null) return; + // ๋๋ถ€ํ„ฐ ํ›„ + post(node.left, visits); + post(node.right, visits); + // ๋งˆ์ง€๋ง‰์— ๋„ฃ์–ด์คŒ + visits.add(node.value); + } +``` + +#### ๋น„๊ต + +![](https://velog.velcdn.com/images/prettylee620/post/03320c5a-97bf-4db8-ab17-f0dc9d3050a3/image.png) + +### ๐Ÿ‡ ๋…ธ๋“œ์˜ successor(ํ›„์ž„์ž) + +![](https://velog.velcdn.com/images/prettylee620/post/bb9d07a1-fdb7-47db-af0a-f3ecbb5b41e8/image.png) + +* ํ•ด๋‹น ๋…ธ๋“œ๋ณด๋‹ค ๊ฐ’์ด **ํฐ ๋…ธ๋“œ๋“ค ์ค‘์—์„œ ๊ฐ€์žฅ ๊ฐ’์ด ์ž‘์€ ๋…ธ๋“œ** +* 20์˜ successor : 30 +* 17์˜ sucessor : 20 +* 10์˜ sucessor : 15 + +### ๐Ÿ‡ ๋…ธ๋“œ์˜ predecessor(์„ ์ž„์ž) + +* ํ•ด๋‹น ๋…ธ๋“œ๋ณด๋‹ค ๊ฐ’์ด **์ž‘์€ ๋…ธ๋“œ๋“ค ์ค‘์—์„œ ๊ฐ€์žฅ ๊ฐ’์ด ํฐ ๋…ธ๋“œ** +* 20์˜ predecessor : 17 +* 10์˜ predecessor : 5 +* 40์˜ predecessor : 30 + +### ๐Ÿ‡ ๋ฐ์ดํ„ฐ๋ฅผ ๋„ฃ๋Š” ๊ณผ์ • + +1. ๋ฃจํŠธ ๋…ธ๋“œ : 50 +2. ๋งŒ์•ฝ 70์„ ๋„ฃ๋Š”๋‹ค๊ณ  ํ•˜๋ฉด ๋ฃจํŠธ ๋…ธ๋“œ๋ณด๋‹ค ํฌ๊ธฐ ๋•Œ๋ฌธ์— ์˜ค๋ฅธ์ชฝ์— ์ง‘์–ด ๋„ฃ์Œ + +![](https://velog.velcdn.com/images/prettylee620/post/a2495e35-5c0b-4d6b-8137-2a54fb9d9a10/image.png) + +3. ๋งŒ์•ฝ 90์„ ๋„ฃ์œผ๋ฉด 70๋ณด๋‹ค ํฌ๊ธฐ ๋•Œ๋ฌธ์— ์˜ค๋ฅธ์ชฝ์— ์ง‘์–ด๋„ฃ์Œ + +![](https://velog.velcdn.com/images/prettylee620/post/343ae6ea-d73e-40e8-8eab-4c731066d067/image.png) + +4. 99์„ ๋„ฃ์œผ๋ฉด 50์ด๋ž‘ ๋น„๊ต ํ›„ ํฌ๋‹ˆ๊นŒ ์˜ค๋ฅธ์ชฝ โ‡’ 70์ด๋ž‘ ๋น„๊ต ํ›„ ํฌ๋‹ˆ๊นŒ ์˜ค๋ฅธ์ชฝ โ‡’ 90์ด๋ž‘ ๋น„๊ต ํ›„ ํฌ๋‹ˆ๊นŒ ์˜ค๋ฅธ์ชฝ์— ๋„ฃ์Œ 99 + +![](https://velog.velcdn.com/images/prettylee620/post/cbdf6bf4-9696-4fe8-944f-20939644961b/image.png) + +5. 80์„ ์‚ฝ์ž…ํ•˜๋ฉด 1) 50๋ณด๋‹ค ํฌ๋‹ˆ๊นŒ ์˜ค๋ฅธ์ชฝ 2) 70๋ณด๋‹ค ํฌ๋‹ˆ๊นŒ ์˜ค๋ฅธ์ชฝ 3) 90๋ณด๋‹ค ์ž‘์œผ๋‹ˆ๊นŒ ์™ผ์ชฝ์— ์ตœ์ข… ์‚ฝ์ž… + +![](https://velog.velcdn.com/images/prettylee620/post/87f8d08f-b77c-4b03-bfdf-b3031c4c98a5/image.png) + +6. ์ด๋Ÿฐ ๊ณผ์ •์„ ๋ฐ˜๋ณต โ‡’ ์ตœ์ข… ์ด์ง„ ํŠธ๋ฆฌ + +![](https://velog.velcdn.com/images/prettylee620/post/424db681-f5b1-40e6-9cdc-491adc814748/image.png) + +### ๐Ÿ‡ ์ด์ง„ํŠธ๋ฆฌ ์‚ญ์ œ(delete) + +#### ๊ณผ์ • + +1. ์‚ญ์ œํ•˜๋ ค๋Š” ๋…ธ๋“œ๊ฐ€ ์žˆ๋Š”์ง€ `๊ฒ€์ƒ‰` +2. ์žˆ์œผ๋ฉด ์‚ญ์ œ +3. 20์„ ์‚ญ์ œํ•˜๋ ค๋ฉด 1) 50๋ณด๋‹ค ์ž‘์œผ๋‹ˆ ์™ผ์ชฝ โ‡’ 2) 30๋ณด๋‹ค ์ž‘์œผ๋‹ˆ ์™ผ์ชฝ โ‡’ 20 ๋ฐœ๊ฒฌ โ‡’ ์‚ญ์ œ ํ›„ ๊ฐ’์ด null์ด ๋จ + +![](https://velog.velcdn.com/images/prettylee620/post/223684da-c16a-4b49-a854-356c51323709/image.png) + +![](https://velog.velcdn.com/images/prettylee620/post/13d78203-5211-4eaa-b06c-cb5aa044eba3/image.png) + +4. 30์„ ์ง€์šฐ๋ คํ•จ โ‡’ **๊ทผ๋ฐ ์ž๋…€์ธ 40์ด ์žˆ์Œ** + 1. ์ฆ‰, 30์˜ ๋ถ€๋ชจ์ธ 50์ด 40์„ ๊ฐ€๋ฅดํ‚ค๊ฒŒ ๋ฐ”๊ฟˆ + +![](https://velog.velcdn.com/images/prettylee620/post/971f4b76-1606-4ab7-bdd8-3784b3697b59/image.png) + +5. 50์„ ์ง€์šฐ๋ ค๊ณ  ํ•จ โ‡’ ๊ทผ๋ฐ ์ž๋…€๊ฐ€ ๋‘˜ + 1. ๋‘˜ ์ค‘ ํ•˜๋‚˜์˜ ์„œ๋ธŒํŠธ๋ฆฌ์—์„œ ์˜ค๋ฅธ์ชฝ์€ **๊ฐ€์žฅ ์ž‘์€ ๊ฐ’์„ ์œ„**๋กœ ์˜ฌ๋ฆผ + 2. ์™ผ์ชฝ์˜ ๊ฒฝ์šฐ์—๋Š” **๊ฐ€์žฅ ํฐ ๊ฐ’์„ ์œ„๋กœ** ์˜ฌ๋ฆผ + +![](https://velog.velcdn.com/images/prettylee620/post/b0ae2ee3-b704-4386-bba8-1ae9e08a23a2/image.png) + +#### ์ž๋…€๊ฐ€ `์—†๋Š”` ๋…ธ๋“œ ์‚ญ์ œ(delete) + +* ์‚ญ์ œ๋  ๋…ธ๋“œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋˜ ๋ ˆํผ๋Ÿฐ์Šค๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ๊ฒƒ์ด ์—†๋„๋ก ์ฒ˜๋ฆฌ โ‡’ `null` + +#### ์ž๋…€๊ฐ€ `ํ•˜๋‚˜`์ธ ๋…ธ๋“œ ์‚ญ์ œ(delete) + +* ์‚ญ์ œ๋  ๋…ธ๋“œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋˜ ๋ ˆํผ๋Ÿฐ์Šค๋ฅผ ์‚ญ์ œ๋  ๋…ธ๋“œ์˜ ์ž๋…€๋ฅผ ๊ฐ€๋ฅดํ‚ค๊ฒŒ ๋ณ€๊ฒฝ + +#### ์ž๋…€๊ฐ€ `๋‘˜`์ธ ๋…ธ๋“œ ์‚ญ์ œ(delete) + +* ์‚ญ์ œ๋  ๋…ธ๋“œ์˜ ์˜ค๋ฅธ์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ์—์„œ ์ œ์ผ **๊ฐ’์ด ์ž‘์€** ๋…ธ๋“œ๊ฐ€ ์‚ญ์ œ๋  ๋…ธ๋“œ ๋Œ€์ฒด + +### ๐Ÿ‡ ๋ฐ์ดํ„ฐ ์ถ”๊ฐ€ + +1. ํ˜„์žฌ ํŠธ๋ฆฌ์˜ ์ƒํƒœ + +![](https://velog.velcdn.com/images/prettylee620/post/3b97ca31-23bf-4d04-87d1-0ced6a1dc861/image.png) + +2. ์‚ฝ์ž…์ด๋ž‘ ๋น„์Šทํ•จ ๋น„๊ตํ•ด์„œ ๋„ฃ๊ธฐ + +![](https://velog.velcdn.com/images/prettylee620/post/a868dc23-f3c5-4a4e-b7ac-2cc5bb070aff/image.png) + +3. ์—ฌ๊ธฐ์„œ ๋˜ ๋ฃจํŠธ ๋…ธ๋“œ ์‚ญ์ œ๋˜๋ฉด + 1. ์˜ค๋ฅธ์ชฝ์—์„œ 1) ๊ฐ€์žฅ ์ž‘์€ ๊ฐ’์ธ 80์ด ์œ„๋กœ ์˜ฌ๋ผ๊ฐ€๊ณ  2) 80์˜ ์ž๋…€์ธ 85๋Š” 80์˜ ๋ถ€๋ชจ์˜€๋˜ 90์ด ๊ฐ€๋ฅดํ‚ค๊ฒŒ ๋จ + +![](https://velog.velcdn.com/images/prettylee620/post/f9d60959-7eef-4584-9847-28989f03ecdb/image.png) + +### ๐Ÿ‡ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•˜๋Š” ๊ณผ์ • + +> ์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ๊ฐ€ ์ด๋ฏธ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๋‹ค๊ณ  ๊ฐ€์ •, ์ฐพ๊ณ ์ž ํ•˜๋Š” ์›์†Œ : 37 + +![](https://velog.velcdn.com/images/prettylee620/post/7d818bf4-de18-4aa5-848c-1ea6a57b3fa9/image.png) + +1. ๋ฃจํŠธ ๋…ธ๋“œ๋ถ€ํ„ฐ ๋ฐฉ๋ฌธํ•˜์—ฌ ํƒ์ƒ‰์„ ์ง„ํ–‰ + 1. ํ˜„์žฌ ๋…ธ๋“œ์™€ ์ฐพ๋Š” ์›์†Œ 37์„ ๋น„๊ต + 2. ์ฐพ๋Š” ์›์†Œ๊ฐ€ ๋” ํฌ๋ฏ€๋กœ ์˜ค๋ฅธ์ชฝ ๋ฐฉ๋ฌธ + +![](https://velog.velcdn.com/images/prettylee620/post/2b103a4c-0ae4-49c9-8fe5-42e90b22a0c4/image.png) + +2. ํ˜„์žฌ ๋…ธ๋“œ์™€ ๊ฐ’์„ ๋น„๊ต + 1. ํ˜„์žฌ ๋…ธ๋“œ์™€ ์ฐพ๋Š” ์›์†Œ 37์„ ๋น„๊ต + 2. ์ฐพ๋Š” ์›์†Œ๊ฐ€ ๋” ์ž‘์œผ๋ฏ€๋กœ ์™ผ์ชฝ ๋ฐฉ๋ฌธ + +![](https://velog.velcdn.com/images/prettylee620/post/8ce7b1e3-4060-4614-b1a4-bdb1f7641055/image.png) + +3. ํ˜„์žฌ ๋…ธ๋“œ์™€ ๊ฐ’์„ ๋น„๊ต + 1. ํ˜„์žฌ ๋…ธ๋“œ์™€ ์ฐพ๋Š” ์›์†Œ 37์„ ๋น„๊ต + 2. ์›์†Œ๋ฅผ ์ฐพ์•˜์œผ๋ฏ€๋กœ ํƒ์ƒ‰์„ ์ข…๋ฃŒ + +## 4. AVL ํŠธ๋ฆฌ + +> ์ถœ์ฒ˜ : http://yahma.tistory.com/85 + +![](https://velog.velcdn.com/images/prettylee620/post/16a36b32-e08b-47b3-9c79-bc0bf7f0f176/image.png) + +### ๐Ÿ‡ ์ •์˜ + +* ์ตœ์•…์˜ ๊ฒฝ์šฐ ์„ ํ˜•์ ์ธ ํŠธ๋ฆฌ๊ฐ€ ๋˜๋Š” ๊ฒƒ์„ **๋ฐฉ์ง€ํ•˜๊ณ  ์Šค์Šค๋กœ ๊ท ํ˜•์„ ์žก๋Š”** ์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ +* ๋‘ ์ž์‹ ์„œ๋ธŒํŠธ๋ฆฌ์˜ ๋†’์ด๋Š” ํ•ญ์ƒ ์ตœ๋Œ€ 1๋งŒํผ ์ฐจ์ด ๋‚œ๋‹ค๋Š” ํŠน์ง• +* ํƒ์ƒ‰, ์‚ฝ์ž…, ์‚ญ์ œ ๋ชจ๋‘ ์‹œ๊ฐ„ ๋ณต์žก๋„๊ฐ€ O(logn) + +### ๐Ÿ‡ ๊ท ํ˜• ์ธ์ˆ˜ + +![](https://velog.velcdn.com/images/prettylee620/post/06331d69-34ea-452b-8dc2-6a94c2e07d2f/image.png) + +1. ๊ท ํ˜• ์ธ์ˆ˜ : ๊ท ํ˜•์˜ ์ •๋„๋ฅผ ํ‘œํ˜„ํ•˜๋Š” ๋‹จ์œ„ +2. ๊ท ํ˜• ์ธ์ˆ˜์˜ ์ ˆ๋Œ“๊ฐ’์ด ํฌ๋ฉด ํด์ˆ˜๋ก ๊ทธ๋งŒํผ ํŠธ๋ฆฌ์˜ ๊ท ํ˜•์ด ๋ฌด๋„ˆ์ง„ ์ƒํƒœ +3. ๊ท ํ˜• ์ธ์ˆ˜ ๊ฐ’ = ์™ผ์ชฝ ์„œ๋ธŒ ํŠธ๋ฆฌ์˜ ๋†’์ด - ์˜ค๋ฅธ์ชฝ ์„œ๋ธŒ ํŠธ๋ฆฌ์˜ ๋†’์ด +4. AVL ํŠธ๋ฆฌ๋Š” ๋‘ ์ž์‹์˜ ์„œ๋ธŒํŠธ๋ฆฌ์˜ ๋†’์ด๊ฐ€ ํ•ญ์ƒ ์ตœ๋Œ€ 1๋งŒํผ ์ฐจ์ด ๋‚˜๊ธฐ ๋•Œ๋ฌธ์— ์ ˆ๋Œ“๊ฐ’์ด 2์ด์ƒ์ธ ๊ฒฝ์šฐ ์œ„์น˜ ์žฌ์กฐ์ • ์ง„ํ–‰ + +### ๐Ÿ‡ ๊ท ํ˜•์žก๋Š” ๊ณผ์ • + +![](https://velog.velcdn.com/images/prettylee620/post/7727f866-287d-49fa-bb36-bdca3c7896d0/image.png) + +1. LL ์ƒํƒœ : ๊ท ํ˜•์ธ์ˆ˜ + 2๊ฐ€ ์กด์žฌํ•˜๋Š” ์ƒํƒœ +2. LL ํšŒ์ „ : LL์ƒํƒœ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๊ท ํ˜• ์žก๊ธฐ ์œ„ํ•ด ํšŒ์ „ํ•˜๋Š” ๋ฐฉ๋ฒ• +3. RR ์ƒํƒœ : ๊ท ํ˜• ์ธ์ˆ˜ -2๊ฐ€ ์กด์žฌํ•˜๋Š” ์ƒํƒœ +4. RR ํšŒ์ „ : RR ์ƒํƒœ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๊ท ํ˜•์žก๊ธฐ ์œ„ํ•ด ํšŒ์ „ํ•˜๋Š” ๋ฐฉ๋ฒ• + +## ๋ ˆ๋“œ ๋ธ”๋ž™ ํŠธ๋ฆฌ + +* ๋ชจ๋“  ๋ฆฌํ”„ ๋…ธํŠธ์™€ ๋ฃจํŠธ ๋…ธํŠธ๋Š” ๋ธ”๋ž™์ด๊ณ  ์–ด๋–ค ๋…ธ๋“œ๊ฐ€ ๋ ˆ๋“œ์ด๋ฉด ๊ทธ ๋…ธ๋“œ์˜ ์ž์‹์€ ๋ฐ˜๋“œ์‹œ ๋ธ”๋ž™์ด๋‹ค. diff --git "a/developLog/book/_ \354\232\224\354\246\230 \352\260\234\353\260\234\354\236\220 \354\232\224\354\225\275 \353\260\217 \354\213\240\354\236\205 \352\260\234\353\260\234\354\236\220\354\235\230 \353\260\251\355\226\245\354\204\261 \354\260\276\352\270\260_feat_ \354\273\244\355\224\274\354\261\227__.md" "b/developLog/book/_ \354\232\224\354\246\230 \352\260\234\353\260\234\354\236\220 \354\232\224\354\225\275 \353\260\217 \354\213\240\354\236\205 \352\260\234\353\260\234\354\236\220\354\235\230 \353\260\251\355\226\245\354\204\261 \354\260\276\352\270\260_feat_ \354\273\244\355\224\274\354\261\227__.md" new file mode 100644 index 0000000..7da57f1 --- /dev/null +++ "b/developLog/book/_ \354\232\224\354\246\230 \352\260\234\353\260\234\354\236\220 \354\232\224\354\225\275 \353\260\217 \354\213\240\354\236\205 \352\260\234\353\260\234\354\236\220\354\235\230 \353\260\251\355\226\245\354\204\261 \354\260\276\352\270\260_feat_ \354\273\244\355\224\274\354\261\227__.md" @@ -0,0 +1,422 @@ +--- +description: ์š”์ฆ˜ ๊ฐœ๋ฐœ์ž ์ฑ…์„ ์ฝ๊ณ  ์ ์€ ํ›„๊ธฐ์™€ ์ปคํ”ผ์ฑ— ํ›„๊ธฐ +icon: book-open +cover: >- + https://velog.velcdn.com/images/prettylee620/post/2b599a91-49bb-4594-b765-e80acf5a06b9/image.png +coverY: 0 +--- + +# ์š”์ฆ˜ ๊ฐœ๋ฐœ์ž ์š”์•ฝ ๋ฐ ์‹ ์ž… ๊ฐœ๋ฐœ์ž์˜ ๋ฐฉํ–ฅ์„ฑ ์ฐพ๊ธฐ(feat. ์ปคํ”ผ์ฑ—) + +

์š”์ฆ˜ ๊ฐœ๋ฐœ์ž ์ฑ…

+ +## 1์žฅ ์ด๋Ÿฐ ๊ฐœ๋ฐœ์ž๊ฐ€ ๋˜๊ณ  ์‹ถ์–ด + +![](https://velog.velcdn.com/images/prettylee620/post/e6e104c1-fbf8-4f33-b23e-713993d17faa/image.png) + +> **์šฐ๋ฆฌ๋Š” ํ•ญ์ƒ ์™œ ๊ทธ๋Ÿฐ๊ฐ€**๋ผ๋Š” ์งˆ๋ฌธ์„ ๋˜์ง€๊ณ  ๊ณ ๋ฏผํ•ด์•ผ ํ•œ๋‹ค. ๋‚ด๊ฐ€ ์ƒ๊ฐํ•˜๋Š” ๊ฐœ๋ฐœ์ž์˜ ๋ชจ์Šต ๊ตฌ์ฒด์ ์ธ ๋ชจ์Šต์ด ๊ทธ๋ ค์ง€์ง€ ์•Š๋Š”๋‹ค๋ฉด, ๋จผ์ € ์ž์ฃผ ์‚ฌ์šฉํ•˜๋Š” ์„œ๋น„์Šค๋‚˜ ํšŒ์‚ฌ๋ฅผ ๋– ์˜ฌ๋ ค๋ณด์ž..! + +### 1. ํšŒ์‚ฌ๊ฐ€ ์ •์˜ํ•˜๋Š” ๊ฐœ๋ฐœ์ž + +์–ด๋–ค ๋ฌธ์ œ๋ฅผ ์–ด๋–ป๊ฒŒ ํ•ด๊ฒฐํ–ˆ๋Š”์ง€๋ฅผ ๋ณด๋ฉฐ, ์„ธ์ƒ์—์„œ ์ •์˜ํ•˜๋Š” ๊ฐœ๋ฐœ์ž์˜ ๋ชจ์Šต์ด ๋ฌธ์ œ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ํ•ด๊ฒฐํ•˜๋Š” ๋ฌธ์ œํ•ด๊ฒฐ์‚ฌ๋ผ๋ฉด ํšŒ์‚ฌ๊ฐ€ ์ •์˜ํ•˜๋Š” ๊ฐœ๋ฐœ์ž๋Š” **ํŠน์ • ๋ฌธ์ œ๋ฅผ ํšŒ์‚ฌ๋งŒ์˜ ๋ฐฉ์‹์œผ๋กœ ํƒ์›”ํ•˜๊ฒŒ ํ•ด๊ฒฐํ•˜๋Š” ๋ฌธ์ œํ•ด๊ฒฐ์‚ฌ** + +### 2. ๋‚ด๊ฐ€ ์ •์˜ํ•˜๋Š” ๊ฐœ๋ฐœ์ž + +๊ฐ™์€ ๊ฐœ๋ฐœ์ž์—ฌ๋„ ๋ชจ๋‘ ๋‹ค๋ฅธ ์ปค๋ฆฌ์–ด๋ฅผ ์Œ“์œผ๋ฉด์„œ ๊ทธ ๊ณผ์ •์—์„œ **์ž์‹ ๋งŒ์˜ ์žฅ์ ์ด ๋…น์•„๋“  ๊ธธ์„ ์ง์ ‘ ๋งŒ๋“ค์–ด์•ผ ํ•จ** + +> ์ฆ‰, ์–ด๋–ค ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ณ  ์–ด๋–ค ๊ฐ€์น˜๋ฅผ ๋งŒ๋“œ๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ๋˜๊ณ  ์‹ถ์€์ง€ ๊ณ ๋ฏผํ•˜๋ฉฐ ์ •์˜ + +![](https://velog.velcdn.com/images/prettylee620/post/cef83f7f-3198-4f85-bde9-6ee75ba3c30c/image.png) + +#### 1) ์ข‹์€ ๊ฐœ๋ฐœ์ž์˜ ๋•๋ชฉ + ์ž˜ํ•˜๊ณ  ์‹ถ์€ ๊ฒƒ ์ƒ๊ฐ + +์ข‹์€ ๊ฐœ๋ฐœ์ž์˜ ๋•๋ชฉ์€ ๋ฌด์—‡์ธ๊ฐ€๋ฅผ ๊ณ ๋ฏผํ•˜๋ฉฐ ๋™์‹œ์— ๋‚ด๊ฐ€ ์ž˜ํ•˜๊ณ  ์‹ถ์€ ๊ฒƒ์ด ๋ฌด์—‡์ธ์ง€๋ฅผ ์ƒ๊ฐํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๋‹ค๊ณ  ํ•œ๋‹ค. + +* ์˜ˆ์‹œ๋กœ ๋ฌธ์ œ ์ •์˜, ๋ฌธ์ œ ํ•ด๊ฒฐ, ํ•ด๊ฒฐ๋ฐฉ์•ˆ ๊ณต์œ ๋ผ๊ณ  ์ƒ๊ฐํ•˜๊ณ  ํ•จ๊ป˜ ๋ฐ๊ฒŒ ๋‚˜๋‹ต๊ฒŒ ์„ฑ์žฅํ•  ์ˆ˜ ์žˆ๋Š” ๊ต์œกํ™˜๊ฒฝ์„ ๊ตฌ์ถ•ํ•˜๋Š” ๊ฐœ๋ฐœ์ž + +ํ•œ ๋ฒˆ์— ์ •์˜ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹Œ `๊พธ์ค€ํžˆ ์žฌ์ •์˜`์˜ ํ•„์š”ํ•˜๋‹ค๊ณ  ํ•จ + +#### 2) ๋‚ด ํ˜ธ๊ธฐ์‹ฌ์„ ์ž๊ทนํ•˜๋Š” ๊ฒƒ์€ ๋ฌด์—‡์ธ๊ฐ€ + +> ๋‚˜์™€ ๊ฑฐ๋ฆฌ๊ฐ€ ๋จผ ๊ฐœ๋ฐœ์ž๋ณด๋‹ค๋Š” ์–ด๋–ค ๋ณ€ํ™”๋ฅผ ์ผ์œผํ‚ค๊ณ  ์‹ถ์€์ง€ ์งˆ๋ฌธํ•˜๋ฉฐ ์ ‘๊ทผ + +๋„ˆ๋ฌด ๋งŽ๋‹ค๋ฉด ์ž์‹ ์ด ์–ด๋–ค ๋ถ€๋ถ„์— ๊ฐ€์žฅ ๋งŽ๋Š” ๋ˆ์„ ์“ฐ๋Š”์ง€ ์‚ดํŽด๋ณด๊ณ  ์‹คํŒจํ•œ ๊ฒฝํ—˜ ๋˜ํ•œ ๊ณต์œ ํ•˜์ž. **ํšŒ์‚ฌ์˜ ๋ฌธํ™”์™€ ๋น„์ „์„ ์ดํ•ด**ํ•˜๋ฉด ํ•ด๋‹น ํšŒ์‚ฌ๊ฐ€ ์ž์‹ ์—๊ฒŒ ์ ํ•ฉํ•œ์ง€, ๊ทธ ํšŒ์‚ฌ์˜ ๊ฐœ๋ฐœ์ž๋Š” ์–ด๋–ค ์ข…๋ฅ˜์˜ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•ด์•ผ ํ•˜๋Š”์ง€๋ฅผ ์•Œ ์ˆ˜ ์žˆ๋‹ค. + +๊ทธ๋ ‡๊ฒŒ ๋˜๋ฉด ์ž์‹ ์˜ ์ง„๋กœ์™€ ์ •์ฒด์„ฑ์„ ๋” ๋ช…ํ™•ํ•˜๊ฒŒ ์ •์˜ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ๋‚ด๊ฐ€ ์ง€ํ–ฅํ•˜๋Š” ๊ฐ€์น˜๋ฅผ ์ถ”๊ตฌํ•˜๊ณ  ๋‚ด๊ฐ€ ํ’€๊ณ  ์‹ถ์€ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๊ธฐ์—…์„ ์ฐพ์ž. + +## 2์žฅ ๋˜‘๋˜‘ํ•˜๊ฒŒ ํ•™์Šตํ•˜๊ณ  ์‹ถ์–ด + +![](https://velog.velcdn.com/images/prettylee620/post/8d8f598f-d9b2-4daf-84d0-a589ca8058c1/image.png) + +### 1. ์ถœ๋ฐœํ•˜๊ธฐ ์ „ ๊ณ ๋ฏผํ•ด์•ผ ํ•  ๋‘ ๊ฐ€์ง€ + +> ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ํ•™์Šต์˜ ์‹œ์ž‘์€ ํ”ผ๋“œ๋ฐฑ๊ณผ ํšŒ๊ณ  + +![](https://velog.velcdn.com/images/prettylee620/post/4f903100-c517-4eac-9251-4792b595c837/image.png) + +์ฆ‰๊ฐ์ ์ธ ํ”ผ๋“œ๋ฐฑ์ด ํ•„์š”ํ•˜๋‹ค. ๊ทธ๋ž˜์•ผ ๋” ํšจ๊ณผ์ ์œผ๋กœ ์„ฑ์žฅํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋งˆ์น˜ ๊ฒฝํ—˜์น˜๋ฅผ ์–ป๊ณ  ์„ฑ์žฅํ•˜๋Š” ์†๋„๋ฅผ ๋ณด๋ฉฐ ์žฌ๋ฏธ๋ฅผ ๋Š๋ผ๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ง์ด์ง€ + +์ฃผ๊ธฐ์ ์ธ ํšŒ๊ณ ๊ฐ€ ํ•„์š”ํ•œ ์ด์œ ๋Š” **ํ”ผ๋“œ๋ฐฑ์„ ์ž˜ ๋ฐ˜์˜ํ•˜๊ธฐ ์œ„ํ•ด์„œ**์ด๋‹ค. + +### 2. ๊ฐœ์ธ์ด ํ•˜๋Š” ํšŒ๊ณ  + +* ๊ณต๋ถ€๋ฅผ ๋๋‚ธ ํ›„ **์–ด๋–ค ํ•™์Šต ๋ฐฉ๋ฒ•์ด ๋‚˜์—๊ฒŒ ์œ ์šฉํ–ˆ๋Š”์ง€ ์–ด๋–ค ๋‚ด์šฉ์„ ํ•™์Šต์‹œ ํž˜๋“ค์—ˆ๋Š”์ง€** ์ ์–ด๋ณด๋Š” ๊ฒƒ + +### 3. ํŒ€ ๋‹จ์œ„ ํšŒ๊ณ  + +* ์ •๊ธฐ์ ์ธ ํšŒ๊ณ ๋ฅผ ํ†ตํ•ด ์Šคํ„ฐ๋””๊ฐ€ ๋ชฉ์ ์„ ํ–ฅํ•ด ์ž˜ ๋‚˜์•„๊ฐ€๊ณ  ์žˆ๋Š”์ง€ ๊ฐœ์„  ์—ฌ๋ถ€ ํ™•์ธ ๊ฐ€๋Šฅ + +### 4. ์–ด๋””์„œ ๋ฐฐ์›Œ์•ผ ํ• ๊นŒ + +#### 1) ๐Ÿ“• ์ฑ… : ์ฝ์ง€๋งŒ ๋ง๊ณ  ์ ์šฉํ•˜์ž + +![](https://velog.velcdn.com/images/prettylee620/post/2399c359-90a1-40ed-a67b-65728f078e9f/image.png) + +1. ์‚ดํŽด๋ณด๊ธฐ : ์ „๋ฐ˜์ ์ธ ๊ตฌ์กฐ ์ดํ•ดํ•˜๊ณ  ์–ด๋–ค ๋ถ€๋ถ„์„ ์ง‘์ค‘ํ•ด์„œ ์ฝ์„์ง€๋ฅผ ๊ฒฐ์ • +2. ์งˆ๋ฌธํ•˜๊ธฐ : ๊ฐ ์žฅ์ด๋‚˜ ์ ˆ์„ ์ฝ๊ธฐ ์ „์— ์Šค์Šค๋กœ ์งˆ๋ฌธํ•˜๋Š” ๊ณผ์ •์œผ๋กœ ์ ๊ทน์ ์ธ ํ•™์Šต ํƒœ๋„ +3. ์ฝ๊ธฐ : ์•ž ์„œ ๋งŒ๋“  ์งˆ๋ฌธ๋“ค์— ๋Œ€ํ•œ ๋‹ต์„ ์ฐพ์œผ๋ฉฐ ์‹ฌ๋„ ๊นŠ๊ฒŒ ๊ณ ๋ฏผํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Œ +4. ์š”์•ฝํ•˜๊ธฐ : ์ž์‹ ์˜ ๋ง๋กœ ์š”์•ฝํ•˜๊ณ  ์ค‘์š”ํ•œ ๊ฐœ๋… ์ •๋ฆฌ +5. ๋ณต์Šตํ•˜๊ธฐ : 2๋‹จ๊ณ„์— ๋งŒ๋“  ์งˆ๋ฌธ์— ๋Œœํ•œ ๋‹ตํ•˜๊ณ  ํ•™์Šตํ•œ ๋‚ด์šฉ ๋˜์งš์–ด๋ณด๊ธฐ + +#### 2) ๐Ÿ‘ฉโ€๐Ÿ’ป ์˜จ๋ผ์ธ ๊ฐ•์˜ : ๊ฐ•์‚ฌ ์ƒ๊ฐ๊ณผ ๋‚ด ์ƒ๊ฐ์˜ ์ฐจ์ด๋ฅผ ์ฐพ์ž + +![](https://velog.velcdn.com/images/prettylee620/post/218a3dbb-1abe-4c82-afec-9cec8de4f2cb/image.png) + +1. ๋ชฉ์ฐจ๋ณด๊ธฐ : ๋ฐฐ์šธ ๋‚ด์šฉ ์‹œ๋ฎฌ๋ ˆ์ด์…˜ +2. ๋‚ด๊ฐ€ ์ƒ๊ฐ ํ•œ ๋‚ด์šฉ๊ณผ ๊ฐ•์‚ฌ์˜ ์ด์•ผ๊ธฐ ๋น„๊ต : ์™œ ๊ฐ™๊ณ  ๋‹ค๋ฅธ์ง€ ์ด์œ ๋ฅผ ํŒŒ์•…ํ•˜๋ฉฐ ์ง€์‹์„ ๋Šฅ๋™์  ํก์ˆ˜ +3. ๊ณผ๊ฑฐ์˜ ๊ฒฝํ—˜๊ณผ ๊ฐ•์˜ ๋‚ด์šฉ์„ ์ ๊ทน์  ์ ‘๋ชฉ : ์ •๋ฆฌํ•˜๋Š” ๊ฒƒ์— ๊ทธ์น˜๋Š” ๊ฒƒ์ด ์•„๋‹Œ ๊ฒฝํ—˜ ์ ๊ทน์  ๋ฐ˜์˜ + +> ํ”„๋กœ๊ทธ๋ž˜๋ฐ ํ•™์Šต์— ์žˆ์–ด ํ•˜๋‚˜์˜ ์ •๋‹ต์€ ์—†๋‹ค. **์ตœ์ ์˜ ํ•™์Šต ํ™˜๊ฒฝ์€ ์Šค์Šค๋กœ ๋งŒ๋“ค์–ด ๋‚˜๊ฐ€์•ผ ํ•œ๋‹ค** + +#### 3) โ“ ์–ด๋–ค ๊ฒƒ๋ถ€ํ„ฐ ๊ณต๋ถ€ํ•ด์•ผ ํ• ๊นŒ + +ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ๋ณธ์งˆ์€ ๋ฌธ์ œ ํ•ด๊ฒฐ์ด๋ฏ€๋กœ ์–ด๋–ค ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ• ์ง€ ๋จผ์ € ์ •์˜ํ•˜๊ณ  ๊ทธ ๋ฌธ์ œ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์ ์ ˆํ•œ ๋„๊ตฌ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š” => `ํ•ด๊ฒฐํ•˜๊ณ  ์‹ถ์€ ๋ฌธ์ œ`์— ์ดˆ์ ์„ ๋งž์ถฐ ํ•™์Šต ๋ฐฉํ–ฅ์„ ์„ค์ • + +**Step 1 ๋‚ด๊ฐ€ ํ•ด๊ฒฐํ•ด๋ณด๊ณ  ์‹ถ์€ ๋ฌธ์ œ์™€ ๋งฅ๋ฝ ์ฐพ๊ธฐ** + +ํ‰์†Œ ๊ด€์‹ฌ์„ ๊ฐ€์กŒ๋˜ ํšŒ์‚ฌ๋‚˜ ์„œ๋น„์Šค๋ฅผ ์‚ดํŽด๋ณด๋ฉด์„œ ๋‚ด๊ฐ€ ์ •์˜ํ•œ ๊ฐœ๋ฐœ์ž์˜ ๋ชจ์Šต๊นŒ์ง€ ๊ณ ๋ฏผํ•œ๋‹ค๋ฉด ํ•ด๊ฒฐํ•˜๊ณ ์ž ํ•˜๋Š” ๋ฌธ์ œ๋ฅผ ์ฐพ๋Š” ๊ณผ์ •์€ ๋” ์‰ฌ์›Œ์งˆ ๊ฒƒ + +**Step 2 ์‹ค๋ฌด์ž์—๊ฒŒ ์—ฐ๋ฝํ•˜๊ธฐ** + +> \*\* ์—ฐ๋ฝํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•\*\* + +* ์ธํ”„๋Ÿฐ ์ปคํ”ผ์ฑ— +* ์ปคํ”ผ์ฑ— ์•ฑ +* ํŠธ์œ„ํ„ฐ +* ๋งํฌ๋“œ์ธ +* ์˜คํ”ˆ ์นดํ†ก๋ฐฉ + +๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ์—ญ๋Ÿ‰์„ ์‹ค๋ฌด์ž์—๊ฒŒ ๋ฌผ์–ด๋ณด๋ฉฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์œผ๋กœ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ์‚ฌ๋žŒ์„ ์ฐพ์ž(๋งํฌ๋“œ์ธ ์ฝœ๋“œ๋ฉ”์ผ) + +**Step 3 ๊ฐ ํŒ€์—์„œ ์›ํ•˜๋Š” ์—ญ๋Ÿ‰ ์กฐ์‚ฌํ•˜๊ธฐ** + +์›ํ•˜๋Š” ์ง๊ตฐ๊ณผ ํšŒ์‚ฌ์—์„œ ์ผํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๊ฐ€์žฅ ๋†’์€ ์—ญ๋Ÿ‰ ํŒŒ์•…ํ•˜๊ณ  ์ด๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์„ฑ์žฅํ•˜๋Š” ์‚ฌ์ดํด ๋งŒ๋“ค๊ธฐ + +> * ํŒ€ ๋ฌธํ™”๋Š” ์–ด๋–ค์ง€ + +* ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋Š”์ง€ +* pr ๋ฆฌ๋ทฐ๋Š” ์–ด๋–ป๊ฒŒ ์ง„ํ–‰ํ•˜๋Š”์ง€ +* ํ˜„์žฌ ํŒ€์—์„œ ๊ฐ€์žฅ ๋ชฉ๋ง๋ผํ•˜๋Š” ์—ญ๋Ÿ‰์€ ๋ฌด์—‡์ธ์ง€ + +> ์ฑ„์šฉ ๊ณต๊ณ ์— ์žˆ๋Š” ๋ชจ๋“  ์š”๊ฑด์„ ์ถฉ์กฑํ•˜๋Š” ์‚ฌ๋žŒ์€ ๊ฑฐ์˜ ์—†๋‹ค. **์ฑ„์šฉ ๊ณต๊ณ ์—์„œ ์–ด๋–ค ๊ฒƒ์ด ๋” ์ค‘์š”ํ•œ ์ง€ ํŒŒ์•…ํ•˜๊ณ  ์ฑ„์šด ํ›„ ๋‚˜๋จธ์ง€ ์—ญ๋Ÿ‰์€ ์–ด๋– ํ•œ ๋ฐฉํ–ฅ์œผ๋กœ ์ ์ง„์ ์œผ๋กœ ์„ฑ์žฅ์‹œํ‚ค๋ ค๊ณ  ํ•œ๋‹ค๋Š” ๊ฐ€๋Šฅ์„ฑ์„ ๋ณด์—ฌ์ฃผ๋Š” ๊ฒƒ์ด ์ค‘์š”** + +๋ฌธ์ œ ํ•ด๊ฒฐ์— ํ•„์š”ํ•œ ์—ญ๋Ÿ‰์„ ์ ๊ทน์ ์œผ๋กœ ์ฐพ์•„์„œ ํ•™์Šตํ•˜๋Š” ์‚ฌ์ดํด์„ ๋งŒ๋“ค์–ด์•ผ ๋น ๋ฅด๊ฒŒ ์„ฑ์žฅ ๊ฐ€๋Šฅํ•˜๊ณ  ๋ฒˆ์•„์›ƒ์ด ๋œ ์˜ฌ ์ˆ˜ ์žˆ๋‹ค. ์ œ๋Œ€๋กœ ๋ชฉํ‘œ์— ๋‹ค๊ฐ€๊ฐ€๊ณ  ์žˆ๋Š”๊ฐ€์— ๋Œ€ํ•œ ์งˆ๋ฌธ์„ ์Šค์Šค๋กœ ํ•˜๊ธฐ + +#### 4) ๋ฌด์—‡๋ถ€ํ„ฐ ๋งŒ๋“ค์–ด์•ผ ํ• ๊นŒ + +1. ๋™์ž‘ ๊ฐ€๋Šฅํ•œ ์ž‘์€ ๋ฒ„์ „๋ถ€ํ„ฐ ๋งŒ๋“ค๊ธฐ : ํ•ต์‹ฌ ๊ธฐ๋Šฅ ํŒŒ์•… ๊ฐ€๋Šฅ + +* ํ™•์‹ค์„ฑ์— ๋Œ€์‘ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ์ž์˜ ํ”ผ๋“œ๋ฐฑ์„ ๋ฐ›์œผ๋ฉฐ `์ ์ง„์  ๋ฐœ์ „`์‹œ์ผœ์•ผ ํ•œ๋‹ค. ์ฆ‰ ๋‹ค ๊ตฌํ˜„์„ ๋ชปํ•˜๋”๋ผ๋„ ์–ธ์ œ๋‚˜ ํ•ต์‹ฌ ๊ธฐ๋Šฅ์ด ๋™์ž‘ํ•˜๋„๋ก ๋งŒ๋“œ๋Š” ์—ฐ์Šต + +2. ์—ฐ๊ณ„ ๊ธฐ๋Šฅ ํ™•์žฅ +3. ๋ ˆ์ด์•„์›ƒ ๊ตฌํ˜„ +4. ์Šคํƒ€์ผ ์ ์šฉ +5. ์‚ฌ์šฉ์ž ํ”ผ๋“œ๋ฐฑ ์ ์šฉ : ์–ด๋–ป๊ฒŒ ํ”ผ๋“œ๋ฐฑ์„ ์š”์ฒญํ• ๊นŒ + +#### 5) ์งˆ๋ฌธ์„ ๋˜‘๋˜‘ํ•˜๊ฒŒ ํ•  ๊ฒƒ + +> ํ”ผ๋“œ๋ฐฑ์„ ์š”์ฒญํ•  ๋•Œ๋Š” ๋ชฉ์ ์„ ๋ถ„๋ช…ํžˆ ํ•˜๊ณ  ํ˜„์žฌ ์ƒํ™ฉ์„ ๊ตฌ์ฒด์ ์œผ๋กœ ์„ค๋ช…ํ•˜๋ฉฐ ์„œ๋กœ ์ดํ•ดํ•œ ๋‚ด์šฉ์ด ์ผ์น˜ํ•˜๋Š”์ง€ ํ™•์ธํ•˜๋Š” ๊ณผ์ • + +#### 6) ์Šคํ„ฐ๋‚ด ๋‚ด์—์„œ์˜ ํ”ผ๋“œ๋ฐฑ ์ „๋žต + +1. ๊ตฌ์ฒด์ ์ธ ๋ชฉํ‘œ ์„ค์ • + +> Ex. X์‹œ๊ฐ„ ์•ˆ์— y ๊ตฌํ˜„ํ•˜๊ธฐ ์ž๋ฐ”์Šคํฌ๋ฆฝ์œผ ๊ธฐ๋ณธ์„œ์—์„œ ๋ชจ๋ฅด๋Š” ๊ฐœ๋… ๋‹ค๋ฃฌ ์ฑ•ํ„ฐ 4๊ฐœ ํ•œ๋‹ฌ ๊ฐ„ ๊ณต๋ถ€ํ•œ ํ›„ ์˜ˆ์ œ๋ฅผ ํ†ตํ•ด ์„ค๋ช… ํ•  ์ˆ˜ ์žˆ์„ ์ •๋„๋กœ ํ•™์Šตํ•˜๊ธฐ + +2. ์ฃผ๊ธฐ์ ์ธ ๋ชฉ์  ํ™•์ธ ๋˜‘๋˜‘ํ•˜๊ฒŒ ์งˆ๋ฌธํ•˜๊ธฐ +3. ์„ฑ์˜ ์žˆ๊ฒŒ ์งˆ๋ฌธํ•˜๊ธฐ : ์‹œํ–‰์ฐฉ์˜ค ๊ณผ์ •์„ ์„ค๋ช…ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋Ÿฌ๋ฒ„๋• ๋””๋ฒ„๊น…์ด๋ผํ•˜๋ฉฐ ์งˆ๋ฌธํ•˜๊ธฐ ์ „ ๋ฐœ์ƒํ•œ ๋ฌธ์ œ๋ฅผ ์ฒ˜์Œ๋ถ€ํ„ฐ ์„ค๋ช…ํ•˜๊ณ  ํ•ด๊ฒฐํ•ด๋ณด๋Š” ๋ฐฉ๋ฒ• => ๋‹ต๋ณ€ํ•ด์ฃผ๋Š” ์‚ฌ๋žŒ ๋˜ํ•œ ๋ชจ๋“  ๋‹จ๊ณ„์— ๋Œ€ํ•œ ์„ค๋ช… ํ•ด ์ค„ ๊ฒƒ +4. ์Šคํƒ€์ผ๋ณด๋‹ค๋Š” ๊ตฌ์ฒด์ ์ธ ํ•ด๊ฒฐ๋ฐฉ์•ˆ ์งˆ๋ฌธํ•˜๊ธฐ ์ €๋Š” ์ด๋Ÿฐ ๋ฐฉ์‹์œผ๋กœ ๊ตฌํ˜„ํ–ˆ๋Š”๋ฐ ํ˜น์‹œ ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์ด ์žˆ์„๊นŒ์š”? +5. ์ดํ•ด ๋‚ด์šฉ ์‹ฑํฌ ๋งž์ถ”๊ธฐ + +#### 7) ํŽ˜์–ด ํ”„๋กœ๊ทธ๋ž˜๋ฐ + +![](https://velog.velcdn.com/images/prettylee620/post/8cb2e6f3-7206-46c8-a934-b12fc67d4069/image.png) + +> ์˜ค๋ฅ˜๋ฅผ ๋นจ๋ฆฌ ํƒ์ง€ํ•˜๋„ ๋ฒ„๊ทธ ์ˆ˜๋ฅผ ์ค„์ผ ์ˆ˜ ์žˆ๊ณ  ํŒ€์› ๊ฐ„์˜ ์‹ ๋ขฐ๊ฐ€ ๋†’์•„์ง€๋ฉฐ ๋” ์ฝ๊ธฐ ์ข‹์€ ์ฝ”๋“œ๋ฅผ ๋งŒ๋“ค ํ™•๋ฅ ์ด ๋†’์•„์ง„๋‹ค. + +**๐Ÿ’ฅ ๋‚ด๋น„๊ฒŒ์ดํ„ฐ์™€ ๋“œ๋ผ์ด๋ฒ„** + +* **๋“œ๋ผ์ด๋ฒ„** :ํ‚ค๋ณด๋“œ๋ฅผ ์ง์ ‘ ์žก๊ณ  ํ”„๋กœ๊ทธ๋žจ ์ž‘์„ฑํ•˜๋Š” ์—ญํ•  +* **๋‚ด๋น„๊ฒŒ์ดํ„ฐ** : ๋‚ด๋น„๊ฒŒ์ด์…˜์ฒ˜๋Ÿผ ์ „์ฒด ์ง€๋„๋ฅผ ๋ณด๋ฉฐ ๋ชฉ์ ์ง€๊นŒ์ง€ ์ œ๋Œ€๋กœ ๊ฐˆ ์ˆ˜ ์žˆ๊ฒŒ ํ™•์ธํ•˜๋Š” ์—ญํ• , ๋ฒ„๊ทธ ํ™•์ธ + +**๐Ÿ’ฅ ํŽ˜์–ด ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ์ฃผ์˜์ ** + +1. ํ•œ ์‚ฌ๋žŒ์ด ํ•œ ๊ฐ€์ง€ ์—ญํ• ์„ ์˜ค๋ž˜ ํ•˜์ง€ ์•Š์•„์•ผ ํ•œ๋‹ค. +2. ์ˆ˜ํ‰ ๊ด€๊ณ„ ์œ ์ง€ +3. ๋ฌธ์ œ์€ ๋ช…ํ™•ํ•˜๊ฒŒ ์ •์˜ํ•˜๊ณ  ์š”๊ตฌ ์‚ฌํ•ญ์„ ํ•จ๊ป˜ ์ •๋ฆฌ +4. ์ฝ”๋”ฉ ์Šคํƒ€์ผ ๊ทœ์น™์„ ์ •ํ•˜๊ณ  ์š”๊ตฌ์‚ฌํ•ญ์„ ๋งŒ๋“ค๋ฉฐ, ํŽธํ•˜๊ฒŒ ์ด์•ผ๊ธฐ๋ฅผ ๋‚˜๋ˆ„๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๋‹ค. ๋งˆ์ง€๋ง‰์œผ๋กœ ํšŒ๊ณ ๊นŒ์ง€ ํ•ด์ฃผ์ž. + +#### 8) ํšจ๊ณผ์ ์ธ ์ฝ”๋“œ ๋ฆฌ๋ทฐ ๋ฐฉ๋ฒ• + +1. ํ•ด๊ฒฐํ•˜๊ณ  ์‹ถ์€ ๋ฌธ์ œ์˜ ์˜๋„ ๋“œ๋Ÿฌ๋‚ด๊ธฐ : ๋‚ด๊ฐ€ ๋จผ์ € ์ฝ”๋“œ๋ฅผ ๋ณต๊ธฐํ•˜๋‹ค๊ฐ€ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๊ฒฝ์šฐ๋„ ์žˆ์Œ ๋ณต๊ธฐ ํ›„ ํ”ผ๋“œ๋ฐฑ ์š”์ฒญ +2. ์ฝ”๋“œ ๋ฆฌ๋ทฐ ๊ณผ์ •์—์„œ ๋ฆฌ์•ก์…˜ํ•˜๊ธฐ\ + : ์งˆ๋ฌธ์„ ๋˜‘๋˜‘ํ•˜๊ฒŒ ํ•˜๋ฉฐ, ํ”ผ๋“œ๋ฐฑ ์ ๊ทน์  ๋ฐ˜์˜ +3. ์ฝ”๋“œ ๋ฆฌ๋ทฐ ํ›„ ํšŒ๊ณ ๋กœ ๋˜๋Œ์•„๋ณด๊ธฐ : ๋‚ด๊ฐ€ ๋‹ค์Œ์— ๋” ์ž˜ํ•˜๊ณ  ์‹ถ์€ ๋ถ€๋ถ„์ด๋‚˜ ๋งŒ์กฑ์Šค๋Ÿฌ์šด ๋ถ€๋ถ„์— ์‚ดํŽด๋ณด๋Š” ๊ณผ์ •๊ณผ ์ฝ”๋“œ ๋ฆฌ๋ทฐ ํ›„ ๊ทœ์น™ ๋งŒ๋“ค๊ธฐ + +**๐Ÿ’ฅ ์ฝ”๋“œ ๋ฆฌ๋ทฐ ์‹œ ๊ฒ€ํ† ํ•  ํ•ญ๋ชฉ** + +**1. ์ด ์ฝ”๋“œ๊ฐ€ ์–ด๋–ค ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š”๊ฐ€(ํŠนํžˆ ์ค‘์š”)** : ๋†“์นœ ๊ฒฝ์šฐ์˜ ์ˆ˜๋Š” ์—†๋Š”์ง€ ํ˜น์€ ์˜ˆ์ƒ ๋˜๋Š” ๋ฒ„๊ทธ๋Š” ์—†๋Š” ์ง€ ์‚ดํŽด๋ณด๋Š” ๊ฒƒ์ด ์ค‘์š” + +**2. ์ฝ”๋“œ ํ‘œ์ค€์„ ์ง€์ผฐ๋Š”์ง€** ์ฝ”๋”ฉ ํ‘œ์ค€์€ ์ฝ”๋“œ ๊ฐ€๋…์„ฑ, ์ผ๊ด€์„ฑ, ์œ ์ง€ ๋ณด์ˆ˜์„ฑ, ๋ฒ„๊ทธ ์œ„ํ—˜ ๊ฐ์†Œ ๋“ฑ ๋‹ค์–‘ํ•œ ์ด์œ ๋กœ ์ค‘์š”ํ•˜๊ฒŒ ์—ฌ๊ฒจ์ง + +**3. ์„ฑ๋Šฅ ๋ฐ ํ™•์žฅ์„ฑ์„ ํ™•์ธํ–ˆ๋Š”๊ฐ€** ํ˜„์žฌ ์ฝ”๋“œ๊ฐ€ ์ปดํ“จํ„ฐ์˜ ์ž์›์„ ํ•„์š” ์ด์ƒ์œผ๋กœ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋””, ์‚ฌ์šฉ์ž์˜ ์ž…๋ ฅ ๋˜๋Š” ๋ฐ์ดํ„ฐ ์ˆ˜๊ฐ€ ์ฆ๊ฐ€ํ•˜๋ฉด์„œ ์ฒ˜๋ฆฌ ์†๋„๊ฐ€ ์ €ํ•˜๋˜๊ฑฐ๋‚˜ ๋ฉˆ์ถ”๋Š” ์ผ์ด ์—†๋Š”์ง€ ๋“ฑ์„ ํŒ๋‹จํ•œ๋‹ค. + +**4. ๋ณด์•ˆ ์ธก๋ฉด์—์„œ ์ทจ์•ฝํ•œ ๋ถ€๋ถ„์€ ์—†๋Š”๊ฐ€** + +**๐Ÿ’ฅ ์ฒดํฌ๋ฆฌ์ŠคํŠธ๋ฅผ ๋งŒ๋“ค๊ณ  ํ™•์ธ** + +> **์ฝ”๋“œ ๋ฆฌ๋ทฐ ์‹œ ์™„๋ฒฝํ•˜์ง€ ์•Š์•„๋„ ๊ณต์œ ํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”**ํ•˜๋ฉฐ, ์‹œ๊ฐ„ ์ œํ•œ์„ ์ •ํ•˜๋Š” ๊ฒƒ์„ ์ถ”์ฒœํ•œ๋‹ค๊ณ  ํ•จ + +๋‹จ, ์ฝ”๋“œ ๋ฆฌ๋ทฐ๋Š” ๊ตฌ์ฒด์ ์ธ ํ•ด๊ฒฐ ๋ฐฉ์•ˆ์„ ์งˆ๋ฌธํ•˜๋ฉฐ ๋˜‘๋˜‘ํ•˜๊ฒŒ ์š”์ฒญํ•ด์•ผ ํ•˜๋Š”๋ฐ ์ฝ”๋“œ์™€ ํ•จ๊ป˜ ๋‚ด ์˜๋„์™€ ํ”ผ๋“œ๋ฐฑ ๋ฐ›๊ณ  ์‹ถ์€ ๋ถ€๋ถ„์„ ์ž์„ธํžˆ ๋‚จ๊ฒจ์•ผ ํ•จ + +#### 9) ์ฑ— ์ง€ํ”ผํ‹ฐ๋กœ ํ•™์Šต๋ฒ• + +1. ๋™์ž‘ ๊ฐ€๋Šฅํ•œ ๊ฐ€์žฅ ์ž‘์€ ๋ฒ„์ „๋ถ€ํ„ฐ ๋ฌผ์–ด๋ณด๊ธฐ : ์†Œํ”„ํŠธ์›จ์–ด์˜ ๋ณธ์งˆ์€ ๋ฌธ์ œ ํ•ด๊ฒฐ์ด๋ฏ€๋กœ ๋ฌธ์ œ ํ•ด๊ฒฐํ•˜๋Š” ๊ณผ์ •์—์„œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ๋ฐฐ์šฐ๋ฉด ํ•™์Šต ํšจ๊ณผ๊ฐ€ ๋” ํฌ๋‹ค +2. ์ฝ”๋“œ ์ž‘์„ฑ ๋ฐ ๋ฆฌ๋ทฐ ์š”์ฒญํ•˜๊ธฐ : ์ฑ—์ง€ํ”ผํ‹ฐ๊ฐ€ ์ž‘์„ฑํ•œ ์ฝ”๋“œ๊ฐ€ ์–ด๋–ค ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ๊ฒƒ์ธ์ง€ ๊ฐ„๋žตํ•˜๊ฒŒ ์„ฑ๋ช…๋ผ๋„ ๊ฐœ์„  ๊ฐ€๋Šฅํ•œ ๋ฌธ์˜(๊ตฌ์ฒด์ ์ธ ์˜ˆ์‹œ) + +> * ์„ฑ๋Šฅ ์ตœ์ ํ™”๋ฅผ ์œ„ํ•ด ์ด ์ฝ”๋“œ๋ฅผ ์–ด๋–ป๊ฒŒ ๊ฐœ์„ ํ•  ์ˆ˜ ์žˆ์„๊นŒ์š”? + +* ์ด ์ฝ”๋“œ์˜ ๋ณด์•ˆ ์œ„ํ—˜ ์š”์†Œ๊ฐ€ ์žˆ๋‚˜์š”? + +3. ๋ฐฉํ–ฅ์„ฑ๊ณผ ์˜ˆ์‹œ ์š”์ฒญํ•˜๊ธฐ ์ฝ”๋“œ ์ž‘์„ฑ ์‹œ ์–ด๋ ค์›€์„ ๋Š๋‚€๋‹ค๋ฉด ์ง€๊ธˆ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์–ด๋–ค ๊ฒƒ์ฃผํ„ฐ ์‹œ๋„ํ•ด์•ผ ํ•˜๋Š”์ง€ ์ดํ•ดํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๋‹ค. ๊ฒ€์ƒ‰๊ณผ ํ•™์Šต์„ ํ†ตํ•ด ๋‚ด์šฉ์„ ๊ฒ€์ฆํ•˜๋ฉฐ ๊ฐ•๋ ฅํ•œ ํ”ผ๋“œ๋ฐฑ ๋„๊ตฌ๋กœ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋‹ค. + +## 4์žฅ ํ•จ๊ป˜ ์„ฑ์žฅํ•˜๊ณ  ์‹ถ์–ด + +> 3์žฅ์€ ์ด๋ ฅ์„œ ๊ด€๋ จ์ด๋ผ ์ฝ๊ธฐ๋งŒ ํ•˜๊ณ  ์ •๋ฆฌ๋Š” no no + +### 1. ํ˜ผ์ž ๊ณต๋ถ€ํ•˜๊ณ  ์žˆ๋‹ค๋ฉด + +> ํ”ผ๋“œ๋ฐฑ์„ ์ฃผ๊ณ  ๋ฐ›์„ ์ˆ˜ ์žˆ๋Š” ํ™˜๊ฒฝ์— ์ฐธ์—ฌํ•˜๋ฉฐ ์„ฑ์žฅํ•  ์ˆ˜ ์žˆ๋Š” ํ™˜๊ฒฝ ์ง์ ‘ ๋งŒ๋“ค๊ธฐ + +**๋ชฉํ‘œ, ๊ธฐ๊ฐ„, ๊ทœ์น™ ์ •ํ•˜๊ธฐ** + +
+ +๋ชฉํ‘œ ์„ค์ • + +* ์ธก์ •ํ•  ์ˆ˜ ์žˆ๋Š” ๋ชฉํ‘œ๋ฅผ ์„ค์ •ํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€์žฅ ์ค‘์š” +* ์ž๋ฐ”์ŠคํŠธ๋ฆฝํŠธ 10๊ฐ€์ง€ ํ•ต์‹ฌ ๊ฐœ๋…์„ ์˜ˆ์‹œ์™€ ํ•จ๊ป˜ ์„ค๋ช…ํ•  ์ˆ˜ ์žˆ๋„๋ก ์—ฐ์Šตํ•˜๊ธฐ + +๊ธฐ๊ฐ„ ์„ค์ • + +* ํ•œ ๋‹ฌ ์ด๋‚ด๋กœ ์งง๊ฒŒ ์„ค์ •ํ•ด์„œ ์ž‘์€ ์„ฑ๊ณต ๋น ๋ฅด๊ฒŒ ๋ง›๋ณด๊ธฐ +* ๋ฐ”์  ๋•Œ๋Š” ์ž ์‹œ ๋ฉˆ์ถฐ๊ฐ€๊ธฐ + +๊ทœ์น™ ์„ค์ • + +* ์Šคํ„ฐ๋”” ์‹œ๊ฐ„์— ๋Šฆ์„ ๊ฒƒ ๊ฐ™๋‹ค๋ฉด 10๋ถ„ ์ „๊นŒ์ง€ ๋ฉ”์„ธ์ง€ ๊ณต์œ ํ•˜๊ธฐ ์ฒ˜๋Ÿผ ๊ตฌ์ฒด์ ์œผ๋กœ ์„ค์ • +* ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๊ทœ์น™ 2-3์ง€ + +### 2. ํ™˜๊ฒฝ์„ ์ž˜ ์šด์˜ํ•˜๊ธฐ + +1. ๋ชจ๋“  ๊ตฌ์„ฑ์›์˜ ๋Šฅ๋™์  ์ฐธ์—ฌ +2. ์ค‘๊ฐ„ ํšŒ๊ณ  + +#### 1) ์˜๋ฏธ ์žˆ๊ฒŒ ๋งˆ๋ฌด๋ฆฌ + +๊ฐœ๋…์„ ์ ์šฉํ•˜๊ณ  ํ•จ๊ป˜ ํ•™์Šตํ•œ ๋‚ด์šฉ์œผ๋กœ ๊ฐ์ž ์–ด๋–ค ๊ฒฝํ—˜์œผ๋กœ ๊ฐœ์ฒ™ํ•ด๋‚˜๊ฐ€๋Š”์ง€ ๊ณต์œ ํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€์น˜ ์žˆ๋Š” ์ผ์ด๋ฉฐ ๋‹ค๋ฅธ ์‚ฌ๋žŒ๊ณผ ํ”ผ๋“œ๋ฐฑ์„ ์ฃผ๊ณ ๋ฐ›๋Š” ํ™˜๊ฒฝ ๊ฐœ์ฒ™ + +#### 2) ํšŒ์‚ฌ์—์„œ ๋‚˜ ํ˜ผ์ž๋ผ๋ฉด + +์Šค์Šค๋กœ ๋งŒ๋“œ๋Š” ํ™˜๊ฒฝ ์–ด๋–ป๊ฒŒ ํ•˜๋ฉด ๊ฐœ๋ฐœ ์ค‘์— ํ”ผ๋“œ๋ฐฑ์„ ๋ฐ›์„ ์ˆ˜ ์žˆ๋Š”์ง€ ๊ณ ๋ฏผํ•ด์•ผ ํ•œ๋‹ค. + +#### 3) ํ˜ผ์ž์ธ ์ƒํ™ฉ์—์„œ๋„ ํ”ผ๋“œ๋ฐฑ์„ ๋ฐ›๋Š” ๋ฐฉ๋ฒ• + +1. ํšŒ์‚ฌ ๋‚ด ๋™๋ฃŒ ๋งŒ๋“ค๊ธฐ : ๋‹ค๋ฅธ ํŒ€์— ํ˜ผ์žํ•˜๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ์žˆ๋‹ค๋ฉด ์ฐพ์•„๋ณด์ž +2. ์™ธ๋ถ€ ํ™˜๊ฒฝ ๋งŒ๋“ค๊ธฐ : ๋‚ด๋ถ€์—์„œ ์ฐพ๊ธฐ ์–ด๋ ต๋‹ค๋ฉด ์™ธ๋ถ€์—์„œ ์Šคํ„ฐ๋””๋‚˜ ์ปค๋ฎค๋‹ˆํ‹ฐ๋ฅผ ํ†ตํ•ด ํ•จ๊ป˜ ์„ฑ์žฅํ•  ๋™๋ฃŒ ์ฐพ๊ธฐ +3. ๋‹ค๋ฅธ ์ง๊ตฐ์˜ ๋™๋ฃŒ์™€ ํŽ˜์–ด ํ”„๋กœ๊ทธ๋ž˜๋ฐํ•˜๊ธฐ ํ˜ผ์ž๋ผ๊ณ  ๋Š๊ปด์ง€๊ฑฐ๋‚˜ ์ถฉ๋ถ„ํ•œ ํ”ผ๋“œ๋ฐฑ์„ ๋ฐ›์ง€ ๋ชปํ•˜๊ณ  ์žˆ๋‹ค๊ณ  ๋Š๋‚„ ๋•Œ, ๋ฐ”๋กœ ๊ทธ๋•Œ๊ฐ€ ์ƒˆ๋กœ์šด ๋„์ „์„ ์‹œ์ž‘ํ•  ์ตœ์ ์˜ ๊ธฐํšŒ ์ข‹์€ ํŒ€์›์ด ๋˜๊ณ  ์‹ถ๋‹ค๋ฉด : ๋ฉ”์‹ ์ €์™€ ํšŒ์˜ํŽธ + +> ํ˜‘์—…์˜ ํ•ต์‹ฌ์€ ์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜ + +## 6์žฅ ๋‚˜ ์˜ค๋Š˜๋„ ์ž˜ํ•˜๊ณ  ์žˆ์–ด + +> 5์žฅ์˜ ๊ฒฝ์šฐ ์ด์ง ๊ด€๋ จ๋œ ์ด์•ผ๊ธฐ๋กœ ์ฝ๊ณ  ์š”์•ฝ์€ ํ•˜์ง€ ์•Š์•˜๋‹ค! + +### 1. ์„ฑ์žฅ๋ณด๋‹ค ์ค‘์š”ํ•œ ๊ฒƒ์€ ๋ฐฉํ–ฅ์„ฑ + +> ์–ด๋–ค ๊ฐœ๋ฐœ์ž๊ฐ€ ๋˜๊ณ  ์‹ถ์€๊ฐ€๋ณด๋‹ค ์ค‘์š”ํ•œ ๊ฑด **์–ด๋–ค ๊ฐœ๋ฐœ์ž๋กœ ์‚ด์•„๊ฐ€๊ณ  ์‹ถ์€๊ฐ€**์ด๋‹ค. + +#### 1) ์š•๊ตฌ ์ค‘์š”ํ•˜๊ฒŒ ์ƒ๊ฐํ•˜๋Š” ๊ฒƒ 3๊ฐ€์ง€๋ฅผ ๊ณจ๋ผ๋ณด์ž + +![](https://velog.velcdn.com/images/prettylee620/post/304e7e30-132e-4855-a27a-3971530e5b76/image.png) + +์œ„์˜ ์‚ฌ์ง„์˜ ๊ฒฝ์šฐ ํ•œ๊ตญ๋น„ํญ๋ ฅ๋Œ€ํ™”๊ต์œก์›์—์„œ ์ œ๊ณตํ•œ ์š•๊ตฌ๋ชฉ๋ก์œผ๋กœ ์š•๊ตฌ๋ชฉ๋ก ์ค‘ **์ž์‹ ์ด ์ค‘์š”ํ•˜๊ฒŒ ์ƒ๊ฐํ•˜๋Š” ํ‚ค์›Œ๋“œ๋ฅผ 3๊ฐ€์ง€**๋ฅผ ๊ณ ๋ฅธ๋‹ค. + +๋‚˜์˜ ๊ฒฝ์šฐ 3๊ฐ€์ง€๋กœ ์ถ”๋ฆฌ๊ธฐ๊ฐ€ ํž˜๋“ค์–ด 4๊ฐ€์ง€ ๊ณจ๋ž๋‹ค ใ…‹ใ…‹ใ…‹ + +> * ์‹ ์ฒด์  ์ƒ์กด + +* ์‚ฌํšŒ์ /์ •์„œ์  ์ƒํ˜ธ์ž‘์šฉ +* ๋†€์ด/์žฌ๋ฏธ +* ์ž๊ธฐ ๊ตฌํ˜„ + +๊ทธ ๋‹ค์Œ ๊ทธ๊ฒƒ์— ๋ฐ‘์— ์žˆ๋Š” ํ‚ค์›Œ๋“œ๋ฅผ ์—ฌ๋Ÿฌ ๊ฐœ 1์ฐจ๋กœ ๋ฝ‘๊ณ  ๊ทธ ์ค‘ 3๊ฐ€์ง€๋ฅผ ๋ฝ‘๋Š”๋‹ค. + +> * 1์ฐจ๋กœ ๋ฝ‘์€ ํ‚ค์›Œ๋“œ : ํœด์‹, ์•ˆ์ „, ์นœ๋ฐ€ํ•œ ๊ด€๊ณ„, ๋ฐฐ๋ ค, ํ˜‘๋ ฅ, ์ฆ๊ฑฐ์›€, ์„ฑ์žฅ, ์ฐฝ์กฐ์„ฑ + +* 2์ฐจ๋กœ ๋ฝ‘์€ ํ‚ค์›Œ๋“œ : ํ˜‘๋ ฅ, ์„ฑ์žฅ, ์ฆ๊ฑฐ์›€, ํœด์‹ + +#### 2) ๋‚ด๊ฐ€ ๋˜๊ณ  ์‹ถ์€ ๊ฐœ๋ฐœ์ž๋ž€.. + +์œ„์˜ ํ‚ค์›Œ๋“œ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋ณด๋ฉด + +> ๋‚˜๋Š” ์„ฑ์žฅ์„ ํ•˜๊ณ  ์‹ถ์œผ๋ฉฐ, ์„ฑ์žฅํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ฆ๊ฑฐ์›€์„ ๊ฐ€์ง€๊ณ  ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค๊ณผ ํ˜‘๋ ฅํ•˜๋ฉฐ(= ๊ณต์œ ํ•˜๋ฉฐ) 1๋ช…์—๊ฒŒ๋ผ๋„ ๋„์›€์„ ์ฃผ๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ๋˜๊ณ  ์‹ถ์œผ๋ฉด ์ ๋‹นํ•œ ํœด์‹์€ ํ•„์š”ํ•˜๋‹ค. + +#### 3) ๋‚ด๊ฐ€ ๋˜๊ณ  ์‹ถ์€ ๊ฐœ๋ฐœ์ž๋ฅผ ์•Œ์•˜๋‹ค๋ฉด ์ž‘์€ ์„ฑ๊ณต๋“ค ๋งŒ๋“ค์–ด๊ฐ€๊ธฐ + +์–ด์จ‹๋“  ์„ฑ์žฅ์€ ์žฅ๊ธฐ์ „์ด๊ธฐ ๋•Œ๋ฌธ์— ๋น ๋ฅด๊ฒŒ ๋‹ฌ๋ฆฌ๋Š” ๊ฒƒ์ด ์•„๋‹Œ **๋‚ด๊ฐ€ ์›ํ•˜๋Š” ๋ฐฉํ–ฅ์œผ๋กœ ๋‹ฌ๋ฆฌ๊ณ  ์žˆ๋Š”๊ฐ€๊ฐ€ ์ค‘์š”ํ•˜๋‹ค.** + +์ฆ‰, ์ž‘์€ ์„ฑ๊ณต๋“ค๋กœ ์ฒœ์ฒœํžˆ ์ฑ„์›Œ๊ฐ€๋ฉฐ ์ž์‹ ์ด ์›ํ•˜๋Š” ๋ฐฉํ–ฅ์œผ๋กœ ๊ฐ„๋‹ค๋ฉด ์›ํ•˜๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ๋  ์ˆ˜ ์žˆ๋‹ค. + +## ๐Ÿค” ์ฑ…์„ ์ฝ๊ณ  ๊ฐœ์ธ์ ์ธ ์ƒ๊ฐ๊ณผ ๋ฐฉํ–ฅ์„ฑ + +### 1. ์›ํ•˜๋Š” ํšŒ์‚ฌ ์ตœ์„ ์€ ์•ˆ๋˜๋”๋ผ๋„ ์ฐจ์„ ์€ ์ฐพ์•„๋ณด๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•  ๊ฒƒ ๊ฐ™๋‹ค. + +ํšŒ์‚ฌ๋ฅผ ๋‹ค๋‹Œ ์ง€๋Š” 2์ฃผ ์กฐ๊ธˆ ๋„˜์—ˆ์ง€๋งŒ ์ž์‹ ์ด ์›ํ•˜๋Š” ์„œ๋น„์Šค๋ฅผ ํšŒ์‚ฌ์—์„œ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ๊ณณ์€ ๊ทนํžˆ ์ผ๋ถ€ ์ผ ๊ฒƒ ๊ฐ™๋‹ค๋ผ๋Š” ์ƒ๊ฐ์ด ๋“ ๋‹ค. ์ž์‹ ์ด ์›ํ•˜๋Š” ์„œ๋น„์Šค๋ฅผ ๋งŒ๋“œ๋Š” ํšŒ์‚ฌ์— ๋“ค์–ด๊ฐˆ ์ˆ˜๋„ ์žˆ์ง€๋งŒ ๊ทธ๋ ‡์ง€ ์•Š๋‹ค๋ฉด ์ž์‹ ์˜ ์˜๊ฒฌ์„ ํ”ผ๋ ฅํ•  ์ˆ˜๋„ ์žˆ๊ฒ ์ง€๋งŒ **ํšŒ์‚ฌ์—๋„ ๊ทœ์น™์ด ์žˆ๊ธฐ์— ํšŒ์‚ฌ์—์„œ ๋งํ•˜๋Š” ๋ฌธ์ œ๋ฅผ ๊ทธ ํšŒ์‚ฌ์˜ ๊ทœ์น™์— ๋ฐฉ์‹์— ๋งž๊ฒŒ ํ•ด๊ฒฐํ•˜๋Š” ๊ฒƒ์ด ๊ฐœ๋ฐœ์ž๊ฒ ์ง€..** + +> ํšŒ์‚ฌ๋กœ ์„ฑ์žฅ๋„ ๊ฐ€๋Šฅํ•˜๊ฒ ์ง€๋งŒ\*\* ํšŒ์‚ฌ๋ž‘ ๊ฐœ์ธ์„ ์กฐ๊ธˆ ๋ถ„๋ฆฌํ•ด์„œ ๋ด์•ผ ํ•  ๊ฒƒ ๊ฐ™๋‹ค\*\*๋ผ๋Š” ์ƒ๊ฐ๋„ ๋“ ๋‹ค. ํ•˜์ง€๋งŒ ๋Œ€๋ถ€๋ถ„์˜ ์‹œ๊ฐ„์„ ํšŒ์‚ฌ์—์„œ ๋ณด๋‚ด๋Š” ๊ฒƒ๋งŒํผ ์ž์‹ ์ด ์‹ซ์–ดํ•˜๋Š” ๋ถ„์•ผ๋ฅผ ๊ฐ€๋ฉด ๊ทธ ์‹œ๊ฐ„์ด ๊ณ ํ†ต์Šค๋Ÿฝ๊ฒ ์ง€..(ํ‡ด์‚ฌ์˜ ๊ธธ๋กœ..) + +![](https://velog.velcdn.com/images/prettylee620/post/6feecb3b-fa1f-408a-ba2d-54cd485f6307/image.png) + +๋ฌผ๋ก  ์ผ ์ ์œผ๋กœ ๋ณ€ํ•˜๋ฉด ์ž์‹ ์ด ์ข‹์•„ํ•˜๋Š” ๋ถ„์•ผ๋„ ์‹ซ์–ดํ•˜๊ฒŒ ๋œ๋‹ค๊ณ ๋Š” ํ•˜๋‚˜ ํฅ๋ฏธ๊ฐ€ ์žˆ๋Š” ๊ฒƒ๊ณผ ์•„์˜ˆ ์—†๋Š” ๊ฒƒ์€ ๋‹ค๋ฅผ ๋“ฏํ•˜๋‹คใ…‹ใ…‹ใ…‹ + +์•„ ๊ทธ๋ฆฌ๊ณ  ๋ค์œผ๋กœ ๋ฟŒ๋“ฏํ•จ์ด ์žˆ๋‹ค๋ฉด ์ข‹์„ ์ˆ˜๋„..(์‰ฝ์ง€ ์•Š๊ฒ ์ง˜ใ…‹ใ…‹) **๋‚˜๋ฆ„ ์ผ์„ ์ œ๋Œ€๋กœ ์‹œ์ž‘ํ•˜์ง€๋Š” ์•Š์ง€๋งŒ ๊ต์œก์ชฝ์ด๋ผ ์ผํ•˜๋ฉด์„œ ๋ฟŒ๋“ฏํ•จ์„ ๊ฐ€์ ธ๊ฐˆ ์ˆ˜ ์žˆ์„๋“ฏ** + +
+ +๊ทธ๋ฆฌ๊ณ  ์ž์‹ ์ด ๋ญ๊ฐ€ ์ค‘์š”ํ•œ์ง€ ์ƒ๊ฐํ•ด๋ณด๋Š” ๊ฒƒ๋„ ์ค‘์š”ํ•  ๋“ฏํ•˜๋‹ค. ์›Œ๋ผ๋ฒจ vs ๋ˆ์ด๋ƒ ๋ฌผ๋ก  ์ง€๊ธˆ ์ทจ์—…์‹œ์žฅ ์ƒํƒœ๋Š” ๊ณ ๋ฅด๋Š” ๊ฒƒ๋„ ํž˜๋“ค ์ •๋„๋กœ ๊ฐ‘์ž๊ธฐ ํ‡ดํ™”๋์ง€๋งŒ...**(๋ฌผ๋ก  ์—ฐ๋ด‰๋„ ํ•ฉ๊ฒฉ์ „์— ์•ˆ์•Œ๋ ค์ฃผ๋Š” ๊ณณ์ด ๋‹ค์ˆ˜์ง€๋งŒ.. ์žกํ”Œ๋ž˜๋‹›์„ ๋ณด๋ฉด ๋Œ€์ถœ ์•Œ ์ˆ˜ ์žˆ์Œ)** + +ํšŒ์‚ฌ์˜ ๊ฐ€์žฅ ์ข‹์€ ์ ์€ ์›Œ๋ผ๋ฒจ๊ณผ ์‚ฌ๋žŒ์ด ์ข‹๋‹ค๋Š” ๊ฒƒ.. + +> ๊ฐœ์ธ์ ์ธ ์ƒ๊ฐ์œผ๋กœ๋Š” **์‹ ์ž…๋•Œ๋Š” si์˜ ๊ฒฝ์šฐ ์›Œ๋ผ๋ฒจ์ด ์ข‹์•„์•ผ ๊ฐœ์ธ์ ์ธ ๊ณต๋ถ€ํ•  ์ˆ˜ ์žˆ์ง€ ์•Š์„๊นŒ..?๋ผ๊ณ  ๋‚˜๋Š” ์ƒ๊ฐํ•œ๋‹ค.** ๊ทธ๋ฆฌ๊ณ  ํฌ๊ด„๋กœ ์•ผ๊ทผํ•ด๋„ ๋ˆ๋„ ํœด๊ฐ€๋„ ์•ˆ์ฃผ๋Š” ๊ณณ์ด ๋‹ค์ˆ˜๋ผ...ใ…‹..ใ…œ + +### 2. si, sm์„ ๊ฐ„๋‹ค๋ฉด ํšŒ์‚ฌ์˜ ๋งˆ์ธ๋“œ๋‚˜ ์žกํ”Œ๋ž˜๋‹›์„ ๋ณด๋ฉด ํšŒ์‚ฌ์˜ ๋ฌธํ™”๋ฅผ ์•Œ ์ˆ˜๋„.. + +์ผ๋‹จ ๋‚ด๊ฐ€ ์ทจ์—…ํ•˜๊ณ  ์‹ถ์—ˆ๋˜ ์ชฝ๋„ ๊ฒŒ์ž„๊ฐœ๋ฐœ์ด์—ˆ์Œ ํ•˜์ง€๋งŒ ์‹ ์ž…์ธ ์ง€๊ธˆ ์ทจ์—…์€ ํ˜„์‹ค๊ณผ๋„ ์–ด๋Š์ •๋„ ํƒ€ํ˜‘ํ•จ.. + +๊ทธ ์ด์œ ๋กœ + +* ์ฒซ ๋ฒˆ ์งธ๋Š” ๊ฒŒ์ž„ ๊ฐœ๋ฐœ์€ ์‹ ์ž… ๊ฐœ๋ฐœ์ž๋ฅผ ์ž˜ ์•ˆ ๋ฝ‘์Œ +* ๋‘ ๋ฒˆ ์งธ๋Š” ๊ฒŒ์ž„ ๊ฐœ๋ฐœ์— ๋Œ€ํ•ด ํ•ด ๋ณธ ๊ฒƒ์ด๋ผ๊ณ ๋Š” ์œ ๋‹ˆํ‹ฐ ๋ฟ.. +* ์„ธ ๋ฒˆ์งธ๋Š” ์ข‹์ง€ ์•Š์€ ๊ฒŒ์ž„ ์‹œ์žฅ\*\*(์š”์ฆ˜ nc๋„ ์žํšŒ์‚ฌ ์ •๋ฆฌํ•˜๊ณ  ์ˆ˜์ต ๋‚ด๊ธฐ๊ฐ€ ์‰ฝ์ง€ ์•Š๋‚˜๋ด„)\*\* +* ๋„ค ๋ฒˆ์งธ ์†Œ๋ฌธ์— ์ข‹์ง€ ์•Š์€ ์›Œ๋ผ๋ฒจ..**(์ง€์ธ๊ณผ ์ผ๋ณธ๊ฒŒ์ž„๊ฐœ๋ฐœ์ž๋ฅผ ๋ณธ ์  ์žˆ๋Š”๋ฐ ์•ผ๊ทผ..๋ฐค์ƒ˜์ด ์ง„์งœ...๐Ÿฅฒ)** + +๋‚ด๊ฐ€ ๊ฒŒ์ž„ ๊ฐœ๋ฐœ์— ํฅ๋ฏธ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๊ฑด ๋‚ด๊ฐ€ ํ•˜๊ณ  ์žˆ๋Š” ๊ฒŒ์ž„์ด ์–ด๋–ป๊ฒŒ ๊ตฌํ˜„๋˜๋Š” ์ง€ ๊ถ๊ธˆํ•ด์„œ๊ฐ€ ํฌ๋‹ค. ์ผ๋‹จ ๊ฒŒ์ž„ ๊ฐœ๋ฐœ ์ง€์‹์ด ์ ์œผ๋‹ˆ ๊ทธ๊ฒƒ๋ถ€ํ„ฐ ๊ณต๋ถ€ํ•˜๊ณ  ์ƒ๊ฐํ•ด๋ณด๋ ค ํ•œ๋‹ค. + +๊ทธ๋ฆฌ๊ณ  + +> **ํšŒ์‚ฌ์˜ ๋ฌธํ™”์™€ ๋น„์ „์„ ์ดํ•ด**ํ•˜๋ฉด ํ•ด๋‹น ํšŒ์‚ฌ๊ฐ€ ์ž์‹ ์—๊ฒŒ ์ ํ•ฉํ•œ์ง€, ๊ทธ ํšŒ์‚ฌ์˜ ๊ฐœ๋ฐœ์ž๋Š” ์–ด๋–ค ์ข…๋ฅ˜์˜ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•ด์•ผ ํ•˜๋Š”์ง€๋ฅผ ์•Œ ์ˆ˜ ์žˆ๋‹ค. + +si, sm๋Š” ๋Œ€๋ถ€๋ถ„ ๊ทธ์ € ๊ณ ๊ฐ์‚ฌ์— ๋งž์ถ”๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๊ธฐ์— ํšŒ์‚ฌ์˜ ๋งˆ์ธ๋“œ..?๊ฐ€ ์ข‹์€์ง€๋ฅผ ๋ณด๋ฉด ์ข‹์„ ์ˆ˜๋„ + +### 3. ๋ˆ„๊ตฌ๋‚˜ ๋‹ค ๋น„์Šทํ•œ ๊ณ ๋ฏผ์„ ํ•œ๋‹ค. ๋„ˆ๋ฌด ๊นŠ์€ ๊ตด ํŒŒ์ง€ ๋ง์ž.. + +![](https://velog.velcdn.com/images/prettylee620/post/9b14ecb5-545b-4415-a307-b27331737156/image.png) + +์ตœ๊ทผ์—.. ์ž…์‚ฌํ•œ ์ง€ 2์ฃผ๋ฐ–์— ์•ˆ๋์ง€๋งŒ ์ทจ์—…์˜ ๋ฌธ์ œ๊ฐ€ ์‚ฌ๋ผ์ง€๋‹ˆ **์ปค๋ฆฌ์–ด์— ๋Œ€ํ•œ ๊ณ ๋ฏผ์ค‘์ด์—ˆ๋‹ค...** ๋‚˜์˜ ๊ฒฝ์šฐ ์ž‘๋…„ ๋ถ€ํŠธ์บ ํ”„๋ฅผ ํ•˜๋Š” ๋„์ค‘ ๊ฐœ๋ฐœ์šฉ ํŠธ์œ„ํ„ฐ๋ฅผ ๋งŒ๋“ค์–ด์„œ ๊ณ ๋ฏผ ๋“ฑ์„ ์ ์Œ ใ…‹ใ…‹ใ…‹ใ…‹ ๋‹ค์Œ์˜ ๊ธ€์„ ์“ฐ๋‹ˆ ๋น„์Šทํ•œ ๊ณ ๋ฏผ์„ ํ•˜๋Š” ์‚ฌ๋žŒ๋„ ์žˆ์—ˆ์œผ๋ฉฐ, ์ฃผ๋ง์— ์‰ฌ์–ด๋„ ๋ฒŒ์–ด๋จน๊ณ  ๊ดœ์ฐฎ๋‹ค๋Š” ์‚ฌ๋žŒ๋„ ์žˆ์—ˆ๋‹ค. + +> ๋‚˜๋Š” MBTI๊ฐ€ INFP์ธ๋ฐ **์„ฑ๊ฒฉ ์ƒ ๋Š์ž„์—†๋Š” ์„ฑ์žฅ์„ ๊ฐˆ๋งํ•˜์ง€๋งŒ ๋˜ ๊ธˆ๋ฐฉ์ง€์นœ๋‹ค. ํ•˜์ง€๋งŒ ์กฐ๊ธˆ์ด๋ผ๋„ ์„ฑ์žฅํ•˜์ง€ ์•Š์œผ๋ฉด ๋‚˜ ์ž์‹ ์— ๋Œ€ํ•œ ํšŒ์˜๊ฐ์ด ์˜จ๋‹คใ…‹ใ…‹ใ…‹ใ…‹**(์ง„์งœ ์ด์ƒํ•œ ์„ฑ๊ฒฉ) + +**๋‚˜๋งŒ ์ด๋Ÿฐ๊ฐ€? ๋‚ด๊ฐ€ ๋ฌธ์ œ์ธ๊ฐ€?๋ผ๋Š” ์ƒ๊ฐ**๊ณผ ํšŒ์‚ฌ์—์„œ ๋‚˜ ์ž์‹ ์€ ๋„ˆ๋ฌด ์ž‘์•„๋ณด์ด๊ณ  ๊ณ ๋ฏผ์ด ๋งŽ์•˜๋Š”๋ฐ ๋น„์Šทํ•œ ๊ณ ๋ฏผ์„ ๊ฐ€์ง„ ์‚ฌ๋žŒ์ด ์žˆ๋‹ค๋Š” ๊ฒƒ๋งŒ์œผ๋กœ \*\*๊นŠ๊ฒŒ ๋•…๊ตด ํŒŒ๊ธฐ ์ „์— ๋‚˜์˜ฌ ์ˆ˜ ์žˆ์—ˆ๋‹ค. \*\* + +![](https://velog.velcdn.com/images/prettylee620/post/e3a088bd-82c4-4549-9442-0bec80d40b0a/image.png) + +์ž์‹ ๋งŒ ๋ถ€์กฑํ•˜๊ณ  ์ž์‹ ๋งŒ ์ด๋Ÿฐ ๊ณ ๋ฏผ์„ ํ•  ๊ฑฐ๋ผ๋Š” ์ƒ๊ฐ์€ ๋‹ค๋ฅธ ์‚ฌ๋žŒ๊ณผ ์ด์•ผ๊ธฐ๋ฅผ ๋‚˜๋ˆ ๋ณด๋ฉด ์—†์–ด์งˆ ๊ฒƒ์ด๋‹ค. ๋” ๊นŠ์€ ๊ตด ํŒŒ๊ธฐ ์ „์— ๋‚˜์˜ฌ ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋‹ค. + +### 4. ๋ฒˆ์•„์›ƒ ์™”์„ ์‹œ ์ž์‹  ๋งŒ์˜ ๋Œ€์ฒ˜๋ฒ•์„ ์ฐพ์•„๋ณด์ž. + +![](https://velog.velcdn.com/images/prettylee620/post/a3efc537-e218-4d8f-a9f5-73d8537e83f6/image.png) **(์ถœ์ฒ˜ : @PacerKorea)** + +ํŠธ์œ„ํ„ฐ์—์„œ ๋ดค๋Š”๋ฐ ๋„์›€์ด ๋  ๊ฒƒ ๊ฐ™์•„ ๊ฐ€์ง€๊ณ  ์™”๋‹ค. ์šฐ๋ฆฌ๋‚˜๋ผ๋Š” ํŠนํžˆ ๊ฐœ๋ฐœ์ž์˜ ๊ฒฝ์šฐ, ๋Š์ž„์—†์ด ๊ณต๋ถ€ํ•ด์•ผ ํ•œ๋‹ค๋Š” ๋ง ๋•Œ๋ฌธ์— ๋ฒˆ์•„์›ƒ์ด ์™”์Œ์—๋„ ์˜จ ์ฑ„๋กœ ๊ณต๋ถ€ํ•˜๋‹ค๊ฐ€ ์ง€์น˜๊ณ  ๋” ์ง€์ณ์„œ ๋Œ์ดํ‚ฌ ์ˆ˜ ์—†๋Š” ์ƒํƒœ๊นŒ์ง€ ๋˜๋Š” ๊ฒƒ ๊ฐ™๋‹ค ๐Ÿ˜ญ๐Ÿ˜ญ + +ํŠนํžˆ, ๋ถ€ํŠธ์บ ํ”„์—์„œ ์งง์€ ๊ธฐ๊ฐ„์— ๊ณต๋ถ€ํ•˜๋‹ค ๋ณด๋‹ˆ ์ฃผ๋ณ€์—์„œ ๊ทธ๋Ÿฐ ๋ถ„๋“ค์ด ๋งŽ๋‹ค.. ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์˜ค๋ž˜ ์ผ ํ•˜์‹  ๋ถ„๋“ค๋„ ์ง€์ณํ•˜๋Š” ๊ฒƒ์„ ๋ดค๋‹ค. **(๋‚˜๋„ ๋ถ€ํŠธ์บ ํ”„ ๊ธฐ๊ฐ„์— ๋„˜์‚ฌ๋ฒฝ ๋น„์ „๊ณต์ž๋ถ„์— ๋ฒˆ์•„์›ƒ ์ฃผ๋งˆ๋‹ค ์™”์—ˆ์Œ..)** + +> ๋ฒˆ์•„์›ƒ์ด ์ž์ฃผ ์˜ค๋Š” ๊ฒƒ๋ณด๋‹ค๋Š” ์™”์„ ๋•Œ ์ž์‹ ๋งŒ์˜ ๋Œ€์ฒ˜๋ฒ•์œผ๋กœ **์™„์ „ํžˆ ์ด๊ฒจ๋‚ด์ง€๋Š” ๋ชปํ•˜๋”๋ผ๋„(๋Œ€๋ถ€๋ถ„ ๋ฒˆ์•„์›ƒ์„ ๊ฐ€์ง€๊ณ  ์‚ฐ๋‹ค๊ณ  ํ•จ) ๊ทธ๋ž˜๋„ ๋‹ค์‹œ ์ผ์–ด ์„ค ์ •๋„์˜ ํž˜์„ ํœด์‹ํ•˜๋ฉด์„œ ๋งŒ๋“œ๋Š” ๊ฒŒ ๋‚ซ์ง€ ์•Š์„๊นŒ?** + +![](https://velog.velcdn.com/images/prettylee620/post/f42a310b-be74-4c10-9cdb-2d79f693de59/image.png) + +### 5. ์›ํ•˜๋Š” ํšŒ์‚ฌ ํ˜„์—…์ž ํ˜น์€ ํ˜„์—…์ž๋“ค ์ปคํ”ผ์ฑ— ์ตœ๋Œ€ ํ™œ์šฉํ•˜๊ธฐ(feat. ์ฒซ ์ปคํ”ผ์ฑ— ํ›„๊ธฐ) + +![](https://velog.velcdn.com/images/prettylee620/post/9cda2dc2-dd88-45dd-bd38-bf63c45215c6/image.png) + +์ด๋ฒˆ์ฃผ ๊ธˆ์š”์ผ์— ํŠธ์นœ 3๋ถ„๊ณผ ์ปคํ”ผ์ฑ—๊ณผ ์นผ๊ตญ์ˆ˜์ฑ—์„ ํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค. 1๋ถ„์€ ๋‚˜๋ž‘ ๊ฐ™์€ ์‹ ์ž… (๋ถ„์•ผ๋Š” ๋‹ค๋ฆ„)๋ณด์•ˆ์ชฝ 2๋ถ„์€ ๋Œ€๊ธฐ์—… ๊ฐœ๋ฐœ์ž์™€ ๋งค๋‹ˆ์ €(๋‘ ๋ถ„์˜ ํšŒ์‚ฌ๋Š” ๋‹ค๋ฆ„) + +ํšŒ์‚ฌ ๋๋‚˜๊ณ  `์นผ๊ตญ์ˆ˜์ง‘`์—์„œ ๋จผ์ € ๋งŒ๋‚˜๊ฒŒ ๋˜์—ˆ์œผ๋ฉฐ, ์นผ๊ตญ์ˆ˜๋ฅผ ๋จน๊ณ  2์ฐจ๋กœ ๋ฐ”๋กœ ์˜† ์นดํŽ˜๋ฅผ ๊ฐ€๊ฒŒ ๋˜์—ˆ๋‹ค. ์นดํŽ˜๊ฐ€์„œ ๋‘ ๋ถ„์ด ๋ช…ํ•จ์„ ์ฃผ์…จ๋‹ค.. + +๋˜๊ฒŒ ๋งŽ์€ ์ด์•ผ๊ธฐ๋ฅผ ๋‚˜๋ˆ„๊ณ  ๋ฌธํ™”์— ๋Œ€ํ•ด์„œ๋„ ๋“ค์—ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  **๋‚ด๊ฐ€ ์•„์ง ์•„๋Š” ์„ธ๊ณ„๋Š” ์ข๊ตฌ๋‚˜..ใ…‹ใ…‹ใ…‹ใ…‹ใ…‹ ์‹ค์ œ ํ˜„์—…์— ์จ๋ณด์‹  ์Šคํƒ์— ๋Œ€ํ•ด์„œ ๋ณด์—ฌ์ฃผ์…จ๋Š”๋ฐ ํ์–ต... ๊ต‰์žฅํžˆ ๋งŽ์•˜๋‹ค. ๋ฐ˜์€ ๋‚ด๊ฐ€ ์ฒ˜์Œ ๋ณด๋Š” ๊ฒƒ๋“ค ใ…‹ใ…‹ใ…‹ใ…‹..** + +๊ทธ๋ฆฌ๊ณ  ํ˜„์žฌ ๊ธฐ์—…์˜ ์ฒด๊ณ„, ์ง€๊ธˆ ๊ธฐ์—…๋“ค์˜ ์ƒํƒœ ๋“ฑ๋„ ์•Œ๊ฒŒ ๋˜๊ณ  ์–ด๋–ค ๋ถ€๋ถ„์ด ์ค‘์š”ํ•œ์ง€.. ์‹ค์ œ ๋Œ€๊ธฐ์—…์—์„œ๋Š” log๊ฐ€ ๊ฐœ๋งŽ์•„์„œ DBMS๋กœ ์•ˆ๋ผ์„œ ํ•˜๋‘ก์„ ์“ด๋‹ค๋Š” ๊ฒƒ, ๋ณด์•ˆ์ชฝ์€ ์–ด๋–ป๊ฒŒ ๋Œ์•„๊ฐ€๋Š”์ง€ ๊ทธ๋ฆฌ๊ณ  ํ•œ ๊ฐ€์ง€ ๊ถ๊ธˆํ•œ ๊ฒƒ์„ ์—ฌ์ญˆ์–ด๋ดค๋‹ค. + +> ๐Ÿค” "ํšŒ์‚ฌ ๊ณต๊ณ ๋ฅผ ๋ณด๋ฉด ๋Šฅํ†ตํ•จ์ด๋ผ๊ณ  ์ ํ˜€์žˆ์ž–์•„์š” ๋Šฅํ†ตํ•จ์˜ ๊ธฐ์ค€์ด ๋ญ˜๊นŒ์š”?" ๐Ÿ˜ณ"๋Šฅํ†ตํ•˜๊ฒŒ ํ•  ์ˆ˜ ์žˆ๋Š” ์‚ฌ๋žŒ์€ ๊ฑฐ์˜ ์—†๋‹ค. ๋‹ค๋งŒ ์ธํ„ฐ๋„ท์— ๋‚˜์™€์žˆ๋Š” ๊ฒƒ๋“ค์€ ์•Œ๊ณ  ๊ฑฐ๊ธฐ์„œ ๊ธฐ์—…์—์„œ ์›ํ•˜๋Š” ๊ฒƒ์„ ์กฐ๊ธˆ ์•Œ๊ณ  ์žˆ๋‹ค๋ฉด ๋ฝ‘ํžˆ๋Š” ๊ฑฐ๋‹ค. ์‹ค์ œ๋กœ ์ฝ”ํ…Œ์—์„œ ๊ฒ๋‚˜ ๋Šฅํ†ตํ•œ ์‚ฌ๋žŒ์ด ์žˆ์—ˆ๋Š”๋ฐ ๋ฉด์ ‘์„ ๋ณด๋‹ˆ ๊ทธ๋Ÿฐ ์ด๋ก ์  ์ง€์‹์€ ์ „๋ฌดํ•˜๋”๋ผ" + +๊ฑฐ๊ธฐ๋‹ค ์ƒ๊ฐ๋ณด๋‹ค.. ํŠธ์นœ๋ถ„๋“ค ์ค‘์— ๋Œ€๋‹จํ•œ ๋ถ„๋“ค์ด ๋งŽ๊ตฌ๋‚˜..๋ฅผ ๋Š๋‚Œใ…‹ใ…‹ใ…‹ใ…‹ใ…‹ใ…‹ใ…‹ใ…‹ ํŠธ์œ„ํ„ฐ์— ๊ฐœ๋ฐœ ๊ณ ์ˆ˜๋ถ„๋“ค์ด ๋„ˆ๋ฌด ๋งŽ๋‹ค.. ํŠธ์œ„ํ„ฐ ๊ฐ•์ถ”..ใ…‹ใ…‹ใ…‹ใ…‹ใ…‹ใ…‹ + +์˜ฌํ•ด ์ปคํ”ผ์ฑ— ๋‹ค์–‘ํ•˜๊ฒŒ ๋งŒ๋‚˜ ๋ณผ ์˜ˆ์ •์ด๋‹ค.. + +### 6. ์™„๋ฒฝํ•˜์ง€ ์•Š์•„๋„ ๋œ๋‹ค. + +> ์™„๋ฒฝํ•จ์„ ๋ชฉํ‘œ๋กœ ํ•˜์ง€ ์•Š๋Š”๋‹ค. ๋นจ๋ฆฌ ์‹œ์ž‘ํ•˜๊ณ  ์ค‘๊ฐ„์ค‘๊ฐ„ ํ”ผ๋“œ๋ฐฑ์„ ๋ฐ›๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๋‹ค. + +๋ฐฐ์›Œ์•ผ ํ•  ๊ฒƒ์€ ๋งŽ๊ณ .. ์™ธ์šธ๊ฑด ๋งŽ๊ณ  ใ…‹ใ…‹ใ…‹ใ…‹ใ…‹ใ…‹ใ…‹ + +![](https://velog.velcdn.com/images/prettylee620/post/3799d69f-ea9e-4cd2-b30b-d5e4cf084302/image.png) + +ํ•˜์ง€๋งŒ ์–ด์ฐจํ”ผ ์žฅ๊ธฐ์ „์ด๊ธฐ์— ์™„๋ฒฝํ•จ๋ณด๋‹ค๋Š” ์ฒœ์ฒœํžˆ ๋‚˜์•„๊ฐ์„ ๋ชฉํ‘œ๋กœ ์žก์ž... + +![](https://velog.velcdn.com/images/prettylee620/post/d5059422-313a-4f1b-9d51-dd806b85acbf/image.png) + +ํŠธ์œ„ํ„ฐ์—์„œ ๋„๋Š” ๊ธ€์ธ๋ฐ ๊ทธ๋ ‡๋‹ค๊ณ  ํ•จ ์ฐธ๊ณ ํ•˜๋ผ๊ณ  ๊ฐ€์ ธ์˜ด + +### 7. ๊ฐ™์€ ์ง๋ฌด ์‚ฌ๋žŒ๋“ค๊ณผ ๋Œ€ํ™”๋ฅผ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ๋Š” ํ™˜๊ฒฝ์„ ๋งŒ๋“ค์ž. + +ํŠธ์œ„ํ„ฐ๋˜์ง€.. ์˜คํ”ˆ์ฑ„ํŒ…์ด๋ผ๋˜์ง€.. ๋งํฌ๋“œ์ธ์ด๋ผ๋˜์ง€ ์•„๋ฌด๊ฑฐ๋‚˜ ๊ดœ์ฐฎ๋‹ค... ๋‚˜์˜ ๊ฒฝ์šฐ ์ „๋ฌธ๋Œ€๋ผ ์‚ฌ์‹ค ์ด ๋ถ„์•ผ๋กœ ๊ฐ„ ์‚ฌ๋žŒ์ด ํ•œ์ •์ ์ด๋ผ ์—ํƒ€๋ฅผ ์ด์šฉํ•  ์ˆ˜๋Š” ์—†์—ˆ๋‹ค. + +์ƒ๊ฐ๋ณด๋‹ค **ํŠธ์œ„ํ„ฐ**๋ฅผ ๊ฐœ๋ฐœ์ž๋“ค์ด ๋งŽ์ด ์ด์šฉํ•œ๋‹ค๊ณ ํ•ด์„œ 8์›”์— ๊ธ€ 1\~2๊ฐœ ์ ๊ณ ๋‚˜์„œ ํŠธ์นœ์†Œํ•˜๊ณ  ๊พธ์ค€ํžˆ ๊ต๋ฅ˜๋ฅผ ๋Š˜๋ ค์™”๋‹ค. + +
+ +ํŠธ์œ„ํ„ฐ๋กœ ์ธํ•ด ๋‚ด ๊ฐœ๋ฐœ์ž ์‚ถ์— ๋งŽ์€ ๋„์›€์„ ์–ป์—ˆ๋‹ค๊ณ  ํ•ด๋„ ๊ณผ์–ธ์ด ์•„๋‹ˆ๋‹ค ใ…‹ใ…‹ใ…‹ใ…‹๐Ÿ˜ญ๐Ÿ˜ญ ์ง„์งœ.. ์œ„๋กœ๋„ ๋งŽ์ด ๋ฐ›๊ณ  ๊ณต๊ฐ๋„ ๋งŽ์ด ํ–ˆ๋‹คใ…‹ใ…‹ใ…‹ ์ข‹์€ ๊ธ€๋„ ๋งŽ์•˜๋‹ค. ์ด๋Ÿฐ ๋Œ€ํ™”๋ฅผ ๋‚˜๋ˆ„๊ณ  ๊ณต์œ ํ•  ์ˆ˜ ์žˆ๋Š” ํ™˜๊ฒฝ์„ ๋งŒ๋“ค์ž!!! + +### 8. ์ค‘์š”ํ•œ ๊ฒƒ์€ ๋น ๋ฅด๊ฒŒ๊ฐ€ ์•„๋‹Œ ๋ฐฉํ–ฅ์„ฑ + +๋ฌผ๋ก  ์ด๊ฑด ๊ฐœ์ธ๋งˆ๋‹ค ์ƒ๊ฐ์ด ๋‹ค๋ฅผ ์ˆ˜๊ฐ€ ์žˆ๋‹ค. ํ•˜์ง€๋งŒ ๋‚˜๋Š” ๋ฐฉํ–ฅ์„ฑ์„ ์žก์œผ๋ฉด ์šฐ์งํ•˜๊ฒŒ ๋‚˜๊ฐ€๊ธฐ ๋•Œ๋ฌธ์—..(์‚ฌ์‹ค ๋น ๋ฅด๊ฒŒ๊ฐ€ ์•ˆ๋จ ใ…‹ใ…‹ใ…‹) + +์•„์ง ์ž…์‚ฌํ•œ ์ง€ ํ•œ๋‹ฌ๋„ ์•ˆ๋๊ณ  ๋ช‡ ๋‹ฌ ๊ฐ„์€ ๋ฐฉํ–ฅ์„ฑ์— ๋Œ€ํ•ด ๊ณ ๋ฏผํ•˜๋ฉด์„œ ๊ณต๋ถ€ํ•ด๋ณด๊ณ ์ž ํ•œ๋‹ค!!! + +### 9. ๊ถ๊ธˆํ•˜๋‹ค๋ฉด ์ฐ๋จน์ด๋ผ๋„ ์ง์ ‘ ํ•ด๋ณด์ž. + +์ปคํ”ผ์ฑ—์—์„œ ์š”์ฆ˜ ๊ธฐ์—…๋“ค์ด ๋Ÿฌ์ŠคํŠธ๋กœ ๋งŽ์ด ๋ฐ”๊พธ๊ณ  ์žˆ๋‹ค๋Š” ์†Œ์‹์„ ๋“ค์—ˆ๋‹ค..c++, c#๋„ ๋Ÿฌ์ŠคํŠธ(Rust)๋กœ ๋งŽ์ด ๋ฐ”๊พธ๊ณ  ๊ธฐ์—…์—์„œ ์“ฐ๋Š” ์‚ฌ๋žŒ์ด ๋งŽ์ด ๋Š˜์–ด๋‚˜๊ณ  ์žˆ๋‹ค๊ณ .. + +๊ทธ๋ž˜์„œ ์ฃผ๋ง์— ์ผ๋‹จ Rust์— ๋Œ€ํ•ด ์ž˜ ๋ชจ๋ฅด๊ธฐ ๋•Œ๋ฌธ์— IDE ํˆด์ด๋ž‘ ์ปดํŒŒ์ผ๋Ÿฌ๋งŒ ์„ค์น˜ํ–ˆ๋‹ค. + +![](https://velog.velcdn.com/images/prettylee620/post/458afe51-fce4-481c-83f3-d2b24cb50568/image.png) + +์ฐ๋จน์„ ํ•ด๋ณด๊ณ  ๋‚˜๋ž‘ ๋งž๋Š”์ง€ ํŒ๋‹จํ•ด์•ผ ๊ฒ ๋‹ค. + +> ์‚ฌ์ด๋“œ ํ”„๋กœ์ ํŠธ ๊ด€๋ จ ์‚ฌ์ดํŠธ : [๋ฐ๋ธŒํด๋ฆฌ์˜ค](https://devfolio.kr/) + +๋ชจ๋“  ๊ฐœ๋ฐœ์ž, ์ง์žฅ์ธ, ์ทจ์ค€์ƒ, ๋Œ€ํ•™์ƒ ๋ชจ๋‘ ํ™”์ดํŒ…!!! + +> [VELOG ๋ฒ„์ „](https://velog.io/@prettylee620/%EC%9A%94%EC%A6%98-%EA%B0%9C%EB%B0%9C%EC%9E%90-%EB%8F%85%EC%84%9C-%EC%9A%94%EC%95%BD-%EB%B0%8F-%EA%B0%9C%EC%9D%B8%EC%A0%81%EC%9D%B8-%EC%83%9D%EA%B0%81) + +
diff --git "a/developLog/book/learn-errors/_ 1\354\236\245 \354\227\220\353\237\254\352\260\200 \354\231\234 \353\254\264\354\204\234\354\232\270\352\271\214__.md" "b/developLog/book/learn-errors/_ 1\354\236\245 \354\227\220\353\237\254\352\260\200 \354\231\234 \353\254\264\354\204\234\354\232\270\352\271\214__.md" new file mode 100644 index 0000000..64fd8da --- /dev/null +++ "b/developLog/book/learn-errors/_ 1\354\236\245 \354\227\220\353\237\254\352\260\200 \354\231\234 \353\254\264\354\204\234\354\232\270\352\271\214__.md" @@ -0,0 +1,226 @@ +--- +description: ์‚ฌ๋žŒ๋“ค์ด ์—๋Ÿฌ ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด๊ณ ๋„ ๋„˜์–ด๊ฐ€๊ฑฐ๋‚˜ ์—๋Ÿฌ๋ฅผ ๋ฌด์„œ์›Œ ํ•˜๋Š” ์ด์œ ๊ฐ€ ๋ญ˜๊นŒ? +--- + +# 1์žฅ ์—๋Ÿฌ๊ฐ€ ์™œ ๋ฌด์„œ์šธ๊นŒ? + +> ์ฝ”๋“œ๊ฐ€ ์ž‘๋™ํ•˜์ง€ ์•Š๋Š” ์ƒํ™ฉ์— ๋ฐœ์ƒํ•˜๋Š” ์—๋Ÿฌ๋Š” ํฌ๊ฒŒ ๋‘ ๊ฐ€์ง€๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ๋‹ค. ์—๋Ÿฌ๋ฅผ ์ฝ๋Š” ๊ฒƒ๋งŒ์œผ๋กœ๋„ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ์™€ ์›์ธ ํŒŒ์•…์ด ํ•„์š”ํ•œ ๋ฌธ์ œ๋‹ค.\ +> + +## 1. ์—๋Ÿฌ๋ฅผ ์ฝ์ง€ ์•Š๊ฒŒ ๋˜๋Š” ์ด์œ  + +### 01. ์ด์œ  1 : ์—๋Ÿฌ๊ฐ€ ์˜์–ด๋ผ์„œ + +์—๋Ÿฌ์— ๋Œ€ํ•ด์„œ๋Š” ์ž์‹ ์ด ์—†๋Š” ์‚ฌ๋žŒ๋„ ๋งŽ๋‹ค. ์—๋Ÿฌ๋ฅผ ๋Œ€ํ•˜๋Š” ๋งˆ์Œ๊ฐ€์ง์„ ๋ฐ”๊พธ๋Š” ๊ฒƒ์ด๋‹ค. ์—๋Ÿฌ๋ฅผ ์ฝ์ง€ ์•Š๊ฒŒ ๋˜๋Š” ์ด์œ ๋Š” ๊ฐ€์žฅ ํฐ ๊ฒƒ์ด ์—๋Ÿฌ๊ฐ€ ์˜์–ด๋กœ ํ‘œ๊ธฐ๋˜๊ธฐ ๋•Œ๋ฌธ\ + + +> ํŽธํ•˜๊ฒŒ ์—๋Ÿฌ๋ฅผ ์ฝ์„ ์ˆ˜ ์žˆ๋Š” ํฌ์ธํŠธ๋ฅผ ์ฐพ๊ธฐ! + +* ์ฝ”๋“œ ์–‘์ด ์ ์€ ๊ฒƒ์€ ๋ฐ”๋กœ๋ฐ”๋กœ ์ฝ์ž\ + + +#### 1) ๊ฐ„๋‹จํ•œ ๋ฌธ๋ฒ• ์ง€์‹๋งŒ ์žˆ์œผ๋ฉด OK + +> ์˜์–ด๊ฐ€ ๋Šฅ์ˆ™ํ•˜์ง€ ์•Š์€ ์‚ฌ๋žŒ์ด๋ผ๋ฉด ์ผ์ƒ ํšŒํ™” ์ˆ˜์ค€์˜ ์˜์–ด๋ฅผ ๋‹น์žฅ ์ตํžˆ๋Š” ๊ฒƒ์€ ์–ด๋ ต์ง€๋งŒ ์—๋Ÿฌ ๋‚ด์šฉ์„ ์ฝ๋Š” ๊ฒƒ์€ ๊ทธ๋ ‡๊ฒŒ ์–ด๋ ต์ง€ ์•Š๋‹ค๋Š” ๊ฒƒ! + +\ +์—๋Ÿฌ๋Š” ๋ฌธ์žฅ์˜ ํ˜•์‹์ด ์ •ํ•ด์ ธ ์žˆ์œผ๋ฏ€๋กœ ์‚ฌ์šฉํ•˜๋Š” ๋‹จ์–ด๋„ ํ•œ์ •์ ์ด๋‹ค. + +``` +X is not definded +``` + +define =์ •์˜ํ•˜๋‹ค๋ผ๋Š” ์˜๋ฏธ ์ด๋ฉฐ, is not defied๋Š” be๋™์‚ฌ + not(๋ถ€์ •) + ๊ณผ๊ฑฐ๋ถ„์‚ฌ์ธ ์ˆ˜๋™ํƒœ์˜ ๋ถ€์ •๋ฌธ์œผ๋กœ ์ •์˜๋˜์–ด ์žˆ์ง€ ์•Š์€ ์ƒํƒœ๋ฅผ ์˜๋ฏธ\ + + +> ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ฌธ์žฅ์„ ์ฝ์„ ๋•Œ๋Š” ์ฃผ์–ด์™€ ์ˆ ์–ด๋ฅผ ํ™•์ธํ•ด์•ผ ํ•œ๋‹ค. + +\ +๋จผ์ €, ๋ฌธ๋ฒ•์— ์ง‘์ค‘ํ•˜์—ฌ ๋ฉ”์‹œ์ง€์™€ ์˜๋ฏธ๋ฅผ ํ™•์ธํ•˜์Ÿˆ + +#### 2) ์ฃผ์–ด๊ฐ€ ์ƒ๋žต๋œ ์ผ€์ด์Šค + +``` +Cannot read properties of null +``` + +null ์†์„ฑ์„ ์ฝ์„ ์ˆ˜ ์—†๋‹ค.\ + + +1. ์ˆ ์–ด : Cannot read +2. ์ฃผ์–ด : The program + +> ๋Œ€๋ถ€๋ถ„ ์—๋Ÿฌ์˜ ์ฃผ์ฒด๋Š” ํ•ด๋‹น ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์ž์ฒด๋ฅผ ์˜๋ฏธ ์ฆ‰, The programm์„ ๋ถ™์ผ ๊ฒƒ + +``` +The programm cannot read properties of null. +``` + +์ด์™€ ๊ฐ™์ด ์—๋Ÿฌ์˜ ์ฃผ์–ด๊ฐ€ ํ”„๋กœ๊ทธ๋žจ ์ž์ฒด์™€ ์‹œ์Šคํ…œ์„ ์˜๋ฏธํ•˜๋Š” ๊ฒƒ์ด ๋ถ„๋ช…ํ•  ๋•Œ๋Š” ์ฃผ์–ด๊ฐ€ ์ƒ๋žต๋˜๋ฉฐ, ์˜์–ด ๋ฌธ๋ฒ•์˜ ํŠน์ง•์ƒ ์ฃผ์–ด๋ฅผ ์ œ์ผ ์•ž์— ์ถ”๊ฐ€ํ•˜๋ฉด ๋œ๋‹ค.\ + + +#### 3) ๊ฐ„๋‹จํ•œ ํ‘œํ˜„์„ ์‚ฌ์šฉํ•˜๋Š” ์ผ€์ด์Šค(๋ช…์‚ฌ๊ตฌ๋งŒ์„ ์‚ฌ์šฉ) + +> ์—๋Ÿฌ ๋ฉ”์‹œ์ง€์—๋Š” ์ฃผ์–ด์™€ ์ˆ ์–ด๊ฐ€ ๋ชจ๋‘ ์ƒ๋žต๋œ ํ‘œํ˜„๋„ ์žˆ๋‹ค. + +``` +Invalid array length +``` + +* Invalid = ์œ ํšจํ•˜์ง€ ์•Š์€ +* array length = ๋ฐฐ์—ด์˜ ๊ธธ์ด + +\ +๋ช…์‚ฌ๊ตฌ๋งŒ ์กด์žฌํ•˜๊ณ , ์ฃผ์–ด์™€ ์ˆ ์–ด๋งŒ ์žˆ์–ด์„œ ๋ถˆ์นœ์ ˆํ•˜๊ฒŒ ๋ณด์ผ ์ˆ˜ ์žˆ์œผ๋‚˜ ์ด์™€ ๊ฐ™์€ ํ‘œํ˜„์ด ๋งŽ๋‹ค๋Š” ๊ฒƒ..\ + + +> ์œ ํšจํ•˜์ง€ ์•Š์€ ๋ฐฐ์—ด์˜ ๊ธธ์ด๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์œผ๋ฏ€๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค. + +``` +Unexpected token '['- ์˜ˆ์ƒํ•˜์ง€ ๋ชปํ•œ ํ† ํฐ '['missing ) after argument list- ์ธ์ˆ˜ ๋ฆฌ์ŠคํŠธ ๋’ค์— )๊ฐ€ ์—†์Œ +``` + + + +#### 4) ์ž์ฃผ ์‚ฌ์šฉํ•˜๋Š” ๋‹จ์–ด์™€ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ํŠน์œ ์˜ ์˜๋ฏธ๋ฅผ ๊ฐ–๋Š” ๋‹จ์–ด + +> ์—๋Ÿฌ ๋ฉ”์‹œ์ง€์—๋Š” ์ผ๋ฐ˜์ ์ธ ๋‹จ์–ด ์ด์™ธ์—๋„ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ ๊ณ ์œ ์˜ ์˜๋ฏธ๋ฅผ ๊ฐ–๋Š” ๋‹จ์–ด๊ฐ€ ์กด์žฌํ•œ๋‹ค. ์ด ๋‹จ์–ด๋“ค์€ ์‚ฌ์ „์  ์˜๋ฏธ๋ฅผ ์ฐพ์•„๋ด๋„ ์ผ๋ฐ˜์ ์ธ ์˜๋ฏธ๋งŒ์œผ๋กœ ์ดํ•ดํ•˜๊ธฐ ์–ด๋ ค์šด ๋ถ€๋ถ„์ด ์žˆ๋‹ค. ์ด๋“ค์€ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์šฉ์–ด๋กœ ์˜๋ฏธ๋ฅผ ์ดํ•ดํ•ด์•ผ ํ•จ + +| ์ž์ฃผ ๋‚˜์˜ค๋Š” ๋‹จ์–ด | ์˜๋ฏธ | +| ------------------- | ----------- | +| valid/invalid | ์œ ํšจํ•œ/์œ ํšจํ•˜์ง€ ์•Š์€ | +| expected/unexpected | ๊ธฐ๋Œ€ํ•œ/๊ธฐ๋Œ€ํ•˜์ง€ ์•Š์€ | +| defined/undefined | ์ •์˜๋œ/์ •์˜๋˜์ง€ ์•Š์€ | +| declared/undeclared | ์„ ์–ธ๋œ/์„ ์–ธ๋˜์ง€ ์•Š์€ | +| reference | ์ฐธ์กฐ | +| require | ํ•„์š”ํ•œ | +| deprecated | ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” | +| expired | ๋งŒ๋ฃŒ๋œ | +| apply | ์ ์šฉํ•˜๋‹ค | +| deny | ๊ฑฐ๋ถ€ํ•˜๋‹ค | +| permission | ํ—ˆ๊ฐ€ | +| range | ๋ฒ”์œ„ | +| missing | ๋ณด์ด์ง€ ์•Š๋Š”(๋น ์ง„) | + +| ๋‹จ์–ด | ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ณ ์œ ์˜ ์˜๋ฏธ | +| ---------------------- | ------------ | +| function/argument | ํ•จ์ˆ˜/์ธ์ˆ˜ | +| variable/constant | ๋ณ€์ˆ˜/์ƒ์ˆ˜ | +| object/property/method | ๊ฐ์ฒด/์†์„ฑ/๋ฉ”์„œ๋“œ | +| expression/statement | ์‹/๋ฌธ | +| operator/operand | ์—ฐ์‚ฐ์ž/ํ”ผ์—ฐ์‚ฐ์ž | +| token | ํ† ํฐ | +| initializer | ์ด๋‹ˆ์…œ๋ผ์ด์ € | +| mutable/immutable | ๋ณ€ํ•  ์ˆ˜ ์žˆ๋Š”/๋ถˆ๋ณ€์˜ | +| iteration/iterable | ๋ฐ˜๋ณต/๋ฐ˜๋ณตํ•  ์ˆ˜ ์žˆ๋Š” | +| assignment | ํ• ๋‹น | + +### 02. ์ด์œ  2 : ๊ธธ์–ด์„œ ์ฝ๊ธฐ๊ฐ€ ์–ด๋ ค์›€ + +``` +ReferenceError; nickname is not defined ย at fn3 (/Users/naera/section-1/app.js:14:3) ย at fn2 (/Users/naera/section-1/app.js:10:3) ย at fn1 (/Users/naera/section-1/app.js:6:3) ย at /Users/naera/section-1/app.js:18:16 ย at Layer.handle [as handle.request] (/Users/naera/section-1/p ย nodejnodules/express/lib/router/layer.js:95:5) ย at next (/Users/naera/section-l/node.modules/express/lib/p ย router/route.j s:144:13) ย at Route.dispatch (/Users/naera/section-1/node_modules/p ย express/lib/router/route.js:114:3) ย at Layer.handle [as handle.request] (/Users/naera/section-1/p ย node_modules/express/lib/router/layer.js:95:5) ย at /Users/naera/section-1/node_modules/express/lib/router/p ย index.js:284:15 ย at Function.process_params (/Users/naera/section-1/p ย nodejnodules/express/lib/router/index.js:346:12) +``` + +> ๊ธด ์—๋Ÿฌ ๋ฉ”์‹œ์ง€์—์„œ ์ฃผ์˜ํ•ด์„œ ์ฝ์–ด์•ผ ํ•  ๋ถ€๋ถ„์€ ๋Œ€๋žต 2\~3ํ–‰ ์ •๋„๋‹ค. + +\ +์—๋Ÿฌ๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ์„ธ ๊ฐ€์ง€ ์š”์†Œ + +1. ์—๋Ÿฌ์˜ ์ข…๋ฅ˜ : Uncaught ReferenceError +2. ์—๋Ÿฌ ๋ฉ”์‹œ์ง€ : nickname is not defined +3. ์Šคํƒ ํŠธ๋ ˆ์ด์Šค + +\ +์œ„ ์‚ฌ์ง„์—์„œ๋Š” ๋‹จ ๋‘ ํ–‰์˜ ๋ฉ”์‹œ์ง€๋งŒ ์ฝ์œผ๋ฉด ๋œ๋‹ค. + +``` +ReferenceError : nickname is not definedat fn3 (/Users/naera/section-1/app.js:14:3) +``` + +์ฐธ์กฐ ์—๋Ÿฌ : nickname์ด ์ •์˜๋˜์–ด ์žˆ์ง€ ์•Š๋‹ค.\ + + +> ์ฆ‰, ์—๋Ÿฌ๋Š” ์ „๋ถ€ ์ฝ์„ ํ•„์š”๊ฐ€ ์—†๋‹ค๋Š” ๊ฒƒ์„ ๊ธฐ์–ตํ•˜์ž. ์ค‘์š”ํ•œ ํฌ์ธํŠธ๋งŒ ์•Œ๋ฉด ์ฝ๊ธฐ ์‰ฌ์›Œ์ง„๋‹ค. + + + +### 03. ์ด์œ  3 : ์ฝ์–ด๋„ ๋ฐ”๋กœ ์›์ธ์„ ํŒŒ์•… ํ•  ์ˆ˜ ์—†์Œ + +์—๋Ÿฌ๋Š” ๋ฐœ์ƒํ•œ ์œ„์น˜์™€ ๊ทผ๋ณธ์ ์ธ ์›์ธ์ด ๋‹ค๋ฅผ ๋•Œ๋„ ์žˆ๋‹ค.\ + + +> ์—๋Ÿฌ๋Š” ํ™•์ธํ–ˆ์ง€๋งŒ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ด ๋„๋ฌด์ง€ ๋– ์˜ค๋ฅด์ง€ ์•Š์„ ๋•Œ๋„ ์žˆ์„ ๊ฒƒ์ด๋‹ค. + +\ +์ด๋Ÿฌํ•œ ๊ฒฝํ—˜์ด ๋ฐฉ๋ฒ•๋˜๋ฉด์„œ ์—๋Ÿฌ์— ์ž์‹ ์ด ์—†์–ด์ง€๊ณ  ์—๋Ÿฌ๋ฅผ ์ฝ์ง€ ์•Š๊ฒŒ ๋˜๋Š” ์‚ฌ๋žŒ์ด ๋งŽ์„ ๊ฒƒ + +#### 1) ์—๋Ÿฌ์˜ ๋ฐœ์ƒ ์œ„์น˜์™€ ๊ทผ๋ณธ์ ์ธ ์›์ธ์ด ๋‹ค๋ฅผ ๋•Œ + +``` +function hello(user) { | ย console.log('์•ˆ๋…•ํ•˜์„ธ์š” ${user.nickname} ๋‹˜'); .------ ์—ฌ๊ธฐ์„œ ์—๋Ÿฌ ๋ฐœ์ƒ} +``` + +\ +์—๋Ÿฌ์˜ ๋‚ด์šฉ : null ์†์„ฑ์„ ์ฝ์„ ์ˆ˜ ์—†๋‹ค.(nickname์„ ์ฝ์œผ๋ ค๊ณ  ํ•จ) + +``` +Cannot read properties of null (reading 'nickname') +``` + +\ +์ด ์—๋Ÿฌ๋Š” null์€ nickname ์†์„ฑ์„ ์ฝ์„ ๋•Œ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค. ์ฝ”๋“œ์—์„œ nickname ์†์„ฑ์„ ์ฝ๋Š” ๋ถ€๋ถ„์€ ${user.nickname}์ด๋‹ค.\ + + +> ์ฆ‰, user๊ฐ€ null์ด ๋˜์–ด๋ฒ„๋ฆฌ๋Š” ๊ฒƒ์ด ๋ฌธ์ œ์ด๋‹ค. + +\ +user๋Š” hello() ํ•จ์ˆ˜์˜ ์ธ์ˆ˜๋กœ ์ „๋‹ฌ๋˜๋ฏ€๋กœ ์ˆ˜์ •ํ•ด์•ผ ํ•  ๋ถ€ ๋ถ„์€ hello() ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๋ถ€๋ถ„\ +๋‹ค์–‘ํ•œ ์œ„์น˜์—์„œ ํ˜ธ์ถœ์„ ํ•˜๊ณ  ์žˆ๋‹ค๋ฉด, hello(user1), hello(user2) ๋“ฑ ์‹ค์ œ ์›์ธ์ด ๋˜๋Š” ๋ถ€๋ถ„์„ ์ฐพ์•„์•ผ ํ•˜๋Š”๋ฐ ๋ฐ”๋กœ ํ•ด๊ฒฐ์„ ํ•  ์ˆ˜ ๋Š” ์—†์ง€๋งŒ, ์—๋Ÿฌ๋ฅผ ์ž์„ธํžˆ ์ฝ์–ด๋ณด๋ฉด ํšจ์œจ์ ์ธ ๊ทผ๋ณธ ์›์ธ์„ ์ฐพ์„ ์ˆ˜ ์žˆ๋‹ค.\ + + +#### 2) ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋“ฑ์˜ ์ฝ”๋“œ์—์„œ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ + +๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ํŽธ๋ฆฌํ•œ ๊ธฐ๋Šฅ์„ ๋ชจ์•„๋‘” ์ฝ”๋“œ์ด๋‹ค. ๋‹ค๋ฅธ ์‚ฌ๋žŒ์ด ์ž‘์„ฑํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ฝ”๋“œ์—์„œ ์›์ธ์ด ๋ฐœ์ƒํ•˜๋ฉด ๋‚œ์ด๋„๊ฐ€ ์˜ฌ๋ผ๊ฐ„๋‹ค.\ + + +``` +const { Client } = require("pg");const client = new Client({ ย user: "alice", ย password: "password", ย database: "myDb",})๏ผ›const connectClient = async () => { ย await client.connect();}๏ผ›connectClient(); +``` + +์—๋Ÿฌ + +``` +error: password authentication failed for user "alice" ย at Parser.parseErrorMessage (/Users/naera/project/ๅธnode_niodules/pg-protocol/dist/parser.js:287:98) ย at Parser.handlePacket (/Users/naera/project/node_modules/ppg-protocol/dist/parser.js:126:29) ย at Parser,parse (/Users/naera/project/node.modules/ppg-protocol/dist/parser.js:39:38) ย at Socket. (/Users/naera/project/node_modules/ppg-protocol/dist/index.js:11:42) ย at Socket.emit (node:events:513:28) ย at addChunk (node:internal/streanis/readable:324:12) ย at readableAddChunk (nodezinternal/streams/readable:297:9) ย at Readable.push (node:internal/streams/readable:234:10) ย at TCP.onStreamRead (node:internal/strean)_base_coniinons:190:23) +``` + + + +> ์‹ค์ œ๋กœ ์ด ์—๋Ÿฌ๋Š” ์ž์‹ ์ด ์ž‘์„ฑํ•œ ์ฝ”๋“œ์—์„œ ์–ด๋””์— ์›์ธ์ด ์žˆ๋Š”์ง€๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๋ถ€๋ถ„์ด ์—†๋‹ค. + +\ +์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•œ ๋ถ€๋ถ„์€ 2ํ–‰์˜ ์–ด๋–ค ํŒŒ์ผ์ด์ง€๋งŒ, ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ์ฝ”๋“œ์— ๋ฌธ์ œ๊ฐ€ ์žˆ๋Š” ๊ฒƒ์ด ์•„๋‹Œ **๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ ‘์†ํ•˜๊ธฐ ์œ„ํ•œ ์œ ์ € ์ •๋ณด์™€ ํŒจ์Šค์›Œ๋“œ๊ฐ€ ํ‹€๋ฆฐ ๊ฒƒ์ด ์—๋Ÿฌ์˜ ์›์ธ**์ด๋‹ค. + +\ +ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜๋‹ค ๋ณด๋ฉด ํ•ด๊ฒฐํ•˜๊ธฐ ์–ด๋ ค์šด ์—๋Ÿฌ๋ฅผ ๋งŒ๋‚  ๋•Œ๊ฐ€ ์žˆ๋‹ค. ๊ทธ๋ ‡๋‹ค๊ณ  ํ•ด์„œ ์—๋Ÿฌ๋ฅผ ์ฝ์„ ํ•„์š”๊ฐ€ ์—†๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๋‹ค. ์—๋Ÿฌ๋ฅผ ์ฝ์œผ๋ฉด ์กฐ๊ธˆ์”ฉ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š” ํžŒํŠธ๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค. ์กฐ๊ธˆ์”ฉ ๋ฐœ์ „ํ•œ๋‹ค๋Š” ์ƒ๊ฐ์œผ๋กœ ์—๋Ÿฌ๋ฅผ ๋Œ€ํ•˜๋„๋ก ํ•˜์ž\ + + +## 2. ์—๋Ÿฌ๋ฅผ ํ–ฅํ•œ ๋งˆ์Œ๊ฐ€์ง + +### 1) ๊ฐ„๋‹จํ•˜๊ฒŒ ์ƒ๊ฐํ•˜์ž + +> ๋ฐ”๋กœ ํ•ด๊ฒฐํ•  ์ˆ˜๋Š” ์—†๋”๋ผ๋„ ํžŒํŠธ๋ฅผ ๋ฐœ๊ฒฌํ•  ์ˆ˜ ์žˆ๋‹ค. + +\ +์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ์˜์—ญ๊ณผ ๋‚œ์ด๋„๊ฐ€ ๋‹ค์–‘ํ•˜์ง€๋งŒ, ์—๋Ÿฌ๋ฅผ ์ œ๋Œ€๋กœ ํ™•์ธํ•˜๊ธฐ๋งŒ ํ•ด๋„ ๊ฐ„๋‹จํ•˜๊ฒŒ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ๋„ ๋งŽ๋‹ค.\ + + +### 2) ์–ด๋ ค์šด ์—๋Ÿฌ๋Š” ์ข‹์€ ํ•™์Šต์˜ ๊ธฐํšŒ + +> ์—๋Ÿฌ๋ฅผ ๋งŒ๋‚  ๋•Œ๋งˆ๋‹ค ์ƒˆ๋กœ์šด ๊ฒƒ์„ ๋ฐฐ์šธ ์ˆ˜ ์žˆ๋‹ค๋Š” ๋งˆ์Œ๊ฐ€์ง์„ ๊ฐ–๋Š” ๊ฒƒ์ด ์ค‘์š” + + + +### 3) ์—๋Ÿฌ๋ฅผ ์ฝ๋Š” ์Šคํ‚ฌ์€ ํ•ญ์ƒ ๋„์›€์ด ๋œ๋‹ค. + +์—๋Ÿฌ๋Š” ํฌ๋งท์ด ์ •ํ•ด์ ธ ์žˆ๊ณ  ์ข…๋ฅ˜๋„ ์ •ํ•ด์ ธ ์žˆ๋‹ค. ์—๋Ÿฌ ๋ฉ”์‹œ์ง€๋ฅผ ํ•œ ๋ฒˆ๋งŒ ์ž์„ธํžˆ ์ฝ๊ณ  ๋‚ด์šฉ์„ ์ดํ•ดํ•ด๋‘๋ฉด ์ดํ›„์—๋Š” ๊ฐœ๋ฐœ์ด ํŽธํ•ด์ง„๋‹ค.\ +์—๋Ÿฌ๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ํšจ์œจ์ ์œผ๋กœ ๋””๋ฒ„๊น… ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ์•„๊ตฐ์ด๋‹ค.\ diff --git "a/developLog/book/learn-errors/_ 2\354\236\245 \354\227\220\353\237\254\353\245\274 \354\236\230 \354\235\275\353\212\224 \353\260\251\353\262\225_.md" "b/developLog/book/learn-errors/_ 2\354\236\245 \354\227\220\353\237\254\353\245\274 \354\236\230 \354\235\275\353\212\224 \353\260\251\353\262\225_.md" new file mode 100644 index 0000000..b246102 --- /dev/null +++ "b/developLog/book/learn-errors/_ 2\354\236\245 \354\227\220\353\237\254\353\245\274 \354\236\230 \354\235\275\353\212\224 \353\260\251\353\262\225_.md" @@ -0,0 +1,187 @@ +--- +description: ํšจ์œจ์ ์œผ๋กœ ์—๋Ÿฌ๋ฅผ ์ฝ๋Š” ๋ฐฉ๋ฒ•, ์—๋Ÿฌ์˜ ๊ตฌ์„ฑ ์š”์†Œ์™€ ์ข…๋ฅ˜ +--- + +# 2์žฅ ์—๋Ÿฌ๋ฅผ ์ž˜ ์ฝ๋Š” ๋ฐฉ๋ฒ• + +## 01. ์—๋Ÿฌ์˜ ๊ตฌ์„ฑ์š”์†Œ๋ฅผ ์•Œ์•„๋ณด์ž + +> ์—๋Ÿฌ๋ฅผ ์ˆ ์ˆ  ์ฝ๊ธฐ ์œ„ํ•ด์„œ๋Š” ์—๋Ÿฌ์˜ ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ํŒŒ์•…ํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๋‹ค. + +1. ์—๋Ÿฌ์˜ ์ข…๋ฅ˜ +2. ์—๋Ÿฌ ๋ฉ”์‹œ์ง€ +3. ์Šคํƒ ํŠธ๋ ˆ์ด์Šค + +### 1. ์—๋Ÿฌ์˜ ์ข…๋ฅ˜ + +> ์—๋Ÿฌ์˜ ์ข…๋ฅ˜๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์— ๋”ฐ๋ผ ๋‹ค๋ฅด์ง€๋งŒ ์ข…๋ฅ˜๋ฅผ ํŒŒ์•…ํ•˜๋Š” ๊ฒƒ์œผ๋กœ ์—๋Ÿฌ์˜ ๋Œ€๋žต์ ์ธ ๋‚ด์šฉ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค. + +1. ReferenceError : ์ฐธ์กฐ ์—๋Ÿฌ + +* ์กด์žฌํ•˜์ง€ ์•Š๋Š” ๋ณ€์ˆ˜ ๋“ฑ์„ ์ฐธ์กฐํ•˜๋ ค๊ณ  ํ•  ๋•Œ ๋ฐœ์ƒํ•˜๋Š” ์—๋Ÿฌ(์ •์˜ ๋˜์–ด ์žˆ์ง€ ์•Š์€ ๊ฒƒ ์ฐธ์กฐํ•  ๋•Œ) +* ํ•ด๊ฒฐ ๋ฐฉ์•ˆ ์˜ˆ์ธก : ๋ณ€์ˆ˜๊ฐ€ ์ œ๋Œ€๋กœ ์ •์˜๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธ + +```javascript +let message = "์ฆ๊ฑฐ์šด ๋””๋ฒ„๊น…";function showMessageO { ย  + console.log(mesage); - s๊ฐ€ ํ•˜๋‚˜ ๋น ์ ธ ์žˆ์Œ +}showMessage(); + +``` + +``` +ReferenceError: mesage is not defined +``` + +์ฐธ์กฐ ์—๋Ÿฌ: mesage๊ฐ€ ์ •์˜๋˜์–ด ์žˆ์ง€ ์•Š์Œ\ +๊ทธ ์™ธ์˜ ๊ฒฝ์šฐ์—๋„, ์žˆ๋‹ค + +
if (true) { ย 
+    const message = "์ฆ๊ฑฐ์šด ๋””๋ฒ„๊น…";
+}
+function showMessage() { ย 
+    console.log(message); ------ ์—๋Ÿฌ์˜์›์ธ
+}
+showMessage();
+
+ +\ +`์Šค์ฝ”ํ”„scope๏ผˆ์œ ํšจ ๋ฒ”์œ„๏ผ‰`๋Š” if ๋ฌธ์˜ ๋ธ”๋ก๏ผˆ{ \~ } ๋‚ด๋ถ€๏ผ‰์œผ๋กœ ํ•œ์ • ๋œ๋‹ค. ์ด์™€ ๊ฐ™์ด ๋ณ€์ˆ˜๊ฐ€ ์ •์˜๋˜์–ด ์žˆ๋”๋ผ๋„ ์Šค์ฝ”ํ”„๊ฐ€ ๋‹ค๋ฅด๋ฉด ์ฐธ์กฐํ•  ์ˆ˜ ์—†์œผ๋ฏ€๋กœ **ReferenceError**๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. + +> ์Šค์ฝ”ํ”„๋Š” ๋ณ€์ˆ˜์™€ ํ•จ์ˆ˜๋ฅผ ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ๋Š” ๋ฒ”์œ„ + +\ +2\. ArgumentCountError + +* ํ•จ์ˆ˜์˜ ์ธ์ˆ˜(argument)์˜ ์ˆ˜(count)๊ฐ€ ์ž˜๋ชป๋œ ๊ฒƒ์„ ์˜๋ฏธ +* ํ•ด๊ฒฐ ๋ฐฉ์•ˆ ์˜ˆ์ธก : ์ •์˜๋œ ํ•จ์ˆ˜์™€ ํ•ด๋‹น ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๋ถ€๋ถ„ ํ™•์ธ + +\ +3\. SyntaxError : ๋ฌธ๋ฒ• ์—๋Ÿฌ + +> ํ”„๋กœ๊ทธ๋žจ์˜ ๋กœ์ง์— ๋ฌธ์ œ๊ฐ€ ์žˆ๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๋ฏ€๋กœ ๋กœ์ง์„ ํ™•์ธํ•  ํ•„์š”๋Š” ์—†๋‹ค. ๋”ฐ๋ผ์„œ ํ‘œ๊ธฐ ๋ฐฉ์‹์— ๋ฌธ์ œ๊ฐ€ ์žˆ๋Š” ๋ถ€๋ถ„์„ ์ค‘์ ์œผ๋กœ ์ฐพ์œผ๋ฉด ๋œ๋‹ค. + +* ์ฝ”๋“œ์˜ ๋ฌธ๋ฒ•์ด ์ž˜๋ชป๋˜์—ˆ์„ ๋•Œ ๋ฐœ์ƒ + +```javascript +function add [a, b] { ย  + return a + b; +}๏ผ› +``` + +``` +SyntaxError: Unexpected token '[' +``` + +๋ฌธ๋ฒ• ์—๋Ÿฌ : ์˜ˆ์ƒํ•˜์ง€ ๋ชปํ•œ ํ† ํฐ \[\ + + +4\. TypeError : ํƒ€์ž… ์—๋Ÿฌ + +* ๊ฐ’์ด ๋ถ€์ ์ ˆํ•œ ๋ฐฉ๋ฒ•์œผ๋กœ ์‚ฌ์šฉํ•  ๋•Œ ๋ฐœ์ƒ +* ์˜ˆ์‹œ๋กœ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ ๋ฌธ์ž์—ด ๊ธธ์ด๋ฅผ ํ™•์ธํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” length ์†์„ฑ์„ ๋ฌธ์ž์—ด์ด ์•„๋‹Œ null์— ์‚ฌ์šฉํ•˜๋ ค๊ณ  ํ•  ๋•Œ ํ•ด๋‹น ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒ + +``` +"hello".length null.length +``` + +``` +TypeError: Cannot read properties of null (reading 'length') +``` + +\ +5\. RangeError : ๋ฒ”์œ„ ์—๋Ÿฌ + +* ํ—ˆ์šฉ๋˜์ง€ ์•Š์€ ๋ฒ”์œ„์˜ ๊ฐ’์„ ํ•จ์ˆ˜๋กœ ์ „๋‹ฌํ•  ๋•Œ ๋ฐœ์ƒ + +> ์ด ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•  ๋•Œ๋Š” ์ธ์ˆ˜์˜ ๊ฐ’์„ ํ™•์ธํ•˜์ž + +\ +์—๋Ÿฌ์˜ ์ข…๋ฅ˜๋ฅผ ์•Œ๋ฉด ์–ด๋–ป๊ฒŒ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋Š”์ง€ ์•Œ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์–ด๋–ป๊ฒŒ ๋Œ€์ฒ˜ํ• ์ง€ ์˜ˆ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.\ + + +#### 1) ์—๋Ÿฌ์˜ ์ข…๋ฅ˜๋ฅผ ์•Œ๋ฉด ์›์ธ๊ณผ ๋Œ€์ฑ…์„ ์˜ˆ์ธกํ•˜๊ธฐ ์‰ฝ๋‹ค. + +> ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒ ์‹œ๋งˆ๋‹ค ์กฐ๊ธˆ์”ฉ ์ง€์‹์„ ์Œ“์•„๊ฐ€์ž. + +\ + + +### 2. ์—๋Ÿฌ ๋ฉ”์‹œ์ง€ + +> ์ด ๋ถ€๋ถ„์˜ ์—๋Ÿฌ๋ฅผ ์ฝ์ง€ ์•Š๊ณ ์„œ๋Š” ํšจ์œจ์ ์œผ๋กœ ๋ฌธ์ œ ํ•ด๊ฒฐ ๋ถˆ๊ฐ€ + +\ +๋‹จ์–ด์˜ ์˜๋ฏธ๋ฅผ ์ฐพ์•„๋ณด๊ณ  ๋ฉ”์‹œ์ง€์˜ ์˜๋ฏธ๋ฅผ ํ™•์‹คํžˆ ์ดํ•ดํ•˜๋„๋ก ๋…ธ๋ ฅํ•˜๋Š” ๊ฒƒ์ด ์—๋Ÿฌ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋น ๋ฅธ ๊ธธ\ + + +### 3. ์Šคํƒ ํŠธ๋ ˆ์ด์Šค(stack trace) + +> ์Šคํƒ ํŠธ๋ ˆ์ด์Šค๋Š” ๊ฐ„๋‹จํ•˜๊ฒŒ ๋งํ•˜๋ฉด ์—๋Ÿฌ ๋ฐœ์ƒ๊นŒ์ง€์˜ ํ๋ฆ„์„ ๋‚˜ํƒ€๋‚ด๋Š” ๊ฒƒ, ์œ„์น˜๋ฅผ ์•Œ๋ ค์ฃผ๋Š” ์—ญํ•  + +#### 1) ์Šคํƒ ํŠธ๋ ˆ์ด์Šค๊ฐ€ ์•Œ๋ ค์ฃผ๋Š” ๊ฒƒ + +> ์ž‘์—…์˜ ํ๋ฆ„๊ณผ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•œ ์œ„์น˜๋ฅผ ์•Œ๋ ค์ค€๋‹ค. + +``` +์ฒ˜๋ฆฌ A => ์ฒ˜๋ฆฌ B => ์ฒ˜๋ฆฌ C(์—๋Ÿฌ ๋ฐœ์ƒ) ์—๋Ÿฌ ๋ฐœ์ƒํ•˜๊ธฐ ๊นŒ์ง€์˜ ํ๋ฆ„ => ์ฒ˜๋ฆฌ D +``` + +#### 2) ์Šคํƒ ํŠธ๋ ˆ์ด์Šค๋ž€? + +> ํ”„๋กœ๊ทธ๋žจ ๋‚ด ํ•จ์ˆ˜๊ฐ€ ์–ด๋–ค ์ˆœ์„œ๋กœ ํ˜ธ์ถœ๋˜๋Š”์ง€ ํ‘œ์‹œํ•˜๋Š” ์ด๋ ฅ ์ •๋ณด + +* ํŠธ๋ ˆ์ด์Šค(trace) : ์ž์ทจ, ๊ธฐ๋ก +* ์Šคํƒ(stack) : ์Œ“์ด๋Š” ๊ฒƒ + +\ +์›๋ž˜ ์Šคํƒ ํŠธ๋ ˆ์ด์Šค๋Š” ๋ง ๊ทธ๋Œ€๋กœ ์Šคํƒ์— ์Œ“์ธ ๊ฒƒ๋“ค์„ ๋ณด์—ฌ์ฃผ๊ธฐ ๋•Œ๋ฌธ์— ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ๋˜๋Š” ๋ฐ˜๋Œ€๋กœ ๋‚˜ํƒ€๋‚œ๋‹ค.\ +ํ•จ์ˆ˜ ํ˜ธ์ถœ ์ˆœ์„œ๋Œ€๋กœ ์ƒ์ž์— ์Œ“์ด๋“ฏ ์ˆœ์„œ๋Œ€๋กœ ์Šคํƒ์— ์Œ“์ธ๋‹ค. ์ด๊ฒƒ์„ ๊บผ๋‚ด์„œ ๋ถˆ๋Ÿฌ์˜ค๋Š” ๊ฒŒ ์Šคํƒ ํŠธ๋ ˆ์ด์Šค + +> ์ฆ‰, ๋งˆ์ง€๋ง‰์— ํ˜ธ์ถœ ๋œ ๊ฒƒ์ด ์Šคํƒ ํŠธ๋ ˆ์ด์Šค ๊ฐ€์žฅ ์œ—์ค„์— ํ‘œ์‹œ ๋œ ๋‹ค๋Š” ๊ฒƒ!(ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์— ๋”ฐ๋ผ ๋‹ค๋ฆ„ ๋ณดํ†ต ์ž๋ฐ”๋ž‘ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ๊ทธ๋Ÿผ) + +#### 3) ์Šคํƒ ํŠธ๋ ˆ์ด์Šค์˜ ๊ตฌ์ฒด์ ์ธ ์˜ˆ + +``` + ย  ย  ย < meta charset="UTF-8" /> ย  ย Sainple ย  ย 

Stack trace

ย  +``` + +\ +์Šคํƒ ํŠธ๋ ˆ์ด์Šค์˜ ์ฒซ ๋ฒˆ์งธ ํ–‰์—๋Š” ์ตœ์ข…์ ์œผ๋กœ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•œ ์žฅ์†Œ์ธ ํ•จ์ˆ˜ f3์˜ ์ •๋ณด๊ฐ€ ํ‘œ์‹œ๋œ๋‹ค.\ +sample.html:19:21 ์€ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•œ ํŒŒ์ผ๋ช…๊ณผ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•œ ์œ„์น˜์˜ ํ–‰๊ณผ ์—ด์˜ ๋ฒˆํ˜ธ๋ฅผ ํ‘œ์‹œ + +#### 4) ๋จผ์ € ์ตœ์ข… ์ง€์ ์„ ํ™•์ธํ•˜์ž. + +> ์Šคํƒ ํŠธ๋ ˆ์ด์Šค๋Š” ์ตœ์ข… ์ง€์ ์—์„œ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•œ ๊ฒƒ์ด๋ฏ€๋กœ ๋จผ์ € ํ•ด๋‹น ๋ถ€๋ถ„์„ ์‚ดํŽด๋ณด๋Š” ๊ฒƒ์ด ํšจ์œจ์ ์ด๋‹ค. + +\ +๋Œ€๋ถ€๋ถ„์˜ ์—๋””ํ„ฐ์—๋Š” ํ–‰๊ณผ ๋ฌธ์ž์˜ ์ˆ˜๋ฅผ ์ง€์ •ํ•˜๋ฉด ํ•ด๋‹น ์œ„์น˜๋กœ ์ ํ”„ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์Šคํƒ ํŠธ๋ ˆ์ด์Šค์— ๋‚˜์™€ ์žˆ๋Š” ํ–‰๊ณผ ๋ฒˆ์งธ๋ฅผ ์ž…๋ ฅํ•˜๋ฉด ์ฐพ๊ธฐ๊ฐ€ ํŽธํ•˜๋ฉฐ, ์ž‘์—…์„ ์ข€ ๋” ํšจ์œจ์ ์œผ๋กœ ์ง„ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.\ +์ฐธ๊ณ ๋กœ ํ–‰์˜ ์ฒซ ๋ฒˆ์งธ๋ถ€ํ„ฐ ๋ฌธ์ž๋ฅผ ์…€ ๋•Œ ๊ณต๋ฐฑ๋„ ํ•˜๋‚˜์˜ ๋ฌธ์ž๋กœ ์ธ์‹\ + + +> ๋ชจ๋“  ํ–‰์„ ์ฝ์œผ๋ ค๊ณ  ํ•˜์ง€ ๋ง๊ณ , ์ตœ์ข… ์ง€์ ์˜ ์ฒซ ๋ฒˆ์งธ ํ–‰๋ถ€ํ„ฐ ์ฝ์œผ๋ฉด ๋ฌธ์ œ๋ฅผ ์‰ฝ๊ฒŒ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ๋‹ค. + +#### 5) ์ตœ์ข… ์ง€์ ๋งŒ์œผ๋กœ๋Š” ํ•ด๊ฒฐํ•  ์ˆ˜ ์—†์„ ๋•Œ + +``` +function hello(user) { ย console.log(`์•ˆ๋…•ํ•˜์„ธ์š” ${user.nickname} ๋‹˜');} +hello(userl);hello(user2); โ€”1 ์—๋Ÿฌ์˜ ์›์ธ์ด ๋˜๋Š” ์œ„์น˜๊ฐ€ ์—ฌ๋Ÿฌ ๊ณณ ์กด์žฌhello(user3); +``` + +์—๋Ÿฌ์˜ ์›์ธ + +``` +Uncaught TypeError: Cannot read properties of null (reading `nickname`) ย at hello (sample.html: 15:35) ย at sample.html:20:7 +``` + +์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” hello ํ•จ์ˆ˜์— ์ „๋‹ฌํ•˜๋Š” ์ธ์ˆ˜์ธ user๊ฐ€ null์ด ๋˜๋Š” ๊ฒƒ์— ๋Œ€์ฒ˜ํ•ด์•ผ ํ•œ๋‹ค.\ +์ฆ‰, ์Šคํƒ ํŠธ๋ ˆ์ด์Šค๋ฅผ ๋ชจ๋ฅด๋ฉด useri, user2, user3์„ ๋ชจ๋‘ ํ™•์ธํ•ด์•ผ ํ•œ๋‹ค.\ +๊ทธ๋Ÿฌ๋‚˜, ์Šคํƒ ํŠธ๋ ˆ์ด์Šค๋Š” ์—๋Ÿฌ์˜ ์›์ธ์ด ๋˜๋Š” ์œ„์น˜๋ฅผ ์•Œ ์ˆ˜ ์žˆ๋Š”๋ฐ, ๋‘ ๋ฒˆ์งธ ํ–‰์„ ์‚ดํŽด๋ณด๋ฉด 20:7์ด ํ‘œ์‹œ๋˜์–ด ์žˆ์œผ๋ฏ€๋กœ, ์ด ์œ„์น˜์—์„œ ํ˜ธ์ถœํ•˜๋Š” hello ํ•จ์ˆ˜๊ฐ€ ์›์ธ์ด ๋˜๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.\ + + +> ์Šคํƒ ํŠธ๋ ˆ์ด์Šค๋ฅผ ๋”ฐ๋ผ๊ฐ€๋ฉด ํšจ์œจ์ ์œผ๋กœ ์›์ธ์„ ์ฐพ์„ ์ˆ˜ ์žˆ๋‹ค. + + + +### 4. ์Šคํƒ ํŠธ๋ ˆ์ด์Šค์˜ ํ๋ฆ„์€ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋งˆ๋‹ค ๋‹ค๋ฅผ๊นŒ? + +๋งŽ์€ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋Š” ์Šคํƒ ํŠธ๋ ˆ์ด์Šค๊ฐ€ ์•„๋ž˜๋ถ€ํ„ฐ ์œ„๋กœ ์ด๋™ํ•œ๋‹ค ๋”ฐ๋ผ์„œ ์ œ์ผ ์œ„์ชฝ์„ ๋ณด๋ฉด ์—๋Ÿฌ์˜ ์œ„์น˜๋ฅผ ํŠน์ •ํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ํŒŒ์ด์ฌ์€ ์ด์™€ ๋ฐ˜๋Œ€๋กœ ์ค„๋ ฅํ•œ๋‹ค. ํŒŒ์ด์ฌ์—์„œ ์—๋Ÿฌ์˜ ์›์ธ์„ ์ฐพ๊ธฐ ์œ„ํ•ด์„œ๋Š” ์Šคํƒ ํŠธ๋ ˆ ์ด์Šค์˜ ๊ฐ€์žฅ ์•„๋ž˜๋ฅผ ํ™•์ธํ•ด์•ผ ํ•œ๋‹ค\ diff --git "a/developLog/book/learn-errors/_ 3\354\236\245 \355\232\250\354\234\250\354\240\201\354\234\274\353\241\234 \354\227\220\353\237\254\354\235\230 \354\233\220\354\235\270 \354\260\276\352\270\260_.md" "b/developLog/book/learn-errors/_ 3\354\236\245 \355\232\250\354\234\250\354\240\201\354\234\274\353\241\234 \354\227\220\353\237\254\354\235\230 \354\233\220\354\235\270 \354\260\276\352\270\260_.md" new file mode 100644 index 0000000..c034e49 --- /dev/null +++ "b/developLog/book/learn-errors/_ 3\354\236\245 \355\232\250\354\234\250\354\240\201\354\234\274\353\241\234 \354\227\220\353\237\254\354\235\230 \354\233\220\354\235\270 \354\260\276\352\270\260_.md" @@ -0,0 +1,38 @@ +--- +description: ๋””๋ฒ„๊น…์— ๋Œ€ํ•œ ๋ฐฉ๋ฒ•์„ ๋ฐฐ์šฐ์ž. ์ด๊ฒƒ์ด ๋ฐ”๋กœ ํšจ์œจ์ ์œผ๋กœ ์—๋Ÿฌ์˜ ์›์ธ์„ ์ฐพ๋Š” ๋ฐฉ๋ฒ• +--- + +# 3์žฅ ํšจ์œจ์ ์œผ๋กœ ์—๋Ÿฌ์˜ ์›์ธ ์ฐพ๊ธฐ + +๋””๋ฒ„๊น…์ด๋ž€ ์—๋Ÿฌ์˜ ์›์ธ์„ ํŠน์ •ํ•˜๊ณ  ์ˆ˜์ •ํ•˜๋Š” ์ž‘์—…์ด๋‹ค. ์•ž ์žฅ์—์„œ ๋‚˜์˜จ ์—๋Ÿฌ๋ฅผ ์ฝ๋Š” ๊ฒƒ๋„ ๋””๋ฒ„๊น…์˜ ํ•œ ๊ฐ€์ง€๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค. + +## 01. ๋””๋ฒ„๊น…์ด๋ž€? + +> ๋””๋ฒ„๊น…(debugging)์ด๋ž€ ์—๋Ÿฌ์˜ ์‹ค์ œ ์›์ธ์„ ์ฐพ๊ณ  ์ˆ˜์ •ํ•˜๋Š” ์ž‘์—…์„ ๋งํ•œ๋‹ค. ๋””๋ฒ„๊น… ์Šคํ‚ฌ์€ ํšจ์œจ์ ์ธ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์— ํฐ ์˜ํ–ฅ์„ ์ค€๋‹ค. + +\ +๋””๋ฒ„๊ทธ(debug) =ํ”„๋กœ๊ทธ๋žจ ๋‚ด ์—๋Ÿฌ๋ฅผ ์˜๋ฏธํ•˜๋Š” ๋ฒ„๊ทธ(bug) + de(์ œ๊ฑฐํ•˜๋‹ค) + +### 1) ๋””๋ฒ„๊น…์˜ ํ๋ฆ„ + +์›์ธ ์ฐพ๊ธฐ โ†’ ์—๋Ÿฌ ์ฝ๊ธฐ โ†’ ์›์ธ ํŒŒ์•… โ†’ ์ˆ˜์ •ํ•˜๊ธฐ โ†’ ? โ†’ ์›์ธ ํŒŒ์•… โ†’ ์ˆ˜์ •ํ•˜๊ธฐ\ + + +> ๊ณผ์žฅํ•ด์„œ ํ‘œํ˜„ํ•˜์ž๋ฉด ๋””๋ฒ„๊น…์€ ์—๋Ÿฌ์˜ ์›์ธ๋งŒ ํŠน์ •ํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ์ด๋ฏธ ๋๋‚œ ๊ฒƒ์ด๋‚˜ ๋‹ค๋ฆ„์—†๋‹ค. + +\ +์—๋Ÿฌ๊ฐ€ ๋ณด์ด์ง€ ์•Š๊ฑฐ๋‚˜ ์—๋Ÿฌ๋ฅผ ์ดํ•ดํ•  ์ˆ˜ ์—†์„ ๋•Œ๋„ ์žˆ๋‹ค. ์ด๋•Œ๋Š” ํ”„๋ฆฐํŠธ ๋””๋ฒ„๊น… ๋ฐฉ๋ฒ•๊ณผ ์ด์ง„ ํƒ์ƒ‰์„ ํ™œ์šฉํ•˜์—ฌ ์—๋Ÿฌ์˜ ์›์ธ์„ ์ฐพ์•„๋ณผ ์ˆ˜ ์žˆ๋‹ค. + +### 2) ํ”„๋ฆฐํŠธ ๋””๋ฒ„๊น…์„ ํ•ด๋ณด์ž + +> ํ”„๋ฆฐํŠธ ๋””๋ฒ„๊น…์˜ ํ”„๋ฆฐํŠธ๋Š” ๋ฌธ์ž ๊ทธ๋Œ€๋กœ ํ”„๋กœ๊ทธ๋žจ์ด ๋ฌด์–ธ๊ฐ€๋ฅผ ์ถœ๋ ฅ(print)ํ•œ๋‹ค๋Š” ์˜๋ฏธ๋กœ, ๋””๋ฒ„๊น… ์ค‘ ํ”„๋กœ๊ทธ๋žจ์˜ ์ƒํƒœ๋ฅผ ํ‘œ์‹œํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•œ๋‹ค. + +\ +๊ฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์—๋Š” ๋ณ€์ˆ˜๋ฅผ ์ถœ๋ ฅํ•˜๊ธฐ ์œ„ํ•œ ํ•จ์ˆ˜๊ฐ€ ์กด์žฌํ•˜๋Š”๋ฐ, ์ด ์ถœ๋ ฅ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํ”„๋กœ๊ทธ๋žจ์—์„œ ๋ณ€์ˆ˜์˜ ๋‚ด์šฉ์„ ํ™•์ธํ•˜๊ณ  ํ”„๋กœ๊ทธ๋žจ์˜ ์ƒํƒœ๋ฅผ ํ•ด์„ํ•˜๋ฉด์„œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•œ ์œ„์น˜ ํŠน์ • ๊ฐ€๋Šฅํ•˜๋‹ค. + +``` +function calcSum(a, b) {console.log('์ธ์ˆ˜์˜ ๊ฐ’ : a = ${a} / b = ${b}');const sum = a + b;console.log๏ผˆ'์ฒ˜๋ฆฌ ๊ฒฐ๊ณผ : sum = ${suin}'๏ผ‰;return sum;const sum = calcSumO, 2๏ผ‰;console.log๏ผˆ'ํ•จ์ˆ˜์˜ ๋ฐ˜ํ™˜๊ฐ’ : ${sum}'๏ผ‰; +``` + +> ํŠน์ • ์œ„์น˜์˜ ๋ณ€์ˆซ๊ฐ’์„ ์ถœ๋ ฅํ•˜๋ฉด์„œ ํ”„๋กœ๊ทธ๋žจ์ด ์ •์ƒ์ ์œผ๋กœ ์ž‘๋™ํ•˜๋Š”์ง€ ํ™•์ธํ•˜๋Š” ๊ฒƒ์ด ํ”„๋ฆฐํŠธ ๋””๋ฒ„๊น…์˜ ๊ธฐ๋ณธ + diff --git "a/developLog/book/onboarding/4/_ \352\260\234\353\260\234\354\236\220 \354\230\250\353\263\264\353\224\251 \352\260\200\354\235\264\353\223\234 4\354\236\245 _ _3__.md" "b/developLog/book/onboarding/4/_ \352\260\234\353\260\234\354\236\220 \354\230\250\353\263\264\353\224\251 \352\260\200\354\235\264\353\223\234 4\354\236\245 _ _3__.md" new file mode 100644 index 0000000..5ff674f --- /dev/null +++ "b/developLog/book/onboarding/4/_ \352\260\234\353\260\234\354\236\220 \354\230\250\353\263\264\353\224\251 \352\260\200\354\235\264\353\223\234 4\354\236\245 _ _3__.md" @@ -0,0 +1,38 @@ +# ๊ฐœ๋ฐœ์ž ์˜จ๋ณด๋”ฉ ๊ฐ€์ด๋“œ 4์žฅ - (3) + +## ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋™์ž‘ ์ธก์ •์„ ์œ„ํ•œ ์ง€ํ‘œ ํ™œ์šฉ ๋ฐฉ์•ˆ + +### 1. ํ”„๋กค๋กœ๊ทธ + +> `์ง€ํ‘œ`๋ฅผ ์ด์šฉํ•ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์–ด๋–ค ๋™์ž‘์„ ํ•˜๋Š”์ง€ ์•Œ์•„๋ณด๋Š” ๊ฒƒ์„ ํ•  ์ˆ˜ ์žˆ๋‹ค. + +#### ๐Ÿˆ ์ง€ํ‘œ์˜ ์œ ์šฉ์„ฑ + +* ์ฟผ๋ฆฌ ์‹คํ–‰ ์‹œ๊ฐ„์ด ์–ผ๋งˆ๋‚˜ ๊ฑธ๋ฆฌ๋Š”์ง€, ํ์— ์ €์žฅ๋œ ๊ฐ’์€ ๋ช‡ ๊ฐœ์ธ์ง€, ๋””์Šคํฌ์— ์–ผ๋งˆ๋‚˜ ๋งŽ์€ ๋ฐ์ดํ„ฐ๊ฐ€ ๊ธฐ๋ก๋˜๊ณ  ์žˆ๋Š”์ง€ ๋“ฑ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋™์ž‘์„ ์ธก์ •ํ•˜๋ฉด ๋ฌธ์ œ๋ฅผ ์ธ์ง€ํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋˜๋ฉฐ, ๋””๋ฒ„๊น…์—๋„ ์œ ์šฉํ•˜๋‹ค. + +#### ๐Ÿˆ ์ง€ํ‘œ์˜ 3๊ฐ€์ง€ ์œ ํ˜• + +1. ์นด์šดํ„ฐ(counter) + +* `ํŠน์ • ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•œ ํšŸ์ˆ˜๋ฅผ ์ธก์ •`ํ•œ๋‹ค. +* ์บ์‹œ ํžˆํŠธ ์นด์šดํ„ฐ์™€ ์š”์ฒญ ์นด์šดํ„ฐ๋ฅผ ์ด์šฉํ•˜๋ฉด ์บ์‹œ๋ฅผ ํ™œ์šฉํ•˜๋Š” ๋น„์œจ ๊ณ„์‚ฐํ•  ์ˆ˜ ์žˆ๋‹ค. +* ์นด์šดํ„ฐ๋Š” ๊ฐ’์„ ์ฆ๊ฐ€์‹œํ‚ค๊ฑฐ๋‚˜ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์žฌ์‹œ์ž‘ํ•  ๋•Œ 0์œผ๋กœ ๋ฆฌ์…‹๋˜๋Š” ๋™์ž‘๋งŒ ์ˆ˜ํ–‰ํ•œ๋‹ค. + +2. ๊ฒŒ์ด์ง€(guage) + +* `ํ๋‚˜ ์Šคํƒ, ๋งต ํฌ๊ธฐ์˜ ํ†ต๊ณ„๊ฐ’ ์ œ์‹œ`ํ•ด์ค€๋‹ค. +* ํŠน์ • ์‹œ์ ์„ ๊ธฐ์ค€์œผ๋กœ ์ธก์ •ํ•˜๋ฏ€๋กœ ๊ฐ’์ด ์˜ฌ๋ผ๊ฐ€๊ฑฐ๋‚˜ ๋‚ด๋ ค๊ฐˆ ์ˆ˜ ์žˆ๋‹ค. +* ์ž๋™์ฐจ์˜ ์†๋„๊ณ„๋‚˜ ์—ฐ๋ฃŒ๊ณ„๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค. + +3. ํžˆ์Šคํ† ๊ทธ๋žจ(histogram) + +* ๊ทœ๋ชจ์— ๋”ฐ๋ผ ์ด๋ฒคํŠธ๋ฅผ ํŠน์ • ๋ฒ”์œ„๋กœ ๊ตฌ๋ถ„ +* ๊ฐ ๋ฒ”์œ„์—๋Š” ํ•ด๋‹น ๋ฒ”์œ„ ๋‚ด์˜ ์ด๋ฒคํŠธ ๊ฐ’์ด ๋ฐœ์ƒํ•˜๋ฉด ๊ฐ’์ด ์ฆ๊ฐ€ํ•˜๋Š” ์นด์šดํ„ฐ +* ์ฃผ๋กœ `์š”์ฒญ ์ฒ˜๋ฆฌ์— ๊ฑธ๋ฆฐ ์‹œ๊ฐ„์ด๋‚˜ ๋ฐ์ดํ„ฐ ํŽ˜์ด๋กœ๋“œ ํฌ๊ธฐ` ๊ฐ™์€ ์ง€ํ‘œ ์ธก์ • + +**๋ฐ์ดํ„ฐ ํŽ˜์ด๋กœ๋“œ(payload)** + +* ์ปดํ“จํ„ฐ ๋„คํŠธ์›Œํฌ์™€ ํ†ต์‹ ์—์„œ ์‚ฌ์šฉ๋˜๋Š” ์šฉ์–ด๋กœ, ํŒจํ‚ท์ด๋‚˜ ๋ฉ”์‹œ์ง€์— ํฌํ•จ๋œ ์‹ค์ œ ์ •๋ณด +* ๋‹ค์‹œ ๋งํ•ด, ์–ด๋–ค ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•ด `์ „๋‹ฌ๋˜๋Š” ์‹ค์ œ ๋ฐ์ดํ„ฐ ๋ถ€๋ถ„`์„ ์˜๋ฏธ +* ์˜ˆ๋ฅผ ๋“ค์–ด, ์›น ์š”์ฒญ์—์„œ ๋ฐ์ดํ„ฐ ํŽ˜์ด๋กœ๋“œ๋Š” ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„œ๋ฒ„์—๊ฒŒ ์ „์†กํ•˜๋Š” ์‹ค์ œ ๋ฐ์ดํ„ฐ, ์˜ˆ๋ฅผ ๋“ค์–ด ์‚ฌ์šฉ์ž๊ฐ€ ์ž…๋ ฅํ•œ ์–‘์‹ ๋ฐ์ดํ„ฐ ๋“ฑ์„ ๋งํ•œ๋‹ค. +* ๋ฐ์ดํ„ฐ ํŽ˜์ด๋กœ๋“œ๋Š” ์ฃผ๋กœ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ(๋ถ€๊ฐ€ ์ •๋ณด)์™€ ํ•จ๊ป˜ ์ „์†ก๋˜๋ฉฐ, ํ”„๋กœํ† ์ฝœ์— ๋”ฐ๋ผ ์–ด๋–ค ํ˜•์‹์œผ๋กœ ๊ตฌ์„ฑ๋˜๋Š”์ง€์— ๋”ฐ๋ผ ๋‹ค์–‘ํ•œ ๋ฐฉ์‹์œผ๋กœ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ๋‹ค. diff --git "a/developLog/book/onboarding/4/_ \352\260\234\353\260\234\354\236\220 \354\230\250\353\263\264\353\224\251 \352\260\200\354\235\264\353\223\234 4\354\236\245 __1__.md" "b/developLog/book/onboarding/4/_ \352\260\234\353\260\234\354\236\220 \354\230\250\353\263\264\353\224\251 \352\260\200\354\235\264\353\223\234 4\354\236\245 __1__.md" new file mode 100644 index 0000000..2dbb1b9 --- /dev/null +++ "b/developLog/book/onboarding/4/_ \352\260\234\353\260\234\354\236\220 \354\230\250\353\263\264\353\224\251 \352\260\200\354\235\264\353\223\234 4\354\236\245 __1__.md" @@ -0,0 +1,643 @@ +# ๊ฐœ๋ฐœ์ž ์˜จ๋ณด๋”ฉ ๊ฐ€์ด๋“œ 4์žฅ -(1) + +![](https://velog.velcdn.com/images/prettylee620/post/a1ed16d1-5bbd-4eff-928a-5f94ea820cc8/image.png) + +## ์šด์˜ ํ™˜๊ฒฝ์„ ๊ณ ๋ คํ•œ ์ฝ”๋“œ ์ž‘์„ฑ - ๊ฐœ๋ฐœ ํ™˜๊ฒฝ๊ณผ ํ”„๋กœ๋•์…˜ ํ™˜๊ฒฝ์€ ์—„์—ฐํžˆ ๋‹ค๋ฅด๋‹ค. + +> ํ•„๋… ๊ฐœ๋ฐœ์ž ์˜จ๋ณด๋”ฉ ๊ฐ€์ด๋“œ์„ ์ฝ๊ณ  ์ •๋ฆฌํ•˜๋Š” ๊ธ€์ด๋ฉฐ, ํ˜น์‹œ ๋ฌธ์ œ๊ฐ€ ๋˜๋ฉด ์‚ญ์ œํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. + +### 1. ๋“ค์–ด๊ฐ€๊ธฐ + +* ์‹ค ์„ธ๊ณ„์˜ ์‚ฌ์šฉ์ž๋Š” ์˜ˆ์ธก์ด ์–ด๋ ค์šฐ๋ฉฐ, ๋„คํŠธ์›Œํฌ๋„ ๋ฏฟ์„ ์ˆ˜ ์—†๋‹ค. +* ํ”„๋กœ๋•์…˜ ์†Œํ”„ํŠธ์›จ์–ด๋Š” ์ง€์†์ ์œผ๋กœ ๋™์ž‘ํ•ด์•ผ ํ•œ๋‹ค. ๋”ฐ๋ผ์„œ ์šด์˜ ๊ฐ€๋Šฅํ•œ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด์•ผ ์˜ˆ์ƒํ•˜์ง€ ๋ชปํ•œ ์ƒํ™ฉ์— ๋Œ€์ฒ˜ํ•  ์ˆ˜ ์žˆ๋‹ค. + +#### ๐Ÿ‹ ์šด์˜ ๊ฐ€๋Šฅํ•œ ์ฝ”๋“œ + +* ๋ณดํ˜ธ ์žฅ์น˜, ๋ถ„์„ ์žฅ์น˜, ์ œ์–ด ์žฅ์น˜๊ฐ€ ๋‚ด์žฅ๋œ ์ฝ”๋“œ๋ฅผ ๋งํ•œ๋‹ค. +* **์•ˆ์ „ํ•˜๊ณ  ํšŒ๋ณต์„ฑ ์žˆ๋Š” ์ฝ”๋”ฉ ๊ธฐ๋ฒ•**์„ ์ด์šฉํ•ด ๋ฐฉ์–ด์ ์œผ๋กœ ํ”„๋กœ๊ทธ๋ž˜๋ฐํ•ด์„œ ์‹œ์Šคํ…œ์„ ๋ณดํ˜ธํ•ด์•ผ ํ•œ๋‹ค. + +#### ๐Ÿ‹ ์šด์˜ ๊ฐ€๋Šฅํ•œ ์ฝ”๋“œ์˜ ์ค‘์š”์„ฑ + +1. ์•ˆ์ „ํ•œ ์ฝ”๋“œ๋Š” ๋‹ค์–‘ํ•œ ์žฅ์• ๋ฅผ ๊ทน๋ณตํ•˜๋ฉฐ, ํšŒ๋ชฉ์„ฑ์„ ๊ฐ–์ถ˜ ์ฝ”๋“œ๋Š” ์žฅ์• ๊ฐ€ ๋ฐœ์ƒํ•ด๋„ ๋ณต๊ตฌ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค. +2. ์šฉ์ดํ•œ ๋ถ„์„์„ ์œ„ํ•ด **๋กœ๊ทธ, ์ง€ํ‘œ, ํ˜ธ์ถœ ์ถ”์  ์ •๋ณด** ๋“ฑ์„ ์ˆ˜์ง‘ํ•˜์ž. +3. ์šด์˜ ๊ฐ€๋Šฅํ•œ ์‹œ์Šคํ…œ์€ ์„ค์ • ํŒŒ๋ผ๋ฏธํ„ฐ์™€ ์‹œ์Šคํ…œ ๋„๊ตฌ๋ฅผ ๊ฐ–์ถ”๊ณ  ์žˆ๋‹ค. + +### 2. ์žฅ์• ์— ๋Œ€๋น„ํ•˜๊ธฐ ์œ„ํ•œ ๋ฐฉ์–ด์  ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ฐฉ์•ˆ + +* ๋ฐฉ์–ด์  ์ฝ”๋“œ๋Š” ์žฅ์• ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๋นˆ๋„๊ฐ€ ๋‚ฎ์œผ๋ฉฐ, ์žฅ์• ๊ฐ€ ๋ฐœ์ƒํ•˜๋”๋ผ๋„ ๋Œ€๋ถ€๋ถ„ ๋ณต๊ตฌ๋œ๋‹ค. +* ์ฝ”๋“œ๋ฅผ ์•ˆ์ „ํ•˜๊ณ  ํšŒ๋ณต์„ฑ ์žˆ๊ฒŒ ๋งŒ๋“ค์ž + +#### ๐Ÿ‹ ์•ˆ์ „ํ•œ ์ฝ”๋“œ + +1. ์ปดํŒŒ์ผ ํƒ€์ž„์˜ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ๋ฅผ ํ†ตํ•ด ๋Ÿฐํƒ€์ž„ ์žฅ์•  ์ตœ์†Œํ™” +2. `๋ถˆ๋ณ€ ๋ณ€์ˆ˜` ์‚ฌ์šฉ +3. ์ ‘๊ทผ ์ œ์–ด์ž ์ด์šฉํ•ด์„œ ๋ฒ”์œ„ ์ œํ•œ +4. `์ •์  ํƒ€์ž… ๊ฒ€์‚ฌ๊ธฐ`๋ฅผ ํ™œ์šฉํ•ด์„œ ๋ฒ„๊ทธ ์ค„์ด๊ธฐ +5. ๋Ÿฐํƒ€์ž„์— ์˜ˆ์ƒ์น˜ ๋ชปํ•œ ์ผ์ด ๋ฒŒ์–ด์ง€์ง€ ์•Š๋„๋ก `์ž…๋ ฅ๊ฐ’ ๊ฒ€์‚ฌ` + +#### ๐Ÿ‹ ํšŒ๋ณต์„ฑ ์žˆ๋Š” ์ฝ”๋“œ + +* ๊ถŒ์žฅ๋˜๋Š” `์˜ˆ์™ธ ์ฒ˜๋ฆฌ ๊ธฐ๋ฒ•`์„ ํ™œ์šฉํ•˜์—ฌ ์žฅ์• ๋ฅผ ์ ์ ˆํ•˜๊ฒŒ ์ฒ˜๋ฆฌํ•œ๋‹ค. + +#### โœ๏ธ ๋ถˆ๋ณ€ ๋ณ€์ˆ˜๋ž€? + +* ํ•œ ๋ฒˆ ๊ฐ’์ด ํ• ๋‹น๋˜๋ฉด ๊ทธ ๊ฐ’์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†๋Š” ๊ฒƒ์„ ๋งํ•œ๋‹ค. + +```java +private final int value; +``` + +* ์žฅ์  + +> 1. ๊ฐ’์˜ ๋ณด์žฅ +> 2. ์Šค๋ ˆ๋“œ ์•ˆ์ „์„ฑ +> 3. ์บ์‹œํ™” ์šฉ์ด +> 4. ๋””๋ฒ„๊น… ๋ฐ ํ…Œ์ŠคํŠธ ์šฉ์ด +> 5. ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ๊ณผ์˜ ์กฐํ•ฉ + +#### โœ๏ธ ์ •์  ํƒ€์ž… ๊ฒ€์‚ฌ๊ธฐ๋ž€? + +* **์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜์ง€ ์•Š๊ณ  ์˜ค๋ฅ˜๋ฅผ ๊ฐ์ง€ํ•˜๋Š” ๊ฒƒ**์„ ์ •์  ๊ฒ€์‚ฌ ๋„๊ตฌ(static checking) +* ์—ฐ์‚ฐ๋˜๋Š” ๊ฐ’์˜ ํƒ€์ž…์— ๋”ฐ๋ผ ์˜ค๋ฅ˜ ์—ฌ๋ถ€๋ฅผ ๊ฒฐ์ •ํ•˜๋Š” ๊ฒƒ์ด ์ •์  ํƒ€์ž… ๊ฒ€์‚ฌ +* ์ด ๋„๊ตฌ๋Š” ์ฝ”๋“œ์˜ ์ปดํŒŒ์ผ ๊ณผ์ •์ด๋‚˜ ๋นŒ๋“œ ๊ณผ์ •์—์„œ์˜ ์˜ค๋ฅ˜๋ฅผ ์‚ฌ์ „์— ๋ฐœ๊ฒฌํ•˜๊ณ , ํƒ€์ž… ๊ด€๋ จ ์˜ค๋ฅ˜, ๋…ผ๋ฆฌ ์˜ค๋ฅ˜ ๋“ฑ์„ ์ฒดํฌํ•˜์—ฌ ์‹ ๋ขฐ์„ฑ์„ ๋†’์ด๊ณ  ์•ˆ์ „์„ฑ ํ™•๋ณด๋ฅผ ์œ„ํ•ด ์‚ฌ์šฉ +* ์ข…๋ฅ˜: Java์˜ ์ปดํŒŒ์ผ๋Ÿฌ์™€ ์ •์  ๋ถ„์„ ๋„๊ตฌ, TypeScript์˜ tsc(Typescript Compiler), Kotlin์˜ ์ปดํŒŒ์ผ๋Ÿฌ, C#์˜ Roslyn + +#### โœ๏ธ ์ž…๋ ฅ๊ฐ’ ๊ฒ€์‚ฌ ์˜ˆ์‹œ + +1. ์กฐ๊ฑด๋ฌธ ์‚ฌ์šฉ + +```java +if (inputValue >= 0 && inputValue <= 100) { + // ์œ ํšจํ•œ ๋ฒ”์œ„ ๋‚ด์˜ ์ž…๋ ฅ๊ฐ’ ์ฒ˜๋ฆฌ +} else { + // ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚œ ์ž…๋ ฅ๊ฐ’ ์ฒ˜๋ฆฌ +} +``` + +2. ์˜ˆ์™ธ ์ฒ˜๋ฆฌ + +```java +try { + // ์ž…๋ ฅ๊ฐ’ ๊ฒ€์‚ฌ + if (inputValue < 0) { + throw new IllegalArgumentException("์ž…๋ ฅ๊ฐ’์€ ์Œ์ˆ˜์ผ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค."); + } + + // ์œ ํšจํ•œ ์ž…๋ ฅ๊ฐ’ ์ฒ˜๋ฆฌ +} catch (IllegalArgumentException e) { + // ์˜ˆ์™ธ ์ฒ˜๋ฆฌ + System.err.println("์—๋Ÿฌ: " + e.getMessage()); +} +``` + +3. ์ •๊ทœ ํ‘œํ˜„์‹ ์‚ฌ์šฉ + +```java +String emailRegex = "^[a-zA-Z0-9+_.-]+@[a-zA-Z0-9.-]+$"; +if (inputValue.matches(emailRegex)) { + // ์œ ํšจํ•œ ์ด๋ฉ”์ผ ์ฃผ์†Œ ํ˜•์‹ +} else { + // ์ž˜๋ชป๋œ ํ˜•์‹ +} +``` + +4. ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํ™œ์šฉ + +```java +import org.apache.commons.lang3.Validate; + +try { + Validate.isTrue(inputValue > 0, "์ž…๋ ฅ๊ฐ’์€ ์–‘์ˆ˜์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค."); + + // ์œ ํšจํ•œ ์ž…๋ ฅ๊ฐ’ ์ฒ˜๋ฆฌ +} catch (IllegalArgumentException e) { + // ์˜ˆ์™ธ ์ฒ˜๋ฆฌ + System.err.println("์—๋Ÿฌ: " + e.getMessage()); +} +``` + +### 3. null ๊ฐ’ ์‚ฌ์šฉ์€ ํ”ผํ•˜์ž + +#### ๐Ÿ‹ null์ด๋ž€ + +* ๊ฐ’์ด ํ• ๋‹น๋˜์ง€ ์•Š์€ ๋ณ€์ˆ˜์˜ ๊ธฐ๋ณธ๊ฐ’ + +#### ๐Ÿ‹ NullPointException + +* ๋งค์šฐ ๋ณดํŽธ์ ์œผ๋กœ ๋ฐœ์ƒ +* ๋ณ€์ˆ˜๊ฐ€ **๋„๊ฐ’์„ ๊ฐ–์ง„ ์•Š์•˜๋Š”์ง€ ๊ฒ€์‚ฌํ•˜๊ฑฐ๋‚˜, ๋„ ๊ฐ์ฒด ํŒจํ„ด์ด๋‚˜ ์˜ต์…˜ ํƒ€์ž… ๋“ฑ์„ ์‚ฌ์šฉ**ํ•ด์„œ ๋„ ํฌ์ธํŠธ ์˜ˆ์™ธ ๋ฐฉ์ง€ + +#### โœ๏ธ ๋„ ๊ฐ์ฒด ํŒจํ„ด(Null Object Pattern) + +> ๋””ํดํŠธ ๊ฐ’์„ ์ œ๊ณตํ•˜๊ณ , ์ฝ”๋“œ์˜ ๊ฐ€๋…์„ฑ์„ ํ–ฅ์ƒํ•œ๋‹ค. + +1. null ์ฐธ์กฐ ๋Œ€์‹ ์— **์‹ค์ œ ๋™์ž‘ํ•˜๋Š” ๋„ ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์˜ˆ์™ธ๋ฅผ ํ”ผํ•˜๊ณ  ๊ธฐ๋ณธ ๋™์ž‘์„ ์ œ๊ณตํ•˜๋Š” ํŒจํ„ด** +2. ๋„ ๊ฐ’ ๋Œ€์‹  ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ํŒจํ„ด +3. ๋„ ๊ฐ์ฒด๋Š” ์‹ค์ œ ๊ฐ์ฒด์™€ ๊ฐ™์€ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•˜๋ฉฐ, ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ ์‹œ ์•„๋ฌด๋Ÿฐ ๋™์ž‘์„ ์ˆ˜ํ–‰ํ•˜์ง€ ์•Š๊ฑฐ๋‚˜ ๊ธฐ๋ณธ ๊ฐ’ ๋ฐ˜ํ™˜ + +```java +interface Shape { + double area(); +} + +class Circle implements Shape { + private double radius; + + public Circle(double radius) { + this.radius = radius; + } + + public double area() { + return Math.PI * radius * radius; + } +} + +class NullShape implements Shape { + public double area() { + return 0.0; // ๋„ ๊ฐ์ฒด ์—ญํ• , ๋””ํดํŠธ ๊ฐ’ ์ œ๊ณต + } +} +``` + +4. ์›ํ•˜๋Š” ๊ฐ์ฒด๋ฅผ ์ฐพ์ง€ ๋ชปํ–ˆ์„ ๋•Œ ๋นˆ ๋ฐฐ์—ด์„ ๋ฆฌํ„ดํ•˜๋Š” ๊ฒ€์ƒ‰ ๋ฉ”์†Œ๋“œ๋ฅผ ๊ตฌํ˜„ + +```java +import java.util.Arrays; + +public class SearchExample { + private static final Person[] EMPTY_PERSON_ARRAY = new Person[0]; + + public static Person[] searchPersons(String keyword) { + // ์›ํ•˜๋Š” ๊ฒ€์ƒ‰ ๋กœ์ง ๊ตฌํ˜„ + // ์˜ˆ์‹œ๋กœ ํ•ญ์ƒ ๋นˆ ๋ฐฐ์—ด์„ ๋ฆฌํ„ดํ•˜๋„๋ก ํ•จ + return EMPTY_PERSON_ARRAY; + } + + public static void main(String[] args) { + String searchKeyword = "Alice"; + Person[] foundPersons = searchPersons(searchKeyword); + + if (foundPersons.length == 0) { + System.out.println("No persons found."); + } else { + System.out.println("Found persons:"); + for (Person person : foundPersons) { + System.out.println("Name: " + person.getName() + ", Age: " + person.getAge()); + } + } + } +} + +class Person { + private String name; + private int age; + + public Person(String name, int age) { + this.name = name; + this.age = age; + } + + public String getName() { + return name; + } + + public int getAge() { + return age; + } +} +``` + +#### โœ๏ธ ์˜ต์…˜ ํƒ€์ž… + +1. ๊ฐ’์˜ ์กด์žฌ ์œ ๋ฌด๋ฅผ ๋ช…์‹œ์ ์œผ๋กœ ๋‚˜ํƒ€๋‚ด๋Š” ๋ฐฉ๋ฒ•, ๊ฐ’์ด ์กด์žฌํ•˜๋Š” ๊ฒฝ์šฐ๋Š” ์‹ค์ œ ๊ฐ’์„ ๊ฐ€์ง€๊ณ , ๊ฐ’์ด ์—†๋Š” ๊ฒฝ์šฐ๋Š” ๋นˆ ์ƒํƒœ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ํƒ€์ž… + +```java +class Option { //Option ํด๋ž˜์Šค๋Š” ์ œ๋„ˆ๋ฆญ ํƒ€์ž…์„ ์‚ฌ์šฉํ•ด์„œ ๊ฐ’์˜ ์กด์žฌ ์œ ๋ฌด๋ฅผ ๋‚˜ํƒ€๋‚ด๋ฉฐ + private T value; + + private Option(T value) { + this.value = value; + } + + public static Option of(T value) { + return new Option<>(value); + } + + public T get() { + if (value == null) { // ๊ฐ’์ด ์—†๋Š” ๊ฒฝ์šฐ ์˜ˆ์™ธ๋ฅผ ๋˜์ง€๋ฉฐ + throw new IllegalStateException("No value present"); + } + return value; // ๊ฐ’์ด ์žˆ๋Š” ๊ฒฝ์šฐ ์‹ค์ œ๊ฐ’ ๋ฐ˜ํ™˜ + } +} +``` + +#### ๐Ÿ‹ ๋„ ๊ฒ€์‚ฌ๋Š” ๋ฉ”์†Œ๋“œ์˜ ์‹œ์ž‘ ์ง€์ ์—์„œ ํ•ด์•ผํ•œ๋‹ค. + +1. `NotNull` ์• ๋…ธํ…Œ์ด์…˜ ์–ธ์–ด ๊ธฐ๋Šฅ ์ด์šฉ + +```java +import javax.validation.constraints.NotNull; + +public class Person { + private String name; + private int age; + + public Person(@NotNull String name, @NotNull int age) { + this.name = name; + this.age = age; + } + + @NotNull + public String getName() { + return name; + } + + public void setName(@NotNull String name) { + this.name = name; + } + + @NotNull + public int getAge() { + return age; + } + + public void setAge(@NotNull int age) { + this.age = age; + } + + public static void main(String[] args) { + // ์˜ฌ๋ฐ”๋ฅธ ์‚ฌ์šฉ + Person person = new Person("Alice", 30); + System.out.println("Name: " + person.getName()); + System.out.println("Age: " + person.getAge()); + + // ์ž ์žฌ์ ์ธ ์˜ค๋ฅ˜: null ๊ฐ’ ์ „๋‹ฌ + Person nullPerson = new Person(null, 25); // ์ปดํŒŒ์ผ ์˜ค๋ฅ˜ ๋ฐœ์ƒ + System.out.println("Name: " + nullPerson.getName()); + System.out.println("Age: " + nullPerson.getAge()); + } +} +``` + +### 4. ๋ถˆ๋ณ€ ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์ž + +> ์ž๋ฐ”์—์„œ๋Š” final, ์Šค์นผ๋ผ์—์„œ๋Š” val ๋Ÿฌ์ŠคํŠธ๋Š” let + +1. ๋ถˆ๋ณ€ ๋ณ€์ˆ˜๋Š” ๊ฐ’์ด ํ•œ ๋ฒˆ ๋Œ€์ž…๋˜๊ณ  ๋‚˜๋ฉด ๊ทธ ๊ฐ’์„ ๋ฐ”๊ฟ€ ์ˆ˜ ์—†๋‹ค. +2. ๋ถˆ๋ณ€ ๋ณ€์ˆ˜๋Š” ์˜๋„์น˜ ์•Š๊ฒŒ ๋ณ€์ˆ˜์˜ ๊ฐ’์ด ๋ฐ”๋€Œ์ง€ ์•Š์„ ๊ฒƒ์„ ์ธ์ง€ +3. ๋ถˆ๋ณ€ ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ณ‘๋ ฌ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์€ ๋” ๊ฐ„๋‹จํ•ด์ง€๋ฉฐ, ๋ณ€์ˆ˜ ๊ฐ’์ด ๋ฐ”๋€Œ์ง€ ์•Š์„ ๊ฒƒ์ž„์„ ์ธ์ง€ํ•˜๋Š” ์ปดํŒŒ์ผ๋Ÿฌ๋‚˜ ๋Ÿฐํƒ€์ž„์€ ๋” ํšจ์œจ์ ์œผ๋กœ ๋™์ž‘ ๊ฐ€๋Šฅํ•˜๋‹ค. + +### 5. ํƒ€์ž… ํžŒํŠธ์™€ ์ •์  ํƒ€์ž… ๊ฒ€์‚ฌ๋ฅผ ์‚ฌ์šฉํ•˜์ž. + +> ๋ณ€์ˆ˜๊ฐ€ ๋ณด๊ด€ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ’์„ ์ œํ•œํ•˜์ž. ๋ช‡ ๊ฐ€์ง€ ๋ฌธ์ž์—ด ๊ฐ’ ์ค‘ ํ•˜๋‚˜๋งŒ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋Š” ๋ณ€์ˆ˜๋Š” String๋ณด๋‹ค๋Š” `Enum` ์„ ์–ธ ๊ฐ€๋Šฅ + +1. ์˜ˆ์ƒ์น˜ ๋ชปํ•œ ๊ฐ’์„ ๋Œ€์ž…ํ•ด๋„ ๋ฒ„๊ทธ๋ฅผ ์œ ๋ฐœํ•˜์ง€ ์•Š๊ณ  ๊ทธ ์ฆ‰์‹œ ์‹คํŒจํ•˜๊ฒŒ ๋œ๋‹ค. +2. ๊ฐ€์žฅ ๊ตฌ์ฒด์ ์ธ ํƒ€์ž…์„ ์‚ฌ์šฉํ•˜์ž + +#### ๐Ÿ‹ Enum์ด ๋” ์ข‹์€ ์ด์œ  + +> 1. Enum์€ ๋ช‡ ๊ฐ€์ง€ ๊ณ ์ •๋œ ๊ฐ’์„ ๋‚˜ํƒ€๋‚ด๋Š” ์ž๋ฃŒํ˜•์œผ๋กœ, ํ•œ์ •๋œ ์„ ํƒ์ง€ ์ค‘ ํ•˜๋‚˜๋งŒ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋Š” ๋ณ€์ˆ˜ + +2. ๊ฐ€๋…์„ฑ ๋ฐ ์•ˆ์ •์„ฑ์˜ ์ข‹์Œ +3. ์ œํ•œ๋œ ์„ ํƒ์ง€ +4. ์ฝ”๋“œ ์œ ์ง€๋ณด์ˆ˜ +5. ํƒ€์ž… ์•ˆ์ •์„ฑ +6. ์—ด๊ฑฐํ˜• ์ƒ์ˆ˜ ์‚ฌ์šฉ + +```java +public enum DayOfWeek { + MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY +} + +public class Main { + public static void main(String[] args) { + DayOfWeek today = DayOfWeek.WEDNESDAY; + + switch (today) { + case MONDAY: + System.out.println("Today is Monday."); + break; + case WEDNESDAY: + System.out.println("Today is Wednesday."); + break; + // ... + } + } +} +``` + +#### ๐Ÿ‹ ํŒŒ์ด์ฌ ์˜ˆ์ œ + +* ํƒ€์ž… ํžŒํŠธ๋ฅผ ์ด์šฉํ•ด์„œ ๋ฉ”์†Œ๋“œ๊ฐ€ ๋ฌธ์ž์—ด ์ธ์ˆ˜๋ฅผ ๋ฐ›์•„ ๋ฌธ์ž์—ด์„ ๋ฆฌํ„ดํ•œ๋‹ค๋Š” ์‚ฌ์‹ค +* ํ•จ์ˆ˜์˜ ๋งค๊ฐœ๋ณ€์ˆ˜์™€ ๋ฐ˜ํ™˜๊ฐ’์˜ ํƒ€์ž…์„ ๋ช…์‹œ ๊ฐ€๋Šฅ + +```python +def say(something: str) -> str: + return "You said: " + something + +``` + +#### โœ๏ธ ํƒ€์ž… ํžŒํŠธ๋ž€ + +> **ํƒ€์ž… ํžŒํŠธ**๋Š” ๊ธฐ์กด์˜ ์ฝ”๋“œ๋ฒ ์ด์Šค์— ์ ์ง„์ ์œผ๋กœ ์ถ”๊ฐ€ ๊ฐ€๋Šฅํ•˜๋ฉฐ, ํƒ€์ž… ํžŒํŠธ๋ฅผ ์ด์šฉํ•ด์„œ ์ฝ”๋“œ๊ฐ€ ์‹คํ–‰๋˜๊ธฐ ์ „์— ๋ฒ„๊ทธ๋ฅผ ์ฐพ์•„๋˜๋Š” ์ •์  ํƒ€์ž… ๊ฒ€์‚ฌ๊ธฐ ๋„์ž… ํ•˜๋ฉด ๋Ÿฐํƒ€์ž„ ์—๋Ÿฌ ํ•ด๊ฒฐ ๊ฐ€๋Šฅ + +* ํƒ€์ž… ํžŒํŠธ(Type Hint)๋Š” **ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์—์„œ ๋ณ€์ˆ˜, ํ•จ์ˆ˜ ๋งค๊ฐœ๋ณ€์ˆ˜, ํ•จ์ˆ˜ ๋ฐ˜ํ™˜๊ฐ’ ๋“ฑ์— ๋Œ€ํ•œ ๋ฐ์ดํ„ฐ ํƒ€์ž… ์ •๋ณด๋ฅผ ์ œ๊ณต**ํ•˜๋Š” ๊ฒƒ์„ ๋งํ•œ๋‹ค. +* ํƒ€์ž… ํžŒํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ฝ”๋“œ์˜ ๊ฐ€๋…์„ฑ์„ ๋†’์ด๊ณ  ํƒ€์ž… ๊ด€๋ จ ์˜ค๋ฅ˜๋ฅผ ์‚ฌ์ „์— ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ๋‹ค. +* ์ฃผ๋กœ ์ •์  ํƒ€์ž… ์–ธ์–ด์—์„œ ์‚ฌ์šฉ๋˜๋ฉฐ, ํŒŒ์ด์ฌ๊ณผ ๊ฐ™์€ ๋™์  ํƒ€์ž… ์–ธ์–ด์—์„œ๋„ ํƒ€์ž… ํžŒํŠธ๋ฅผ ์ง€์› + +### 6. ์ž…๋ ฅ๊ฐ’์„ ๊ฒ€์‚ฌํ•˜์ž. + +> ์ฝ”๋“œ๋กœ ์ „๋‹ฌ๋˜๋Š” ์ž…๋ ฅ๊ฐ’์€ ํ›ผ์† ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์Œ. \*\*์‚ฌ์ „ ์กฐ๊ฑด, ์ฒดํฌ์„ฌ, ๋ฐ์ดํ„ฐ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ, ๋ณด์•ˆ ๊ด€๋ จ ๊ถŒ์žฅ ๊ธฐ๋ฒ•, ๋ณดํŽธ์ ์ธ ์—๋Ÿฌ๋ฅผ ์ฐพ์•„์ฃผ๋Š” ๋„๊ตฌ \*\*ํ™œ์šฉ + +* ์›์น˜ ์•Š๋Š” ์ž…๋ ฅ๊ฐ’์ด ์ „๋‹ฌ๋˜๋ฉด ์ตœ๋Œ€ํ•œ ์ด๋ฅธ ์‹œ์ ์— ์‹คํ–‰์„ ๊ฑฐ๋ถ€ํ•˜๋„๋ก ์กฐ์น˜ํ•ด๋‘์ž. +* ์ตœ๋Œ€ํ•œ ๋งŽ์ด ๊ฒ€์‚ฌํ•˜์ž. +* \*\*`์ž…๋ ฅ ๋ฌธ์ž์—ด`\*\*์ด ์›ํ•˜๋Š” ํ˜•์‹์ธ์ง€ ํ™•์ธํ•˜๊ณ , ๋ฌธ์ž์—ด ์•ž ๋’ค์˜ ๊ณต๋ฐฑ๋„ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•œ๋‹ค๋Š” ์  +* ์ˆซ์ž๋Š” ์ ์ ˆํ•œ ๋ฒ”์œ„ ๋‚ด์— ์žˆ๋Š”์ง€, ํŒŒ๋ผ๋ฏธํ„ฐ๊ฐ€ 0๋ณด๋‹ค ์ปค์•ผ ํ•œ๋‹ค๋ฉด ๋ฐ˜๋“œ์‹œ ํŒŒ๋ผ๋ฏธํ„ฐ๋„ ํ™•์ธ +* ํŒŒ๋ผ๋ฏธํ„ฐ๊ฐ€ IP์ฃผ์†Œ๋ผ๋ฉด ์ ์ ˆํ•œ IP์ฃผ์†Œ์ธ์ง€๋„ ํ™•์ธ + +#### ๐Ÿ‹ ์‚ฌ์ „ ์กฐ๊ฑด, ์‚ฌํ›„ ์กฐ๊ฑด ์ด์šฉ + +> ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ๋ž€ ํ•จ์ˆ˜๋‚˜ ๋ฉ”์†Œ๋“œ์˜ ๋งค๊ฐœ๋ณ€์ˆ˜์— ๋Œ€ํ•œ ํƒ€์ž…, ๋ฒ”์œ„, ์ƒํƒœ ๋“ฑ์„ ํ™•์ธํ•˜๋Š” ๊ณผ์ • + +1. ๋ฉ”์†Œ๋“œ์— ์ „๋‹ฌ๋˜๋Š” ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ ํ•„์š” +2. ์œ ํšจ์„ฑ์„ ๊ฒ€์‚ฌํ•˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋‚˜ ํ”„๋ ˆ์ž„์›Œํฌ ์‚ฌ์šฉ + +#### ๐Ÿ‹ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ ๋ฐฉ๋ฒ• + +1. ํƒ€์ž… ํžŒํŠธ ์‚ฌ์šฉ +2. ์ „์ฒ˜๋ฆฌ ๊ณผ์ • ์ถ”๊ฐ€ + +* ๋ฉ”์†Œ๋“œ ๋‚ด๋ถ€์—์„œ ์ธ์ž์˜ ์œ ํšจ์„ฑ์„ ๊ฒ€์‚ฌํ•˜๋Š” ์ „์ฒ˜๋ฆฌ ๊ณผ์ •์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋‹ค. +* ์˜ˆ๋ฅผ ๋“ค์–ด, ์ธ์ž๊ฐ€ ํŠน์ • ๋ฒ”์œ„ ๋‚ด์— ์žˆ๋Š”์ง€, ํŠน์ • ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š”์ง€ ๋“ฑ์„ ๊ฒ€์‚ฌํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋•Œ ๊ฒ€์‚ฌ์— ์‹คํŒจํ•˜๋ฉด ์˜ˆ์™ธ๋ฅผ ๋˜์ง€๊ฑฐ๋‚˜ ๊ธฐ๋ณธ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋“ฑ์˜ ์ฒ˜๋ฆฌ๋ฅผ ํ•  ์ˆ˜ ์žˆ๋‹ค. + +3. ์˜ˆ์™ธ ์ฒ˜๋ฆฌ +4. ์‚ฌ์ „ ์กฐ๊ฑด, ์‚ฌํ›„ ์กฐ๊ฑด ์„ค์ • + +* ์‚ฌ์ „ ์กฐ๊ฑด์€ ํ•จ์ˆ˜๊ฐ€ ์‹คํ–‰๋˜๊ธฐ ์ „์— ๊ฒ€์‚ฌํ•ด์•ผ ํ•  ์กฐ๊ฑด์„ ๋‚˜ํƒ€๋‚ด๋ฉฐ, ์‚ฌํ›„ ์กฐ๊ฑด์€ ํ•จ์ˆ˜๊ฐ€ ์‹คํ–‰๋œ ํ›„์˜ ์กฐ๊ฑด์„ ๋‚˜ํƒ€๋‚ธ๋‹ค. +* ์‚ฌ์ „ ์กฐ๊ฑด ์„ค์ • : b๊ฐ€ 0์ด๋ฉด `AssertionError` ์˜ˆ์™ธ ๋ฐœ์ƒ + +```python +def divide(a, b): + assert b != 0, "b cannot be zero" + return a / b +``` + +* ์‚ฌํ›„ ์กฐ๊ฑด ์„ค์ • : ํ•ฉ๊ณ„๊ฐ€ ์Œ์ˆ˜๊ฐ€ ์•„๋‹Œ์ง€ ๊ฒ€์‚ฌ ํ›„ ์‚ฌํ›„ ์กฐ๊ฑด์ด ์ถฉ์กฑ๋˜์ง€ ์•Š์œผ๋ฉด `AssertionError` ์˜ˆ์™ธ ๋ฐœ์ƒ + +```python +def calculate_sum(numbers): + result = sum(numbers) + assert result >= 0, "sum should be non-negative" + return result +``` + +5. ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์‚ฌ์šฉ +6. ๋ฌธ์„œํ™” + +#### ๐Ÿ‹ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ, ํ”„๋ ˆ์ž„์›Œํฌ + +**1. cheackNotNull์ด๋ผ๋Š” ๋ฉ”์†Œ๋“œ** **2. @Size(min=0, max=100)** + +#### ๐Ÿ‹ ์˜๋„์น˜ ์•Š์€ ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ์ด ์ผ์–ด๋‚˜์ง€ ์•Š์•˜๋Š”์ง€ ์ฒดํฌ์„ฌ์„ ์ด์šฉํ•ด์„œ ํ™•์ธ + +**1. ์ฒดํฌ์„ฌ์ด๋ž€?** + +* ๋ฐ์ดํ„ฐ์˜ ํŠน์ • ๋ถ€๋ถ„์—์„œ ์ƒ์„ฑ๋œ ํ•ด์‹œ ๊ฐ’ ๋˜๋Š” ์ฒดํฌ์„ฌ ๊ฐ’์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ด ํ„ฐ +* **๋ฐ์ดํ„ฐ๊ฐ€ ๋ณ€๊ฒฝ๋˜๋ฉด ์ฒดํฌ์„ฌ ๊ฐ’๋„ ๋ณ€๊ฒฝ๋˜๋ฏ€๋กœ ์ด๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ ์—ฌ๋ถ€ ํ™•์ธ ๊ฐ€๋Šฅ**\ + + +2. ์˜ˆ์‹œ + +* ํŒŒ์ผ์˜ ์ฒดํฌ์„ฌ์„ ๊ณ„์‚ฐํ•˜์—ฌ ์ €์žฅํ•˜๊ณ  ์ดํ›„์— ํŒŒ์ผ์„ ๋‹ค์‹œ ์ฝ์–ด์™€์„œ ์ฒดํฌ์„ฌ์„ ๋‹ค์‹œ ๊ณ„์‚ฐํ•œ ํ›„ ์ €์žฅ๋œ ์ฒดํฌ์„ฌ๊ณผ ๋น„๊ตํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ ์—ฌ๋ถ€๋ฅผ ํ™•์ธ +* ์˜ˆ์ œ python + +```python +import hashlib + +def calculate_checksum(data): + # ๋ฐ์ดํ„ฐ์˜ ์ฒดํฌ์„ฌ ๊ฐ’์„ ๊ณ„์‚ฐํ•˜๋Š” ํ•จ์ˆ˜ + sha256 = hashlib.sha256() + sha256.update(data.encode()) + return sha256.hexdigest() + +def save_data_with_checksum(filename, data): + # ๋ฐ์ดํ„ฐ์™€ ์ฒดํฌ์„ฌ ๊ฐ’์„ ํŒŒ์ผ์— ์ €์žฅํ•˜๋Š” ํ•จ์ˆ˜ + checksum = calculate_checksum(data) + with open(filename, 'w') as file: + file.write(data + '\n') + file.write(checksum) + +def verify_checksum(filename): + # ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ์™€ ์ฒดํฌ์„ฌ ๊ฐ’์„ ํ™•์ธํ•˜๋Š” ํ•จ์ˆ˜ + with open(filename, 'r') as file: + lines = file.readlines() + data = lines[0].strip() + saved_checksum = lines[1].strip() + calculated_checksum = calculate_checksum(data) + if saved_checksum == calculated_checksum: + print("Checksum verification successful. Data is intact.") + else: + print("Checksum verification failed. Data may be corrupted.") + +# ์˜ˆ์‹œ ๋ฐ์ดํ„ฐ๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์ €์žฅ +data = "Hello, world!" +filename = "data.txt" +save_data_with_checksum(filename, data) + +# ๋ฐ์ดํ„ฐ ๋ฌด๊ฒฐ์„ฑ ๊ฒ€์ฆ +verify_checksum(filename) +``` + +**2. java ์˜ˆ์ œ** + +```java +import java.security.MessageDigest; +import java.security.NoSuchAlgorithmException; + +public class DataIntegrityExample { + + // ์ž…๋ ฅ๋œ ๋ฐ์ดํ„ฐ์˜ ์ฒดํฌ์„ฌ์„ ๊ณ„์‚ฐํ•˜๋Š” ๋ฉ”์„œ๋“œ + public static String calculateChecksum(String data) throws NoSuchAlgorithmException { + // SHA-256 ํ•ด์‹œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•˜๋Š” MessageDigest ๊ฐ์ฒด ์ƒ์„ฑ + MessageDigest md = MessageDigest.getInstance("SHA-256"); + // ๋ฐ์ดํ„ฐ์˜ ํ•ด์‹œ๊ฐ’ ๊ณ„์‚ฐ + byte[] hash = md.digest(data.getBytes()); + StringBuilder hexString = new StringBuilder(); + + // ํ•ด์‹œ๊ฐ’์„ 16์ง„์ˆ˜ ๋ฌธ์ž์—ด๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ๋ฐ˜ํ™˜ + for (byte b : hash) { + String hex = Integer.toHexString(0xff & b); + if (hex.length() == 1) { + hexString.append('0'); + } + hexString.append(hex); + } + + return hexString.toString(); + } + + public static void main(String[] args) { + try { + // ์›๋ณธ ๋ฐ์ดํ„ฐ ์„ค์ • + String originalData = "Hello, world!"; + // ์›๋ณธ ๋ฐ์ดํ„ฐ์˜ ์ฒดํฌ์„ฌ ๊ณ„์‚ฐ + String checksum = calculateChecksum(originalData); + + System.out.println("Original Data: " + originalData); + System.out.println("Calculated Checksum: " + checksum); + + // ๋ฐ์ดํ„ฐ ๋ณ€์กฐ ์‹œ๋ฎฌ๋ ˆ์ด์…˜ + String corruptedData = "Hacked, world!"; + // ๋ณ€์กฐ๋œ ๋ฐ์ดํ„ฐ์˜ ์ฒดํฌ์„ฌ ๊ณ„์‚ฐ + String corruptedChecksum = calculateChecksum(corruptedData); + + System.out.println("Corrupted Data: " + corruptedData); + System.out.println("Corrupted Checksum: " + corruptedChecksum); + + // ์ฒดํฌ์„ฌ ๊ฐ’ ๋น„๊ต๋ฅผ ํ†ตํ•œ ๋ฐ์ดํ„ฐ ๋ฌด๊ฒฐ์„ฑ ๊ฒ€์ฆ + if (checksum.equals(corruptedChecksum)) { + System.out.println("Checksum verification failed. Data may be corrupted."); + } else { + System.out.println("Checksum verification successful. Data is intact."); + } + } catch (NoSuchAlgorithmException e) { + System.err.println("Error: " + e.getMessage()); + } + } +} + +``` + +#### ๐Ÿ‹ ๊ฒ€์ฆ๋œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€ ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์ด์šฉํ•ด์„œ ํฌ๋กœ์Šค ์‚ฌ์ดํŠธ ์Šคํฌ๋ฆฝํŒ… ๋ฐฉ์ง€ํ•˜์ž. + +* ํฌ๋กœ์Šค ์‚ฌ์ดํŠธ ์Šคํฌ๋ฆฝํŒ… ๋ฐฉ์ง€ (Cross-Site Scripting, XSS): + +1. ์„ค๋ช…: ํฌ๋กœ์Šค ์‚ฌ์ดํŠธ ์Šคํฌ๋ฆฝํŒ…์€ **์•…์˜์ ์ธ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‚ฝ์ž…ํ•˜์—ฌ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์‚ฌ์šฉ์ž๋“ค์—๊ฒŒ ์•…์„ฑ ํ–‰์œ„๋ฅผ ์œ ๋ฐœํ•  ์ˆ˜ ์žˆ๋Š” ๊ณต๊ฒฉ** +2. ์˜ˆ์‹œ: ์ž…๋ ฅ ํผ์— ์Šคํฌ๋ฆฝํŠธ ์ฝ”๋“œ๋ฅผ ์‚ฝ์ž…ํ•˜์—ฌ ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž์˜ ์ •๋ณด๋ฅผ ํš๋“ํ•˜๋Š” ์‹œ๋„๋ฅผ ์ฐจ๋‹จํ•ด์•ผ ํ•œ๋‹ค. ๋Œ€ํ‘œ์ ์œผ๋กœ `HTML ์ด์Šค์ผ€์ดํ”„ ํ•จ์ˆ˜`๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์‚ฌ์šฉ์ž ์ž…๋ ฅ ๋ฐ์ดํ„ฐ๋ฅผ ์•ˆ์ „ํ•˜๊ฒŒ ์ฒ˜๋ฆฌ๊ฐ€ ํ•„์š” + +#### ๐Ÿ‹ ํ•ญ์ƒ ์ž…๋ ฅ๊ฐ’ ๊ฒ€์‚ฌํ•ด์„œ SQL ์ฃผ์ž… ๊ณต๊ฒฉ ์˜ˆ๋ฐฉ + +* SQL ์ฃผ์ž… ๊ณต๊ฒฉ ๋ฐฉ์ง€: + +1. ์„ค๋ช…: SQL ์ฃผ์ž…์€ **์‚ฌ์šฉ์ž ์ž…๋ ฅ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐ์ž‘**ํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ฟผ๋ฆฌ๋ฅผ ๋ณ€์กฐํ•˜๋Š” ๊ณต๊ฒฉ +2. ์˜ˆ์ œ: ์‚ฌ์šฉ์ž ์ž…๋ ฅ ๋ฐ์ดํ„ฐ๋ฅผ ์ง์ ‘ ์ฟผ๋ฆฌ์— ์‚ฝ์ž…ํ•˜์ง€ ์•Š๊ณ , ํ”„๋ ˆ์ž„์›Œํฌ๋‚˜ ORM ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ๋งค๊ฐœ๋ณ€์ˆ˜ํ™”๋œ ์ฟผ๋ฆฌ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜์—ฌ SQL ์ฃผ์ž… ๊ณต๊ฒฉ์„ ์˜ˆ๋ฐฉํ•  ์ˆ˜ ์žˆ๋‹ค. + +#### ๐Ÿ‹ strcpy ๊ฐ™์€ ๋ช…๋ น ์ด์šฉํ•ด์„œ ๋ฉ”๋ชจ๋ฆฌ ์กฐ์ž‘ ์‹œ ๋ฉ”๋ชจ๋ฆฌ ํฌ๊ธฐ ํŒŒ๋ผ๋ฏธํ„ฐ ๋ช…์‹œ์  ์„ค์ •ํ•ด์„œ ๋ฒ„ํผ ์˜ค๋ฒ„ํ”Œ๋กœ๋ฅผ ๋ฐฉ์ง€ + +* ๋ฒ„ํผ ์˜ค๋ฒ„ํ”Œ๋กœ ๋ฐฉ์ง€ + +1. ์„ค๋ช…: ๋ฒ„ํผ ์˜ค๋ฒ„ํ”Œ๋กœ๋Š” **ํ• ๋‹น๋œ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์„ ์ดˆ๊ณผํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ์“ฐ๊ฑฐ๋‚˜ ์ฝ๋Š” ๊ณต๊ฒฉ**์œผ๋กœ ํฌ๋ž˜์‹œ๋ฅผ ์œ ๋ฐœํ•˜๊ฑฐ๋‚˜ ์‹คํ–‰ ํ๋ฆ„์„ ์กฐ์ž‘ํ•  ์ˆ˜ ์žˆ๋‹ค. +2. ์˜ˆ์ œ: `๋ฌธ์ž์—ด ๋ณต์‚ฌ ํ•จ์ˆ˜(strcpy)`๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ๋ช…์‹œ์ ์œผ๋กœ ๋ฒ„ํผ์˜ ํฌ๊ธฐ๋ฅผ ์„ค์ •ํ•˜๊ฑฐ๋‚˜, ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ ๊ธฐ๋Šฅ์ด ๊ฐ•ํ™”๋œ ํ•จ์ˆ˜(strncpy, memcpy)๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฒ„ํผ ์˜ค๋ฒ„ํ”Œ๋กœ๋ฅผ ์˜ˆ๋ฐฉํ•  ์ˆ˜ ์žˆ๋‹ค. + +#### ๐Ÿ‹ ๋ณด์•ˆ ์•”ํ˜ธํ™” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋‚˜ ํ”„๋กœํ† ์ฝœ์€ ์ง์ ‘ ์ž‘์„ฑ๋ง๊ณ  ๋„๋ฆฌ ์‚ฌ์šฉ๋˜๋Š” ๊ฒƒ ์‚ฌ์šฉ + +1. ์„ค๋ช…: ๋ณด์•ˆ ์•”ํ˜ธํ™” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋‚˜ ํ”„๋กœํ† ์ฝœ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ์˜ ๊ธฐ๋ฐ€์„ฑ๊ณผ ๋ฌด๊ฒฐ์„ฑ์„ ๋ณดํ˜ธํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š” +2. ์˜ˆ์ œ: ์‚ฌ์šฉ์ž ๋น„๋ฐ€๋ฒˆํ˜ธ ์ €์žฅ ์‹œ์—๋Š” ์•ˆ์ „ํ•œ ํ•ด์‹œ ํ•จ์ˆ˜ (์˜ˆ: BCrypt)๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์•”ํ˜ธํ™”ํ•˜๊ณ , ๋ฐ์ดํ„ฐ ์ „์†ก ์‹œ์—๋Š” `HTTPS ํ”„๋กœํ† ์ฝœ`์„ ํ™œ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ์˜ ๋ณด์•ˆ์„ ๊ฐ•ํ™” + +### 7. ์˜ˆ์™ธ๋ฅผ ํ™œ์šฉํ•˜์ž + +> ํŠน์ •ํ•œ ๋ฆฌํ„ด๊ฐ’์œผ๋กœ ์—๋Ÿฌ๋ฅผ ํ‘œํ˜„ํ•˜๋Š” ๊ฒƒ์€ ๊ธˆ๋ฌผ์ด๋‹ค. + +1. ํŠน์ •ํ•œ ๋ฆฌํ„ด๊ฐ’์€ ๋ฉ”์†Œ๋“œ ์‹œ๊ทธ๋‹ˆ์ฒ˜์— ๋ช…ํ™•ํ•˜๊ฒŒ ๋“œ๋Ÿฌ๋‚˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ๋‹ค. 2. ๋”ฐ๋ผ์„œ ๊ฐœ๋ฐœ์ž๋Š” ๋ฆฌํ„ด๊ฐ’์ด ์—๋Ÿฌ๋ฅผ ์˜๋ฏธํ•œ๋‹ค๋Š” ์ ์„ ๋ชจ๋ฅผ ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์–ด๋–ค ๋ฆฌํ„ด๊ฐ’์ด ์–ด๋–ค ์—๋Ÿฌ ์ƒํƒœ๋ฅผ ์˜๋ฏธํ•˜๋Š”์ง€ ๊ธฐ์–ตํ•˜๊ธฐ๋„ ์–ด๋ ต๋‹ค. +2. ์˜ˆ์™ธ๋Š” ์ด๋ฆ„๋„ ์žˆ๊ณ  ์Šคํƒ ์ถ”์  ์ •๋ณด, ์ค„ ๋ฒˆํ˜ธ, ๋ฉ”์„ธ์ง€ ๋“ฑ nujll์ด๋‚˜ -1๋งŒ์œผ๋กœ ํ‘œํ˜„ํ•˜์ง€ ๋ชปํ•˜๋Š” ํ›จ์”ฌ ๋” ๋งŽ์€ ์ •๋ณด๋ฅผ ๋‹ด๊ณ  ์žˆ๋‹ค. + +### 8. ์˜ˆ์™ธ๋Š” ๊ตฌ์ฒด์ ์œผ๋กœ ์‚ฌ์šฉํ•˜์ž. + +> ์˜ˆ์™ธ๋Š” **์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋กœ์ง์„ ์ œ์–ดํ•˜๋Š” ์šฉ๋„๊ฐ€ ์•„๋‹ˆ๋ผ, ์‹คํŒจ๋ฅผ ์ฒ˜๋ฆฌํ•  ๋•Œ๋งŒ ์‚ฌ์šฉ**ํ•ด์•ผ ํ•œ๋‹ค. ๋˜ํ•œ ์–ธ์–ด์— ๋‚ด์žฅ๋œ ์˜ˆ์™ธ ํƒ€์ž…์ด ๋ฌธ์ œ๋ฅผ ๊ตฌ์ฒด์ ์œผ๋กœ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ์ž„์˜๋กœ ์˜ˆ์™ธ๋Š” ์ •ํ•˜์ง€ ์•Š๋Š”๋‹ค. + +#### ๐Ÿ‹ ๊ฐ€๋Šฅํ•˜๋ฉด ์–ธ์–ด์— ๋‚ด์žฅ๋œ ์˜ˆ์™ธ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ํฌ๊ด„์ ์ธ ์˜๋ฏธ๋ฅผ ๋‹ด๋Š” ์˜ˆ์™ธ๋Š” ๋งŒ๋“ค์ง€ ์•Š๊ฒŒ ํ•˜์ž. + +1. ๋„ˆ๋ฌด ํฌ๊ด„์ ์œผ๋ฉด ์–ด๋–ค ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋Š”์ง€ ํŒŒ์•…ํ•  ์ˆ˜ ์—†์–ด ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๊ฐ€ ์–ด๋ ค์›Œ ์ง„๋‹ค. +2. ๋ฐœ์ƒํ•œ ์—๋Ÿฌ์— ๋Œ€ํ•ด ์ •ํ™•ํ•œ ์ •๋ณด๋ฅผ ์•Œ์ง€ ๋ชปํ•˜๋ฉด ๊ฐœ๋ฐœ์ž๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‹คํ–‰์ด ์ค‘๋‹จ๋˜๊ฒŒ ํ•  ์ˆ˜ ๋ฐ–์— ์—†์œผ๋ฉฐ, ์ด๋Š” ์‹ฌ๊ฐํ•œ ๋ฌธ์ œ + +#### ๐Ÿ‹ ์˜ˆ์™ธ๋ฅผ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋กœ์ง์œผ๋กœ ์‚ฌ์šฉํ•ด์„œ๋Š” ์•ˆ๋œ๋‹ค. + +1. ์šฐ๋ฆฌ๋Š” ์ฝ”๋“œ๊ฐ€ ์˜ˆ์ƒ์น˜ ๋ชปํ•œ ๋™์ž‘์„ ํ•˜์ง€ ์•Š๊ธธ ์›ํ•  ๋ฟ์ด์ง€ ์ฝ”๋“œ ์Šค์Šค๋กœ ๋˜‘๋˜‘ํ•ด์ง€๊ธธ ์›ํ•˜๋Š” ๊ฒŒ ์•„๋‹ˆ๋‹ค. +2. ์˜ˆ์™ธ๋ฅผ ์ด์šฉํ•ด์„œ ๋ฉ”์†Œ๋“œ๋ฅผ ๋ถ„๊ธฐํ•˜๋ฉด ์ดํ•ด๊ฐ€ ์–ด๋ ค์šธ ๋ฟ ๋”๋Ÿฌ ๋””๋ฒ„๊น…๋„ ์–ด๋ ค์›Œ์ง„๋‹ค. +3. ์ž˜๋ชป๋œ ์˜ˆ์ œ + +* ์„ค๋ช…: ์œ„์˜ ์ฝ”๋“œ๋Š” OrderProcessingException์„ ์ƒํƒœ ๊ฒ€์ฆ์šฉ์œผ๋กœ ์‚ฌ์šฉํ•˜์—ฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋กœ์ง์„ ์ œ์–ดํ•˜๋ ค๊ณ  ํ•œ๋‹ค. +* ์ด๋กœ ์ธํ•ด ์˜ˆ์™ธ๊ฐ€ ์ •์ƒ์ ์ธ ํ๋ฆ„ ์ œ์–ด์— ์‚ฌ์šฉ๋˜๋ฉฐ, ์ฝ”๋“œ์˜ ๊ฐ€๋…์„ฑ๊ณผ ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ์–ด๋ ค์›Œ์งˆ ์ˆ˜ ์žˆ๋‹ค. +* ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋กœ์ง์€ ์˜ˆ์™ธ๊ฐ€ ์•„๋‹Œ ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์œผ๋กœ ์ƒํƒœ ๊ฒ€์ฆ ๋ฐ ์ฒ˜๋ฆฌ๋ฅผ ํ•ด์•ผ ํ•œ๋‹ค. ์•„๋ž˜ ์˜ˆ์ œ์˜ ๊ฒฝ์šฐ `if`๋ฌธ ๋“ฑ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ช…์‹œ์ ์ธ ์ƒํƒœ ๊ฒ€์ฆ๊ณผ ์ฒ˜๋ฆฌ๋ฅผ ๊ตฌํ˜„ํ•ด์•ผ ํ•œ๋‹ค. + +```java +public class IncorrectExceptionUsage { + + // ์ž˜๋ชป๋œ ์˜ˆ์™ธ ์‚ฌ์šฉ: ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋กœ์ง์œผ๋กœ ์˜ˆ์™ธ ํ™œ์šฉ + public static void processOrder(int orderStatus) throws OrderProcessingException { + try { + if (orderStatus == 0) { + throw new OrderProcessingException("Invalid order status"); // ์˜ˆ์™ธ๋ฅผ ์ƒํƒœ ๊ฒ€์ฆ์— ์‚ฌ์šฉ + } + + // ์ฃผ๋ฌธ ์ฒ˜๋ฆฌ ๋กœ์ง + // ... + + } catch (OrderProcessingException ex) { + // ์˜ˆ์™ธ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ์ฝ”๋“œ + logError(ex.getMessage()); + } + } + + public static void main(String[] args) { + int orderStatus = 0; + try { + processOrder(orderStatus); + } catch (OrderProcessingException ex) { + logError("Failed to process order: " + ex.getMessage()); + } + } + + private static void logError(String message) { + System.err.println("Error: " + message); + } +} + + +``` + +### 8. ์˜ˆ์™ธ๋Š” ์ผ์ฐ ๋˜์ง€๊ณ  ์ตœ๋Œ€ํ•œ ๋Šฆ๊ฒŒ ์ฒ˜๋ฆฌํ•˜์ž. + +#### ๐Ÿ‹ ์ผ์ฐ ๋˜์ง„๋‹ค๋ผ๋Š” ์˜๋ฏธ + +> ๊ฐœ๋ฐœ์ž๊ฐ€ ๊ด€๋ จ ์ฝ”๋“œ๋ฅผ ์‹ ์†ํ•˜๊ฒŒ ์ฐพ์„ ์ˆ˜ ์žˆ๋„๋ก ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•œ ์ง€์ ์œผ๋กœ๋ถ€ํ„ฐ ์ตœ๋Œ€ํ•œ ๊ฐ€๊นŒ์šด ์ง€์ ์—์„œ ์˜ˆ์™ธ๋ฅผ ๋˜์ง„๋‹ค๋Š” ๋œป์œผ๋กœ ์ค‘๊ฐ„์— ์œ„์น˜ํ•œ ๊ณ„์ธต์€ ์–ด์„คํ”„๊ฒŒ ์—๋Ÿฌ๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ธฐ ๋ณด๋‹ค๋Š” ์˜ˆ์™ธ๋ฅผ ์ƒ์œ„๋กœ ๊ณ„์ธตํ•˜๋Š” ๊ฒŒ ๋งž๋‹ค. + +1. ์‹ค์ œ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•œ ์ง€์ ์—์„œ ๋ฉ€๋ฆฌ ๋–จ์–ด์ง„ ๊ณณ์œผ๋กœ ํ•˜๋ฉด ์–ด๋””์„œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋Š”์ง€ ์•Œ๊ธฐ ์–ด๋ ค์›Œ์ง„๋‹ค. +2. ์ง„์งœ ๋ฌธ์ œ๋Š” ๋‹ค๋ฅธ๊ณณ์—์„œ ๋ฐœ์ƒํ–ˆ๋‹ค๋Š” ์‚ฌ์‹ค์„ ์•Œ์•„๋‚ด์•ผ๋งŒ ๋ฒ„๊ทธ๋ฅผ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. + +#### ๐Ÿ‹ ์˜ˆ์™ธ๋ฅผ ๋Šฆ๊ฒŒ ์žก๋Š”๋‹ค๋ผ๋Š” ์˜๋ฏธ + +> ์˜ˆ์™ธ๋ฅผ ์ฒ˜๋ฆฌํ•  ์ ์ ˆํ•œ ์œ„์น˜์— ๋„์ฐฉํ•  ๋•Œ๊นŒ์ง€ ๊ณ„์† ํ˜ธ์ถœ ์Šคํƒ์„ ํ†ตํ•ด ์ „ํŒŒ์‹œํ‚จ๋‹ค๋Š” ๋œป์ด๋‹ค. + +1. ์˜ˆ๋ฅผ ๋“ค์–ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๋ฐ์ดํ„ฐ๋ฅผ ๊ธฐ๋กํ•˜๋ ค๋Š”๋ฐ ๋‚จ์€ ๋””์Šคํฌ ๊ณต๊ฐ„์ด ์—†๋Š” ๊ฒฝ์šฐ ์ƒ๊ฐํ•ด๋ณด๊ธฐ + +* ๋Œ€์ฒ˜๋ฐฉ์•ˆ + + * ์‹คํ–‰์„ ์ค‘๋‹จํ•˜๊ณ  ์žฌ์‹œ๋„ + * ๋น„๋™๊ธฐ์ ์œผ๋กœ ์žฌ์‹œ๋„ํ•˜๋Š” ๋ฐฉ๋ฒ• + * ๋‹ค๋ฅธ ๋””์Šคํฌ์— ๊ธฐ๋ก + * ์‚ฌ์šฉ์ž์—๊ฒŒ ๊ฒฝ๊ณ  ๋ฉ”์„ธ์ง€๋ฅผ ๋ณด๋‚ผ ์ˆ˜๋„ ์žˆ๋‹ค. + * ํฌ๋ž˜์‹œ๊ฐ€ ๋ฐœ์ƒํ•˜๋„๋ก ๋†”๋‘๋Š” ๊ฒƒ๋„ ํ•˜๋‚˜์˜ ๋ฐฉ๋ฒ• + + > `ํฌ๋ž˜์‹œ`๋ž€ ์ปดํ“จํ„ฐ ํ”„๋กœ๊ทธ๋žจ์ด๋‚˜ ์‹œ์Šคํ…œ์ด ์˜ˆ๊ธฐ์น˜ ์•Š๊ฒŒ ์ค‘๋‹จ๋˜๊ฑฐ๋‚˜ ๋™์ž‘ํ•˜์ง€ ์•Š๋Š” ํ˜„์ƒ์„ ์˜๋ฏธ ๋‹ค์‹œ ๋งํ•ด, ํ”„๋กœ๊ทธ๋žจ์ด๋‚˜ ์‹œ์Šคํ…œ์ด ์˜ค๋ฅ˜๋กœ ์ธํ•ด ์ •์ƒ์ ์œผ๋กœ ๋™์ž‘ํ•˜์ง€ ์•Š๊ฑฐ๋‚˜ ๋ฉˆ์ถ”๋Š” ์ƒํƒœ + +2. ์ ์ ˆํ•œ ์กฐ์น˜๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ๋”ฐ๋ผ ๋‹ค๋ฅด๋‹ค. ๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค์˜ ๋กœ๊ทธ ์„ ํ–‰ ๊ธฐ์ž…์€ ๋ฐ˜๋“œ์‹œ ๊ธฐ๋ก๋ผ์•ผ ํ•˜๋Š” ๋ฐ˜๋ฉด ์›Œ๋“œํ”„๋กœ์„ธ์„œ์˜ ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์ €์žฅ ๊ธฐ๋Šฅ์€ ์กฐ๊ธˆ ๋Šฆ๊ฒŒ ์‹คํ–‰๋˜๋„ ๋ฌด๋ฐฉํ•˜๋‹ค. + +#### ๐Ÿ‹ ์ตœ์•…์˜ ๊ฒฝ์šฐ + +* ์ด ๊ฒฝ์šฐ ์˜ˆ์™ธ๋Š” ๋กœ๊ทธ์— ๊ธฐ๋ก๋˜์ง€๋„ ์•Š๊ณ  ๋‹ค์‹œ ๋˜์ ธ์ง€์ง€๋„ ์•Š์œผ๋ฉฐ ๋‹ค๋ฅธ ์–ด๋–ค ์กฐ์น˜๋„ ์ทจํ•ด์ง€์ง€ ์•Š์•˜๋‹ค. +* ์žฅ์• ๊ฐ€ ๋ฐœ์ƒํ•ด๋„ ์•„๋ฌด๋„ ์•Œ ์ˆ˜ ์—†์œผ๋ฉฐ, ์ตœ์•…์˜ ๊ฒฐ๊ณผ ์ดˆ๋ž˜ + +```java +try{ +//.. +} +catch(Exception e){ +//์—๋Ÿฌ๋ฅผ ์ฒ˜๋ฆฌํ•  ๋ฐฉ๋ฒ•์ด ์—†์œผ๋ฏ€๋กœ ๋ฌด์‹œ +} +``` + +## ๋Š๋‚Œ์  + +> ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๋ฅผ ์–ด๋””์„œ๋ถ€ํ„ฐ ์–ด๋””๊นŒ์ง€ ํ•ด์•ผํ•˜๋Š” ๊ฒƒ์„ ์ด ์žฅ์—์„œ ํ•ต์‹ฌ์„ ์ง‘์–ด์ฃผ๋Š” ๊ฒƒ ๊ฐ™๋‹ค. ์ด ์žฅ์€ ๋„ˆ๋ฌด ๊ธธ์–ด์ ธ์„œ ์—ฌ๋Ÿฌ ๊ฐœ๋กœ ๋‚˜๋ˆ ์„œ ์ •๋ฆฌํ•  ์˜ˆ์ •์ด๋ฉฐ, **์ž๋ฐ”์™€ ํŒŒ์ด์ฌ์˜ ๋‚ด์žฅ ์˜ˆ์™ธ์ฒ˜๋ฆฌ**์— ๋Œ€ํ•ด ํ•œ ๋ฒˆ ์ •๋ฆฌํ•ด์•ผ ๊ฒ ๋‹ค. diff --git "a/developLog/book/onboarding/4/_ \355\225\204\353\217\205 \352\260\234\353\260\234\354\236\220 \354\230\250\353\263\264\353\224\251 \352\260\200\354\235\264\353\223\234 4\354\236\245 __2__.md" "b/developLog/book/onboarding/4/_ \355\225\204\353\217\205 \352\260\234\353\260\234\354\236\220 \354\230\250\353\263\264\353\224\251 \352\260\200\354\235\264\353\223\234 4\354\236\245 __2__.md" new file mode 100644 index 0000000..ff6cf84 --- /dev/null +++ "b/developLog/book/onboarding/4/_ \355\225\204\353\217\205 \352\260\234\353\260\234\354\236\220 \354\230\250\353\263\264\353\224\251 \352\260\200\354\235\264\353\223\234 4\354\236\245 __2__.md" @@ -0,0 +1,515 @@ +# ํ•„๋… ๊ฐœ๋ฐœ์ž ์˜จ๋ณด๋”ฉ ๊ฐ€์ด๋“œ 4์žฅ -(2) + +![](https://velog.velcdn.com/images/prettylee620/post/b9ac94e2-3069-475e-98c6-9bcbc19cdce6/image.png) + +> ์ด ๊ธ€์€ ์ฑ…์„ ์ฝ๊ณ  ๊ณต๋ถ€ํ•˜๊ณ  ๊ธฐ์–ตํ•˜๊ธฐ ์œ„ํ•œ ๊ธฐ๋ก์šฉ์œผ๋กœ ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธฐ๋ฉด ์‚ญ์ œํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. + +## ์šด์˜ ํ™˜๊ฒฝ์„ ๊ณ ๋ คํ•œ ์ฝ”๋“œ ์ž‘์„ฑ + +### 1. ์žฌ์‹œ๋„๋Š” ํ˜„๋ช…ํ•˜๊ฒŒ + +#### ๐Ÿˆ ์—๋Ÿฌ๋ฅผ ์ ์ ˆํ•˜๊ฒŒ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ• ์ฒซ ๋ฒˆ์งธ ์žฌ์‹œ๋„ + +> ๋‹จ์ˆœํžˆ ๋‹ค์‹œ ์‹œ๋„ํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ์ž‘์—…์„ ๋‹ค์‹œ ์‹œ๋„ํ•œ๋‹ค๋Š” ๊ฒƒ์€ ์‰ฌ์šด ์ผ์ฒ˜๋Ÿผ ๋ณด์ผ ์ˆ˜ ์žˆ๋‹ค. ํ•˜์ง€๋งŒ ํ˜„์‹ค์—์„œ ์žฌ์‹œ๋„์˜ ์‹œ๊ธฐ์™€ ๋นˆ๋„๋ฅผ ํŒ๋‹จํ•˜๋ ค๋ฉด ์•ฝ๊ฐ„์˜ ๋…ธํ•˜์šฐ๊ฐ€ ํ•„์š”ํ•˜๋‹ค. + +* ์—ฌ๋Ÿฌ ์ฐจ๋ก€ ์žฌ์‹œ๋„ํ•˜๋ ค๋Š” ์‹œ๋„๋Š” ์ฃผ๋กœ ์›๊ฒฉ ์‹œ์Šคํ…œ์— ํ˜ธ์ถœํ•  ๊ฒฝ์šฐ ๋‚˜ํƒ€๋‚œ๋‹ค. + +#### ๐Ÿˆ ๋‹จ์ˆœํžˆ ์˜ˆ์™ธ๋ฅผ ์žก์•„์„œ ๊ทธ ์ฆ‰์‹œ ์ž‘์—… ์žฌ์‹œ๋„ + +* ๋ฌธ์ œ๋Š” ์žฌ์‹œ๋„ ํ›„ ๋˜ ์‹คํŒจํ•˜๋ฉด ์†๋„๋งŒ ๋Š๋ ค์ง€๊ณ  ์‹œ์Šคํ…œ ๋ณต๊ตฌํ•˜๊ธฐ๋Š” ์ ์  ์–ด๋ ค์›Œ์ง„๋‹ค. + +#### ๐Ÿˆ ๋ฐฑ์˜คํ”„ ์ „๋žต ์‚ฌ์šฉํ•˜๊ธฐ + +> ๋ฐฑ์˜คํ”„๋ž€ **๋น„์„ ํ˜•์œผ๋กœ ๋Œ€๊ธฐ ์‹œ๊ฐ„์„ ๋Š˜๋ฆฌ๋Š” ๋ฐฉ๋ฒ•**์œผ๋กœ ์ด ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•  ๋•Œ ๋ฐฑ์˜คํ”„ ์‹œ๊ฐ„์˜ ์ƒํ•œ์„ ์„ ์ •ํ•ด์„œ ๋Œ€๊ธฐ ์‹œ๊ฐ„์ด ๋„ˆ๋ฌด ๊ธธ์–ด์ง€์ง€ ์•Š๊ฒŒ ํ•˜์ž. + +#### ๐Ÿ““ ์ž ๊น ๋ฐฑ์˜คํ”„์— ๋Œ€ํ•ด์„œ ์ •๋ฆฌํ•˜๊ณ  ๊ฐ€์ž\[chat gpt ๋‹ต๋ณ€ ์ฐธ๊ณ ] + +> ๋ฐฑ์˜คํ”„ ์ „๋žต(Backoff Strategy)์€ ์ฃผ๋กœ ์ปดํ“จํ„ฐ ๋„คํŠธ์›Œํฌ์—์„œ ์‚ฌ์šฉ๋˜๋Š” ์ „๋žต ์ค‘ ํ•˜๋‚˜๋กœ, ์ผ์‹œ์ ์ธ ๋ฌธ์ œ ๋˜๋Š” ํ˜ผ์žก ์ƒํ™ฉ์ด ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ์–ด๋–ป๊ฒŒ ๋Œ€์‘ํ• ์ง€ ๊ฒฐ์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•๋ก ์œผ๋กœ ์ด ์ „๋žต์€ ์ฃผ๋กœ ์žฌ์‹œ๋„(retry) ๋ฉ”์ปค๋‹ˆ์ฆ˜๊ณผ ๊ด€๋ จ์ด ์žˆ๋‹ค. + +**๋™์ž‘ ๊ณผ์ •** + +1. ์ผ์‹œ์  ๋ฌธ์ œ ๋ฐœ์ƒ: ๋ฐ์ดํ„ฐ ํŒจํ‚ท ์ „์†ก์ด ์‹คํŒจํ•˜๊ฑฐ๋‚˜ ์‘๋‹ต์ด ์—†๋Š” ๋“ฑ์˜ ์ผ์‹œ์ ์ธ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. +2. ์žฌ์‹œ๋„ ๊ฒฐ์ •: ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ๋ฐ”๋กœ ๋‹ค์Œ ์‹œ๋„๋ฅผ ํ•˜์ง€ ์•Š๊ณ , ์ž ์‹œ ๊ธฐ๋‹ค๋ฆฐ ํ›„์— ๋‹ค์‹œ ์‹œ๋„ํ• ์ง€๋ฅผ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค. +3. ๊ธฐ๋‹ค๋ฆผ(๋ฐฑ์˜คํ”„) + +* ์žฌ์‹œ๋„๋ฅผ ์œ„ํ•ด ๊ธฐ๋‹ค๋ฆฌ๋Š” ์‹œ๊ฐ„์„ ์ •ํ•ฉ๋‹ˆ๋‹ค. +* ์ด๋•Œ ๊ธฐ๋‹ค๋ฆฌ๋Š” ์‹œ๊ฐ„์€ ์—ฌ๋Ÿฌ ๋ฐฉ์‹์œผ๋กœ ๊ฒฐ์ •๋  ์ˆ˜ ์žˆ๋Š”๋ฐ, ์ผ๋ฐ˜์ ์œผ๋กœ ์ง€์ˆ˜์ ์ธ ๋ฐฉ์‹์ด ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. - ์ฆ‰, ์ฒ˜์Œ์—๋Š” ์งง์€ ์‹œ๊ฐ„ ๋™์•ˆ ๊ธฐ๋‹ค๋ฆฌ๋‹ค๊ฐ€, ์‹คํŒจํ•  ๊ฒฝ์šฐ ์ ์ฐจ ๋” ๊ธด ์‹œ๊ฐ„์„ ๊ธฐ๋‹ค๋ฆฌ๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค. - ์ด๋กœ์จ ๋„คํŠธ์›Œํฌ ํ˜ผ์žก์„ ํ”ผํ•˜๊ณ , ๋ฌธ์ œ๋ฅผ ์ผ์‹œ์ ์œผ๋กœ ํ•ด๊ฒฐํ•  ๊ธฐํšŒ๋ฅผ ๋Š˜๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. + +4. ์žฌ์‹œ๋„: ์ผ์ • ์‹œ๊ฐ„ ๋™์•ˆ ๊ธฐ๋‹ค๋ฆฐ ํ›„์— ๋‹ค์‹œ ์‹œ๋„ํ•ฉ๋‹ˆ๋‹ค. + +**๋ฐฑ์˜คํ”„ ์ „๋žต์˜ ์žฅ์ ** + +* ๋„คํŠธ์›Œํฌ ํ†ต์‹ ์—์„œ ํŒจํ‚ท ์†์‹ค, ์ง€์—ฐ, ํ˜ผ์žก ๋“ฑ์˜ ๋ฌธ์ œ์— ์œ ์šฉํ•˜๊ฒŒ ์ ์šฉ +* ์˜ˆ๋ฅผ ๋“ค์–ด, ๋ฐ์ดํ„ฐ ์ „์†ก ์ค‘์— ํŒจํ‚ท ์†์‹ค์ด ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ์ฆ‰์‹œ ์žฌ์‹œ๋„ํ•˜์ง€ ์•Š๊ณ , ์ž ์‹œ ๊ธฐ๋‹ค๋ ธ๋‹ค๊ฐ€ ์žฌ์‹œ๋„ํ•จ์œผ๋กœ์จ ์ผ์‹œ์ ์ธ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋Š” ๋ฐ์ดํ„ฐ ์ „์†ก์˜ ์•ˆ์ •์„ฑ๊ณผ ์‹ ๋ขฐ์„ฑ์„ ๋†’์ด๋Š” ๋ฐ์— ๊ธฐ์—ฌ + +**๋ฐฑ์˜คํ”„ ์˜ˆ์‹œ ์ฝ”๋“œ๊ฐ€ ๋ญ๊ฐ€ ์žˆ์–ด?** + +> ๋ฐฑ์˜คํ”„ ์ „๋žต์€ ์ฃผ๋กœ ๋„คํŠธ์›Œํฌ ํ†ต์‹ ์—์„œ ์‚ฌ์šฉ๋˜๋Š” ๊ฐœ๋…์ด๋ฉฐ, ์ฝ”๋“œ๋กœ ๊ตฌํ˜„๋  ๋•Œ๋Š” ๋‹ค์–‘ํ•œ ์ƒํ™ฉ์— ๋งž๊ฒŒ ์ ์šฉ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์•„๋ž˜๋Š” ๊ฐ„๋‹จํ•œ ์˜ˆ์‹œ ์ฝ”๋“œ๋กœ, ์ผ์ • ์‹œ๊ฐ„ ๋™์•ˆ ๊ธฐ๋‹ค๋ฆฐ ํ›„์— ์žฌ์‹œ๋„ํ•˜๋Š” ๊ฐ„๋‹จํ•œ ๋ฐฑ์˜คํ”„ ์ „๋žต์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค. + +์ด ์˜ˆ์‹œ ์ฝ”๋“œ์—์„œ๋Š” sendDataToServer() ํ•จ์ˆ˜๊ฐ€ ๋ฐ์ดํ„ฐ ์ „์†ก์„ ์‹œ๋ฎฌ๋ ˆ์ด์…˜ํ•˜๋ฉฐ, ๋žœ๋คํ•œ ์„ฑ๊ณต๋ฅ ๋กœ ๋ฐ์ดํ„ฐ ์ „์†ก์˜ ์„ฑ๊ณต ์—ฌ๋ถ€๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ ์ „์†ก์ด ์‹คํŒจํ•œ ๊ฒฝ์šฐ ๋ฐฑ์˜คํ”„ ์ „๋žต์„ ์ ์šฉํ•˜์—ฌ ์žฌ์‹œ๋„ํ•˜๊ณ , ์ผ์ • ์‹œ๊ฐ„ ๋™์•ˆ ๊ธฐ๋‹ค๋ฆฐ ํ›„์— ๋‹ค์‹œ ์‹œ๋„ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ์žฌ์‹œ๋„์™€ ๊ธฐ๋‹ค๋ฆผ์„ ๋ฐ˜๋ณตํ•˜๋ฉฐ ๋ฐ์ดํ„ฐ ์ „์†ก์„ ์‹œ๋„ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. + +```java +import java.util.Random; + +public class BackoffExample { + + public static void main(String[] args) { + int maxRetries = 3; + int retryDelay = 1000; // 1000 milliseconds = 1 second + int currentRetry = 0; + + while (currentRetry < maxRetries) { + boolean success = sendDataToServer(); + + if (success) { + System.out.println("Data sent successfully!"); + break; + } else { + System.out.println("Data sending failed. Retrying..."); + currentRetry++; + + if (currentRetry < maxRetries) { + System.out.println("Waiting before retrying..."); + try { + Thread.sleep(retryDelay); // Wait before retrying + } catch (InterruptedException e) { + e.printStackTrace(); + } + } else { + System.out.println("Max retries reached. Giving up."); + } + } + } + } + + public static boolean sendDataToServer() { + // Simulate data sending with a random success rate + Random random = new Random(); + double successRate = 0.7; // Simulate 70% success rate + return random.nextDouble() < successRate; + } +} +``` + +#### ๐Ÿˆ ์ฒœ๋‘ฅ๋–ผ ํ˜„์ƒ์„ ๋Œ€๋น„ํ•˜์—ฌ ๋ฐฑ์˜คํ”„ ์ „๋žต์— ์ง€ํ„ฐ๋ฅผ ์ถ”๊ฐ€ํ•˜์ž. + +**์ง€ํ„ฐ๋ž€** + +> ์ž„์˜์˜ ์ง€์—ฐ์‹œ๊ฐ„, ์‹œ๊ฐ„์˜ ๋ถˆ๊ทœ์น™ํ•œ ๋ณ€๋™์ด๋‚˜ ๋ถˆ๊ทœ์น™ํ•œ ๊ฐ„๊ฒฉ์„ ๋‚˜ํƒ€๋‚ด๋Š” ์šฉ์–ด๋กœ ์ฃผ๋กœ ๋„คํŠธ์›Œํฌ๋‚˜ ํƒ€์ด๋ฐ๊ณผ ๊ด€๋ จ๋œ ์ƒํ™ฉ์—์„œ ์‚ฌ์šฉ๋œ๋‹ค. + +> ์ฒœ๋‘ฅ๋–ผ ํ˜„์ƒ์œผ๋กœ ๋ณต๊ตฌ ์ค‘์ด๋˜ ์„œ๋น„์Šค ๋‹ค์šด์„ ๋ง‰๊ธฐ ์œ„ํ•ด ์ง€ํ„ฐ๋ฅผ ์ถ”๊ฐ€ํ•˜๋ฉด ํด๋ผ์ด์–ธํŠธ๋“ค์€ ํŠน์ • ๋ฒ”์œ„์—์„œ ์ž„์˜์˜ ๊ฐ’์„ ๋ฐฑ์˜คํ”„ ์‹œ๊ฐ„์— ๋”ํ•œ๋‹ค. + +* ์ง€ํ„ฐ๋Š” ์˜ˆ์ƒ๋œ ์‹œ๊ฐ„ ๊ฐ„๊ฒฉ๊ณผ ์‹ค์ œ ๋ฐœ์ƒํ•œ ์‹œ๊ฐ„ ๊ฐ„๊ฒฉ ์‚ฌ์ด์˜ ์ฐจ์ด๋ฅผ ๋‚˜ํƒ€๋‚ด๋ฉฐ, ์ฃผ๋กœ ๋„คํŠธ์›Œํฌ ํŒจํ‚ท์˜ ์ „์†ก ๊ฐ„๊ฒฉ์ด๋‚˜ ๋””์ง€ํ„ธ ์‹ ํ˜ธ์˜ ํƒ€์ด๋ฐ ๋“ฑ์—์„œ ๋ฐœ์ƒํ•œ๋‹ค. +* ์˜ˆ๋ฅผ ๋“ค์–ด, ์Œ์„ฑ ๋˜๋Š” ์˜์ƒ ๋ฐ์ดํ„ฐ๋ฅผ ์‹ค์‹œ๊ฐ„์œผ๋กœ ์ „์†กํ•˜๋Š” ๊ฒฝ์šฐ, ์ผ์ •ํ•œ ๊ฐ„๊ฒฉ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•ด์•ผ ํ•œ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋„คํŠธ์›Œํฌ ์ง€์—ฐ์ด๋‚˜ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ ์†๋„ ๋“ฑ์œผ๋กœ ์ธํ•ด ์‹ค์ œ ์ „์†ก ๊ฐ„๊ฒฉ์ด ์˜ˆ์ƒ๊ณผ ๋‹ค๋ฅผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ **์‹œ๊ฐ„์ ์ธ ๋ถˆ๊ทœ์น™์„ฑ**์„ ์ง€ํ„ฐ๋ผ๊ณ  ํ•œ๋‹ค. +* ์ง€ํ„ฐ๋Š” ํ†ต์‹  ์‹œ์Šคํ…œ์—์„œ ์ค‘์š”ํ•œ ๊ฐœ๋…์œผ๋กœ, ์ง€ํ„ฐ๊ฐ€ ํฌ๋ฉด ์‹ ํ˜ธ์˜ ๋„์ฐฉ ์‹œ๊ฐ„์ด ๋ถˆ์•ˆ์ •ํ•˜๊ฒŒ ๋˜์–ด ์Œ์„ฑ์ด๋‚˜ ์˜์ƒ ๋ฐ์ดํ„ฐ์—์„œ ์†Œ๋ฆฌ๋‚˜ ์˜์ƒ์ด ๋Š๊ธฐ๊ฑฐ๋‚˜ ๋ถˆ์•ˆ์ •ํ•ด์งˆ ์ˆ˜ ์žˆ๋‹ค. +* ๋”ฐ๋ผ์„œ ํ†ต์‹  ์‹œ์Šคํ…œ ์„ค๊ณ„๋‚˜ ๊ด€๋ฆฌ์—์„œ ์ง€ํ„ฐ๋ฅผ ์ตœ์†Œํ™”ํ•˜์—ฌ ์‹ ํ˜ธ์˜ ์•ˆ์ •์„ฑ๊ณผ ํ’ˆ์งˆ์„ ์œ ์ง€ํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š” + +**์ฒœ๋‘ฅ๋–ผ ํ˜„์ƒ์ด๋ž€** + +> ๋„คํŠธ์›Œํฌ ์„œ๋ฒ„์— ์ผ์‹œ์ ์ธ ๋ฌธ์ œ๊ฐ€ ์ƒ๊ฒจ ๋ชจ๋“  ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋™์‹œ์ ์œผ๋กœ ์žฅ์• ๋ฅผ ๊ฒช๋Š” ์ƒํ™ฉ์—์„œ ๋ชจ๋“  ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋™์ผํ•œ ๋ฐฑ์˜คํ”„ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด ๋ชจ๋‘๊ฐ€ ๋™์‹œ์— ์š”์ฒญ์„ ๋‹ค์‹œ ๋ณด๋‚ด๋Š” ํ˜„์ƒ + +#### ๐Ÿ““ ๋ฐฑ์˜คํ”„ ์ „๋žต๊ณผ ์ง€ํ„ฐ๋ฅผ ํ•จ๊ป˜ ์ ์šฉํ•œ ๋„คํŠธ์›Œํฌ ํ†ต์‹  ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ์ƒ๊ฐ + +1. ๊ฐ€์ • + +* A์™€ B๋ผ๋Š” ๋‘ ๋Œ€์˜ ์ปดํ“จํ„ฐ๊ฐ€ ๋„คํŠธ์›Œํฌ๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ ๋ฐ›๋Š” ์ƒํ™ฉ์„ ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค. +* A๊ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ B์—๊ฒŒ ๋ณด๋‚ด๋ ค๊ณ  ํ•  ๋•Œ, **๋„คํŠธ์›Œํฌ ์ง€์—ฐ๊ณผ ํŒจํ‚ท ์†์‹ค์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.** + +2. ๋ฐฑ์˜คํ”„ ์ „๋žต + +* A๊ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๋‚ผ ๋•Œ ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•˜๋ฉด **์ผ์ • ์‹œ๊ฐ„(๋ฐฑ์˜คํ”„ ํƒ€์ž„) ๋™์•ˆ ๊ธฐ๋‹ค๋ฆฐ ํ›„ ์žฌ์ „์†ก์„ ์‹œ๋„**ํ•˜๋Š” ์ „๋žต์ž…๋‹ˆ๋‹ค. +* ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•˜๋ฉด ๋ฐฑ์˜คํ”„ ํƒ€์ž„์„ ์ง€์ •ํ•˜๊ณ  ๊ทธ ์‹œ๊ฐ„ ๋™์•ˆ ๊ธฐ๋‹ค๋ฆฐ ํ›„ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค์‹œ ์ „์†กํ•ฉ๋‹ˆ๋‹ค. + +3. ์ง€ํ„ฐ ์ถ”๊ฐ€ + +* ์ง€ํ„ฐ๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ ๋ฐฑ์˜คํ”„ ํƒ€์ž„์— ๋ถˆ๊ทœ์น™์„ฑ์„ ๋ถ€์—ฌํ•ฉ๋‹ˆ๋‹ค. ์ด๋กœ ์ธํ•ด ๋™์ผํ•œ ๋ฐฑ์˜คํ”„ ํƒ€์ž„์„ ์‚ฌ์šฉํ•˜๋Š” ๋ชจ๋“  ์žฌ์ „์†ก์ด ๋™์‹œ์— ๋ฐœ์ƒํ•˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•˜๊ณ  ๋„คํŠธ์›Œํฌ ์ƒํ™ฉ์„ ๋” ํ˜ผ์žกํ•˜์ง€ ์•Š๊ฒŒ ๋งŒ๋“ญ๋‹ˆ๋‹ค. + +4. ์˜ˆ์‹œ + +> ์•„๋ž˜๋Š” ๋ฐฑ์˜คํ”„ ์ „๋žต๊ณผ ์ง€ํ„ฐ๋ฅผ ํ•จ๊ป˜ ์ ์šฉํ•œ ์˜ˆ์‹œ ์ฝ”๋“œ. ์ฝ”๋“œ๋Š” ๋‹จ์ˆœํ•œ ์˜ˆ์‹œ์ด๋ฏ€๋กœ ์‹ค์ œ ์ƒํ™ฉ์— ๋งž๊ฒŒ ์กฐ์ •์ด ํ•„์š”ํ•  ์ˆ˜ ์žˆ๋‹ค. + +```java +import java.util.Random; + +public class BackoffWithJitterExample { + public static void main(String[] args) { + int backoffTime = 1000; // ์ดˆ๊ธฐ ๋ฐฑ์˜คํ”„ ํƒ€์ž„ (1์ดˆ) + Random random = new Random(); + + for (int attempt = 1; attempt <= 5; attempt++) { + System.out.println("Attempt #" + attempt); + + // Simulate network collision + if (random.nextInt(100) < 50) { + System.out.println("Collision occurred"); + + // Apply backoff with jitter + int jitter = random.nextInt(backoffTime); + int waitTime = backoffTime + jitter; + + System.out.println("Applying backoff with jitter: " + waitTime + " ms"); + try { + Thread.sleep(waitTime); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } else { + System.out.println("Data sent successfully"); + break; + } + + // Exponential backoff: double the backoff time for next attempt + backoffTime *= 2; + } + } +} + +``` + +#### ๐Ÿˆ ์‹คํŒจํ•œ ์š”์ฒญ์— ๋ฌดํ„ฑ๋Œ€๊ณ  ์žฌ์‹œ๋„ ํ•˜์ง€๋Š” ๋ง์ž + +> ์„ค๊ณ„ ์‹œ์ ์—์„œ ์ฒ˜๋ฆฌ๋ฅผ ์—ผ๋‘์— ๋‘์ง€ ์•Š์€ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ์ฐจ๋ผ๋ฆฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— **ํฌ๋ž˜์‹œ**ํ•˜๋„๋ก ๋†”๋‘๋Š” ํŽธ์ด ๋‚ซ๋‹ค. ์ด๋Ÿฐ ๋ฐฉ๋ฒ•์„ ๋นจ๋ฆฌ ์‹คํŒจํ•˜๊ธฐ๋ผ๊ณ  ํ•œ๋‹ค. + +**์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํฌ๋ž˜์‹œ** + +* ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด "ํฌ๋ž˜์‹œ"ํ•œ๋‹ค๋Š” ๊ฒƒ์€ ํ•ด๋‹น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์˜ˆ์ƒ์น˜ ๋ชปํ•œ ์˜ค๋ฅ˜ ๋˜๋Š” ์˜ˆ์™ธ ์ƒํ™ฉ์œผ๋กœ ์ธํ•ด ์ •์ƒ์ ์œผ๋กœ ์ž‘๋™ํ•˜์ง€ ์•Š๊ณ  ๋น„์ •์ƒ์ ์œผ๋กœ ์ข…๋ฃŒ๋˜๋Š” ์ƒํ™ฉ +* ๋นจ๋ฆฌ ์‹คํŒจํ•˜๋ฉด ์‚ฌ๋žŒ์ด ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๋Œ€์ฒ˜ํ•  ๋ฐฉ๋ฒ•์„ ์ฐพ์„ ์ˆ˜ ์žˆ๋‹ค. +* ์‹คํŒจ ์ƒํ™ฉ์„ ์ „ํŒŒํ•˜๋Š” ๋ฐฉ์•ˆ์„ ์ƒ๊ฐํ•ด์•ผ ํ•˜๋ฉฐ, ์‰ฝ๊ฒŒ ๋””๋ฒ„๊น…ํ•  ์ˆ˜ ์žˆ๋„๋ก **์—๋Ÿฌ ๊ด€๋ จ ์ •๋ณด๋Š” ๋ฐ˜๋“œ์‹œ ํ™•์ธ์ด ๊ฐ€๋Šฅํ•ด์•ผ ํ•œ๋‹ค.** + +### 2. ์žฌ์‹œ๋„ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฐ€์ž ์ข‹์€ ๋ฐฉ๋ฒ• : ์‹œ์Šคํ…œ์— ๋ฉฑ๋“ฑ์„ฑ์„ ๋ถ€์—ฌํ•˜์ž + +#### ๐Ÿˆ ๋ฉฑ๋“ฑ์„ฑ ์žˆ๋Š” ์‹œ์Šคํ…œ ๊ตฌํ˜„ + +> ์˜ˆ๋ฅผ ๋“ค์–ด, ์–ด๋–ค ์›น ์„œ๋น„์Šค์˜ ์ฃผ๋ฌธ ์ƒ์„ฑ ๊ธฐ๋Šฅ์„ ๊ฐ€์ •ํ•ด๋ด…์‹œ๋‹ค. ์ด ๊ธฐ๋Šฅ์€ ์ฃผ๋ฌธ์„ ์ƒ์„ฑํ•˜๊ณ  ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ €์žฅํ•˜๋Š” ์ž‘์—…์„ ์ˆ˜ํ–‰ ์ด ๋•Œ ๋ฉฑ๋“ฑ์„ฑ์˜ ์›์น™์„ ์ง€ํ‚ค๋ฉด ์•„๋ž˜์™€ ๊ฐ™์€ ์ƒํ™ฉ์—์„œ๋„ ๋™์ผํ•œ ๊ฒฐ๊ณผ๋ฅผ ๋ณด์žฅํ•ด์•ผ ํ•œ๋‹ค + +**์˜ˆ์‹œ** + +1. ์ฃผ๋ฌธ ์ƒ์„ฑ ์‹œ๋„ 1ํšŒ: ์‚ฌ์šฉ์ž A๊ฐ€ ์ƒํ’ˆ X๋ฅผ ์ฃผ๋ฌธํ•˜๋ ค๊ณ  ํ•จ. ์ฃผ๋ฌธ์ด ์ƒ์„ฑ๋˜์–ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ €์žฅ๋จ. +2. ์ฃผ๋ฌธ ์ƒ์„ฑ ์‹œ๋„ 2ํšŒ: ์‚ฌ์šฉ์ž A๊ฐ€ ๋™์ผํ•œ ์ƒํ’ˆ X๋ฅผ ๋‹ค์‹œ ์ฃผ๋ฌธํ•˜๋ ค๊ณ  ํ•จ. +3. ๋ฉฑ๋“ฑ์„ฑ์„ ์ง€ํ‚จ๋‹ค๋ฉด ์ด ์ž‘์—…์€ ์ด์ „์— ์ฃผ๋ฌธ์ด ์ด๋ฏธ ์ƒ์„ฑ๋˜์—ˆ์Œ์„ ๊ฐ์ง€ํ•˜๊ณ  ๋™์ผํ•œ ์ฃผ๋ฌธ์„ ์ค‘๋ณต ์ƒ์„ฑํ•˜์ง€ ์•Š์•„์•ผ ํ•จ. +4. ์ฃผ๋ฌธ์€ ์ด๋ฏธ ์กด์žฌํ•˜๋ฏ€๋กœ ์ƒˆ๋กœ์šด ์ฃผ๋ฌธ์ด ์ƒ์„ฑ๋˜์ง€ ์•Š์•„์•ผ ํ•จ. +5. ์ด๋ ‡๊ฒŒ ๋ฉฑ๋“ฑ์„ฑ์„ ์ง€ํ‚ค๋Š” ๊ฒƒ์€ ๋ฐ์ดํ„ฐ์˜ ์ผ๊ด€์„ฑ๊ณผ ์ค‘๋ณต ์ƒ์„ฑ์„ ๋ฐฉ์ง€ํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋œ๋‹ค. ์ด์™€ ์œ ์‚ฌํ•˜๊ฒŒ ๋‹ค์–‘ํ•œ ์ž‘์—…์ด๋‚˜ API ํ˜ธ์ถœ์—์„œ ๋ฉฑ๋“ฑ์„ฑ์„ ๊ณ ๋ คํ•˜์—ฌ ์ค‘๋ณต ์ž‘์—…์ด๋‚˜ ๋ฐ์ดํ„ฐ ์ค‘๋ณต์„ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ๋‹ค. + +**๋ฉฑ๋“ฑ์„ฑ์ด๋ž€?** + +> ๋™์ผํ•œ ์ž‘์—…์„ ์—ฌ๋Ÿฌ ๋ฒˆ ์‹คํ–‰ํ•ด๋„ ํ•ญ์ƒ ๊ฐ™์€ ๊ฒฐ๊ณผ๊ฐ€ ์ถœ๋ ฅ๋จ์„ ๋งํ•œ๋‹ค. ๋ชจ๋“  ์ž‘์—…์„ ๋ฉฑ๋“ฑ ์ž‘์—…์œผ๋กœ ๊ตฌํ˜„ํ•˜๋ฉด ์‹œ์Šคํ…œ ์ƒํ˜ธ์ž‘์šฉ์ด ํ›จ์”ฌ ํŽธํ•ด์ง€๋ฉฐ ์—๋Ÿฌ๋„ ํ˜„์ €ํžˆ ์ค„์–ด๋“ ๋‹ค, + +1. ์˜ˆ๋ฅผ ๋“ค์–ด **์–ด๋–ค ๊ฐ’์„ ํ•ด์‹œ์…‹์— ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์€ ๋ฉฑ๋“ฑ ์ž‘์—…**์ด๋‹ค. + +* ์ด์œ ๋Š” ๋ช‡ ๊ฐœ์˜ ๊ฐ’์„ ์ง‘์–ด๋†“๋˜์ง€ ํ•˜๋‚˜๋งŒ ์กด์žฌํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. + +2. ์›๊ฒฉ API๋„ **ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๊ฐ ์š”์ฒญ๋งˆ๋‹ค ์œ ์ผํ•œ ID๋ฅผ ์ง€์ •ํ•˜๊ฒŒ ํ•˜๋ฉด** ๋ฉฑ๋“ฑ์„ฑ ๊ตฌํ˜„ ๊ฐ€๋Šฅ + +* ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์žฌ์‹œ๋„ํ•  ๋•Œ ์‹คํŒจํ•œ ๊ฒƒ๊ณผ ๋™์ผํ•œ ์š”์ฒญ ID๋ฅผ ์ „๋‹ฌํ•˜๋ฉด ๋œ๋‹ค. +* ๊ทธ๋Ÿฌ๋ฉด ์„œ๋ฒ„๋Š” ์ด๋ฏธ ํ•ด๋‹น ์š”์ฒญ์ด ์ฒ˜๋ฆฌ๋œ ๊ฒฝ์šฐ์—๋Š” ํ•ด๋‹น ์ž‘์—… ์‹คํ–‰ํ•˜์ง€ ์•Š๋Š”๋‹ค. + +### 3. ๋ฆฌ์†Œ์Šค๋ฅผ ํ•ด์ œํ•˜์ž. + +#### ๐Ÿˆ ์žฅ์• ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ๋ชจ๋“  ๋ฆฌ์†Œ์Šค๋ฅผ ํ•ด์ œํ•ด์•ผ ํ•œ๋‹ค. + +> ๋” ์ด์ƒ ํ•„์š”๋กœ ํ•˜์ง€ ์•Š๋Š” ๋ฉ”๋ชจ๋ฆฌ, ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ, ๋„คํŠธ์›Œํฌ ์†Œ์ผ“, ํŒŒ์ผ ํ•ธ๋“ค ๋ชจ๋‘ ํ•ด์ œํ•˜์ž. + +1. ์šด์˜์ฒด์ œ๋Š” ํŒŒ์ผ ํ•ธ๋“ค๊ณผ ๋„คํŠธ์›Œํฌ ์†Œ์ผ“์„ ์œ„ํ•œ ๊ณต๊ฐ„์ด ์ •ํ•ด์กŒ๋Š”๋ฐ ๊ฐ€๋“ ์ฐจ๋ฉด, ์ƒˆ๋กœ ํ•ธ๋“ค, ์†Œ์ผ“ ๋ชจ๋“  ์ž‘์—…์ด ์‹คํŒจํ•œ๋‹ค. +2. ๋„คํŠธ์›Œํฌ ์†Œ์ผ“์ด ๋ˆ„์ˆ˜๋˜๋ฉด ๋ถˆํ•„์š”ํ•œ ์—ฐ๊ฒฐ์— ๊ณ„์† ๋‚จ์•„์žˆ์–ด ์—ฐ๊ฒฐ ํ’€์ด ๊ฐ€๋“ ์ฐจ๊ฒŒ ๋œ๋‹ค. +3. f.close๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์ „ ์ฝ”์Šค ์‹คํ–‰ ์‹คํŒจ๋กœ ํŒŒ์ผ ํฌ์ธํ„ฐ๋ฅผ ๋‹ซ์ง€ ๋ชปํ•˜๊ธฐ ๋–„๋ฌธ์— ๊ฐœ๋ฐœ ์–ธ์–ด๊ฐ€ ์ž๋™ํ•ด์ œ๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด `try/finally`๋กœ ํŒŒ์ผ ํ•ธ๋“ค ์•ˆ์ „ํ•˜๊ฒŒ ๋‹ซ๊ฒŒ ํ•ด์ค˜์•ผ ํ•จ + +``` +f = open(`foo.txt`, 'w') +#... +f.close() +``` + +4. ํ˜„๋Œ€ ๊ฐœ๋ฐœ ์–ธ์–ด๋Š” ์ž๋™๋ฆฌ์†Œ์Šค ํ•ด์ œ ์ง€์›, rust๋Š” `์†Œ๋ฉธ์ž ๋ฉ”์†Œ๋“œ`๋กœ, ํŒŒ์ด์ฌ์€ `with ๊ตฌ๋ฌธ` + +``` +with open('foo.txt') as f: +#... +``` + +## ๋ฌธ์ œ ์›์ธ์„ ์ฐพ๊ธฐ ์œ„ํ•œ ๋กœ๊น… ๋ฐฉ๋ฒ• + +### ํ”„๋กค๋กœ๊ทธ + +#### ๐Ÿˆ ๋กœ๊ทธ ๋ฉ”์„ธ์ง€๋ฅผ ์ถœ๋ ฅํ•˜๋Š” ๊ฒƒ์€ ์ฝ”๋“œ์˜ ์‹คํ–‰์„ ์ดํ•ดํ•˜๊ฑฐ๋‚˜ ์ž‘์€ ํ”„๋กœ๊ทธ๋žจ์„ ๋””๋ฒ„๊น…ํ•  ์ˆ˜ ์žˆ๋Š” ์‰ฝ๊ณ  ํŽธ๋ฆฌํ•œ ๋ฐฉ๋ฒ• + +> ์ฝ”๋“œ๋ฅผ ์‰ฝ๊ฒŒ ์šด์˜ํ•˜๊ณ  ๋””๋ฒ„๊ทธํ•  ์ˆ˜ ์žˆ๋„๋ก ๋กœ๊น… ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ํ™œ์šฉํ•˜์ž. ๋กœ๊ทธ ๋ ˆ๋ฒจ์„ ์„ค์ •ํ•ด์„œ ์šด์˜์ž๊ฐ€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋กœ๊ทธ ์–‘ ์กฐ์ •ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜์ž. ๋กœ๊ทธ๋Š” ์›์ž์ ์ด๊ณ  ๋น ๋ฅด๋ฉฐ ์•ˆ์ „ํ•˜๊ฒŒ ๋‹ค๋ค„์•ผ ํ•œ๋‹ค. + +1. ๊ฐœ๋ฐœ ์–ธ์–ด๋Š” ๋ณต์žกํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์œ„ํ•ด ์–ธ์ œ ์–ด๋–ค ๊ฒƒ์„ ๋กœ๊ทธ์— ๊ธฐ๋กํ•  ์ง€ ์ œ์–ดํ•˜๋Š” ์—ฐ์‚ฐ์ž๋ฅผ ์ œ๊ณตํ•˜๋Š” ์ •๊ตํ•œ `๋กœ๊น… ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ`๋ฅผ ๊ฐ–์ถ”๊ณ  ์žˆ๋‹ค. +2. ์ด๋Ÿฌํ•œ ์—ฐ์‚ฐ์ž๋ฅผ ์ด์šฉํ•ด ๋กœ๊ทธ ๋ ˆ๋ฒจ์„ ์ด์šฉํ•ด ๋กœ๊ทธ ์–‘ ์กฐ์ ˆํ•˜๊ฑฐ๋‚˜ ๋กœ๊ทธ ํ˜•์‹ ์ œ์–ด ๊ฐ€๋Šฅ + +#### ๐Ÿ““ java์˜ ๋กœ๊ทธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ + +> ์ด ์™ธ์—๋„ ๋‹ค์–‘ํ•œ ๋กœ๊น… ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์žˆ์œผ๋ฉฐ, ์„ ํƒํ•  ๋•Œ ํ”„๋กœ์ ํŠธ์˜ ์š”๊ตฌ ์‚ฌํ•ญ๊ณผ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์„ ๊ณ ๋ คํ•˜์—ฌ ์ ์ ˆํ•œ ๋กœ๊น… ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์„ ํƒํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š” + +**1. Log4j 2** + +* Apache Log4j 2๋Š” Java์˜ ๋กœ๊น… ํ”„๋ ˆ์ž„์›Œํฌ๋กœ ๋งค์šฐ ์œ ์—ฐํ•˜๊ณ  ๊ฐ•๋ ฅํ•œ ๋กœ๊น… ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค. +* ๋กœ๊ทธ ๋ฉ”์‹œ์ง€๋ฅผ ๋‹ค์–‘ํ•œ ์ถœ๋ ฅ ๋Œ€์ƒ์œผ๋กœ ๋ผ์šฐํŒ…ํ•˜๊ณ , ๋กœ๊น… ๋ ˆ๋ฒจ ๋ฐ ๋กœ๊ทธ ํ˜•์‹ ์„ค์ • ๋“ฑ์ด ๊ฐ€๋Šฅํ•˜๋‹ค. + +**2. SLF4J (Simple Logging Facade for Java)** + +* SLF4J๋Š” ๋กœ๊น… ํ”„๋ ˆ์ž„์›Œํฌ์˜ ์ถ”์ƒ ๊ณ„์ธต์œผ๋กœ, ๋‹ค์–‘ํ•œ ๋กœ๊น… ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€ ๊ฒฐํ•ฉํ•˜์—ฌ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. +* ์ฃผ๋กœ ๋กœ๊ทธ API์˜ ์ถ”์ƒํ™”๋ฅผ ์ œ๊ณตํ•˜๋ฉฐ, ๋กœ๊น… ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋ณ€๊ฒฝํ•ด๋„ ์ฝ”๋“œ ์ˆ˜์ •์„ ์ตœ์†Œํ™”ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์‹ค์ œ๋กœ SLF4J๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๋กœ๊น… ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ Logback์„ ๋งŽ์ด ์‚ฌ์šฉํ•œ๋‹ค. + +\*\*3. Logback \*\* + +* Logback์€ SLF4J์˜ ๊ตฌํ˜„์ฒด๋กœ, Log4j์˜ ํ›„์† ์ œํ’ˆ์œผ๋กœ ๊ฐœ๋ฐœ๋œ ๊ฒƒ์œผ๋กœ Logback์€ ๊ธฐ๋ณธ์ ์ธ ์„ค์ •์œผ๋กœ๋„ ๊ฐ„๋‹จํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ๋ณต์žกํ•œ ์„ค์ • ๋ฐ ์œ ์—ฐํ•œ ๋กœ๊น… ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค. + +**4. java.util.logging (JUL)** + +* ์ž๋ฐ” ํ‘œ์ค€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ํฌํ•จ๋œ ๋กœ๊น… ํ”„๋ ˆ์ž„์›Œํฌ๋กœ, JUL์„ ์‚ฌ์šฉํ•˜๋ฉด ๋ณ„๋„์˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ถ”๊ฐ€๋กœ ํ•„์š”ํ•˜์ง€ ์•Š๋Š”๋‹ค. +* ๊ธฐ๋Šฅ์€ ๊ฐ„๋‹จํ•˜์ง€๋งŒ ๊ฐ€๋ณ๊ณ  ํ‘œ์ค€ํ™”๋œ ๋กœ๊น…์„ ์œ„ํ•œ ์„ ํƒ์ง€๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. + +**5. Log4j 1** + +* Apache Log4j 1์€ ๋กœ๊น… ํ”„๋ ˆ์ž„์›Œํฌ๋กœ ์œ ๋ช…ํ•˜๋ฉฐ ์˜ˆ์ „๋ถ€ํ„ฐ ๋งŽ์ด ์‚ฌ์šฉ๋˜์–ด์™”์œผ๋‚˜ ํ˜„์žฌ๋Š” Log4j 2์™€ ๋น„๊ตํ•˜์—ฌ ์œ ์ง€๋ณด์ˆ˜ ๋ฐ ๋ณด์•ˆ ์ด์Šˆ๋กœ ์ธํ•ด ์‚ฌ์šฉ์ด ๊ถŒ์žฅ๋˜์ง€ ์•Š๋Š”๋‹ค. + +### 1. ๋กœ๊ทธ ๋ ˆ๋ฒจ์„ ์‚ฌ์šฉํ•˜์ž + +> ๋กœ๊น… ํ”„๋ ˆ์ž„์›Œํฌ๋Š” ์šด์˜์ž๊ฐ€ ์ค‘์š”๋„์— ๋”ฐ๋ผ ๋ฉ”์„ธ์ง€๋ฅผ ํ•„ํ„ฐ๋งํ•  ์ˆ˜ ์žˆ๋„๋ก ๋กœ๊ทธ ๋ ˆ๋ฒจ์„ ์ง€์›ํ•œ๋‹ค. + +1. ์šด์˜์ž๊ฐ€ ๋กœ๊ทธ ๋ ˆ๋ฒจ์„ ์„ค์ •ํ•˜๋ฉด ์„ค์ •ํ•œ ๋ ˆ๋ฒจ๋ณด๋‹ค ์ƒ์œ„ ๋ ˆ๋ฒจ์˜ ๋กœ๊ทธ๋Š” ๋ชจ๋‘ ๊ธฐ๋ก๋˜๋Š” ๋ฐ˜๋ฉด\*\* ๊ทธ๋ณด๋‹ค ๋‚ฎ์€ ๋ ˆ๋ฒจ์˜ ๋กœ๊ทธ๋Š” ๊ธฐ๋ก๋˜์ง€ ์•Š๋Š”๋‹ค.\*\* +2. ๋กœ๊ทธ ๋ ˆ๋ฒจ์„ ์‚ฌ์šฉํ•˜๋ฉด ๋งค์šฐ ์ƒ์„ธํ•œ ๋””๋ฒ„๊น… ๋กœ๊ทธ๋ถ€ํ„ฐ ์ •์ƒ์ ์ธ ์šด์˜ ์ƒํ™ฉ์—์„œ ์ฃผ๊ธฐ์ ์œผ๋กœ ๊ธฐ๋ก๋˜๋Š” ๋กœ๊ทธ๊นŒ์ง€, ์ฃผ์–ด์ง„ ์ƒํ™ฉ์— ๋งž์ถฐ์„œ ๋กœ๊ทธ์˜ ์–‘ ์กฐ์ ˆ ๊ฐ€๋Šฅ + +#### ๐Ÿˆ ์˜ˆ์ œ + +> ์ž๋ฐ”์˜ log4j.properties ํŒŒ์ผ์˜ ์ผ๋ถ€๋กœ์„œ, ๋ฃจํŠธ์—๋Š” ERROR ๋ ˆ๋ฒจ์˜ ์ƒ์„ธํ•œ ๋กœ๊ทธ ์ง€์ •ํ•˜๊ณ  com.foo.bar ํŒจํ‚ค์ง€ ๋‚ด์˜ ์ฝ”๋“œ์—์„œ๋Š” INFO ๋ ˆ๋ฒจ์˜ ๋กœ๊ทธ ์ง€์ • + +```JAVA +# ๋ฃจํŠธ ๋กœ๊ฑฐ์—๋Š” ERROR **ํ…์ŠคํŠธ**๋ ˆ๋ฒจ์„ ์ง€์ •ํ•˜๊ณ  fout๋ผ๋Š” ์ด๋ฆ„์˜ FileAppender๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค, +log4j.rootLogger = Error, fout +# com.foo.bar ํŒจํ‚ค์ง€๋Š” INFO ๋ ˆ๋ฒจ ์ง€์ • +log4j.logger.com.foo.bar = INFO +``` + +#### ๐Ÿˆ ๋กœ๊ทธ ๋ ˆ๋ฒจ์˜ ๋ถ„๋ฅ˜ + +1. TRACE + +> ์ •๋ฆฌํ•˜์ž๋ฉด, +> +> * ์˜ˆ์‹œ: ํŠน์ • ๋ฉ”์†Œ๋“œ๋‚˜ ํ•จ์ˆ˜์˜ ํ˜ธ์ถœ๊ณผ ๋ฐ˜ํ™˜ ๊ฐ’์„ ๋กœ๊น…ํ•˜์—ฌ ๋””๋ฒ„๊น… ์‹œ ํ˜ธ์ถœ ํ๋ฆ„์„ ํ™•์ธํ•  ๋•Œ ์‚ฌ์šฉ. +> * ์ ์šฉ ๋ฐฉ๋ฒ•: ๋กœ๊ทธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—์„œ ์ œ๊ณตํ•˜๋Š” TRACE ๋ ˆ๋ฒจ ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํŠน์ • ์ž‘์—…์ด๋‚˜ ๋ฉ”์†Œ๋“œ์˜ ์„ธ๋ถ€ ์ •๋ณด๋ฅผ ๋กœ๊น… + +* **ํŠน์ • ํŒจํ‚ค์ง€๋‚˜ ํด๋ž˜์Šค์—๋งŒ ์ผœ์ง€๋ฉฐ ์ตœ๋Œ€ํ•œ ์ƒ์„ธํ•œ ๋‚ด์šฉ์„ ์ถœ๋ ฅ**ํ•˜๋Š” ๋ ˆ๋ฒจ +* ๊ฐœ๋ฐœ ํ™˜๊ฒฝ ์ด์™ธ์—์„œ๋Š” ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ๋Š” ๊ฑฐ์˜ ์—†๋‹ค. +* **์ค„ ๋‹จ์œ„ ๋กœ๊ทธ๋‚˜ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋ฅผ ํ™•์ธ**ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ +* TRACE ๋กœ๊ทธ ๋ ˆ๋ฒจ์„ ์ž์ฃผ ์‚ฌ์šฉํ•˜๋Š” ํŽธ์ด๋ผ๋ฉด ๋กœ๊ทธ ์ถœ๋ ฅ ๋Œ€์‹ , `๋””๋ฒ„๊ฑฐ`๋ฅผ ์ด์šฉํ•ด ์ฝ”๋“œ์˜ ์‹คํ–‰ ๊ณผ์ •์„ ํ™•์ธํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค + +2. DEBUG + +> ์ •๋ฆฌํ•˜์ž๋ฉด, +> +> * ์˜ˆ์‹œ: ์‚ฌ์šฉ์ž์˜ ์ž…๋ ฅ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ์ค‘๊ฐ„ ๊ณผ์ •์„ ๋กœ๊น…ํ•˜์—ฌ ๋””๋ฒ„๊น… ์‹œ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ ๊ณผ์ •์„ ํ™•์ธํ•  ๋•Œ ์‚ฌ์šฉ. +> * ์ ์šฉ ๋ฐฉ๋ฒ•: ๋กœ๊ทธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—์„œ ์ œ๊ณตํ•˜๋Š” DEBUG ๋ ˆ๋ฒจ ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ค‘์š”ํ•œ ์ƒํƒœ ๋ณ€๊ฒฝ ๋˜๋Š” ์ค‘๊ฐ„ ๊ณผ์ •์„ ๋กœ๊น… + +* **ํ”„๋กœ๋•์…˜ ์ƒํ™ฉ์—์„œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ์ ํ•ฉํ•œ ๋ ˆ๋ฒจ**์ด๋‹ค. +* ๋””๋ฒ„๊ทธ ๋ ˆ๋ฒจ ๋กœ๊น…์„ ๋„ˆ๋ฌด ๋งŽ์ด ์‚ฌ์šฉ ์‹œ ๋””๋ฒ„๊น… ํ•  ๋•Œ ํ•„์š”ํ•œ ์ •๋ณด๋ฅผ ์ฐพ๊ธฐ ์–ด๋ ค์›Œ์ง„๋‹ค. +* ์ด๋Ÿฐ ๋ฉ”์„ธ์ง€๋Š” TRACE ๋ ˆ๋ฒจ๋กœ ์ง€์ •ํ•˜์ž. + +3. INFO + +> ์ •๋ฆฌํ•˜์ž๋ฉด, +> +> * ์˜ˆ์‹œ: ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์‹œ์ž‘๊ณผ ์ข…๋ฃŒ ์‹œ์ , ์„œ๋น„์Šค ํฌํŠธ ์„ค์ • ๋“ฑ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๊ธฐ๋ณธ ์ •๋ณด๋ฅผ ๋กœ๊น…ํ•  ๋•Œ ์‚ฌ์šฉ. +> * ์ ์šฉ ๋ฐฉ๋ฒ•: ๋กœ๊ทธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—์„œ ์ œ๊ณตํ•˜๋Š” INFO ๋ ˆ๋ฒจ ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ƒํƒœ ์ •๋ณด๋ฅผ ๋กœ๊น… + +* **์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ƒํƒœ์— ๋Œ€ํ•ด ์•Œ์•„๋‘๋ฉด ์ข‹์„ ๋งŒํ•œ ์ •๋ณด**๋ฅผ ์œ„ํ•œ ๋ ˆ๋ฒจ์ด๋‹ค. +* ์ฆ‰ ๋ฌธ์ œ์ ์„ ํŒŒ์•…ํ•˜๊ธฐ ์œ„ํ•œ ์šฉ๋„๊ฐ€ ์•„๋‹ˆ๋‹ค. +* ๋ณดํ†ต `์„œ๋น„์Šค ์‹œ์ž‘` ์ด๋‚˜ `5050๋ฒˆ ํฌํŠธ ์‚ฌ์šฉ`๊ณผ ๊ฐ™์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ƒํƒœ ๋ฉ”์„ธ์ง€๋ฅผ ์ด INFO ๋ ˆ๋ฒจ๋กœ ์ถœ๋ ฅํ•œ๋‹ค. +* INFO๋Š” **๊ธฐ๋ณธ ๋กœ๊ทธ ๋ ˆ๋ฒจ์ด๋‹ˆ, ์‹œ์‹œํ•œ ๋‚ด์šฉ์„ ๊ธฐ๋กํ•˜์ง€ ๋ง์ž.** +* `๋งŒ์•ฝ์„ ์œ„ํ•œ` ๋กœ๊ทธ๋Š” TRACE๋‚˜ DEBUG๋ ˆ๋ฒจ๋กœ ์ถœ๋ ฅํ•˜์ž +* INFO ๋ ˆ๋ฒจ ๋กœ๊ทธ๋Š” ์ •์ƒ์ ์ธ ์šด์˜ ์ƒํ™ฉ์—์„œ ์œ ์šฉํ•œ ์ •๋ณด๋ฅผ ์ œ๊ณตํ•ด์•ผ ํ•œ๋‹ค. +* ๋Ÿฌ์ŠคํŠธ์—์„œ INFO ๋ ˆ๋ฒจ ์ถœ๋ ฅํ•˜๋Š” ์˜ˆ์‹œ + +> ์š”์ฒญ์ด ์‹คํŒจํ•œ ์›์ธ์„ ์œ ๋ฐœํ•œ ์—๋Ÿฌ๋„ ํฌํ•จ๋˜์–ด ์žˆ๋Š”๋ฐ ๊ทธ๋Ÿฐ๋ฐ๋„ info ๋ ˆ๋ฒจ์„ ์“ด ์ด์œ ๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์ž๋™์œผ๋กœ ์žฌ์‹œ๋„ ํ•˜๋ฏ€๋กœ ์ถ”๊ฐ€ ๋Œ€์‘ํ•  ํ•„์š”๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. + +```RUST +info!("Failed request : {}, retrying", e); +``` + +4. WARN + +> ์ •๋ฆฌํ•˜์ž๋ฉด, +> +> * ์˜ˆ์‹œ: ์„œ๋น„์Šค ๋ฆฌ์†Œ์Šค๊ฐ€ ํ•œ๊ณ„์น˜์— ๋‹ค๋‹ค๋ฅธ ์ƒํ™ฉ์ด๋‚˜ ์˜ˆ์ƒ์น˜ ๋ชปํ•œ ๋™์ž‘์„ ๋กœ๊น…ํ•˜์—ฌ ๊ฒฝ๊ณ ํ•  ๋•Œ ์‚ฌ์šฉ. +> * ์ ์šฉ ๋ฐฉ๋ฒ•: ๋กœ๊ทธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—์„œ ์ œ๊ณตํ•˜๋Š” WARN ๋ ˆ๋ฒจ ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฒฝ๊ณ ํ•  ๋งŒํ•œ ์ƒํ™ฉ์„ ๋กœ๊น… + +* **์ž ์žฌ์ ์œผ๋กœ ๋ฌธ์ œ๊ฐ€ ๋  ๋งŒํ•œ ์ƒํ™ฉ์— ๋Œ€ํ•œ ๋ฉ”์„ธ์ง€ ์ถœ๋ ฅ**์„ ์œ„ํ•œ ๋ ˆ๋ฒจ +* ์–ด๋–ค `๋ฆฌ์†Œ์Šค๊ฐ€ ํ•œ๊ณ„์น˜์— ๋‹ค๋‹ค๋ฅด๊ณ  ์žˆ๋‹ค๋ฉด` ๊ฒฝ๊ณ  ๋ฉ”์„ธ์ง€ ์ถœ๋ ฅํ•˜๊ธฐ ์ ํ•ฉ +* WARN ๋ ˆ๋ฒจ ๋กœ๊ทธ๋ฅผ ์ถœ๋ ฅ ํ•  ๋•Œ๋Š” ๊ทธ ๋ฉ”์„ธ์ง€๋ฅผ ํ™•์ธํ•œ ์‚ฌ๋žŒ์ด ์ทจํ•ด์•ผ ํ•  ๊ตฌ์ฒด์ ์ธ ๋Œ€์•ˆ์ด ์žˆ์–ด์•ผ ํ•˜๋ฉฐ, ์—†๋‹ค๋ฉด INFO๋ ˆ๋ฒจ๋กœ ์˜ฎ๊ธฐ์ž + +5. ERROR + +> ์ •๋ฆฌํ•˜์ž๋ฉด, +> +> * ์˜ˆ์‹œ: ์˜ˆ์™ธ ๋ฐœ์ƒ, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ž‘์—… ์‹คํŒจ ๋“ฑ ์˜ค๋ฅ˜ ์ƒํ™ฉ์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ๋กœ๊น…ํ•  ๋•Œ ์‚ฌ์šฉ. +> * ์ ์šฉ ๋ฐฉ๋ฒ•: ๋กœ๊ทธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—์„œ ์ œ๊ณตํ•˜๋Š” ERROR ๋ ˆ๋ฒจ ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์˜ค๋ฅ˜ ์ƒํ™ฉ์— ๋Œ€ํ•œ ์ •๋ณด ๋ฐ ์Šคํƒ ํŠธ๋ ˆ์ด์Šค ๋“ฑ์„ ๋กœ๊น…ํ•ฉ๋‹ˆ๋‹ค. + +* ์‚ดํŽด๋ด์•ผ ํ•  ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ์œ„ํ•œ ๋ ˆ๋ฒจ +* **๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค ๊ธฐ๋ก ์ž‘์—…์ด ์‹คํŒจํ•˜๋ฉด ๋Œ€์ฒด๋กœ ERROR ๋ ˆ๋ฒจ ๋กœ๊ทธ์— ๊ธฐ๋ก** +* ๋ฌธ์ œ๋ฅผ ๋ถ„์„ํ•˜๊ธฐ์— ์ถฉ๋ถ„ํ•œ ์ •๋ณด ์ œ๊ณต +* ๊ด€๋ จ ์Šคํƒ ์ถ”๊ฐ€์ ๊ณผ ์†Œํ”„ํŠธ์›จ์–ด๊ฐ€ ์‹คํ–‰๋œ ๊ฒฐ๊ณผ ๋“ฑ ์ƒ์„ธํ•œ ๋‚ด์šฉ ๋ช…ํ™•ํ•˜๊ฒŒ ๊ธฐ๋ก + +6. FATAL + +* ๊ฐ€์žฅ ์œ„ํ—˜ํ•œ ์ˆ˜์ค€์˜ ๋ฉ”์„ธ์ง€ ์ถœ๋ ฅํ•˜๊ธฐ ์œ„ํ•œ ๋ ˆ๋ฒจ -\*\* ํ”„๋กœ๊ทธ๋žจ์ด ์‹ฌ๊ฐํ•œ ์ƒํ™ฉ์— ๋งž๋‹ฅ๋œจ๋ ค ์ฆ‰์‹œ ์ข…๋ฃŒ์‹œ์ผœ์•ผ ํ•œ๋‹ค๋ฉด\*\* ๊ทธ ๋ฌธ์ œ๋ฅผ ์œ ๋ฐœํ•œ ์›์ธ์„ FATAL ๋ ˆ๋ฒจ ๋กœ๊ทธ ๊ธฐ๋ก +* ๋ณต๊ตฌ ์ง€์ ์ด๋‚˜ ๋ถ„์„ ๊ด€๋ จ ๋ฐ์ดํ„ฐ ํ”„๋กœ๊ทธ๋žจ ์ƒํƒœ ๊ด€๋ จ๋œ ์ปจํ…์ŠคํŠธ๋„ ๋ฐ˜๋“œ์‹œ ๊ธฐ๋ก + +#### ๐Ÿ““ java ๋กœ๊ทธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ด์šฉํ•ด์„œ ๋กœ๊ทธ ๋ ˆ๋ฒจ ์ง€์ • ๋ฐฉ๋ฒ• + +**1. ๋ฉ”์†Œ๋“œ ํ˜ธ์ถœ์„ ํ†ตํ•œ ๋กœ๊ทธ ๋ ˆ๋ฒจ ์ง€์ •** + +SLF4J์™€ Logback์„ ์‚ฌ์šฉํ•  ๋•Œ๋Š” ๋กœ๊ทธ ๋ ˆ๋ฒจ์„ ์ง€์ •ํ•˜๋Š” ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. SLF4J์˜ ๋กœ๊ฑฐ(Logger) ์ธ์Šคํ„ด์Šค๋ฅผ ๊ฐ€์ ธ์˜จ ํ›„ ํ•ด๋‹น ์ธ์Šคํ„ด์Šค์˜ ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ๋กœ๊ทธ๋ฅผ ๋‚จ๊ธธ ์ˆ˜ ์žˆ๋‹ค. ๋ฉ”์†Œ๋“œ์—๋Š” ๋กœ๊ทธ ๋ ˆ๋ฒจ์„ ์ง€์ •ํ•˜๋Š” ํŒŒ๋ผ๋ฏธํ„ฐ๊ฐ€ ์žˆ๋‹ค. + +```java +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class MyClass { + private static final Logger logger = LoggerFactory.getLogger(MyClass.class); + + public void myMethod() { + logger.trace("This is a trace level log."); + logger.debug("This is a debug level log."); + logger.info("This is an info level log."); + logger.warn("This is a warn level log."); + logger.error("This is an error level log."); + } +} +``` + +**2. ์„ค์ • ํŒŒ์ผ์„ ํ†ตํ•œ ๋กœ๊ทธ ๋ ˆ๋ฒจ ์ง€์ •** + +Logback์„ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ์—๋Š” logback.xml ๋˜๋Š” logback.groovy ์„ค์ • ํŒŒ์ผ์„ ํ†ตํ•ด ๋กœ๊ทธ ๋ ˆ๋ฒจ์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค. ์„ค์ • ํŒŒ์ผ์—์„œ๋Š” ๋‹ค์–‘ํ•œ ๋กœ๊ทธ ๋ ˆ๋ฒจ์„ ๊ฐ๊ฐ์˜ ๋กœ๊ทธ ์ถœ๋ ฅ ๋Œ€์ƒ์— ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค. + +```java + + + + + %-4relative [%thread] %-5level %logger{35} - %msg%n + + + + + + + + +``` + +### 2. ๋กœ๊ทธ๋Š” ์›์ž์ ์œผ๋กœ ์ž‘์„ฑํ•˜์ž + +#### ๐Ÿˆ ์›์ž์ ์ด๋ž€ ๋ญ˜๊นŒ.. + +> `์›์ž์ ์œผ๋กœ ์ž‘์„ฑํ•˜์ž`๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ฐ ๋ฐ์ดํ„ฐ ๊ด€๋ฆฌ์—์„œ ๋งค์šฐ ์ค‘์š”ํ•œ ์›์น™ ์ค‘ ํ•˜๋‚˜๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. ์ด ์›์น™์€ ์ž‘์—…์ด ๋” ์ž‘์€ ์กฐ๊ฐ์œผ๋กœ ๋ถ„ํ•ด๋˜๊ฑฐ๋‚˜ ์ค‘๊ฐ„์— ์ค‘๋‹จ๋˜์ง€ ์•Š๊ณ  ์™„์ „ํžˆ ์‹คํ–‰๋˜๋„๋ก ๋ณด์žฅํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค. + +1. ์—ฌ๊ธฐ์„œ `์›์ž์ `์ด๋ž€ ์ž‘์—…์ด ๋” ์ด์ƒ ๋‚˜๋ˆŒ ์ˆ˜ ์—†๋Š” ์ตœ์†Œ ๋‹จ์œ„ +2. ์ด ๋‹จ์œ„์—์„œ ์ž‘์—…์€ ๋” ์ด์ƒ ๋ถ„ํ•ด๋˜๊ฑฐ๋‚˜ ์ค‘๋‹จ๋  ์ˆ˜ ์—†์–ด์•ผ ํ•œ๋‹ค. ์›์ž์  ์ž‘์—…์€ ๋‹ค์Œ ๋‘ ๊ฐ€์ง€ ํŠน์„ฑ + +* `๋ถ„ํ•ด ๋ถˆ๊ฐ€๋Šฅ(Indivisible)`: **์›์ž์  ์ž‘์—…์€ ๋” ์ž‘์€ ๋‹จ์œ„๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์—†์–ด์•ผ ํ•œ๋‹ค.** ์ž‘์—…์„ ๊ตฌ์„ฑํ•˜๋Š” ๊ฐ ๋‹จ๊ณ„๋Š” ๋ถ„ํ•ด๋˜๊ฑฐ๋‚˜ ์žฌ์ •์˜๋˜์ง€ ์•Š๊ณ  ์‹คํ–‰๋˜์–ด์•ผ ํ•œ๋‹ค. +* `์ค‘๋‹จ ๋ถˆ๊ฐ€๋Šฅ(Undivisible)`: **์›์ž์  ์ž‘์—…์€ ์ค‘๊ฐ„์— ์ค‘๋‹จ๋˜์ง€ ์•Š๊ณ  ์™„์ „ํžˆ ์‹คํ–‰**๋˜์–ด์•ผ ํ•œ๋‹ค. ๋งŒ์•ฝ ์ž‘์—…์˜ ์ผ๋ถ€๋งŒ ์‹คํ–‰๋˜๊ณ  ์ค‘๋‹จ๋˜๋ฉด ์ผ๊ด€์„ฑ๊ณผ ์ •ํ•ฉ์„ฑ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค. + +#### ๐Ÿˆ ๋กœ๊ทธ๋ฅผ ์›์ž์ ์œผ๋กœ ์ž‘์„ฑ + +> ๋กœ๊ทธ๋ฅผ ์›์ž์ ์œผ๋กœ ์ž‘์„ฑํ•œ๋‹ค๋Š” ๊ฒƒ์€ ๋กœ๊ทธ ๋ฉ”์‹œ์ง€๊ฐ€ ํ•œ ๋ฒˆ ์ž‘์„ฑ๋˜๋ฉด ๋ถ„ํ•ด๋˜๊ฑฐ๋‚˜ ์ค‘๋‹จ๋˜์ง€ ์•Š๊ณ  ์™„์ „ํžˆ ๊ธฐ๋ก๋˜์–ด์•ผ ํ•œ๋‹ค๋Š” ์˜๋ฏธ + +* ์˜ˆ๋ฅผ ๋“ค์–ด, ์—ฌ๋Ÿฌ ๋กœ๊ทธ ๋ฉ”์‹œ์ง€๋ฅผ ์—ฐ์†์ ์œผ๋กœ ์ž‘์„ฑํ•  ๋•Œ ๊ฐ ๋กœ๊ทธ ๋ฉ”์‹œ์ง€๊ฐ€ ์ˆœ์„œ๋Œ€๋กœ ๊ธฐ๋ก๋˜๋Š” ๊ฒƒ์„ ๋ณด์žฅํ•˜๊ณ , ์ค‘๊ฐ„์— ์ž‘์—…์ด ์ค‘๋‹จ๋˜๊ฑฐ๋‚˜ ๋ˆ„๋ฝ๋˜์ง€ ์•Š๋„๋ก ํ•ด์•ผ ํ•œ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ๋กœ๊ทธ๋ฅผ ํ†ตํ•ด ์‹œ์Šคํ…œ ์ƒํƒœ๋‚˜ ์ด๋ฒคํŠธ์— ๋Œ€ํ•œ ์ •ํ™•ํ•˜๊ณ  ์ผ๊ด€๋œ ์ •๋ณด๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค. + +#### ๐Ÿˆ ๋งŒ์ผ ๋ฐ์ดํ„ฐ์™€ ๊ฒฐํ•ฉํ–ˆ์„ ๋–„๋งŒ ์ •๋ณด๊ฐ€ ์œ ์šฉํ•˜๋‹ค๋ฉด + +1. ํ•œ ๋ฉ”์„ธ์ง€์— ๋ชจ๋“  ์ •๋ณด๋ฅผ ์›์ž์ ์œผ๋กœ ์ €์žฅํ•˜์ž. +2. ๋กœ๊ทธ ์ˆ˜์ง‘๊ธฐ๋Š” ๊ด€๋ จ ์ •๋ณด๋ฅผ ํ•œ ์ค„์— ํ‘œํ˜„ํ•˜๋Š” ๋กœ๊ทธ๋ฅผ ๋” ์ž˜ ์ฒ˜๋ฆฌ + +> but, ํŠน์ • ์ˆœ์„œ๋Œ€๋กœ ๋ณด์ด์ง€ ์•Š์„ ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๋กœ๊ทธ ์ •๋ ฌ ์‹œ ์‹œ์Šคํ…œ ์‹œ๊ฐ„์— ์˜์กดํ•˜์ง€๋ง์ž. ์‹œ์Šคํ…œ ์‹œ๊ฐ„์€ ๋ฆฌ์…‹๋˜๊ฑฐ๋‚˜ ํ˜ธ์ŠคํŠธ ๋งˆ๋‹ค ์กฐ๊ธˆ์”ฉ ๋‹ค๋ฅผ ์ˆ˜ ์žˆ์Œ + +3. ๋กœ๊ทธ ๋ฉ”์„ธ์ง€์— ์ค„๋ฐ”๊ฟˆ ๋ฌธ์ž๋„ ํ”ผํ•˜์ž => ํŠนํžˆ WARNING ๋กœ๊ทธ์— ๊ฒฝ์šฐ, ๋‹ค๋ฅธ ๋ฉ”์„ธ์ง€์™€ ํ˜ผํ•ฉ์ด ๋˜๊ธฐ ๋•Œ๋ฌธ์— **ํ•œ ์ค„๋กœ ์ถœ๋ ฅ ๋ถˆ๊ฐ€ํ•˜๋‹ค๋ฉด ๊ณ ์œ ํ•œ ID๋ฅผ ํฌํ•จ์‹œ์ผœ ๋‚˜์ค‘์— ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜์ž.** + +### 3. ๋กœ๊ทธ๋Š” ์‹ ์†ํ•˜๊ฒŒ ๊ธฐ๋กํ•˜์ž. + +> ๋กœ๊ทธ๋ฅผ ๋„ˆ๋ฌด ๊ธฐ๋กํ•˜๋ฉด ์„ฑ๋Šฅ์— ์˜ํ–ฅ์„ ๋ฏธ์นœ๋‹ค. **๋กœ๊ทธ๋Š” ๋””์Šคํฌ๋‚˜ ์ฝ˜์†”, ์›๊ฒฉ ์‹œ์Šคํ…œ ๋“ฑ ์–ด๋”˜๊ฐ€์— ๋ฐ˜๋“œ์‹œ ๊ธฐ๋ก๋˜์–ด์•ผ ํ•˜๋ฉฐ, ๊ธฐ๋ก๋˜๊ธฐ ์ „ ํ•œ ๋ฌธ์ž์—ด๋กœ ๊ฒฐํ•ฉ**ํ•ด์•ผ ํ•œ๋‹ค. + +#### ๐Ÿˆ ๋ฌธ์ž์—ด ๊ฒฐํ•ฉ + +> ๋งค์šฐ ๋Š๋ฆฌ๊ฒŒ ์ง„ํ–‰๋˜๋ฉฐ, ์„ฑ๋Šฅ์ด ์ค‘์š”ํ•œ ๋ฃจํ”„์— ์•…์˜ํ–ฅ์„ ๋ฏธ์นœ๋‹ค, + +1. ๊ฒฐํ•ฉ์„ ์‹œ๋„ํ•˜๋Š” ๋ฌธ์ž์—ด์ด ๋กœ๊ทธ ๋ฉ”์†Œ๋“œ์— ์ „๋‹ฌ๋˜๋ฉด ๋กœ๊ทธ ๋ ˆ๋ฒจ๊ณผ ์ƒ๊ด€ ์—†์ด ๊ฒฐํ•ฉ ์‹คํ–‰ ์ด์œ  : ์†Œ๋“œ์˜ ์ธ์ˆ˜๋Š” ๋ฉ”์†Œ๋“œ์— ์ „๋‹ฌ๊ธฐ ์•ž์„œ ํ‰๊ฐ€๊ฐ€ ์ด๋ค„์ง€๊ธฐ ๋•Œ๋ฌธ +2. ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ ์ง€์›ํ•œ๋‹ค๋ฉด, ํŒŒ๋ผ๋ฏธํ„ฐํ™” ๋กœ๊น…์„ ์‚ฌ์šฉํ•˜์ž +3. JAVA์˜ ๋กœ๊ทธ ํ˜ธ์ถœ ์‹œ ๋ฌธ์ž์—ด ๊ฒฐํ•ฉ ๋ฐฉ๋ฒ• 3๊ฐ€์ง€ + +```JAVA +while(message.size() > 0){ + Message m = message.poll(); + + // ์ด ๋ฌธ์ž์—ด์€ trace ๋ ˆ๋ฒจ์ด ๋น„ํ™œ์„ฑํ™”๋ผ ์žˆ์–ด๋„ ๊ฒฐํ•ฉ์ด ์‹คํ–‰ + log.trace("got message: "+m); + + // ์ด ๋ฌธ์ž์—ด ์—ญ์‹œ trace ๋ ˆ๋ฒจ์ด ๋น„ํ™œ์„ฑํ™”๋ผ ์žˆ์–ด๋„ ๊ฒฐํ•ฉ์ด ์‹คํ–‰ + log.trace("got message : {}".format(m)); + + // ์ด ๋ฌธ์ž์—ด์€ trace ๋ ˆ๋ฒจ์ด ํ™œ์„ฑํ™”๋œ ๊ฒฝ์šฐ์—๋งŒ ๊ฒฐํ•ฉ์„ ์‹คํ–‰ํ•˜๋ฏ€๋กœ ๋” ๋น ๋ฅด๋‹ค. => ํŒŒ๋ผ๋ฏธํ„ฐํ™” // ๋กœ๊น… + log.trace("got message : {}", m); +} +``` + +#### ๐Ÿˆ ๋กœ๊ทธ์˜ ์‹ ์†ํ•œ ๊ธฐ๋ก 1 : ํŒŒ๋ผ๋ฏธํ„ฐํ™” ๋กœ๊น… + +> ๋กœ๊ทธ ๋ฉ”์‹œ์ง€์˜ ๋‚ด์šฉ์„ ๋™์ ์œผ๋กœ ์ƒ์„ฑํ•˜๊ณ  ๋กœ๊น…ํ•˜๋Š” ๊ธฐ๋ฒ•,\*\* ์ด๋ฅผ ํ†ตํ•ด ๋กœ๊ทธ ๋ฉ”์‹œ์ง€์— ๋ณ€์ˆ˜๋‚˜ ๋ฐ์ดํ„ฐ ๊ฐ’์„ ์‰ฝ๊ฒŒ ํฌํ•จ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค.\*\* ํŒŒ๋ผ๋ฏธํ„ฐํ™” ๋กœ๊น…์€ ๋กœ๊ทธ ๋ฉ”์‹œ์ง€์— ๋ณ€์ˆ˜๋ฅผ ์ง์ ‘ ๊ฒฐํ•ฉํ•˜๋Š” ๋Œ€์‹ , **๋ณ€์ˆ˜ ๊ฐ’์„ ํฌํ•จํ•  ์œ„์น˜๋ฅผ ์ง€์ •ํ•˜๊ณ  ์‹ค์ œ ๊ฐ’์€ ๋กœ๊น… ํ•จ์ˆ˜์˜ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ์ „๋‹ฌํ•˜์—ฌ ๋กœ๊ทธ ๋ฉ”์‹œ์ง€๋ฅผ ์ƒ์„ฑ**ํ•œ๋‹ค. + +1. ์žฅ์  + +* ๊ฐ€๋…์„ฑ ํ–ฅ์ƒ: ๋กœ๊ทธ ๋ฉ”์‹œ์ง€ ๋‚ด์— ๋ณ€์ˆ˜ ๊ฐ’์„ ์ง์ ‘ ๊ฒฐํ•ฉํ•˜๋Š” ๋Œ€์‹  ๋ณ€์ˆ˜ ๊ฐ’์„ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ์ „๋‹ฌํ•˜๋ฏ€๋กœ ๋กœ๊ทธ ๋ฉ”์‹œ์ง€๊ฐ€ ๋” ์ฝ๊ธฐ ์‰ฝ๊ณ  ๋ช…ํ™•ํ•ด์ง„๋‹ค. +* ๋™์  ๋กœ๊น…: ๋กœ๊ทธ ๋ฉ”์‹œ์ง€์— ๋™์ ์œผ๋กœ ๋ณ€๊ฒฝ๋˜๋Š” ๋ณ€์ˆ˜ ๊ฐ’์„ ํฌํ•จํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด **ํŠน์ • ์ด๋ฒคํŠธ์˜ ์ƒํ™ฉ์— ๋งž๋Š” ๋ณ€์ˆ˜ ๊ฐ’์„ ๋กœ๊ทธ๋กœ ๋‚จ๊ธธ ์ˆ˜ ์žˆ๋‹ค.** +* ๋ณด์•ˆ ๊ฐ•ํ™”: ๋ฏผ๊ฐํ•œ ์ •๋ณด๋ฅผ ๋กœ๊ทธ๋กœ ๋‚จ๊ธธ ๋•Œ, ๊ฐ’์„ ์ง์ ‘ ๋…ธ์ถœํ•˜๋Š” ๋Œ€์‹  ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ์ „๋‹ฌํ•˜๋ฉด ๋ฏผ๊ฐํ•œ ์ •๋ณด๊ฐ€ ๋กœ๊ทธ ํŒŒ์ผ์— ๋‚จ์„ ๊ฐ€๋Šฅ์„ฑ์„ ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค. + +```java +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class LoggingExample { + private static final Logger logger = LoggerFactory.getLogger(LoggingExample.class); + + public static void main(String[] args) { + String username = "john_doe"; + int userId = 123; + + // ํŒŒ๋ผ๋ฏธํ„ฐํ™” ๋กœ๊น… + logger.info("User {} with ID {} logged in", username, userId); + } +} +``` + +#### ๐Ÿˆ๋กœ๊ทธ์˜ ์‹ ์†ํ•œ ๊ธฐ๋ก 2 : ๋น„๋™๊ธฐ ์–ดํŽœ๋” + +> ์–ดํŽœ๋”๋Š” ๋กœ๊น… ์‹œ์Šคํ…œ์—์„œ ๋กœ๊ทธ ๋ฉ”์‹œ์ง€๋ฅผ ์–ด๋””์— ๊ธฐ๋กํ• ์ง€๋ฅผ ๊ฒฐ์ •ํ•˜๋Š” ์—ญํ• ์„ ํ•˜๋Š” ์š”์†Œ๋กœ ๋กœ๊ทธ ๋ฉ”์‹œ์ง€๋Š” ์–ดํŽœ๋”๋ฅผ ํ†ตํ•ด ํŠน์ •ํ•œ ์ถœ๋ ฅ ๋Œ€์ƒ์— ๊ธฐ๋ก๋˜๊ฒŒ ๋œ๋‹ค. ๋ณดํ†ต ์–ดํŽœ๋”๋Š” ๋กœ๊ทธ๋ฅผ ์ฝ˜์†”์— ์ถœ๋ ฅํ•˜๊ฑฐ๋‚˜ ํŒŒ์ผ์— ๊ธฐ๋กํ•˜๋Š” ๋“ฑ์˜ ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค. + +๋กœ๊น… ์‹œ์Šคํ…œ์—์„œ ์–ดํŽœ๋”๋Š” ๋กœ๊ทธ ์ถœ๋ ฅ์˜ ๋Œ€์ƒ๊ณผ ํ˜•์‹์„ ์ง€์ •ํ•˜๋Š” ์—ญํ• ์„ ํ•˜๋ฉฐ, ๊ธฐ๋ณธ์ ์œผ๋กœ ํƒ‘์žฌ๋œ ๋กœ๊ทธ ์–ดํŽœ๋”๋Š” print ํ•จ์ˆ˜์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ํ˜ธ์ถœ์ž์˜ ์Šค๋ ˆ๋“œ์—์„œ ์‹คํ–‰ + +**๋น„๋™๊ธฐ ์–ดํŽœ๋”** + +> ํ˜„์žฌ ์‹คํ–‰ ์ค‘์ธ ์–ดํŽœ๋”๋Š” ํ˜„์žฌ ์‹คํ–‰ ์ค‘์ธ ์Šค๋ ˆ๋“œ๋ฅผ ๋ธ”๋กํ•˜์ง€ ์•Š๊ณ  ๋ฉ”์„ธ์ง€๋ฅผ ๊ธฐ๋กํ•œ๋‹ค. + +**๋น„๋™๊ธฐ ์–ดํŽœ๋”์˜ ์ž‘๋™์›๋ฆฌ** + +1. ๋กœ๊ทธ ๋ฉ”์‹œ์ง€๋Š” ๋ฉ”์ธ ์Šค๋ ˆ๋“œ์—์„œ ๋น„๋™๊ธฐ ์–ดํŽœ๋”์—๊ฒŒ ์ „๋‹ฌ +2. `๋น„๋™๊ธฐ ์–ดํŽœ๋”`๋Š” ๋กœ๊ทธ ๋ฉ”์‹œ์ง€๋ฅผ ๋กœ๊ทธ ํ(๋˜๋Š” ๋ฒ„ํผ)์— ์ €์žฅํ•œ๋‹ค. ์ด๋•Œ ํ๋Š” ๋ณ„๋„์˜ ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์Šค๋ ˆ๋“œ์—์„œ ๊ด€๋ฆฌ๋œ๋‹ค. +3. `๋ฐฑ๊ทธ๋ผ์šด๋“œ ์Šค๋ ˆ๋“œ`๋Š” ๋กœ๊ทธ ํ์— ์ €์žฅ๋œ ๋ฉ”์‹œ์ง€๋ฅผ ์‹ค์ œ ์ถœ๋ ฅ ๋Œ€์ƒ(์ฝ˜์†”, ํŒŒ์ผ, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋“ฑ)์œผ๋กœ ์ „๋‹ฌํ•˜๋ฉฐ, ์ด ์ž‘์—…์€ ๋ฉ”์ธ ์Šค๋ ˆ๋“œ์˜ ์ž‘์—…๊ณผ ๋ณ„๊ฐœ๋กœ ์ฒ˜๋ฆฌ๋œ๋‹ค. +4. ์ด๋ฅผ ํ†ตํ•ด ๋ฉ”์ธ ์Šค๋ ˆ๋“œ๋Š” ๋กœ๊ทธ ์ถœ๋ ฅ ์ž‘์—…์— ๋Œ€ํ•œ ์ง€์—ฐ์„ ๊ฒช์ง€ ์•Š๊ณ  ๋‹ค๋ฅธ ์ž‘์—…์„ ๊ณ„์† ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค. + +**์žฅ์ ** + +1. ๋กœ๊ทธ ์ถœ๋ ฅ ์ž‘์—…์˜ **์ง€์—ฐ์ด ๋ฐœ์ƒํ•ด๋„ ๋ฉ”์ธ ์Šค๋ ˆ๋“œ์˜ ์„ฑ๋Šฅ์— ์˜ํ–ฅ์„ ๋œ ์ค€๋‹ค.** +2. ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์Šค๋ ˆ๋“œ์—์„œ ๋กœ๊ทธ ์ถœ๋ ฅ ์ž‘์—…์„ ๊ด€๋ฆฌํ•˜๋ฏ€๋กœ, ๋กœ๊น… ์ž‘์—…์œผ๋กœ ์ธํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋ฉˆ์ถค ํ˜„์ƒ์„ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ๋‹ค. +3. ๋กœ๊ทธ ์ถœ๋ ฅ ์ž‘์—…์ด ๋น„๋™๊ธฐ์ ์œผ๋กœ ์ฒ˜๋ฆฌ๋˜๋ฏ€๋กœ ์ „์ฒด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค. + +**์ผ๊ด„ ์–ดํŽœ๋”** + +> ๋กœ๊ทธ ๋ฉ”์‹œ์ง€๋ฅผ ๋””์Šคํฌ์— ๊ธฐ๋กํ•˜๊ธฐ ์•ž์„œ ์šฐ์„  ๋ฉ”๋ชจ๋ฆฌ์— ๋ณด๊ด€ํ•œ๋‹ค. ์“ฐ๊ธฐ ์ฒ˜๋ฆฌ๋Ÿ‰ ์—ญ์‹œ ์ฆ๊ฐˆํ•œ๋‹ค. + +1. ์šด์˜์ฒด์ œ์˜ ํŽ˜์ด์ง€ ์บ์‹œ ์—ญ์‹œ ๋ฒ„ํผ์ฒ˜๋Ÿผ ๋™์ž‘ํ•ด์„œ ๋กœ๊ทธ ์ฒ˜๋ฆฌ๋Ÿ‰์„ ํ–ฅ์ƒํ•˜๋Š”๋ฐ ๋„์›€์ด ๋œ๋‹ค. +2. ๋น„๋™๊ธฐ์™€ ์ผ๊ด„์“ฐ๊ธฐ๋Š” ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ์ง€๋งŒ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ํฌ๋ž˜์‹œ๊ฐ€ ๋ฐœ์ƒํ•˜๋ช€ ๋กœ๊ทธ ๋ฉ”์„ธ์ง€๊ฐ€ ๊ธฐ๋ก๋˜์ง€ ์•Š๋Š” ์ผ๋„ ์ƒ๊ธด๋‹ค. + +### 4. ๋ฏผ๊ฐํ•œ ๋ฐ์ดํ„ฐ๋Š” ๋กœ๊ทธ์— ๊ธฐ๋กํ•˜์ง€ ๋ง์ž + +> ๋‹น์—ฐํ•œ ์–˜๊ธฐ๊ฐ™์ง€๋งŒ ํ”ํžˆ ์‹ค์ˆ˜ ํ•˜๋Š” ๋ถ€๋ถ„์œผ๋กœ URL์ด๋‚˜ HTTP ์‘๋‹ต์„ ์•„๋ฌด ์ƒ๊ฐ ์—†์ด ๋กœ๊ทธ์— ๊ธฐ๋กํ•˜๋ฉด ์•ˆ์ „ ์žฅ์น˜๊ฐ€ ์—†๋Š” ๋กœ๊ทธ ์ˆซ์ง‘๊ธฐ๋Š” ์ž์นซ ๊ฐœ์ธ์ •๋ณด ๋…ธ์ถœ ๋  ์ˆ˜ ์žˆ๋‹ค. diff --git "a/developLog/book/onboarding/_ \355\225\204\353\217\205 \352\260\234\353\260\234\354\236\220 \354\230\250\353\263\264\353\224\251 \352\260\200\354\235\264\353\223\234 1\354\236\245_.md" "b/developLog/book/onboarding/_ \355\225\204\353\217\205 \352\260\234\353\260\234\354\236\220 \354\230\250\353\263\264\353\224\251 \352\260\200\354\235\264\353\223\234 1\354\236\245_.md" new file mode 100644 index 0000000..a85c54d --- /dev/null +++ "b/developLog/book/onboarding/_ \355\225\204\353\217\205 \352\260\234\353\260\234\354\236\220 \354\230\250\353\263\264\353\224\251 \352\260\200\354\235\264\353\223\234 1\354\236\245_.md" @@ -0,0 +1,137 @@ +--- +description: 1์žฅ์„ ์ฝ๊ณ  ์ •๋ฆฌ +--- + +# ํ•„๋… ๊ฐœ๋ฐœ์ž ์˜จ๋ณด๋”ฉ ๊ฐ€์ด๋“œ 1์žฅ + +## ์ฝ๊ฒŒ ๋œ ๊ณ„๊ธฐ + +> ํŠธ์œ„ํ„ฐ๋ฅผ ์‹œ์ž‘ํ–ˆ๋‹ค. sns๋Š” ์ž˜ ์•ˆํ–ˆ๋Š”๋ฐ ํŠธ๋ Œ๋“œ๋ฅผ ์ฝ๊ณ  ์ข‹์€ ๊ฐœ๋ฐœ์ž๋ถ„๋“ค์ด ํŠธ์œ„ํ„ฐ์—์„œ ํ™œ๋™์„ ๋งŽ์ด ํ•˜๊ธฐ์— ๊ฐœ๋ฐœ์šฉ์œผ๋กœ 1๊ฐœ์˜ ๊ณ„์ •์„ ๋งŒ๋“ค์—ˆ๋‹ค. ๊ฑฐ๊ธฐ์„œ ์ถ”์ฒœํ•˜๋Š” ์ฑ…๋“ค ์ค‘์— **์‹œ๋‹ˆ์–ด ๊ฐœ๋ฐœ์ž์˜ ์ž”์†Œ๋ฆฌ**๋ž‘ ์‹ค๋ฌด์— ๋Œ€ํ•ด์„œ ์•Œ ์ˆ˜ ์žˆ๋‹ค๊ณ  ํ•ด์„œ ๊ต๋ณด๋ฌธ๊ณ ์— ๊ฐ€์„œ ๊ตฌ๋งคํ–ˆ๋‹ค. ์•„์ง 2์žฅ๊นŒ์ง€ ๋ฐ–์— ๋ชป ์ฝ์—ˆ๋Š”๋ฐ ์žฌ๋ฏธ์žˆ๊ณ  ๋ชจ๋ฅด๋Š” ๋‚ด์šฉ๋„ ์•Œ๊ฒŒ ๋˜์–ด ์žŠ์ง€ ์•Š๊ณ  ์ž์ฃผ ๋ณด๊ธฐ ์œ„ํ•ด ์ ์–ด๋ณด๊ณ ์ž ์ž‘์„ฑํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค. + +> ํ˜น์‹œ ๋ฌธ์ œ๊ฐ€ ์žˆ๋‹ค๋ฉด ์‚ญ์ œํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค! + +![](https://velog.velcdn.com/images/prettylee620/post/9079b4ef-9a79-4676-9b3e-da4a57f0c3d2/image.png) + +## \[1์žฅ] ์—ฌ์ •์„ ์‹œ์ž‘ํ•˜๋ฉฐ, ๊ฐœ๋ฐœ์ž๋กœ์„œ ์ฒซ ์ถœ๋ฐœ ์•ž์œผ๋กœ ์–ด๋–ค ๊ธธ์ด ํŽผ์ณ์งˆ๊นŒ? + +### ๐Ÿ“Œ ๋ชฉํ‘œ๋ฅผ ์„ธ์šฐ์ž + +#### 1. ๊ธฐ์ˆ  ์ง€์‹ + +* ์ปดํ“จํ„ฐ ๊ณผํ•™์˜ ๊ธฐ์ดˆ ์ง€์‹์„ ๊ฐ–์ถ”์ž + +> ๐Ÿ€ **ํ†ตํ•ฉ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ(IDE), ๋นŒ๋“œ ์‹œ์Šคํ…œ, ๋””๋ฒ„๊ฑฐ, ํ…Œ์ŠคํŠธ ํ”„๋ ˆ์ž„์›Œํฌ ๋“ฑ์„ ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉํ•˜๋Š”์ง€ ์•Œ์•„์—ฌ ํ•˜๋ฉฐ, ์ง€์†์  ํ†ตํ•ฉ, ์ง€ํ‘œ ๋ฐ ๋ชจ๋‹ˆํ„ฐ๋ง, ์„ค์ •, ํŒจํ‚ค์ง• ์‹œ์Šคํ…œ ๋“ฑ๋„ ๋Šฅ์ˆ™ํžˆ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค.** + +* ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋Š” ์‚ฌ์ „์— ๋งŒ๋“ค์–ด ๊ฐœ์„ ํ•ด์•ผ ํ•˜๋ฉฐ, ์•„ํ‚คํ…์ฒ˜ ์ฐจ์›์—์„œ ๊ฒฐ์ •์„ ๋‚ด๋ฆด ๋•Œ๋Š” ์šด์˜์ธก๋ฉด๋„ ๊ณ ๋ ค\ + + +#### 2. ์‹คํ–‰๋ ฅ + +* ์ฝ”๋“œ๋ฅผ ์ด์šฉํ•ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•จ์œผ๋กœ์จ ๊ฐ€์น˜๋ฅผ ๋งŒ๋“ค์–ด๋‚ด๋ฉฐ ์—…๋ฌด์™€ ๋น„์ฆˆ๋‹ˆ์Šค ๊ฐ„์˜ ์—ฐ๊ฒฐ๊ณ ๋ฆฌ๋„ ์ดํ•ด +* ์ฝ”๋“œ ์ž‘์„ฑ + ํ…Œ์ŠคํŠธ, ์ฝ”๋“œ ๋ฆฌ๋ทฐ + ๊ธด๊ธ‰ ๋Œ€์‘ ์—…๋ฌด ๊ต๋Œ€ ์ง„ํ–‰ + ์šด์˜ ์ด์Šˆ ๋””๋ฒ„๊น… + +> ๐Ÿ€ **์ฃผ๋„์ ์ด๋ฉด์„œ ๋ˆ„๊ตฐ๊ฐ€์—๊ฒŒ๋Š” ์˜์ง€ํ•  ๋งŒํ•œ ์‚ฌ๋žŒ์ด ๋ผ์•ผ ํ•œ๋‹ค.** + +#### 3. ์˜์‚ฌ์†Œํ†ต + +* ๋ฌธ์„œ๋Š” ๋ฌผ๋ก ์ด๊ฑฐ๋‹ˆ ๊ตฌ๋‘๋กœ๋„ ๋ช…ํ™•ํ•˜๊ฒŒ ์†Œํ†ต +* ํ”ผ๋“œ๋ฐฑ์„ ํšจ๊ณผ์ ์œผ๋กœ ์ฃผ๊ณ ๋ฐ›์œผ๋ฉฐ ์ ๊ทน์ ์œผ๋กœ ๋„์›€์„ ์š”์ฒญํ•˜๊ณ  ๋ชจํ˜ธํ•œ ์ƒํ™ฉ์—์„œ๋Š” ๋ช…ํ™•ํ•œ ์ •๋ณด๋ฅผ ์š”๊ตฌ ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค. + +#### 4. ๋ฆฌ๋”์‰ฝ + +* ๋ฒ”์œ„๊ฐ€ ์ž˜ ์ •์˜๋œ ์ž‘์—…์„ ๋…๋ฆฝ์ ์œผ๋กœ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•˜๋ฉฐ, ์‹ค์ˆ˜๋กœ๋ถ€ํ„ฐ ๋น ๋ฅด๊ฒŒ ๋ฐฐ์šธ ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค. +* ๋ณ€ํ™”์™€ ๋ชจํ˜ธ์„ฑ์„ ์ž˜ ์ฒ˜๋ฆฌํ•˜๋ฉฐ ํ”„๋กœ์ ํŠธ์™€ ๋ถ„๊ธฐ๋ณ„ ๊ณ„ํš ์ˆ˜๋ฆฝ์— ์ ๊ทน์  ์ž„ํ•ด์•ผ ํ•œ๋‹ค.\ + + +### ๐Ÿ“Œ ์ดˆ๋ณด์ž + +#### 1. ์˜จ๋ณด๋”ฉ ํšŒ์˜ + +> ๐Ÿ€ ํšŒ์‚ฌ์™€ ํŒ€ ๊ทธ๋ฆฌ๊ณ  ์—…๋ฌด ๋ฐฉ์‹์— ์ต์ˆ™ํ•ด์ ธ์•ผ ํ•˜๋ฉฐ ์˜จ๋ณด๋”ฉ ํšŒ์˜๋„ ์ฐธ์„ํ•ด์•ผ ํ•œ๋‹ค. + +* ํšŒ์‚ฌ๊ฐ€ OT๊ฐ€ ์—†๋‹ค๋ฉด, ์ง์† ํŒ€์žฅ์—๊ฒŒ ์กฐ์ง๋„(๋‹ด๋‹น ์—„๋ฌด, ์ธ๋ ฅ ๊ตฌ์„ฑ, ๋ณด๊ณ  ์ฒด๊ณ„ ๋“ฑ), ํƒ€ ๋ถ€์„œ ์•ˆ๋‚ด, ํ˜‘์—… ๊ด€๊ณ„ ๋“ฑ์„ ์„ค๋ช…ํ•ด๋‹ฌ๋ผ๊ณ  ์š”์ฒญ ํ›„ ๋ฉ”๋ชจํ•ด๋‘์ž. +* ๊ฐœ๋ฐœํ™˜๊ฒฝ๊ณผ ์‹œ์Šคํ…œ ์ ‘๊ทผ ๊ถŒํ•œ์„ ์…‹์—…ํ•˜๊ณ  ๋ณดํŽธ์ ์ธ ํŒ€์˜ ์ ˆ์ฐจ๋“ค๊ณผ ํšŒ์˜ ์ผ์ • ํŒŒ์•… +* ๋ฌธ์„œ๋„ ์ฝ๊ณ  ํŒ€์›๋“ค๊ณผ ์†Œํ†ต๋„ ํ•ด์•ผํ•˜๋ฉฐ, ๋ฌธ์„œ ์˜ค๋ฅ˜๋ฅผ ์ˆ˜์ •ํ•˜๋ฉฐ ํŒ€์— ๊ธฐ์—ฌ ํ•ด์•ผํ•œ๋‹ค. + +#### 2. ์…‹์—… ๊ณผ์ • ๋ฌธ์„œ๋กœ ๋‚จ๊ฒจ๋‘์ž + +* ์ถ”๊ฐ€์ ์ธ ์˜จ๋ณด๋”ฉ ์ ˆ์ฐจ(์‹œ์Šคํ…œ ์ ‘๊ทผ ๊ถŒํ•œ ํš๋“, ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์˜ ์…‹์—…, ์ฝ”๋“œ์˜ ์ฒดํฌ์•„์›ƒ ๋ฐ ๋นŒ๋“œ)๋“ฑ์„ ๊ฐ–์ถฐ์ง€์ง€ ์•Š์€ ํšŒ์‚ฌ๋ผ๋ฉด, ๋‚ด๊ฐ€ ์ง์ ‘ ๋งŒ๋“ค์–ด๋ณด์ž. + +#### 3. ํ˜„ ์กฐ์ง์˜ ์—…๋ฌด ์ง„ํ–‰ ์ ˆ์ฐจ๋ฅผ ๊ฐœ์„ ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์ดํ•ดํ•˜๋Š” ๊ฒƒ์ด๋‹ค. + +* ์ž‘์€ ๊ทœ๋ชจ์˜ ์ž‘์—…๋ถ€ํ„ฐ ํ•ด๋ณด์ž +* ์ฃผ์„ ์ˆ˜์ • ๊ฐ™์€ ์†Œ์†Œํ•œ ์ž‘์—…๋„ ์ข‹๋‹ค. + +#### 4. ์ฝ”๋“œ ํŽธ์ง‘๊ธฐ๋‚˜ IDE๋ฅผ ์…‹์—…ํ•˜์ž. + +* IDE๋Š” ํŒ€์ด ์“ฐ๋Š” ๊ฒƒ์„ ์‚ฌ์šฉํ•˜๋ฉฐ, ์ต์ˆ™ํ•˜์ง€ ์•Š๋‹ค๋ฉด ์˜จ๋ผ์ธ ํŠœํ† ๋ฆฌ์–ผ์„ ์ฐพ์•„๋ณด์ž. +* ํ•„์š”ํ•˜๋‹ค๋ฉด ํŒ€์—์„œ ์–ด๋–ค ์ฝ”๋”ฉ ๊ทœ์น™์„ ์„ธ์› ๋Š”์ง€ ๊ทธ๋ฆฌ๊ณ  ์–ด๋–ป๊ฒŒ ์ ์šฉํ•˜๋ฉด ๋˜๋Š”์ง€ ๋ฌผ์–ด๋ณด๋Š” ํŽธ์ด ์ข‹๋‹ค. + +#### 5. ํŒ€์žฅ์ด ์Šคํƒ ๋“œ์—… ๋ฏธํŒ…, ์Šคํ”„๋ฆฐํŠธ ๊ณ„ํš, ํšŒ๊ณ , ์ „์‚ฌ ํšŒ์˜ ๋“ฑ ํŒ€์ด๋‚˜ ํšŒ์‚ฌ ํšŒ์˜์— ์ถ”๊ฐ€ํ•ด๋’€๋Š”์ง€ ํ™•์ธํ•˜์ž + +* ์ผ๋Œ€์ผ ํšŒ์˜ ์ œ๋„๊ฐ€ ์žˆ๋‹ค๋ฉด ํŒ€์žฅ์—๊ฒŒ ์ผ๋Œ€์ผ ํšŒ์˜ ์ผ์ • ์žก์•„๋‹ฌ๋ผ๊ณ  ํ•˜์ž. + +### ๐Ÿ“Œ ์งˆํ’ ๋…ธ๋„์˜ ์„ฑ์žฅ + +#### 1. ๋ชจ๋ฅด๋Š” ์ ์ด ์žˆ๋‹ค๋ฉด ์งˆ๋ฌธํ•˜๊ณ , ์ž‘์—…์— ๋Œ€ํ•ด ์ž์ฃผ ๋ฆฌ๋ทฐํ•ด์ค„ ๊ฒƒ์„ ํŒ€์—๊ฒŒ ์š”์ฒญํ•˜์ž. + +* ๊ธฐ์ดˆ ์ž‘์—…์„ ์™„๋ฃŒํ–ˆ๋‹ค๋ฉด ๊ธฐ์กด์˜ ์ฝ”๋“œ๋ฒ ์ด์Šค์—์„œ ์ž‘์—…ํ•œ๋‹ค. +* ๋ชจ๋ฅด๋Š” ์ ์ด ์žˆ๋‹ค๋ฉด ์งˆ๋ฌธํ•˜๊ณ , ์ž‘์—…์— ๋Œ€ํ•ด ์ž์ฃผ ๋ฆฌ๋ทฐํ•ด์ค„ ๊ฒƒ์„ ํŒ€์—๊ฒŒ ์š”์ฒญํ•˜์ž. + +#### 2. ํ•™์Šต : ์ฝ”๋“œ๋ฅผ ๋นŒ๋“œ, ํ…Œ์ŠคํŠธ, ๋ฐฐํฌํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ž˜ ์‚ดํ‘œ๋ณด์ž + +* ํ’€ ๋ฆฌํ€˜์ŠคํŠธ, ์ฝ”๋“œ๋ฆฌ๋ทฐ๋ฅผ ์ฝ์–ด๋ณด์ž. +* ๊พธ์ค€ํ•œ ํ•™์Šต ํ•„์š” + +#### 3. ํŒ€์žฅ์€ ์ฃผ๋กœ ์ง„์ฒ™์‚ฌํ•ญ์„ ํŒŒ์•…ํ•˜๊ธธ ์›ํ•˜๋ฏ€๋กœ ์–ด๋–ค ๋ฐฉ์‹์œผ๋กœ ํ˜„ ์ƒํ™ฉ์„ ๊ณต์œ ํ• ์ง€ ๋ฌผ์–ด๋ณด์ž + + + +#### 4. ์Šคํ”„๋ฆฐํŠธ ๊ณ„ํš ํšŒ์˜ ์‹œ์ž‘ํ•˜๋Š” ์ฒซ ๋ฒˆ์งธ ๊ณ„ํš ํšŒ์˜ ๋“ฑ์— ์ฐธ์—ฌ ์‹œ, ํšŒ์˜์—์„œ ๋กœ๋“œ๋งต์— ๋Œ€ํ•œ ๊ฐœ์š”๋‚œ ๊ฐœ๋ฐœ ๊ณ„ํš ์ ˆ์ฐจ์— ๋Œ€ํ•ด ๋ฌผ์–ด๋ณด์ž + + + +### ๐Ÿ“Œ ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ์—ฌ์ž + +> ๋” ํฐ ๊ทœ๋ชจ๋‚˜ ํฐ ์ž‘์—…์ด๋‚˜ ๊ธฐ๋Šฅ ๊ตฌํ˜„ ์‹œ ์ฐธ์—ฌํ•˜๊ฒŒ ๋˜๋ฉด ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ์—ฌ์ž + +#### 1. ์†์‰ฝ๊ฒŒ ์šด์˜ํ•  ์ˆ˜ ์žˆ๋Š” ํ”„๋กœ๋•์…˜ ์ˆ˜์ค€์˜ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๋ฒ•, ์˜์กด์„ฑ์„ ์ ์ ˆํžˆ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•, ๊น”๋”ํ•œ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ฐฐ์šฐ์ž + +#### 2. ๋‹ค๋ฅธ ํŒ€์›์„ ๋•๊ณ  ๋„์›€๋ฐ›์œผ๋ฉฐ ํ”ผ๋“œ๋ฐฑ์„ ํ•˜๋ฉฐ ๋ฐ›์œผ๋ฉฐ, ํ—ท๊ฐˆ๋ฆฌ๋Š” ๋ฌธ์ œ๊ฐ€ ์žˆ์œผ๋ฉฐ ํ•ญ์ƒ ์งˆ๋ฌธ์„ ํ•˜์ž + +#### 3. ํŒ€ ๊ณ„ํš์— ์ฐธ์—ฌํ•˜๊ณ  ํŒ€์žฅ๊ณผ ํ˜‘์—…ํ•ด OKR(๋ชฉํ‘œ์™€ ํ•ต์‹ฌ ๊ฒฐ๊ณผ)๋ฅผ ์„ค์ •ํ•˜์ž + + + +### ๐Ÿ“Œ ์šด์˜์˜ ๋ฐ”๋‹ค + +> ์ฐธ์—ฌํ•˜๋Š” ์ž‘์—…์˜ ๊ทœ๋ชจ๊ฐ€ ์ ์  ์ปค์งˆ ์ˆ˜๋ก ์ฝ”๋“œ๊ฐ€ ์‚ฌ์šฉ์ž์—๊ฒŒ ์ „๋‹ฌ๋˜๋Š” ๊ณผ์ •์— ๋Œ€ํ•ด ๋” ๋งŽ์ด ์•Œ๊ฒŒ ๋  ๊ฒƒ์ด๋‹ค. + +#### 1. ์ฝ”๋“œ ์ „๋‹ฌ ๊ณผ์ •์—์„œ๋Š” ํ…Œ์ŠคํŠธ, ๋นŒ๋“œ, ๋ฆด๋ฆฌ์Šค, ๋ฐฐํฌ, ๋กค์•„์›ƒ ๋“ฑ ๋งŽ์€ ์ผ์ด ์ผ์–ด๋‚œ๋‹ค. ์Šคํ‚ฌ ํ•„์š” + +#### 2. ๋ณ€๊ฒฝ์‚ฌํ•ญ ๋กค์•„์›ƒ ํ›„์—๋Š” ํŒ€์ด ๋งŒ๋“  ์†Œํ”„ํŠธ์›จ์–ด ์šด์˜ํ•ด์•ผ ํ•œ๋‹ค. + +* ๊ฐ์ข… ์ง€ํ‘œ, ๋กœ๊ทธ, ์ถ”์  ๋„๊ตฌ ๋“ฑ์„ ์ด์šฉํ•ด ์‹คํ–‰ ์ค‘์ธ ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ๋””๋ฒ„๊น…ํ•˜๊ฒŒ ๋  ๊ฒƒ์ด๋‹ค. +* ์–ด๋Š ์‹œ์ ์—๋Š” ๊ธด๊ธ‰๋Œ€์‘ ์˜จ์ฝœ ๋Œ€์‘ ์—…๋ฌด์—๋„ ํ•ฉ๋ฅ˜ํ•˜๊ฒŒ ๋  ๊ฒƒ์ด๋‹ค. +* ์†Œํ”„ํŠธ์›จ์–ด ๋ณดํ˜ธ ๋ฐฉ๋ฒ•๋„ ๋ฐฐ์šธ ๊ฒƒ์ด๋‹ค.\ + + +### ๐Ÿ“Œ ๋Šฅ๋ ฅ์ž์˜ ๋•… + +> ์šด์˜ ํ›„์—๋Š” ํŒ€์€ ์šฐ๋ฆฌ๊ฐ€ ์†Œ๊ทœ๋ชจ ํ”„๋กœ์ ํŠธ ์ •๋„๋Š” ์Šค์Šค๋กœ ์ฃผ๋„ํ•  ์ˆ˜ ์žˆ๋Š” ์—ญ๋Ÿ‰์„ ๊ฐ–์ท„๋‹ค๊ณ  ์ƒ๊ฐํ•  ๊ฒƒ์ด๋‹ค. + +#### 1. ๊ธฐ์ˆ  ์„ค๊ณ„ ๋ฌธ์„œ๋ฅผ ์ž‘์„ฑํ•˜๊ณ  ํ”„๋กœ์ ํŠธ ๊ณ„ํš ์ˆ˜๋ฆฝ๋„ ๊ฑฐ๋“ค์–ด์•ผ ํ•œ๋‹ค. + +* ์ฒซ ์„ค๊ณ„์— ์•ˆ์ฃผํ•˜์ง€ ๋ง๊ณ  ํŠธ๋ ˆ์ด๋“œ์˜คํ”„๋ฅผ ์ƒ๊ฐํ•˜๊ณ  ์‹œ๊ฐ„์ด ์ง€๋‚˜๋„ ๋ฐœ์ „์„ ์ง€์†ํ•  ์ˆ˜ ์žˆ๋Š” ์‹œ์Šคํ…œ์„ ์œ„ํ•œ ๊ณ„ํš์„ ์„ธ์šฐ์ž + +#### 2. ๋ชจ๋“  ๊ฒƒ์„ ์ƒˆ๋กœ ์žฌ์ž‘์„ฑ ์‹œ๋„๋Š” ํ•˜์ง€ ๋งˆ๋Š” ๊ฒƒ์„ ์ถ”์ฒœํ•œ๋‹ค. + +* ์•„ํ‚คํ…์ฒ˜, ๋นŒ๋“œ ๋ฐ ๋ฐฐํฌ ์‹œ์Šคํ…œ, ํ…Œ์ŠคํŠธ ํ™˜๊ฒฝ์˜ ๊ฒฐํ•จ ๋“ฑ์ด ๋ˆˆ์— ๋„๊ฒŒ ๋˜๋ฉฐ, ๊ทธ๋ ‡๊ฒŒ ์ผ์ƒ์ ์ธ ์—…๋ฌด ๊ทธ๋ฆฌ๊ณ  ์œ ์ง€๋ณด์ˆ˜์™€ ๋ฆฌํŒฉํ„ฐ๋ง ์ž‘์—… ์‚ฌ์ด์— ๊ท ํ˜•์„ ์ฐพ๋Š” ๋ฐฉ๋ฒ•์„ ๋ฐฐ์šด๋‹ค. + +#### 3. ํŒ€์žฅ์—๊ฒŒ ์˜๊ฒฌ ๊ณต์œ  + +#### 4. ์žฅ๊ธฐ์ ์ธ ๋ชฉํ‘œ ์„ค์ • ํ›„ ์„ฑ๊ณผ ๋ฆฌ๋ทฐํ•˜๋ฉฐ, ๋™๋ฃŒ๋“ค์—๊ฒŒ ํ”ผ๋“œ๋ฐฑ ๋ฐ›์ž. + +### ๐Ÿ“Œ ์ •๋ฆฌํ•˜๋ฉฐ + +> ์ด ์ฑ…... ์ทจ์—…ํ•˜๊ณ  ๋ณด๋‹ˆ ์‹ ์ž…์€ ์ดˆ๋ณด์ž, ์งˆํ’ ๋…ธ๋„์˜ ์„ฑ์žฅ ์ด๊ฑฐ๋ž‘ ๋น„์Šทํ•˜๋‹ค๋Š” ๊ฒƒ!!! + ์ค‘๊ฐ„ ์ค‘๊ฐ„ ์ƒํ™ฉ ๊ณต์œ ๋Š” ๊ผญ ํ•„์š”ํ•˜๋‹ค!!! diff --git "a/developLog/book/onboarding/_ \355\225\204\353\217\205 \352\260\234\353\260\234\354\236\220 \354\230\250\353\263\264\353\224\251 \352\260\200\354\235\264\353\223\234 2\354\236\245_.md" "b/developLog/book/onboarding/_ \355\225\204\353\217\205 \352\260\234\353\260\234\354\236\220 \354\230\250\353\263\264\353\224\251 \352\260\200\354\235\264\353\223\234 2\354\236\245_.md" new file mode 100644 index 0000000..5251e31 --- /dev/null +++ "b/developLog/book/onboarding/_ \355\225\204\353\217\205 \352\260\234\353\260\234\354\236\220 \354\230\250\353\263\264\353\224\251 \352\260\200\354\235\264\353\223\234 2\354\236\245_.md" @@ -0,0 +1,284 @@ +--- +description: ํ•„๋… ๊ฐœ๋ฐœ์ž ์˜จ๋ณด๋”ฉ ๊ฐ€์ด๋“œ 2์žฅ +--- + +# ํ•„๋… ๊ฐœ๋ฐœ์ž ์˜จ๋ณด๋”ฉ ๊ฐ€์ด๋“œ 2์žฅ + +![](https://velog.velcdn.com/images/prettylee620/post/cf77a62d-212d-4c66-a49c-685fa3c59a98/image.png) + +> ํ•„๋… ๊ฐœ๋ฐœ์ž ์˜จ๋ณด๋”ฉ ๊ฐ€์ด๋“œ์„ ์ฝ๊ณ  ์ •๋ฆฌํ•˜๋Š” ๊ธ€์ด๋ฉฐ, ํ˜น์‹œ ๋ฌธ์ œ๊ฐ€ ๋˜๋ฉด ์‚ญ์ œํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. + +## ์—ญ๋Ÿ‰์„ ๋†’์ด๋Š” ์˜์‹์  ๋…ธ๋ ฅ - ๊ฒฝ์Ÿ์ž๊ฐ€ ๊ฐ–์ถ˜ ๊ฐœ๋ฐœ์ž๊ฐ€ ๋˜๊ธฐ ์œ„ํ•ด ์Šค์Šค๋กœ ํ•ด์•ผ ํ•  ์ผ + +### 1. ๋“ค์–ด๊ฐ€๋ฉฐ + +> ํ•™์Šต์„ ์œ„ํ•œ ๊ฐ€๋ฅด์นจ์ด๋ผ๋Š” ์ฑ…์—์„œ `๋Šฅ์ˆ™ํ•จ`์„ 4๊ฐ€์ง€ ๋‹จ๊ณ„๋กœ ๋‚˜๋ˆ„์–ด ์˜๋ฏธ ํ–ˆ๋‹ค. + +1. ๋ฌด์˜์‹์  ๋Šฅ๋ ฅ ๋ถ€์กฑ +2. ์˜์‹์  ๋Šฅ๋ ฅ ๋ถ€์กฑ +3. ์˜์‹์  ๋Šฅ์ˆ™ +4. ๋ฌด์˜์‹์  ๋Šฅ์ˆ™ + +> + +๋ชจ๋“  ์—”์ง€๋‹ˆ์–ด๋Š” ์˜์‹์ ์ด๋“  ๋ฌด์˜์‹์ ์ด๋“  ๋Šฅ๋ ฅ ๋ถ€์กฑ ๋‹จ๊ณ„์—์„œ ์‹œ์ž‘ํ•˜๋ฉฐ, ๋ชฉํ‘œ๋Š” ์ตœ๋Œ€ํ•œ ๋นจ๋ฆฌ ์˜์‹์  ๋Šฅ์ˆ™ ๋‹จ๊ณ„๋กœ ์ ‘์–ด๋“œ๋Š” ๊ฒƒ์ด ์ข‹๋‹ค. ๋˜ํ•œ ์ด ์žฅ์—์„œ ์ž๊ธฐ์ฃผ๋„ ํ•™์Šต์ด๋ผ๋Š” ์Šต๊ด€ ๋ฐฉ๋ฒ•๊ณผ ๊ท ํ˜• ์œ ์ง€, ๊ฐ€๋ฉด ์ฆํ›„๊ตฐ, ๋”๋‹ ํฌ๋ฃจ๊ฑฐ ํšจ๊ณผ์— ๋Œ€ํ•ด์„œ๋„ ๋‹ค๋ฃฌ๋‹ค. ์Šค์Šค๋กœ์— ๋Œ€ํ•œ ๋ถˆ์‹ ์ด๋‚˜ ๊ณผ์‹ ์— ๋น ์ง€์ง€ ์•Š๋„๋ก ์ฃผ์˜ํ•˜๋ฉฐ ์ž๊ธฐ์ฃผ๋„ ํ•™์Šต์„ ๊ณ„์†ํ•˜๊ณ  ํšจ์œจ์ ์ธ ์งˆ๋ฌธ์„ ํ•˜๋‹ค ๋ณด๋ฉด ์˜์‹์  ๋Šฅ์ˆ™ํ•จ์„ ๋น ๋ฅด๊ฒŒ ๊ฐ–์ถœ ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋‹ค. + +### 2. ์‹ค์ „์— ์•ž์„œ ์ตํ˜€์•ผ ํ•  ์ž๊ธฐ์ฃผ๋„ ํ•™์Šต ๋ฐฉ์•ˆ + +* ํ•™์Šต์— ๋ชจ๋“  ๋ฐฉ๋ฒ•์„ ๋™์‹œ์— ์‹œ๋„ํ•ด์„œ๋Š” ์•ˆ ๋œ๋‹ค. +* ์ง€์†์ ์ธ ์„ฑ์žฅ๋„ ์ค‘์š”ํ•˜์ง€๋งŒ ๊นจ์–ด ์žˆ๋Š” ๋‚ด๋‚ด ์ผ๋งŒ ํ•˜๋Š” ๊ฒƒ์€ ๊ฑด๊ฐ•์„ ํ•ด์น˜๋ฏ€๋กœ ๊ฐœ์ธ ์‹œ๊ฐ„์„ ๋ฐ˜๋“œ์‹œ ํ™•๋ณดํ•˜๊ธฐ ๋ฐ”๋ž€๋‹ค. + +### 3. ๋ณธ๊ฒฉ์ ์ธ ํ•™์Šต์„ ์œ„ํ•œ ๋ชธํ’€๊ธฐ + +> ์ด ์ดˆ๋ฐ˜ ๊ณผ์ •์€ ์ง€๋ฃจํ•  ์ˆ˜๋„ ์žˆ๊ณ  ๋‹ค๋ฅธ ์‚ฌ๋žŒ์€ ๋ฐ”์œ๋ฐ ๋งˆ์น˜ ์ž์‹ ๋งŒ ํ•œ๊ฐ€ํ•œ ๊ฒƒ ๊ฐ™์€ ๋Š๋‚Œ๋„ ๋“ค ๊ฒƒ์ด๋‹ค. ํ•˜์ง€๋งŒ ๊ฑฑ์ •๋งˆ๋ผ. ์ ์‘ํ•  ์‹œ๊ฐ„์ด ํ•„์š”ํ•˜๋‹ค๋Š” ์‚ฌ์‹ค์€ ๋ชจ๋“  ์‚ฌ๋žŒ์ด ์•Œ๊ณ  ์žˆ์„ ๊ฒƒ์ด๋‹ค. + +* ์ž…์‚ฌ ํ›„ ์ฒ˜์Œ ๋ช‡ ๋‹ฌ๊ฐ„์€ ์ผ๋‹จ ์ƒํ™ฉ์ด ์–ด๋–ป๊ฒŒ ๋Œ์•„๊ฐ€๋Š”์ง€ ํŒŒ์•…ํ•˜๋Š” ๋ฐ ์ง‘์ค‘ํ•˜์ž. +* ๊ทธ๋Ÿฌ๋ฉด ์„ค๊ณ„ ํšŒ์˜๋‚˜ ์˜จ์ฝœ ๊ต๋Œ€ ์—…๋ฌด, ์šด์˜ ์ด์Šˆ, ์ฝ”๋“œ ๋ฆฌ๋ทฐ ๋“ฑ์— ์ฐธ์—ฌํ•˜๋Š”๋ฐ ๋„์›€์ด ๋œ๋‹ค. + +### 4. ์ง์ ‘ ๋ถ€๋”ชํ˜€๋ณด๋ฉด ๊นจ๋‹ซ์ž + +> ์ฝ”๋“œ๋ฅผ ์ฒ˜์Œ ๋ฐฐํฌํ•  ๋•Œ ์–ด๋”˜๊ฐ€ ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธฐ์ง€ ์•Š์„ ๋‘๋ ค์šธ ์ˆ˜ ์žˆ์ง€๋งŒ ํŒ€์žฅ๋“ค๋„ ๋…น๋ก์น˜ ์•Š์•„์„œ ๊ฒฐ์ฝ” ์‹ฌ๊ฐํ•œ ํ”ผํ•ด๋ฅผ ์ž…ํž ๋งŒํ•œ ์ƒํ™ฉ์„ ๋งŒ๋“ค์ง€ ์•Š๋Š”๋‹ค. (๋””๋งŒ ๋Œ€์•ˆ์ด ์—†๋Š” ๊ฒฝ์šฐ ์‹ ๊ทœ ์ž…์‚ฌ์ž๊ฐ€ ์œ„ํ—˜ ๋ถ€๋‹ด ๋†’์€ ์ž‘์—…์— ํˆฌ์ž…๋  ๋•Œ๋„ ์žˆ๋‹ค.) + +* ๋ฌธ์„œ๋ฅผ ์ฝ์–ด ๋ฐฐ์šธ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ๋ณด๋‹ค๋Š” ์‹ค์ „์„ ํ†ตํ•ด ๋ฐฐ์šธ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด ํ›จ์”ฌ ๋งŽ๋‹ค. +* ๊ทธ๋Ÿฌ๋ฏ€๋กœ ์ฝ”๋”ฉ์„ ํ•˜๊ณ  ๊ฒฐ๊ณผ๋ฌผ์„ ๋ฐฐํฌํ•ด์•ผ ํ•œ๋‹ค. +* ๋งŒ์•ฝ ์‹ค์ˆ˜ํ•˜๋”๋ผ๋„ ์Šค์Šค๋กœ๋ฅผ ๋„ˆ๋ฌด ์ฑ…๋งํ•˜์ง€ ๋ง์ž. ์‹ค์ˆ˜๋กœ๋ถ€ํ„ฐ ๋ฐฐ์šด ๊ฒƒ์ด ์žˆ๋‹ค๋ฉด ๊ธฐ๋กํ•ด๋‘๊ณ  ๊ณ„์† ์ •์ง„ํ•ด ๋‚˜๊ฐ€๋ฉด ๋œ๋‹ค. + +### 5. ์ฝ”๋“œ ๋™์ž‘์„ ์ดํ•ดํ•˜๊ธฐ ์œ„ํ•ด ๋‹ค์–‘ํ•œ ์‹คํ—˜์„ ํ•ด๋ณด์ž + +> ์–ด๋–ค ๋ฉ”์†Œ๋“œ๊ฐ€ ํ˜ธ์ถœ์ด ๋œ ๊ฒƒ์€ ์•Œ๊ฒ ๋Š”๋ฐ ๋„๋Œ€์ฒด ์–ด๋–ค ๊ฒฝ๋กœ๋กœ ๊ทธ ๋ฉ”์†Œ๋“œ๊ฐ€ ํ˜ธ์ถœ๋๋Š”์ง€ ์•Œ์•„๋‚ด์ง€ ๋ชปํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋‹ค. ์ด๋Ÿด ๋•Œ๋Š” `์˜ˆ์™ธ`๋ฅผ ๋˜์ง€๊ฑฐ๋‚˜ `์Šคํƒ ํŠธ๋ ˆ์ด์Šค`๋ฅผ ์ถœ๋ ฅํ•ด๋ณด๊ฑฐ๋‚˜ ์•„๋‹ˆ๋ฉด `๋””๋ฒ„๊ฑฐ`๋ฅผ ๋ถ™์—ฌ ํ˜ธ์ถœ ๊ฒฝ๋กœ๋ฅผ ์‚ดํŽด๋ณด๋Š” ๋“ฑ์˜ ์‹œ๋„ + +* ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ์‹œ๋„๋ฅผ ํ•ด๋ณด๋ฉฐ ์ฝ”๋“œ๊ฐ€ ์–ด๋–ป๊ฒŒ ๋™์ž‘ํ•˜๋Š”์ง€ ์•Œ์•„๋‘์ž. + +#### ๐ŸŠ ์—ฌ๊ธฐ์„œ ์ž ๊น! ์Šคํƒ ํŠธ๋ ˆ์ด์Šค๋ž€? + +> ์ผ๋‹จ ์ถœ์ฒ˜ https://jaehoney.tistory.com/51 https://okky.kr/articles/338405 + +**๊ฐœ๋…** + +* ํ”„๋กœ๊ทธ๋žจ์ด ์‹œ์ž‘๋œ ์‹œ์ ๋ถ€ํ„ฐ ํ˜„์žฌ ์œ„์น˜๊นŒ์ง€์˜ ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ ๋ชฉ๋ก +* ์˜ˆ์™ธ๊ฐ€ ์–ด๋””์„œ ๋ฐœ์ƒํ–ˆ๋Š”์ง€ ์•Œ๋ ค์ฃผ๊ธฐ ์œ„ํ•ด JVM์„ ์ƒ์„ฑ + +**ํ•„์š” ์ด์œ ** + +* ์Šคํƒ ํŠธ๋ ˆ์ด์Šค๋ฅผ ์ฝ๋Š” ๋Šฅ๋ ฅ์€ ์„ ํƒ์ด ์•„๋‹Œ ํ•„์ˆ˜ +* ๋ฌดํ„ฑ๋Œ€๊ณ  ์˜ค๋ฅ˜๋‚ด์šฉ์„ ๋ณต๋ถ™ํ•˜๊ณ  ํ•ด๊ฒฐ์„ ์œ„ํ•œ ์ฝ”๋“œ๋„ ๋ณต๋ถ™ํ•œ๋‹ค๋ฉด ์ง๋ฉดํ•œ ๋ฌธ์ œ๋Š” ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ๋ฐœ์ „ ์—†์ด ๋จธ๋ฌผ๋Ÿฌ ์žˆ๊ฒŒ ๋จ +* ๊ฐ•์‚ฌ๋‹˜๋„ ํ•ญ์ƒ ๊ฐ•์กฐํ•˜๋Š” ๋‚ด์šฉ + +**๊ทธ๋ ‡๋‹ค๋ฉด ์ฝ๋Š” ๋ฒ•?** + +```JAVA +public class StackTraceTest +{ + public static void main(String[] args) + { + one(); + } + + public static void one() + { + two(); + } + + public static void two() + { + three(); + } + + public static void three() + { + Integer.parseInt("abcde"); + } +} +``` + +![](https://velog.velcdn.com/images/prettylee620/post/0bc51219-6345-49e0-899d-cfc22c9ee627/image.png) + +1. ์ŠคํƒํŠธ๋ ˆ์ด์Šค๋Š” ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒ๋œ ์‹œ์ ๋ถ€ํ„ฐ ํ”„๋กœ๊ทธ๋žจ์ด ์‹œ์ž‘๋œ ์‹œ์ ๊นŒ์ง€ ๊ฑฐ์Šฌ๋Ÿฌ ์˜ฌ๋ผ๊ฐ€๋ฉด์„œ ์ถœ๋ ฅ๋˜๊ธฐ ๋•Œ๋ฌธ์— **๋จผ์ € ์‹คํ–‰๋œ ๋ฉ”์„œ๋“œ๊ฐ€ ๊ฐ€์žฅ ์•„๋ž˜** +2. ๋‚˜๋„ ๋ณด๋ ค๊ณ  ๋…ธ๋ ฅํ•˜์ง€๋งŒ ๊ฒ๋จน๊ธฐ ๋งˆ๋ จ์ด๋‹ค. ๋Œ€๋ถ€๋ถ„ ์ฒ˜์Œ ์‹œ์ž‘ํ•˜๋Š” ๋ถ„๋“ค์ด ๊ทธ๋ ‡๋”๋ผ +3. ํ•˜์ง€๋งŒ ์—๋Ÿฌ์˜ ์ง„์ •ํ•œ ์›์ธ์€ ๊ฐ€์žฅ ์•„๋ž˜์ชฝ(์ดˆ๊ธฐ)์— ์žˆ๋Š” `Caused by:`๋กœ ์‹œ์ž‘๋˜๋Š” ์ค„๋ถ€ํ„ฐ ์•„๋ž˜๋กœ ์„ธ์ค„์ด๋ฉด ์ถฉ๋ถ„ + +```java +Caused by: java.lang.NullPointerException + at com.mycompany.service.impl.PortalManagerImpl.deleteMenuItem(PortalManagerImpl.java:603) + at com.mycompany.service.impl.PortalManagerImpl.deletePortal(PortalManagerImpl.java:358) +``` + +4. ์œ„์˜ ๋‚ด์šฉ์€ com.mycompany.service.impl.PortalManagerImpl' ํด๋ž˜์Šค์˜ `deletePortal` ๋ฉ”์†Œ๋“œ 358๋ผ์ธ์—์„œ ๊ฐ™์€ ํด๋ž˜์Šค์˜ `deleteMenuItem`๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ–ˆ๋Š”๋ฐ ํ•ด๋‹น ๋ฉ”์†Œ๋“œ 603๋ฒˆ ์งธ ์ค„์—์„œ ๋„ํฌ์ธํ„ฐ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค๋ผ๊ณ  ํ•ด์„ + +> **okky์˜ ์งˆ๋ฌธ** ![](https://velog.velcdn.com/images/prettylee620/post/44408d1c-8078-468d-b5c6-1a9b2be04488/image.png) **okky์˜ ๋‹ต๋ณ€** `deleteMenuItem()`์€ ์žฌ๊ท€ ํ˜ธ์ถœ์„ ํ•˜๋Š” ๋ฉ”์„œ๋“œ๋ผ์„œ ํ˜ผ๋™์ด ๋˜์‹  ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์ŠคํƒํŠธ๋ ˆ์ด์Šค์˜ ์ธ์šฉํ•˜์‹  ๋ถ€๋ถ„์€ "603๋ฒˆ ์งธ ์ค„์—์„œ deleteMenuItem()์„ ํ˜ธ์ถœํ•  ๋•Œ"๊ฐ€ ์•„๋‹ˆ๋ผ "ํ˜ธ์ถœ๋œ deleteMenuItem() ๋ฉ”์„œ๋“œ์˜ ๋‚ด๋ถ€์˜ 603๋ฒˆ ์งธ ์ค„"์ž„ ๐Ÿ‡ ์ข€ ๋” ์ž์„ธํžˆ ์„ค๋ช…ํ•˜์ž๋ฉด, deleteMenuItem() ๋ฉ”์„œ๋“œ ๋‚ด๋ถ€์—์„œ getMenuItems(item.getPortal().getId(), item.getId()) ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์ด๋•Œ, item์ด null์ธ ๊ฒฝ์šฐ NullArgumentException์ด ๋ฐœ์ƒํ•˜๊ณ  ์˜ˆ์™ธ๊ฐ€ ๋˜์ ธ์ง‘๋‹ˆ๋‹ค. + +5. `PortalManagerImpl` ํด๋ž˜์Šค ์†Œ์Šค + +```java +if (item == null) { + throw new NullArgumentException("item"); +} + +//์ค‘๊ฐ„ ์ƒ๋žต +List children = getMenuItems(item.getPortal().getId(), item.getId()); // 603๋ฒˆ์งธ ์ค„ + +for (PortalMenu child : children) { + deleteMenuItem(child); + } +``` + +**๊ทธ๋ ‡๋‹ค๋ฉด..? ๋„ํฌ์ธํŠธ exception ์›์ธ์€?** + +* ๋งŽ์€ ์ˆ˜์˜ ์ง€์›์ž๋“ค์ด `children`์ด๋‚˜ `item.getId()` ๋“ฑ์— ๋„๊ฐ’์ด ๋“ค์–ด๊ฐ„ ๊ฒƒ ๊ฐ™๋‹ค๊ณ  ๋‹ตํ–ˆ๋‹ค๊ณ  ํ•œ๋‹ค. ์ด๋ก ์ ์œผ๋กœ ํ•ด๋‹น ๋ผ์ธ์—์„œ ๋„๊ฐ’์ด ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“  ๊ฒฝ์šฐ์˜ ์ˆ˜๋Š”, + +> 1. children + +2. item +3. item.getPortal() +4. item.getPortal().getId() +5. item.getId() + +* ์ด ์ค‘ ์ ์–ด๋„ ๋‘ ๊ฐ€์ง€, ์ฆ‰ 2๋ฒˆ ํ˜น์€ 3๋ฒˆ์œผ๋กœ ๊ฐ€๋Šฅ์„ฑ์„ ๋ฐ”๋กœ ์ขํžˆ์ง€ ๋ชปํ•œ๋‹ค๋ฉด ๊ทธ๊ฒƒ์€ ๋„ํฌ์ธํ„ฐ ์˜ˆ์™ธ์˜ ์˜๋ฏธ๋ฅผ ์ •ํ™•ํ•˜๊ฒŒ ํŒŒ์•…ํ•˜์ง€ ๋ชปํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋ผ๊ณ  ํ•œ๋‹ค. + +> ๋„ํฌ์ธํ„ฐ ์˜ˆ์™ธ๋Š” ๋‹จ์ˆœํ•˜๊ฒŒ ๋ณ€์ˆ˜์— ๋„๊ฐ’์ด ๋“ค์–ด๊ฐ€์„œ ์ƒ๊ธฐ๋Š” ์˜ค๋ฅ˜๊ฐ€ ์•„๋‹ˆ๋‹ค. `๋„ํฌ์ธํ„ฐ ์˜ˆ์™ธ`๋Š” **๋ช…ํ™•ํ•˜๊ฒŒ ๊ฐ์ฒด์˜ ๋„๋ ˆํผ๋Ÿฐ์Šค์— ๋Œ€ํ•ด ๋ฉ”์†Œ๋“œ ํ˜ธ์ถœ์ด๋‚˜ ํ•„๋“œ ์ฐธ์กฐ ๋“ฑ์˜ ์ž‘์—…์„ ํ–ˆ์„ ๋•Œ ๋ฐœ์ƒํ•˜๋Š” ๋ฌธ์ œ**๋ผ๋Š” ๊ฒƒ์„ ์ดํ•ดํ•œ๋‹ค๋ฉด ์ด๋Ÿฐ ๋ฌธ์ œ๋Š” ๊ณง๋ฐ”๋กœ ์›์ธ์„ ์ขํž ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค. + +* ์ฆ‰, 1๋ฒˆ์˜ ๊ฒฝ์šฐ์ฒ˜๋Ÿผ ๋‹จ์ˆœํžˆ ๋ณ€์ˆ˜์— ๋„๊ฐ’์„ ํ• ๋‹นํ•˜๋Š” ๊ฒƒ๋งŒ์œผ๋กœ๋Š” ์ ˆ๋Œ€๋กœ ๋„ํฌ์ธํ„ฐ ์˜ˆ์™ธ๊ฐ€ ๋‚  ์ˆ˜ ์—†๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋งŒ์ผ 4 ๋ฒˆ `item.getPortal().getId()`์ด๋‚˜ 5๋ฒˆ `item.getId()`์ด ๋„์ด๋ผ๋ฉด ์ด๋Š” ๋„ ๋ ˆํผ๋Ÿฐ์Šค์— ๋Œ€ํ•œ ํ˜ธ์ถœ์ด ์•„๋‹ˆ๋ผ ๋„๊ฐ’์„ `getMenuItems`๋ผ๋Š” **๋ฉ”์†Œ๋“œ์˜ ์ธ์ž๋กœ ๋„˜๊ธฐ๋Š” ๊ฒƒ ๋ฟ์ด๊ธฐ ๋•Œ๋ฌธ์— ์—ญ์‹œ ๋„ํฌ์ธํ„ฐ ์˜ˆ์™ธ์˜ ์›์ธ์ด ๋  ์ˆ˜ ์—†๋‹ค.** +* ๋ฌผ๋ก  `getMenuItem` ๋ฉ”์†Œ๋“œ ์•ˆ์—์„œ **ํ•ด๋‹น ์ธ์ž์— ๋Œ€ํ•œ ๋„์ฒดํฌ ์—†์ด ๊ฐ’์„ ์‚ฌ์šฉํ•˜๋‹ค๊ฐ€ ์˜ˆ์™ธ๊ฐ€ ๋‚  ์ˆ˜๋„ ์žˆ๊ฒ ์ง€๋งŒ** ์ด ๊ฒฝ์šฐ์—” ์ ˆ๋Œ€๋กœ ํŠธ๋ ˆ์ด์Šค ์ƒ์— **๊ตต์€ ๊ธ€์ž๋กœ ํ‘œ์‹œ๋œ 603๋ฒˆ ์งธ์—์„œ ์˜ˆ์™ธ๋ฅผ ๋ฟŒ๋ฆฌ์ง€ ์•Š๋Š”๋‹ค.** +* ๊ทธ๋ ‡๋‹ค๋ฉด ๋‚จ์€ ๊ฐ€๋Šฅ์„ฑ์€ 2๋ฒˆ 'item'์ด ๋„์ด๊ฑฐ๋‚˜ 3๋ฒˆ 'item.getPortal()'์ด ๋„์ธ ๊ฒฝ์šฐ๋ฟ์ธ๋ฐ, 'item' ๋ณ€์ˆ˜๋Š” ์œ„์—์„œ ๋„์ฒดํฌ๋ฅผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— 603๋ฒˆ ์งธ ์ค„์—์„œ ์ ˆ๋Œ€๋กœ ๋„๊ฐ’์„ ๊ฐ€์งˆ ์ˆ˜ ์—†๋‹ค. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ๋‹ต์€ 3๋ฒˆ์ด ๋˜๋Š” ๊ฒƒ + +**์ฝ์–ด๋ณด๋ฉด ์ข‹์€ ๊ธ€** + +[๊ฐœ๋ฐœ์€ ์•”๊ธฐ๊ณผ๋ชฉ์ด ์•„๋‹™๋‹ˆ๋‹ค](https://okky.kr/questions/311337) + +**๋…ผ์™ธ Visual Studio์™€ Visual Studio Code** + +> ์Šคํƒ ํŠธ๋ ˆ์ด์Šค ๋ฅผ ์ฝ๋Š” ๋ฒ•์„ ์ฐพ๋‹ค๊ฐ€ ์•Œ๊ฒŒ ๋œ ๊ฒƒ์ธ๋ฐ... ๋‘˜์€ ์™„์ „ํžˆ ๋‹ค๋ฅด๋‹ค๋Š” ๊ฒƒ Visual Studio๋Š” IDE(ํ†ตํ•ฉ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ)์ด๋ฉฐ Visual Studio Code๋Š” Sublime Text ๋ฐ Atom๊ณผ ๊ฐ™์€ ๋ฆฌ์น˜ ํ…์ŠคํŠธ ํŽธ์ง‘๊ธฐ๋กœ ๋„๊ตฌ ๊ฐ„์˜ ์ฐจ์ด์ ์€ IDE์™€ ํ…์ŠคํŠธ ํŽธ์ง‘๊ธฐ ๊ทธ ์ด์ƒ์ด๋ผ๊ณ  ํ•œ๋‹ค. IDE๋Š” ์ฝ”๋“œ ์ž‘์„ฑ, ํŽธ์ง‘, ๋””๋ฒ„๊น… ๋ฐ ์‹คํ–‰์„ ์œ„ํ•œ ๊ฐ•๋ ฅํ•œ ๋„๊ตฌ๋กœ ํ…์ŠคํŠธ ํŽธ์ง‘๊ธฐ์—์„œ๋Š” ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๊ณ  ํŽธ์ง‘ํ•  ์ˆ˜๋งŒ ์žˆ๋‹ค. ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๊ฑฐ๋‚˜ ์ž๋™์œผ๋กœ ์‹คํ–‰๋˜๋„๋ก ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ๋‹ค์šด๋กœ๋“œํ•˜๋ ค๋ฉด ํ…์ŠคํŠธ ํŽธ์ง‘๊ธฐ์—์„œ ๋‚˜๊ฐ€์•ผ ํ•  ์ˆ˜๋„ ์žˆ๋‹ค๊ณ  ํ•จ.. ๊นŠ๊ฒŒ ๊ณต๋ถ€ ์•ˆํ•˜๊ณ  ๋Œ๋ฆฌ๊ธฐ๋งŒ ํ•ด์„œ... ๋ชฐ๋ž๋‹ค. + +#### ๐ŸŠ ์ด๋Ÿฐ ์‹คํ—˜์„ ํ•  ๋•Œ ๋””๋ฒ„๊ฑฐ ์‹ญ๋ถ„ ํ™œ์šฉ + +1. ์‹คํ–‰ ์ค‘์ธ ์ฝ”๋“œ๋ฅผ ์ž ์‹œ ์ •์ง€์‹œํ‚ค๊ณ  ์‹คํ–‰ ์ค‘์ธ ์Šค๋ ˆ๋“œ, ์Šคํƒ ํŠธ๋ ˆ์ด์Šค, ๋ณ€์ˆซ๊ฐ’ ๋“ฑ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. +2. ๋””๋ฒ„๊ฑฐ๋ฅผ ๋ถ™์—ฌ ์ด๋ฒคํŠธ ๋ฐœ์ƒ์‹œํ‚จ ํ›„ ์ฝ”๋“œ๊ฐ€ ํ•ด๋‹น ์ด๋ฒคํŠธ๋ฅผ ์–ด๋–ป๊ฒŒ ์ฒ˜๋ฆฌํ•˜๋Š”์ง€ ๋‹จ๊ณ„์ ์œผ๋กœ ํ™•์ธ +3. ๋ธŒ๋ ˆ์ดํฌ ํฌ์ธํŠธ๋Š” ๋””๋ฒ„๊ฑฐ์—์„œ ์ฝ”๋“œ ์‹คํ–‰์„ ์ค‘์ง€์‹œํ‚ค๋Š” ์ง€์ ์„ ์„ค์ •ํ•˜๋Š” ๋„๊ตฌ๋กœ ์ด๋ฅผ ํ†ตํ•ด ํ•ด๋‹น ์ง€์ ์—์„œ ์ฝ”๋“œ์˜ ์‹คํ–‰ ์ƒํƒœ๋ฅผ ๋ถ„์„ํ•˜๊ณ  ๋ณ€์ˆ˜ ๊ฐ’์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. + +**intellij์—์„œ ๋ธŒ๋ ˆ์ดํฌ ํฌ์ธํŠธ ์„ค์ • ๋ฐฉ๋ฒ•** + +> IntelliJ IDEA๋ฅผ ์—ด๊ณ  ๋””๋ฒ„๊ทธํ•  ํ”„๋กœ์ ํŠธ๋ฅผ ๋กœ๋“œ + +1. ๋””๋ฒ„๊ทธํ•˜๊ณ  ์‹ถ์€ ์ฝ”๋“œ ํŒŒ์ผ์„ ์—ฝ๋‹ˆ๋‹ค. +2. ๋ธŒ๋ ˆ์ดํฌ ํฌ์ธํŠธ๋ฅผ ์„ค์ •ํ•˜๋ ค๋Š” ์ค„์— ๋งˆ์šฐ์Šค ์ปค์„œ๋ฅผ ๊ฐ€์ ธ๊ฐ‘๋‹ˆ๋‹ค. +3. ํ•ด๋‹น ์ค„์˜ ์™ผ์ชฝ ๋งˆ์ง„(๋ผ์ธ ๋„˜๋ฒ„ ๋ถ€๋ถ„)์„ ํด๋ฆญํ•˜๋ฉด ๋ธŒ๋ ˆ์ดํฌ ํฌ์ธํŠธ๊ฐ€ ์„ค์ •๋ฉ๋‹ˆ๋‹ค. ๋˜๋Š”, ํ•ด๋‹น ์ค„์„ ํด๋ฆญํ•œ ํ›„ `Ctrl + F8 (Windows/Linux)` ๋˜๋Š” `Command + F8 (Mac)`์„ ๋ˆ„๋ฅด๋ฉด ์ปจํ…์ŠคํŠธ ๋ฉ”๋‰ด๊ฐ€ ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค. ์ด ๋ฉ”๋‰ด์—์„œ `Toggle Line Breakpoint`๋ฅผ ์„ ํƒํ•˜๋ฉด **๋ธŒ๋ ˆ์ดํฌ ํฌ์ธํŠธ๊ฐ€ ์„ค์ •**๋ฉ๋‹ˆ๋‹ค. +4. ์„ค์ •ํ•œ ๋ธŒ๋ ˆ์ดํฌ ํฌ์ธํŠธ๋Š” `๋นจ๊ฐ„ ๋™๊ทธ๋ผ๋ฏธ`๋กœ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. +5. ๋””๋ฒ„๊ทธ ๋ชจ๋“œ๋กœ ์‹คํ–‰ํ•˜๋ ค๋ฉด ํ•ด๋‹น ํด๋ž˜์Šค ๋˜๋Š” ๋ฉ”์„œ๋“œ ๋‚ด์—์„œ ๋งˆ์šฐ์Šค ์šฐํด๋ฆญํ•˜์—ฌ "Debug" ์˜ต์…˜์„ ์„ ํƒํ•˜๊ฑฐ๋‚˜, ์ฝ”๋“œ ์—๋””ํ„ฐ ์ƒ๋‹จ์˜ "Run" ๋˜๋Š” "Debug" ๋ฒ„ํŠผ์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค. +6. ํ”„๋กœ๊ทธ๋žจ์ด ๋ธŒ๋ ˆ์ดํฌ ํฌ์ธํŠธ์— ๋„๋‹ฌํ•˜๋ฉด ์‹คํ–‰์ด ์ผ์‹œ ์ •์ง€๋ฉ๋‹ˆ๋‹ค. ์ด๋•Œ ๋””๋ฒ„๊ฑฐ ์ฐฝ์—์„œ ๋ณ€์ˆ˜ ๊ฐ’์„ ํ™•์ธํ•˜๊ฑฐ๋‚˜ ๋‹จ๊ณ„๋ณ„๋กœ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•ด๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. + +#### ๐ŸŠ ๋””๋ฒ„๊ฑฐ๋Š” ๊ฐ•๋ ฅํ•œ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜์ง€๋งŒ ๊ฐ€๋”์€ ๋กœ๊ทธ๋‚˜ print๋ฅผ ๋„ฃ์–ด๋‘๋Š” ๊ฒƒ์ด ์ฝ”๋“œ์˜ ๋™์ž‘์„ ์ดํ•ดํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€์žฅ ์‰ฌ์šด ๋ฐฉ๋ฒ• + +* ๋‹ค๋งŒ, ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐ™์€ ๋ณต์žกํ•œ ์ƒํ™ฉ์—์„œ print๋ฌธ์„ ์ด์šฉํ•œ ๋””๋ฒ„๊น…์€ ์ž˜๋ชป๋œ ๊ฒฐ๊ณผ๋ฅผ ๋„์ถœํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์—์„œ ์œ ์˜ + +#### ์‰ฝ์ง€๋งŒ ์œ ์šฉํ•œ ๋ฐฉ๋ฒ• + +* ์›๋ž˜ ์ฝ”๋“œ๊ฐ€ ์•„๋‹ˆ๋ผ ๋‚ด๊ฐ€ ์ˆ˜์ • ์ค‘์ธ ์ฝ”๋“œ๊ฐ€ ์‹คํ–‰๋˜๊ณ  ์žˆ๋Š” ์‚ฌ์‹ค์„ ๋ˆˆ์— ๋„๊ฒŒ ์•Œ๋ ค์ฃผ๋Š” ๋ฌธ์žฅ์„ ํ”„๋กœ๊ทธ๋žจ์ด ์ฒ˜์Œ ์‹คํ–‰๋˜๋Š” ์‹œ์ ์— ์ถœ๋ ฅ + +### 6. ๋ฌธ์„œ ์ฝ๋Š” ์Šต๊ด€์€ ๋ชธ์— ๋ฐฐ์•ผ ํ•œ๋‹ค. + +> ์ฝ์„ ์ž๋ฃŒ๋Š” ๋ฌด๊ถ๋ฌด์ง„ํ•˜๋‹ค. ๋‹ค๋งŒ ์ด ์ž๋ฃŒ๋“ค์„ ํ•œ ๋ฒˆ์— ๋ชจ๋‘ ์ฝ์„ ์ƒ๊ฐ์€ ํ•˜์ง€๋ง์ž. + +1. ๋จผ์ € ํŒ€๋ฌธ์„œ์™€ ์„ค๊ณ„ ๋ฌธ์„œ๋ถ€ํ„ฐ ์‹œ์ž‘ + +* ๊ทธ๋ ‡๊ฒŒ ๋˜๋ฉด, ์—ฌ๋Ÿฌ ๋ถ€๋ถ„์ด ์–ด๋–ป๊ฒŒ ๊ฒฐํ•ฉ๋˜์–ด ๋™์ž‘ํ•˜๋Š”์ง€ ๋Œ€๋žต์ ์œผ๋กœ ์ดํ•ด ๊ฐ€๋Šฅํ•˜๊ฒŒ ๋œ๋‹ค. +* ํŠนํžˆ **ํŠธ๋ ˆ์ด๋“œ ์˜คํ”„์™€ ์ปจํ…์ŠคํŠธ**์— ๋Œ€ํ•œ ๋…ผ์˜๋Š” ๋”์šฑ ์ฃผ์˜๋ฅผ ๊ธฐ์šธ์ด์ž +* ๊ทธ๋Ÿฌ๋ฉด ์„œ๋ธŒ์‹œ์Šคํ…œ์— ๋Œ€ํ•œ ์ดํ•ด๊ฐ€ ๋” ๊นŠ๊ฒŒ ๊ฐ€๋Šฅํ•  ๊ฒƒ์ด๋‹ค. + +> #### ๐ŸŠ ์ž ๊น!! ํŠธ๋ ˆ์ด๋“œ ์˜คํ”„(trade-off)์™€ ์ปจํ…์ŠคํŠธ(context)๋ž€? +> +> * ํŠธ๋ ˆ์ด๋“œ ์˜คํ”„ : ๊ฐ์ฒด์˜ ์–ด๋Š ํ•œ ๋ถ€๋ถ„์„ ํ’ˆ์งˆ์„ ๋†’์ด๊ฑฐ๋‚˜ ๋‚ฎ์ถ”๋Š” ๋ฐ ๋‹ค๋ฅธ ํ•œ์ชฝ์˜ ์˜ํ–ฅ์„ ๋ฏธ์น˜๋Š” ์ƒํ™ฉ EX. ๊ฐœ๋ฐœ์˜ ์‹œ๊ฐ„ UP => ์™„์„ฑ๋„ UP => ๋น„์šฉ UP **์ ์ ˆํ•œ ์ตœ์ ์˜ ํƒ€ํ˜‘ ํ•„์š”** +> * ์ปจํ…์ŠคํŠธ : ์ฝ”๋“œ๋‚˜ ๊ธฐ๋Šฅ์ด ์ž‘๋™ํ•˜๋Š” ํ™˜๊ฒฝ, ์–ด๋–ค ํŠน์ • ์ž‘์—…ํ•œ ๋‹จ์œ„ ์ˆ˜ํ–‰ํ•œ ํ•„์š”ํ•œ ๊ธฐ๋ณธ์ •๋ณด, ์ค€๋น„์‚ฌํ•ญ, ๊ทธ ๊ฒฝ๊ณ„์˜ ์ง€์นจ + +2. ์ฝ”๋“œ๋Š” ์†Œ์„ค์ฒ˜๋Ÿผ ์ฒ˜์Œ๋ถ€ํ„ฐ ๋๊นŒ์ง€ ์ญ‰ ์ฝ๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋‹ค. **IDE**๋ฅผ ์ด์šฉํ•ด ์ฝ”๋“œ์˜ ์ด๊ณณ์ €๊ณณ์„ ํ›‘์–ด๋ณด์ž. ์ฃผ์š” ๊ธฐ๋Šฅ์— ๋Œ€ํ•ด์„œ๋Š” **์ฝ”๋“œ์˜ ํ๋ฆ„๊ณผ ์ƒํƒœ๋ฅผ ๋‹ค์ด์–ด๊ทธ๋žจ**์œผ๋กœ ๊ทธ๋ ค๋ณด์ž. ์ฝ”๋“œ์˜ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ์™€ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ํŒŒํ—ค์ณ๋ณด์ž. ์˜ˆ์™ธ ์ƒํ™ฉ์„ ์–ด๋–ป๊ฒŒ ์ฒ˜๋ฆฌํ•˜๋Š”์ง€๋„ ์ž˜ ์‚ดํŽด๋ณด์ž. ๊ทธ๋Ÿฌ๋ฉด์„œ ํŒ€์˜ ์ฝ”๋”ฉ ์Šคํƒ€์ผ๊ณผ ์šฉ์–ด๋„ ๊ผผ๊ผผํžˆ ํ™•์ธํ•˜์ž. ๊ทธ๋ž˜์•ผ ๋‚ด๋ถ€ ์˜์‚ฌ์†Œํ†ต์ด ์›ํ• ํ•ด์ง„๋‹ค. +3. ์•ž์œผ๋กœ ํ•ด์•ผ ํ•  ์ผ์€ ํ‹ฐ์ผ“(ticket)์ด๋‚˜ ์ด์Šˆ(issue)๋กœ ๊ด€๋ฆฌํ•œ๋‹ค. + +### 7. ๊ทธ ์™ธ + +**1. ๋ฐœํ‘œ ์˜์ƒ์„ ์ฐพ์•„์„œ ์ฐพ์•„๋ณด์ž** + +* ๋‹ค๋งŒ, ์ˆ˜๋™์ ์ธ ํƒœ๋„๋Š” ๊ธˆ๋ฌผ ๋‚ด์šฉ์„ ๊ธฐ๋กํ•˜๊ณ  ์ต์ˆ™ํ•˜์ง€ ์•Š์€ ์šฉ์–ด ์ฐพ์•„๋ณด๊ธฐ + +**2. ๋•Œ๋กœ๋Š” ๋ฐ‹์—…๊ณผ ์ปจํผ๋Ÿฐ์Šค๋ฅผ ์ฐธ์—ฌํ•˜์ž.** + +* ๋•Œ๋•Œ๋กœ ์ฐธ์„์€ ์ข‹์ง€๋งŒ ๋„ˆ๋ฌด ์žฆ์€ ์ฐธ์„์€ ๊ธˆ๋ฌผ์ด๋‹ค. + +**3. ์‹œ๋‹ˆ์–ด ์—”์ง„๋‹ˆ์–ด์˜ ์ฒดํ—˜ํ•˜๊ณ  ํ˜‘์—…ํ•˜์ž**. + +* ์ฒดํ—˜ํ•˜๊ธฐ(shadowing) : ๋‹ค๋ฅธ ์‚ฌ๋žŒ ์—…๋ฌด๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ๋™์•ˆ ๊ทธ๋ฆผ์ž์ฒ˜๋Ÿผ ๋”ฐ๋ผ ๋‹ค๋‹ˆ๋ฉฐ, ์ผ์ • ์ „ ํ›„์— ๊ณ„ํš๊ณผ ํšŒ๊ณ  ์‹œ๊ฐ„ ๋งˆ๋ จํ•˜๊ธฐ +* ์ง ํ”„๋กœ๊ทธ๋ž˜๋ฐ(pair programming) : ๋‘ ๋ช…์˜ ์—”์ง„๋‹ˆ์–ด๊ฐ€ ๋ฒˆ๊ฐˆ์•„๊ฐ€๋ฉฐ ํ•จ๊ป˜ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ์ƒ๋Œ€์—๊ฒŒ ๋ญ”๊ฐ€๋ฅผ ๋ฐฐ์šฐ๋Š”๋ฐ ๊ฐ€์žฅ ๋น ๋ฅธ ๋ฐฉ๋ฒ• ์ค‘ ํ•˜๋‚˜์ด๋‹ค. + +**4. ๊ฐœ์ธ ํ”„๋กœ์ ํŠธ ํ™œ๋™์—์„œ๋„ ๋ฐฐ์›€์„ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค.** + +* ์‚ฌ์ด๋“œ ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•˜์ž. +* ๋ฐฐ์›Œ์•ผ ํ•  ์†Œ์žฌ๋ฅผ ๊ทผ๊ฑฐ๋กœ ํ”„๋กœ์ ํŠธ๋ฅผ ์„ ํƒํ•ด์„œ๋Š” ์•ˆ ๋œ๋‹ค. ํ•ด๊ฒฐํ•˜๊ณ  ์‹ถ์€ ๋„๊ตฌ๋ฅผ ์ด์šฉํ•ด์„œ ๊ทธ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•ด์•ผ ํ•œ๋‹ค. \*\*๋ชฉํ‘œ๊ฐ€ ์žˆ์–ด์•ผ ๋” ์˜ค๋ž˜ ๋ชฐ๋‘ํ•˜๊ณ  ๋” ๋งŽ์ด ๋ฐฐ์šธ ์ˆ˜ ์žˆ๋Š” ๋ณธ์งˆ์ ์ธ ๋™๊ธฐ๊ฐ€ ์Šค์Šค๋กœ์—๊ฒŒ ๋ถ€์—ฌ๋œ๋‹ค. \*\* +* ๋Œ€์ฒด๋กœ ํšŒ์‚ฌ์—๋Š” ์—…๋ฌด ์™ธ ํ™œ๋™์— ๋Œ€ํ•œ ๊ทœ์ •์ด ๋‚˜์™€์žˆ์œผ๋‹ˆ ํšŒ์‚ฌ ์ •์ฑ… ์ฝ๊ธฐ ํ•„์ˆ˜ + +**5. ์ œ๋Œ€๋กœ ์งˆ๋ฌธํ•˜๊ธฐ** + +* ์งˆ๋ฌธ์€ ๋ฐฐ์›€์— ์žˆ์–ด ๋งค์šฐ ์ค‘์š”ํ•˜๋‹ค. +* ํŒ€ ๋™๋ฃŒ์—๊ฒŒ ๋ฏผํ๊ฐ€ ๋ ๊นŒ ์‹ถ์–ด ๋ชจ๋“  ๊ฒƒ์„ ํ˜ผ์ž ์•Œ์•„๋‚ด๋ ค๊ณ  ํ•˜๋Š”๋ฐ, ๋น„ํšจ์œจ์ ์ด๋‹ค. +* ์งˆ๋ฌธํ•  ๋•Œ๋Š” ๋จผ์ € ์Šค์Šค๋กœ ์ฐพ์•„๋ณด๊ณ  ๋ช…ํ™•ํžˆ ์งˆ๋ฌธํ•˜๋ฉฐ, ์งˆ๋ฌธ์— ๋Œ€ํ•œ ๋‹ต์„ ๋“ค์„ ๋•Œ๊นŒ์ง€ ์ ์ ˆํ•œ ์‹œ๊ฐ„์„ ๊ธฐ๋‹ค๋ฆฌ๋Š” ์„ธ ๋‹จ๊ณ„๋ฅผ ๋ฐŸ์•„๊ฐ€๊ธธ ๋ฐ”๋ž€๋‹ค. + +**6. ์Šค์Šค๋กœ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•ด๋ณด์ž** + +> ์•„๋ฌด๋Ÿฐ ๋‹จ์„œ๋„ ์ฐพ์ง€ ๋ชปํ•œ๋‹ค๋ฉด ์‹คํ—˜์„ ํ†ตํ•ด ์Šค์Šค๋กœ ํ•ด๊ฒฐํ•ด๋ณด์ž. _**์–ด๋””๋ฅผ ์‚ดํŽด๋ดค๋Š”์ง€ ์–ด๋–ค ๋ฐฉ๋ฒ•์„ ์™œ ์‹œ๋„ํ–ˆ๋Š”์ง€, ๊ฒฐ๊ณผ๋Š” ์–ด๋• ๋Š”์ง€ ๊ทธ๋ฆฌ๊ณ  ๊ทธ๋กœ๋ถ€ํ„ฐ ๋ฐฐ์šด ๊ฒƒ์€ ๋ฌด์—‡์ธ์ง€ ๋ชจ์กฐ๋ฆฌ ๊ธฐ๋กํ•˜์ž.**_ + +* ๋ฌด์ž‘์ • ์ธํ„ฐ๋„ท๋งŒ ๋’ค์ง€๋Š” ๋ฐฉ๋ฒ•์€ ์˜ณ์ง€ ์•Š๋‹ค. ๋งŒ์ผ ๊ถ๊ธˆํ•œ ์ ์ด ์ฝ”๋“œ์— ๋Œ€ํ•œ ๊ฒƒ์ด๋ผ๋ฉด ๋ฌธ์ œ๋ฅผ ์ž…์ฆํ•˜๋Š” `๋‹จ์œ„ ํ…Œ์ŠคํŠธ`๋กœ ๋ฐ”๋€Œ๋ณด์ž. +* ๋ฉ”์ผ๋ง ๋ฆฌ์ŠคํŠธ๋‚˜ ์ฑ„ํŒ… ๊ทธ๋ฃน์„ ๋’ค์ ธ๋ณด์ž + +**7. ์ œํ•œ ์‹œ๊ฐ„์„ ์ •ํ•˜์ž** + +> ๋ฌธ์ œ๋ฅผ ์Šค์Šค๋กœ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ๊ธฐํ•œ์„ ์ •ํ•ด๋‘์ž. + +* ์–ธ์ œ๊นŒ์ง€ ๋‹ต์„ ๊ตฌํ•ด์•ผ ํ•  ์ง€ ์ƒ๊ฐํ•ด๋ณด๊ณ , ์งˆ๋ฌธ์„ ํ•˜๊ณ  ๋‹ต์„ ์ฐพ๊ณ  ๋ฐฐ์šด ๊ฒƒ์„ ํ† ๋Œ€๋กœ ์กฐ์น˜๋ฅผ ์ทจํ•  ์ˆ˜ ์žˆ์„ ์ •๋„๋กœ ์ถฉ๋ถ„ํ•œ ์‹œ๊ฐ„์„ ํ™•๋ณดํ•ด์ฃผ์ž. ์ œํ•œ์‹œ๊ฐ„์„ ๋‹ค ์ป๋Š”๋ฐ ์•„์ง ๋‹ต์„ ์ฐพ์ง€ ๋ชปํ–ˆ๋‹ค๋ฉด ์งˆ๋ฌธํ•˜์ž. +* ์ œํ•œ ์‹œ๊ฐ„์„ ๋Š˜๋ฆฌ๋Š” ๊ฒƒ์€ ์Šค์Šค๋กœ์˜ ๋…ธ๋ ฅ์ด ์ œ๋Œ€๋กœ ์ง„์ฒ™์„ ์ด๋ฃฐ ๊ฒฝ์šฐ์—๋งŒ ํ—ˆ์šฉํ•˜์ž. + +**8. ์ž์‹ ์ด ์‹œ๋„ํ•œ ๋ฐฉ๋ฒ•์„ ๊ณต์œ ํ•˜์ž** + +* ๊ธฐ๋กํ•ด๋‘” ๋‚ด์šฉ์„ ๊ทธ๋Œ€๋กœ ์ „๋‹ฌํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์—ฌ๋Ÿฌ๋ถ„์ด **์‹œ๋„ํ•ด๋ณธ ๋ฐฉ๋ฒ•๊ณผ ์•Œ์•„๋‚ธ ๋‚ด์šฉ์„ ๊ฐ„๊ฒฐํ•˜๊ฒŒ ์š”์•ฝํ•˜์ž.** +* ์งˆ๋ฌธ์„ ํ•˜๋ ค๋ฉด, ์ปจํ…์ŠคํŠธ๋ฅผ ์ œ๊ณตํ•˜๊ณ  ๋ฌธ์ œ๋ฅผ ์„ค๋ช…ํ•˜๋ฉฐ ์ง€๊ธˆ๊นŒ์ง€ ์‹œ๋„ํ•œ ๋ฐฉ๋ฒ•์„ ์ „๋‹ฌํ•˜๋ฉฐ, ๋„์›€์„ ์š”์ฒญํ•œ๋‹ค. ๋˜ํ•œ ๋ฌธ์ œ์˜ ์˜ํ–ฅ๋ ฅ๊ณผ ๊ธด๊ธ‰๋„์— ๋Œ€ํ•ด์„œ ์ฒจ์–ธํ–ˆ๋‹ค. + +**9. ๋™๋ฃŒ๋ฅผ ๋ฐฉํ•ดํ•˜์ง€ ๋ง์ž** + +* ๊ฐ์ž์˜ ์—…๋ฌด์— ์ง‘์ค‘ํ•˜๊ณ  ์žˆ๋‹ค๋ฉด ๋ฐฉํ•ดํ•˜์ง€ ๋ง์ž + +**10. ๋น„๋™๊ธฐ์‹ ๋ฉ€ํ‹ฐ์บ์ŠคํŒ… ์˜์‚ฌ์†Œํ†ต์„ ์‹œ๋„ํ•˜์ž.** + +* ์งˆ๋ฌธ์€ ์—ฌ๋Ÿฌ ์‚ฌ๋žŒ(๋ฉ€ํ‹ฐ์บ์ŠคํŠธ)์ด ๊ฐ์ž์˜ ์ƒํ™ฉ์— ๋”ฐ๋ผ(๋น„๋™๊ธฐ์‹ = ๋ฐ”๋กœ ๋‹ตํ•˜์ง€ ์•Š๊ณ  ๋‚˜์ค‘์— ์ฒ˜๋ฆฌ) ์‘๋‹ตํ•  ์ˆ˜ ์žˆ๋Š” ๊ณณ์— ์˜ฌ๋ฆฌ์ž + +**11. ๋™๊ธฐ์‹ ์š”์ฒญ์€ ํ•œ ๋ฒˆ๋งŒ ๋ณด๋‚ด์ž** + +### 8. ์„ฑ์žฅ์˜ ์žฅ์• ๋ฌผ์„ ๊ทน๋ณตํ•˜์ž. + +#### ๐ŸŠ ๊ฐ€๋ฉด ์ฆํ›„๊ตฐ + +1. ๋Œ€๋ถ€๋ถ„์˜ ์‹ ์ž… ์—”์ง€๋‹ˆ์–ด๋Š” ์˜์‹์  ๋Šฅ๋ ฅ๋ถ€์กฑ ์ƒํƒœ์—์„œ ์‹œ์ž‘ +2. ๊ฐ„ํ˜น ์Šค์Šค๋กœ์—๊ฒŒ ๋„ˆ๋ฌด ์—„๊ฒฉํ•ด์ง€๊ธฐ๋„ ํ•œ๋‹ค. +3. ์ž๊ธฐ ์Šค์Šค๋กœ์— ๋Œ€ํ•œ ๋ถˆ์‹ ์€ ๋ˆ„๊ตฌ๋‚˜์—๊ฒŒ ์žˆ๋Š” ๋ณดํŽธ์ ์ธ ํ˜„์ƒ์ด๋ผ๋Š” ์ ์„ ์šฐ์„  ์—ผ๋‘์— ๋‘์ž +4. ์ž๊ธฐ ์ธ์‹์€ ๋„์›€์ด ๋œ๋‹ค. +5. ๋ฌด์–ธ๊ฐ€๋ฅผ ๋‹ฌ์„ฑํ–ˆ๋‹ค๋ฉด ๊ทธ๊ฑด ์‹ค์ œ๋กœ ์ผ์„ ์ž˜ ํ•ด๋ƒˆ๊ธฐ ๋•Œ๋ฌธ์ด์ง€, ๊ทธ์ € ์šด์ด ์ข‹์•˜๊ธฐ ๋•Œ๋ญ”์ด ์•„๋‹ˆ๋‹ค. ์นญ์ฐฌ๊ณผ ์„ฑ๊ณผ๋ฅผ ์• ์จ ์™ธ๋ฉดํ•˜์ง€๋ง๊ณ  ์•„๋ฌด๋ฆฌ ์ž‘์€ ์ผ์ด๋ผ๋„ ๊ธฐ๋กํ•ด๋‘์ž +6. ํ”ผ๋“œ๋ฐฑ์„ ๋ฐ›๋Š” ๊ฒƒ๋„ ๋„์›€์ด ๋œ๋‹ค. + +#### ๐ŸŠ ๋”๋‹ ํฌ๋ฃจ๊ฑฐ ํ˜„์ƒ + +1. ์Šค์Šค๋กœ๋ฅผ ๊ณผ๋Œ€ํ‰๊ฐ€ํ•˜๋Š” ์ธ์ง€์  ํŽธ๊ฒฌ์„ ๊ฐ–๋Š” ๊ฒƒ์ด๋‹ค. +2. ์ž์‹ ์ด ๋ญ˜ ๋ชจ๋ฅด๋Š”์ง€๋ฅผ ๋ชจ๋ฅธ๋‹ค. +3. ์˜์‹์ ์œผ๋กœ ํ˜ธ๊ธฐ์‹ฌ์„ ๊ณ„๋ฐœํ•˜๋Š” ๊ฒƒ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜์ž. +4. ๊ทธ๋ฆฌ๊ณ  ์ž์‹ ์ด ํ‹€๋ฆด ์ˆ˜๋„ ์žˆ์Œ์„ ์ธ์ •ํ•˜์ž. +5. ์ž์‹ ์ด ์กด๊ฒฝํ•˜๋Š” ์—”์ง€๋‹ˆ์–ด๋ฅผ ์ฐพ์•„ ์—ฌ๋Ÿฌ๋ถ„์ด ์ž˜ํ•˜๊ณ  ์žˆ๋Š”์ง€๋ฅผ ๋ฌผ์–ด๋ณด๊ณ  ๊ฒฝ์ฒญํ•˜์ž + +### 9. ๊ฐœ๋ฐœ์ž์˜ ํ•„์ˆ˜ ์ฒดํฌ๋ฆฌ์ŠคํŠธ + +| โญ• ์ด๊ฒƒ๋งŒ์€ ์ง€ํ‚ค์ž | โŒ ์ด๊ฒƒ๋งŒ์€ ํ”ผํ•˜์ž | +| ----------------------------------- | ----------------------- | +| ์ฝ”๋“œ๋ฅผ ์ด์šฉํ•ด ์ž์ฃผ ์‹คํ—˜ํ•˜์ž | ์•„๋ฌด ์ƒ๊ฐ ์—†์ด ์ฝ”๋“œ๋งŒ ์ฐ์–ด๋‚ด์„œ๋Š” ์•ˆ๋œ๋‹ค. | +| ์„ค๊ณ„๋ฌธ์„œ์™€ ๋‹ค๋ฅธ ์‚ฌ๋žŒ์ด ๋งŒ๋“  ์ฝ”๋“œ๋ฅผ ์ฝ์ž | ์œ„ํ—˜๊ณผ ์‹คํŒจ๋ฅผ ๋‘๋ ค์›Œํ•˜์ง€ ๋ง์ž | +| ๋ฐ‹์—…, ์˜จ๋ผ์ธ ์ปค๋ฎค๋‹ˆํ‹ฐ, ๊ด€์‹ฌ ๊ทธ๋ฃน, ๋ฉ˜ํ† ์‹ญ ํ”„๋กœ๊ทธ๋žจ์— ์ฐธ์—ฌํ•˜์ž | ๋„ˆ๋ฌด ์žฆ์€ ์ปจํผ๋Ÿฐ์Šค ์ฐธ์„์€ ๊ธˆ๋ฌผ์ด๋‹ค. | +| ๋ฉ€ํ‹ฐ์บ์ŠคํŠธ/๋น„๋™๊ธฐ์‹์œผ๋กœ ์˜์‚ฌ์†Œํ†ตํ•˜์ž | ์งˆ๋ฌธํ•˜๊ธฐ๋ฅผ ๋‘๋ ค์›Œํ•˜์ง€ ๋ง์ž. | +| ์ธํ„ฐ๋ทฐ๋‚˜ ๋ฉด์ ‘ ๊ธด๊ธ‰๋Œ€์‘ ๊ต๋Œ€ ์—…๋ฌด๋ฅผ ๋”ฐ๋ผ ๋‹ค๋…€๋ณด์ž | | + +## โ— ํšŒ๊ณ  + +> ์ง€๊ธˆ ๊ธ€์„ ์“ฐ๊ณ  ์žˆ๋Š” ์‹œ์ ์—๋Š” 3์žฅ๊นŒ์ง€ ์ฝ์–ด๋ดค๋Š”๋ฐ ํšŒ์‚ฌ์— ๊ฐ€์„œ ์ฒ˜์Œ ํ—ค๋งค๋Š” ์‚ฌ๋žŒ์ด๋ž‘ ๊ณต๋ถ€ํ•˜๋Š” ๋ฐฉํ–ฅ์„ ๋ชจ๋ฅด๊ฒ ๋Š” ์‚ฌ๋žŒ์—๊ฒŒ ์ข‹์€ ๊ฒƒ ๊ฐ™๋‹ค. _**ํŠนํžˆ ์—๋Ÿฌ ๋‚ฌ์„ ๋•Œ ์Šคํƒ ํŠธ๋ ˆ์ด์Šค๋ฅผ ๋ณด๋Š” ๊ฒƒ ๊ตญ๋น„์—์„œ๋„ ๋Œ€๋ถ€๋ถ„ ์‚ฌ๋žŒ๋“ค์ด ์ด๊ฑธ ๋ณด๋Š” ๊ฑฐ ์–ด๋ ค์›Œ ํ•œ๋‹ค. ์–ด ์™œ ์•ˆ๋ผ..? ์™œ..? ์—ฌ๊ธฐ์„œ ๋์ด๊ณ  ๋ฌด์Šจ ์ด์œ ์ธ์ง€ ์ฝ˜์†”์„ ๋ณผ๋ ค๊ณ  ํ•˜์ง€ ์•Š๋Š”๋‹ค ๊ทธ๊ฑด ๋‚˜๋„ ๊ทธ๋Ÿฐ ๊ฒƒ ๊ฐ™๋‹ค.**_ + +๊ฑฐ๊ธฐ์„œ ๋ณด๊ณ  ์ด์œ  ๋ฟ ์•„๋‹ˆ๋ผ ์œ„์—์„œ ์„ค๋ช…ํ•œ ๊ฒƒ ์ฒ˜๋Ÿผ nullpointException์ด ์ •ํ™•ํžˆ ์–ธ์ œ ๋‚˜๋Š” ์ง€ ๋“ฑ์„ ์•Œ์•„๋‘๋Š” ๊ฒƒ ๋˜ํ•œ ์ค‘์š”ํ•˜๋‹ค ์ƒ๊ฐํ•œ๋‹ค. diff --git "a/developLog/book/onboarding/_ \355\225\204\353\217\205 \352\260\234\353\260\234\354\236\220 \354\230\250\353\263\264\353\224\251 \352\260\200\354\235\264\353\223\234 3\354\236\245_.md" "b/developLog/book/onboarding/_ \355\225\204\353\217\205 \352\260\234\353\260\234\354\236\220 \354\230\250\353\263\264\353\224\251 \352\260\200\354\235\264\353\223\234 3\354\236\245_.md" new file mode 100644 index 0000000..4d1131c --- /dev/null +++ "b/developLog/book/onboarding/_ \355\225\204\353\217\205 \352\260\234\353\260\234\354\236\220 \354\230\250\353\263\264\353\224\251 \352\260\200\354\235\264\353\223\234 3\354\236\245_.md" @@ -0,0 +1,243 @@ +--- +description: ํ•„๋… ๊ฐœ๋ฐœ์ž ์˜จ๋ณด๋”ฉ ๊ฐ€์ด๋“œ 3์žฅ +--- + +# ํ•„๋… ๊ฐœ๋ฐœ์ž ์˜จ๋ณด๋”ฉ ๊ฐ€์ด๋“œ 3์žฅ + +![](https://velog.velcdn.com/images/prettylee620/post/af06762e-057f-4f79-9e78-1b82d5aedf25/image.png) + +## ์ฝ”๋“œ์™€ ํ•จ๊ป˜ ์ถค์„ - ๋ ˆ๊ฑฐ์‹œ ์ฝ”๋“œ์— ์ž„ํ•˜๋Š” ์ž์„ธ + +> ํ•„๋… ๊ฐœ๋ฐœ์ž ์˜จ๋ณด๋”ฉ ๊ฐ€์ด๋“œ์„ ์ฝ๊ณ  ์ •๋ฆฌํ•˜๋Š” ๊ธ€์ด๋ฉฐ, ํ˜น์‹œ ๋ฌธ์ œ๊ฐ€ ๋˜๋ฉด ์‚ญ์ œํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. + +#### ๐Ÿ‹ ๋“ค์–ด๊ฐ€๊ธฐ ์ „์— ๋ ˆ๊ฑฐ์‹œ ์ฝ”๋“œ๋ž€? + +* ์œ ์‚ฐ, ์‚ฐ๋ฌผ์ด ๋œ ์ฝ”๋“œ +* ๊ฒŒ๋ฐœ : ๊ธฐ์ˆ ์ ์ธ ๋ถ€๋ถ„ OS, ๋” ์ด์ƒ ์“ฐ๊ธฐ ํž˜๋“ค๊ฑฐ๋‚˜ ํ™”๋‚˜๊ฒŒ ํ•˜๋Š” ์ฝ”๋“œ + +1. ๋‹ค๋ฅธ์ฝ”๋“œ์™€์˜ ๊ฐœ์—ฐ์„ฑ์„ ๋ฌด์‹œํ•œ ์ฑ„ Due Date๋งŒ ๋งž์ถฐ ์ž‘์„ฑํ•œ ์ฝ”๋“œ +2. ์ฝ”๋“œ์˜ ์ข…์†์„ฑ, ๋””ํŽœ๋˜์Šค๋ฅผ ๋‚ฎ์ถ”๋ ค๋Š” ๋…ธ๋ ฅ์ด 1๋„ ์—†๋Š” ์ฝ”๋“œ +3. ์ฝ”๋ฉ˜ํŠธ ๋“ฑ์„ ์ „ํ˜€ ๋‚จ๊ธฐ์ง€ ์•Š์•„ ๋” ์ด์ƒ ์ˆ˜์ •, ๋ณด์™„์ด ์–ด๋ ค์šด ์ฝ”๋“œ +4. ๊ธฐ๋Šฅ ๋‹จ์œ„์˜ ํ•จ์ˆ˜ ๋‚˜์•„๊ฐ€ ๋ชจ๋“ˆ ์ž์ฒด๊ฐ€ ์ง€๋‚˜์น˜๊ฒŒ ํฐ ์ฝ”๋“œ, **๊ฐœ๋ฐœ ์ฝ”๋“œ๋Š” ์˜์กด์„ฑ์ด ๋‚ฎ์•„์•ผ ํ•œ๋‹ค.** + +### 1. ๋“ค์–ด๊ฐ€๊ธฐ + +> ์ฝ”๋“œ๋ฒ ์ด์Šค๋Š” ๋งˆ์น˜ ์•„๋ฅผ๋ฅด์˜ ์›ํ˜• ๊ฒฝ๊ธฐ์žฅ๊ณผ ์œ ์‚ฌํ•˜๋‹ค. _**ํ•œ ์„ธ๋Œ€๊ฐ€ ์—ฌ๋Ÿฌ ๊ณ„์ธต์„ ์ž‘์„ฑํ•˜๊ณ  ๋‚˜์ค‘์—๋Š” ๋˜ ๋ฐ”๋€๋‹ค.**_ ํ•œ ์„ธ๋Œ€๊ฐ€ ์—ฌ๋Ÿฌ ๊ณ„์ธต์„ ์ž‘์„ฑํ•˜๊ณ  ๋‚˜์ค‘์—๋Š” ๋˜ ๋ฐ”๋€๋‹ค. ๋งŽ์€ ์‚ฌ๋žŒ์ด ์ฝ”๋“œ์— ์†์„ ๋Œ„๋‹ค. ํ…Œ์ŠคํŠธ์— ๋ˆ„๋ฝ๋œ ๋ถ€๋ถ„์ด ์žˆ๋”๋‚˜ ์˜ค๋ž˜ ์ „์˜ ๊ฐ€์„ค์„ ๊ฐ•์ œํ•˜๋Š” ํ…Œ์ŠคํŠธ๊ฐ€ ์žˆ์„ ์ˆ˜๋„ ์žˆ๋‹ค. ์š”๊ตฌ์‚ฌํ•ญ์˜ ๋ณ€ํ™”๋Š” ์ฝ”๋“œ์˜ ์‚ฌ์šฉ ๋ฐฉ์‹๊ณผ ์–ฝํ˜€ ์žˆ๋‹ค. + +### 2. ์†Œํ”„ํŠธ์›จ์–ด ์—”ํŠธ๋กœํ”ผ๋Š” ๋Š˜์–ด๋‚˜๊ฒŒ ๋งˆ๋ จ์ด๋‹ค. + +#### ๐Ÿ‹ ์†Œํ”„ํŠธ์›จ์–ด ์—”ํŠธ๋กœํ”ผ + +* ์ฝ”๋“œ๊ฐ€ ์ง€์ €๋ถ„ํ•ด์ง€๋Š” ๊ฒƒ์„ ๋œปํ•œ๋‹ค. +* ๊ฐœ๋ฐœ์ž๊ฐ€ ๋‹ค๋ฅธ ์‚ฌ๋žŒ์ด ์“ด ์ฝ”๋“œ๋ฅผ ์ดํ•ด๋ชปํ•˜๊ฑฐ๋‚˜ ๋ฒ„๊ทธ ์ˆ˜์ •๋“ฑ ๋‹ค์–‘ํ•œ ์ด์œ ๋กœ ์ƒ๊ธด๋‹ค. +* ๊ด€๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค. + +#### ๐Ÿ‹ ๊ด€๋ฆฌ ๋ฐฉ๋ฒ• + +* **์ฝ”๋”ฉ ์Šคํƒ€์ผ๊ณผ ๋ฒ„๊ทธ ํƒ์ง€ ๋„๊ตฌ**๋Š” ์ฝ”๋“œ๋ฅผ ๊น”๋”ํ•˜๊ฒŒ ์œ ์ง€ํ•˜๋Š” ๋ฐ ๋„์›€์„ ์ค€๋‹ค. -\*\* ์ฝ”๋“œ ๋ฆฌ๋ทฐ\*\* ์—ญ์‹œ ์ง€์‹์„ ์ „ํŒŒํ•˜๊ณ  ์ฝ”๋“œ์˜ ์ผ๊ด€์„ฑ์ด ๋–จ์–ด์ง€๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋œ๋‹ค. +* ์ง€์†์ ์ธ\*\* ๋ฆฌํŒฉํ„ฐ๋ง\*\*์„ ํ†ตํ•ด ์—”ํŠธ๋กœํ”ผ๋ฅผ ๋‚ฎ์ถœ ์ˆ˜๋„ ์žˆ๋‹ค. + +### 3. ๊ฒฐ์ฝ” ํ”ผํ•  ์ˆ˜ ์—†๋Š” ๊ธฐ์ˆ  ๋ถ€์ฑ„ + +#### ๐Ÿ‹ ๊ธฐ์ˆ  ๋ถ€์ฑ„ + +* ์†Œํ”„ํŠธ์›จ์–ด ์—”ํŠธ๋กœํ”ผ๋ฅผ ๊ฐ€์ค‘์‹œํ‚ค๋Š” ์ฃผ์š” ์š”์ธ +* ๊ธฐ์กด ์ฝ”๋“œ์˜ ๋‹จ์ ์„ ์ˆ˜์ •ํ•˜๋ฉด์„œ ๋‚˜์ค‘์— ๋ฏธ๋ค„๋‘” ์ž‘์—…์„ ๋งํ•œ๋‹ค. +* ์ฐจ์„ ์ฑ…์„ ์„ ํƒํ•  ์ˆ˜๋ก ๊ตฌํ˜„ํ•˜๋ฉด์„œ ์ ์ฐจ ๋ณต์žก๋„๊ฐ€ ์˜ฌ๋ผ๊ฐ€๋ฉฐ, ๋น„์šฉ ๋˜ํ•œ ์ ์  ๋Š˜์–ด๋‚œ๋‹ค. +* ๋ ˆ๊ฑฐ์‹œ ์ฝ”๋“œ๋Š” ์ˆ˜ ๋งŽ์€ ๊ธฐ์ˆ  ๋ถ€์ฑ„๊ฐ€ ์‚ฐ์žฌํ•ด ์žˆ๋‹ค. + +#### ๐Ÿ‹ ๊ธฐ์ˆ  ๋ถ€์ฑ„ ๋งคํŠธ๋ฆญ์Šค + +\ +1\. **์‹ ์ค‘ํžˆ ๊ณ ๋ฏผํ•˜๋‹ค ์˜๋„์ ์œผ๋กœ ๋งŒ๋“ค์–ด์ง„ ๋ถ€์ฑ„**๋Š” ๋ณดํŽธ์ ์œผ๋กœ ๋ฐœ์ƒํ•˜๋Š” ๊ธฐ์ˆ  ๋ถ€์ฑ„ ์œ ํ˜•์ด๋‹ค. ๋‚˜์ค‘์— ํŒ€์ด ํ•ด๊ฒฐ ๊ฐ€๋Šฅํ•˜๋„๋ก ํ›ˆ๋ จ๋œ๋ถ€์ฑ„๋ผ๋ฉด ์ด๋Š” ์ข‹์€ ๋ถ€์ฑ„๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค. 2.\*\* ์‹ ์ค‘ํ•˜์ง€ ๋ชปํ–ˆ์ง€๋งŒ ์˜๋„์ ์œผ๋กœ ๋งŒ๋“ค์–ด์ง„ ๋ถ€์ฑ„\*\*๋Š” ์ฃผ๋กœ ํŒ€์ด ์ถœ์‹œ์ผ ์••๋ฐ•์„ ๋ฐ›๋Š” ์ƒํ™ฉ์—์„œ ๋งŒ๋“ค์–ด์ง„๋‹ค. ๋ณดํ†ต ์ผ๋‹จ์ด๋ผ๋Š” ๋‹จ์–ด๊ฐ€๋“ค์–ด ๊ฐ„๋‹ค. 3. **์‹ ์ค‘ํ•˜์ง€๋„ ์˜๋„์น˜๋„ ์•Š๋Š” ๋ถ€์ฑ„**๋Š” ์•Š์•˜๋˜ ๋ถ€์ฑ„๋Š” ์•Œ๋ ค์ง€์ง€ ์•Š์€ ๋ฏธ์ง€, ๋ชฐ๋ผ์„œ ๋ชจ๋ฅด๋Š” ๊ฒƒ๋“ค ๋•Œ๋ฌธ์— ๋ฐœ์ƒํ•œ๋‹ค. ๊พธ์ค€ํ•œ ํ•™์Šต๊ณผ ์ฝ”๋“œ ๋ฆฌ๋ทฐ๊ฐ€ ํ•„์š”ํ•˜๋‹ค, 4. **์‹ ์ค‘ํ–ˆ์ง€๋งŒ ์˜๋„์น˜ ์•Š๋Š” ๋ถ€์ฑ„**๋Š” ์„ฑ์žฅ ๊ณผ์ •์—์„œ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ๋‚˜ํƒ€๋‚˜๋Š” ๊ฒฐ๊ณผ๋‹ค. ๋‹จ์ˆœํžˆ ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ์ œ๋Œ€๋กœ ์ผ์„ ํ•˜์ง€ ์•Š์•„์„œ์ƒ๊ธฐ๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ๋ฌธ์ œ ๋„๋ฉ”์ธ์— ๋Œ€ํ•ด ๋ฐฐ์šฐ๋Š” ๊ณผ์ •์ด๋‚˜ ์†Œํ”„ํŠธ์›จ์–ด ์•„ํ‚คํ…ํŠธ๊ฐ€ ์„ฑ์žฅํ•˜๋Š” ๊ณผ์ • ์ค‘ ๋ฐœ์ƒํ•˜๋Š” ์ž์—ฐ์Šค๋Ÿฌ์šด ๊ฒฐ๊ณผ๋‹ค. + +| | ์‹ ์ค‘ํ•˜์ง€ ๋ชปํ•œ ์„ ํƒ | ์‹ ์ค‘ํ•œ ์„ ํƒ | +| --------- | ------------- | --------------------- | +| ์˜๋„ํ•œ ์„ ํƒ | ์„ค๊ณ„ํ•  ์‹œ๊ฐ„์ด ์—†์–ด์š” | ์ผ๋‹จ ์ถœ์‹œ ํ›„ ๊ฒฐ๊ณผ๋ฅผ ๋ณด๊ณ  ๋Œ€์ฒ˜ํ•ฉ์‹œ๋‹ค. | +| ์˜๋„์น˜ ์•Š์€ ์„ ํƒ | ๊ณ„์ธตํ™”๊ฐ€ ๋„๋Œ€์ฒด ๋ญ”๊ฐ€์š”? | ๋ญ˜ ์‹ค์ˆ˜ํ–ˆ๋Š”์ง€ ์ด์   ์•Œ๊ฒ ๋„ค์š” | + +### 4. ๊ธฐ์ˆ  ๋ถ€์ฑ„๋ฅผ ์ƒํ™˜ํ•˜๋Š” ๋ฐฉ๋ฒ• + +* ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•œ๋‹ฌ๋™์•ˆ ์˜จ์„ธ์ƒ์ด ๋ฉˆ์ถฐ์ฃผ์ง€๋Š” ์•Š๋Š”๋‹ค. ๊ทธ๋Ÿฌ๋‹ˆ ์—…๋ฌด๋ฅผ ์ง„ํ–‰ํ•˜๋ฉด์„œ ํ•„์š”ํ•œ ๋ถ€๋ถ„์€ ์ •๋ฆฌํ•˜๊ณ  ์กฐ๊ธˆ์”ฉ ๋ฆฌํŒฉํ„ฐ๋ง์„ ํ•˜์ž. ๋ณ€๊ฒฝ์‚ฌํ•ญ์€ ์ž‘๊ณ  ๋…๋ฆฝ์ ์ธ ์ปค๋ฐ‹๊ณผ PR(ํ’€ ๋ฆฌํ€˜์ŠคํŠธ)๋กœ ๋งŒ๋“ค์ž +* ๋ถ€์ฑ„๋ฅผ ํ•ด๊ฒฐํ•˜๋ฉด ์ถœ์‹œ ์†๋„๊ฐ€ ๋นจ๋ผ์ง€๊ณ  ๋ถ€์ฑ„๋ฅผ ์Œ“์•„๋‘๋ฉด ์ถœ์‹œ ์†๋„๊ฐ€ ๋Š๋ ค์ง„๋‹ค. + +#### ๐Ÿ‹ ๋Œ€๊ทœ๋ชจ ๋ฆฌํŒฉํ„ฐ๋ง + +* ๋งŒ์ผ ๋Œ€๊ทœ๋ชจ ๋ฆฌํŒฉํ„ฐ๋ง์ด๋‚˜ ์žฌ์ž‘์„ฑ์„ ์ œ์•ˆํ•˜๋ ค ํ•œ๋‹ค๋ฉด ํŒ€๊ณผ๋จผ์ € ์˜๋…ผํ•ด๋ณด์ž + +> 1. ์ƒํ™ฉ์„ ์‚ฌ์‹ค ๊ทธ๋Œ€๋กœ ์„ค๋ช…ํ•œ๋‹ค. +> 2. ๋ถ€์ฑ„์˜ ์œ„ํ—˜๊ณผ ๋น„์šฉ์„ ๊ธฐ์ˆ ํ•œ๋‹ค. +> 3. ํ•ด๊ฒฐ์ฑ…์„ ์ œ์•ˆํ•œ๋‹ค. +> 4. (๋ถ€์ฑ„๋ฅผ ๊ทธ๋Œ€๋กœ ๋‘๋Š” ๋ฐฉ๋ฒ•์„ ๋น„๋กํ•ด) ๋Œ€์•ˆ์— ๋Œ€ํ•ด ๋…ผ์˜ํ•œ๋‹ค. +> 5. ํŠธ๋ ˆ์ด๋“œ์˜คํ”„๋ฅผ ๋”ฐ์ ธ๋ณธ๋‹ค. + +### 5. ์ฝ”๋“œ ๋ณ€๊ฒฝ์œผ๋กœ ์ธํ•œ ๊ณ ํ†ต์„ ์กฐ๊ธˆ์ด๋ผ๋„ ์ค„์ด๋ ค๋ฉด + +1. ์ฝ”๋“œ ๋ณ€๊ฒฝ์€ ์ƒˆ๋กœ์šด ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์— ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ๊ณผ๋Š” ๋‹ค๋ฅธ ์ฐจ์›์˜ ๋ฌธ์ œ์ด๋‹ค. +2. ๊ธฐ์กด์˜ ๋™์ž‘์„ ์œ ์ง€ํ•˜๋ฉด์„œ ๋ณ€๊ฒฝํ•ด์•ผ ํ•˜๊ธฐ ๋–„๋ฌธ์ด๋ฉฐ, ๋‹ค๋ฅธ ๊ฐœ๋ฐœ์ž์˜ ์‚ฌ๊ณ  ๋ฐฉ์‹์„ ์ดํ•ดํ•˜๊ณ  ๊ธฐ์กด ์Šคํƒ€์ผ๊ณผ ํŒจํ„ด์„ ์œ ์ง€ํ•˜๋Š” ๊ฒƒ + +### 6. ๋ ˆ๊ฑฐ์‹œ ์ฝ”๋“œ ๋ณ€๊ฒฝ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ํ™œ์šฉํ•˜์ž + +> ์ฒ˜์Œ 4๊ฐœ์˜ ๊ณผ์ •์€ ๋ฐญ์— ์”จ๋ฅผ ๋ฟŒ๋ฆฌ๋Š” 5๋ฒˆ์งธ ๊ณผ์ •์ „์— ์ฃผ๋ณ€์„ ์ •๋ฆฌํ•˜๊ณ  ์šธํƒ€๋ฆฌ๋ฅผ ์น˜๋Š” ๊ณผ์ •์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜์ž. + +#### ๐Ÿ‹ 1) ๋ณ€๊ฒฝ ์ง€์ ์„ ํ™•์ธํ•˜์ž. + +* ๋ฐญ์— ์”จ๋ฅผ ๋ฟŒ๋ฆฌ๋Š” ์€์œ ์— ๋น—๋Œ€์–ด ์ƒ๊ฐํ•ด๋ณด๋ฉด ๋ณ€๊ฒฝํ•ด์•ผ ํ•  ์ง€์ ์ด ๋ฐ”๋กœ ์”จ๋ฅผ ๋ฟŒ๋ฆฌ๋Š” ์ง€์ ์ด๋‹ค. + +#### ๐Ÿ‹ 2) ํ…Œ์ŠคํŠธ ํ•  ์ง€์ ์„ ํ™•์ธํ•˜์ž + +* ์ˆ˜์ •ํ•˜๊ณ ์ž ํ•˜๋Š” ์ฝ”๋“œ์˜ ์ง„์ž…์ , ์ฆ‰ ํ…Œ์ŠคํŠธ๊ฐ€ ์ง์ ‘ ํ˜ธ์ถœํ•˜๊ณ  ๊ฐ’์„ ๋„ฃ์–ด๋ณด๋Š” ๋ถ€๋ถ„์ด๋‹ค. +* ํ…Œ์ŠคํŠธ ์ง€์ ์€ _**๋ณ€๊ฒฝ ์ „์— ํ˜„์žฌ ์ฝ”๋“œ๊ฐ€ ์–ด๋–ป๊ฒŒ ๋™์ž‘ํ•˜๋Š”์ง€ ๋ณด์—ฌ์ฃผ๋ฉฐ ์ด ์ง€์ ์„ ์ด์šฉํ•ด ๋ณ€๊ฒฝํ•˜๋Š” ์ฝ”๋“œ ํ…Œ์ŠคํŠธ**_ + +#### ๐Ÿ‹ 3) ์˜์กด์„ฑ์„ ๋‚˜๋ˆˆ๋‹ค. + +> ๊ฐ€์žฅ ์œ„ํ—˜ํ•œ ๊ณผ์ •์œผ๋กœ ์กฐ๊ธˆ์”ฉ ์ž‘์—…์„ ์ง„ํ–‰ํ•˜๋˜, ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜๋ฉด ์•ˆ๋จ, ํ…Œ์Šค๋Š” ์ž์ฃผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋นจ๋ฆฌ ๋™์ž‘ํ•˜๊ฒŒ ๋งŒ๋“ค์ž! + +* ํ…Œ์ŠคํŠธ ์ง€์ ์„ ์ฐพ๊ธฐ ์œ„ํ•ด ์˜์กด์„ฑ์„ ๋‚˜๋ˆŒ ํ•„์š”๊ฐ€ ์žˆ๋‹ค. +* ์—ฌ๊ธฐ์„œ ๋งํ•˜๋Š” `์˜์กด์„ฑ` : ์ฝ”๋“œ๋ฅผ ํ…Œ์ŠคํŠธํ•˜๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•œ ๊ฐ์ฒด๋‚˜ ๋ฉ”์†Œ๋“œ๋ฅผ ์˜๋ฏธ +* `์˜์กด์„ฑ์„ ๋‚˜๋ˆˆ๋‹ค` : ํ…Œ์ŠคํŠธ๊ฐ€ ์šฉ์ดํ•˜์ง€ ์•Š์€ ์ฝ”๋“œ์˜ ๊ตฌ์กฐ๋ฅผ ๋ฐ”๊พผ๋‹ค๋Š” ๋œป + +**์˜์กด์„ฑ์„ ๋‚˜๋ˆ„๋Š” ๋ฐฉ๋ฒ•** + +1. ํฌ๊ณ  ๋ณต์žกํ•œ ๋ฉ”์†Œ๋“œ๋Š” **๋” ์ž‘์€ ํฌ๊ธฐ์˜ ๋ฉ”์†Œ๋“œ๋กœ ๋‚˜๋ˆ ์„œ ๊ฐ๊ธฐ ๋ถ„๋ฆฌ๋œ ๊ธฐ๋Šฅ์ด ๋…๋ฆฝ์ ์œผ๋กœ ํ…Œ์ŠคํŠธ** ๋  ์ˆ˜ ์žˆ๊ฒŒ ํ•œ๋‹ค. +2. ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ด์šฉํ•ด์„œ, ๋ณต์žกํ•œ ๊ฐ์ฒด๋ฅผ ์™„์ „ํ•˜์ง€๋Š” ์•Š์•„๋„ ํ…Œ์ŠคํŠธํ•˜๊ธฐ์—๋Š” **์ถฉ๋ถ„ํ•œ ๋‹จ์ˆœ ๊ตฌํ˜„์ฒด๋กœ ๋Œ€์ฒดํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•**์„ ๋งˆ๋ จํ•œ๋‹ค. +3. ์‹œ๊ฐ„์˜ ํ๋ฆ„๊ฐ™์ด ์ œ์–ดํ•˜๊ธฐ ์–ด๋ ค์šด ์‹คํ–‰ํ™˜๊ฒฝ์„ ์‹œ๋ฌผ๋ ˆ์ด์…˜ํ•  ์ˆ˜ ์žˆ๋Š” ๋ช…์‹œ์  ์ œ์–ด ์ง€์  ์ฃผ์ž… + +**์ข€ ๋” ์‰ฝ๊ฒŒ ํ…Œ์ŠคํŠธ ํ•˜๊ธฐ ์œ„ํ•ด ์ ‘๊ทผ์ œ์–ด์ž ๋ณ€๊ฒฝํ•˜์ง€ ๋ง์ž** + +* `์บก์Šํ™”`์— ๋ฌธ์ œ๊ฐ€ ์ƒ๊น€ + +#### ๐Ÿ‹ 4) ํ…Œ์ŠคํŠธ๋ฅผ ์ž‘์„ฑ + +> ์˜์กด์„ฑ์„๋‚˜๋ˆ„๊ณ  ๋ฆฌํŒฉํ„ฐ๋ง์„ ํ•˜๋ฉด์„œ ๊ธฐ์กด ๋™์ž‘์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋Š” ์ƒˆ๋กœ์šด ํ…Œ์ŠคํŠธ ์ถ”๊ฐ€ + +* ์ž๋™ ํ…Œ์ŠคํŠธ ๋„๊ตฌ ์‚ฌ์šฉ ๊ณ ๋ ค\[6์žฅ์— ์ž์„ธํžˆ ๋‚˜์˜จ๋‹ค๊ณ  ํ•จ] + +#### ๐Ÿ‹ 5) ์ฝ”๋“œ ๋ณ€๊ฒฝ + +### 7. ์ฝ”๋“œ๋Š” ์ฒ˜์Œ๋ณด๋‹ค ๋” ๊น”๋”ํ•˜๊ฒŒ ์œ ์ง€ํ•˜์ž + +> ์ด๋ฆ„์ด ๋„ˆ๋ฌด ๊ธด ๋ฉ”์†Œ๋“œ, ํด๋ž˜์Šค, ์ค‘๋ณต ์ฝ”๋“œ, ๋„ˆ๋ฌด ๋งŽ์€ ๋ถ„๊ธฐ๋‚˜ ๋ฃจํ”„, ๋„ˆ๋ฌด ๋งŽ์€ ๋งค๊ฐœ๋ณ€์ˆ˜ ๊ฐ™์€ ๋ฌธ์ œ๋ฅผ ์ฐพ์•„์ฃผ๋Š” \*\*๋ฆฐํ„ฐ(linter)๋‚˜ ์ฝ”๋“œ ํ’ˆ์งˆ ๋„๊ตฌ๊ฐ€ ๋งŽ์Œ \*\* ๊ด€๋ จ ๋งํฌ : [์ฝ”๋“œ ํ’ˆ์งˆ ๊ฐ์‚ฌ๋ฅผ ์œ„ํ•œ 9๊ฐ€์ง€ ์ตœ๊ณ ์˜ ๋„๊ตฌ](https://hashdork.com/ko/%EA%B0%90%EC%82%AC-%EC%BD%94%EB%93%9C-%ED%92%88%EC%A7%88-%EA%B4%80%EB%A6%AC%EB%A5%BC-%EC%9C%84%ED%95%9C-%EC%B5%9C%EA%B3%A0%EC%9D%98-%EB%8F%84%EA%B5%AC/) ๊ด€๋ จ ๋งํฌ : [linter](https://www.testim.io/blog/what-is-a-linter-heres-a-definition-and-quick-start-guide/) + +1. ๋ฒ„๊ทธ๋ฅผ ์ˆ˜์ •ํ•˜๊ฑฐ๋‚˜ ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•  ๋•Œ๋Š” ์ฃผ๋ณ€ ์ฝ”๋“œ๋ฅผ ์ •๋ฆฌํ•˜์ž. +2. \_**์ฝ”๋“œ๋ฅผ ์ •๋ฆฌํ•˜๋Š” ์ปค๋ฐ‹์€ ๋™์ž‘์„ ๋ณ€๊ฒฝํ•˜๋Š” ์ปค๋ฐ‹๊ณผ ๊ตฌ๋ถ„**\_ํ•˜์ž. +3. ์ปค๋ฐ‹์˜ ํฌ๊ธฐ๊ฐ€ ์ž‘์„์ˆ˜๋ก ๋ณ€๊ฒฝ์‚ฌํ•ญ ๋ฆฌ๋ทฐ์—๋„ ์ข‹์Œ + +#### ๐Ÿ‹ ์ฝ”๋“œ ์•…์ทจ + +* ๋ฒ„๊ทธ๋Š” ์•„๋‹ˆ์ง€๋งŒ ๋ฌธ์ œ๋ฅผ ์œ ๋ฐœํ•  ์ˆ˜ ์žˆ๋Š” ํŒจํ„ด์„ ์‚ฌ์šฉํ•˜๋Š” ์ฝ”๋“œ +* ์ด ์ฝ”๋“œ ์ƒ์—๋Š” ๋ฌธ์ œ๊ฐ€ ์—†์œผ๋‚˜ + +```java +if(a ๋ณ€๊ฒฝํ•œ ์ฝ”๋“œ๋Š” ๊นƒ๊ณผ ๊น‰์€ ๋ฒ„์ „ ์ œ์–ด ์‹œ์Šคํ…œ์— ์ปค๋ฐ‹ํ•ด์•ผ ํ•œ๋‹ค. + +#### ๐Ÿ‹ ๋ณ€๊ฒฝ์‚ฌํ•ญ์€ ์ผ์ฐ ๊ทธ๋ฆฌ๊ณ  ์ž์ฃผ ์ปค๋ฐ‹ + +* ์ปค๋ฐ‹์„ ์ž์ฃผํ•˜๋ฉด **์‹œ๊ฐ„์˜ ํ๋ฆ„์— ๋”ฐ๋ผ** ์ฝ”๋“œ๊ฐ€ ์–ด๋–ป๊ฒŒ ๋ณ€ํ™”ํ•ด๊ฐ€๋Š”์ง€ ๋ณผ ์ˆ˜ ์žˆ๊ณ , ๋ณ€๊ฒฝ์„ ๋˜๋Œ๋ฆด ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์›๊ฒฉ ๋ฐฑ์—…์œผ๋กœ๋„ ํ™œ์šฉ ๊ฐ€๋Šฅ +* ํ•˜์ง€๋งŒ\*\* ์˜๋ฏธ ์—†๋Š” ๋ฉ”์„ธ์ง€๋“ค์€ ๋ฆฌ๋ทฐ ์š”์ฒญ ์ „ ๋ธŒ๋žœ์น˜๋ฅผ\*\* `๋ฆฌ๋ฒ ์ด์Šค(rebase)`ํ•˜๊ฑฐ๋‚˜ ์ปค๋ฐ‹์„ `์Šคํ€ด์‹œ(squash)`ํ•ด์„œ ์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€๋ฅผ ๋ช…๋ฃŒํ•˜๊ฒŒ ์ „๋‹ฌ +* ๋ฆฌ๋ฒ ์ด์Šค : ๊นƒ์—์„œ ์ œ๊ณตํ•˜๋Š” ์ธํ„ฐ๊ทธ๋ ˆ์ด์…˜ ๋ช…๋ น์–ด +* ์Šคํ€ด์‹œ : ์ปค๋ฐ‹ ํžˆ์Šคํ† ๋ฆฌ ์กฐ์ • + +#### ๐Ÿ‹ ์ปค๋ฐ‹ ์Šคํ€ด์‹œ๋Š” ํŒ€์˜ ๊ทœ์น™์— ๋”ฐ๋ฅผ ๊ฒƒ + +* ๋ณดํ†ต์€ **\[MYPROJ-123 ๋ฐฑ์—”๋“œ์— ํฌ์ŠคํŠธ๊ทธ๋ ˆ์Šค DB ๋„์ž…]** ์ปค๋ฐ‹ ๋ฉ”์„ธ์ง€ ์•ž์— `์ด์Šˆ ID`๋ฅผ ๋ถ™ํž˜ + +#### ๐Ÿ‹ ๊นƒ COMMIT ๋ฉ”์„ธ์ง€ ์ž‘์„ฑ 7๊ฐ€์ง€ ์š”๋ น + +๊ทธ ์™ธ ์ฐธ์กฐ\[๋Œ€๋ฌธ์ž ๊ด€๋ จ ๋‚ด์šฉ ์ฐธ์กฐ] : https://velog.io/@yeongmins/%EA%B9%83%ED%97%88%EB%B8%8CGitHub-%EC%A0%95%EB%A6%AC + +1. ์ œ๋ชฉ๊ณผ ๋ณธ๋ฌธ ์‚ฌ์ด์— ๋นˆ ์ค„์„ ํ•œ ํ–‰ ์‚ฝ์ž…ํ•œ๋‹ค, +2. ์ œ๋ชฉ์€ 50์ž ์ด๋‚ด๋กœ ์ œํ•œํ•œ๋‹ค. +3. ์ œ๋ชฉ์€ ๋Œ€๋ฌธ์ž๋กœ + +> feat : ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ ์ถ”๊ฐ€ fix : ๋ฒ„๊ทธ ์ˆ˜์ • docs : ๋ฌธ์„œ ์ˆ˜์ • style : ์ฝ”๋“œ ์Šคํƒ€์ผ ๋ณ€๊ฒฝ (์ฝ”๋“œ ํฌ๋งคํŒ…, ์„ธ๋ฏธ์ฝœ๋ก  ๋ˆ„๋ฝ ๋“ฑ) design : ์‚ฌ์šฉ์ž UI ๋””์ž์ธ ๋ณ€๊ฒฝ (CSS ๋“ฑ) test : ํ…Œ์ŠคํŠธ ์ฝ”๋“œ, ๋ฆฌํŒฉํ† ๋ง (Test Code) refactor : ๋ฆฌํŒฉํ† ๋ง (Production Code) build : ๋นŒ๋“œ ํŒŒ์ผ ์ˆ˜์ • ci : CI ์„ค์ • ํŒŒ์ผ ์ˆ˜์ • perf : ์„ฑ๋Šฅ ๊ฐœ์„  chore : ์ž์ž˜ํ•œ ์ˆ˜์ •์ด๋‚˜ ๋นŒ๋“œ ์—…๋ฐ์ดํŠธ rename : ํŒŒ์ผ ํ˜น์€ ํด๋”๋ช…์„ ์ˆ˜์ •๋งŒ ํ•œ ๊ฒฝ์šฐ remove : ํŒŒ์ผ์„ ์‚ญ์ œ๋งŒ ํ•œ ๊ฒฝ์šฐ + +4. ์ œ๋ชฉ ๋์— ๋งˆ์นจํ‘œ๋ฅผ ๋ถ™์ด์ง€ ์•Š๋Š”๋‹ค. +5. ์ œ๋ชฉ์€ ๋ช…๋ นํ˜• ๋ฌธ์žฅ์œผ๋กœ ์ž‘์„ฑํ•œ๋‹ค. +6. ๋ณธ๋ฌธ์€ ๊ฐ ํ–‰์€ 72์ž๋ฅผ ๋„˜์ง€ ์•Š๊ฒŒ ํ•œ๋‹ค. +7. ๋ณธ๋ฌธ์—๋Š” ์ฝ”๋“œ๊ฐ€ `์–ด๋–ป๊ฒŒ` ๋ฐ”๋€Œ์—ˆ๋Š”์ง€ ๋ณด๋‹ค๋Š” \*\*๋ฌด์Šจ ์ฝ”๋“œ๊ฐ€ ์™œ ๋ฐ”๋€Œ์—ˆ๋Š”์ง€ ์„ค๋ช… \*\* + +### 12. ๊ทธ ์™ธ + +#### ๐Ÿ‹ ์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ์—์„œ ๋น ์ง€๊ธฐ ์‰ฌ์šด ํ•จ์ •์„ ์ตœ๋Œ€ํ•œ ํ”ผํ•˜๋ ค๋ฉด + +* ์ฝ”๋“œ๋ฅผ ์ฒ˜์Œ๋ถ€ํ„ฐ ๋‹ค์‹œ ์ž‘์„ฑํ•˜๋ ค ํ•œ๋‹ค๊ฑฐ๋‚˜ ํ‘œ์ค€์„ ๋ฌด์‹œํ•˜๋Š” ํ–‰๋™์€ ์œ„ํ—˜ํ•˜๋‹ค. +* ๊ฐœ์„ ํ•œ ์ฝ”๋“œ๋Š” ๊ธฐ์กด ์ฝ”๋“œ๋ณด๋‹ค ๋ช‡ ๋ฐฐ ์ข‹์•„์•ผ ํ•œ๋‹ค. +* ๊ณ ๋ถ€๊ฐ€๊ฐ€์น˜๋ฅผ ๋‚ผ ์ˆ˜ ์žˆ๋Š” ์ƒํ™ฉ์—์„œ๋งŒ ์žฌ์ž‘์„ฑํ•˜์ž + +#### ๐Ÿ‹ ๋˜๋„๋ก ๊ฒ€์ฆ๋œ ๊ธฐ์ˆ ์„ ์‚ฌ์šฉํ•˜์ž + +* ์„ฑ๊ณต์ ์ธ ๊ธฐ์—…์ด ์˜ค๋ž˜๋œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€ ์˜ค๋ž˜๋œ ํŒจํ„ด์œผ๋กœ ๊ฒฌ๊ณ ํ•œ ์ฝ”๋“œ๋ฅผ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐ ์ด์œ ๊ฐ€ ์žˆ๋‹ค. +* \*\*์ƒˆ๋กœ์šด ๊ธฐ์ˆ ์˜ ๋ฌธ์ œ์ ์€ ์„ฑ์ˆ™ํ•˜์ง€ ๋ชปํ•˜๋‹ค๋Š” ์ ์ด๋‹ค. \*\* +* ์ƒˆ๋กœ์šด ๊ธฐ์ˆ ์€ ์˜์™ธ์˜ ๋ฐฉ๋ฒ•์œผ๋กœ ๋ฌธ์ œ๋ฅผ ์œ ๋ฐœํ•œ๋‹ค. +* ๊ฒŒ๋‹ค๊ฐ€ ์ƒˆ๋กœ์šด ๊ธฐ์ˆ ์€ ์Šคํƒ์˜ค๋ฒ„ํ”Œ๋กœ์—์„œ ๊ด€๋ จ ๋‹ต๋ณ€์„ ์ฐพ๊ธฐ๋„ ์–ด๋ ต๋‹ค. +* ์‹ ๊ธฐ์ˆ ์ด ํšŒ์‚ฌ์˜ ๊ฒฝ์Ÿ๋ ฅ์„ ๋†’์—ฌ์ค„ ์ˆ˜ ์žˆ๋‹ค๋ฉด, ๊ทธ ๊ธฐ์ˆ ์„ ๋„์ž…ํ•  ๋งŒํ•œ ๊ฐ€์น˜๊ฐ€ ์žˆ๋‹ค. +* ์ƒˆ๋กœ์šด ์–ธ์–ด๋ฅผ ์„ ํƒํ•˜๋Š” ๊ฒƒ์€ ํšŒ์‚ฌ์˜ ์ƒํƒœ๊ณ„์— ๊ธฐ์ˆ  ์Šคํƒ ์ „์ฒด๋ฅผ ๋•Œ๋ ค ๋„ฃ๋Š”๊ฒƒ์ด๋‹ค. ์ƒˆ๋กœ์šด ๋นŒ๋“œ ์‹œ์Šคํ…œ, ํ…Œ์ŠคํŠธ ํ”„๋ ˆ์ž„์›Œํฌ, IDE ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋“ฑ์„ ๋ฐ˜๋“œ์‹œ ์ง€์›ํ•ด์•ผ ํ•œ๋‹ค. +* ์ƒˆ๋กœ ์„ ํƒํ•˜๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์˜ ์ƒํƒœ๊ณ„๊ฐ€ ์–ผ๋งˆ๋‚˜ ์„ฑ์ˆ™ํ•ด์ ธ ์žˆ๋Š”์ง€๋Š” ํŠนํžˆ ์ค‘์š”ํ•œ ์‚ฌ์•ˆ์ด๋‹ค. +* ์–ธ์–ด๊ฐ€ ์‚ฌ์žฅ๋˜์ง€ ์•Š๋Š” ํ•œ, ๋‹จ์ง€ ์˜ค๋ž˜๋๋‹ค๊ฑฐ๋‚˜ ๊ด€์‹ฌ์ด ์ค„์—ˆ๋‹ค๋Š” ์‚ฌ์‹ค์ด ๊ทธ ์–ธ์–ด๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์„ ์ด์œ ๋Š” ๋˜์ง€ ๋ชปํ•œ๋‹ค. + +#### ๐Ÿ‹ ์ œ๋ฐœ ์•…๋™์€ ๋˜์ง€๋ง์ž. + +> ๋‹จ์ง€ ๋งˆ์Œ์— ๋“ค์ง€ ์•Š๋Š”๋‹ค๋Š” ์ด์œ ๋กœ ํšŒ์‚ฌ์˜ ํ‘œ์ค€์„ ๋ฌด์‹œํ•ด์„œ๋Š” ์•ˆ๋œ๋‹ค. ํ‘œ์ค€์„ ๋ฐ”๊ฟ€ ๋•Œ๋Š” ์šฐ์„ ์ˆœ์œ„, ์†Œ์œ ๊ถŒ ๋น„์šฉ, ๊ตฌํ˜„, ์„ธ๋ถ€๋‚ด์—ญ ๋“ฑ ๋‹ค๊ฐ๋„๋กœ ๊ณ ๋ คํ•ด์•ผ ํ•œ๋‹ค. + +### 13. ๊ฐœ๋ฐœ์ž ํ•„์ˆ˜ ์ฒดํฌ๋ฆฌ์ŠคํŠธ + +| โญ• ์ด๊ฒƒ๋งŒ์€ ์ง€ํ‚ค์ž | โŒ ์ด๊ฒƒ๋งŒ์€ ํ”ผํ•˜์ž | +| ----------------------- | --------------------------------- | +| ์ ์ง„์ ์œผ๋กœ ๋ฆฌํŒฉํ„ฐ๋งํ•˜์ž | ๊ธฐ์ˆ  ๋ถ€์ฑ„๋ผ๋Š” ๋‹จ์–ด๋ฅผ ๋‚จ์šฉํ•˜์ง€ ๋ง์ž | +| ๋ฆฌํŒฉํ„ฐ๋ง ์ปค๋ฐ‹๊ณผ ๊ธฐ๋Šฅ ๊ด€๋ จ ์ปค๋ฐ‹์€ ๋ถ„๋ฆฌํ•˜์ž | ํ…Œ์ŠคํŠธ๋ฅผ ๋ชฉ์ ์œผ๋กœ ๋ฉ”์†Œ๋“œ๋‚˜ ๋ณ€์ˆ˜๋ฅผ ์™ธ๋ถ€์— ๊ณต๊ฐœํ•ด์„œ๋Š” ์•ˆ๋œ๋‹ค. | +| ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ์ž‘๊ฒŒ ์œ ์ง€ํ•˜์ž | ํŠน์ • ์–ธ์–ด์— ์—ฐ์—ฐํ•˜์ง€ ๋ง์ž | +| ์ฒ˜์Œ ์ƒํƒœ๋ณด๋‹ค ์ฝ”๋“œ๋ฅผ ๋” ๊น”๋”ํ•˜๊ฒŒ ์œ ์ง€ํ•˜์ž | ํšŒ์‚ฌ์˜ํ‘œ์ค€๊ณผ ๋„๊ตฌ๋ฅผ ๋ฌด์‹œํ•ด์„œ๋Š” ์•ˆ ๋œ๋‹ค. | +| ํ‰๋ฒ”ํ•œ ๊ธฐ์ˆ ์„ ์‚ฌ์šฉํ•˜์ž | ์—…์ŠคํŠธ๋ฆผ ์ปค๋ฐ‹์—†์ด ์ฝ”๋“œ ๋ฒ ์ด์Šค๋ฅผ ํฌํฌํ•ด์„œ๋Š” ์•ˆ ๋œ๋‹ค. | + +## ์ฝ๊ณ  ๋‚œ ๋’ค + +> ๋ฆฌํŒฉํ„ฐ๋ง๋„ ์ด๊ฒƒ์ €๊ฒƒ ๊ณ ๋ คํ•ด์•ผ ํ•œ๋‹ค๋Š” ์ ์„ ์•Œ์•˜๊ณ , ๊ทธ๋ฆฌ๊ณ  ํŠนํžˆ ๋‚จ์„ ์„ค๋“ํ•  ๋•Œ๋Š” ๊ธฐ๊ฐ„์„ ๋‘๊ณ  ์‹ ๋ขฐ๊ฐ์„ ์Œ“๊ณ  ์–˜๊ธฐํ•˜์ž๋ผ๋Š” ์ƒ๊ฐ์ด ๋“ค์—ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์‚ฌ์‹ค ์ปค๋ฐ‹ ๋ฉ”์„ธ์ง€๋Š” ํšŒ์‚ฌ, ํŒ€ ์ปจ๋ฒค์…˜์— ๋งž์ถ”๋Š” ๊ฒŒ ๊ฐ€์žฅ ์ค‘์š”ํ•˜๋‹ค!!! diff --git "a/developLog/book/oop/_ 1\354\236\245 _ \355\230\221\353\240\245\355\225\230\353\212\224 \352\260\235\354\262\264\353\223\244\354\235\230 \352\263\265\353\217\231\354\262\264_.md" "b/developLog/book/oop/_ 1\354\236\245 _ \355\230\221\353\240\245\355\225\230\353\212\224 \352\260\235\354\262\264\353\223\244\354\235\230 \352\263\265\353\217\231\354\262\264_.md" new file mode 100644 index 0000000..6a20025 --- /dev/null +++ "b/developLog/book/oop/_ 1\354\236\245 _ \355\230\221\353\240\245\355\225\230\353\212\224 \352\260\235\354\262\264\353\223\244\354\235\230 \352\263\265\353\217\231\354\262\264_.md" @@ -0,0 +1,191 @@ +# 1์žฅ : ํ˜‘๋ ฅํ•˜๋Š” ๊ฐ์ฒด๋“ค์˜ ๊ณต๋™์ฒด + +> ๊ฐ์ฒด์ง€ํ–ฅ ํŒจ๋Ÿฌ๋‹ค์ž„์˜ ํ•ต์‹ฌ์ด ์ž์œจ์ ์ธ ๊ฐ์ฒด๋“ค์˜ ํ˜‘๋ ฅ์ด๋ผ๋Š” ์‚ฌ์‹ค์„ ๊ฐ•์กฐ + + + +ํ˜„์‹ค ์†์— ์กด์žฌํ•˜๋Š” ์‚ฌ๋ฌผ์„ ์ตœ๋Œ€ํ•œ ์œ ์‚ฌํ•˜๊ฒŒ ๋ชจ๋ฐฉํ•ด ์†Œํ”„ํŠธ์›จ์–ด ๋‚ด๋ถ€์— ์˜ฎ๊ฒจ์˜ค๋Š” ์ž‘์—… + +โ‡’ ๊ทธ ๊ฒฐ๊ณผ๋ฌผ์ธ ๊ฐ์ฒด์ง€ํ–ฅ ์†Œํ”„ํŠธ์›จ์–ด๋Š” ์‹ค์„ธ๊ณ„์˜ ํˆฌ์˜์ด๋ฉฐ, ๊ฐ์ฒด๋ž€ ํ˜„์‹ค ์„ธ๊ณ„์— ์กด์žฌํ•˜๋Š” ์‚ฌ๋ฌผ์— ๋Œ€ํ•œ ์ถ”์ƒํ™”๋ผ๋Š” ๊ฒƒ + +\ +ํ•˜์ง€๋งŒ, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ ์‹œ, ๊ฐ์ฒด์— ์ง์ ‘์ ์œผ๋กœ ๋Œ€์‘๋˜๋Š” ์‹ค์„ธ๊ณ„์˜ ์‚ฌ๋ฌผ์„ ๋ฐœ๊ฒฌํ•  ํ™•๋ฅ ์€ ๊ทธ๋‹ค์ง€ ๋†’์ง€ ์•Š์œผ๋ฉฐ, ์žˆ๋‹คํ•ด๋„ ์œ ์‚ฌ์„ฑ์„ ์ฐพ๊ธฐ ์–ด๋ ค์šธ ์ •๋„ + + + +> ๊ฐ์ฒด ์ง€ํ–ฅ์˜ ๋ชฉํ‘œ๋Š” ์‹ค์„ธ๊ณ„๋ฅผ ๋ชจ๋ฐฉํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋‹ค. ์˜คํžˆ๋ ค ์ƒˆ๋กœ์šด ์„ธ๊ณ„๋ฅผ ์ฐฝ์กฐํ•˜๋Š” ๊ฒƒ์ด๋‹ค. + +์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ์ž์˜ ์—ญํ• ์€ ๋‹จ์ˆœํžˆ ์‹ค์„ธ๊ณ„๋ฅผ ์†Œํ”„ํŠธ์›จ์–ด ์•ˆ์œผ๋กœ ๋‹ด๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ๊ณ ๊ฐ๊ณผ ์‚ฌ์šฉ์ž๋ฅผ ๋งŒ์กฑ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋Š” ์‹ ์„ธ๊ณ„๋ฅผ ์ฐฝ์กฐํ•˜๋Š” ๊ฒƒ์ด๋‹ค. + +\ +๊ทธ๋ ‡๋‹ค๋ฉด ๋Œ€์‘ํ•œ๋‹ค๋Š” ์–˜๊ธฐ๋ฅผ ๋ฐ˜๋ณตํ•˜๋Š” ์ด์œ ๋Š” ๋ญ˜๊นŒ? ๊ทธ๊ฒƒ์€ **์‹ค์„ธ๊ณ„์— ๋Œ€ํ•œ ๋น„์œ ๊ฐ€ ๊ฐ์ฒด์ง€ํ–ฅ์˜ ๋‹ค์–‘ํ•œ ์ธก๋ฉด์„ ์ดํ•ดํ•˜๊ณ  ํ•™์Šตํ•˜๋Š” ๋ฐ ๋งค์šฐ ํšจ๊ณผ์ ์ด๊ธฐ ๋•Œ๋ฌธ**์ด๋‹ค. + +\ +๊ฐ์ฒด๋ฅผ ์Šค์Šค๋กœ ์ƒ๊ฐํ•˜๊ณ  ์Šค์Šค๋กœ ๊ฒฐ์ •ํ•˜๋Š” ํ˜„์‹ค ์„ธ๊ณ„์˜ ์ƒ๋ช…์ฒด = ์ƒํƒœ์™€ ํ–‰์œ„๋ฅผ ์บก์Šํ™”ํ•˜๋Š” ์†Œํ”„ํŠธ์›จ์–ด์˜ ์ž์œจ์„ฑ์„ ์„ค๋ช…ํ•˜๋Š”๋ฐ ํšจ๊ณผ์  + +\ +์ฆ‰, ์‹ค์„ธ๊ณ„์˜ ์‚ฌ๋ฌผ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์†Œํ”„ํŠธ์›จ์–ด ๊ฐ์ฒด๋ฅผ ์‹๋ณ„ํ•˜๊ณ  ๊ตฌํ˜„๊นŒ์ง€ ์ด์–ด๊ฐ„๋‹ค๋Š” ๊ฐœ๋…์€ ๊ฐ์ฒด์ง€ํ–ฅ ์„ค๊ณ„์˜ ํ•ต์‹ฌ ์‚ฌ์ƒ์ธ `์—ฐ๊ฒฐ์™„์ „์„ฑ(seamlessness)`๋ฅผ ์„ค๋ช…ํ•˜๋Š” ๋ฐ ์ ํ•ฉํ•œ ํ‹€์„ ์ œ๊ณตํ•œ๋‹ค. + +\ +๊ด€์ ์—์„œ๋Š” ๋ถ€์ ํ•ฉํ•˜์ง€๋งŒ ๊ฐ์ฒด์ง€ํ–ฅ์ด๋ผ๋Š” ์šฉ์–ด์— ๋‹ด๊ธด ๊ธฐ๋ณธ ์‚ฌ์ƒ์„ ์ดํ•ดํ•˜๊ณ  ํ•™์Šตํ•˜๋Š” ๋ฐ๋Š” ๋งค์šฐ ํšจ๊ณผ์  + +## 1. ํ˜‘๋ ฅํ•˜๋Š” ์‚ฌ๋žŒ๋“ค + +๋งˆ์น˜ ๋ฐ”๋ฆฌ์Šคํƒ€, ์บ์‹œ์›์ด ์ž์‹ ์˜ ๋งก์€ ๋ฐ”์ธ ์—ญํ• ๋ฅผ ์ฑ…์ž„์„ ์ง€๊ณ  ํ˜‘๋ ฅํ•ด์„œ ์ปคํ”ผ๋ฅผ ์ฃผ๋‹ˆ ์ถœ๊ทผ์‹œ๊ฐ„์— ์ปคํ”ผ๊ฐ€ ๋‚˜์˜ฌ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๊ฐ์ฒด์ง€ํ–ฅ์—์„œ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๊ฐœ๋… 3๊ฐ€์ง€๋Š” ์—ญํ• , ์ฑ…์ž„, ํ˜‘๋ ฅ์ด๋‹ค. + +### 1) ์š”์ฒญ๊ณผ ์‘๋‹ต์œผ๋กœ ๊ตฌ์„ฑ๋œ ํ˜‘๋ ฅ + +์‚ฌ๋žŒ๋“ค์€ ํ•ด๊ฒฐํ•˜์ง€ ๋ชปํ•˜๋ฉด ์„œ๋น„์Šค๋ฅผ ์ œ๊ณตํ•ด์ค„ ์ˆ˜ ์žˆ๋Š” ์‚ฌ๋žŒ์—๊ฒŒ ๋„์›€์„ `์š”์ฒญ(request)`ํ•œ๋‹ค.\ +์ผ๋ฐ˜์ ์œผ๋กœ ํ•˜๋‚˜์˜ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๋‹ค์ˆ˜์˜ ์‚ฌ๋žŒ์ด ํ•„์š”ํ•˜๋ฏ€๋กœ ์š”์ฒญ์€ ์—ฐ์‡„์ ์œผ๋กœ ๋ฐœ์ƒํ•œ๋‹ค. + +\ +์š”์ฒญ์„ ๋ฐ›์€ ์‚ฌ๋žŒ์€ ์ฃผ์–ด์ง„ ์ฑ…์ž„์„ ๋‹คํ•˜๋ฉด์„œ ํ•„์š”ํ•œ ์ง€์‹์ด๋‚˜ ์„œ๋น„์Šค๋ฅผ ์ œ๊ณตํ•œ๋‹ค. ์ฆ‰, ๋‹ค๋ฅธ ์‚ฌ๋žŒ์˜ ์š”์ฒญ์— `์‘๋‹ต(response)`ํ•œ๋‹ค. + +\ +์š”์ฒญ๊ณผ ์‘๋‹ต์„ ํ†ตํ•ด ๋‹ค๋ฅธ ์‚ฌ๋žŒ๊ณผ ํ˜‘๋ ฅ(collaboration)ํ•  ์ˆ˜ ์žˆ๋Š” ๋Šฅ๋ ฅ์€ ์ธ๊ฐ„์œผ๋กœ ํ•˜์—ฌ๊ธˆ ๊ฑฐ๋Œ€ํ•˜๊ณ  ๋ณต์žกํ•œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š” ๊ณต๋™์ฒด๋ฅผ ํ˜•์„ฑํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋งŒ๋“ ๋‹ค. + +### 2) ์—ญํ• ๊ณผ ์ฑ…์ž„ + +์‚ฌ๋žŒ๋“ค์€ ๋‹ค๋ฅธ ์‚ฌ๋žŒ๊ณผ ํ˜‘๋ ฅํ•˜๋Š” ๊ณผ์ • ์†์—์„œ ํŠน์ •ํ•œ **์—ญํ• (role)**๋ฅผ ๋ถ€์—ฌ๋ฐ›๋Š”๋‹ค. + +> ์—ญํ• ์€ ์–ด๋–ค ํ˜‘๋ ฅ์— ์ฐธ์—ฌํ•˜๋Š” ํŠน์ •ํ•œ ์‚ฌ๋žŒ์ด ํ˜‘๋ ฅ ์•ˆ์—์„œ ์ฐจ์ง€ํ•˜๋Š” ์ฑ…์ž„์ด๋‚˜ ์ž„๋ฌด๋ฅผ ์˜๋ฏธํ•œ๋‹ค. + +์˜ˆ์‹œ๋กœ ๋ฐ”๋ฆฌ์ŠคํŠธ ์—ญํ• ์„ ๋งก์€ ์‚ฌ๋žŒ์€ ์ฃผ๋ฌธ๋œ ์ปคํ”ผ๋ฅผ ์ œ์กฐํ•ด์•ผ ํ•˜๋Š” ์ฑ…์ž„์ด ์žˆ๋‹ค. ์ฆ‰, **์—ญํ• **์ด๋ผ๋Š” ๋‹จ์–ด๋Š” ์˜๋ฏธ์ ์œผ๋กœ ์ฑ…์ž„(responsibility)์ด๋ผ๋Š” ๊ฐœ๋…์„ ๋‚ดํฌํ•œ๋‹ค.\ + + +์—ญํ• ๊ณผ ์ฑ…์ž„์€ ํ˜‘๋ ฅ์ด ์›ํ™œํ•˜๊ฒŒ ์ง„ํ–‰๋˜๋Š” ๋ฐ ํ•„์š”ํ•œ ํ•ต์‹ฌ์ ์ธ ๊ตฌ์„ฑ ์š”์†Œ์ด๋ฉฐ, ์—ญํ• ์— ์ ํ•ฉํ•œ ์ฑ…์ž„์„ ์ˆ˜ํ–‰ํ•œ๋‹ค๋Š” ์‚ฌ์‹ค์€ ๋ช‡ ๊ฐ€์ง€ ์ค‘์š”ํ•œ ๊ฐœ๋…์„ ์ œ์‹œํ•œ๋‹ค. + +* ์—ฌ๋Ÿฌ ์‚ฌ๋žŒ์ด ๋™์ผํ•œ ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค. : ๋ฐ”๋ฆฌ์Šคํƒ€๊ฐ€ ์ฃผ๋ฌธ์„ ๋ฐ›์„ ์ˆ˜ ๋„ ์žˆ๋Š” ๊ฑฐ์ž„ +* ์—ญํ• ์€ ๋Œ€์ฒด ๊ฐ€๋Šฅ์„ฑ์„ ์˜๋ฏธํ•œ๋‹ค. : ์†๋‹˜ ์ž…์žฅ์—์„œ๋Š” ์ฃผ๋ฌธ์ž๋Š” ๋Œ€์ฒด ๊ฐ€๋Šฅ(substituable)ํ•˜๋‹ค. +* ์ฑ…์ž„์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ์ž์œจ์ ์œผ๋กœ ์„ ํƒํ•  ์ˆ˜ ์žˆ๋‹ค. : ๋ฐ”๋ฆฌ์Šคํƒ€๋Š” ์ž์‹ ๋งŒ์˜ ๋…ํŠนํ•œ ๋ฐฉ๋ฒ•์œผ๋กœ ํ•˜ํŠธ๋ฅผ ๋งŒ๋“ค ์ˆ˜๋„ ์žˆ๊ฑฐ๋‚˜ ๋˜ ๋‹ค๋ฅธ ๋ฐ”๋ฆฌ์Šคํƒ€๋Š” ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์œผ๋กœ ํ•˜ํŠธ๋ฅผ ๋งŒ๋“ค ์ˆ˜๋„ ์žˆ๋‹ค. +* ์ฆ‰, ์ปคํ”ผ ์ œ์กฐ๋ผ๋Š” ๋™์ผํ•œ ์š”์ฒญ์„ ๋ฐ›๋”๋ผ๋„ ๋ฐ”๋ฆฌ์Šคํƒ€์˜ ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ์‚ฌ๋žŒ๋“ค๋งˆ๋‹ค ์„œ๋กœ ๋‹ค๋ฅธ ๋ฐฉ์‹์œผ๋กœ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ + +> ์ด์ฒ˜๋Ÿผ ๋™์ผํ•œ ์š”์ฒญ์— ๋Œ€ํ•ด ์„œ๋กœ ๋‹ค๋ฅธ ๋ฐฉ์‹์œผ๋กœ ์‘๋‹ตํ•  ์ˆ˜ ์žˆ๋Š” ๋Šฅ๋ ฅ์„ ๋‹คํ˜•์„ฑ(polymorphism)์ด๋ผ๊ณ  ํ•œ๋‹ค. + +* ํ•œ ์‚ฌ๋žŒ์ด ๋™์‹œ์— ์—ฌ๋Ÿฌ ์—ญํ• ์„ ํ•  ์ˆ˜ ์žˆ๋‹ค. : ํ•œ ์‚ฌ๋žŒ์ด ๋ฐ”๋ฆฌ์Šคํƒ€์˜ ์—ญํ• ๊ณผ ์บ์‹œ์–ด ๋™์‹œ์— ์ˆ˜ํ–‰๋„ ๊ฐ€๋Šฅํ•˜๋‹ค. + +## 2. ์—ญํ• , ์ฑ…์ž„, ํ˜‘๋ ฅ + +### 1) ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด ํ˜‘๋ ฅํ•˜๋Š” ๊ฐ์ฒด๋“ค + +> ์‚ฌ๋žŒ์ด๋ผ๋Š” ๋‹จ์–ด๋ฅผ ๊ฐ์ฒด๋กœ, ์—์ด์ „ํŠธ์˜ ์š”์ฒญ์„ ๋ฉ”์„ธ์ง€๋กœ, ์—์ด์ „ํŠธ๊ฐ€ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ฉ”์„œ๋“œ๋กœ ๋ฐ”๊พธ๋ฉด ๊ฐ์ฒด์ง€ํ–ฅ์ด๋ผ๋Š” ๋ฌธ๋งฅ์œผ๋กœ ์˜ฎ๊ฒจ์˜ฌ ์ˆ˜ ์žˆ๋‹ค. + +\ +์œ„์˜ ์ด์œ ๊ฐ€ ๋ฐ”๋กœ ๊ฐ์ฒด์ง€ํ–ฅ์„ ์„ค๋ช…ํ•˜๊ธฐ ์œ„ํ•ด ์‹ค์„ธ๊ณ„์˜ ๋ชจ๋ฐฉ์ด๋ผ๋Š” ์€์œ ๋ฅผ ์ฐจ์šฉํ•˜๋Š” ์ด์œ \ + + +### 2) ์—ญํ• ๊ณผ ์ฑ…์ž„์„ ์ˆ˜ํ–‰ํ•˜๋ฉฐ ํ˜‘๋ ฅํ•˜๋Š” ๊ฐ์ฒด๋“ค + +> ์—ญํ• ์€ ์œ ์—ฐํ•˜๊ณ  ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ํ˜‘๋ ฅ ๊ด€๊ณ„๋ฅผ ๊ตฌ์ถ•ํ•˜๋Š” ๋ฐ ์ค‘์š”ํ•œ ์„ค๊ณ„ ์š”์†Œ์ด๋‹ค. ๋Œ€์ฒด ๊ฐ€๋Šฅํ•œ ์—ญํ• ๊ณผ ์ฑ…์ž„์€ ๊ฐ์ฒด์ง€ํ–ฅ ํŒจ๋Ÿฌ๋‹ค์ž„์˜ ์ค‘์š”ํ•œ ๊ธฐ๋ฐ˜์„ ์ œ๊ณตํ•˜๋Š” ๋‹คํ˜•์„ฑ๊ณผ๋„ ๊นŠ์ด ์—ฐ๊ด€ + +1. ์‚ฌ๋žŒ๋“ค์€ ์ปคํ”ผ ์ฃผ๋ฌธ๊ณผ ๊ฐ™์€ ํŠน์ •ํ•œ ๋ชฉํ‘œ๋ฅผ ์ด๋ฃจ๊ธฐ ์œ„ํ•ด ํ˜‘๋ ฅ +2. ํ˜‘๋ ฅ์˜ ํ•ต์‹ฌ : ํŠน์ •ํ•œ ์ฑ…์ž„์„ ์ˆ˜ํ–‰ํ•˜๋Š” ์—ญํ• ๋“ค ๊ฐ„์˜ ์—ฐ์‡„์ ์ธ ์š”์ฒญ๊ณผ ์‘๋‹ต์„ ํ†ตํ•ด ๋ชฉํ‘œ ๋‹ฌ์„ฑ +3. ๋ชฉํ‘œ๋Š” ์‚ฌ๋žŒ๋“ค์˜ ํ˜‘๋ ฅ์„ ํ†ตํ•ด ๋‹ฌ์„ฑ, ๋” ์ž‘์€ ์ฑ…์ž„์œผ๋กœ ๋ถ„ํ• ๋˜๊ณ  ์ฑ…์ž„์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ์ ์ ˆํ•œ ์—ญํ• ์„ ๊ฐ€์ง„ ์‚ฌ๋žŒ์— ์˜ํ•ด ์ˆ˜ํ–‰ +4. ํ˜‘๋ ฅ์— ์ฐธ์—ฌํ•˜๋Š” ๊ฐ ๊ฐœ์ธ์€ ์ฑ…์ž„ ์ˆ˜ํ–‰์„ ์œ„ํ•ด ๋„์›€์„ ์š”์ฒญํ•˜๊ธฐ๋„, ์—ฐ์‡„์ ์ธ ์š”์ฒญ๊ณผ ์‘๋‹ต์œผ๋กœ ๊ตฌ์„ฑ๋˜๋Š” ํ˜‘๋ ฅ ๊ด€๊ณ„ ์™„์„ฑ + +\ +๊ฐ์ฒด ๊ณต๋™์ฒด ์•ˆ์— ์‚ด๊ณ  ์žˆ๋Š” ์„ฑ์‹คํ•œ ๊ฐ์ฒด ์‹œ๋ฏผ์€ ์ž์‹ ์—๊ฒŒ ์ฃผ์–ด์ง„ ์—ญํ• ๊ณผ ์ฑ…์ž„์„ ๋‹คํ•˜๋Š” ๋™์‹œ์— ์‹œ์Šคํ…œ์˜ ๋” ํฐ ๋ชฉ์ ์„ ์ด๋ฃจ๊ธฐ ์œ„ํ•ด ๋‹ค๋ฅธ ๊ฐ์ฒด์™€๋„ ์ ๊ทน ํ˜‘๋ ฅํ•œ๋‹ค. + +\ +์ฆ‰, ์‚ฌ๋žŒ๋“ค์ด **๊ณตํ†ต์˜ ๋ชฉํ‘œ๋ฅผ ๋‹ฌ์„ฑํ•˜๊ธฐ ์œ„ํ•ด ํ˜‘๋ ฅํ•˜๋Š” ๊ฒƒ**๊ณผ ๊ฐ™์ด ๊ฐ์ฒด๋“ค์˜ ๊ฒฝ์šฐ, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด ํ˜‘๋ ฅํ•ด์„œ ์‚ฌ์šฉ์ž๊ฐ€ ์ธ์‹ํ•˜๋Š” ์‹œ์Šคํ…œ์˜ ๊ธฐ๋Šฅ์ด ๋˜๋Š” ๊ฒƒ์ด๋‹ค. + +> ์‹œ์Šคํ…œ = ์—ญํ•  + ์ฑ…์ž„์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฐ์ฒด์‹œ์Šคํ…œ์˜ ๊ธฐ๋Šฅ = ๊ฐ์ฒด ๊ฐ„์˜ ์—ฐ์‡„์ ์ธ ์š”์ฒญ๊ณผ ์‘๋‹ต์˜ ํ๋ฆ„์œผ๋กœ ๊ตฌ์„ฑ๋œ ํ˜‘๋ ฅ + +๊ฐ์ฒด์ง€ํ–ฅ ์„ค๊ณ„๋Š” ์ ์ ˆํ•œ ๊ฐ์ฒด์—๊ฒŒ ์ ์ ˆํ•œ ์ฑ…์ž„์„ ํ• ๋‹นํ•˜๋Š” ๊ฒƒ์—์„œ ์‹œ์ž‘ํ•œ๋‹ค. ์ฑ…์ž„์€ ๊ฐ์ฒด์ง€ํ–ฅ ์„ค๊ณ„์˜ ํ’ˆ์งˆ์„ ๊ฒฐ์ •ํ•˜๋Š” ๊ฐ€์žฅ ์ค‘์š”ํ•œ ์š”์†Œ์ด๋‹ค. ์–ผ๋งˆ๋‚˜ ์ ์ ˆํ•œ ์ฑ…์ž„์„ ์„ ํƒํ•˜๋Š๋ƒ๊ฐ€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์•„๋ฆ„๋‹ค์›€์„ ๊ฒฐ์ • + +> ์—ญํ•  = ๊ด€๋ จ์„ฑ ๋†’์€ ์ฑ…์ž„์˜ ์ง‘ํ•ฉ + +๊ฐ์ฒด์˜ ์—ญํ• ์˜ ํŠน์ง• ๋˜ํ•œ ์‚ฌ๋žŒ์˜ ์—ญํ• ๊ณผ ์œ ์‚ฌํ•˜๋‹ค. + +* ์—ฌ๋Ÿฌ ๊ฐ์ฒด๊ฐ€ ๋™์ผํ•œ ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค. +* ์—ญํ• ์€ ๋Œ€์ฒด ๊ฐ€๋Šฅ์„ฑ์„ ์˜๋ฏธ +* ๊ฐ ๊ฐ์ฒด๋Š” ์ฑ…์ž„์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ž์œจ์ ์œผ๋กœ ์„ ํƒํ•  ์ˆ˜ ์žˆ๋‹ค. +* ํ•˜๋‚˜์˜ ๊ฐ์ฒด๊ฐ€ ๋™์‹œ์— ์—ฌ๋Ÿฌ ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค. + +### 3. ํ˜‘๋ ฅ ์†์— ์‚ฌ๋Š” ๊ฐ์ฒด + +์œค๊ณฝ์„ ๊ฒฐ์ •ํ•˜๋Š” ๊ฒƒ์€ ์—ญํ• , ์ฑ…์ž„, ํ˜‘๋ ฅ์ด์ง€๋งŒ ์‹ค์ œ๋กœ ํ˜‘๋ ฅ์— ์ฐธ์—ฌํ•˜๋Š” ์ฃผ์ฒด๋Š” ๊ฐ์ฒด์ด๋‹ค.\ +๊ฒฐ๊ตญ ์‚ฌ๋žŒ์ด ์—†์œผ๋ฉด ์—ญํ• , ์ฑ…์ž„, ํ˜‘๋ ฅ์ด ์•„๋ฌด๋Ÿฐ ์˜๋ฏธ๊ฐ€ ์—†๋“ฏ์ด ๊ฐ์ฒด์ง€ํ–ฅ ์„ธ๊ณ„์—์„œ๋„ ๊ฐ์ฒด๊ฐ€ ์—†์œผ๋ฉด ์•„๋ฌด๋Ÿฐ ์˜๋ฏธ๊ฐ€ ์—†๋‹ค.\ +๊ฐ์ฒด๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด ์กด์žฌํ•œ๋‹ค. ์•„์ฃผ ์ž‘์€ ๊ธฐ๋Šฅ ์กฐ์ฐจ ๊ฐ์ฒด ํ˜ผ์ž๋Š” ๋ฒ„๊ฑฐ์šฐ๊ธฐ์— ์ผ๋ฐ˜์ ์œผ๋กœ ๊ฐ์ฒด๋Š” ๋‹ค๋ฅธ ๊ฐ์ฒด์™€์˜ ๋ ต๋ ฅ์„ ํ†ตํ•ด ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๊ณ , ๊ฒฐ๊ตญ ํ˜‘๋ ฅ์ด ์–ผ๋งˆ๋‚˜ ์กฐํ™”๋ฅผ ์ด๋ฃจ๋Š”์ง€ ๊ฒฐ์ •ํ•˜๋Š” ๊ฒƒ์€ ๊ฐ์ฒด์ด๋‹ค.\ +๊ฒฐ๊ตญ ํ˜‘๋ ฅ์˜ ํ’ˆ์งˆ์„ ๊ฒฐ์ •ํ•˜๋Š” ๊ฒƒ์€ ๊ฐ์ฒด์˜ ํ’ˆ์งˆ์ด๋‹ค.\ +ํ˜‘๋ ฅ ๊ณต๋™์ฒด์˜ ์ผ์›์œผ๋กœ ๊ฐ์ฒด๋Š” 2๊ฐ€์ง€ ๋•๋ชฉ์„ ๊ฐ–์ถ”๊ณ , ๊ท ํ˜•์„ ์œ ์ง€ํ•ด์•ผ ํ•œ๋‹ค. + +1. ๊ฐ์ฒด๋Š” ์ถฉ๋ถ„ํžˆ ํ˜‘๋ ฅ์ ์ด์–ด์•ผ ํ•œ๋‹ค. + +* ๊ฐ์ฒด๋Š” ๋‹ค๋ฅธ ๊ฐ์ฒด์˜ ์š”์ฒญ์— ์ถฉ์‹คํžˆ ๊ท€ ๊ธฐ์šธ์ด๊ณ  ๋„์›€ ์š”์ฒญํ•  ์ •๋„์˜ ์—ด๋ฆฐ ๋งˆ์Œ +* ๋ชจ๋“  ๊ฒƒ์„ ์Šค์Šค๋กœ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฐ์ฒด๋Š” ๋‚ด๋ถ€์ ์ธ ๋ณต์žก๋„์— ์˜ํ•ด ์ž๋ฉธ +* ํ˜‘๋ ฅ์  : ์ˆ˜๋™์ ์ธ ์กด์žฌ X, ์š”์ฒญ์— ์‘๋‹ตํ•  ๋ฟ ์–ด๋–ค ๋ฐฉ์‹์œผ๋กœ ์‘๋‹ตํ• ์ง€, ์‘ํ• ์ง€ ์—ฌ๋ถ€๋ฅผ ๊ฐ์ฒด ์Šค์Šค๋กœ ํŒ๋‹จํ•˜๊ณ  ๊ฒฐ์ •ํ•œ๋‹ค. + +1. ๊ฐ์ฒด๊ฐ€ ์ถฉ๋ถ„ํžˆ ์ž์œจ์ ์ด์–ด์•ผ ํ•œ๋‹ค. + +* ์ž์œจ์  : ์ž๊ธฐ ์Šค์Šค๋กœ์˜ ์›์น™์— ๋”ฐ๋ผ ์–ด๋–ค ์ผ์„ ํ•˜๊ฑฐ๋‚˜ ์ž๊ธฐ ์Šค์Šค๋กœ ํ†ต์ œํ•˜์—ฌ ์ ˆ์ œํ•˜๋Š” ๊ฒƒ +* ์‚ฌ๋žŒ๋“ค์€ ๋‹ค๋ฅธ ์‚ฌ๋žŒ์˜ ์š”์ฒญ์— ๋”ฐ๋ผ ํ–‰๋™ํ•˜์ง€๋งŒ ์ตœ๋Œ€ํ•œ ์Šค์Šค๋กœ์˜ ํŒ๋‹จ์— ๋”ฐ๋ฅด๊ณ  ๊ฒฐ์ •ํ•˜๊ณ  ํ–‰๋™ํ•œ๋‹ค. + +\ +๊ฐ์ฒด์ง€ํ–ฅ ์„ค๊ณ„์˜ ๋ฌ˜๋ฏธ๋Š” ๋‹ค๋ฅธ ๊ฐ์ฒด์™€ ์กฐํ™”๋กญ๊ฒŒ ํ˜‘๋ ฅํ•  ์ˆ˜ ์žˆ์„ ๋งŒํผ ์ถฉ๋ถ„ํžˆ ๊ฐœ๋ฐœ์ ์ธ ๋™์‹œ์— ํ˜‘๋ ฅ์— ์ฐธ์—ฌํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์Šค์Šค๋กœ ๊ฒฐ์ •ํ•  ์ˆ˜ ์žˆ์„ ๋งŒํผ ์ถฉ๋ถ„ํžˆ ์ž์œจ์ ์ธ ๊ฐ์ฒด๋“ค์˜ ๊ณต๋™์ฒด ์„ค๊ณ„ํ•˜๋Š”๋ฐ ์žˆ๋‹ค. + +#### ์ƒํƒœ์™€ ํ–‰๋™์„ ํ•จ๊ป˜ ์ง€๋‹Œ ์ž์œจ์ ์ธ ๊ฐ์ฒด + +๊ฐ์ฒด = ์ƒํƒœ(state) + ํ–‰๋™(behavior)์„ ํ•จ๊ป˜ ์ง€๋‹Œ ์‹ค์ฒด์ด์ž ์ž์œจ์ ์ธ ์กด์žฌ\ +๊ฐ์ฒด๊ฐ€ ํ˜‘๋ ฅ์— ์ฐธ์—ฌํ•˜๊ธฐ ์œ„ํ•ด ์–ด๋–ค ํ–‰๋™์„ ํ•ด์•ผ ํ•œ๋‹ค๋ฉด, ๊ทธ ํ–‰๋™์„ ํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ์ƒํƒœ๋„ ํ•จ๊ป˜ ์ง€๋‹ˆ๊ณ  ์žˆ์–ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค. ๋งˆ์น˜, ์ปคํ”ผ๋ฅผ ์ œ์กฐํ•˜๋Š” ๋ฐ”๋ฆฌ์Šคํƒ€๊ฐ€ ์ œ์กฐ ๋ฐฉ๋ฒ•์„ ์•Œ๊ณ  ์žˆ์–ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์ฒ˜๋Ÿผ\ +๊ฐ์ฒด๊ฐ€ ํ˜‘๋ ฅ์— ์ฐธ์—ฌํ•˜๋Š” ๊ณผ์ • ์†์—์„œ ์Šค์Šค๋กœ ํŒ๋‹จํ•˜๊ณ  ์Šค์Šค๋กœ ๊ฒฐ์ •ํ•˜๋Š” ์ž์œจ์ ์ธ ์กด์žฌ๋กœ ๋‚จ๊ธฐ ์œ„ํ•ด์„œ๋Š” ํ•„์š”ํ•œ ํ–‰๋™๊ณผ ์ƒํƒœ๋ฅผ ํ•จ๊ป˜ ์ง€๋‹ˆ๊ณ  ์žˆ์–ด์•ผ ํ•œ๋‹ค.\ +๊ฐ์ฒด์˜ ์ž์œจ์„ฑ์€ ๊ฐ์ฒด์˜ ๋‚ด๋ถ€์™€ ์™ธ๋ถ€๋ฅผ ๋ช…ํ™•ํ•˜๊ฒŒ ๊ตฌ๋ถ„ํ•˜๋Š” ๊ฒƒ์œผ๋กœ๋ถ€ํ„ฐ ๋‚˜์˜จ๋‹ค. ๊ฐ์ฒด์˜ ์‚ฌ์ ์ธ ๋ถ€๋ถ„์„ ํ„ฐ์น˜ํ• ์ˆ˜ ์—†๊ฒŒ.. ๊ฐ์ฒด๋Š” ๋‹ค๋ฅธ ๊ฐ์ฒด๊ฐ€ ๋ฌด์—‡(what)์„ ์ˆ˜ํ–‰ํ•˜๋Š” ์ง€ ์•Œ ์ˆ˜ ์žˆ์ง€๋งŒ ์–ด๋–ป๊ฒŒ(how) ์ˆ˜ํ–‰ํ•˜๋Š”์ง€์— ๋Œ€ํ•ด์„œ๋Š” ์•Œ ์ˆ˜ ์—†๋‹ค. โ‡’ ์บก์Šํ™”๋ž‘ ์—ฐ๊ด€\ +์ „ํ†ต์ ์ธ ๊ฐœ๋ฐœ ๋ฐฉ๋ฒ• vs ๊ฐ์ฒด์ง€ํ–ฅ + +* ์ „ํ†ต์ ์ธ ๊ฐœ๋ฐœ ๋ฐฉ๋ฒ• : ๋ฐ์ดํ„ฐ์™€ ํ”„๋กœ์„ธ์Šค๋ฅผ ์—„๊ฒฉํ•˜๊ฒŒ ๊ตฌ๋ถ„ +* ๊ฐ์ฒด์ง€ํ–ฅ : ๋ฐ์ดํ„ฐ์™€ ํ”„๋กœ์„ธ์Šค๋ฅผ ๊ฐ์ฒด๋ผ๋Š” ํ•˜๋‚˜์˜ ํ‹€ ์•ˆ์— ํ•จ๊ป˜ ๋ฌถ์–ด ๋†“์Œ์œผ๋กœ์จ ๊ฐ์ฒด์˜ ์ž์œจ์„ฑ์„ ๋ณด์žฅ + +#### ํ˜‘๋ ฅ๊ณผ ๋ฉ”์„ธ์ง€ + +์ธ๊ฐ„์€ ๊ธ€์ž, ๋ง ๋“ฑ ๋‹ค์–‘ํ•œ ๋งค์ปค๋‹ˆ์ฆ˜์„ ํ†ตํ•ด ์˜์‚ฌ์†Œํ†ต์„ ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์˜ ๋ฐ˜๋Œ€๋˜์–ด ๊ฐ์ฒด์ง€ํ–ฅ์˜ ์„ธ๊ณ„์—์„œ๋Š” ์˜ค์ง ํ•œ ๊ฐ€์ง€ ์˜์‚ฌ์†Œํ†ต ์ˆ˜๋‹จ๋งŒ์ด ์กด์žฌํ•œ๋‹ค.\ +๋ฉ”์„ธ์ง€ + +* ์˜ค์ง ํ•œ ๊ฐ€์ง€์˜ ์˜์‚ฌ์†Œํ†ต +* ๊ฐ์ฒด ์ง€ํ–ฅ์˜ ์„ธ๊ณ„์—์„œ ํ˜‘๋ ฅ์€ ์†ก์‹ ์ž์™€ ์ˆ˜์‹ ์ž ๊ฐ์ฒด ์‚ฌ์ด์˜ ๊ด€๊ณ„๋กœ ๊ตฌ์„ฑ +* ์†ก์‹ ์ž(sender) : ๋ฉ”์„ธ์ง€๋ฅผ ์ „์†กํ•˜๋Š” ๊ฐ์ฒด +* ์ˆ˜์‹ ์ž(receiver) : ๋ฉ”์„ธ์ง€๋ฅผ ์ˆ˜์‹ ํ•˜๋Š” ๊ฐ์ฒด + +#### ๋ฉ”์„œ๋“œ์™€ ์ž์œจ์„ฑ + +๊ฐ์ฒด๋Š” ๋‹ค๋ฅธ ๊ฐ์ฒด์™€ ํ˜‘๋ ฅํ•˜๊ธฐ ์œ„ํ•ด ๋ฉ”์„ธ์ง€๋ฅผ ์ „์†กํ•œ๋‹ค.\ +๋ฉ”์„œ๋“œ(method) + +* ๊ฐ์ฒด๊ฐ€ ์ˆ˜์‹ ๋œ ๋ฉ”์„ธ์ง€๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ• +* ํด๋ž˜์Šค ์•ˆ์— ํฌํ•จ๋œ ํ•จ์ˆ˜ ๋˜๋Š” ํ”„๋กœ์‹œ์ €๋ฅผ ํ†ตํ•ด ๊ตฌํ˜„ +* ๋”ฐ๋ผ์„œ ์–ด๋–ค ๊ฐ์ฒด์—๊ฒŒ ๋ฉ”์‹œ์ง€๋ฅผ ์ „์†กํ•˜๋ฉด ๊ฒฐ๊ณผ์ ์œผ๋กœ ๋ฉ”์„ธ์ง€์— ๋Œ€์‘๋˜๋Š” ํŠน์ • ๋ฉ”์„œ๋“œ๊ฐ€ ์‹คํ–‰ + +\ +์ ˆ์ฐจ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด vs ๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด + +* ๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด : ๋ฉ”์„ธ์ง€๋ฅผ ์ˆ˜์‹ ํ•œ ๊ฐ์ฒด๊ฐ€ ์‹คํ–‰ ์‹œ๊ฐ„์— ๋ฉ”์„œ๋“œ๋ฅผ ์„ ํƒ ๊ฐ€๋Šฅ +* ์ ˆ์ฐจ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด : ํ”„๋กœ์‹œ์ € ํ˜ธ์ถœ์— ๋Œ€ํ•œ ์‹คํ–‰ ์ฝ”๋“œ๋ฅผ ์ปดํŒŒ์ผ ์‹œ๊ฐ„์— ๊ฒฐ์ • + +๋ฉ”์„ธ์ง€์™€ ๋ฉ”์„œ๋“œ์˜ ๋ถ„๋ฆฌ๋Š” ๊ฐ์ฒด์˜ ํ˜‘๋ ฅ์— ์ฐธ์—ฌํ•˜๋Š” ๊ฐ์ฒด๋“ค ๊ฐ„์˜ ์ž์œจ์„ฑ์„ ์ฆ์ง„\ +์ปคํ”ผ ์ œ์กฐ๋ฅผ ์š”์ฒญํ•œ ์บ์‹œ์–ด๋Š” ์ปคํ”ผ๊ฐ€ ์ œ์กฐ๋  ๊ฒƒ(what)์ด๋ผ๊ณ  ๊ธฐ๋Œ€ํ•˜์ง€๋งŒ ์ปคํ”ผ๋ฅผ ์ œ์กฐํ•˜๋Š” ๊ตฌ์ฒด์ ์ธ ๋ฐฉ๋ฒ•(how)์— ๊ด€ํ•ด์„œ๋Š” ๊ด€์—ฌํ•˜์ง€ ์•Š๋Š”๋‹ค. ๋”ฐ๋ผ์„œ ๋ฐ”๋ฆฌ์Šคํƒ€๋Š” ์ปคํ”ผ ์ œ์กฐ๋ผ๋Š” ๋ฉ”์‹œ์ง€์— ์‘๋‹ตํ•˜๊ธฐ ์œ„ํ•ด ์ž์‹ ๋งŒ์˜ ์ž์œจ์ ์ธ ๋ฐฉ๋ฒ•์— ๋”ฐ๋ผ ์ปคํ”ผ๋ฅผ ์ œ์กฐํ•  ์ˆ˜ ์žˆ๋‹ค.\ +์บก์Šํ™”(encapsulation)์ด๋ผ๋Š” ๊ฐœ๋…๊ณผ๋„ ๊นŠ์ด ๊ด€๋ จ + +### 4) ๊ฐ์ฒด์ง€ํ–ฅ์˜ ๋ณธ์งˆ + +๊ทธ๋ž˜์„œ ๊ฐ์ฒด์ง€ํ–ฅ์ด๋ž€? + +* ๊ฐ์ฒด์ง€ํ–ฅ์ด๋ž€ ์‹œ์Šคํ…œ์„ ์ƒํ˜ธ์ž‘์šฉํ•˜๋Š” ์ž์œจ์ ์ธ ๊ฐ์ฒด๋“ค์˜ ๊ณต๋™์ฒด๋กœ ๋ฐ”๋ผ๋ณด๊ณ  ๊ฐ์ฒด๋ฅผ ์ด์šฉํ•ด ์‹œ์Šคํ…œ์„ ๋ถ„ํ• ํ•˜๋Š” ๋ฐฉ๋ฒ• +* ์ž์œจ์ ์ธ ๊ฐ์ฒด๋ž€ ์ƒํƒœ์™€ ํ–‰์œ„๋ฅผ ํ•จ๊ป˜ ์ง€๋‹ˆ๋ฉฐ ์Šค์Šค๋กœ ์ž๊ธฐ ์ž์‹ ์„ ์ฑ…์ž„์‹œํ‚ค๋Š” ๊ฐ์ฒด๋ฅผ ์˜๋ฏธ +* ๊ฐ์ฒด๋Š” ์‹œ์Šคํ…œ์˜ ํ–‰์œ„๋ฅผ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด ๋‹ค๋ฅธ ๊ฐ์ฒด์™€ ํ˜‘๋ ฅํ•œ๋‹ค. ๊ฐ ๊ฐ์ฒด๋Š” ํ˜‘๋ ฅ ๋‚ด์—์„œ ์ •ํ•ด์ง„ ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•˜๋ฉฐ ์—ญํ• ์€ ๊ด€๋ จ๋œ ์ฑ…์ž„์˜ ์ง‘ํ•ฉ์ด๋‹ค. +* ๊ฐ์ฒด๋Š” ๋‹ค๋ฅธ ๊ฐ์ฒด์™€ ํ˜‘๋ ฅํ•˜๊ธฐ ์œ„ํ•ด ๋ฉ”์„ธ์ง€๋ฅผ ์ „์†กํ•˜๊ณ , ๋ฉ”์„ธ์ง€๋ฅผ ์ˆ˜์‹ ํ•œ ๊ฐ์ฒด๋Š” ๋ฉ”์‹œ์ง€๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐ ์ ํ•ฉํ•œ ๋ฉ”์„œ๋“œ๋ฅผ ์ž์œจ์ ์œผ๋กœ ์„ ํƒํ•œ๋‹ค. + +#### ๊ฐ์ฒด๋ฅผ ์ง€ํ–ฅํ•˜๋ผ + +์—์Šคํ‚ค๋ชจ์˜ ๋ˆˆ์„ ์ง€์นญํ•˜๋Š” ๋‹จ์–ด๊ฐ€ 2๊ฐœ๋ฟ์ธ๋ฐ ๋งŽ์€ ๊ฒƒ์ฒ˜๋Ÿผ ๋ถ€ํ’€๋ฆฌ๊ฒŒ ๋˜๊ฒŒ ๋œ ๊ฒƒ์ฒ˜๋Ÿผ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์„œ์  ์ถœํŒํ•˜๋Š” ๊ณผ์ •์—์„œ ํด๋ž˜์Šค์— ๋Œ€ํ•œ ์ค‘์š”์„ฑ์ด ๊ณผํ•˜๋‹ค ์‹ถ์„ ์ •๋„๋กœ ๊ฐ•์กฐ๋๋‹ค.\ +๊ฐ์ฒด์ง€ํ–ฅ์˜ ์ค‘์‹ฌ์— ์žˆ์–ด์•ผ ํ•  ๊ฐ์ฒด๋กœ๋ถ€ํ„ฐ ์กฐ๊ธˆ์”ฉ ๋ฉ€์–ด์ ธ ๊ฐ”๋‹ค. ํด๋ž˜์Šค๋Š” ๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์˜ ๊ด€์ ์—์„œ ๋งค์šฐ ์ค‘์š”ํ•œ ๊ตฌ์„ฑ์š”์†Œ(construct)์ธ ๊ฒƒ์€ ๋ถ„๋ช…ํ•˜์ง€๋งŒ ๊ฐ์ฒด์ง€ํ–ฅ์˜ ํ•ต์‹ฌ์„ ์ด๋ฃจ๋Š” ์ค‘์‹ฌ ๊ฐœ๋…์ด๋ผ๊ณ  ๋งํ•˜๊ธฐ์—๋Š” ๋ฌด๋ฆฌ๊ฐ€ ์žˆ๋‹ค.\ +์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๊ฐ™์€ ํ”„๋กœํ† ํƒ€์ž… ๊ธฐ๋ฐ˜์˜ ๊ฐ์ฒด์ง€ํ–ฅ ์–ธ์–ด์—์„œ๋Š” ํด๋ž˜์Šค๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š๋Š”๋‹ค.\ +ํ›Œ๋ฅญํ•œ ๊ฐ์ฒด์ง€ํ–ฅ ์„ค๊ณ„์ž๊ฐ€ ๋˜๊ธฐ ์œ„ํ•ด์„œ + +1. ์ฝ”๋“œ๋ฅผ ๋‹ด๋Š” ํด๋ž˜์Šค์˜ ๊ด€์ ์—์„œ ๋ฉ”์„ธ์ง€๋ฅผ ์ฃผ๊ณ  ๋ฐ›๋Š” ๊ฐ์ฒด์˜ ๊ด€์ ์œผ๋กœ ์‚ฌ๊ณ ์˜ ์ค‘์‹ฌ์„ ์ „ํ™˜ํ•˜๋Š” ๊ฒƒ + +* ์–ด๋–ค ๊ฐ์ฒด๋“ค์ด ์–ด๋–ค ๋ฉ”์„ธ์ง€๋ฅผ ์ฃผ๊ณ ๋ฐ›์œผ๋ฉฐ ํ˜‘๋ ฅํ•˜๋Š” ๊ฐ€ +* ํด๋ž˜์Šค๋Š” ๊ฐ์ฒด๋“ค์˜ ํ˜‘๋ ฅ ๊ด€๊ณ„๋ฅผ ์ฝ”๋“œ๋กœ ์˜ฎ๊ธฐ๋Š” ๋„๊ตฌ์ธ ๊ตฌํ˜„ ๋งค์ปค๋‹ˆ์ฆ˜์ผ ๋ฟ์ด๋‹ค. + +> ํ•ต์‹ฌ์€ ์ ์ ˆํ•œ ์ฑ…์ž„์„ ์ˆ˜ํ–‰ํ•˜๋Š” ์—ญํ•  ๊ฐ„์˜ ์œ ์—ฐํ•˜๊ณ  ๊ฒฌ๊ณ ํ•œ ํ˜‘๋ ฅ ๊ด€๊ณ„๋ฅผ ๊ตฌ์ถ•ํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ์ค‘์š”ํ•œ ๊ฒƒ์€ ํด๋ž˜์Šค๋“ค์˜ ์ •์ ์ธ ๊ด€๊ณ„๊ฐ€ ์•„๋‹ˆ๋ผ ๋ฉ”์„ธ์ง€๋ฅผ ์ฃผ๊ณ ๋ฐ›๋Š” ๊ฐ์ฒด๋“ค์˜ ๋™์ ์ธ ๊ด€๊ณ„์ด๋‹ค. + +\ +๊ฐ์ฒด์˜ ์—ญํ• , ์ฑ…์ž„, ํ˜‘๋ ฅ์— ์ง‘์ค‘ํ•ด๋ผ! diff --git "a/developLog/ci-cd/github-action/_ Github Action \353\247\201\355\201\254 \353\252\250\354\235\214_.md" "b/developLog/ci-cd/github-action/_ Github Action \353\247\201\355\201\254 \353\252\250\354\235\214_.md" new file mode 100644 index 0000000..d942233 --- /dev/null +++ "b/developLog/ci-cd/github-action/_ Github Action \353\247\201\355\201\254 \353\252\250\354\235\214_.md" @@ -0,0 +1,3 @@ +# Github Action ๋งํฌ ๋ชจ์Œ + +{% embed url="https://docs.github.com/ko/actions" %} diff --git "a/developLog/ci-cd/github-action/_ OAuth \354\225\261\354\227\220 \353\214\200\355\225\234 \353\262\224\354\234\204 \353\260\217 gitbook\352\263\274 github_io\353\245\274 \354\236\220\353\217\231\355\231\224\353\245\274 \354\234\204\355\225\234 \354\236\221\354\227\205_.md" "b/developLog/ci-cd/github-action/_ OAuth \354\225\261\354\227\220 \353\214\200\355\225\234 \353\262\224\354\234\204 \353\260\217 gitbook\352\263\274 github_io\353\245\274 \354\236\220\353\217\231\355\231\224\353\245\274 \354\234\204\355\225\234 \354\236\221\354\227\205_.md" new file mode 100644 index 0000000..f2b02b3 --- /dev/null +++ "b/developLog/ci-cd/github-action/_ OAuth \354\225\261\354\227\220 \353\214\200\355\225\234 \353\262\224\354\234\204 \353\260\217 gitbook\352\263\274 github_io\353\245\274 \354\236\220\353\217\231\355\231\224\353\245\274 \354\234\204\355\225\234 \354\236\221\354\227\205_.md" @@ -0,0 +1,462 @@ +# OAuth ์•ฑ์— ๋Œ€ํ•œ ๋ฒ”์œ„ ๋ฐ gitbook๊ณผ github.io๋ฅผ ์ž๋™ํ™”๋ฅผ ์œ„ํ•œ ์ž‘์—… + +## Github Action์ด๋ž€ + +`Github action` ์€ CI/CD๋ฅผ ์ž๋™ํ™”์‹œ์ผœ์ฃผ๋Š” `Github`์—์„œ ์ œ๊ณตํ•˜๋Š” ์ž๋™ํ™” ๋„๊ตฌ์ด๋‹ค. + +ํ•˜๋‚˜์˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ์ƒ๊ฒผ์„ ๊ฒฝ์šฐ,\ +์ด๋ฅผ merge ํ•  ๋•Œ๋งˆ๋‹ค ๋นŒ๋“œ-ํ…Œ์ŠคํŠธ์˜ ๊ณผ์ •์„ ๊ฑฐ์ณ ๋ฐฐํฌ๊นŒ์ง€ ๊ฑฐ์น˜๋Š” ๊ณผ์ •์„ `Github action`์€ ์ด ์ค‘์š”ํ•˜์ง€๋งŒ ๊ท€์ฐฎ์€ ๊ณผ์ •๋“ค์„ ์ž๋™ํ™” ์‹œ์ผœ์ค„ ์ˆ˜ ์žˆ๋‹ค! + +> ๋Œ์–ด์˜ค๊ธฐ ์š”์ฒญ์ด ์—ด๋ฆฌ๊ฑฐ๋‚˜ ์ด์Šˆ๊ฐ€ ์ƒ์„ฑ๋˜๋Š” ๊ฒƒ๊ณผ ๊ฐ™์€ โ€˜์ด๋ฒคํŠธโ€™๊ฐ€ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์—์„œ ๋ฐœ์ƒํ•  ๋•Œ ํŠธ๋ฆฌ๊ฑฐ๋˜๋„๋ก GitHub Actions โ€˜์›Œํฌํ”Œ๋กœโ€™๋ฅผ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค. + +๊ฐ ์ž‘์—…์€ ์ž์ฒด ๊ฐ€์ƒ ๋จธ์‹  โ€˜์‹คํ–‰๊ธฐโ€™ ๋˜๋Š” ์ปจํ…Œ์ด๋„ˆ ๋‚ด์—์„œ ์‹คํ–‰๋˜๋ฉฐ, ์ •์˜ํ•œ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰ํ•˜๊ฑฐ๋‚˜ **์›Œํฌํ”Œ๋กœ๋ฅผ ๊ฐ„์†Œํ™”ํ•  ์ˆ˜ ์žˆ๋Š” ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ํ™•์žฅ์ธ โ€˜์ž‘์—…โ€™์„ ์‹คํ–‰ํ•˜๋Š” โ€˜๋‹จ๊ณ„โ€™๋ฅผ ํ•˜๋‚˜ ์ด์ƒ ํฌํ•จ**ํ•œ๋‹ค. + +\+ ๊ฐ ์›Œํฌ ํ”Œ๋กœ์šฐ๋Š” `.yml` ํ˜น์€ `.yaml` ํ™•์žฅ์ž๋ฅผ ๊ฐ€์ง„ ํŒŒ์ผ์— ์ž‘์„ฑ๋œ๋‹ค. + +\+ `.github/workflows/` ์— action ํŒŒ์ผ์„ ์˜ฌ๋ฆฌ๋ฉด Github์ด ์ž๋™์œผ๋กœ ์ธ์‹ํ•œ๋‹ค. + +\+ ๋ ˆํฌ์ง€ํ† ๋ฆฌ์—i github action์„ ๋ˆ„๋ฅด๋ฉด ์•Œ์•„์„œ workflows ํด๋”๊ฐ€ ์ƒ์„ฑ ๋จ + +### ์›Œํฌํ”Œ๋กœ๋ž€? + +**์›Œํฌํ”Œ๋กœ**๋Š” ํ•˜๋‚˜ ์ด์ƒ์˜ ์ž‘์—…์„ ์‹คํ–‰ํ•  ๊ตฌ์„ฑ ๊ฐ€๋Šฅํ•œ ์ž๋™ํ™”๋œ ํ”„๋กœ์„ธ์Šค์ด๋‹ค. ์›Œํฌํ”Œ๋กœ๋Š” ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์— ์ฒดํฌ ์ธ๋œ YAML ํŒŒ์ผ์—์„œ ์ •์˜๋˜๋ฉฐ, ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์˜ ์ด๋ฒคํŠธ๋กœ ํŠธ๋ฆฌ๊ฑฐ๋  ๋•Œ ์‹คํ–‰๋˜๊ฑฐ๋‚˜ ์ˆ˜๋™์œผ๋กœ ๋˜๋Š” ์ •์˜๋œ ์ผ์ •์— ๋”ฐ๋ผ ํŠธ๋ฆฌ๊ฑฐ๋  ์ˆ˜ ์žˆ๋‹ค. + +์›Œํฌํ”Œ๋กœ๋Š” ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์˜ `.github/workflows` ๋””๋ ‰ํ„ฐ๋ฆฌ์— ์ •์˜ + +## ์ด๊ฑธ ํ•˜๋Š” ๋ฐฐ๊ฒฝ + +> ์ด์œ .. Gitbook์€ ํ•ธ๋“œํฐ์œผ๋กœ ๊นจ์ง... ๊ทธ๋ฆฌ๊ณ  ๋Œ“๊ธ€ ๋‹ฌ๊ธฐ ๊ธฐ๋Šฅ์ด ์—†์–ด์„œ ์†Œํ†ต์ด ๋ถˆ๊ฐ€ํ•จ์†” ใ… ใ… ใ…  ์†”์งํžˆ blog๋ผ๊ธฐ ๋ณด๋‹ค๋Š” notion์— ์ž˜๋œ ๋ฒ„์ „? ์นดํ…Œ๊ณ ๋ฆฌ ์ž˜ ๋œ ๋ฒ„์ „ ๋Š๋‚Œ์ด๋ผ์„œ github.io ๋ธ”๋กœ๊ทธ์— ๋„ฃ์–ด์•ผ ํ•˜๋Š”๋ฐ ์ด๊ฑฐ... ํ•˜๋‚˜ ํ•˜๋‚˜ ๊ธ€ ๋„ฃ์–ด์„œ ๋„ฃ๊ธฐ ๊ท€์ฐฎ์•„.. + +โœ… git book์˜ ์žฅ๋‹จ์  + +1. ์žฅ์  + +* gitbook์€ github repo์— ๋™๊ธฐํ™”๊ฐ€ ๊ฐ€๋Šฅํ•ด์„œ commit์ด ๋จ, ์ž”๋””์‹ฌ๊ธฐ ๊ฐ€๋Šฅ +* url ์ปค์Šคํ…€ ๊ฐ€๋Šฅ +* notion์ด๋ž‘ ๋‹ฌ๋ฆฌ.. ์นดํ…Œ๊ณ ๋ฆฌํ™” ๋ฐ workspace ์•ˆ์—์„œ ์ˆจ๊ธด ๊ธ€์ด๋‚˜ ์นดํ…Œ๊ณ ๋ฆฌ ์ง€์ •ํ•˜๋ฉด ์™ธ๋ถ€์—์„œ๋Š” ์•ˆ๋ณด์—ฌ์„œ ๊ด€๋ฆฌํ•˜๊ธฐ ์ข‹์Œ + +2. ๋‹จ์  + +* ๋ฌธ์„œ ํ™ˆํŽ˜์ด์ง€๋ผ์„œ ๋Œ“๊ธ€ ๊ธฐ๋Šฅ x +* ๋ฐฉ๋ฌธ ์ˆ˜ ํ™•์ธ์„ ์œ„ํ•ด์„œ๋Š” pro๋กœ ๊ฐ€์•ผํ•จ +* ํ•ธ๋“œํฐ์—์„œ ๊นจ์ง... ๋ฐ˜์‘ํ˜•์ด ์•„๋‹Œ์ง€ ๊ธ€๋จธ๋ฆฌ ๊ธฐํ˜ธ๋„ ์•ˆ๋ณด์—ฌ... +* h3๋Š” ๋ชฉ์ฐจ๋กœ ์ณ์ฃผ์ง€๋„ ์•Š์Œ + +> ๊ฒฐ๋ก  ์ž๋™ํ™”ํ•ด์„œ github.io ๋ธ”๋กœ๊ทธ๋กœ ์—ฐ๋™ํ•˜๊ธฐ ์œ„![](<../../.gitbook/assets/image (33).png>) + +## Github Action ์„ค์ • ์‹œ, Access Token์˜ ์•ก์„ธ์Šค ์ œํ•œ ๋ฒ”์œ„ + +### Github PAT ๋ฐœ๊ธ‰ + +> ๋‚˜์ž„์„ ์ฆ๋ช…ํ•˜์—ฌ ๊ฐœ์ธ ๋ ˆํฌ๋กœ ํ‘ธ์‰ฌํ•  ์ˆ˜ ์žˆ๋Š” ๊ถŒํ•œ์„ ๊ฐ€์ง„ **๊ฐœ์ธ ํ† ํฐ (PAT, Personal Access Token)**์„ ๋ฐœ๊ธ‰ ๋ฐ›์•„์•ผ ํ•œ๋‹ค. + +**<< Github PAT ๋ฐœ๊ธ‰ >>** + +* Github์—์„œ ๋กœ๊ทธ์ธ ํ›„ ์šฐ์ธก ์ƒ๋‹จ์˜ ํ”„๋กœํ•„ ์•„์ด์ฝ˜ ํด๋ฆญ +* `โš™๏ธ Settings` ํด๋ฆญ +* ์ขŒ์ธก ๋ฉ”๋‰ด ์ตœํ•˜๋‹จ์— `<> Developer Settings` ํด๋ฆญ +* `Personal access tokens` ํŽผ์ณ์„œ `Tokens (classic)` ํด๋ฆญ +* `Generate new token (classic)` ํด๋ฆญ + +โœ… ํ† ํฐ ์ƒ์„ฑ์‹œ ๊ณ ๋ คํ•  ๊ฐ ํ•ญ๋ชฉ + +* `Note`๋Š” ๋ณธ์ธ์ด ํ† ํฐ์— ๋ถ€์—ฌํ•  ์ด๋ฆ„, +* `Expiration`์€ ํ† ํฐ ๋งŒ๋ฃŒ ๊ธฐํ•œ, +* `Select scopes`๋Š” ํ•ด๋‹น ํ† ํฐ์— ์ค„ ๊ถŒํ•œ + +### ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋ฒ”์œ„ + +> ์ž์ฃผ ์“ฐ์ด๋Š” ๊ฒƒ๋“ค๋งŒ ์•Œ์•„๋ณด์ž + +1. (no scope) + +* ๊ณต๊ฐœ ์ •๋ณด์— ๋Œ€ํ•œ ์ฝ๊ธฐ ์ „์šฉ ์•ก์„ธ์Šค ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•ฉ๋‹ˆ๋‹ค(์‚ฌ์šฉ์ž ํ”„๋กœํ•„ ์ •๋ณด, ๋ฆฌํฌ์ง€ํ† ๋ฆฌ ์ •๋ณด ๋ฐ gist ํฌํ•จ) + +2. repo โญ + +
+ +* ์ฝ”๋“œ, ์ปค๋ฐ‹ ์ƒํƒœ, ๋ฆฌํฌ์ง€ํ† ๋ฆฌ ์ดˆ๋Œ€, ํ˜‘๋ ฅ์ž, ๋ฐฐํฌ ์ƒํƒœ ๋ฐ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ ์›นํ›„ํฌ์— ๋Œ€ํ•œ ์ฝ๊ธฐ ๋ฐ ์“ฐ๊ธฐ ๊ถŒํ•œ์„ ํฌํ•จํ•˜์—ฌ ํผ๋ธ”๋ฆญ ๋ฐ ํ”„๋ผ์ด๋น— ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์— ๋Œ€ํ•œ ๋ชจ๋“  ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•ฉ๋‹ˆ๋‹ค. +* **์ฐธ๊ณ **: ๋ฆฌํฌ์ง€ํ† ๋ฆฌ ๊ด€๋ จ ๋ฆฌ์†Œ์Šค ์™ธ์—๋„ `repo` ๋ฒ”์œ„๋Š” ํ”„๋กœ์ ํŠธ, ์ดˆ๋Œ€, ํŒ€ ๋ฉค๋ฒ„ ์ž๊ฒฉ ๋ฐ ์›นํ›„ํฌ๋ฅผ ํฌํ•จํ•˜์—ฌ ์กฐ์ง ์†Œ์œ  ๋ฆฌ์†Œ์Šค๋ฅผ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ์•ก์„ธ์Šค ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ฒ”์œ„๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ์†Œ์œ ํ•œ ํ”„๋กœ์ ํŠธ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๊ธฐ๋Šฅ๋„ ๋ถ€์—ฌํ•ฉ๋‹ˆ๋‹ค. + +3. repo : status + +* ํผ๋ธ”๋ฆญ ๋ฐ ํ”„๋ผ์ด๋น— ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์˜ ์ปค๋ฐ‹ ์ƒํƒœ์— ๋Œ€ํ•œ ์ฝ๊ธฐ/์“ฐ๊ธฐ ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•ฉ๋‹ˆ๋‹ค. +* ์ด ๋ฒ”์œ„๋Š” ์ฝ”๋“œ์— ๋Œ€ํ•œ ์•ก์„ธ์Šค ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•˜์ง€ _์•Š๊ณ _ ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž ๋˜๋Š” ์„œ๋น„์Šค์— ํ”„๋ผ์ด๋น— ๋ฆฌํฌ์ง€ํ† ๋ฆฌ ์ปค๋ฐ‹ ์ƒํƒœ์— ๋Œ€ํ•œ ์•ก์„ธ์Šค ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•˜๋Š” ๋ฐ๋งŒ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. + +4. repo\_deployment + +* ํผ๋ธ”๋ฆญ ๋ฐ ํ”„๋ผ์ด๋น— ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์˜ [๋ฐฐํฌ ์ƒํƒœ](https://docs.github.com/ko/rest/repos#deployments)์— ๋Œ€ํ•œ ์•ก์„ธ์Šค ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•ฉ๋‹ˆ๋‹ค. +* ์ด ๋ฒ”์œ„๋Š” ์ฝ”๋“œ์— ๋Œ€ํ•œ ์•ก์„ธ์Šค ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•˜์ง€ _์•Š๊ณ _ ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž ๋˜๋Š” ์„œ๋น„์Šค์— ๋ฐฐํฌ ์ƒํƒœ์— ๋Œ€ํ•œ ์•ก์„ธ์Šค ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•˜๋Š” ๋ฐ๋งŒ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. + +5. public\_repo + +* ํผ๋ธ”๋ฆญ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์— ๋Œ€ํ•œ ์•ก์„ธ์Šค ์ œํ•œ ์—ฌ๊ธฐ์—๋Š” ํผ๋ธ”๋ฆญ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ ๋ฐ ์กฐ์ง์˜ ์ฝ”๋“œ, ์ปค๋ฐ‹ ์ƒํƒœ, ๋ฆฌํฌ์ง€ํ† ๋ฆฌ ํ”„๋กœ์ ํŠธ, ํ˜‘๋ ฅ์ž ๋ฐ ๋ฐฐํฌ ์ƒํƒœ์— ๋Œ€ํ•œ ์ฝ๊ธฐ/์“ฐ๊ธฐ ์•ก์„ธ์Šค๊ฐ€ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค. +* ํผ๋ธ”๋ฆญ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์— ๋ณ„ํ‘œ๋ฅผ ํ‘œ์‹œํ•˜๋Š” ๊ฒฝ์šฐ์—๋„ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. + +6. repo:invite + +* ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์—์„œ ํ˜‘์—…ํ•˜๋Š” ์ดˆ๋Œ€์˜ ์ˆ˜๋ฝ/๊ฑฐ์ ˆ ๊ธฐ๋Šฅ์„ ๋ถ€์—ฌํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ฒ”์œ„๋Š” ์ฝ”๋“œ์— ๋Œ€ํ•œ ์•ก์„ธ์Šค ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•˜์ง€ _์•Š๊ณ _ ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž ๋˜๋Š” ์„œ๋น„์Šค์— ์ดˆ๋Œ€์— ๋Œ€ํ•œ ์•ก์„ธ์Šค ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•˜๋Š” ๋ฐ๋งŒ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. + +7. security\_events + +* [code scanning API](https://docs.github.com/ko/rest/code-scanning)์˜ ๋ณด์•ˆ ์ด๋ฒคํŠธ์— ๋Œ€ํ•œ ์ฝ๊ธฐ ๋ฐ ์“ฐ๊ธฐ ์•ก์„ธ์Šค๋ฅผ ๋ถ€์—ฌํ•ฉ๋‹ˆ๋‹ค. +* ์ด ๋ฒ”์œ„๋Š” ์ฝ”๋“œ์— ๋Œ€ํ•œ ์•ก์„ธ์Šค ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•˜์ง€ _์•Š๊ณ _ ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž ๋˜๋Š” ์„œ๋น„์Šค์— ๋ณด์•ˆ ์ด๋ฒคํŠธ์— ๋Œ€ํ•œ ์•ก์„ธ์Šค ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•˜๋Š” ๋ฐ๋งŒ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. + +8. workflow + +* GitHub Actions ์›Œํฌํ”Œ๋กœ ํŒŒ์ผ์„ ์ถ”๊ฐ€ํ•˜๊ณ  ์—…๋ฐ์ดํŠธํ•˜๋Š” ๊ธฐ๋Šฅ์„ ๋ถ€์—ฌํ•ฉ๋‹ˆ๋‹ค. +* ๊ฒฝ๋กœ์™€ ๋‚ด์šฉ์ด ๋ชจ๋‘ ๋™์ผํ•œ ํŒŒ์ผ์ด ๋™์ผํ•œ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์˜ ๋‹ค๋ฅธ ๋ถ„๊ธฐ์— ์žˆ๋Š” ๊ฒฝ์šฐ ์ด ๋ฒ”์œ„ ์—†์ด ์›Œํฌํ”Œ๋กœ ํŒŒ์ผ์„ ์ปค๋ฐ‹ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์›Œํฌํ”Œ๋กœ ํŒŒ์ผ์€ ๋‹ค๋ฅธ ๋ฒ”์œ„ ์ง‘ํ•ฉ์„ ํฌํ•จํ•  ์ˆ˜ ์žˆ๋Š” `GITHUB_TOKEN`์„ ๋…ธ์ถœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. +* ์ž์„ธํ•œ ๋‚ด์šฉ์€ "[์ž๋™ ํ† ํฐ ์ธ์ฆ](https://docs.github.com/ko/actions/security-guides/automatic-token-authentication#permissions-for-the-github\_token)"์„(๋ฅผ) ์ฐธ์กฐํ•˜์„ธ์š”. + +## repo๋ผ๋ฆฌ ์—ฐ๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ํ† ํฐ ๋ฐœ๊ธ‰ + +### **1. << Github PAT ๋ฐœ๊ธ‰ >>** + +> ์ด ๊ฒƒ์„ Gitgook์ด Github.io๋กœ ์—ฐ๊ฒฐํ•ด์ฃผ๊ธฐ ์œ„ํ•œ ํ† ๊ทผ + +
+ +* Github์—์„œ ๋กœ๊ทธ์ธ ํ›„ ์šฐ์ธก ์ƒ๋‹จ์˜ ํ”„๋กœํ•„ ์•„์ด์ฝ˜ ํด๋ฆญ +* `โš™๏ธ Settings` ํด๋ฆญ +* ์ขŒ์ธก ๋ฉ”๋‰ด ์ตœํ•˜๋‹จ์— `<> Developer Settings` ํด๋ฆญ +* `Personal access tokens` ํŽผ์ณ์„œ `Tokens (classic)` ํด๋ฆญ +* `Generate new token (classic)` ํด๋ฆญ +* Note์™€ Expiration์€ ์•Œ์•„์„œ ์ž‘์„ฑํ•˜๊ณ , +* `Select scopes` ์ค‘์— `repo`์™€ `workflow` ์„ ํƒ โญ๏ธ์ค‘์š”โญ๏ธ +* `Generate Token` + +### ๐Ÿค” write:package๋Š” ์•ˆํ•„์š”ํ• ๊นŒ?? + +`write:packages` ๊ถŒํ•œ์€ GitHub์˜ ํŒจํ‚ค์ง€ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ(GitHub Packages)์— ํŒจํ‚ค์ง€๋ฅผ ํ‘ธ์‹œํ•˜๊ฑฐ๋‚˜ ์—…๋ฐ์ดํŠธํ•  ๋•Œ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๋งŒ์•ฝ ๋‹น์‹ ์˜ GitHub Actions ์›Œํฌํ”Œ๋กœ์šฐ๊ฐ€ GitHub Packages์— ํŒจํ‚ค์ง€๋ฅผ ๊ฒŒ์‹œํ•˜๊ฑฐ๋‚˜ ๊ด€๋ฆฌํ•˜๋Š” ์ž‘์—…์„ ํฌํ•จํ•˜๊ณ  ์žˆ๋‹ค๋ฉด, `write:packages` ๊ถŒํ•œ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. + +* **`write:packages` ๊ถŒํ•œ**: ์ด ๊ถŒํ•œ์€ **GitHub Packages**์™€ ๊ด€๋ จ๋œ ์ž‘์—…์— ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, Docker ์ด๋ฏธ์ง€, npm ํŒจํ‚ค์ง€, Maven ์•„ํ‹ฐํŒฉํŠธ ๋“ฑ์„ GitHub Packages์— ํ‘ธ์‹œํ•  ๋•Œ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. +* **์‚ฌ์šฉ ์‚ฌ๋ก€**: ๋งŒ์•ฝ ์›Œํฌํ”Œ๋กœ์šฐ๊ฐ€ ๋‹จ์ˆœํžˆ ์ฝ”๋“œ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ ๊ฐ„์— ์ปค๋ฐ‹์„ ํ‘ธ์‹œํ•˜๊ฑฐ๋‚˜ ์—…๋ฐ์ดํŠธํ•˜๋Š” ์ž‘์—…๋งŒ ์ˆ˜ํ–‰ํ•˜๊ณ , ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ์™€ ๊ด€๋ จ๋œ ์ž‘์—…์ด ์—†๋‹ค๋ฉด, `write:packages` ๊ถŒํ•œ์€ ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. + +1. ์˜ˆ์‹œ ์ƒํ™ฉ + +* **ํ•„์š”ํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ**: + * ๋‹ค๋ฅธ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ๋กœ ์ฝ”๋“œ๋ฅผ ํ‘ธ์‹œํ•˜๊ฑฐ๋‚˜ ์—…๋ฐ์ดํŠธ๋งŒ ํ•  ๋•Œ. + * GitHub Packages์™€ ๊ด€๋ จ์ด ์—†๋Š” ์ž‘์—…์„ ํ•  ๋•Œ. +* **ํ•„์š”ํ•œ ๊ฒฝ์šฐ**: + * GitHub Packages์— ํŒจํ‚ค์ง€๋ฅผ ์—…๋กœ๋“œํ•˜๊ฑฐ๋‚˜ ์—…๋ฐ์ดํŠธํ•  ๋•Œ. + * GitHub Actions์—์„œ Docker ์ด๋ฏธ์ง€๋ฅผ ๋นŒ๋“œํ•˜๊ณ  ์ด๋ฅผ GitHub Packages์— ํ‘ธ์‹œํ•  ๋•Œ. + +2. ๊ถŒํ•œ ์„ค์ •: + +* ๋งŒ์•ฝ ํŒจํ‚ค์ง€ ์ž‘์—…์„ ํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด, `repo`, `workflow`, `public_repo` ๋“ฑ์˜ ๊ธฐ๋ณธ์ ์ธ ๊ถŒํ•œ๋งŒ์œผ๋กœ ์ถฉ๋ถ„ํ•ฉ๋‹ˆ๋‹ค. + +### 2. ํ† ํฐ ์„ค์ • + +> gitbook repo์— push ๋˜๊ฑฐ๋‚˜, ์ผ์ • ์‹œ๊ฐ„๋งˆ๋‹ค github.io์— ๊ธ€์„ ์—ฐ๊ฒฐํ•ด์ค„ ๊ฑฐ์ž„ + +
+ +### 3. Gitbook repo, Github.io repo์— PAT ๋“ฑ๋ก โญ + +`Github action` ํŒŒ์ผ์— ๊ฐœ์ธ ๋ ˆํฌ๋กœ ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ `push`ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋ ค๋ฉด\ +์œ„์—์„œ ๋ฐœ๊ธ‰ ๋ฐ›์€ ๊ฐœ์ธ ํ† ํฐ์„ ํ•จ๊ป˜ ๋ณด๋‚ด ๋‚ด ๋ ˆํฌ์— `push`ํ•  ๊ถŒํ•œ์„ ๋ฐ›์€ ์‚ฌ๋žŒ์ž„์„ ์ฆ๋ช… ํ•˜๊ธฐ ์œ„ํ•จ + +
+ +
+ +* GITBOOK , Github.io๋ ˆํฌ์˜ `โš™๏ธ Settings` ํด๋ฆญ +* `โŠž Secrets and variables`๋ฅผ ํŽผ์ณ `Actions` ํด๋ฆญ +* `New repository secret` ํด๋ฆญ +* `Name`์—๋Š” `.yml` ํŒŒ์ผ์—์„œ ์‚ฌ์šฉํ•  ์ด๋ฆ„, `Value`์—๋Š” ์•„๊นŒ ๋ฐœ๊ธ‰๋ฐ›์€ PAT ์ž‘์„ฑ +* `Add Secret` ํด๋ฆญ + +## workflow ์ž‘์„ฑํ•˜๊ธฐ + +์›Œํฌํ”Œ๋กœ์šฐ์— ์ž‘์—…ํ•ด์•ผ ํ•  ๊ฒƒ์€ ํฐ ํ‹€์€ + +> gitbook์— ์žˆ๋Š” md ํŒŒ์ผ์„ github.io์˜ `_posts`์— ๋„ฃ์–ด์•ผ ํ•จ + +
+ +### gitbook ์„ ๊ฐ€์ ธ์˜ค๊ธฐ ์œ„ํ•œ ๋ฌธ์ œ๊ฐ€ ์žˆ๋Š”๋ฐ + +1. gitbook์€ ํ•œ๊ธ€์„ ์ €์žฅํ•˜์ง€ ๋ชปํ•˜๋”๋ผ? +2. ๊ทธ๋ž˜์„œ ํ•œ๊ธ€๋กœ ๋œ ํƒ€์ดํ‹€์˜ ๊ฒฝ์šฐ, github repo์— ์ €์žฅ ์‹œ, undefinded๋กœ ์ €์žฅ๋จ + +
+ +3. md ํŒŒ์ผ ์ฝ”๋“œ ์•ˆ์—๋Š” ์ž˜ ๋“ค์–ด๊ฐ€์ง + +* gitbook์ด ## ๊นŒ์ง€๋งŒ ๋ชฉ์ฐจ๋กœ ๋งŒ๋“ค์–ด์ฃผ๋Š”๋ฐ ๊ทธ ์ด์œ ๊ฐ€ ์šฐ๋ฆฌ๊ฐ€ gitbook์—์„œ ##๋กœ ๋ชฉ์ฐจ๋ฅผ ํ•˜๋ฉด ### ๋กœ #๋กœ ํ•˜๋ฉด ##๋กœ # ์„ ํ•˜๋‚˜์”ฉ ๋” ๋ถ™์—ฌ์ง€๋Š” ๊ผด์ž„ +* ์ฆ‰, ์ œ๋ชฉ์ด # ํ•œ๊ฒŒ h1์ž„ => ์ด๊ฑธ github io์— ๋„˜์–ด๊ฐ€๊ธฐ ์ „ workflow์—์„œ ๋ณ€๊ฒฝํ•ด์ค˜์•ผ ํ•จ push๊ฐ€ ๋“ค์–ด์˜ฌ ๋•Œ ๋ณ€๊ฒฝ์„ ํ•˜๋˜ ์•„๋‹ˆ๋ฉด ์ผ์ •์‹œ๊ฐ„๋งˆ๋‹ค ๋ณ€๊ฒฝ์„ ํ•˜๋˜์ง€ + +### ์ฆ‰, workflow์—์„œ ์ž‘์—…ํ•ด์•ผ ํ•  ๊ฒƒ๋“ค์„ ์ •๋ฆฌํ•ด๋ณด๋ฉด + +1. gitbook ์ปค๋ฐ‹ ์‹œ, ํŒŒ์ผ ์ด๋ฆ„์„ ๋‹ค ๋ฐ”๊ฟ”์ค˜์•ผ ํ•จ... mdํŒŒ์ผ ์•ˆ์— ์žˆ๋Š” h1์œผ๋กœ +2. gitbook์˜ github.io๋กœ ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ๊ฐ€์ ธ์˜ฌ ๊ฑด๋ฐ, md ํŒŒ์ผ๋“ค์„ ์ฐพ์•„์•ผ ํ•จ(main ๋ธŒ๋žœ์น˜์— `checkout`) +3. developLog > ์žˆ๋Š” ๊ฒƒ๋“ค ์ค‘ ์•„๋ž˜ ๋‘๊ฐœ๋ฅผ ์ œ์™ธํ•˜๊ณ  ์ „๋ถ€ ๊ฐ€์ ธ์˜ค๊ณ  ๊ทธ ์ดํ›„๋Š” ๋ณ€๊ฒฝ์‚ฌํ•ญ์ด ์žˆ์„ ๋•Œ๋งŒ ๊ฐ€์ ธ์˜ฌ ๊ฑฐ์ž„ + +
+ +4. **ํด๋”**๋ฅผ `์นดํ…Œ๊ณ ๋ฆฌ`๋กœ ๋ถ„๋ฅ˜ ํ•  ๊ฑฐ์ž„ +5. mdํŒŒ์ผ์„ ์ˆ˜์ •ํ•ด์ค˜์•ผ ํ•จ ๋‘˜์ด ์‚ด์ง ๋‹ฌ๋ผ์„œ gitbook์—์„œ ๋ณด๋‚ผ ๋•Œ ์นดํ…Œ๊ณ ๋ฆฌ, ๋ฐœ๊ธ‰๋‚ ์งœ, ํƒ€์ดํ‹€ ๋“ฑ์„ mdํŒŒ์ผ ์•ˆ์— ๋„ฃ์–ด์ค˜์•ผ ํ•จ + +โœ… gitbook์˜ ๊ฒฝ์šฐ, github.io์™€ ์—ฐ๋™์ด ์•ˆ๋˜๊ธฐ์— md ํŒŒ์ผ ์•ˆ์— ์žˆ๋Š” ์ƒ๋‹จ์— ์žˆ๋Š” --- --- ์˜์—ญ์ธ ๋ถ€๋ถ„์„ ์‚ญ์ œ ์‹œ์ผœ์ค˜์•ผํ•จ + +โœ… ๊ทธ๋ฆฌ๊ณ  github.io์— ๋งž์ถฐ ์•ˆ์— ๋‚ด์šฉ ์ˆ˜์ • ์‚ฌ์ง„๊ณผ ๊ฐ™์ด ํ•ด์ค˜์•ผ ํ•จ + +* title : ํŒŒ์ผ ์ œ๋ชฉ์œผ๋กœ ๊ฐ€์ ธ์˜ด +* description : ์€ gitbook์ด๋ž‘ ๋˜‘๊ฐ™์ด ์—†์œผ๋ฉด ๋“ค์–ด๊ฐ€์ง€ ์•Š๊ฒŒ +* author : ๋ฌด์กฐ๊ฑด mellona +* date : commitํ•œ ๋‚ ์งœ์™€ ์‹œ๊ฐ„์œผ๋กœ +* pin : ๊ธฐ๋ณธ๊ฐ’ fasle +* mermaid : ๊ธฐ๋ณธ๊ฐ’ true +* image: gitbook cover๋กœ ํ•ด์„œ ๊ฐ€์ ธ์˜ด ๊ธฐ๋ณธ๊ฐ’์€ ์—†์Œ .gitbook/assets/DALLยทE 2024-08-12 14.38.23 - A blog banner designed with a minimalist winter theme, featuring a snow-covered landscape with a trail of footsteps leading through the snow. The desi.webp + +
+ +โœ… ํƒ€์ดํ‹€๋„ ๊ทธ๊ฒƒ์— ๋งž๊ฒŒ ๋ฐ”๊ฟ”์ค˜์•ผ ํ•จ ํƒ€์ดํ‹€ : ๋…„๋„-์›”-์ผ ํŒŒ์ผ์ œ๋ชฉ + +6. ๋ชจ๋“  ์ž‘์—…์ด ๋๋‚ฌ๋‹ค๋ฉด, github.io \_posts์— `push` ํ•ด์ค€๋‹ค. - checkout ํ•„์š” + +### workspace ์ž๋™ํ™”๋ฅผ ์œ„ํ•œ ์Šคํฌ๋ฆฝํŠธ + +> ๐Ÿ“ ์ฐธ๊ณ  : [github action์˜ ์›Œํฌํ”Œ๋กœ์šฐ ๊ตฌ๋ฌธ](https://docs.github.com/en/actions/writing-workflows/workflow-syntax-for-github-actions#jobsjob\_idneeds) + +์•ž์— 1, 2์€ gitbook repo์— ํ‘ธ์‹œ๋  ๋•Œ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด **Gitbook title rename.yml**์œผ๋กœ + +๋’ค์— 3, 4, 5, 6์€ github.io repo์— ๋„˜์–ด๊ฐˆ ๋•Œ ์ž‘์—…์œผ๋กœ **Convert and Deploy DevelopLog to Jekyll.ym**l๋กœ ์ž‘์—…ํ•ด์•ผ ๊ฒ ๋‹ค. + +
+ +1. Gitbook title rename์„ dev ๋ธŒ๋žœ์น˜์— ๋จผ์ € ํ•ด์ฃผ๊ธฐ ์œ„ํ•ด **Rename and Commit Markdown Files.yml**์„ ๋งŒ๋“ค์–ด์ฃผ๊ณ  ์•„๋ž˜์˜ ์Šคํฌ๋ฆฝํŠธ ์ž‘์„ฑ + +``` +name: Rename and Commit Markdown Files + +on: + push: + branches: + - dev # dev ๋ธŒ๋žœ์น˜์— ํ‘ธ์‹œ๋  ๋•Œ ์›Œํฌํ”Œ๋กœ์šฐ ํŠธ๋ฆฌ๊ฑฐ + workflow_dispatch: # ์ˆ˜๋™์œผ๋กœ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ์˜ต์…˜ + +jobs: + process-markdown: + runs-on: ubuntu-latest + + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Rename Markdown files + run: | + for file in developLog/*.md; do + title=$(grep -m 1 '^# ' "$file" | sed 's/^# //') + if [ -n "$title" ]; then + new_filename="developLog/${title// /_}.md" + mv "$file" "$new_filename" + fi + done + + - name: Commit changes + run: | + git config --local user.email "your-email@example.com" + git config --local user.name "Your Name" + git add . + git commit -m "Rename Markdown files based on h1 titles" + git push origin dev # ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ dev ๋ธŒ๋žœ์น˜๋กœ ํ‘ธ์‹œ + +``` + +โœ… ํƒ€์ดํ‹€๋„ ๊ทธ๊ฒƒ์— ๋งž๊ฒŒ ๋ฐ”๊ฟ”์ค˜์•ผ ํ•จ ํƒ€์ดํ‹€ : ๋…„๋„-์›”-์ผ ํŒŒ์ผ์ œ๋ชฉ ๋ชจ๋“  ์ž‘์—…์ด ๋๋‚ฌ๋‹ค๋ฉด, github.io \_posts์— push ํ•ด์ค€๋‹ค. - checkout ํ•„์š” workspace ์ž๋™ํ™”๋ฅผ ์œ„ํ•œ ์Šคํฌ๋ฆฝํŠธ + +๐Ÿ“ ์ฐธ๊ณ  : github action์˜ ์›Œํฌํ”Œ๋กœ์šฐ ๊ตฌ๋ฌธ ์•ž์— 1, 2์€ gitbook repo์— ํ‘ธ์‹œ๋  ๋•Œ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด Gitbook title rename.yml์œผ๋กœ ๋’ค์— 3, 4, 5, 6์€ github.io repo์— ๋„˜์–ด๊ฐˆ ๋•Œ ์ž‘์—…์œผ๋กœ Convert and Deploy DevelopLog to Jekyll.yml๋กœ ์ž‘์—…ํ•ด์•ผ ๊ฒ ๋‹ค. + +ํ•œ๊ธ€ ์ด๋ฆ„์œผ๋กœ ๋ฐ”๊ฟ”์ฃผ๊ธฐ ์œ„ํ•œ ์ž‘์—….. gpt์˜ ๋„์›€์„ ๋ฐ›์•˜์Šต๋‹ˆ๋‹ค... + ๋ฌธ์„œ Gitbook title rename์„ dev ๋ธŒ๋žœ์น˜์— ๋จผ์ € ํ•ด์ฃผ๊ธฐ ์œ„ํ•ด Rename and Commit Markdown Files.yml์„ ๋งŒ๋“ค์–ด์ฃผ๊ณ  ์•„๋ž˜์˜ ์Šคํฌ๋ฆฝํŠธ ์ž‘์„ฑ name: Rename and Commit Markdown Files + +on: push: branches: - dev # dev ๋ธŒ๋žœ์น˜์— ํ‘ธ์‹œ๋  ๋•Œ ์›Œํฌํ”Œ๋กœ์šฐ ํŠธ๋ฆฌ๊ฑฐ workflow\_dispatch: # ์ˆ˜๋™์œผ๋กœ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ์˜ต์…˜ + +jobs: process-markdown: runs-on: ubuntu-latest + +``` +steps: +- name: Checkout repository + uses: actions/checkout@v4 + +- name: Rename Markdown files + run: | + for file in developLog/*.md; do + title=$(grep -m 1 '^# ' "$file" | sed 's/^# //') + if [ -n "$title" ]; then + new_filename="developLog/${title// /_}.md" + mv "$file" "$new_filename" + fi + done + +- name: Commit changes + run: | + git config --local user.email "your-email@example.com" + git config --local user.name "Your Name" + git add . + git commit -m "Rename Markdown files based on h1 titles" + git push origin dev # ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ dev ๋ธŒ๋žœ์น˜๋กœ ํ‘ธ์‹œ +``` + +๐Ÿ”ฅ ๋ฌธ์ œ : push๊ฐ€ main ๋ธŒ๋žœ์น˜์— ๋˜๋ฉด์„œ, ์Šคํฌ๋ฆฝํŠธ ์‹คํ–‰ ์•ˆ๋จ + +โœ… gitbook push ์ž์ฒด๊ฐ€ ๋ฌด์กฐ๊ฑด main์œผ๋กœ ๋ผ์„œ ๊ทธ๋ƒฅ ์ผ๋‹จ, main์œผ๋กœ ๋ฐ”๊พธ๊ธฐ๋กœ ํ•จ + +
+ +๐Ÿ”ฅ ์ดํ›„์˜ ๋ฌธ์ œ๋Š” ํŒŒ์ผ ์ด๋ฆ„์„ ๋ณ€๊ฒฝํ•˜๋ ค๊ณ  ํ•  ๋•Œ ์ด๋ฏธ ๊ทธ๋ ‡๊ฒŒ h1์˜ ์ด๋ฆ„์œผ๋กœ ๋˜์–ด ์žˆ๋Š” ๊ฒƒ๋“ค๋„ ์žˆ๋‹ค๋Š” ๊ฒƒ์ด ์ด๋ฏธ ์กด์žฌํ•˜๋Š” ํŒŒ์ผ ์ด๋ฆ„๊ณผ ๋™์ผํ•œ ์ด๋ฆ„์œผ๋กœ ๋ณ€๊ฒฝํ•˜๋ ค๊ณ  ํ•  ๋•Œ ๋ฐœ์ƒ + +โœ… ํŒŒ์ผ ์ด๋ฆ„์ด ๋ณ€๊ฒฝ๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•˜๊ณ , ์ด๋ฏธ ๋™์ผํ•œ ์ด๋ฆ„์ด๋ผ๋ฉด mv ๋ช…๋ น์„ ๊ฑด๋„ˆ๋›ฐ๋„๋ก ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋‹ค. name: Rename and Commit Markdown Files + +on: push: branches: - main # main ๋ธŒ๋žœ์น˜์— ํ‘ธ์‹œ๋  ๋•Œ ์›Œํฌํ”Œ๋กœ์šฐ ํŠธ๋ฆฌ๊ฑฐ workflow\_dispatch: # ์ˆ˜๋™์œผ๋กœ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ์˜ต์…˜ + +jobs: process-markdown: runs-on: ubuntu-latest # ์ตœ์‹  Ubuntu ํ™˜๊ฒฝ์—์„œ ์‹คํ–‰ + +``` +steps: +- name: Checkout repository + uses: actions/checkout@v4 # ๋ ˆํฌ์ง€ํ† ๋ฆฌ์˜ ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ์ฒดํฌ์•„์›ƒ + +- name: Rename Markdown files + run: | + for file in developLog/*.md; do + # ์ฒซ ๋ฒˆ์งธ H1 ์ œ๋ชฉ์„ ์ถ”์ถœํ•˜์—ฌ ์ œ๋ชฉ์œผ๋กœ ์‚ฌ์šฉ + title=$(grep -m 1 '^# ' "$file" | sed 's/^# //') + + if [ -n "$title" ]; then + # ์ƒˆ ํŒŒ์ผ๋ช…์„ ์ œ๋ชฉ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์ƒ์„ฑ, ๊ณต๋ฐฑ์€ ๋ฐ‘์ค„(_)๋กœ ๋Œ€์ฒด + new_filename="developLog/${title// /_}.md" + + # ํŒŒ์ผ ์ด๋ฆ„์ด ๋™์ผํ•œ ๊ฒฝ์šฐ์—๋Š” mv ๋ช…๋ น์„ ๊ฑด๋„ˆ๋œ๋‹ˆ๋‹ค + if [ "$file" != "$new_filename" ]; then + mv "$file" "$new_filename" + fi + fi + done + +- name: Commit changes + run: | + # Git ์‚ฌ์šฉ์ž ์ •๋ณด ์„ค์ • + git config --local user.email "your-email@example.com" + git config --local user.name "Your Name" + # ๋ชจ๋“  ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ์ถ”๊ฐ€ํ•˜๊ณ  ์ปค๋ฐ‹ + git add . + git commit -m "Rename Markdown files based on h1 titles" + # ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ์›๊ฒฉ ์ €์žฅ์†Œ์˜ main ๋ธŒ๋žœ์น˜๋กœ ํ‘ธ์‹œ + git push origin main +``` + +ํ•˜์ง€๋งŒ, ์ด ๋˜ํ•œ ๋ฌธ์ œ๊ฐ€ ๋˜๋Š”๋ฐ... ๐Ÿ”ฅ ๋ฐ”๋€” ๊ฒƒ์ด ์—†๋‹ค๊ณ  ์ž๊พธ ๋œธ + +
+ +โœ… add -A๋กœ ์ „์ฒด๋กœ ํ•ด์ฃผ๊ณ  ๊ทธ๋ฆฌ๊ณ  ํ† ํฐ์„ ์ด์šฉํ•ด์„œ github action ๋ด‡์ด ๋„ฃ๊ฒŒ ์ˆ˜์ • + +## ์ผ๋ถ€ ์ฝ”๋“œ + +``` + git add -A # ๋ชจ๋“  ๋ณ€๊ฒฝ์‚ฌํ•ญ ์ถ”๊ฐ€ + git config --global user.name 'github-actions[bot]' + git config --global user.email 'github-actions[bot]@users.noreply.github.com' + git diff --staged --quiet || git commit -m "Rename Markdown files based on h1 titles" + git push https://${{ secrets.GH_PAT }}@github.com/GoldenPearls/gitBook.git # ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ main ๋ธŒ๋žœ์น˜๋กœ ํ‘ธ์‹œ +``` + + ๐Ÿ”ฅ ์‹คํ–‰์€ ๋˜๋Š”๋ฐ ํŒŒ์ผ์ด ๋ฐ”๋€Œ์ง€ ์•Š์Œ.. + +
+ +โœ… ํ•œ๊ธ€ ์ธ์ฝ”๋”ฉ ์ž‘์—… ์ˆ˜ํ–‰ + +* name: Set UTF-8 Encoding run: | export LC\_CTYPE="UTF-8" # UTF-8 ์ธ์ฝ”๋”ฉ์„ ๋ช…์‹œ์ ์œผ๋กœ ์„ค์ • + +๐Ÿ”ฅ mv ๋ช…๋ น์–ด๋กœ ํŒŒ์ผ์„ ์ด๋™ํ•˜๋ ค๊ณ  ํ•  ๋•Œ, ์ƒˆ ํŒŒ์ผ ์ด๋ฆ„์— ํฌํ•จ๋œ ๋””๋ ‰ํ† ๋ฆฌ๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค๊ณ  ํ•จ + +
+ +โœ… ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋ ค๋ฉด, ์ด๋™ํ•  ๊ฒฝ๋กœ์— ํ•ด๋‹นํ•˜๋Š” ๋””๋ ‰ํ† ๋ฆฌ๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š์œผ๋ฉด ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋กœ์ง์„ ์ถ”๊ฐ€ํ•ด์•ผ ํ•œ๋‹ค. + +
+ +![](https://velog.velcdn.com/images/prettylee620/post/037def8c-e24e-4b88-a445-c1721ac892d2/image.png) + +ํ•ด๊ฒฐ!!!!! ใ… ใ…œใ… ใ… ใ…  40๋ถ„์˜ ์‚ฝ์งˆ ๋์— ์ž˜๋ฐ”๋€Œ์—ˆ๋‹ค.. ํ‘ํ‘.. ์ค„ ์•Œ์•˜์œผ๋‚˜... ์นดํ…Œ๊ณ ๋ฆฌ๊ฐ€ ์–ฝํžˆ๋Š” ํ˜„์ƒ์ด ๋‚˜์˜ด... + +``` +name: Rename and Commit Markdown Files + +on: + push: + branches: + - main # main ๋ธŒ๋žœ์น˜์— ํ‘ธ์‹œ๋  ๋•Œ ์›Œํฌํ”Œ๋กœ์šฐ ํŠธ๋ฆฌ๊ฑฐ + workflow_dispatch: # ์ˆ˜๋™์œผ๋กœ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ์˜ต์…˜ + +jobs: + process-markdown: + runs-on: ubuntu-latest + + steps: + - name: Checkout repository + uses: actions/checkout@v4 + with: + token: ${{ secrets.GITBOOKKEY }} + fetch-depth: 0 + ref: main + + - name: Set UTF-8 Encoding + run: | + export LC_CTYPE="UTF-8" # UTF-8 ์ธ์ฝ”๋”ฉ์„ ๋ช…์‹œ์ ์œผ๋กœ ์„ค์ • + + - name: Rename and Update Markdown files + run: | + for file in $(find developLog -type f -name '*.md'); do + # ํŒŒ์ผ ๋‚ด์šฉ์˜ ์ฒซ ๋ฒˆ์งธ ์ œ๋ชฉ ์ค„์„ ์ถ”์ถœ + title=$(grep -m 1 '^#' "$file" | sed 's/^# //') + + if [ -n "$title" ]; then + # ํŒŒ์ผ์˜ ๋””๋ ‰ํ† ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ์œ ์ง€ํ•˜๋ฉด์„œ ์ œ๋ชฉ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์ƒˆ ํŒŒ์ผ๋ช… ์ƒ์„ฑ + dir=$(dirname "$file") + new_filename="$dir/$title.md" + + # ๋Œ€์ƒ ๋””๋ ‰ํ† ๋ฆฌ๊ฐ€ ์—†์œผ๋ฉด ์ƒ์„ฑ + new_dir=$(dirname "$new_filename") + mkdir -p "$new_dir" + + # ํŒŒ์ผ ์ด๋ฆ„์ด ๋™์ผํ•œ ๊ฒฝ์šฐ์—๋„ ๊ฐ•์ œ๋กœ ์—…๋ฐ์ดํŠธ + if [ "$file" != "$new_filename" ]; then + echo "Renaming $file to $new_filename" + mv "$file" "$new_filename" + else + echo "Updating timestamp for $file" + touch "$file" # ํŒŒ์ผ์˜ ํƒ€์ž„์Šคํƒฌํ”„๋ฅผ ์—…๋ฐ์ดํŠธ + fi + else + echo "No valid title found in $file, skipping." + fi + done + + - name: Commit changes + run: | + git add -A # ๋ชจ๋“  ๋ณ€๊ฒฝ์‚ฌํ•ญ ์ถ”๊ฐ€ + git config --global user.name 'github-actions[bot]' + git config --global user.email 'github-actions[bot]@users.noreply.github.com' + git diff --staged --quiet || git commit -m "Rename and update Markdown files based on h1 titles" + git push https://${{ secrets.GH_PAT }}@github.com/GoldenPearls/gitBook.git # ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ main ๋ธŒ๋žœ์น˜๋กœ ํ‘ธ์‹œ + +``` + +
+ +## TMI + +GITHUB Action์ด ํŽธํ•˜๊ธฐ๋Š” ํ•œ๋‹ค ์ž˜ ๋ชฐ๋ผ์„œ... ํ•  ๋•Œ๋งˆ๋‹ค ๊ณต๋ถ€ํ•ด์•ผ ํ•  ๋“ฏ ใ…‹ใ…‹ใ…‹ใ…‹ใ…‹ใ…‹ใ…‹ใ…‹ ๋„ˆ๋ฌด ๋งŽ๊ธฐ๋„ ํ•˜๊ณ ... ํ•˜์ง€๋งŒ ์ž๋™ํ™” ์ตœ๊ณ  + + + +> ๐Ÿ“ ์ฐธ๊ณ  +> +> * [Github action์œผ๋กœ Sync Fork ์ž๋™ํ™”ํ•˜๊ธฐ - push ๋  ๋•Œ๋งˆ๋‹ค](https://velog.io/@charming-l/Github-action%EC%9C%BC%EB%A1%9C-push-%EB%90%A0-%EB%95%8C%EB%A7%88%EB%8B%A4-%EC%9E%90%EB%8F%99%EC%9C%BC%EB%A1%9C-%EC%B5%9C%EC%8B%A0%ED%99%94%ED%95%98%EA%B8%B0to-forked-repo) +> * [GitAction์—์„œ ๋‹ค๋ฅธ ๋ ˆํฌ๋กœ ์ ‘๊ทผํ•˜๋ ค๋ฉด?](https://stackoverflow.com/questions/71068476/accessing-another-repository-with-github-cli-in-github-actions) +> * [GitHub Organization ํ”„๋กœ์ ํŠธ๋ฅผ vercel ๋ฌด๋ฃŒ๋กœ ์—ฐ๋™ํ•˜๊ธฐ (+git actions)](https://velog.io/@rmaomina/organization-vercel-hobby-deploy) + diff --git "a/developLog/ci-cd/github/_ Git\354\227\220\354\204\234 \354\225\214\352\262\214 \353\220\234 \354\247\200\354\213\235_.md" "b/developLog/ci-cd/github/_ Git\354\227\220\354\204\234 \354\225\214\352\262\214 \353\220\234 \354\247\200\354\213\235_.md" new file mode 100644 index 0000000..cf22ab8 --- /dev/null +++ "b/developLog/ci-cd/github/_ Git\354\227\220\354\204\234 \354\225\214\352\262\214 \353\220\234 \354\247\200\354\213\235_.md" @@ -0,0 +1,34 @@ +--- +description: Git์—์„œ ์•Œ๊ฒŒ ๋œ ์ง€์‹์„ ํ•œ ๋ˆˆ์— +icon: git +--- + +# Git์—์„œ ์•Œ๊ฒŒ ๋œ ์ง€์‹ + +## 1. Git tree์— ๋Œ€ํ•ด์„œ + +> ์ถœ์ฒ˜ : [Github action์œผ๋กœ Sync Fork ์ž๋™ํ™”ํ•˜๊ธฐ - push ๋  ๋•Œ๋งˆ๋‹ค](https://velog.io/@charming-l/Github-action%EC%9C%BC%EB%A1%9C-push-%EB%90%A0-%EB%95%8C%EB%A7%88%EB%8B%A4-%EC%9E%90%EB%8F%99%EC%9C%BC%EB%A1%9C-%EC%B5%9C%EC%8B%A0%ED%99%94%ED%95%98%EA%B8%B0to-forked-repo) + +์ฒ˜์Œ์—๋Š” _"๊ฐ™์€ ์ปค๋ฐ‹ํ•ด์‹œ๋กœ `push`ํ•œ๋‹ค"_, _"`Git tree`๋ฅผ ๊ฐ™๊ฒŒ ํ•œ๋‹ค"_ ๋Š” ํŒ€์›์˜ ๋ง์ด ์ž˜ ์ดํ•ด๊ฐ€ ๊ฐ€์ง€ ์•Š์•˜๊ณ , ๋•๋ถ„์— Git์˜ ๊ตฌ์กฐ๋ฅผ ๋‹ค์‹œ ํ•œ๋ฒˆ ๊ณต๋ถ€ํ•˜๊ฒŒ ๋˜๋Š” ์ข‹์€ ๊ณ„๊ธฐ๊ฐ€ ๋˜์—ˆ๋‹ค. + +Git์€ ๊ฐ ์ƒํƒœ๋“ค์„ ์Šค๋ƒ…์ƒท์„ ํ•ด์‹œ๊ฐ’์œผ๋กœ ๊ตฌ๋ถ„ํ•˜๊ณ (`commit`), ์ด๋“ค์„ ์—ฐ๊ฒฐํ•˜์—ฌ ํ•˜๋‚˜์˜ ๊ฑฐ๋Œ€ํ•œ tree๋ฅผ ๊ตฌ์„ฑํ•˜๋Š”๋ฐ ์ด๊ฒŒ history, ์ฆ‰ `Git tree`๊ฐ€ ๋˜๋Š” ๊ฒƒ์ด๋‹ค. Git์˜ ๊ฐ ์ปค๋ฐ‹๋“ค์€ ์ด ํŠธ๋ฆฌ๋ฅผ ๊ตฌ์„ฑํ•˜๊ธฐ ์œ„ํ•ด ๋ชจ๋“  ์ปค๋ฐ‹์€ ๋ถ€๋ชจ ์ปค๋ฐ‹์˜ ํฌ์ธํ„ฐ๋ฅผ ํ•จ๊ป˜ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. ์œ„ ๋งํฌ์—์„œ๋Š” ์„œ๋กœ ๋‹ค๋ฅธ ๋ถ€๋ชจ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋˜ ์ปค๋ฐ‹์„ ๊ฐ•์ œ๋กœ ์—ฐ๊ฒฐํ•˜๋Š” ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— Orgin repo์™€ forked repo๋Š” ์„œ๋กœ ๋‹ค๋ฅธ ์ปค๋ฐ‹ ํ•ด์‹œ๋ฅผ ๊ฐ–๊ฒŒ ๋œ๋‹ค. ํ•˜์ง€๋งŒ ์ด ๋ฐฉ๋ฒ•์˜ ๊ฒฝ์šฐ ๊ฐœ์ธ ๋ ˆํฌ๋ฅผ remote url์— ๋“ฑ๋กํ•˜์—ฌ ์ปค๋ฐ‹ ๋‚ด์—ญ์„ ๊ฐ€์ ธ์™€ Origin repo์˜ ์ตœ๊ทผ ๋ณ€๊ฒฝ์‚ฌํ•ญ์˜ ์ปค๋ฐ‹์œผ๋กœ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ์—ฐ๊ฒฐํ•˜๋ฏ€๋กœ ๋™์ผํ•œ `Git tree`๋ฅผ ๊ฐ–๊ฒŒ ๋œ๋‹ค. + +๊ณผ์ •์ด ์ž˜ ์ดํ•ด๊ฐ€ ์•ˆ๊ฐ”๋˜ ์ฒซ ์‹œ๋„๋กœ๋Š” ๋ฌด์ž‘์ • ๋‘ ๋ ˆํฌ์˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ merge ํ•ด์„œ, ์–‘ ๋ ˆํฌ์— ๋‹ค์‹œ pushํ•˜๋ฉด ๋˜๋‚˜? ์‹ถ์—ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ฒดํฌ์•„์›ƒ์‹œ์— ํ† ํฐ์„ ๋„ฃ์–ด์ฃผ์ง€ ์•Š์œผ๋‹ˆ merge ํ•  ์ˆ˜ ์—†๋‹ค๋Š” ์—๋Ÿฌ๊ฐ€ ๋–ด๋‹ค...\ +๋•๋ถ„์— ์„œ๋กœ ๋‹ค๋ฅธ ๋ ˆํฌ๋ผ๋ฆฌ ๋ณ‘ํ•ฉ์‹œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” `--allow-unrelated-histories` ๋ผ๋Š” `git merge` ์˜ต์…˜๋„ ์•Œ๊ฒŒ ๋˜์—ˆ์ง€๋งŒ ์ดํ›„์—” Merge conflict๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค๋Š” ์—๋Ÿฌ๋กœ ์ด์–ด์กŒ๋‹ค. ํŒ€ ๋ ˆํฌ ๊ธฐ์ค€์œผ๋กœ ํ•ด์•ผํ•˜๋‹ˆ๊นŒ ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•œ๋‹ค๋ฉด ์šฐ๋ฆฌ ๋ ˆํฌ๋กœ ์ง€์ •ํ•ด์ฃผ๋Š” `-Xours`๋ผ๋Š” ์˜ต์…˜๊นŒ์ง€ ํ•˜๋‚˜ ๋” ๋ฐฐ์›Œ๊ฐˆ ์ˆ˜ ์žˆ์—ˆ๋‹ค.. + + + +### ์ •๋ฆฌํ•˜์ž๋ฉด, + +1. **Git์˜ ๊ตฌ์กฐ ์ดํ•ด**: + * Git์€ ์ƒํƒœ๋ฅผ ์Šค๋ƒ…์ƒท์œผ๋กœ ์ €์žฅํ•˜๊ณ , ์ด ์Šค๋ƒ…์ƒท๋“ค์€ ๊ณ ์œ ์˜ ํ•ด์‹œ ๊ฐ’์œผ๋กœ ๊ตฌ๋ถ„๋ฉ๋‹ˆ๋‹ค. + * ๊ฐ ์ปค๋ฐ‹์€ ๋ถ€๋ชจ ์ปค๋ฐ‹์„ ๊ฐ€๋ฆฌํ‚ค๋Š” ํฌ์ธํ„ฐ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์œผ๋ฉฐ, ์ด ํฌ์ธํ„ฐ๋“ค์ด ์—ฐ๊ฒฐ๋˜์–ด Git ํŠธ๋ฆฌ๋ฅผ ํ˜•์„ฑํ•ฉ๋‹ˆ๋‹ค. + * Git ํŠธ๋ฆฌ๋Š” ์ด ์ปค๋ฐ‹๋“ค์˜ ์—ฐ๊ฒฐ๋œ ํžˆ์Šคํ† ๋ฆฌ๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค. +2. **Git ํŠธ๋ฆฌ์™€ ์ปค๋ฐ‹ ํ•ด์‹œ**: + * Git์—์„œ ๊ฐ ์ปค๋ฐ‹์€ ๊ณ ์œ ํ•œ ํ•ด์‹œ ๊ฐ’์„ ๊ฐ€์ง€๋ฉฐ, ์ด ํ•ด์‹œ๋Š” ์ปค๋ฐ‹์˜ ๋‚ด์šฉ๊ณผ ๋ถ€๋ชจ ์ปค๋ฐ‹์— ์˜ํ•ด ๊ฒฐ์ •๋ฉ๋‹ˆ๋‹ค. ๋™์ผํ•œ ๋‚ด์šฉ์˜ ์ปค๋ฐ‹์ด๋ผ๋„ ๋ถ€๋ชจ ์ปค๋ฐ‹์ด ๋‹ค๋ฅด๋ฉด ํ•ด์‹œ ๊ฐ’์ด ๋‹ฌ๋ผ์ง‘๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์„œ๋กœ ๋‹ค๋ฅธ ์ €์žฅ์†Œ์—์„œ ๋™์ผํ•œ ๋‚ด์šฉ์„ ์ปค๋ฐ‹ํ•˜๋”๋ผ๋„ ๋ถ€๋ชจ ์ปค๋ฐ‹์ด ๋‹ค๋ฅด๋ฉด ์„œ๋กœ ๋‹ค๋ฅธ ํ•ด์‹œ ๊ฐ’์„ ๊ฐ€์ง€๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. + * ๋‘ ์ €์žฅ์†Œ๊ฐ€ ๋™์ผํ•œ Git ํŠธ๋ฆฌ๋ฅผ ๊ฐ€์ง€๋ ค๋ฉด, ์ปค๋ฐ‹ ๋‚ด์—ญ์„ ๋™๊ธฐํ™”ํ•˜์—ฌ ๋™์ผํ•œ ์ปค๋ฐ‹ ํ•ด์‹œ๋ฅผ ์œ ์ง€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. +3. **`--allow-unrelated-histories` ์˜ต์…˜**: + * ์ด ์˜ต์…˜์€ ์„œ๋กœ ๋‹ค๋ฅธ Git ํžˆ์Šคํ† ๋ฆฌ๋ฅผ ๊ฐ€์ง„ ๋‘ ์ €์žฅ์†Œ๋ฅผ ๋ณ‘ํ•ฉํ•  ๋•Œ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ Git์€ ์„œ๋กœ ๊ด€๋ จ ์—†๋Š” ํžˆ์Šคํ† ๋ฆฌ๋ฅผ ๋ณ‘ํ•ฉํ•  ๋•Œ ๊ฒฝ๊ณ ๋ฅผ ํ‘œ์‹œํ•˜๊ณ  ๋ณ‘ํ•ฉ์„ ๋ง‰์Šต๋‹ˆ๋‹ค. ์ด ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜๋ฉด ์ด ์ œํ•œ์„ ๋ฌด์‹œํ•˜๊ณ  ๋ณ‘ํ•ฉ์„ ๊ฐ•์ œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. +4. **Merge ์ถฉ๋Œ ํ•ด๊ฒฐ**: + * ๋ณ‘ํ•ฉ ์‹œ ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•˜๋Š” ๊ฒƒ์€ ๋‘ ์ €์žฅ์†Œ๊ฐ€ ๋™์ผํ•œ ํŒŒ์ผ์„ ๋‹ค๋ฅด๊ฒŒ ์ˆ˜์ •ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ์ด๋•Œ `-Xours` ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜๋ฉด ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•œ ํŒŒ์ผ์— ๋Œ€ํ•ด ํ˜„์žฌ ์ฒดํฌ์•„์›ƒ๋œ ๋ธŒ๋žœ์น˜์˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์šฐ์„ ์‹œํ•˜์—ฌ ์ถฉ๋Œ์„ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. + * ์ด ์˜ต์…˜์€ ์ถฉ๋Œ ํ•ด๊ฒฐ์˜ ํ•œ ๋ฐฉ๋ฒ•์ด์ง€๋งŒ, ํ•ญ์ƒ ๋ชจ๋“  ์ƒํ™ฉ์— ์ ํ•ฉํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์‹ ์ค‘ํ•˜๊ฒŒ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. diff --git "a/developLog/ci-cd/github/_ github \354\236\220\354\243\274 \354\223\260\353\212\224 \353\252\205\353\240\271\354\226\264_.md" "b/developLog/ci-cd/github/_ github \354\236\220\354\243\274 \354\223\260\353\212\224 \353\252\205\353\240\271\354\226\264_.md" new file mode 100644 index 0000000..8ee5bb9 --- /dev/null +++ "b/developLog/ci-cd/github/_ github \354\236\220\354\243\274 \354\223\260\353\212\224 \353\252\205\353\240\271\354\226\264_.md" @@ -0,0 +1,98 @@ +--- +description: github ์ž์ฃผ ์“ฐ๋Š” ๋ช…๋ น์–ด ๋ชจ์•„๋ณด๊ธฐ +icon: git +layout: + title: + visible: true + description: + visible: true + tableOfContents: + visible: true + outline: + visible: true + pagination: + visible: false +--- + +# github ์ž์ฃผ ์“ฐ๋Š” ๋ช…๋ น์–ด + +## 1. ๋กœ์ปฌ ์ €์žฅ์†Œ์™€ ์›๊ฒฉ ์ €์žฅ์†Œ ๋งž์ถ”๊ธฐ + +> `git reset --hard` ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํŠน์ • ์ปค๋ฐ‹์œผ๋กœ ๋˜๋Œ๋ ธ์„ ๋•Œ, ๋กœ์ปฌ ์ €์žฅ์†Œ๋Š” ๊ทธ ์ปค๋ฐ‹ ์ดํ›„์˜ ๋ชจ๋“  ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์žƒ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์ด๋•Œ ๋กœ์ปฌ ์ €์žฅ์†Œ์™€ ์›๊ฒฉ ์ €์žฅ์†Œ์˜ ์ƒํƒœ๊ฐ€ ๋ถˆ์ผ์น˜ํ•˜๊ฒŒ ๋˜๋ฉฐ, ์ด๋ฅผ ๋งž์ถ”๊ธฐ ์œ„ํ•ด ๊ฐ•์ œ๋กœ ํ‘ธ์‹œํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. + +1. **`git reset --hard` ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํŠน์ • ์ปค๋ฐ‹์œผ๋กœ ๋˜๋Œ๋ฆผ** + + ์ด๋ฏธ ์‹คํ–‰ํ•œ ๋ช…๋ น์–ด์ž…๋‹ˆ๋‹ค: + + ```bash + git reset --hard 6bec4114ed3cfd83858aa59311ca0ac9813d6c18 + ``` + + ์ด ๋ช…๋ น์–ด๋Š” ๋กœ์ปฌ ์ €์žฅ์†Œ๋ฅผ `6bec4114ed3cfd83858aa59311ca0ac9813d6c18` ์ปค๋ฐ‹์œผ๋กœ ๋˜๋Œ๋ฆฝ๋‹ˆ๋‹ค. +2. **์›๊ฒฉ ์ €์žฅ์†Œ์— ๊ฐ•์ œ๋กœ ํ‘ธ์‹œ** + + ๋กœ์ปฌ ์ €์žฅ์†Œ๋ฅผ ์›๊ฒฉ ์ €์žฅ์†Œ์™€ ๋งž์ถ”๊ธฐ ์œ„ํ•ด ๊ฐ•์ œ๋กœ ํ‘ธ์‹œํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ์›๊ฒฉ ์ €์žฅ์†Œ์˜ ํžˆ์Šคํ† ๋ฆฌ๋ฅผ ๋ฎ์–ด์“ฐ๋Š” ๊ฒƒ์ด๋ฏ€๋กœ ์ฃผ์˜๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. + + ```bash + git push origin main --force + ``` + + ์—ฌ๊ธฐ์„œ `main`์€ ํ˜„์žฌ ์‚ฌ์šฉ ์ค‘์ธ ๋ธŒ๋žœ์น˜ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค. ๋งŒ์•ฝ ๋‹ค๋ฅธ ๋ธŒ๋žœ์น˜๋ฅผ ์‚ฌ์šฉ ์ค‘์ด๋ผ๋ฉด ํ•ด๋‹น ๋ธŒ๋žœ์น˜ ์ด๋ฆ„์„ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. + +### ์ฃผ์˜์‚ฌํ•ญ + +* **๊ฐ•์ œ ํ‘ธ์‹œ (`--force`)**: ์›๊ฒฉ ์ €์žฅ์†Œ์˜ ํžˆ์Šคํ† ๋ฆฌ๊ฐ€ ๋ฎ์–ด์จ์ง€๊ธฐ ๋•Œ๋ฌธ์—, ์ด ์ž‘์—…์€ ์‹ ์ค‘ํ•˜๊ฒŒ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํŠนํžˆ ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์ด ์ด ์ €์žฅ์†Œ๋ฅผ ์‚ฌ์šฉ ์ค‘์ด๋ผ๋ฉด, ๊ทธ๋“ค์—๊ฒŒ ์˜ํ–ฅ์„ ๋ฏธ์น  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. +* **ํžˆ์Šคํ† ๋ฆฌ ์†์‹ค**: ์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋ฉด ๋˜๋Œ๋ฆฐ ์ดํ›„์˜ ๋ชจ๋“  ์ปค๋ฐ‹์ด ํžˆ์Šคํ† ๋ฆฌ์—์„œ ์‚ฌ๋ผ์ง€๋ฏ€๋กœ, ํ•„์š”ํ•  ๊ฒฝ์šฐ ๋ฐฑ์—…์„ ๊ณ ๋ คํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. + +### ์ „์ฒด์ ์ธ ์ ˆ์ฐจ ์š”์•ฝ + +1. **๋กœ์ปฌ ์ปค๋ฐ‹ ๋˜๋Œ๋ฆฌ๊ธฐ**: `git reset --hard ` +2. **์›๊ฒฉ ์ €์žฅ์†Œ์— ๊ฐ•์ œ ํ‘ธ์‹œ**: `git push origin --force` + +์ด ์ž‘์—…์„ ํ†ตํ•ด ๋กœ์ปฌ๊ณผ ์›๊ฒฉ ์ €์žฅ์†Œ์˜ ์ƒํƒœ๋ฅผ ์ผ์น˜์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. + + + +## 2. Forkํ•œ ๋ ˆํฌ์ง€ํ† ๋ฆฌ commit ๊ธฐ๋ก ๋‚จ๊ธฐ๊ธฐ ์œ„ํ•œ ์ž‘์—… + +> ์ฐธ๊ณ  : [https://soranhan.tistory.com/11](https://soranhan.tistory.com/11) + +1. **์ผ๋‹จ ๋‚ด github์— ์ƒˆ๋กœ์šด ๋ ˆํŒŒ์ง€ํ† ๋ฆฌ๋ฅผ ๋งŒ๋“ ๋‹ค.** +2. **terminal์„ ์—ฐ๋‹ค.** +3. **๋ณต์‚ฌํ•˜๊ณ ์ž ํ•˜๋Š” repository๋ฅผ bare cloneํ•œ๋‹ค.** + +``` +$ git clone --bare https://github.com/exampleuser/old-repository.git +``` + +4. **์ƒˆ๋กœ์šด ๋ ˆํŒŒ์ง€ํ† ๋ฆฌ๋กœ Mirror-push** + +``` +$ cd old-repository.git +$ git push --mirror https://github.com/exampleuser/new-repository.git +``` + +5. **์ฒ˜์Œ์— ์ž„์‹œ๋กœ ์ƒ์„ฑํ–ˆ๋˜ local repository๋ฅผ ์‚ญ์ œ** + +``` +$ cd .. +$ rm -rf old-repository.git +``` + +6. ๋‹ค๋งŒ ์ด๊ฒŒ ๊ฐ€๋” ์•ˆ๋˜๋Š” ๊ฒŒ ์žˆ๋Š”๋ฐ ๊ทธ ์ด์œ ๋Š” `๊ถŒํ•œ` ๋•Œ๋ฌธ์ด๊ธฐ์— ํ† ํฐ์„ ๋งŒ๋“ค์–ด์ฃผ๊ณ  ๊ทธ๊ฑธ๋กœ ์‚ฌ์šฉํ•ด์•ผ ํ•จ + +> GitHub Personal Access Token ์ƒ์„ฑ +> +> 1. GitHub ๊ณ„์ •์œผ๋กœ ๋กœ๊ทธ์ธํ•ฉ๋‹ˆ๋‹ค. +> 2. [GitHub์˜ Personal Access Token ์ƒ์„ฑ ํŽ˜์ด์ง€](https://github.com/settings/tokens)๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค. +> 3. "Generate new token" ๋ฒ„ํŠผ์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค. +> 4. **๊ถŒํ•œ(Scopes)**์—์„œ `repo`, `workflow`, `admin:repo_hook` ๊ถŒํ•œ์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค. ์ด ํ† ํฐ์€ ์ €์žฅ์†Œ์— ๋Œ€ํ•œ ์ฝ๊ธฐ/์“ฐ๊ธฐ ๊ถŒํ•œ์„ ๊ฐ€์ง‘๋‹ˆ๋‹ค. +> 5. ์ƒ์„ฑ๋œ ํ† ํฐ์„ ๋ณต์‚ฌํ•ด๋‘ก๋‹ˆ๋‹ค. ์ด ํ† ํฐ์€ ๋‚˜์ค‘์— ์‚ฌ์šฉํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. +> 6. ๊ฐœ์ธ์ž˜ํŽ˜์ด์ง€์— ํ† ํฐ๊ธฐ๋กํ•ด๋‘๊ธฐ!!! + +* Personal Access Token (PAT) ์‚ฌ์šฉ : `git push --mirror` ๋ช…๋ น์–ด์— Personal Access Token์„ ํฌํ•จํ•˜์—ฌ ์ธ์ฆ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. + +``` +git push --mirror https://@github.com/exampleuser/new-repository.git +``` + diff --git "a/developLog/ci-cd/github/_ \355\214\200\355\224\204\353\241\234\354\240\235\355\212\270\353\225\214 \354\225\214\354\225\204\353\202\270 github \354\247\200\354\213\235_.md" "b/developLog/ci-cd/github/_ \355\214\200\355\224\204\353\241\234\354\240\235\355\212\270\353\225\214 \354\225\214\354\225\204\353\202\270 github \354\247\200\354\213\235_.md" new file mode 100644 index 0000000..58875ce --- /dev/null +++ "b/developLog/ci-cd/github/_ \355\214\200\355\224\204\353\241\234\354\240\235\355\212\270\353\225\214 \354\225\214\354\225\204\353\202\270 github \354\247\200\354\213\235_.md" @@ -0,0 +1,196 @@ +--- +icon: person-chalkboard +--- + +# ํŒ€ํ”„๋กœ์ ํŠธ๋•Œ ์•Œ์•„๋‚ธ github ์ง€์‹ + +![](https://velog.velcdn.com/images/prettylee620/post/310494d3-2d3b-4810-bec1-853d7a06ef40/image.png) + +## TMI + +> ํ”„๋กœ์ ํŠธ๋ฅผ ํ•˜๋ฉด์„œ ํŒ€ ๊ณตํ†ต ํ…œํ”Œ๋ฆฟ์„ ๋งŒ๋“ค๋ฉด์„œ ์•Œ๊ฒŒ ๋œ github ์‚ฌ์šฉ๋ฒ• ๋“ฑ์„ ์ •๋ฆฌํ•ด๋ดค๋‹ค ๊ทธ ์ดํ›„ ๊ณ„์† ์ถ”๊ฐ€์˜ˆ์ •์ด๊ณ  ํŒ€ ํ”„๋กœ์ ํŠธ ๋๋‚˜๋ฉด 1๋ถ€ํ„ฐ 10๊นŒ์ง€ ์ •๋ฆฌํ•ด์•ผ๊ฒ ๋‹ค + +## 1. ๋ฆฌ์•กํŠธ๋ฅผ github์— ์˜ฌ๋ฆด ๋•Œ + +1. ๋ฆฌ์•กํŠธ์™€ ์Šคํ”„๋ง๋ถ€ํŠธ๋ฅผ ๊ฐ™์ด ์—ฐ๊ฒฐํ•œ ๊ฒƒ์„ ์˜ฌ๋ฆฌ๋Š”๋ฐ **๋ฆฌ์•กํŠธ ํŒŒ์ผ๋งŒ ์ œ์™ธ**๊ฐ€ ๋๋‹ค. + +* ๊ทธ๋ž˜์„œ ์ผ๋ถ€ ํŒŒ์ผ๋งŒ ์˜ฌ๋ฆฌ๋Š” ๊ฒƒ์„ ํ•˜๋ ค๋‹ค๊ฐ€โ€ฆ ๋ฌด์ˆ˜ํ•œ ๊ฐœํ–‰ ๋ฌธ์ž ์—๋Ÿฌ๋ฅผ ๋งŒ๋‚˜๊ฒŒ ๋จ + +2. `node/module`์€ ์˜ฌ๋ฆฌ๋ฉด ์—๋Ÿฌ๊ฐ€ ๋‚œ๋‹ค. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ์ œ์™ธ ์‹œ์ผœ์ค˜์•ผ ํ•จ + +* ์ œ 1์•ˆ : ๊ด€๋ จ ํ”„๋กœ์ ํŠธ ํŒŒ์ผ ๋‚ด `.gitgnore`์— ๋“ค์–ด๊ฐ€์„œ ์ˆ˜์ • + +> ์•„๋ฌด ์œ„์น˜์—๋‚˜ ์‚ฌ์ง„๊ณผ ๊ฐ™์ด ์ถ”๊ฐ€ ํ›„ ์ €์žฅ + +![](https://velog.velcdn.com/images/prettylee620/post/fd2ae5cf-aa90-4268-93f3-7b2f9d9c8b83/image.png) + +* ์ œ 2์•ˆ : ๋ช…๋ น์–ด๋กœ ์ œ๊ฑฐ + +![](https://velog.velcdn.com/images/prettylee620/post/5ee75d73-64a8-4bb9-ab8f-26f3cbb011a5/image.png) + +3. ๊ทธ ํ›„ ์ผ๋ถ€ ํŒŒ์ผ๋งŒ ์˜ฌ๋ฆฌ๊ธฐ ์œ„ํ•ด add + +![](https://velog.velcdn.com/images/prettylee620/post/83b294c0-4114-418f-ae3c-a307e21c59c3/image.png) + +4. warning์ด์ง€๋งŒ ํฐ ๋ฌธ์ œ ์—†๋‹ค ํ•จ + +![](https://velog.velcdn.com/images/prettylee620/post/5bc2494c-0bd7-4655-b71b-5a16fa9ea0ee/image.png) + +5. ๊ทธ๋ƒฅ ๋ฌด์‹œํ•˜๊ฑฐ๋‚˜ ์ด ๋ช…๋ น์–ด ์“ฐ๋ฉด ๋จ + +![](https://velog.velcdn.com/images/prettylee620/post/2e091bec-a2dc-414a-a5b3-2f61effb0808/image.png) + +6. ๊ทธ ํ›„ commit ํ•˜๊ณ  push + +![](https://velog.velcdn.com/images/prettylee620/post/a32e8dbc-8876-4869-ba12-16e668f3fbc5/image.png) + +![](https://velog.velcdn.com/images/prettylee620/post/c1e454c4-def1-4890-8aaf-85f81c58fb25/image.png) + +7. ๋ฌธ์ œ ์—†์ด ์ถ”๊ฐ€๋จ + +![](https://velog.velcdn.com/images/prettylee620/post/d2b001dd-840c-4b13-a2c6-52ca505dee0d/image.png) + +8. node-moudules์˜ ๊ฒฝ์šฐ **`npm install` ํŒจํ‚ค์ง€ ์„ค์น˜** + +* `node_modules/`๋Š” Node.js ํ”„๋กœ์ ํŠธ์—์„œ ์˜์กด์„ฑ ํŒจํ‚ค์ง€๋“ค์ด ์„ค์น˜๋˜๋Š” ๋””๋ ‰ํ† ๋ฆฌ +* ์ด ๋””๋ ‰ํ† ๋ฆฌ๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ Git์— ํฌํ•จ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์™œ๋ƒํ•˜๋ฉด ์˜์กด์„ฑ ํŒจํ‚ค์ง€๋“ค์€ **`package.json`** ํŒŒ์ผ์—์„œ ๊ด€๋ฆฌ๋˜๊ธฐ ๋•Œ๋ฌธ์—, ๋‹ค๋ฅธ ๊ฐœ๋ฐœ์ž๋‚˜ ์„œ๋ฒ„์—์„œ ํ”„๋กœ์ ํŠธ๋ฅผ ํด๋ก ํ•œ ํ›„ **`npm install`** ๋˜๋Š” **`yarn install`** ๋ช…๋ น์„ ํ†ตํ•ด ์˜์กด์„ฑ ํŒจํ‚ค์ง€๋“ค์„ ์„ค์น˜ ๊ฐ€๋Šฅ + +## 2. Git add์‹œ ๊ฒฝ๊ณ  ๋ฉ”์„ธ์ง€ + +**`git add`** ๋ช…๋ น์„ ์‹คํ–‰ํ•  ๋•Œ ๋‚˜์˜ค๋Š” ๊ฒฝ๊ณ  ๋ฉ”์‹œ์ง€๋Š” ์—ฌ๋Ÿฌ ์›์ธ์— ๋”ฐ๋ผ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋Œ€ํ‘œ์ ์œผ๋กœ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฒฝ์šฐ๋“ค์ด ์žˆ์Šต๋‹ˆ๋‹ค: + +1. **๋Œ€์šฉ๋Ÿ‰ ํŒŒ์ผ**: Git์€ ๋Œ€์šฉ๋Ÿ‰ ํŒŒ์ผ(์ผ๋ฐ˜์ ์œผ๋กœ 100MB ์ด์ƒ)์— ๋Œ€ํ•ด์„œ ๊ฒฝ๊ณ  ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด๋ƒ…๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋Œ€์šฉ๋Ÿ‰ ํŒŒ์ผ์„ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” Git LFS๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. +2. **๊ฐœํ–‰ ๋ฌธ์ž**: Windows์™€ Unix ๊ณ„์—ด ์‹œ์Šคํ…œ(๋ฆฌ๋ˆ…์Šค, ๋งฅ)์€ ํŒŒ์ผ์˜ ๋์— ์‚ฌ์šฉํ•˜๋Š” ๊ฐœํ–‰ ๋ฌธ์ž๊ฐ€ ๋‹ค๋ฆ…๋‹ˆ๋‹ค. ์ด๋กœ ์ธํ•ด ๋ฐœ์ƒํ•˜๋Š” ๋ฌธ์ œ๋ฅผ ๊ฒฝ๊ณ ํ•˜๋Š” ๋ฉ”์‹œ์ง€๊ฐ€ ๋‚˜์˜ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. +3. **.gitignore**: **`.gitignore`** ํŒŒ์ผ์— ๋ช…์‹œ๋˜์–ด ์žˆ์ง€ ์•Š๊ณ  ์ถ”์ ๋˜์ง€ ์•Š์€ ํŒŒ์ผ๋“ค์— ๋Œ€ํ•œ ๊ฒฝ๊ณ ๊ฐ€ ๋‚˜์˜ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. + +### ๐Ÿ’ซ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ• + +1. **๊ฒฝ๊ณ  ๋ฉ”์‹œ์ง€๋ฅผ ์ˆจ๊น€**: ๊ฒฝ๊ณ  ๋ฉ”์‹œ์ง€๊ฐ€ ๋„ˆ๋ฌด ๋งŽ๊ณ , ์‹ค์ œ ๋ฌธ์ œ๊ฐ€ ๋˜์ง€ ์•Š์„ ๊ฒฝ์šฐ์—๋Š” ๊ฒฝ๊ณ  ๋ฉ”์‹œ์ง€๋ฅผ ์ˆจ๊ธฐ๊ณ  ์‹ถ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ ์•„๋ž˜์™€ ๊ฐ™์ด **`-no-warn`** ์˜ต์…˜์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. (ํ•˜์ง€๋งŒ, ์ด๋Š” ๋ชจ๋“  ๊ฒฝ๊ณ  ๋ฉ”์‹œ์ง€๋ฅผ ์ˆจ๊ธฐ๊ธฐ ๋•Œ๋ฌธ์— ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์—ฌ์ง€๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.) + + ```css + cssCopy code + git add --no-warn src/main/reactfront/ + + ``` +2. **์›์ธ ํŒŒ์•… ๋ฐ ํ•ด๊ฒฐ**: ๊ฒฝ๊ณ  ๋ฉ”์‹œ์ง€๋ฅผ ์ง์ ‘ ์ฝ๊ณ  ์›์ธ์„ ํŒŒ์•…ํ•œ ๋’ค์— ๊ทธ ์›์ธ์„ ํ•ด๊ฒฐํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€์žฅ ์ข‹์€ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ๋Œ€์šฉ๋Ÿ‰ ํŒŒ์ผ์— ๋Œ€ํ•œ ๊ฒฝ๊ณ ๊ฐ€ ๋‚˜์˜ค๋ฉด ํ•ด๋‹น ํŒŒ์ผ์„ \*\*`.gitignore`\*\*์— ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜, Git LFS๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. +3. **๊ฐœํ–‰ ๋ฌธ์ž ์ฒ˜๋ฆฌ**: ๊ฐœํ–‰ ๋ฌธ์ž ๊ด€๋ จ ๊ฒฝ๊ณ ์˜ ๊ฒฝ์šฐ, Git ์„ค์ •์„ ํ†ตํ•ด ์ž๋™์œผ๋กœ ๋ณ€ํ™˜๋˜๊ฒŒ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค: + + ```arduino + arduinoCopy code + git config --global core.autocrlf true + + ``` + +## 3. ๊นƒํ—ˆ๋ธŒ์— ํ”„๋กœ์ ํŠธ๋ฅผ ์˜ฌ๋ ธ์„ ๋•Œ ํŠน์ • ํŒŒ์ผ์ด๋‚˜ ํด๋”๋งŒ ์ œ์™ธ ์›์ธ + +### **`.gitignore` ํŒŒ์ผ** + +* **`.gitignore`** ํŒŒ์ผ์€ Git์—์„œ ์ถ”์ ํ•˜์ง€ ์•Š์•„์•ผ ํ•  ํŒŒ์ผ ๋ฐ ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ์ง€์ • +* ๋ฆฌ์•กํŠธ ํ”„๋กœ์ ํŠธ์˜ ๊ฒฝ์šฐ, ๊ธฐ๋ณธ์ ์œผ๋กœ ์ƒ์„ฑ๋˜๋Š” **`.gitignore`** ํŒŒ์ผ์—๋Š” **`node_modules/`** ๋“ฑ์˜ ๋””๋ ‰ํ† ๋ฆฌ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์–ด ์ด ๋””๋ ‰ํ† ๋ฆฌ์˜ ํŒŒ์ผ๋“ค์€ Git์— ํฌํ•จ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํ”„๋กœ์ ํŠธ ๋ฃจํŠธ ๋˜๋Š” ๋ฆฌ์•กํŠธ ํด๋” ๋‚ด์— **`.gitignore`** ํŒŒ์ผ์ด ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๊ณ  ํ•ด๋‹น ํŒŒ์ผ ๋‚ด์šฉ์„ ์ ๊ฒ€ํ•  ๊ฒƒ + +### **Git ์ดˆ๊ธฐํ™” ์œ„์น˜** + +* Git ์ €์žฅ์†Œ๋Š” `git init`์„ ์‹คํ–‰ํ•œ ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ํ•˜์œ„ ๋””๋ ‰ํ† ๋ฆฌ ๋ฐ ํŒŒ์ผ๋“ค์„ ์ถ”์ ํ•œ๋‹ค. +* ๋ฆฌ์•กํŠธ ํ”„๋กœ์ ํŠธ ๋‚ด์—์„œ ๋ณ„๋„๋กœ `git init`์„ ์‹คํ–‰ํ–ˆ์„ ๊ฒฝ์šฐ, ๋ฆฌ์•กํŠธ ํ”„๋กœ์ ํŠธ๋งŒ ๋ณ„๋„์˜ Git ์ €์žฅ์†Œ๋กœ ์ธ์‹๋˜์–ด ์ƒ์œ„ ํด๋”์˜ Git์—์„œ๋Š” ๋ฌด์‹œ๋  ์ˆ˜ ์žˆ๋‹ค. +* ์ด ๊ฒฝ์šฐ, ๋ฆฌ์•กํŠธ ํ”„๋กœ์ ํŠธ ๋””๋ ‰ํ† ๋ฆฌ ๋‚ด์— **`.git`** ๋””๋ ‰ํ† ๋ฆฌ๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๊ณ , ํ•„์š”์— ๋”ฐ๋ผ ์‚ญ์ œํ•œ ํ›„ ์ƒ์œ„ ๋””๋ ‰ํ† ๋ฆฌ์—์„œ ๋‹ค์‹œ Git ๋ช…๋ น์„ ์‹คํ–‰ํ•  ๊ฒƒ + +### **์ปค๋ฐ‹ ๋ˆ„๋ฝ** + +* ๋ฆฌ์•กํŠธ ํŒŒ์ผ์„ ๋ณ€๊ฒฝํ•œ ํ›„ `git add`์™€ **`git commit`** ๋ช…๋ น์„ ์‹คํ–‰ํ•˜์ง€ ์•Š์•˜๋‹ค๋ฉด, ํ•ด๋‹น ๋ณ€๊ฒฝ์‚ฌํ•ญ์€ ์ปค๋ฐ‹๋˜์ง€ ์•Š์Œ +* ๋ณ€๊ฒฝ์‚ฌํ•ญ์ด ์ œ๋Œ€๋กœ ์ปค๋ฐ‹๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•˜๋ ค๋ฉด **`git status`** ๋ช…๋ น์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ณ€๊ฒฝ๋œ ํŒŒ์ผ ๋ชฉ๋ก์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. + +### ๐Ÿ’ซ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ• + +1. ํ”„๋กœ์ ํŠธ ๋ฃจํŠธ ๋””๋ ‰ํ† ๋ฆฌ์—์„œ **`git status`** ๋ช…๋ น์„ ์‹คํ–‰ํ•˜์—ฌ ํ˜„์žฌ Git์˜ ์ƒํƒœ๋ฅผ ํ™•์ธ +2. ๋ฆฌ์•กํŠธ ํ”„๋กœ์ ํŠธ ํด๋” ๋‚ด์— **`.git`** ๋””๋ ‰ํ† ๋ฆฌ๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๊ณ , ์žˆ๋‹ค๋ฉด ์‚ญ์ œ +3. ํ”„๋กœ์ ํŠธ ๋ฃจํŠธ์—์„œ **`git add .`** ๋ช…๋ น์„ ์‹คํ–‰ํ•˜์—ฌ ๋ชจ๋“  ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ์Šคํ…Œ์ด์ง• ์˜์—ญ์— ์ถ”๊ฐ€ +4. **`git commit -m "Add React files"`** ๋ช…๋ น์œผ๋กœ ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ์ปค๋ฐ‹ +5. **`git push`** ๋ช…๋ น์œผ๋กœ ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ๊นƒํ—ˆ๋ธŒ์— ํ‘ธ์‹œ + +## 4. ์ž”๋””(commit) ๋‚ด์šฉ์„ ์ง€ํ‚ค๋ฉด์„œ ๋‘ ๊ฐœ์˜ repository ํ•ฉ์น˜๊ธฐ + +### ๋กœ์ปฌ์— ์—†๋Š” ๊ฒฝ์šฐ.. ๋กœ์ปฌ์— clone ํ•ด์ค˜์•ผ ํ•จ + +1. ์ผ๋‹จ ๋‚ด๊ฐ€ ์™„์„ฑ๋ณธ์„ ๋„ฃ์„ ๋ ˆํฌ์ง€ํ† ๋ฆฌ(๋ ˆํฌ1) ์ •ํ•˜๊ธฐ +2. ๋‚˜๋Š” `teamproject_read_blog` ๋ ˆํฌ์ง€ํ† ๋ฆฌ๋ฅผ ์™„์„ฑ๋ณธ์œผ๋กœ ํ•˜๋ ค๊ณ  ํ•œ๋‹ค. +3. git remote๋กœ `teamproject_read_blog` ์„ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ + +* ๋‚˜๋Š” ์ด๋ฆ„ ์ง€์ •์„ ์žŠ์–ด์„œ ๊ทธ๋ƒฅ ๋ ˆํฌ์ง€ํ† ๋ฆฌ ์ด๋ฆ„ ๋Œ€๋กœ ์ €์žฅ์ด ๋จ + +```java +git remote add repo1 https://github.com/YourUsername/Repo1.git +``` + +![](https://velog.velcdn.com/images/prettylee620/post/5a14f0fb-61d2-45c9-828a-f68ce2c96a7e/image.png) + +4. ๊ทธ ํด๋”๋กœ ์ด๋™ ํ•œ๋‹ค + +```java +cd teamproject_read_blog +``` + +5. `git fetch`๋ฅผ ํ•ด์ค€๋‹ค. + +```java +git fetch teamproject_read_blog +``` + +![](https://velog.velcdn.com/images/prettylee620/post/224abfd0-e3f0-42ee-a6f4-ff7c214e25bc/image.png) + +6. ๋กœ์ปฌ์— ์—†๊ธฐ ๋•Œ๋ฌธ์— ์œ„์™€ ๊ฐ™์€ ๊ฒƒ์ด ๋ฐœ์ƒ + +* clone์„ ํ•ด์ค˜์•ผ ํ•จ + +![](https://velog.velcdn.com/images/prettylee620/post/41141087-9ac3-4153-b0ef-58c920fca130/image.png) + +7. ๊ทธ ํ›„ ํด๋”๋กœ ์ด๋™ํ•˜๊ณ  `remote`ํ•ด์ฃผ๊ธฐ + +```java +cd teamproject_read_blog +git remote add react_springboot_template https://github.com/GoldenPearls/react_springboot_template.git +``` + +![](https://velog.velcdn.com/images/prettylee620/post/604c5985-4521-4489-a608-2c6fc02e44ad/image.png) + +8. `merge` ํ•ด์ฃผ๊ธฐ + +* ์ฒซ ๋ฒˆ ์งธ ์‹œ๋„ ๊ทธ๋ƒฅ merge ํ•ด์ฃผ๊ธฐ + +```java +git merge react_springboot_template/master +``` + +![](https://velog.velcdn.com/images/prettylee620/post/94378bad-9aab-48a7-8561-13d185dbc44e/image.png) + +* ๋‘ ๋ฒˆ์งธ ์‹œ๋„ : --allow-unrelated-histories + * "refusing to merge unrelated histories"๋Š” ๋‘ Git ์ €์žฅ์†Œ์˜ ๊ธฐ๋ก์ด ์™„์ „ํžˆ ๋‹ค๋ฅด๊ธฐ ๋•Œ๋ฌธ์— Git์ด ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ณ‘ํ•ฉ์„ ๊ฑฐ๋ถ€ + +```java +git merge react_springboot_template/master --allow-unrelated-histories +``` + +![](https://velog.velcdn.com/images/prettylee620/post/56856f86-0e5c-4869-951e-61cc71632a8e/image.png) + +9. `push` ํ•ด์ฃผ๊ธฐ + +```java +git push origin main +``` + +![](https://velog.velcdn.com/images/prettylee620/post/5c7bbd03-1989-4e81-bdac-cfbae95a5289/image.png) + +10. ๊ฒฐ๊ณผ : ์ปค๋ฐ‹๋„ ์ž˜ ์ง€ํ‚ค๋ฉด์„œ ํ•ฉ์ณ์ง + +![](https://velog.velcdn.com/images/prettylee620/post/891c917c-35fb-43fa-b78d-3eb890e9f508/image.png) + +## 5. ๋‹จ์–ด ์•Œ๊ธฐ + +### ๐Ÿ’ซ remote๋ž€? + +* **`remote`**๋Š” Git์—์„œ ์›๊ฒฉ ์ €์žฅ์†Œ๋ฅผ ์ฐธ์กฐํ•˜๋Š” ๋‹จ์ถ• ์ด๋ฆ„ +* ์›๊ฒฉ ์ €์žฅ์†Œ๋Š” ์ธํ„ฐ๋„ท์ด๋‚˜ ๋„คํŠธ์›Œํฌ ์–ด๋”˜๊ฐ€์— ์กด์žฌํ•˜๋Š” ์ €์žฅ์†Œ๋ฅผ ์˜๋ฏธํ•˜๋ฉฐ, ์—ฌ๋Ÿฌ ์‚ฌ๋žŒ์ด ํ˜‘์—…ํ•  ๋•Œ ๋™์ผํ•œ ํ”„๋กœ์ ํŠธ์— ๋Œ€ํ•œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๊ตํ™˜ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ +* ์˜ˆ๋ฅผ ๋“ค์–ด, GitHub์—์„œ ํ”„๋กœ์ ํŠธ๋ฅผ ํด๋ก (clone)ํ•˜๋ฉด, ๊ธฐ๋ณธ์ ์œผ๋กœ zip ํŒŒ์ผ๋กœ ๋ฐ›์œผ๋ฉด ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธด๊ฑฐ cloneํ•˜๋ฉด ๊ณ ์ณ์ง€๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๋‹ค(์‹ค์ œ ๊ฒฝํ—˜๋‹ด...) + + + + > ํ”„๋กœ์ ํŠธ๋ฅผ ํ•˜๋ฉด์„œ ํŒ€ ๊ณตํ†ต ํ…œํ”Œ๋ฆฟ์„ ๋งŒ๋“ค๋ฉด์„œ ์•Œ๊ฒŒ ๋œ github ์‚ฌ์šฉ๋ฒ• ๋“ฑ์„ ์ •๋ฆฌํ•ด๋ดค๋‹ค ๊ทธ ์ดํ›„ ๊ณ„์† ์ถ”๊ฐ€์˜ˆ์ •์ด๊ณ  ํŒ€ ํ”„๋กœ์ ํŠธ ๋๋‚˜๋ฉด 1๋ถ€ํ„ฐ 10๊นŒ์ง€ ์ •๋ฆฌํ•ด์•ผ๊ฒ ๋‹ค diff --git "a/developLog/ci-cd/github/github.io/_ github_io Chipy \355\205\214\353\247\210 \354\227\260\353\217\231 \355\225\230\352\270\260_.md" "b/developLog/ci-cd/github/github.io/_ github_io Chipy \355\205\214\353\247\210 \354\227\260\353\217\231 \355\225\230\352\270\260_.md" new file mode 100644 index 0000000..465926e --- /dev/null +++ "b/developLog/ci-cd/github/github.io/_ github_io Chipy \355\205\214\353\247\210 \354\227\260\353\217\231 \355\225\230\352\270\260_.md" @@ -0,0 +1,217 @@ +--- +description: github.io๋กœ ๋ธ”๋กœ๊ทธ ๋งŒ๋“ค๊ธฐ 1ํƒ„ +--- + +# github.io Chipy ํ…Œ๋งˆ ์—ฐ๋™ ํ•˜๊ธฐ + +## github.io blog ๋งŒ๋“ค๊ธฐ + +### 1) TMI + +์—์„œ ๋ธ”๋กœ๊ทธ๋ฅผ ์šด์˜ํ•˜๊ณ  ์žˆ๊ณ , ํŒ”๋กœ์šฐ๋„ 100๋ช…์„ ๋„˜์—ˆ๋‹ค. + +![](https://velog.velcdn.com/images/prettylee620/post/3f7c738d-963b-4526-aa53-317ec20774c4/image.png) + +ํ•˜์ง€๋งŒ.. ์˜ฎ๊ธฐ์ง€๋Š” ์•Š๊ณ  ๋‘ ๊ณณ์„ ์šด์˜ํ• ๊นŒ ๊ณ ๋ฏผ์ค‘... **Velog์— ๋‹จ์ ์ด ๋‚ด๊ฐ€ ์“ด ๊ธ€ ํ•œ ๋ˆˆ์— ์•ˆ๋ณด์—ฌ ใ… ใ… ใ… ใ… ** + +Github Page๋ฅผ ํ†ตํ•œ ๋ธ”๋กœ๊น…์„ ์‹œ๋„ํ–ˆ์œผ๋‚˜ ๊นŒ๋‹ค๋กœ์šด ์„ค์น˜์™€ ์ปค์Šคํ„ฐ๋งˆ์ด์ง•์ด,์–ด๋ ต๋‹ค๊ธฐ์— ํ…Œ๋งˆ ์„ ํƒ ์‹œ ์‚ฌ์šฉ์ž ์ˆ˜๊ฐ€ ๋งŽ๊ณ  ๊ณ„์† update ๋˜๊ณ ์žˆ์œผ๋ฉฐ, ๋‚ด ๋งˆ์Œ์— ๋“ค๊ณ  ์‚ฌ์šฉ์ž๊ฐ€๋งŽ์€ ํ…Œ๋งˆ์ธ [Chipy](https://github.com/cotes2020/jekyll-theme-chirpy)๋ฅผ ์„ ํƒ!! + +### 2) Local์—์„œ ํ…Œ์ŠคํŠธ ํ•˜๊ธฐ ์ „์˜ ์„ธํŒ… + +> [Jekyll-Chirpy-ํ…Œ๋งˆ ๊ธ€์“ฐ๊ธฐ, ์ปค์Šค๋งˆ์ด์ง• ๋“ฑ](https://www.irgroup.org/posts/jekyll-chirpy/) [Jekyll-Chirpy-ํ…Œ๋งˆ๋ฅผ-ํ™œ์šฉํ•œ-Github-๋ธ”๋กœ๊ทธ-๋งŒ๋“ค๊ธฐ(2023-6์›”-๊ธฐ์ค€)](https://jjikin.com/posts/Jekyll-Chirpy-%ED%85%8C%EB%A7%88%EB%A5%BC-%ED%99%9C%EC%9A%A9%ED%95%9C-Github-%EB%B8%94%EB%A1%9C%EA%B7%B8-%EB%A7%8C%EB%93%A4%EA%B8%B0\(2023-6%EC%9B%94-%EA%B8%B0%EC%A4%80\)) + +1. ๋ฆฌํฌ์ง€ํ† ๋ฆฌ `fork` ํ•ด์™€์„œ ์ƒ์„ฑํ•˜๊ธฐ + +* ๊ผญ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ๋ช…์„ `github ์œ ์ €์ด๋ฆ„.github.io`๋กœ ํ•ด์•ผ ํ•œ๋‹ค๊ณ  ๋‹ค!! + +![](https://velog.velcdn.com/images/prettylee620/post/ba804212-34fe-4099-8e41-6a6823df1e0b/image.png) + +2. branch๋ฅผ master์—์„œ main์œผ๋กœ ๋ณ€๊ฒฝํ•˜๊ณ  Branch protection rule๋„ ๊ธฐ๋ณธ๊ฐ’ (์ฒดํฌ x)์œผ๋กœ ์„ค์ • + +![](https://velog.velcdn.com/images/prettylee620/post/b07b61da-641f-4346-b9cf-bbd6495f57e3/image.png) + +![](https://velog.velcdn.com/images/prettylee620/post/e792ddd2-8c3f-4a6e-b0eb-a09f62d7570c/image.png) ![](https://velog.velcdn.com/images/prettylee620/post/8766155f-73e3-4313-ab0e-76ae5dae7be3/image.png) + +3. git clone ํ•ด์˜ค๊ธฐ + +* ๋„ฃ์–ด๋‘˜ ํด๋”๋กœ ์ด๋™ ํ•ด์„œ clone ํ•ด์˜ค๊ธฐ + +![](https://velog.velcdn.com/images/prettylee620/post/0ca2568f-abc7-4fb6-b3a6-09e06824052b/image.png) + +```jsx +cd blog +git clone https://github.com/GoldenPearls/GoldenPerals.github.io.git +``` + +## Local์—์„œ ์„ธํŒ… + +> ์ฐธ๊ณ  : [๋ณ„์ค€ : ๋ฃจ๋น„ ์„ค์น˜ ํ•˜๊ธฐ](https://junstar92.tistory.com/5) + +1. CMD๋กœ Ruby ์„ค์น˜ ํ•˜๊ธฐ + +> ๊ผญ 3. ์ด์ƒ ์„ค์น˜ ํ•  ๊ฒƒ ! + +2. Ruby๋ฅผ ์„ค์น˜ํ–ˆ๋‹ค๋ฉด ๋ฒ„์ „์„ ๊ฒ€์ƒ‰์‹œ ๋‚˜์˜ฌ ๊ฒƒ์ž„ + +```jsx +cd GoldenPerals.github.io +ruby -v +``` + +![](https://velog.velcdn.com/images/prettylee620/post/6dcefcd1-9818-4d14-bd6b-ab3054d3dbbd/image.png) + +์ด๋ ‡๊ฒŒ๋งŒ ์„ค์น˜ํ•˜๊ณ  ์„œ๋ฒ„ ์‹คํ–‰ํ•˜๋ ค๊ณ  ํ•˜๋ฉด ์ด๋Ÿฐ ์—๋Ÿฌ๊ฐ€ ๋‚˜์˜ฌ ์ˆ˜๋„ ์žˆ์Œ ๊ทธ๋Ÿฐ ๊ฒฝ์šฐ๋Š” `ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ์„ค์ •`์ด ํ•„์š”ํ•จ + +![](https://velog.velcdn.com/images/prettylee620/post/f45f43a4-8214-4e2f-848c-0b7ac29187f8/image.png) + +2. ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ์„ค์ •์ด ํ•„์š” Path ์—์„œ ํŽธ์ง‘ + +![](https://velog.velcdn.com/images/prettylee620/post/f94734d6-e67e-4f9f-a644-f224264b0aa3/image.png) + +![](https://velog.velcdn.com/images/prettylee620/post/33a3b039-2919-4ee7-a89c-124e4004ff4d/image.png) + +```jsx +C:\Users\rmawn\AppData\Local\Microsoft\WindowsApps +``` + +3. jekyll ์‹คํ–‰์„ ์œ„ํ•ด ํ•„์š”ํ•œ ๋ชจ๋“ˆ ์„ค์น˜ + +![](https://velog.velcdn.com/images/prettylee620/post/0c1d675f-0341-47b3-a015-aecc6926476f/image.png) + +4. npm์„ ํ†ตํ•ด node.js ๋ชจ๋“ˆ ์„ค์น˜ + +```jsx +npm install && npm run build +``` + +![](https://velog.velcdn.com/images/prettylee620/post/ac853e67-6313-4ebf-a208-642aef312503/image.png) + +5. ์„ค์น˜ ์™„๋ฃŒ ํ›„ ์•„๋ž˜ ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด ๋กœ์ปฌ์—์„œ jekyll์„ ์‹คํ–‰ + +```jsx +jekyll serve +``` + +![](https://velog.velcdn.com/images/prettylee620/post/f710e210-be75-4270-86df-c936a55d35e3/image.png) + +#### ๐Ÿ™„ **๋ฌธ์ œ ๋ฐœ์ƒ** + +![](https://velog.velcdn.com/images/prettylee620/post/bd7fa754-ede0-42d6-9a3c-ef3c184a1643/image.png) + +๋จผ์ € ์œ„์—์„œ ์ฒ˜๋Ÿผ + +1. ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์ถ”๊ฐ€ +2. `Gemfile` ํŒŒ์ผ ์ˆ˜์ • + +![](https://velog.velcdn.com/images/prettylee620/post/343c2a30-b6ff-4e33-b098-8800ddb60167/image.png) + +3. ์›๋ž˜์˜ ์ฝ”๋“œ + +```jsx +# frozen_string_literal: true + +source "https://rubygems.org" + +gemspec + +group :test do + gem "html-proofer", "~> 5.0" +end +``` + +4. ์ˆ˜์ • + +```jsx +# frozen_string_literal: true + +source "https://rubygems.org" + +gemspec + +group :test do + gem "html-proofer", "~> 5.0" +end + +gem "tzinfo" # ์‹œ๊ฐ„๋Œ€ ๊ด€๋ฆฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ +gem "tzinfo-data" # Windows์—์„œ tzinfo๋ฅผ ์ง€์›ํ•˜๊ธฐ ์œ„ํ•œ ๋ฐ์ดํ„ฐ +``` + +6. cmd ๊ป๋‹ค๊ฐ€ ๋‹ค์‹œ ์ผœ์„œ ํ™•์ธํ•ด๋ณด๊ธฐ + +```jsx +jekyll serve +``` + +![](https://velog.velcdn.com/images/prettylee620/post/4577b948-a8b2-492b-b7cc-6a2d52a88a32/image.png) + +7. ์›น๋ธŒ๋ผ์šฐ์ €์—์„œ 127.0.0.1:4000 ์ฃผ์†Œ๋กœ ๋ธ”๋กœ๊ทธ๊ฐ€ ์ •์ƒ์ ์œผ๋กœ ํ‘œ์‹œ๋˜๋Š”์ง€ ํ™•์ธํ•˜๊ณ  ๋ธ”๋กœ๊ทธ ๋‚ด ์—ฌ๋Ÿฌ ๋ฉ”๋‰ด ๋ฐ ๊ธฐ๋Šฅ๋“ค๋„ ์ •์ƒ ๋™์ž‘ํ•˜๋Š”์ง€ ํ™•์ธ + +![](https://velog.velcdn.com/images/prettylee620/post/612687e4-7490-4f68-8d08-92db45e2de9a/image.png) + +![](https://velog.velcdn.com/images/prettylee620/post/58c63c98-fce9-4af0-a80e-668bcc89f588/image.png) + +```rust +# frozen_string_literal: true + +source "https://rubygems.org" + +gemspec + +group :test do + gem "html-proofer", "~> 5.0" +end + +gem "tzinfo" # ์‹œ๊ฐ„๋Œ€ ๊ด€๋ฆฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ +gem "tzinfo-data" # Windows์—์„œ tzinfo๋ฅผ ์ง€์›ํ•˜๊ธฐ ์œ„ํ•œ ๋ฐ์ดํ„ฐ + +``` + +### ๊ธ€ ์“ฐ๋Š” ์‹œ๊ฐ„์„ ์ค„์ด๊ธฐ ์œ„ํ•œ ํ”Œ๋Ÿฌ๊ทธ์ธ + +> https://github.com/jekyll/jekyll-compose + +### ๋ฐฐํฌํ•˜๊ธฐ + +1. ๋ฐฐํฌํ•˜๊ธฐ ์ „ gitgnore ์„ธํŒ…ํ•˜๊ธฐ + +![](https://velog.velcdn.com/images/prettylee620/post/beb0ace2-c081-4389-8723-3b52daa3d78b/image.png) + +* ์šฐ์„ , `.gitignore` ํŒŒ์ผ์„ ์—ด์–ด์„œ ์•„๋ž˜ ๋‚ด์šฉ์„ ์ฃผ์„ ์ฒ˜๋ฆฌ + +```jsx +# Misc +#_sass/dist +#assets/js/dist +``` + +2. ๋ฐฐํฌํ•˜๊ธฐ + +```jsx +git add . +git commit -m "docs: add new blog post" +git push +``` + +3. setting > page > git action ์ถ”๊ฐ€ ![](https://velog.velcdn.com/images/prettylee620/post/cb6253bb-ef56-4dc0-98a2-e6073bf194bc/image.png) + +* configure๊นŒ์ง€ ํ•ด์ค˜์•ผ ํ•จ + +![](https://velog.velcdn.com/images/prettylee620/post/e95923a4-4544-446f-bc0a-3f37f955572d/image.png) + +4. ๋กœ์ปฌ์ด๋ž‘ ๋งž์ถฐ์ค˜์•ผ ํ•จ + +![](https://velog.velcdn.com/images/prettylee620/post/51eb7b1b-9512-4b0f-b59a-e42440c1f450/image.png) + +5. ์ปค์Šคํ„ฐ๋งˆ์ด์ง•์„ ์œ„ํ•œ \_config.yml ์ˆ˜์ •ํ•˜๊ธฐ + +> [์ฐธ๊ณ  ๊นƒํ—ˆ๋ธŒ](https://github.com/focuschange-test/focuschange-test.github.io/blob/main/\_config.yml) + +```jsx +git add . +git commit -m "chore: update config.yml settings" +git push +``` + +ํ›”... ์ผ๋‹จ ๋ฐฐํฌ๋งŒ ํ•ด๋‘๊ณ  ... ์ง€๊ธˆ gitbook ํ…Œ๋งˆ๊ฐ€ ๋” ๋งˆ์Œ์— ๋“ค์–ด์„œ gitbook์—๋งŒ ํ•ด๋‘˜๊นŒ? ์•„๋‹˜ github.io๋ž‘ ์—ฐ๊ฒฐํ•ด์„œ ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์„ ์ฐพ์„๊นŒ ๊ณ ๋ฏผ์ค‘์ž„ + +๋‚ด [gitbook](https://mellona-log.gitbook.io/log) diff --git "a/developLog/cs/_ CS \352\264\200\353\240\250 BOOKMARK_.md" "b/developLog/cs/_ CS \352\264\200\353\240\250 BOOKMARK_.md" new file mode 100644 index 0000000..4e06d29 --- /dev/null +++ "b/developLog/cs/_ CS \352\264\200\353\240\250 BOOKMARK_.md" @@ -0,0 +1,20 @@ +--- +icon: circle-bookmark +--- + +# CS ๊ด€๋ จ BOOKMARK + +> ์ด ๋ฐ‘์— ์žˆ๋Š” ๊ฒƒ๋“ค ์ค‘ ์ž๊ธฐ ์ทจํ–ฅ์„ ๊ณจ๋ผ ํ•˜๋‚˜๋งŒ ๋ณด๊ณ  ๋‹ค๋ฅธ ๊ฑธ๋กœ ๋ถ€์กฑํ•œ ๊ฒƒ ์ฑ„์›Œ๊ฐ€๋ฉด ์ถฉ๋ถ„ํ•  ๊ฒƒ ๊ฐ™๋‹ค. + +* [\[IT ๊ฐœ๋ฐœ์ž์™€ ์ผํ•  ๋•Œ ํ•„์š”ํ•œ ๋ชจ๋“  ๊ฐœ๋ฐœ์ง€์‹\] A to Z ์ž๋ฃŒ ๋ชจ์Œ์ง‘ By ๊ทธ๋žฉ](https://www.grabbing.me/IT-A-to-Z-By-1e1fbc981b7c4c03ac44943085ac8304) ์›ฌ๋งŒํ•œ CS ์ง€์‹ ์ง‘ํ•ฉ์ฒด IT ๋ถ„์•ผ ์ข…์‚ฌ์ž๋ผ๋ฉด ๋ด์•ผํ•จ +* [\[IT ๊ฐœ๋ฐœ์ž์™€ ์ผํ•  ๋•Œ ํ•„์š”ํ•œ ๋ชจ๋“  ๊ฐœ๋ฐœ์ง€์‹\] A to Z ์ž๋ฃŒ ๋ชจ์Œ์ง‘ By ๊ทธ๋žฉ์˜ ์–ด๋ ค์šด IT ์šฉ์–ด ์ •๋ฆฌ](https://www.grabbing.me/IT-e042e5f23b2147878ead089c97ef3c77#35a8ac77dfa84380bdd9d1c4e29e84d3) ์œ„์™€ ๋˜‘๊ฐ™์€ ๊ณณ์œผ๋กœ ์–ด๋ ค์šด IT ์šฉ์–ด ๋ชจ์Œ +* [์‹ ์ž… ๊ฐœ๋ฐœ์ž ์ „๊ณต ์ง€์‹ & ๊ธฐ์ˆ  ๋ฉด์ ‘ ๋ฐฑ๊ณผ์‚ฌ์ „](https://gyoogle.dev/blog/) ๊ธฐ์ˆ  ๋ฉด์ ‘์— ๋Œ€ํ•œ ์ •๋ฆฌ๊ฐ€ ์ฒด๊ณ„์ ์œผ๋กœ ์ž˜๋˜์–ด ์žˆ๋Š” ํŽธ +* [์‹ ์ž… ๊ฐœ๋ฐœ์ž ์ „๊ณต ์ง€์‹ & ๊ธฐ์ˆ  ๋ฉด์ ‘ ๋ฐฑ๊ณผ์‚ฌ์ „](https://github.com/WooVictory/Ready-For-Tech-Interview) ์œ„์˜ ์›น์‚ฌ์ดํŠธ GITHUB ๋ฒ„์ „ +* [๋‹ค๋ฅธ ์‚ฌ๋žŒ์ด ๋ฉด์ ‘์‹œ ๋ฌผ์–ด๋ณธ ๊ฒƒ์„ VELOG์— ์ •๋ฆฌํ•œ ๊ฒƒ](https://velog.io/@matisse/%EA%B8%B0%EC%88%A0%EB%A9%B4%EC%A0%91-%EC%A7%88%EB%AC%B8-%EC%A0%95%EB%A6%AC-CS) 3๋…„์ „ ๊ธ€์ด๊ธด ํ•œ๋ฐ ์ •๋ฆฌ๊ฐ€ ์ž˜๋˜์žˆ์–ด์„œ ๋‚˜๋„ ๋‚˜์ค‘์— ๋ฉด์ ‘์‹œ ์ €๋Ÿฐ์‹์œผ๋กœ ์ •๋ฆฌํ•ด์•ผ ๊ฒ ๋‹ค๋ฅผ ์ƒ๊ฐํ•จ +* [READY FOR TECH INTERVIEW](https://github.com/WooVictory/Ready-For-Tech-Interview) ์ด ๊ณณ์€ ์‹ ์ž… ํ˜น์€ ์ฃผ๋‹ˆ์–ด ๊ฐœ๋ฐœ์ž์—๊ฒŒ ํ•„์š”ํ•œ ์ง€์‹์„ ์ •๋ฆฌํ•˜๋Š” GITHUB +* [Technical Interview Guidelines for Beginners](https://github.com/JaeYeopHan/Interview\_Question\_for\_Beginner) ์‹œ์ž‘ํ•˜๋Š” ์ฃผ๋‹ˆ์–ด ๊ฐœ๋ฐœ์ž๋“ค์„ ์œ„ํ•œ ๊ธฐ์ดˆ ์ง€์‹ ์ •๋ฆฌํ•œ GITHUB +* [Backend-Interview-Question](https://github.com/ksundong/backend-interview-question) ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ์ž ์ž…์‚ฌ์‹œ ์งˆ๋ฌธ, ์˜ˆ์ƒ์งˆ๋ฌธ GITHUB +* [ํ”„๋ก ํŠธ์—”๋“œ ๊ธฐ์ˆ  ๋ฉด์ ‘ ๋Œ€๋น„ํ•˜๊ธฐ -1ํŽธ](https://f-lab.kr/blog/frontend-interview-1) ํ”„๋ก ํŠธ์•ค๋“œ ๋ฉด์ ‘์งˆ๋ฌธ์ •๋ฆฌ๋˜์–ด ์žˆ๋Š” F-LAB +* [์ž๋ฐ” ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ์ž ์งˆ๋ฌธ](https://f-lab.kr/blog/java-backend-interview-2) ์ž๋ฐ” ๊ธฐ์ˆ  ๋ฉด์ ‘ ๋Œ€๋น„ํ•˜๊ธฐ์ •๋ฆฌ ๋˜์–ด ์žˆ๋Š” F-LAB +* [์‹ค์ œ๋กœ ๋ฐ›์€ ํ”„๋ก ํŠธ์•ค๋“œ ์งˆ๋ฌธ๋ชจ์Œ ์ •๋ฆฌ](https://xiubindev.tistory.com/119) ํ”„๋ก ํŠธ์•ค๋“œ ์งˆ๋ฌธ ์ •๋ฆฌ๊ฐ€ ๋˜์–ด ์žˆ๋Š” Tistory +* [์ปดํ“จํ„ฐ ๊ณผํ•™ ํ‚ค์›Œ๋“œ ์ด์ •๋ฆฌ](https://csnote.net/) : ์ปดํ“จํ„ฐ ๊ณผํ•™ ํ‚ค์›Œ๋“œ๊ฐ€ ์ด ์ •๋ฆฌ๋˜์–ด ์žˆ๋Š” ์‚ฌ์ดํŠธ diff --git "a/developLog/cs/etc/_ \353\251\200\355\213\260\354\272\240\355\215\274\354\212\244\354\227\220\354\204\234 \353\260\260\354\232\264 cs \354\247\200\354\213\235_.md" "b/developLog/cs/etc/_ \353\251\200\355\213\260\354\272\240\355\215\274\354\212\244\354\227\220\354\204\234 \353\260\260\354\232\264 cs \354\247\200\354\213\235_.md" new file mode 100644 index 0000000..74659e2 --- /dev/null +++ "b/developLog/cs/etc/_ \353\251\200\355\213\260\354\272\240\355\215\274\354\212\244\354\227\220\354\204\234 \353\260\260\354\232\264 cs \354\247\200\354\213\235_.md" @@ -0,0 +1,424 @@ +# ๋ฉ€ํ‹ฐ์บ ํผ์Šค์—์„œ ๋ฐฐ์šด cs ์ง€์‹ + +## 1. ์„œ๋ฒ„(Server) + +### **1) ์„œ๋ฒ„๋ž€..** + +**์–ธ์–ด์ ์ธ ๊ด€์ **์—์„œ ๋ณด์ž๋ฉด + +* ํ…Œ๋‹ˆ์Šค, ํƒ๊ตฌ, ๋ฐฐ๊ตฌ ๋”ฐ์œ„์—์„œ ํ•˜๋Š” ์„œ๋ธŒํ•˜๋Š” ์ชฝ, ๋˜๋Š” ๊ทธ ์‚ฌ๋žŒ +* ์Œ์‹, ์Œ๋ฃŒ๋ฅผ ๋‚ด๋Š”๋ฐ ์“ฐ๋Š” ๋„๊ตฌ +* ์ฃผ๋œ ์ •๋ณด์˜ ์ œ๊ณต์ด๋‚˜, ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ์ปดํ“จํ„ฐ ์‹œ์Šคํ…œ + +### **2) ์ปดํ“จํ„ฐ์˜ ์„œ๋ฒ„๋Š” ํด๋ผ์ด์–ธํŠธ์— ์„œ๋น„์Šค๋ฅผ ์ œ๊ณตํ•œ๋‹ค.** + +์›น๋ธŒ๋ผ์šฐ์ € : ํด๋ผ์ด์–ธํŠธ ์ปดํ“จํ„ฐ : ์„œ๋ฒ„ + +### **3) ์„œ๋ฒ„์˜ ์ฒ˜๋ฆฌ๋Š” ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์œผ๋กœ ์‹œ์ž‘๋œ๋‹ค.** + +์„œ๋ฒ„๋Š” ๊ทธ ์ž์ฒด๋กœ ์ž‘๋™ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ๋ถˆํŠน์ • ๋‹ค์ˆ˜์˜ ์ปดํ“จํ„ฐ์— ๋Œ€ํ•ด ์ผ๋ฐฉ์ ์œผ๋กœ ์„œ๋น„์Šค๋ฅผ ์ œ๊ณตํ•˜์ง€ ์•Š์Œ ํด๋ผ์ด์–ธํŠธ๋กœ๋ถ€ํ„ฐ `์š”์ฒญ(request)`์„ ๋ฐ›์•„์„œ ์ฒ˜์Œ์œผ๋กœ ์ฒ˜๋ฆฌ๋ฅผ ์‹œ์ž‘ํ•˜๊ณ , ์„œ๋น„์Šค๋ฅผ `์ œ๊ณต(์‘๋‹ต, response)`ํ•œ๋‹ค. + +1. ํด๋ผ์ด์–ธํŠธ๋Š” ์„œ๋ฒ„์— ๋ฌด์–ธ๊ฐ€์˜ ์„œ๋น„์Šค๋ฅผ ์š”์ฒญํ•œ๋‹ค. +2. ์„œ๋ฒ„๋Š” ์š”์ฒญ์— ๋”ฐ๋ผ ๋งž์ถฐ ์ฒ˜๋ฆฌ๋ฅผ ์ˆ˜ํ–‰ํ•œ๋‹ค. +3. ์„œ๋ฒ„๋Š” ์ฒ˜๋ฆฌ ๊ฒฐ๊ณผ๋ฅผ ํด๋ผ์ด์–ธํŠธ๋กœ ๋ฐ˜ํ™˜ +4. ํด๋ผ์ด์–ธํŠธ๋Š” ์ฒ˜๋ฆฌ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ›๋Š”๋‹ค. + +### **4) ์›น์„œ๋น„์Šค์— ๋Œ€์ž…ํ•ด๋ณด์ž** + +**ํด๋ผ์ด์–ธํŠธ** : ๊ตฌ๊ธ€ ํฌ๋กฌ, ์‚ฌํŒŒ๋ฆฌ์™€ ๊ฐ™์€ ์›น๋ธŒ๋ผ์šฐ์ € **์„œ๋ฒ„** : ์›น์‚ฌ์ดํŠธ(์˜ ๊ตฌ์„ฑ ํŒŒ์ผ)์ด ์žˆ๋Š” ์ปดํ“จํ„ฐ + +5. ์›น๋ธŒ๋ผ์šฐ์ €๋Š” ์›น์„œ๋ฒ„์— ใ…‡ใ…‡ ์‚ฌ์ดํŠธ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ์‹ญ์‹œ์˜ค๋ผ๊ณ  ์š”์ฒญํ•œ๋‹ค. +6. ์›น์„œ๋ฒ„๋Š” ใ…‡ใ…‡ ์‚ฌ์ดํŠธ์˜ ํŒŒ์ผ์„ ์ฐพ๋Š”๋‹ค. +7. ์›น์„œ๋ฒ„๋Š” ใ…‡ใ…‡ ์‚ฌ์ดํŠธ์˜ ํŒŒ์ผ์„ ์›น๋ธŒ๋ผ์šฐ์ €์— ๋ฐ˜ํ™˜ํ•œ๋‹ค. +8. ์›น๋ธŒ๋ผ์šฐ์ €๋Š” ใ…‡ใ…‡์‚ฌ์ดํŠธ์˜ ํŒŒ์ผ์„ ๋ฐ›์•„์„œ ํ™”๋ฉด์— ํ‘œ์‹œํ•œ๋‹ค. โ‡’ ์ด๋Ÿฌํ•œ ์‹œ์Šคํ…œ์„ `ํด๋ผ์ด์–ธํŠธ/์„œ๋ฒ„ ์‹œ์Šคํ…œ`์ด๋ผ๊ณ  ํ•จ + +์ถœ์ฒ˜ : ์„œ๋ฒ„์˜ ๊ธฐ์ดˆ ์ฑ… + +*** + +## 2. ์›น ์„œ๋ฒ„(Web Server) + +### 1) ์›น์„œ๋น„์Šค + +**ํด๋ผ์ด์–ธํŠธ** : ๊ตฌ๊ธ€ ํฌ๋กฌ, ์‚ฌํŒŒ๋ฆฌ์™€ ๊ฐ™์€ ์›น๋ธŒ๋ผ์šฐ์ € **์„œ๋ฒ„** : ์›น์‚ฌ์ดํŠธ(์˜ ๊ตฌ์„ฑ ํŒŒ์ผ)์ด ์žˆ๋Š” ์ปดํ“จํ„ฐ + + + +### **2) ์›น ์„œ๋ฒ„**๋ž€(WEB) = ์•„ํŒŒ์น˜ + +* ํ•˜๋“œ์›จ์–ด์™€ ์†Œํ”„ํŠธ์›จ์–ด ํ˜น์€ ๋‘ ๊ฐœ๊ฐ€ ๊ฐ™์ด ๋™์ž‘ํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธ +* **๋ง ๊ทธ๋Œ€๋กœ ์ž‘์„ฑ๋œ html ํŽ˜์ด์ง€ ๋“ฑ์„ ๋„คํŠธ์›Œํฌ ๋ง์— ์ข…์†๋˜์ง€ ์•Š๊ณ , ์›น์„œ๋น„์Šค๋ฅผ ํ•  ์ˆ˜ ์žˆ๋„๋ก ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜** +* ๋ธŒ๋ผ์šฐ์ €์—์„œ ์›น ์„œ๋ฒ„์—์„œ ๋ถˆ๋ ค์ง„ ํŒŒ์ผ์„ ํ•„์š”๋กœ ํ•  ๋•Œ, ๋ธŒ๋ผ์šฐ์ €๋Š” HTTP๋ฅผ ํ†ตํ•ด ํŒŒ์ผ์„ ์š”์ฒญ +* ์š”์ฒญ์ด ์˜ฌ๋ฐ”๋ฅธ `์›น ์„œ๋ฒ„(ํ•˜๋“œ์›จ์–ด)`์— ๋„๋‹ฌ ์‹œ, `HTTP ์„œ๋ฒ„(์†Œํ”„ํŠธ์›จ์–ด)`๋Š” ์š”์ฒญ๋œ ๋ฌธ์„œ๋ฅผ HTTP๋ฅผ ์ด์šฉํ•ด ๋ณด๋‚ด์คŒ + +#### ์›น ์„œ๋ฒ„ ์†Œํ”„ํŠธ์›จ์–ด ์ข…๋ฅ˜ + +* ์„œ๋น„์Šค๋ณ„๋กœ ์„œ๋ฒ„ ์†Œํ”„ํŠธ์›จ์–ด๊ฐ€ ์žˆ์œผ๋ฉฐ, ๊ฐ๊ฐ ํŠน์ง•์ด ์žˆ์œผ๋‚˜ ์›น ์„œ๋ฒ„๋กœ์˜ ๊ธฐ๋Šฅ์€ ๊ณตํ†ต +* APache +* IIS +* nginx + +### 3) ํ•˜๋“œ์›จ์–ด ์ธก๋ฉด + +* `์›น ์„œ๋ฒ„`๋Š” ์›น ์„œ๋ฒ„์˜ ์†Œํ”„ํŠธ์›จ์–ด์™€ website์˜ ์ปดํฌ๋„ŒํŠธ ํŒŒ์ผ์„ ์ €์žฅํ•˜๋Š” ์ปดํ“จํ„ฐ +* ์†Œํ”„ํŠธ์›จ์–ด ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋Š” ์ปดํ“จํ„ฐ ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•˜๋Š” ์ปดํ“จ + * **์ปดํฌ๋„ŒํŠธ ํŒŒ์ผ**์ด๋ž€? + * HTML๋ฌธ์„œ, images, CSS stylesheets, JavaScript files +* ์›น ์„œ๋ฒ„๋Š” ์ธํ„ฐ๋„ท์— ์—ฐ๊ฒฐ๋œ ๋‹ค๋ฅธ ๊ธฐ๊ธฐ๋“ค์ด ์›น ์„œ๋ฒ„์˜ ๋ฐ์ดํ„ฐ(์ปดํฌ๋„ŒํŠธ ํŒŒ์ผ๋“ค)์„ ์ฃผ๊ณ ๋ฐ›์„ ์ˆ˜ ์žˆ๋„๋ก ํ•จ + +### 4) ์†Œํ”„ํŠธ์›จ์–ด ์ธก๋ฉด + +* ์›น ์„œ๋ฒ„๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์›น ์‚ฌ์šฉ์ž๊ฐ€ ์–ด๋–ป๊ฒŒ ํ˜ธ์ŠคํŠธ์— ํŒŒ์ผ๋“ค์— ์ ‘๊ทผํ•˜๋Š”์ง€๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ์ปดํ“จํ„ฐ ํ”„๋กœ๊ทธ๋žจ +* HTTP ์„œ๋ฒ„๋Š” URL๊ณผ HTTP(์šฐ๋ฆฌ์˜ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์›น ํŽ˜์ด์ง€๋ฅผ ๋ณด์—ฌ์ฃผ๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” ํ”„๋กœํ† ์ฝœ)์˜ ์†Œํ”„ํŠธ์›จ์–ด + * **URL์˜ ๊ตฌ์„ฑ์š”์†Œ** + * ํ”„๋กœํ† ์ฝœ, ์„œ๋ฒ„์ฃผ์†Œ, ํฌํŠธ๋ฒˆํ˜ธ, ํŒŒ์ผ๊ฒฝ๋กœ +* `HTTPS ์„œ๋ฒ„, HTTP ์„œ๋ฒ„`๋ฅผ ์›น ์„œ๋ฒ„๋ผ๊ณ  ๋ถ€๋ฅด๊ธฐ๋กœ ํ•จ + +๐Ÿ“Œ ์ฐธ๊ณ ๋กœ ใ…‡ใ…‡ ์„œ๋ฒ„์˜ ใ…‡ใ…‡์—๋Š” **์ œ๊ณตํ•˜๋Š” ์„œ๋น„์Šค์˜ ์ด๋ฆ„**์„ ๋„ฃ๋Š”๋‹ค. ex. ์นด์นด์˜คํ†ก ์„œ๋น„์Šค๋ฅผ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์€ ์นด์นด์˜คํ†ก ์„œ๋ฒ„ ex2. ์›น ์„œ๋ฒ„๋ฅผ โ€˜HTTP ์„œ๋ฒ„โ€™ ๋ฉ”์ผ ์„œ๋ฒ„๋ฅผ โ€˜SMTP ์„œ๋ฒ„โ€™๋ผ๊ณ  ๋ถ€๋ฅด๊ธฐ๋„ ํ•จ + + + +* ์ถœ์ฒ˜: https://developer.mozilla.org/ko/docs/Learn/Common\_questions/Web\_mechanics/What\_is\_a\_web\_server + +*** + +## 3. ์›น ์ปจํ…Œ์ด๋„ˆ(Web Container) + +### 1) ์›น ์ปจํ…Œ์ด๋„ˆ๋ž€? + +* `์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ`๋ผ๊ณ ๋„ ํ•จ +* **JSP + ์„œ๋ธ”๋ฆฟ์„ ์‹คํ–‰์‹œํ‚ฌ ์ˆ˜ ์žˆ๋Š” ์†Œํ”„ํŠธ์›จ์–ด** +* ์›น ์„œ๋ฒ„์˜ ์ปดํฌ๋„ŒํŠธ ์ค‘ ํ•˜๋‚˜๋กœ ์ž๋ฐ” ์„œ๋ธ”๋ฆฟ๊ณผ ์ƒํ˜ธ์ž‘์šฉ +* **์„œ๋ธ”๋ฆฟ์˜ ์ƒ๋ช…์ฃผ๊ธฐ๋ฅผ ๊ด€๋ฆฌ**ํ•˜๊ณ , URL๊ณผ ํŠน์ • ์„œ๋ธ”๋ฆฟ์„ ๋งตํ•‘ํ•˜๋ฉฐ URL ์š”์ฒญ์ด ์˜ฌ๋ฐ”๋ฅธ ์ ‘๊ทผ ๊ถŒํ•œ์„ ๊ฐ–๋„๋ก ๋ณด์žฅ +* ์„œ๋ธ”๋ฆฟ, ์ž๋ฐ” ์„œ๋ฒ„ ํŽ˜์ด์ง€(JSP) ํŒŒ์ผ, ๊ทธ๋ฆฌ๊ณ  ์„œ๋ฒ„-์‚ฌ์ด๋“œ ์ฝ”๋“œ๊ฐ€ ํฌํ•จ๋œ ๋‹ค๋ฅธ ํƒ€์ž…์˜ ํŒŒ์ผ๋“ค์— ๋Œ€ํ•œ `์š”์ฒญ`์„ ๋‹ค๋ฃฌ๋‹ค. +* ์„œ๋ธ”๋ฆฟ ๊ฐ์ฒด ์ƒ์„ฑ, ์„œ๋ธ”๋ฆฟ์„ ๋กœ๋“œ์™€ ์–ธ๋กœ๋“œํ•˜๋ฉฐ, `์š”์ฒญ๊ณผ ์‘๋‹ต` ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๊ณ , ๋‹ค๋ฅธ ์„œ๋ธ”๋ฆฟ ๊ด€๋ฆฌ ์ž‘์—…์„ ์ˆ˜ํ–‰ +* ์›น ์ปดํฌ๋„ŒํŠธ ์ž๋ฐ” EE ์•„ํ‚คํ…์ฒ˜ ์ œ์•ฝ์„ ๊ตฌํ˜„ํ•˜๊ณ , ๋ณด์•ˆ, ๋ณ‘ํ–‰์„ฑ, ์ƒ๋ช…์ฃผ๊ธฐ ๊ด€๋ฆฌ, ํŠธ๋žœ์žญ์…˜, ๋ฐฐํฌ ๋“ฑ ๋‹ค๋ฅธ ์„œ๋น„์Šค๋ฅผ ํฌํ•จํ•˜๋Š” ์›น ์ปดํฌ๋„ŒํŠธ์˜ ์‹คํ–‰ํ™˜๊ฒฝ ๋ช…์„ธ + +### 2) ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ ๋ชฉ๋ก + +* ์•„ํŒŒ์น˜ ํ†ฐ์บฃ +* ์•„ํŒŒ์น˜ ์ œ๋กœ๋‹ˆ๋ชจ +* ์˜ค๋ผํด์˜ ํด๋ž˜์Šคํ”ผ์‹œ +* ์ œ์ด๋ณด์Šค +* ์ถœ์ฒ˜ + +[https://ko.wikipedia.org/wiki/์›น\_์ปจํ…Œ์ด๋„ˆ](https://ko.wikipedia.org/wiki/%EC%9B%B9\_%EC%BB%A8%ED%85%8C%EC%9D%B4%EB%84%88) + +[https://helloworld-88.tistory.com/71#:\~:text=โ– ](https://helloworld-88.tistory.com/71) ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„ (WAS%2C Web Application Server)๋ž€%3F,์ปดํ“จํ„ฐ๋‚˜ ์žฅ์น˜์— ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ˆ˜ํ–‰ํ•ด ์ฃผ๋Š” ๋ฏธ๋“ค์›จ์–ด (์†Œํ”„ํŠธ์›จ์–ด ์—”์ง„)์ด๋‹ค. + +*** + +## 4. WAS(Web Application Server) = tomcat + +### 1) WAS๋ž€? + +* ์›น ์„œ๋ฒ„ + ์›น ์ปจํ…Œ์ด๋„ˆ(Servel ์ปจํ…Œ์ด) +* ์ธํ„ฐ๋„ท ์ƒ์—์„œ HTTP๋ฅผ ํ†ตํ•ด ์‚ฌ์šฉ์ž ์ปดํ“จํ„ฐ๋‚˜ ์žฅ์น˜์— ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ˆ˜ํ–‰ํ•ด ์ฃผ๋Š” ๋ฏธ๋“ค์›จ์–ด(์†Œํ”„ํŠธ์›จ์–ด ์—”์ง„) +* `๋™์  ์„œ๋ฒ„ ์ฝ˜ํ…์ธ ๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ`์œผ๋กœ ์ผ๋ฐ˜์ ์ธ ์›น ์„œ๋ฒ„์™€ ๊ตฌ๋ณ„๋˜๋ฉฐ, ์ฃผ๋กœ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„œ๋ฒ„์™€ ๊ฐ™์ด ์ˆ˜ํ–‰ +* ์›น ์ƒ์— ์‚ฌ์šฉํ•˜๋Š” ์ปดํฌ๋„ŒํŠธ๋ฅผ ์˜ฌ๋ ค๋†“๊ณ  ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜๋Š” ์„œ๋ฒ„ + +#### ๊ธฐ๋Šฅ + +* ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰ ํ™˜๊ฒฝ๊ณผ ๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค ์ ‘์† ๊ธฐ๋Šฅ ์ œ๊ณต +* ์—ฌ๋Ÿฌ ๊ฐœ์˜ ํŠธ๋žœ์žญ์…˜ ๊ด€๋ฆฌ +* ์—…๋ฌด๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ์ˆ˜ํ–‰ +* Web Service ํ”Œ๋žซํผ์˜ ์—ญํ™œ + +#### WAS ์ข…๋ฅ˜ + +* tomcat +* tMax jeus +* Oracle + +### 2) WEB ์„œ๋ฒ„์™€ WAS ๋น„๊ต + +* WEB ์„œ๋ฒ„ : HTML ๋ฌธ์„œ์™€ ๊ฐ™์€ `์ •์  ์ปจํ…์ธ `๋ฅผ ์ฒ˜๋ฆฌ ํ•˜๋Š” ๊ฒƒ(HTTP ํ”„๋กœํ† ์ฝœ์„ ํ†ตํ•ด ์ฝํž ์ˆ˜ ์žˆ๋Š” ๋ฌธ์„œ) +* WAS ์„œ๋ฒ„ : asp, php, jsp ๋“ฑ ๊ฐœ๋ฐœ ์–ธ์–ด๋ฅผ ์ฝ๊ณ  ์ฒ˜๋ฆฌํ•˜์—ฌ `๋™์  ์ปจํ…์ธ `, ์›น ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ ์„œ๋น„์Šค ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ + +*** + +## 5. HTTP(HyperText Treansfer protocol) + +### 1) HTTP๋ž€? + +* ์›น ์„œ๋น„์Šค๋ฅผ ์œ„ํ•ด ์ด์šฉ๋˜๋Š” ํ”„๋กœํ† ์ฝœ๋กœ ๋ณด์•ˆ์„ฑ์ด ์•ˆ ์ข‹์Œ +* ์•”ํ˜ธํ™”๋˜์ง€ ์•Š๋Š” ์ƒํƒœ๋กœ ์›น ๋ณผ ๋•Œ ์‚ฌ์šฉ๋˜๋Š” ํ”„๋กœํ† ์ฝœ +* ์ธํ„ฐ๋„ท์—์„œ ํ•˜์ดํผํ…์ŠคํŠธ(hypertext) ๋ฌธ์„œ๋ฅผ ๊ตํ™˜ํ•˜๊ธฐ ์œ„ํ•˜์—ฌ ์‚ฌ์šฉ๋˜๋Š” ํ†ต์‹ ๊ทœ์•ฝ +* ๋™์ž‘์›๋ฆฌ : POST,GET + +### 2) HTTPS(HTTP Secure)๋ž€ + +* ์•”ํ˜ธํ™”๋œ ์ƒํƒœ๋กœ ์›น์„ ๋ณผ ๋•Œ HTTP์— Secure์„ ๋œปํ•˜๋Š” s๊ฐ€ ๋ถ™์–ด HTTPS๋ผ๊ณ  ํ•จ + +*** + +## 7. ํ”„๋กœํ† ์ฝœ(Protocol) + +### 1) ํ”„๋กœํ† ์ฝœ์ด๋ž€? + +* ํ†ต์‹  ํ”„๋กœํ† ์ฝœ ๋˜๋Š” ํ†ต์‹  ๊ทœ์•ฝ์€ ์ปดํ“จํ„ฐ๋‚˜ ์›๊ฑฐ๋ฆฌ ํ†ต์‹  ์žฅ๋น„ ์‚ฌ์ด์—์„œ ๋ฉ”์„ธ์ง€๋ฅผ ์ฃผ๊ณ  ๋ฐ›๋Š” ์–‘์‹๊ณผ ๊ทœ์น™์˜ ์ฒด๊ณ„, ํ†ต์‹  ๊ทœ์•ฝ ๋ฐ ์•ฝ์† +* ํ†ฐ ๋งˆ๋ฆด์€ ์ปดํ“จํ„ฐ๊ฐ€ **๋ฉ”์„ธ์ง€๋ฅผ ์ „๋‹ฌํ•˜๊ณ , ๋ฉ”์„ธ์ง€๊ฐ€ ์ œ๋Œ€๋กœ ๋„์ฐฉํ–ˆ๋Š”์ง€ ํ™•์ธํ•˜๋ฉฐ, ๋„์ฐฉํ•˜์ง€ ์•Š์•˜์„ ๊ฒฝ์šฐ ๋ฉ”์„ธ์ง€๋ฅผ ์žฌ์ „์†กํ•˜๋Š” ์ผ๋ จ์˜ ๋ฐฉ๋ฒ•**์„ ๊ธฐ์ˆ ์  ์€์–ด๋กœ ํ”„๋กœํ† ์ฝœ์ด๋ผ๊ณ  ํ•œ๋‹ค. +* ํ†ต์‹ ์„ ์œ„ํ•ด ํ”„๋กœํ† ์ฝœ์ด ๊ฐ€์ ธ์•ผ ํ•˜๋Š” ์ผ๋ฐ˜์ ์ธ ๊ธฐ๋Šฅ์—๋Š” ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ ๊ธฐ๋Šฅ, ์ œ์–ด ๊ธฐ๋Šฅ, ๊ด€๋ฆฌ์  ๊ธฐ๋Šฅ + +### 2) ํ”„๋กœํ† ์ฝœ์˜ ๊ธฐ๋ณธ ์š”์†Œ + +* `๊ตฌ๋ฌธ(Syntax)` : ์ „์†กํ•˜๊ณ ์ž ํ•˜๋Š” ๋ฐ์ดํ„ฐ์˜ ํ˜•์‹(Format), ๋ถ€ํ˜ธํ™”(Coding), ์‹ ํ˜ธ ๋ ˆ๋ฒจ(Singnal Level) ๋“ฑ์„ ๊ทœ์ • +* `์˜๋ฏธ(Semantics)` : ๋‘ ๊ธฐ๊ธฐ๊ฐ„์˜ ํšจ์œจ์ ์ด๊ณ  ์ •ํ™•ํ•œ ์ •๋ณด ์ „์†ก์„ ์œ„ํ•œ ํ˜‘์กฐ ์‚ฌํ•ญ๊ณผ ์˜ค๋ฅ˜ ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•œ **์ œ์–ด ์ •๋ณด๋ฅผ ๊ทœ์ •** +* `์‹œ๊ฐ„(Timing)` : ๋‘ ๊ธฐ๊ธฐ ๊ฐ„์˜ ํ†ต์‹  ์†๋„, ๋ฉ”์„ธ์ง€์˜ ์ˆœ์„œ ๋“ฑ์„ ๊ทœ์ • + +### 3) ํ”„๋กœํ† ์ฝœ ์ข…๋ฅ˜ + +
+ +*** + +## 8. ํฌํŠธ(Port) + +* ๋„คํŠธ์›Œํฌ ์ƒ์—์„œ ํŠน์ • PC๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” IP ์ฃผ์†Œ์™€ ๊ทธ ์ฃผ์†Œ์— ์ง„์ž…ํ•  ์ˆ˜ ์žˆ๋Š” ์ •ํ•ด์ง„ ํ†ต๋กœ + * IP ์ฃผ์†Œ : ๋„คํŠธ์›Œํฌ์— ์—ฐ๊ฒฐ๋œ ํŠน์ • PC์˜ ์ฃผ์†Œ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์ฒด๊ณ„ +* IP ๋‚ด์—์„œ **์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ƒํ˜ธ ๊ตฌ๋ถ„(ํ”„๋กœ์„ธ์Šค ๊ตฌ๋ถ„)์„ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” ๋ฒˆํ˜ธ** +* ์ฃผ๋กœ ํฌํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ํ”„๋กœํ† ์ฝœ์€ ์ „์†ก ๊ณ„์ธต ํ”„๋กœํ† ์ฝœ +* ์ด๋ฏธ ์‚ฌ์šฉ ์ค‘์€ ํฌํŠธ๋Š” ์ค‘๋ณตํ•ด์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค. +* **ํฌํŠธ ๋ฒˆํ˜ธ๋Š” 0\~ 65,535 ๊นŒ์ง€ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.** +* **ํฌํŠธ ๋ฒˆํ˜ธ** + * IP ์ฃผ์†Œ๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” PC์— ์ ‘์†ํ•  ์ˆ˜ ์žˆ๋Š” ํ†ต๋กœ + * `์ž˜ ์•Œ๋ ค์ง„ ํฌํŠธ ๋ฒˆํ˜ธ` + * 22 : SSH + * 80 : HTTP + * 443 : HTTPS + +#### ์›น ์„œ๋น„์Šค์— ์ด์šฉ๋˜๋Š” ํฌํŠธ๋ฒˆํ˜ธ + +* 80๋ฒˆ ํฌํŠธ(์‹ค์ œ ์ƒ์šฉํ™”๋œ ์„œ๋น„์Šค ์ œ๊ณต ์‹œ ์ด์šฉ) +* ์ถœ์ฒ˜ + +[https://hanamon.kr/๋„คํŠธ์›Œํฌ-๊ธฐ๋ณธ-ip-์ฃผ์†Œ์™€-ํฌํŠธ-port/](https://hanamon.kr/%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-%EA%B8%B0%EB%B3%B8-ip-%EC%A3%BC%EC%86%8C%EC%99%80-%ED%8F%AC%ED%8A%B8-port/) + +*** + +## 9. ์ •์  ์›น ํ”„๋กœ๊ทธ๋ž˜๋ฐ๊ณผ ๋™์  ์›น ํ”„๋กœ๊ทธ๋ž˜๋ฐ + +### 1) ์ •์  ์›น ํ”„๋กœ๊ทธ๋ž˜๋ฐ + +* ์ฃผ์–ด์ง„ HTML ํŒŒ์ผ์„ ๋ณด์—ฌ์ฃผ๊ธฐ๋งŒ ํ•จ + +### 2) ๋™์  ์›น ํ”„๋กœ๊ทธ๋ž˜๋ฐ + +* ์‚ฌ์šฉ์ž ์ž…๋ ฅ์— ๋”ฐ๋ผ ๋‹ค๋ฅธ ํŽ˜์ด์ง€๋ฅผ ๋ณด์—ฌ์ฃผ๊ฑฐ๋‚˜, ํ•„์š”์— ๋”ฐ๋ผ ๋™์ ์œผ๋กœ ํŽ˜์ด์ง€ ์ƒ์„ฑํ•ด์„œ ๋ณด์—ฌ์คŒ + +#### CGI + +* ์‚ฌ์šฉ์ž ์ž…๋ ฅ์„ ๋ฐ›์•„๋“ค์ด๊ธฐ ์œ„ํ•ด `
`๊ณผ `` ํƒœ๊ทธ๋ฅผ ๋„์ž…ํ•œ ๊ฐ€์žฅ ์ดˆ์ฐฝ๊ธฐ์˜ ๋™์  ์›น ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ธฐ์ˆ  + +#### JSP(Java server page) + +* HTML ์ฝ”๋“œ์— JAVA ์ฝ”๋“œ๋ฅผ ๋„ฃ์–ด ๋™์  ์›นํŽ˜์ด์ง€๋ฅผ ์ƒ์„ฑํ•˜๋Š” ์›น์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋„๊ตฌ +* JSP ๊ฐ€ ์‹คํ–‰๋˜๋ฉด ์ž๋ฐ” ์„œ๋ธ”๋ฆฟ(Servlet) ์œผ๋กœ ๋ณ€ํ™˜๋˜๋ฉฐ **์›น ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„์—์„œ ๋™์ž‘**๋˜๋ฉด์„œ ํ•„์š”ํ•œ ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ํ•˜๊ณ  ๊ทธ๋ ‡๊ฒŒ ์ƒ์„ฑ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์›นํŽ˜์ด์ง€์™€ ํ•จ๊ป˜ ํด๋ผ์ด์–ธํŠธ๋กœ ์‘๋‹ต + * `์ž๋ฐ” ์„œ๋ธ”๋ฆฟ`์ด๋ž€? + * ์„œ๋ธ”๋ฆฟ์ด๋ž€ ์›นํŽ˜์ด์ง€๋ฅผ ๋™์ ์œผ๋กœ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•ด ์„œ๋ฒ„์ธก ํ”„๋กœ๊ทธ๋žจ + * ์ž๋ฐ” ์–ธ์–ด๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋งŒ๋“ค์ง€๋ฉฐ ์›น ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„ ( Web Application Sever ) ์œ„์—์„œ ์ปดํŒŒ์ผ ๋˜๊ณ  ๋™์ž‘ +* ํ•„์š” ์†Œํ”„ํŠธ์›จ์–ด + * ์›น๋ธŒ๋ผ์šฐ์ €(ํฌ๋กฌ ๋“ฑ) + * JSP ์ปจํ…Œ์ด๋„ˆ ๊ธฐ๋Šฅ์„ ํฌํ•จํ•œ ์›น ์„œ๋ฒ„(ํ†ฐ์บฃ ๋“ฑ) + * JDK(java delvelopment kit, jsp ์ปดํŒŒ์ผ ๋ฐ ์‹คํ–‰์„ ์œ„ํ•ด ํ•„์š”) + * ํ†ตํ•ฉ ๊ฐœ๋ฐœํ™˜๊ฒฝ(์ดํด๋ฆฝ์Šค ๋“ฑ) + * ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„œ๋ฒ„(MySQL, Oracle) + * ๊ธฐํƒ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ(JDBC, Apache Commons ๋“ฑ) +* ์ถœ์ฒ˜ + +[https://javacpro.tistory.com/43](https://javacpro.tistory.com/43) + +#### ASP + +* IIS๋Š” ๋งˆ์ดํฌ๋กœ์†Œํ”„ํŠธ์—์„œ ASP ๊ฐœ๋ฐœ์„ ์œ„ํ•ด ์ด์šฉ + +#### ํ†ฐ์บฃ(tomcat) ์„œ๋ฒ„ + +* HTTP ์š”์ฒญ๊ณผ ์‘๋‹ต ์ฒ˜๋ฆฌ ์™ธ์—, JSP ๊ธฐ๋ฐ˜์˜ ๋™์  ์›น ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ธฐ์ˆ ์„ ํ•จ๊ป˜ ์ง€์›ํ•˜๊ธฐ ์œ„ํ•œ ์›น ์„œ๋ฒ„ +* ๊ฐœ๋ฐœ ๊ณผ์ •์—์„œ ํ†ฐ์บฃ ์„œ๋ฒ„์™€ ์—ฐ๊ฒฐ์„ ์œ„ํ•ด ์ผ๋ฐ˜์ ์œผ๋กœ ์ด์šฉ๋˜๋Š” ํฌํŠธ๋ฒˆํ˜ธ + * **8080 ํฌํŠธ** +* ์ด๋Ÿฐ ์—๋Ÿฌ ๋ฐœ์ƒ ์›์ธ + +
+ +* ์™ธ๋ถ€์—์„œ ์‹คํ–‰๋˜๋Š” ํ†ฐ์บฃ ์„œ๋ฒ„ ์กด์žฌ +* ์„œ๋ฒ„ ์—ฐ๊ฒฐ ์ •๋ณด๊ฐ€ ์ œ๋Œ€๋กœ ์ฃผ์–ด์ง€์ง€ ์•Š์„ ๋•Œ +* ํ†ฐ์บฃ์ด ์•„๋‹Œ ๋‹ค๋ฅธ ์›น ์„œ๋ฒ„๊ฐ€ ์ด๋ฏธ ์‹คํ–‰ ์ค‘์ผ๋•Œ + +CF. ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋ธŒ๋ผ์šฐ์ € ์„œ๋ฒ„ ๋™์‹œ ์ ‘์† ์‹œ๋„๋Š” ์ง€์› ๋˜์–ด์•ผ ํ•˜๋Š” ๊ธฐ๋Šฅ + +*** + +## 10. JDK์™€ JRE + +### 1) JRE(JAVA Runtime Enviroment) + +* java ์‹คํ–‰์— ํ•„์š”ํ•œ ํ”„๋กœ๊ทธ๋žจ๋งŒ์„ ๊ฐ€์ง€๊ณ  ์žˆ์Œ + +### 2) JDK(Java Development Kit) + +* JRE ์™ธ์— ๊ฐœ๋ฐœ์— ํ•„์š”ํ•œ ์ปดํŒŒ์ผ๋Ÿฌ๋‚˜ ๋””๋ฒ„๊ฑฐ ๋“ฑ์„ ํ•จ๊ป˜ ํฌํ•จํ•œ๋‹ค๋Š” ์  + +*** + +## 3) ์›น ํ™˜๊ฒฝ ๊ตฌ์ถ• + +* ํ†ฐ์บฃ(์›น ์„œ๋ฒ„ + Servlet ์ปจํ…Œ์ด๋„ˆ) : WAS +* IDE : ํ†ตํ•ฉ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ - ์ดํด๋ฆฝ์Šค : J2EE +* ์›น ๋ธŒ๋ผ์šฐ์ €(HTTP ์„œ๋น„์Šค) +* DBMS(ORACLE, MySQl ์„ ํƒ) +* DBMS(ORACLE, MYSQL ์„ ํƒ) +* Junit, lombok + +*** + +## ๊ทธ ์™ธ + +1. ๋‹ค์Œ HTML ์ž…๋ ฅ ํƒœ๊ทธ ์ค‘ \์™€ ๋™์ผํ•œ ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ์€? **\