├── .eslintignore ├── .eslintrc ├── .gitattributes ├── .github ├── ISSUE_TEMPLATE │ ├── feature.md │ └── typo.md └── PULL_REQUEST_TEMPLATE.md ├── .gitignore ├── .vscode └── markdown.json.code-snippets ├── README.md ├── babel.config.js ├── chapter01-개발상식 ├── README.md └── img │ ├── concurrency_vs_parallelism_01.jpg │ ├── concurrency_vs_parallelism_02.jpg │ ├── flux.png │ ├── model1.JPG │ ├── model2.JPG │ ├── mvc.jpg │ ├── mvp.png │ └── mvvm.png ├── chapter02-운영체제 ├── README.md └── img │ ├── Memory_Hierarchy.jpg │ ├── cache_hit.jpg │ ├── control_hazard.JPG │ ├── data_hazard.JPG │ ├── kernel_interface.jpg │ ├── layered_architecture.jpg │ ├── mapping_table.jpg │ ├── micro_architecture.jpg │ ├── monolithic_architecture.jpg │ ├── parallel_processing_01.jpg │ ├── parallel_processing_02.jpg │ ├── parallel_processing_03.jpg │ ├── parallel_processing_04.jpg │ ├── parallel_processing_05.jpg │ ├── parallel_processing_pipeline.JPG │ ├── process.jpg │ ├── storage_hierarchy.jpg │ ├── structural_hazard.JPG │ └── thread.jpg ├── chapter03-네트워크 ├── README.md ├── http-absolute-guide │ ├── 1st.md │ ├── 2nd.md │ ├── 3rd.md │ ├── 4th.md │ ├── 5th.md │ ├── 6.th.md │ ├── README.md │ └── proxy │ │ ├── index.js │ │ ├── package-lock.json │ │ └── package.json └── img │ ├── TCP-3-hands-shaking.jpg │ ├── TCP-4-hands-shaking.png │ └── osi7layer_tcp-ip4layer.png ├── chapter04.0-언어 ├── Java.md ├── JavaScript.md ├── Python.md ├── README.md ├── img │ ├── 01-java_compile.png │ └── 02-JVM.png ├── javascript2.md └── javascript3.md ├── chapter04.5-프레임워크 ├── README.md ├── img │ ├── react │ │ ├── 16.3v+.jpg │ │ └── state.jpg │ └── springmvcstructure.jpg ├── react.md ├── spring.md └── vue.md ├── chapter05-데이터베이스 ├── README.md └── img │ ├── SQL_075.jpg │ ├── SQL_076.jpg │ └── data-model-normalization.jpg ├── chapter06-디자인패턴 ├── README.md ├── java │ ├── README.md │ ├── abstractFactory │ │ ├── Factory.java │ │ ├── Item.java │ │ ├── Link.java │ │ ├── Main.java │ │ ├── Page.java │ │ └── Tray.java │ ├── adapter │ │ ├── extendsEx │ │ │ ├── Banner.java │ │ │ ├── Main.java │ │ │ ├── Print.java │ │ │ └── PrintBanner.java │ │ └── instanceEx │ │ │ ├── Banner.java │ │ │ ├── Main.java │ │ │ ├── Print.java │ │ │ └── PrintBanner.java │ ├── bridge │ │ ├── CountDisplay.java │ │ ├── Display.java │ │ ├── DisplayImpl.java │ │ ├── Main.java │ │ └── StringDisplayImpl.java │ ├── builder │ │ ├── Builder.java │ │ ├── Director.java │ │ ├── HTMLBuilder.java │ │ ├── Main.java │ │ └── TextBuilder.java │ ├── chain_of_responsibility │ │ ├── LimitSupport.java │ │ ├── Main.java │ │ ├── NoSupport.java │ │ ├── OddSupport.java │ │ ├── SpecialSupport.java │ │ ├── Support.java │ │ └── Trouble.java │ ├── command │ │ ├── Command.java │ │ ├── DrawCanvas.java │ │ ├── DrawCommand.java │ │ ├── Drawable.java │ │ ├── MacroCommand.java │ │ └── Main.java │ ├── composite │ │ ├── Directory.java │ │ ├── Entry.java │ │ ├── File.java │ │ ├── FileTreatmentException.java │ │ └── Main.java │ ├── decorator │ │ ├── Border.java │ │ ├── Display.java │ │ ├── FullBorder.java │ │ ├── Main.java │ │ ├── SideBorder.java │ │ └── StringDisplay.java │ ├── design-pattern-category.jpg │ ├── facade │ │ ├── Database.java │ │ ├── HtmlWriter.java │ │ ├── Main.java │ │ ├── PageMaker.java │ │ └── maildata.txt │ ├── factoryMethod │ │ ├── Main.java │ │ ├── framework │ │ │ ├── Factory.java │ │ │ └── Product.java │ │ └── idcard │ │ │ ├── IDCard.java │ │ │ └── IDCardFactory.java │ ├── flyweight │ │ ├── BigChar.java │ │ ├── BigCharFactory.java │ │ ├── BigString.java │ │ └── Main.java │ ├── interpreter │ │ ├── CommandListNode.java │ │ ├── CommandNode.java │ │ ├── Context.java │ │ ├── Main.java │ │ ├── Node.java │ │ ├── ParseException.java │ │ ├── PrimitiveCommandNode.java │ │ ├── ProgramNode.java │ │ └── RepeatCommandNode.java │ ├── iterator │ │ ├── Aggregate.java │ │ ├── Book.java │ │ ├── BookShelf.java │ │ ├── BookShelfIterator.java │ │ ├── Iterator.java │ │ └── Main.java │ ├── mediator │ │ ├── Colleague.java │ │ ├── ColleagueButton.java │ │ ├── ColleagueCheckbox.java │ │ ├── ColleagueTextField.java │ │ ├── LoginFrame.java │ │ ├── Main.java │ │ └── Mediator.java │ ├── memento │ │ ├── Gamer.java │ │ ├── Main.java │ │ └── Memento.java │ ├── observer │ │ ├── DigitObserver.java │ │ ├── GraphObserver.java │ │ ├── Main.java │ │ ├── NumberGenerator.java │ │ ├── Observer.java │ │ └── RandomNumberGenerator.java │ ├── prototype │ │ ├── Main.java │ │ ├── Manager.java │ │ ├── MessageBox.java │ │ ├── Product.java │ │ └── UnderlinePen.java │ ├── proxy │ │ ├── Main.java │ │ ├── Printable.java │ │ ├── Printer.java │ │ └── PrinterProxy.java │ ├── singleton │ │ ├── Main.java │ │ └── Singleton.java │ ├── state │ │ ├── Context.java │ │ ├── DayState.java │ │ ├── Main.java │ │ ├── NightState.java │ │ ├── SafeFrame.java │ │ └── State.java │ ├── strategy │ │ ├── Hand.java │ │ ├── Main.java │ │ ├── Player.java │ │ ├── ProbStrategy.java │ │ ├── Strategy.java │ │ └── WinningStrategy.java │ ├── templateMethod │ │ ├── AbstractDisplay.java │ │ ├── CharDisplay.java │ │ ├── Main.java │ │ └── StringDisplay.java │ └── visitor │ │ ├── Directory.java │ │ ├── Element.java │ │ ├── Entry.java │ │ ├── File.java │ │ ├── FileTreatmentException.java │ │ ├── ListVisitor.java │ │ ├── Main.java │ │ └── Visitor.java └── javascript │ ├── Callback │ ├── README.md │ ├── attendee.js │ ├── attendeeCollection.js │ ├── attendeeCollection_tests.js │ ├── checkInRecorder.js │ ├── checkInService.js │ ├── checkInService_tests.js │ ├── checkedInAttendeeCounter.js │ ├── checkedInAttendeeCounter_tests.js │ └── index.html │ ├── Correct_Object │ ├── Classical │ │ └── classical_01.js │ ├── Functional │ │ └── functional_01.js │ ├── New Pattern │ │ ├── newpattern_01.js │ │ ├── newpattern_02.js │ │ ├── newpattern_03.js │ │ ├── newpattern_04.js │ │ ├── newpattern_05.js │ │ └── newpattern_06.js │ └── README.md │ ├── ES6 │ ├── abstract_factory │ │ ├── README.md │ │ ├── abstractFactory.js │ │ ├── index.html │ │ ├── runner.js │ │ └── typescript │ │ │ ├── abstractFactory.ts │ │ │ └── runner.ts │ ├── adapter │ │ ├── README.md │ │ ├── adapter.js │ │ ├── index.html │ │ ├── runner.js │ │ └── typescript │ │ │ ├── adapter.ts │ │ │ └── runner.ts │ ├── bridge │ │ ├── README.md │ │ ├── bridge.js │ │ ├── index.html │ │ ├── runner.js │ │ └── typescript │ │ │ ├── bridge.ts │ │ │ └── runner.ts │ ├── builder │ │ ├── README.md │ │ ├── builder.js │ │ ├── index.html │ │ ├── runner.js │ │ └── typescript │ │ │ ├── builder.ts │ │ │ └── runner.ts │ ├── command │ │ ├── README.md │ │ ├── command.js │ │ ├── index.html │ │ ├── runner.js │ │ └── typescript │ │ │ ├── command.ts │ │ │ └── runner.ts │ ├── composite │ │ ├── README.md │ │ ├── composite.js │ │ ├── index.html │ │ ├── runner.js │ │ └── typescript │ │ │ ├── composite.ts │ │ │ └── runner.ts │ ├── decorator │ │ ├── README.md │ │ ├── decorator.js │ │ ├── index.html │ │ ├── runner.js │ │ └── typescript │ │ │ ├── decorator.ts │ │ │ └── runner.ts │ ├── facade │ │ ├── README.md │ │ ├── facade.js │ │ ├── index.html │ │ ├── runner.js │ │ └── typescript │ │ │ ├── facade.ts │ │ │ └── runner.ts │ ├── factory_method │ │ ├── README.md │ │ ├── factorymethod.js │ │ ├── index.html │ │ ├── runner.js │ │ └── typescript │ │ │ ├── factorymethod.ts │ │ │ └── runner.ts │ ├── index.html │ ├── iterator │ │ ├── README.md │ │ ├── index.html │ │ ├── iterator.js │ │ ├── runner.js │ │ └── typescript │ │ │ ├── iterator.ts │ │ │ └── runner.ts │ ├── logger.js │ ├── logger.ts │ ├── memento │ │ ├── README.md │ │ ├── index.html │ │ ├── memento.js │ │ ├── runner.js │ │ └── typescript │ │ │ ├── memento.ts │ │ │ └── runner.ts │ ├── mvc │ │ ├── README.md │ │ ├── index.html │ │ ├── mvc.js │ │ ├── runner.js │ │ └── typescript │ │ │ ├── mvc.ts │ │ │ └── runner.ts │ ├── observer │ │ ├── README.md │ │ ├── index.html │ │ ├── observer.js │ │ ├── runner.js │ │ └── typescript │ │ │ ├── observer.ts │ │ │ └── runner.ts │ ├── prototype │ │ ├── README.md │ │ ├── index.html │ │ ├── prototype.js │ │ ├── runner.js │ │ └── typescript │ │ │ ├── prototype.ts │ │ │ └── runner.ts │ ├── proxy │ │ ├── README.md │ │ ├── index.html │ │ ├── proxy.js │ │ ├── runner.js │ │ └── typescript │ │ │ ├── proxy.ts │ │ │ └── runner.ts │ ├── publish_subscribe │ │ ├── README.md │ │ ├── index.html │ │ ├── pubsub.js │ │ ├── runner.js │ │ └── typescript │ │ │ ├── pubsub.ts │ │ │ └── runner.ts │ ├── strategy │ │ ├── README.md │ │ ├── index.html │ │ ├── runner.js │ │ ├── strategy.js │ │ └── typescript │ │ │ ├── runner.ts │ │ │ └── strategy.ts │ ├── template │ │ ├── README.md │ │ ├── index.html │ │ ├── runner.js │ │ ├── template.js │ │ └── typescript │ │ │ ├── runner.ts │ │ │ └── template.ts │ └── visitor │ │ ├── README.md │ │ ├── index.html │ │ ├── runner.js │ │ ├── typescript │ │ ├── runner.ts │ │ └── visitor.ts │ │ └── visitor.js │ ├── README.md │ └── img │ ├── Behavioral-Design-Patterns.png │ ├── flux.png │ └── mvc.png ├── chapter07-자료구조와_알고리즘 ├── AmortizedAnalysis.md ├── DoublingofArray.md ├── README.md ├── img │ ├── arraylist.png │ ├── arraylistvslinkedlist.png │ ├── big-o.png │ ├── linearlist.png │ ├── linkedlist.png │ ├── queue.jpg │ └── stack.jpg └── implement │ ├── BinarySearch │ └── index.js │ ├── BinarySearchTree │ ├── README.md │ └── index.js │ ├── Heap │ ├── MaxHeap.js │ ├── MinHaep.js │ └── index.js │ ├── PriorityQueue │ └── index.js │ ├── Queue │ └── index.js │ └── Stack │ └── index.js ├── chapter08-유닉스와_리눅스 ├── README.md ├── command.md └── img │ └── process.png ├── chapter09-정규표현식 └── README.md ├── chapter10-프론트엔드 ├── ADVANTAGE.md ├── GIT.md ├── INTERVIEW.md ├── INTERVIEW2.md ├── PACKAGE.md ├── README.md └── img │ ├── 9466d8aa53fc5b3e63a92858a94bb429df02bbd20012b738f0461343beaa6f90.gif │ ├── domainName.jpg │ ├── frontend-roadmap.png │ ├── internet-schema-2.png │ ├── internet-schema-3.png │ ├── internet-schema-5.png │ ├── internet-schema-6.png │ └── internet-schema-7.png ├── chapter11-방법론 ├── Agile.md ├── DDD.md ├── README.md ├── TDD.md └── img │ ├── 01.JPG │ ├── 02.JPG │ ├── 03.JPG │ ├── 04.JPG │ ├── 05.JPG │ ├── 06.JPG │ ├── 07.JPG │ ├── 08.JPG │ ├── 09.JPG │ ├── 10.JPG │ ├── 11.JPG │ ├── 12.JPG │ ├── 13.JPG │ ├── 14.JPG │ ├── 15.JPG │ ├── 16.JPG │ ├── 17.JPG │ ├── 18.JPG │ ├── 19.JPG │ ├── 20.JPG │ ├── 21.JPG │ ├── 22.JPG │ ├── 23.JPG │ ├── 24.JPG │ ├── 25.JPG │ ├── 26.JPG │ ├── 27.JPG │ ├── 28.JPG │ ├── 29.JPG │ ├── 30.JPG │ ├── 31.JPG │ ├── 32.JPG │ ├── 33.JPG │ ├── 34.JPG │ ├── 35.JPG │ ├── 36.JPG │ ├── 37.JPG │ ├── 38.JPG │ ├── 39.JPG │ ├── 40.JPG │ ├── 41.JPG │ ├── 42.JPG │ ├── 43.JPG │ ├── 44.JPG │ ├── 45.JPG │ ├── 46.JPG │ ├── 47.JPG │ ├── 48.JPG │ ├── 49.JPG │ ├── 50.JPG │ ├── 51.JPG │ ├── 52.JPG │ ├── 53.JPG │ ├── 54.JPG │ ├── 55.JPG │ ├── agile │ └── agile.png │ ├── ddd │ ├── 00.png │ ├── 01.png │ ├── 02.png │ ├── 03.png │ ├── 04.png │ ├── 05.png │ ├── 06.png │ ├── 07.png │ ├── 08.png │ ├── 09.png │ ├── 10.png │ ├── 11.png │ ├── 12.png │ └── 13.png │ └── waterfall │ ├── 01.png │ └── waterfall.png ├── chapter12-빌더 └── README.md ├── chapter13-디자인 ├── 01_day │ ├── README.md │ └── index.html ├── 02_day │ ├── README.md │ ├── example │ │ ├── index.html │ │ └── main.css │ ├── index.html │ └── main.css ├── 03_day │ └── README.md ├── 04_day │ ├── 01.JPG │ ├── README.md │ └── util │ │ ├── reset_Eric_Meyers.css │ │ └── reset_Normalize.css ├── 05_day │ ├── README.md │ ├── background-attachment.html │ └── stiky.html ├── 06_day │ ├── 01.JPG │ ├── 02.JPG │ ├── 03.JPG │ ├── 04.JPG │ ├── 05.JPG │ ├── 06.JPG │ ├── 07.JPG │ ├── 08.JPG │ ├── 09.JPG │ ├── 10.JPG │ ├── 11.JPG │ ├── 12.JPG │ ├── README.md │ ├── align-content.html │ ├── align-items.html │ ├── align-self.html │ ├── backface-visibility.html │ ├── flex-basis.html │ ├── flex-grow.html │ ├── flex-wrap.html │ ├── flex.html │ ├── flex2.html │ ├── justify-content.html │ ├── order.html │ ├── perspective.html │ └── transform-style.html ├── 07_day │ ├── 01.jpg │ ├── 02.jpg │ ├── 03.jpg │ ├── 04.jpg │ ├── 05.jpg │ ├── 06.jpg │ ├── 07.jpg │ ├── 08.jpg │ ├── 09.jpg │ ├── 10.jpg │ ├── 11.jpg │ ├── 12.jpg │ ├── 13.jpg │ ├── 14.jpg │ ├── 15.jpg │ ├── 16.jpg │ ├── 17.jpg │ ├── 18.jpg │ ├── 19.jpg │ ├── 20.jpg │ ├── 21.jpg │ ├── 22.jpg │ ├── 23.jpg │ ├── 24.jpg │ ├── 25.jpg │ ├── 26.jpg │ ├── 27.jpg │ ├── README.md │ ├── auto-fill-fit.html │ ├── display.html │ ├── example.html │ ├── grid-auto-flow.html │ ├── grid-auto-row-column.html │ ├── grid-function.html │ ├── grid-row-column.html │ ├── grid-template-areas.html │ ├── grid-template-columns2.html │ ├── grid-template-rows2.html │ ├── grid-template.html │ └── row-column-gap.html ├── CSS_METHODOLOGY.md ├── README.md ├── design │ └── input │ │ ├── index.css │ │ └── index.html └── img │ └── 01.png ├── chapter14-협업과_좋은_개발자 └── README.md ├── etc01-시험_정리 ├── SQLD │ ├── README.md │ ├── images │ │ ├── SQL_001.jpg │ │ ├── SQL_002.jpg │ │ ├── SQL_003.jpg │ │ ├── SQL_004.jpg │ │ ├── SQL_005.jpg │ │ ├── SQL_006.jpg │ │ ├── SQL_007.jpg │ │ ├── SQL_008.jpg │ │ ├── SQL_009.jpg │ │ ├── SQL_010.jpg │ │ ├── SQL_011.jpg │ │ ├── SQL_012.jpg │ │ ├── SQL_013.jpg │ │ ├── SQL_014.jpg │ │ ├── SQL_015.jpg │ │ ├── SQL_016.jpg │ │ ├── SQL_017.jpg │ │ ├── SQL_018.jpg │ │ ├── SQL_019.jpg │ │ ├── SQL_020.jpg │ │ ├── SQL_021.jpg │ │ ├── SQL_022.jpg │ │ ├── SQL_023.jpg │ │ ├── SQL_024.jpg │ │ ├── SQL_025.jpg │ │ ├── SQL_026.jpg │ │ ├── SQL_027.jpg │ │ ├── SQL_028.jpg │ │ ├── SQL_029.jpg │ │ ├── SQL_030.jpg │ │ ├── SQL_031.jpg │ │ ├── SQL_032.jpg │ │ ├── SQL_033.jpg │ │ ├── SQL_034.jpg │ │ ├── SQL_035.jpg │ │ ├── SQL_036.jpg │ │ ├── SQL_037.jpg │ │ ├── SQL_038.jpg │ │ ├── SQL_039.jpg │ │ ├── SQL_040.jpg │ │ ├── SQL_041.jpg │ │ ├── SQL_042.jpg │ │ ├── SQL_043.jpg │ │ ├── SQL_044.jpg │ │ ├── SQL_045.jpg │ │ ├── SQL_046.jpg │ │ ├── SQL_047.jpg │ │ ├── SQL_048.jpg │ │ ├── SQL_049.jpg │ │ ├── SQL_050.jpg │ │ ├── SQL_051.jpg │ │ ├── SQL_052.jpg │ │ ├── SQL_053.jpg │ │ ├── SQL_054.jpg │ │ ├── SQL_055.jpg │ │ ├── SQL_056.jpg │ │ ├── SQL_057.jpg │ │ ├── SQL_058.jpg │ │ ├── SQL_059.jpg │ │ ├── SQL_060.jpg │ │ ├── SQL_061.jpg │ │ ├── SQL_062.jpg │ │ ├── SQL_063.jpg │ │ ├── SQL_064.jpg │ │ ├── SQL_065.jpg │ │ ├── SQL_066.jpg │ │ ├── SQL_067.jpg │ │ ├── SQL_068.jpg │ │ ├── SQL_069.jpg │ │ ├── SQL_070.jpg │ │ ├── SQL_071.jpg │ │ ├── SQL_072.jpg │ │ ├── SQL_073.jpg │ │ ├── SQL_074.jpg │ │ ├── SQL_075.jpg │ │ ├── SQL_076.jpg │ │ ├── SQL_077.jpg │ │ ├── SQL_078.jpg │ │ ├── SQL_079.jpg │ │ ├── SQL_080.jpg │ │ ├── SQL_081.jpg │ │ ├── SQL_082.jpg │ │ ├── SQL_083.jpg │ │ ├── SQL_084.jpg │ │ └── SQL_085.jpg │ ├── sqld_01.md │ ├── sqld_02.md │ ├── sqld_03.md │ ├── sqld_04.md │ ├── sqld_05.md │ └── sqld_06.md └── 정보처리기사 │ ├── README.md │ ├── exam.md │ ├── exam2.md │ ├── factorial.js │ ├── img │ └── exam_01.jpg │ └── 정보처리기사_키워드_요약.pdf ├── jest.config.js ├── jsconfig.json ├── package-lock.json ├── package.json └── tsconfig.json /.eslintignore: -------------------------------------------------------------------------------- 1 | # don't ever lint node_modules 2 | node_modules 3 | # don't lint build output (make sure it's set to your correct build folder name) 4 | dist -------------------------------------------------------------------------------- /.eslintrc: -------------------------------------------------------------------------------- 1 | { 2 | "env": { 3 | "browser": true, 4 | "es2021": true, 5 | "jest": true, 6 | "node": true // "module" is not defined. 에러가 발생하면 기입 7 | }, 8 | "extends": [ 9 | "eslint:recommended", 10 | "prettier", 11 | "plugin:@typescript-eslint/eslint-recommended", 12 | "plugin:@typescript-eslint/recommended" 13 | ], 14 | "plugins": ["prettier", "@typescript-eslint"], 15 | "parserOptions": { 16 | "parser": "@typescript-eslint/parser", 17 | "ecmaVersion": 12, 18 | "sourceType": "module" 19 | }, 20 | "rules": { 21 | "prettier/prettier": [ 22 | "error", 23 | { 24 | "singleQuote": true, 25 | "semi": true, 26 | "useTabs": false, 27 | "tabWidth": 2, 28 | "trailingComma": "all", 29 | "printWidth": 100, 30 | "bracketSpacing": true, 31 | "arrowParens": "avoid", 32 | "endOfLine": "auto" 33 | } 34 | ] 35 | } 36 | } -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | *.java linguist-vendored=true 2 | *.html linguist-vendored=true 3 | *.css linguist-vendored=true -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/feature.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: 내용 정리 및 추가 3 | about: 추가할 IT 지식 파편과 그 이유를 적는 이슈 템플릿 4 | title: "📝Docs: " 5 | labels: "" 6 | assignees: "" 7 | --- 8 | 9 | ## 🔎 개요 10 | 11 | - 12 | 13 |
14 | 15 | ## 💬 의견 16 | 17 | - 18 | 19 |
20 | 21 | ## 🌐 참고 자료 22 | 23 | - -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/typo.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: 오타 및 버그 수정 3 | about: 오타/버그에 대한 내용을 적는 이슈 템플릿 4 | title: "✍️FIXME: " 5 | labels: "" 6 | assignees: "" 7 | --- 8 | 9 | ## 🐞 오타 및 버그 10 | 11 | - 12 | 13 |
14 | 15 | ## 💡 해결 방법 / 의견 16 | 17 | - 18 | 19 |
20 | 21 | ## 🌐 참고 자료 22 | 23 | - -------------------------------------------------------------------------------- /.github/PULL_REQUEST_TEMPLATE.md: -------------------------------------------------------------------------------- 1 | ## 🔎 개요 2 | 3 | - closed # 4 | 5 |
6 | 7 | ## 📝 내용 8 | 9 | - 10 | 11 |
12 | 13 | ## 💬 의견 14 | 15 | - 16 | 17 |
18 | -------------------------------------------------------------------------------- /.vscode/markdown.json.code-snippets: -------------------------------------------------------------------------------- 1 | { 2 | "imgaes": { 3 | "prefix": "img", 4 | "body": [ 5 | "\r
\r\r", 6 | "
", 7 | "\r", 8 | "", 9 | "\r", 10 | "
", 11 | "\r
\r", 12 | ], 13 | "description": "이미지 파일 정리용" 14 | } 15 | } -------------------------------------------------------------------------------- /babel.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | presets: [ 3 | [ 4 | '@babel/preset-env', 5 | { 6 | targets: { 7 | node: 'current', 8 | }, 9 | }, 10 | ], 11 | ], 12 | }; 13 | -------------------------------------------------------------------------------- /chapter01-개발상식/img/concurrency_vs_parallelism_01.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/chapter01-개발상식/img/concurrency_vs_parallelism_01.jpg -------------------------------------------------------------------------------- /chapter01-개발상식/img/concurrency_vs_parallelism_02.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/chapter01-개발상식/img/concurrency_vs_parallelism_02.jpg -------------------------------------------------------------------------------- /chapter01-개발상식/img/flux.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/chapter01-개발상식/img/flux.png -------------------------------------------------------------------------------- /chapter01-개발상식/img/model1.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/chapter01-개발상식/img/model1.JPG -------------------------------------------------------------------------------- /chapter01-개발상식/img/model2.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/chapter01-개발상식/img/model2.JPG -------------------------------------------------------------------------------- /chapter01-개발상식/img/mvc.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/chapter01-개발상식/img/mvc.jpg -------------------------------------------------------------------------------- /chapter01-개발상식/img/mvp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/chapter01-개발상식/img/mvp.png -------------------------------------------------------------------------------- /chapter01-개발상식/img/mvvm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/chapter01-개발상식/img/mvvm.png -------------------------------------------------------------------------------- /chapter02-운영체제/img/Memory_Hierarchy.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/chapter02-운영체제/img/Memory_Hierarchy.jpg -------------------------------------------------------------------------------- /chapter02-운영체제/img/cache_hit.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/chapter02-운영체제/img/cache_hit.jpg -------------------------------------------------------------------------------- /chapter02-운영체제/img/control_hazard.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/chapter02-운영체제/img/control_hazard.JPG -------------------------------------------------------------------------------- /chapter02-운영체제/img/data_hazard.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/chapter02-운영체제/img/data_hazard.JPG -------------------------------------------------------------------------------- /chapter02-운영체제/img/kernel_interface.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/chapter02-운영체제/img/kernel_interface.jpg -------------------------------------------------------------------------------- /chapter02-운영체제/img/layered_architecture.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/chapter02-운영체제/img/layered_architecture.jpg -------------------------------------------------------------------------------- /chapter02-운영체제/img/mapping_table.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/chapter02-운영체제/img/mapping_table.jpg -------------------------------------------------------------------------------- /chapter02-운영체제/img/micro_architecture.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/chapter02-운영체제/img/micro_architecture.jpg -------------------------------------------------------------------------------- /chapter02-운영체제/img/monolithic_architecture.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/chapter02-운영체제/img/monolithic_architecture.jpg -------------------------------------------------------------------------------- /chapter02-운영체제/img/parallel_processing_01.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/chapter02-운영체제/img/parallel_processing_01.jpg -------------------------------------------------------------------------------- /chapter02-운영체제/img/parallel_processing_02.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/chapter02-운영체제/img/parallel_processing_02.jpg -------------------------------------------------------------------------------- /chapter02-운영체제/img/parallel_processing_03.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/chapter02-운영체제/img/parallel_processing_03.jpg -------------------------------------------------------------------------------- /chapter02-운영체제/img/parallel_processing_04.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/chapter02-운영체제/img/parallel_processing_04.jpg -------------------------------------------------------------------------------- /chapter02-운영체제/img/parallel_processing_05.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/chapter02-운영체제/img/parallel_processing_05.jpg -------------------------------------------------------------------------------- /chapter02-운영체제/img/parallel_processing_pipeline.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/chapter02-운영체제/img/parallel_processing_pipeline.JPG -------------------------------------------------------------------------------- /chapter02-운영체제/img/process.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/chapter02-운영체제/img/process.jpg -------------------------------------------------------------------------------- /chapter02-운영체제/img/storage_hierarchy.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/chapter02-운영체제/img/storage_hierarchy.jpg -------------------------------------------------------------------------------- /chapter02-운영체제/img/structural_hazard.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/chapter02-운영체제/img/structural_hazard.JPG -------------------------------------------------------------------------------- /chapter02-운영체제/img/thread.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/chapter02-운영체제/img/thread.jpg -------------------------------------------------------------------------------- /chapter03-네트워크/http-absolute-guide/proxy/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "proxy", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "index.js", 6 | "scripts": { 7 | "start": "node index.js" 8 | }, 9 | "keywords": [], 10 | "author": "", 11 | "license": "ISC", 12 | "devDependencies": { 13 | "express": "^4.18.1", 14 | "http-proxy-middleware": "^2.0.6", 15 | "morgan": "^1.10.0" 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /chapter03-네트워크/img/TCP-3-hands-shaking.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/chapter03-네트워크/img/TCP-3-hands-shaking.jpg -------------------------------------------------------------------------------- /chapter03-네트워크/img/TCP-4-hands-shaking.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/chapter03-네트워크/img/TCP-4-hands-shaking.png -------------------------------------------------------------------------------- /chapter03-네트워크/img/osi7layer_tcp-ip4layer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/chapter03-네트워크/img/osi7layer_tcp-ip4layer.png -------------------------------------------------------------------------------- /chapter04.0-언어/img/01-java_compile.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/chapter04.0-언어/img/01-java_compile.png -------------------------------------------------------------------------------- /chapter04.0-언어/img/02-JVM.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/chapter04.0-언어/img/02-JVM.png -------------------------------------------------------------------------------- /chapter04.5-프레임워크/img/react/16.3v+.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/chapter04.5-프레임워크/img/react/16.3v+.jpg -------------------------------------------------------------------------------- /chapter04.5-프레임워크/img/react/state.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/chapter04.5-프레임워크/img/react/state.jpg -------------------------------------------------------------------------------- /chapter04.5-프레임워크/img/springmvcstructure.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/chapter04.5-프레임워크/img/springmvcstructure.jpg -------------------------------------------------------------------------------- /chapter04.5-프레임워크/vue.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/chapter04.5-프레임워크/vue.md -------------------------------------------------------------------------------- /chapter05-데이터베이스/img/SQL_075.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/chapter05-데이터베이스/img/SQL_075.jpg -------------------------------------------------------------------------------- /chapter05-데이터베이스/img/SQL_076.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/chapter05-데이터베이스/img/SQL_076.jpg -------------------------------------------------------------------------------- /chapter05-데이터베이스/img/data-model-normalization.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/chapter05-데이터베이스/img/data-model-normalization.jpg -------------------------------------------------------------------------------- /chapter06-디자인패턴/README.md: -------------------------------------------------------------------------------- 1 | # 디자인 패턴 2 | > 소프트웨어 공학에서 `디자인 패턴(Design pattern)`은 프로그램 개발 시에 자주 부닥치는 애로 상황에 대한 일반적이고 재사용 가능한 추상화된 해결책을 일컫는 말입니다. 3 | 4 | 이번 장에서는 각 언어별 디자인 패턴을 알아봅니다. 깊진 않고 간략하게. 5 | 6 | ## Design Patteren for Java 7 | > 손을 놓은지 오래 된 언어라 업데이트가 되지 않습니다. 각 패턴의 간단한 소개, 예제 코드를 옮겨 놨습니다. 8 | 9 | 링크 [Link](https://github.com/InSeong-So/IT-Note/tree/master/chapter06-%EB%94%94%EC%9E%90%EC%9D%B8%ED%8C%A8%ED%84%B4/java#java%EC%9D%98-%EB%94%94%EC%9E%90%EC%9D%B8-%ED%8C%A8%ED%84%B4) 10 | 11 |
12 | 13 | ## Design Pattern for JavaScript 14 | > 간략하게 정리하기 위해서는 깊게 공부해야하므로, 아직 접하기 어려울 수 있습니다. 15 | 16 | 자바스크립트의 디자인패턴 항목은 차후 요약 및 쉬운 이해를 위해 재정리할 예정입니다. 17 | 18 | - ES6 디자인 패턴 정리 링크 [Link](https://github.com/InSeong-So/IT-Note/tree/master/chapter06-%EB%94%94%EC%9E%90%EC%9D%B8%ED%8C%A8%ED%84%B4/javascript/ES6) -------------------------------------------------------------------------------- /chapter06-디자인패턴/java/abstractFactory/Factory.java: -------------------------------------------------------------------------------- 1 | package java.abstractFactory; 2 | 3 | public abstract class Factory { 4 | 5 | public static Factory getFactory(String classname) { 6 | Factory factory = null; 7 | try { 8 | factory = (Factory) Class.forName(classname).newInstance(); 9 | } catch (ClassNotFoundException e) { 10 | System.out.println("클래스 " + classname + " 이 발견되지 않습니다."); 11 | } catch (Exception e) { 12 | e.printStackTrace(); 13 | } 14 | return factory; 15 | } 16 | 17 | public abstract Link createLink(String caption, String url); 18 | 19 | public abstract Tray createTray(String caption); 20 | 21 | public abstract Page createPage(String title, String author); 22 | 23 | } 24 | -------------------------------------------------------------------------------- /chapter06-디자인패턴/java/abstractFactory/Item.java: -------------------------------------------------------------------------------- 1 | package java.abstractFactory; 2 | 3 | public abstract class Item { 4 | 5 | protected String caption; 6 | 7 | public Item(String caption) { 8 | this.caption = caption; 9 | } 10 | 11 | public abstract String makeHTML(); 12 | } 13 | -------------------------------------------------------------------------------- /chapter06-디자인패턴/java/abstractFactory/Link.java: -------------------------------------------------------------------------------- 1 | package java.abstractFactory; 2 | 3 | public abstract class Link extends Item { 4 | 5 | protected String url; 6 | 7 | public Link(String caption, String url) { 8 | super(caption); 9 | this.url = url; 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /chapter06-디자인패턴/java/abstractFactory/Page.java: -------------------------------------------------------------------------------- 1 | package java.abstractFactory; 2 | 3 | import java.io.FileWriter; 4 | import java.io.Writer; 5 | import java.util.ArrayList; 6 | 7 | public abstract class Page { 8 | 9 | protected String title; 10 | protected String author; 11 | protected ArrayList content = new ArrayList(); 12 | 13 | public Page(String title, String author) { 14 | this.title = title; 15 | this.author = author; 16 | } 17 | 18 | public void add(Item item) { 19 | content.add(item); 20 | } 21 | 22 | public void output() { 23 | try { 24 | String filename = title + ".html"; 25 | Writer writer = new FileWriter(filename); 26 | writer.write(this.makeHTML()); 27 | writer.close(); 28 | System.out.println(filename + " 을 작성했습니다."); 29 | } catch (Exception e) { 30 | e.printStackTrace(); 31 | } 32 | } 33 | 34 | public abstract String makeHTML(); 35 | } 36 | -------------------------------------------------------------------------------- /chapter06-디자인패턴/java/abstractFactory/Tray.java: -------------------------------------------------------------------------------- 1 | package java.abstractFactory; 2 | 3 | import java.util.ArrayList; 4 | 5 | public abstract class Tray extends Item { 6 | 7 | protected ArrayList tray = new ArrayList(); 8 | 9 | public Tray(String caption) { 10 | super(caption); 11 | } 12 | 13 | public void add(Item item) { 14 | tray.add(item); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /chapter06-디자인패턴/java/adapter/extendsEx/Banner.java: -------------------------------------------------------------------------------- 1 | package java.adapter.extendsEx; 2 | 3 | public class Banner { 4 | private String string; 5 | 6 | public Banner(String string) { 7 | this.string = string; 8 | } 9 | 10 | public void showWithparen() { 11 | System.out.println("(" + string + ")"); 12 | } 13 | 14 | public void showWithAster() { 15 | System.out.println("*" + string + "*"); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /chapter06-디자인패턴/java/adapter/extendsEx/Main.java: -------------------------------------------------------------------------------- 1 | package java.adapter.extendsEx; 2 | 3 | public class Main { 4 | 5 | public static void main(String[] args) { 6 | Print p = new PrintBanner("Hello"); 7 | p.printWeak(); 8 | p.printStrong(); 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /chapter06-디자인패턴/java/adapter/extendsEx/Print.java: -------------------------------------------------------------------------------- 1 | package java.adapter.extendsEx; 2 | 3 | public interface Print { 4 | 5 | public abstract void printWeak(); 6 | 7 | public abstract void printStrong(); 8 | } 9 | -------------------------------------------------------------------------------- /chapter06-디자인패턴/java/adapter/extendsEx/PrintBanner.java: -------------------------------------------------------------------------------- 1 | package java.adapter.extendsEx; 2 | 3 | public class PrintBanner extends Banner implements Print { 4 | 5 | public PrintBanner(String string) { 6 | super(string); 7 | } 8 | 9 | @Override 10 | public void printWeak() { 11 | showWithparen(); 12 | } 13 | 14 | @Override 15 | public void printStrong() { 16 | showWithAster(); 17 | } 18 | 19 | } 20 | -------------------------------------------------------------------------------- /chapter06-디자인패턴/java/adapter/instanceEx/Banner.java: -------------------------------------------------------------------------------- 1 | package java.adapter.instanceEx; 2 | 3 | public class Banner { 4 | private String string; 5 | 6 | public Banner(String string) { 7 | this.string = string; 8 | } 9 | 10 | public void showWithparen() { 11 | System.out.println("(" + string + ")"); 12 | } 13 | 14 | public void showWithAster() { 15 | System.out.println("*" + string + "*"); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /chapter06-디자인패턴/java/adapter/instanceEx/Main.java: -------------------------------------------------------------------------------- 1 | package java.adapter.instanceEx; 2 | 3 | public class Main { 4 | 5 | public static void main(String[] args) { 6 | Print p = new PrintBanner("Hello"); 7 | p.printWeak(); 8 | p.printStrong(); 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /chapter06-디자인패턴/java/adapter/instanceEx/Print.java: -------------------------------------------------------------------------------- 1 | package java.adapter.instanceEx; 2 | 3 | public abstract class Print { 4 | public abstract void printWeak(); 5 | 6 | public abstract void printStrong(); 7 | 8 | } 9 | -------------------------------------------------------------------------------- /chapter06-디자인패턴/java/adapter/instanceEx/PrintBanner.java: -------------------------------------------------------------------------------- 1 | package java.adapter.instanceEx; 2 | 3 | public class PrintBanner extends Print { 4 | 5 | private Banner banner; 6 | 7 | public PrintBanner(String string) { 8 | this.banner = new Banner(string); 9 | } 10 | 11 | @Override 12 | public void printWeak() { 13 | banner.showWithparen(); 14 | } 15 | 16 | @Override 17 | public void printStrong() { 18 | banner.showWithAster(); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /chapter06-디자인패턴/java/bridge/CountDisplay.java: -------------------------------------------------------------------------------- 1 | package java.bridge; 2 | 3 | public class CountDisplay extends Display { 4 | public CountDisplay(DisplayImpl impl) { 5 | super(impl); 6 | } 7 | 8 | public void multiDisplay(int times) { 9 | open(); 10 | for (int i = 0; i < times; i++) { 11 | print(); 12 | } 13 | close(); 14 | } 15 | 16 | } 17 | -------------------------------------------------------------------------------- /chapter06-디자인패턴/java/bridge/Display.java: -------------------------------------------------------------------------------- 1 | package java.bridge; 2 | 3 | public class Display { 4 | 5 | private DisplayImpl impl; 6 | 7 | public Display(DisplayImpl impl) { 8 | this.impl = impl; 9 | } 10 | 11 | public void open() { 12 | impl.rawOpen(); 13 | } 14 | 15 | public void print() { 16 | impl.rawPrint(); 17 | } 18 | 19 | public void close() { 20 | impl.rawClose(); 21 | } 22 | 23 | public final void display() { 24 | open(); 25 | print(); 26 | close(); 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /chapter06-디자인패턴/java/bridge/DisplayImpl.java: -------------------------------------------------------------------------------- 1 | package java.bridge; 2 | 3 | public abstract class DisplayImpl { 4 | public abstract void rawOpen(); 5 | 6 | public abstract void rawPrint(); 7 | 8 | public abstract void rawClose(); 9 | 10 | } 11 | -------------------------------------------------------------------------------- /chapter06-디자인패턴/java/bridge/Main.java: -------------------------------------------------------------------------------- 1 | package java.bridge; 2 | 3 | public class Main { 4 | 5 | public static void main(String[] args) { 6 | Display d1 = new Display(new StringDisplayImpl("Hello, Korea.")); 7 | Display d2 = new CountDisplay(new StringDisplayImpl("Hello, World.")); 8 | CountDisplay d3 = new CountDisplay(new StringDisplayImpl("Hello, Universe.")); 9 | 10 | d1.display(); 11 | d2.display(); 12 | d3.display(); 13 | d3.multiDisplay(5); 14 | } 15 | } -------------------------------------------------------------------------------- /chapter06-디자인패턴/java/bridge/StringDisplayImpl.java: -------------------------------------------------------------------------------- 1 | package java.bridge; 2 | 3 | public class StringDisplayImpl extends DisplayImpl { 4 | 5 | private String string; 6 | private int width; 7 | 8 | public StringDisplayImpl(String string) { 9 | this.string = string; 10 | this.width = string.getBytes().length; 11 | } 12 | 13 | @Override 14 | public void rawOpen() { 15 | printLine(); 16 | } 17 | 18 | @Override 19 | public void rawPrint() { 20 | System.out.println("|" + string + "|"); 21 | } 22 | 23 | @Override 24 | public void rawClose() { 25 | printLine(); 26 | 27 | } 28 | 29 | private void printLine() { 30 | System.out.println("+"); 31 | for (int i = 0; i < width; i++) { 32 | System.out.println("-"); 33 | } 34 | System.out.println("+"); 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /chapter06-디자인패턴/java/builder/Builder.java: -------------------------------------------------------------------------------- 1 | package java.builder; 2 | 3 | public abstract class Builder { 4 | 5 | public abstract void makeTitle(String title); 6 | 7 | public abstract void makeString(String str); 8 | 9 | public abstract void makeItems(String[] items); 10 | 11 | public abstract void close(); 12 | } 13 | -------------------------------------------------------------------------------- /chapter06-디자인패턴/java/builder/Director.java: -------------------------------------------------------------------------------- 1 | package java.builder; 2 | 3 | public class Director { 4 | 5 | private Builder builder; 6 | 7 | public Director(Builder builder) { 8 | this.builder = builder; 9 | } 10 | 11 | public void construct() { 12 | builder.makeTitle("Greeting"); 13 | builder.makeString("아침과 낮에"); 14 | builder.makeItems(new String[] { "좋은 아침입니다.", "안녕하세요?", }); 15 | builder.makeString("밤에"); 16 | builder.makeItems(new String[] { "안녕하세요?", "잘 자요.", "안녕히 계세요." }); 17 | builder.close(); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /chapter06-디자인패턴/java/builder/TextBuilder.java: -------------------------------------------------------------------------------- 1 | package java.builder; 2 | 3 | public class TextBuilder extends Builder { 4 | 5 | private StringBuffer buffer = new StringBuffer(); 6 | 7 | @Override 8 | public void makeTitle(String title) { 9 | buffer.append("==================================\n"); 10 | buffer.append("『 " + title + " 』\n"); 11 | buffer.append("\n"); 12 | } 13 | 14 | @Override 15 | public void makeString(String str) { 16 | buffer.append('■' + str + "\n"); 17 | buffer.append("\n"); 18 | } 19 | 20 | @Override 21 | public void makeItems(String[] items) { 22 | for (int i = 0; i < items.length; i++) { 23 | buffer.append(" ● " + items[i] + "\n"); 24 | } 25 | buffer.append("\n"); 26 | } 27 | 28 | public void close() { 29 | buffer.append("==================================\n"); 30 | } 31 | 32 | public String getResult() { 33 | return buffer.toString(); 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /chapter06-디자인패턴/java/chain_of_responsibility/LimitSupport.java: -------------------------------------------------------------------------------- 1 | package java.chain_of_responsibility; 2 | 3 | public class LimitSupport extends Support { 4 | 5 | private int limit; 6 | 7 | public LimitSupport(String name, int limit) { 8 | super(name); 9 | this.limit = limit; 10 | } 11 | 12 | protected boolean resolve(Trouble trouble) { 13 | if (trouble.getNumber() < limit) 14 | return true; 15 | else 16 | return false; 17 | } 18 | 19 | } 20 | -------------------------------------------------------------------------------- /chapter06-디자인패턴/java/chain_of_responsibility/Main.java: -------------------------------------------------------------------------------- 1 | package java.chain_of_responsibility; 2 | 3 | public class Main { 4 | 5 | public static void main(String[] args) { 6 | Support alice = new NoSupport("Alice"); 7 | Support bob = new LimitSupport("Bob", 100); 8 | Support charlie = new SpecialSupport("Charlie", 429); 9 | Support diana = new LimitSupport("Diana", 200); 10 | Support elmo = new OddSupport("Elmo"); 11 | Support fred = new LimitSupport("Fred", 300); 12 | 13 | alice.setNext(bob).setNext(charlie).setNext(diana).setNext(elmo).setNext(fred); 14 | 15 | for (int i = 0; i < 500; i += 33) { 16 | alice.support(new Trouble(i)); 17 | } 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /chapter06-디자인패턴/java/chain_of_responsibility/NoSupport.java: -------------------------------------------------------------------------------- 1 | package java.chain_of_responsibility; 2 | 3 | public class NoSupport extends Support { 4 | 5 | public NoSupport(String name) { 6 | super(name); 7 | } 8 | 9 | protected boolean resolve(Trouble trouble) { 10 | return false; 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /chapter06-디자인패턴/java/chain_of_responsibility/OddSupport.java: -------------------------------------------------------------------------------- 1 | package java.chain_of_responsibility; 2 | 3 | public class OddSupport extends Support { 4 | 5 | public OddSupport(String name) { 6 | super(name); 7 | } 8 | 9 | protected boolean resolve(Trouble trouble) { 10 | if (trouble.getNumber() % 2 == 1) 11 | return true; 12 | else 13 | return false; 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /chapter06-디자인패턴/java/chain_of_responsibility/SpecialSupport.java: -------------------------------------------------------------------------------- 1 | package java.chain_of_responsibility; 2 | 3 | public class SpecialSupport extends Support { 4 | 5 | private int number; 6 | 7 | public SpecialSupport(String name, int number) { 8 | super(name); 9 | this.number = number; 10 | } 11 | 12 | protected boolean resolve(Trouble trouble) { 13 | if (trouble.getNumber() == number) 14 | return true; 15 | else 16 | return false; 17 | } 18 | 19 | } 20 | -------------------------------------------------------------------------------- /chapter06-디자인패턴/java/chain_of_responsibility/Support.java: -------------------------------------------------------------------------------- 1 | package java.chain_of_responsibility; 2 | 3 | public abstract class Support { 4 | 5 | private String name; 6 | private Support next; 7 | 8 | public Support(String name) { 9 | this.name = name; 10 | } 11 | 12 | public Support setNext(Support next) { 13 | this.next = next; 14 | return next; 15 | } 16 | 17 | public final void support(Trouble trouble) { 18 | if (resolve(trouble)) 19 | done(trouble); 20 | else if (next != null) 21 | next.support(trouble); 22 | else 23 | fail(trouble); 24 | } 25 | 26 | public String toString() { 27 | return "[" + name + "]"; 28 | } 29 | 30 | protected abstract boolean resolve(Trouble trouble); 31 | 32 | protected void done(Trouble trouble) { 33 | System.out.println(trouble + " is resolved by " + this + "."); 34 | } 35 | 36 | protected void fail(Trouble trouble) { 37 | System.out.println(trouble + " cannot be resolved."); 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /chapter06-디자인패턴/java/chain_of_responsibility/Trouble.java: -------------------------------------------------------------------------------- 1 | package java.chain_of_responsibility; 2 | 3 | public class Trouble { 4 | 5 | private int number; 6 | 7 | public Trouble(int number) { 8 | this.number = number; 9 | } 10 | 11 | public int getNumber() { 12 | return number; 13 | } 14 | 15 | public String toString() { 16 | return "[Trouble " + number + "]"; 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /chapter06-디자인패턴/java/command/Command.java: -------------------------------------------------------------------------------- 1 | package java.command; 2 | 3 | public interface Command { 4 | 5 | public abstract void execute(); 6 | } 7 | -------------------------------------------------------------------------------- /chapter06-디자인패턴/java/command/DrawCanvas.java: -------------------------------------------------------------------------------- 1 | package java.command; 2 | 3 | import java.awt.Canvas; 4 | import java.awt.Color; 5 | import java.awt.Graphics; 6 | 7 | public class DrawCanvas extends Canvas implements Drawable { 8 | 9 | private Color color = Color.RED; 10 | 11 | private int radius = 6; 12 | 13 | private MacroCommand history; 14 | 15 | public DrawCanvas(int width, int height, MacroCommand history) { 16 | setSize(width, height); 17 | setBackground(Color.white); 18 | this.history = history; 19 | } 20 | 21 | public void paint(Graphics g) { 22 | history.execute(); 23 | } 24 | 25 | @Override 26 | public void draw(int x, int y) { 27 | Graphics g = getGraphics(); 28 | g.setColor(color); 29 | g.fillOval(x - radius, y - radius, radius * 2, radius * 2); 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /chapter06-디자인패턴/java/command/DrawCommand.java: -------------------------------------------------------------------------------- 1 | package java.command; 2 | 3 | import java.awt.Point; 4 | 5 | public class DrawCommand implements Command { 6 | 7 | protected Drawable drawable; 8 | 9 | private Point position; 10 | 11 | public DrawCommand(Drawable drawable, Point position) { 12 | this.drawable = drawable; 13 | this.position = position; 14 | } 15 | 16 | @Override 17 | public void execute() { 18 | drawable.draw(position.x, position.y); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /chapter06-디자인패턴/java/command/Drawable.java: -------------------------------------------------------------------------------- 1 | package java.command; 2 | 3 | public interface Drawable { 4 | 5 | public abstract void draw(int x, int y); 6 | } 7 | -------------------------------------------------------------------------------- /chapter06-디자인패턴/java/command/MacroCommand.java: -------------------------------------------------------------------------------- 1 | package java.command; 2 | 3 | import java.util.Iterator; 4 | import java.util.Stack; 5 | 6 | public class MacroCommand implements Command { 7 | 8 | private Stack commands = new Stack(); 9 | 10 | @Override 11 | public void execute() { 12 | Iterator it = commands.iterator(); 13 | while (it.hasNext()) { 14 | ((Command) it.next()).execute(); 15 | } 16 | } 17 | 18 | public void append(Command cmd) { 19 | if (cmd != this) { 20 | commands.push(cmd); 21 | } 22 | } 23 | 24 | public void undo() { 25 | if (!commands.empty()) { 26 | commands.pop(); 27 | } 28 | } 29 | 30 | public void clear() { 31 | commands.clear(); 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /chapter06-디자인패턴/java/composite/Directory.java: -------------------------------------------------------------------------------- 1 | package java.composite; 2 | 3 | import java.util.ArrayList; 4 | import java.util.Iterator; 5 | 6 | public class Directory extends Entry { 7 | 8 | private String name; 9 | private ArrayList directory = new ArrayList(); 10 | 11 | public Directory(String name) { 12 | this.name = name; 13 | } 14 | 15 | @Override 16 | public String getName() { 17 | return name; 18 | } 19 | 20 | @Override 21 | public int getSize() { 22 | int size = 0; 23 | Iterator it = directory.iterator(); 24 | while (it.hasNext()) { 25 | Entry entry = (Entry) it.next(); 26 | size += entry.getSize(); 27 | } 28 | return size; 29 | } 30 | 31 | public Entry add(Entry entry) { 32 | directory.add(entry); 33 | return entry; 34 | } 35 | 36 | @Override 37 | protected void printList(String prefix) { 38 | // TODO Auto-generated method stub 39 | 40 | } 41 | 42 | } 43 | -------------------------------------------------------------------------------- /chapter06-디자인패턴/java/composite/Entry.java: -------------------------------------------------------------------------------- 1 | package java.composite; 2 | 3 | public abstract class Entry { 4 | 5 | public abstract String getName(); 6 | 7 | public abstract int getSize(); 8 | 9 | public Entry add(Entry entry) throws FileTreatmentException { 10 | throw new FileTreatmentException(); 11 | } 12 | 13 | public void printList() { 14 | printList(""); 15 | } 16 | 17 | protected abstract void printList(String prefix); 18 | 19 | public String toString() { 20 | return getName() + " (" + getSize() + ")"; 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /chapter06-디자인패턴/java/composite/File.java: -------------------------------------------------------------------------------- 1 | package java.composite; 2 | 3 | public class File extends Entry { 4 | private String name; 5 | private int size; 6 | 7 | public File(String name, int size) { 8 | this.name = name; 9 | this.size = size; 10 | } 11 | 12 | @Override 13 | public String getName() { 14 | return name; 15 | } 16 | 17 | @Override 18 | public int getSize() { 19 | return size; 20 | } 21 | 22 | @Override 23 | protected void printList(String prefix) { 24 | System.out.println(prefix + "/" + this); 25 | } 26 | 27 | } 28 | -------------------------------------------------------------------------------- /chapter06-디자인패턴/java/composite/FileTreatmentException.java: -------------------------------------------------------------------------------- 1 | package java.composite; 2 | 3 | public class FileTreatmentException extends RuntimeException { 4 | 5 | public FileTreatmentException() { 6 | 7 | } 8 | 9 | public FileTreatmentException(String msg) { 10 | super(msg); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /chapter06-디자인패턴/java/decorator/Border.java: -------------------------------------------------------------------------------- 1 | package java.decorator; 2 | 3 | public abstract class Border extends Display { 4 | 5 | protected Display display; 6 | 7 | protected Border(Display display) { 8 | this.display = display; 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /chapter06-디자인패턴/java/decorator/Display.java: -------------------------------------------------------------------------------- 1 | package java.decorator; 2 | 3 | public abstract class Display { 4 | 5 | public abstract int getColumns(); 6 | 7 | public abstract int getRows(); 8 | 9 | public abstract String getRowText(int row); 10 | 11 | public final void show() { 12 | for (int i = 0; i < getRows(); i++) { 13 | System.out.println(getRowText(i)); 14 | } 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /chapter06-디자인패턴/java/decorator/FullBorder.java: -------------------------------------------------------------------------------- 1 | package java.decorator; 2 | 3 | public class FullBorder extends Border { 4 | 5 | public FullBorder(Display display) { 6 | super(display); 7 | } 8 | 9 | @Override 10 | public int getColumns() { 11 | return 1 + display.getColumns() + 1; 12 | } 13 | 14 | @Override 15 | public int getRows() { 16 | return 1 + display.getRows() + 1; 17 | } 18 | 19 | @Override 20 | public String getRowText(int row) { 21 | if (row == 0) 22 | return "+" + makeLine('-', display.getColumns()) + "+"; 23 | else if (row == display.getRows() + 1) 24 | return "+" + makeLine('-', display.getColumns()) + "+"; 25 | else 26 | return "|" + display.getRowText(row - 1) + "|"; 27 | } 28 | 29 | private String makeLine(char ch, int columns) { 30 | 31 | StringBuffer sb = new StringBuffer(); 32 | for (int i = 0; i < columns; i++) { 33 | sb.append(ch); 34 | } 35 | 36 | return sb.toString(); 37 | } 38 | 39 | } 40 | -------------------------------------------------------------------------------- /chapter06-디자인패턴/java/decorator/Main.java: -------------------------------------------------------------------------------- 1 | package java.decorator; 2 | 3 | public class Main { 4 | 5 | public static void main(String[] args) { 6 | 7 | Display b1 = new StringDisplay("Hello, world!"); 8 | Display b2 = new SideBorder(b1, '#'); 9 | Display b3 = new FullBorder(b2); 10 | b1.show(); 11 | b2.show(); 12 | b3.show(); 13 | Display b4 = new SideBorder( 14 | new FullBorder(new FullBorder(new SideBorder(new FullBorder(new StringDisplay("안녕하세요.")), '*'))), '/'); 15 | b4.show(); 16 | 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /chapter06-디자인패턴/java/decorator/SideBorder.java: -------------------------------------------------------------------------------- 1 | package java.decorator; 2 | 3 | public class SideBorder extends Border { 4 | 5 | private char borderChar; 6 | 7 | public SideBorder(Display display, char borderChar) { 8 | super(display); 9 | this.borderChar = borderChar; 10 | } 11 | 12 | @Override 13 | public int getColumns() { 14 | return 1 + display.getColumns() + 1; 15 | } 16 | 17 | @Override 18 | public int getRows() { 19 | return display.getRows(); 20 | } 21 | 22 | @Override 23 | public String getRowText(int row) { 24 | return borderChar + display.getRowText(row) + borderChar; 25 | } 26 | 27 | } 28 | -------------------------------------------------------------------------------- /chapter06-디자인패턴/java/decorator/StringDisplay.java: -------------------------------------------------------------------------------- 1 | package java.decorator; 2 | 3 | public class StringDisplay extends Display { 4 | private String string; 5 | 6 | public StringDisplay(String string) { 7 | this.string = string; 8 | } 9 | 10 | @Override 11 | public int getColumns() { 12 | return string.getBytes().length; 13 | } 14 | 15 | @Override 16 | public int getRows() { 17 | return 1; 18 | } 19 | 20 | @Override 21 | public String getRowText(int row) { 22 | if (row == 0) 23 | return string; 24 | else 25 | return null; 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /chapter06-디자인패턴/java/design-pattern-category.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/chapter06-디자인패턴/java/design-pattern-category.jpg -------------------------------------------------------------------------------- /chapter06-디자인패턴/java/facade/Database.java: -------------------------------------------------------------------------------- 1 | package java.facade; 2 | 3 | import java.io.FileInputStream; 4 | import java.io.IOException; 5 | import java.util.Properties; 6 | 7 | public class Database { 8 | 9 | private Database() { 10 | 11 | } 12 | 13 | public static Properties getProperties(String dbname) { 14 | String filename = dbname + ".txt"; 15 | Properties prop = new Properties(); 16 | try { 17 | prop.load(new FileInputStream(filename)); 18 | } catch (IOException e) { 19 | System.out.println("Warning : " + filename + " is not found."); 20 | } 21 | return prop; 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /chapter06-디자인패턴/java/facade/Main.java: -------------------------------------------------------------------------------- 1 | package java.facade; 2 | 3 | public class Main { 4 | 5 | public static void main(String[] args) { 6 | PageMaker.makeWelcomePage("goflvhxj2547@naver.com", "welcome.html"); 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /chapter06-디자인패턴/java/facade/PageMaker.java: -------------------------------------------------------------------------------- 1 | package java.facade; 2 | 3 | import java.io.FileWriter; 4 | import java.io.IOException; 5 | import java.util.Properties; 6 | 7 | public class PageMaker { 8 | private PageMaker() { 9 | 10 | } 11 | 12 | public static void makeWelcomePage(String mailaddr, String filename) { 13 | try { 14 | Properties mailprop = Database.getProperties("maildata"); 15 | String username = mailprop.getProperty(mailaddr); 16 | HtmlWriter writer = new HtmlWriter(new FileWriter(filename)); 17 | writer.title("Welcome to " + username + "'s Page!"); 18 | writer.paragraph(username + "의 페이지에 오신 것을 환영합니다."); 19 | writer.paragraph("메일을 기다리고 있습니다."); 20 | writer.mailto(mailaddr, username); 21 | writer.close(); 22 | System.out.println(filename + " is created for " + mailaddr + " (" + username + ")"); 23 | } catch (IOException e) { 24 | e.printStackTrace(); 25 | } 26 | } 27 | 28 | } 29 | -------------------------------------------------------------------------------- /chapter06-디자인패턴/java/facade/maildata.txt: -------------------------------------------------------------------------------- 1 | goflvhxj2547@naver.com=Inseong 2 | kim@gmail.com=kim 3 | lee@naver.com=lee 4 | park@naver.com=park -------------------------------------------------------------------------------- /chapter06-디자인패턴/java/factoryMethod/Main.java: -------------------------------------------------------------------------------- 1 | package java.factoryMethod; 2 | 3 | import java.factoryMethod.framework.Factory; 4 | import java.factoryMethod.framework.Product; 5 | import java.factoryMethod.idcard.IDCardFactory; 6 | 7 | public class Main { 8 | 9 | public static void main(String[] args) { 10 | Factory factory = new IDCardFactory(); 11 | Product card1 = factory.create("세종대왕"); 12 | Product card2 = factory.create("이순신"); 13 | Product card3 = factory.create("강감찬"); 14 | card1.use(); 15 | card2.use(); 16 | card3.use(); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /chapter06-디자인패턴/java/factoryMethod/framework/Factory.java: -------------------------------------------------------------------------------- 1 | package java.factoryMethod.framework; 2 | 3 | public abstract class Factory { 4 | 5 | public final Product create(String owner) { 6 | Product p = createProduct(owner); 7 | registerProduct(p); 8 | return p; 9 | } 10 | 11 | protected abstract Product createProduct(String owner); 12 | 13 | protected abstract void registerProduct(Product product); 14 | } 15 | -------------------------------------------------------------------------------- /chapter06-디자인패턴/java/factoryMethod/framework/Product.java: -------------------------------------------------------------------------------- 1 | package java.factoryMethod.framework; 2 | 3 | public abstract class Product { 4 | 5 | public abstract void use(); 6 | } 7 | -------------------------------------------------------------------------------- /chapter06-디자인패턴/java/factoryMethod/idcard/IDCard.java: -------------------------------------------------------------------------------- 1 | package java.factoryMethod.idcard; 2 | 3 | import java.factoryMethod.framework.Product; 4 | 5 | public class IDCard extends Product { 6 | 7 | private String owner; 8 | 9 | IDCard(String owner) { 10 | System.out.println(owner + "의 카드를 만듭니다."); 11 | this.owner = owner; 12 | } 13 | 14 | public void use() { 15 | System.out.println(owner + "의 카드를 사용합니다."); 16 | } 17 | 18 | public String getOwner() { 19 | return owner; 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /chapter06-디자인패턴/java/factoryMethod/idcard/IDCardFactory.java: -------------------------------------------------------------------------------- 1 | package java.factoryMethod.idcard; 2 | 3 | import java.util.ArrayList; 4 | import java.util.List; 5 | 6 | import java.factoryMethod.framework.Factory; 7 | import java.factoryMethod.framework.Product; 8 | 9 | public class IDCardFactory extends Factory { 10 | 11 | private List owners = new ArrayList<>(); 12 | 13 | @Override 14 | protected Product createProduct(String owner) { 15 | return new IDCard(owner); 16 | } 17 | 18 | @Override 19 | protected void registerProduct(Product product) { 20 | owners.add(((IDCard) product).getOwner()); 21 | } 22 | 23 | public List getOwners() { 24 | return owners; 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /chapter06-디자인패턴/java/flyweight/BigChar.java: -------------------------------------------------------------------------------- 1 | package java.flyweight; 2 | 3 | import java.io.BufferedReader; 4 | import java.io.FileReader; 5 | import java.io.IOException; 6 | 7 | public class BigChar { 8 | 9 | private char charname; 10 | 11 | private String fontdata; 12 | 13 | public BigChar(char charname) { 14 | this.charname = charname; 15 | 16 | try { 17 | BufferedReader reader = new BufferedReader(new FileReader("big" + charname + ".txt")); 18 | String line; 19 | StringBuffer buf = new StringBuffer(); 20 | while ((line = reader.readLine()) != null) { 21 | buf.append(line); 22 | buf.append("\n"); 23 | } 24 | reader.close(); 25 | this.fontdata = buf.toString(); 26 | } catch (IOException e) { 27 | this.fontdata = charname + "?"; 28 | } 29 | } 30 | 31 | public void print() { 32 | System.out.println(fontdata); 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /chapter06-디자인패턴/java/flyweight/BigCharFactory.java: -------------------------------------------------------------------------------- 1 | package java.flyweight; 2 | 3 | import java.util.HashMap; 4 | 5 | public class BigCharFactory { 6 | 7 | private HashMap pool = new HashMap(); 8 | 9 | private static BigCharFactory singleton = new BigCharFactory(); 10 | 11 | private BigCharFactory() { 12 | } 13 | 14 | public static BigCharFactory getInstance() { 15 | return singleton; 16 | } 17 | 18 | public synchronized BigChar getBigChar(char charname) { 19 | BigChar bc = (BigChar) pool.get("" + charname); 20 | if (bc == null) { 21 | bc = new BigChar(charname); 22 | pool.put("" + charname, bc); 23 | } 24 | 25 | return bc; 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /chapter06-디자인패턴/java/flyweight/BigString.java: -------------------------------------------------------------------------------- 1 | package java.flyweight; 2 | 3 | public class BigString { 4 | 5 | private BigChar[] bigchars; 6 | 7 | public BigString(String string) { 8 | bigchars = new BigChar[string.length()]; 9 | BigCharFactory factory = BigCharFactory.getInstance(); 10 | for (int i = 0; i < bigchars.length; i++) { 11 | bigchars[i] = factory.getBigChar(string.charAt(i)); 12 | } 13 | } 14 | 15 | public void print() { 16 | for (int i = 0; i < bigchars.length; i++) { 17 | bigchars[i].print(); 18 | } 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /chapter06-디자인패턴/java/flyweight/Main.java: -------------------------------------------------------------------------------- 1 | package java.flyweight; 2 | 3 | public class Main { 4 | 5 | public static void main(String[] args) { 6 | if (args.length == 0) { 7 | System.out.println("Usage: java Main digits"); 8 | System.out.println("Example: java Main 1212123"); 9 | System.exit(0); 10 | } 11 | BigString bs = new BigString(args[0]); 12 | bs.print(); 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /chapter06-디자인패턴/java/interpreter/CommandListNode.java: -------------------------------------------------------------------------------- 1 | package java.interpreter; 2 | 3 | import java.util.ArrayList; 4 | 5 | public class CommandListNode extends Node { 6 | 7 | private ArrayList list = new ArrayList(); 8 | 9 | @Override 10 | public void parse(Context context) throws ParseException { 11 | while (true) { 12 | if (context.currentToken() == null) { 13 | throw new ParseException("Missing 'end'"); 14 | } else if (context.currentToken().equals("end")) { 15 | context.skipToken("end"); 16 | break; 17 | } else { 18 | Node CommandNode = new CommandListNode(); 19 | CommandNode.parse(context); 20 | list.add(CommandNode); 21 | } 22 | } 23 | } 24 | 25 | public String toString() { 26 | return list.toString(); 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /chapter06-디자인패턴/java/interpreter/CommandNode.java: -------------------------------------------------------------------------------- 1 | package java.interpreter; 2 | 3 | public class CommandNode extends Node { 4 | 5 | private Node node; 6 | 7 | @Override 8 | public void parse(Context context) throws ParseException { 9 | if (context.currentToken().equals("repeat")) { 10 | node = new RepeatCommandNode(); 11 | node.parse(context); 12 | } else { 13 | node = new PrimitiveCommandNode(); 14 | node.parse(context); 15 | } 16 | } 17 | 18 | public String toString() { 19 | return node.toString(); 20 | } 21 | 22 | } 23 | -------------------------------------------------------------------------------- /chapter06-디자인패턴/java/interpreter/Main.java: -------------------------------------------------------------------------------- 1 | package java.interpreter; 2 | 3 | import java.io.BufferedReader; 4 | import java.io.FileReader; 5 | 6 | public class Main { 7 | 8 | public static void main(String[] args) { 9 | try { 10 | BufferedReader reader = new BufferedReader(new FileReader("program.txt")); 11 | String text; 12 | while ((text = reader.readLine()) != null) { 13 | System.out.println("text = '\'" + text + "'\'"); 14 | Node node = new ProgramNode(); 15 | node.parse(new Context(text)); 16 | System.out.println("node = " + node); 17 | } 18 | } catch (Exception e) { 19 | e.printStackTrace(); 20 | } 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /chapter06-디자인패턴/java/interpreter/Node.java: -------------------------------------------------------------------------------- 1 | package java.interpreter; 2 | 3 | public abstract class Node { 4 | 5 | public abstract void parse(Context context) throws ParseException; 6 | } 7 | -------------------------------------------------------------------------------- /chapter06-디자인패턴/java/interpreter/ParseException.java: -------------------------------------------------------------------------------- 1 | package java.interpreter; 2 | 3 | public class ParseException extends Exception { 4 | 5 | public ParseException(String msg) { 6 | super(msg); 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /chapter06-디자인패턴/java/interpreter/PrimitiveCommandNode.java: -------------------------------------------------------------------------------- 1 | package java.interpreter; 2 | 3 | public class PrimitiveCommandNode extends Node { 4 | 5 | private String name; 6 | 7 | @Override 8 | public void parse(Context context) throws ParseException { 9 | name = context.currentToken(); 10 | context.skipToken(name); 11 | if (!name.equals("go") && !name.equals("right") && !name.equals("left")) { 12 | throw new ParseException(name + " is undefined"); 13 | } 14 | } 15 | 16 | public String toString() { 17 | return name; 18 | } 19 | 20 | } 21 | -------------------------------------------------------------------------------- /chapter06-디자인패턴/java/interpreter/ProgramNode.java: -------------------------------------------------------------------------------- 1 | package java.interpreter; 2 | 3 | public class ProgramNode extends Node { 4 | 5 | private Node commandListNode; 6 | 7 | @Override 8 | public void parse(Context context) throws ParseException { 9 | context.skipToken("program"); 10 | commandListNode = new CommandListNode(); 11 | commandListNode.parse(context); 12 | } 13 | 14 | public String toString() { 15 | return "[program " + commandListNode + "]"; 16 | } 17 | 18 | } 19 | -------------------------------------------------------------------------------- /chapter06-디자인패턴/java/interpreter/RepeatCommandNode.java: -------------------------------------------------------------------------------- 1 | package java.interpreter; 2 | 3 | public class RepeatCommandNode extends Node { 4 | 5 | private int number; 6 | private Node commandListNode; 7 | 8 | @Override 9 | public void parse(Context context) throws ParseException { 10 | context.skipToken("repeat"); 11 | number = context.currentNumber(); 12 | context.nextToken(); 13 | commandListNode = new CommandListNode(); 14 | commandListNode.parse(context); 15 | } 16 | 17 | public String toString() { 18 | return "[repeat " + number + " " + commandListNode + "]"; 19 | } 20 | 21 | } 22 | -------------------------------------------------------------------------------- /chapter06-디자인패턴/java/iterator/Aggregate.java: -------------------------------------------------------------------------------- 1 | package java.iterator; 2 | 3 | public interface Aggregate { 4 | 5 | public abstract Iterator iterator(); 6 | } 7 | -------------------------------------------------------------------------------- /chapter06-디자인패턴/java/iterator/Book.java: -------------------------------------------------------------------------------- 1 | package java.iterator; 2 | 3 | public class Book { 4 | 5 | private String name; 6 | 7 | public Book(String name) { 8 | this.name = name; 9 | } 10 | 11 | public String getName() { 12 | return name; 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /chapter06-디자인패턴/java/iterator/BookShelf.java: -------------------------------------------------------------------------------- 1 | package java.iterator; 2 | 3 | public class BookShelf implements Aggregate { 4 | 5 | private Book[] books; 6 | private int last = 0; 7 | 8 | public BookShelf(int maxsize) { 9 | this.books = new Book[maxsize]; 10 | } 11 | 12 | public Book getBookAt(int index) { 13 | return books[index]; 14 | } 15 | 16 | public void appendBook(Book book) { 17 | this.books[last] = book; 18 | last++; 19 | } 20 | 21 | public int getLength() { 22 | return last; 23 | } 24 | 25 | @Override 26 | public Iterator iterator() { 27 | return new BookShelfIterator(this); 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /chapter06-디자인패턴/java/iterator/BookShelfIterator.java: -------------------------------------------------------------------------------- 1 | package java.iterator; 2 | 3 | public class BookShelfIterator implements Iterator { 4 | 5 | private BookShelf bookShelf; 6 | private int index; 7 | 8 | public BookShelfIterator(BookShelf bookShelf) { 9 | this.bookShelf = bookShelf; 10 | this.index = 0; 11 | } 12 | 13 | @Override 14 | public boolean hasNext() { 15 | if (index < bookShelf.getLength()) { 16 | return true; 17 | } else { 18 | return false; 19 | } 20 | } 21 | 22 | @Override 23 | public Object next() { 24 | Book book = bookShelf.getBookAt(index); 25 | index++; 26 | return book; 27 | } 28 | 29 | } 30 | -------------------------------------------------------------------------------- /chapter06-디자인패턴/java/iterator/Iterator.java: -------------------------------------------------------------------------------- 1 | package designPattern.chapter01.iterator; 2 | 3 | public interface Iterator { 4 | 5 | public abstract boolean hasNext(); 6 | 7 | public abstract Object next(); 8 | } 9 | -------------------------------------------------------------------------------- /chapter06-디자인패턴/java/iterator/Main.java: -------------------------------------------------------------------------------- 1 | package java.iterator; 2 | 3 | public class Main { 4 | 5 | public static void main(String[] args) { 6 | 7 | BookShelf bookShelf = new BookShelf(4); 8 | bookShelf.appendBook(new Book("Around the World in 80 Days")); 9 | bookShelf.appendBook(new Book("Bible")); 10 | bookShelf.appendBook(new Book("Cinderella")); 11 | bookShelf.appendBook(new Book("Daddy-Long-Legs")); 12 | 13 | Iterator it = bookShelf.iterator(); 14 | while (it.hasNext()) { 15 | Book book = (Book) it.next(); 16 | System.out.println(book.getName()); 17 | } 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /chapter06-디자인패턴/java/mediator/Colleague.java: -------------------------------------------------------------------------------- 1 | package java.mediator; 2 | 3 | public interface Colleague { 4 | 5 | public abstract void setMediator(Mediator mediator); 6 | 7 | public abstract void setColleagueEnabled(boolean enabled); 8 | } 9 | -------------------------------------------------------------------------------- /chapter06-디자인패턴/java/mediator/ColleagueButton.java: -------------------------------------------------------------------------------- 1 | package java.mediator; 2 | 3 | import java.awt.Button; 4 | 5 | public class ColleagueButton extends Button implements Colleague { 6 | 7 | private Mediator mediator; 8 | 9 | public ColleagueButton(String caption) { 10 | super(caption); 11 | } 12 | 13 | @Override 14 | public void setMediator(Mediator mediator) { 15 | this.mediator = mediator; 16 | } 17 | 18 | @Override 19 | public void setColleagueEnabled(boolean enabled) { 20 | setEnabled(enabled); 21 | } 22 | 23 | } 24 | -------------------------------------------------------------------------------- /chapter06-디자인패턴/java/mediator/ColleagueCheckbox.java: -------------------------------------------------------------------------------- 1 | package java.mediator; 2 | 3 | import java.awt.Checkbox; 4 | import java.awt.CheckboxGroup; 5 | import java.awt.event.ItemEvent; 6 | import java.awt.event.ItemListener; 7 | 8 | public class ColleagueCheckbox extends Checkbox implements ItemListener, Colleague { 9 | 10 | private Mediator mediator; 11 | 12 | public ColleagueCheckbox(String caption, CheckboxGroup group, boolean state) { 13 | 14 | super(caption, group, state); 15 | } 16 | 17 | @Override 18 | public void setMediator(Mediator mediator) { 19 | this.mediator = mediator; 20 | 21 | } 22 | 23 | @Override 24 | public void setColleagueEnabled(boolean enabled) { 25 | setEnabled(enabled); 26 | 27 | } 28 | 29 | @Override 30 | public void itemStateChanged(ItemEvent e) { 31 | mediator.colleagueChanged(); 32 | 33 | } 34 | 35 | } 36 | -------------------------------------------------------------------------------- /chapter06-디자인패턴/java/mediator/ColleagueTextField.java: -------------------------------------------------------------------------------- 1 | package java.mediator; 2 | 3 | import java.awt.Color; 4 | import java.awt.TextField; 5 | import java.awt.event.TextEvent; 6 | import java.awt.event.TextListener; 7 | 8 | public class ColleagueTextField extends TextField implements TextListener, Colleague { 9 | 10 | private Mediator mediator; 11 | 12 | public ColleagueTextField(String text, int columns) { 13 | super(text, columns); 14 | } 15 | 16 | @Override 17 | public void setMediator(Mediator mediator) { 18 | this.mediator = mediator; 19 | 20 | } 21 | 22 | @Override 23 | public void setColleagueEnabled(boolean enabled) { 24 | setEnabled(enabled); 25 | setBackground(enabled ? Color.white : Color.LIGHT_GRAY); 26 | 27 | } 28 | 29 | @Override 30 | public void textValueChanged(TextEvent e) { 31 | mediator.colleagueChanged(); 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /chapter06-디자인패턴/java/mediator/Main.java: -------------------------------------------------------------------------------- 1 | package java.mediator; 2 | 3 | public class Main { 4 | 5 | public static void main(String[] args) { 6 | new LoginFrame("Mediator Sample"); 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /chapter06-디자인패턴/java/mediator/Mediator.java: -------------------------------------------------------------------------------- 1 | package java.mediator; 2 | 3 | public interface Mediator { 4 | 5 | public abstract void createColleagues(); 6 | 7 | public abstract void colleagueChanged(); 8 | } 9 | -------------------------------------------------------------------------------- /chapter06-디자인패턴/java/memento/Main.java: -------------------------------------------------------------------------------- 1 | package java.memento; 2 | 3 | public class Main { 4 | 5 | public static void main(String[] args) { 6 | Gamer gamer = new Gamer(100); 7 | Memento memento = gamer.createMemento(); 8 | for (int i = 0; i < 100; i++) { 9 | System.out.println("====" + i); 10 | System.out.println("현상 : " + gamer); 11 | 12 | gamer.bet(); 13 | 14 | System.out.println("소지금은 " + gamer.getMoney() + "원이 되었습니다."); 15 | 16 | if (gamer.getMoney() > memento.getMoney()) { 17 | System.out.println(" (많이 증가했으므로 현재의 상태를 저장하자)"); 18 | memento = gamer.createMemento(); 19 | } else if (gamer.getMoney() < memento.getMoney() / 2) { 20 | System.out.println(" (많이 감소했으므로 이전의 상태로 복원하자)"); 21 | gamer.restoreMemento(memento); 22 | } 23 | 24 | try { 25 | Thread.sleep(1000); 26 | } catch (InterruptedException e) { 27 | } 28 | System.out.println(""); 29 | } 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /chapter06-디자인패턴/java/memento/Memento.java: -------------------------------------------------------------------------------- 1 | package java.memento; 2 | 3 | import java.util.ArrayList; 4 | import java.util.List; 5 | 6 | public class Memento { 7 | 8 | int money; 9 | ArrayList fruits; 10 | 11 | public int getMoney() { 12 | return money; 13 | } 14 | 15 | Memento(int money) { 16 | this.money = money; 17 | this.fruits = new ArrayList(); 18 | } 19 | 20 | void addFruit(String fruit) { 21 | fruits.add(fruit); 22 | } 23 | 24 | List getFruits() { 25 | return (List) fruits.clone(); 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /chapter06-디자인패턴/java/observer/DigitObserver.java: -------------------------------------------------------------------------------- 1 | package java.observer; 2 | 3 | public class DigitObserver implements Observer { 4 | 5 | @Override 6 | public void update(NumberGenerator generator) { 7 | System.out.println("DigitObserver: " + generator.getNumber()); 8 | 9 | try { 10 | Thread.sleep(100); 11 | } catch (InterruptedException e) { 12 | } 13 | } 14 | 15 | } 16 | -------------------------------------------------------------------------------- /chapter06-디자인패턴/java/observer/GraphObserver.java: -------------------------------------------------------------------------------- 1 | package java.observer; 2 | 3 | public class GraphObserver implements Observer { 4 | 5 | @Override 6 | public void update(NumberGenerator generator) { 7 | System.out.print("GraphObserver: "); 8 | int count = generator.getNumber(); 9 | for (int i = 0; i < count; i++) { 10 | System.out.println("*"); 11 | } 12 | System.out.println(""); 13 | try { 14 | Thread.sleep(100); 15 | } catch (InterruptedException e) { 16 | } 17 | } 18 | 19 | } 20 | -------------------------------------------------------------------------------- /chapter06-디자인패턴/java/observer/Main.java: -------------------------------------------------------------------------------- 1 | package java.observer; 2 | 3 | public class Main { 4 | 5 | public static void main(String[] args) { 6 | NumberGenerator generator = new RandomNumberGenerator(); 7 | Observer observer1 = new DigitObserver(); 8 | Observer observer2 = new GraphObserver(); 9 | generator.addObserver(observer1); 10 | generator.addObserver(observer2); 11 | generator.excute(); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /chapter06-디자인패턴/java/observer/NumberGenerator.java: -------------------------------------------------------------------------------- 1 | package java.observer; 2 | 3 | import java.util.ArrayList; 4 | import java.util.Iterator; 5 | 6 | public abstract class NumberGenerator { 7 | 8 | private ArrayList observers = new ArrayList(); 9 | 10 | public void addObserver(Observer observer) { 11 | observers.add(observer); 12 | } 13 | 14 | public void deleteObserver(Observer observer) { 15 | observers.remove(observer); 16 | } 17 | 18 | public void notifyObservers() { 19 | Iterator it = observers.iterator(); 20 | while (it.hasNext()) { 21 | Observer o = (Observer) it.next(); 22 | o.update(this); 23 | } 24 | } 25 | 26 | public abstract int getNumber(); 27 | 28 | public abstract void excute(); 29 | 30 | } 31 | -------------------------------------------------------------------------------- /chapter06-디자인패턴/java/observer/Observer.java: -------------------------------------------------------------------------------- 1 | package java.observer; 2 | 3 | public interface Observer { 4 | 5 | public abstract void update(NumberGenerator generator); 6 | } 7 | -------------------------------------------------------------------------------- /chapter06-디자인패턴/java/observer/RandomNumberGenerator.java: -------------------------------------------------------------------------------- 1 | package java.observer; 2 | 3 | import java.util.Random; 4 | 5 | public class RandomNumberGenerator extends NumberGenerator { 6 | 7 | private Random random = new Random(); 8 | 9 | private int number; 10 | 11 | public int getNumber() { 12 | return number; 13 | } 14 | 15 | @Override 16 | public void excute() { 17 | for (int i = 0; i < 20; i++) { 18 | number = random.nextInt(50); 19 | notifyObservers(); 20 | } 21 | } 22 | 23 | } 24 | -------------------------------------------------------------------------------- /chapter06-디자인패턴/java/prototype/Main.java: -------------------------------------------------------------------------------- 1 | package java.prototype; 2 | 3 | public class Main { 4 | 5 | public static void main(String[] args) { 6 | Manager manager = new Manager(); 7 | UnderlinePen upen = new UnderlinePen('~'); 8 | MessageBox mbox = new MessageBox('*'); 9 | MessageBox sbox = new MessageBox('/'); 10 | manager.register("strong message", upen); 11 | manager.register("warning box", mbox); 12 | manager.register("slash box", sbox); 13 | 14 | Product p1 = manager.create("strong message"); 15 | p1.use("Hello, world!"); 16 | Product p2 = manager.create("warning box"); 17 | p2.use("Hello, world!"); 18 | Product p3 = manager.create("slash box"); 19 | p3.use("Hello, world!"); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /chapter06-디자인패턴/java/prototype/Manager.java: -------------------------------------------------------------------------------- 1 | package java.prototype; 2 | 3 | import java.util.HashMap; 4 | 5 | public class Manager { 6 | 7 | private HashMap showcase = new HashMap<>(); 8 | 9 | public void register(String name, Product proto) { 10 | showcase.put(name, proto); 11 | } 12 | 13 | public Product create(String protoname) { 14 | Product p = (Product) showcase.get(protoname); 15 | return p.createClone(); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /chapter06-디자인패턴/java/prototype/MessageBox.java: -------------------------------------------------------------------------------- 1 | package java.prototype; 2 | 3 | public class MessageBox implements Product { 4 | private char decochar; 5 | 6 | public MessageBox(char decochar) { 7 | this.decochar = decochar; 8 | } 9 | 10 | public void use(String s) { 11 | int length = s.getBytes().length; 12 | for (int i = 0; i < length + 4; i++) { 13 | System.out.print(decochar); 14 | } 15 | System.out.println(""); 16 | System.out.println(decochar + " " + s + " " + decochar); 17 | for (int i = 0; i < length + 4; i++) { 18 | System.out.print(decochar); 19 | } 20 | System.out.println(""); 21 | } 22 | 23 | public Product createClone() { 24 | Product p = null; 25 | try { 26 | p = (Product) clone(); 27 | } catch (CloneNotSupportedException e) { 28 | e.printStackTrace(); 29 | } 30 | return p; 31 | } 32 | 33 | } 34 | -------------------------------------------------------------------------------- /chapter06-디자인패턴/java/prototype/Product.java: -------------------------------------------------------------------------------- 1 | package java.prototype; 2 | 3 | public interface Product extends Cloneable { 4 | 5 | public abstract void use(String s); 6 | 7 | public abstract Product createClone(); 8 | } 9 | -------------------------------------------------------------------------------- /chapter06-디자인패턴/java/prototype/UnderlinePen.java: -------------------------------------------------------------------------------- 1 | package java.prototype; 2 | 3 | public class UnderlinePen implements Product { 4 | 5 | private char ulchar; 6 | 7 | public UnderlinePen(char ulchar) { 8 | this.ulchar = ulchar; 9 | } 10 | 11 | public void use(String s) { 12 | int length = s.getBytes().length; 13 | System.out.println("\"" + s + "\""); 14 | System.out.print(" "); 15 | for (int i = 0; i < length; i++) { 16 | System.out.print(ulchar); 17 | } 18 | System.out.println(" "); 19 | } 20 | 21 | public Product createClone() { 22 | Product p = null; 23 | try { 24 | p = (Product) clone(); 25 | } catch (CloneNotSupportedException e) { 26 | e.printStackTrace(); 27 | } 28 | return p; 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /chapter06-디자인패턴/java/proxy/Main.java: -------------------------------------------------------------------------------- 1 | package java.proxy; 2 | 3 | public class Main { 4 | 5 | public static void main(String[] args) { 6 | Printable p = new PrinterProxy("Alice"); 7 | System.out.println("이름은 현재 " + p.getPrinterName() + "입니다."); 8 | p.setPrinterName("Bob"); 9 | System.out.println("이름은 현재 " + p.getPrinterName() + "입니다."); 10 | p.print("Hello, world."); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /chapter06-디자인패턴/java/proxy/Printable.java: -------------------------------------------------------------------------------- 1 | package java.proxy; 2 | 3 | public interface Printable { 4 | 5 | public abstract void setPrinterName(String name); 6 | 7 | public abstract String getPrinterName(); 8 | 9 | public abstract void print(String string); 10 | } 11 | -------------------------------------------------------------------------------- /chapter06-디자인패턴/java/proxy/Printer.java: -------------------------------------------------------------------------------- 1 | package java.proxy; 2 | 3 | public class Printer implements Printable { 4 | 5 | private String name; 6 | 7 | public Printer() { 8 | heavyJob("Printer의 인스턴스를 생성 중"); 9 | } 10 | 11 | public Printer(String name) { 12 | this.name = name; 13 | heavyJob("Printer의 인스턴스(" + name + ")을 생성 중"); 14 | } 15 | 16 | @Override 17 | public void setPrinterName(String name) { 18 | this.name = name; 19 | } 20 | 21 | @Override 22 | public String getPrinterName() { 23 | return name; 24 | } 25 | 26 | @Override 27 | public void print(String string) { 28 | System.out.println("=== " + name + " ==="); 29 | System.out.println(string); 30 | } 31 | 32 | private void heavyJob(String msg) { 33 | System.out.print(msg); 34 | for (int i = 0; i < 5; i++) { 35 | try { 36 | Thread.sleep(1000); 37 | } catch (InterruptedException e) { 38 | } 39 | System.out.print("."); 40 | } 41 | System.out.println("완료."); 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /chapter06-디자인패턴/java/proxy/PrinterProxy.java: -------------------------------------------------------------------------------- 1 | package java.proxy; 2 | 3 | public class PrinterProxy implements Printable { 4 | 5 | private String name; 6 | private Printer real; 7 | 8 | public PrinterProxy() { 9 | 10 | } 11 | 12 | public PrinterProxy(String name) { 13 | this.name = name; 14 | } 15 | 16 | @Override 17 | public synchronized void setPrinterName(String name) { 18 | if (real != null) { 19 | real.setPrinterName(name); 20 | } 21 | this.name = name; 22 | } 23 | 24 | @Override 25 | public String getPrinterName() { 26 | return name; 27 | } 28 | 29 | @Override 30 | public void print(String string) { 31 | realize(); 32 | real.print(string); 33 | } 34 | 35 | private synchronized void realize() { 36 | if (real == null) { 37 | real = new Printer(name); 38 | } 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /chapter06-디자인패턴/java/singleton/Main.java: -------------------------------------------------------------------------------- 1 | package java.singleton; 2 | 3 | public class Main { 4 | 5 | public static void main(String[] args) { 6 | System.out.println("Start."); 7 | Singleton obj1 = Singleton.getInstance(); 8 | Singleton obj2 = Singleton.getInstance(); 9 | if (obj1 == obj2) { 10 | System.out.println("같은 인스턴스입니다."); 11 | } else { 12 | System.out.println("다른 인스턴스입니다."); 13 | } 14 | System.out.println("Finish."); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /chapter06-디자인패턴/java/singleton/Singleton.java: -------------------------------------------------------------------------------- 1 | package java.singleton; 2 | 3 | public class Singleton { 4 | // 기본 5 | // 정적 필드 6 | private static Singleton singleton = new Singleton(); 7 | 8 | // 생성자 9 | private Singleton() { 10 | } 11 | 12 | // 정적 메소드 13 | static Singleton getInstance() { 14 | return singleton; 15 | } 16 | 17 | } 18 | -------------------------------------------------------------------------------- /chapter06-디자인패턴/java/state/Context.java: -------------------------------------------------------------------------------- 1 | package java.state; 2 | 3 | public interface Context { 4 | 5 | public abstract void setClock(int hour); 6 | 7 | public abstract void changeState(State state); 8 | 9 | public abstract void callSecurityCenter(String msg); 10 | 11 | public abstract void recordLog(String msg); 12 | } 13 | -------------------------------------------------------------------------------- /chapter06-디자인패턴/java/state/DayState.java: -------------------------------------------------------------------------------- 1 | package java.state; 2 | 3 | public class DayState implements State { 4 | 5 | private static DayState singleton = new DayState(); 6 | 7 | private DayState() { 8 | 9 | } 10 | 11 | public static State getInstance() { 12 | return singleton; 13 | } 14 | 15 | @Override 16 | public void doClock(Context context, int hour) { 17 | if (hour < 9 || 17 <= hour) { 18 | context.changeState(NightState.getInstance()); 19 | } 20 | } 21 | 22 | @Override 23 | public void doUse(Context context) { 24 | context.recordLog("금고사용(주간)"); 25 | } 26 | 27 | @Override 28 | public void doAlarm(Context context) { 29 | context.callSecurityCenter("비상벨(주간)"); 30 | } 31 | 32 | @Override 33 | public void doPhone(Context context) { 34 | context.callSecurityCenter("일반통화(주간)"); 35 | } 36 | 37 | @Override 38 | public String toString() { 39 | return "[주간]"; 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /chapter06-디자인패턴/java/state/Main.java: -------------------------------------------------------------------------------- 1 | package java.state; 2 | 3 | public class Main { 4 | 5 | public static void main(String[] args) { 6 | SafeFrame frame = new SafeFrame("State Sample"); 7 | 8 | while (true) { 9 | for (int hour = 0; hour < 24; hour++) { 10 | frame.setClock(hour); 11 | try { 12 | Thread.sleep(1000); 13 | } catch (InterruptedException e) { 14 | } 15 | } 16 | } 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /chapter06-디자인패턴/java/state/NightState.java: -------------------------------------------------------------------------------- 1 | package java.state; 2 | 3 | public class NightState implements State { 4 | 5 | private static NightState singleton = new NightState(); 6 | 7 | private NightState() { 8 | 9 | } 10 | 11 | public static State getInstance() { 12 | return singleton; 13 | } 14 | 15 | @Override 16 | public void doClock(Context context, int hour) { 17 | if (9 <= hour && hour < 17) { 18 | context.changeState(DayState.getInstance()); 19 | } 20 | } 21 | 22 | @Override 23 | public void doUse(Context context) { 24 | context.callSecurityCenter("비상 : 야간금고 사용!"); 25 | } 26 | 27 | @Override 28 | public void doAlarm(Context context) { 29 | context.callSecurityCenter("비상벨(야간)"); 30 | } 31 | 32 | @Override 33 | public void doPhone(Context context) { 34 | context.recordLog("야간통화 녹음"); 35 | } 36 | 37 | @Override 38 | public String toString() { 39 | return "[야간]"; 40 | } 41 | 42 | } 43 | -------------------------------------------------------------------------------- /chapter06-디자인패턴/java/state/State.java: -------------------------------------------------------------------------------- 1 | package java.state; 2 | 3 | public interface State { 4 | 5 | public abstract void doClock(Context context, int hour); 6 | 7 | public abstract void doUse(Context context); 8 | 9 | public abstract void doAlarm(Context context); 10 | 11 | public abstract void doPhone(Context context); 12 | } 13 | -------------------------------------------------------------------------------- /chapter06-디자인패턴/java/strategy/Player.java: -------------------------------------------------------------------------------- 1 | package java.strategy; 2 | 3 | public class Player { 4 | 5 | private String name; 6 | private Strategy strategy; 7 | private int winCount; 8 | private int loseCount; 9 | private int gameCount; 10 | 11 | public Player(String name, Strategy strategy) { 12 | this.name = name; 13 | this.strategy = strategy; 14 | } 15 | 16 | public Hand nextHand() { 17 | return strategy.nextHand(); 18 | } 19 | 20 | public void win() { 21 | strategy.study(true); 22 | winCount++; 23 | gameCount++; 24 | } 25 | 26 | public void lose() { 27 | strategy.study(false); 28 | loseCount++; 29 | gameCount++; 30 | } 31 | 32 | public void even() { 33 | gameCount++; 34 | } 35 | 36 | public String toString() { 37 | return "[" + name + ":" + gameCount + " games, " + winCount + " win, " + loseCount + " lose" + "]"; 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /chapter06-디자인패턴/java/strategy/Strategy.java: -------------------------------------------------------------------------------- 1 | package java.strategy; 2 | 3 | public interface Strategy { 4 | 5 | public abstract Hand nextHand(); 6 | 7 | public abstract void study(boolean win); 8 | } 9 | -------------------------------------------------------------------------------- /chapter06-디자인패턴/java/strategy/WinningStrategy.java: -------------------------------------------------------------------------------- 1 | package java.strategy; 2 | 3 | import java.util.Random; 4 | 5 | public class WinningStrategy implements Strategy { 6 | 7 | private Random random; 8 | private boolean won = false; 9 | private Hand prevHand; 10 | 11 | public WinningStrategy(int seed) { 12 | random = new Random(seed); 13 | } 14 | 15 | @Override 16 | public Hand nextHand() { 17 | if (!won) 18 | prevHand = Hand.getHand(random.nextInt(3)); 19 | return prevHand; 20 | } 21 | 22 | @Override 23 | public void study(boolean win) { 24 | won = win; 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /chapter06-디자인패턴/java/templateMethod/AbstractDisplay.java: -------------------------------------------------------------------------------- 1 | package java.templateMethod; 2 | 3 | public abstract class AbstractDisplay { // 추상 클래스 AbstractDisplay 4 | 5 | public abstract void open(); // 하위 클래스에 구현을 맡기는 추상 메소드(1) open 6 | 7 | public abstract void print(); // 하위 클래스에 구현을 맡기는 추상 메소드(2) print 8 | 9 | public abstract void close(); // 하위 클래스에 구현을 맡기는 추상 메소드(3) close 10 | 11 | public final void display() { // 추상 클래스에서 구현되고 있는 메소드 display 12 | 13 | open(); // open 한다. 14 | 15 | for (int i = 0; i < 5; i++) { // 5번 반복 16 | print(); 17 | } 18 | 19 | close(); // 마지막으로 close한다. display 메소드에서 구현되는 내용이다. 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /chapter06-디자인패턴/java/templateMethod/CharDisplay.java: -------------------------------------------------------------------------------- 1 | package java.templateMethod; 2 | 3 | public class CharDisplay extends AbstractDisplay { // Chardisplay는 AbstractDisplay의 하위 클래스 4 | 5 | private char ch; // 표시해야 할 문자. 6 | 7 | public CharDisplay(char ch) { // 생성자에게 전달된 문자 ch를 필드에 기억한다. 8 | this.ch = ch; 9 | } 10 | 11 | @Override 12 | public void open() { // 상위 클래스에서는 추상 메소드 13 | System.out.print("<<<"); // 오버라이드로 구현 14 | } 15 | 16 | @Override 17 | public void print() { // display에서 반복해서 호출 18 | System.out.print(ch); // 필드에 기억해 둔 문자를 1개 표시한다. 19 | } 20 | 21 | @Override 22 | public void close() { 23 | System.out.println(">>>"); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /chapter06-디자인패턴/java/templateMethod/Main.java: -------------------------------------------------------------------------------- 1 | package java.templateMethod; 2 | 3 | public class Main { 4 | 5 | public static void main(String[] args) { 6 | // 'H'를 가진 CharDisplay 인스턴스 생성 7 | AbstractDisplay d1 = new CharDisplay('H'); 8 | // "Hello, world!"를 가진 StringDisplay 인스턴스 생성 9 | AbstractDisplay d2 = new StringDisplay("Hello, world!"); 10 | // "안녕하세요."를 가진 StringDisplay 인스턴스 생성 11 | AbstractDisplay d3 = new StringDisplay("안녕하세요."); 12 | d1.display(); 13 | 14 | d2.display(); 15 | 16 | d3.display(); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /chapter06-디자인패턴/java/templateMethod/StringDisplay.java: -------------------------------------------------------------------------------- 1 | package java.templateMethod; 2 | 3 | public class StringDisplay extends AbstractDisplay { 4 | 5 | private String string; 6 | private int width; 7 | 8 | public StringDisplay(String string) { 9 | this.string = string; 10 | this.width = string.getBytes().length; 11 | } 12 | 13 | @Override 14 | public void open() { 15 | printLine(); 16 | } 17 | 18 | @Override 19 | public void print() { 20 | System.out.println("|" + string + "|"); 21 | } 22 | 23 | @Override 24 | public void close() { 25 | printLine(); 26 | } 27 | 28 | private void printLine() { 29 | System.out.print("+"); 30 | 31 | for (int i = 0; i < width; i++) { 32 | System.out.print("-"); 33 | } 34 | 35 | System.out.println("+"); 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /chapter06-디자인패턴/java/visitor/Directory.java: -------------------------------------------------------------------------------- 1 | package java.visitor; 2 | 3 | import java.util.ArrayList; 4 | import java.util.Iterator; 5 | 6 | public class Directory extends Entry { 7 | 8 | private String name; 9 | private ArrayList dir = new ArrayList(); 10 | 11 | public Directory(String name) { 12 | this.name = name; 13 | } 14 | 15 | public String getName() { 16 | return name; 17 | } 18 | 19 | public int getSize() { 20 | int size = 0; 21 | Iterator it = dir.iterator(); 22 | while (it.hasNext()) { 23 | Entry entry = (Entry) it.next(); 24 | size += entry.getSize(); 25 | } 26 | return size; 27 | } 28 | 29 | public Entry add(Entry entry) { 30 | dir.add(entry); 31 | return this; 32 | } 33 | 34 | public Iterator iterator() { 35 | return dir.iterator(); 36 | } 37 | 38 | public void accept(Visitor v) { 39 | v.visit(this); 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /chapter06-디자인패턴/java/visitor/Element.java: -------------------------------------------------------------------------------- 1 | package java.visitor; 2 | 3 | public interface Element { 4 | 5 | public abstract void accept(Visitor v); 6 | } 7 | -------------------------------------------------------------------------------- /chapter06-디자인패턴/java/visitor/Entry.java: -------------------------------------------------------------------------------- 1 | package java.visitor; 2 | 3 | import java.util.Iterator; 4 | 5 | public abstract class Entry implements Element { 6 | 7 | public abstract String getName(); 8 | 9 | public abstract int getSize(); 10 | 11 | public Entry add(Entry entry) throws FileTreatmentException { 12 | throw new FileTreatmentException(); 13 | } 14 | 15 | public Iterator iterator() throws FileTreatmentException { 16 | throw new FileTreatmentException(); 17 | } 18 | 19 | public String toString() { 20 | return getName() + " (" + getSize() + ")"; 21 | } 22 | 23 | } 24 | -------------------------------------------------------------------------------- /chapter06-디자인패턴/java/visitor/File.java: -------------------------------------------------------------------------------- 1 | package java.visitor; 2 | 3 | public class File extends Entry { 4 | 5 | private String name; 6 | private int size; 7 | 8 | public File(String name, int size) { 9 | this.name = name; 10 | this.size = size; 11 | } 12 | 13 | public String getName() { 14 | return name; 15 | } 16 | 17 | public int getSize() { 18 | return size; 19 | } 20 | 21 | public void accept(Visitor v) { 22 | v.visit(this); 23 | } 24 | 25 | } 26 | -------------------------------------------------------------------------------- /chapter06-디자인패턴/java/visitor/FileTreatmentException.java: -------------------------------------------------------------------------------- 1 | package java.visitor; 2 | 3 | public class FileTreatmentException extends RuntimeException { 4 | 5 | public FileTreatmentException() { 6 | super(); 7 | } 8 | 9 | public FileTreatmentException(String message, Throwable cause, boolean enableSuppression, 10 | boolean writableStackTrace) { 11 | super(message, cause, enableSuppression, writableStackTrace); 12 | } 13 | 14 | public FileTreatmentException(String message, Throwable cause) { 15 | super(message, cause); 16 | } 17 | 18 | public FileTreatmentException(String message) { 19 | super(message); 20 | } 21 | 22 | public FileTreatmentException(Throwable cause) { 23 | super(cause); 24 | } 25 | 26 | } 27 | -------------------------------------------------------------------------------- /chapter06-디자인패턴/java/visitor/ListVisitor.java: -------------------------------------------------------------------------------- 1 | package java.visitor; 2 | 3 | import java.util.Iterator; 4 | 5 | public class ListVisitor extends Visitor { 6 | 7 | private String currentdir = ""; 8 | 9 | public void visit(File file) { 10 | System.out.println(currentdir + "/" + file); 11 | } 12 | 13 | public void visit(Directory directory) { 14 | System.out.println(currentdir + "/" + directory); 15 | String savedir = currentdir; 16 | currentdir = currentdir + "/" + directory.iterator(); 17 | Iterator it = directory.iterator(); 18 | while (it.hasNext()) { 19 | Entry entry = (Entry) it.next(); 20 | entry.accept(this); 21 | } 22 | currentdir = savedir; 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /chapter06-디자인패턴/java/visitor/Visitor.java: -------------------------------------------------------------------------------- 1 | package java.visitor; 2 | 3 | public abstract class Visitor { 4 | 5 | public abstract void visit(File file); 6 | 7 | public abstract void visit(Directory directory); 8 | } 9 | -------------------------------------------------------------------------------- /chapter06-디자인패턴/javascript/Callback/README.md: -------------------------------------------------------------------------------- 1 | # 콜백 패턴 -------------------------------------------------------------------------------- /chapter06-디자인패턴/javascript/Callback/attendee.js: -------------------------------------------------------------------------------- 1 | let Conference = Conference || {}; 2 | Conference.attendee = function(firstName, lastName) { 3 | "use strict"; 4 | 5 | let checkedIn = false, 6 | first = firstName || 'None', 7 | last = lastName || 'None'; 8 | 9 | return { 10 | getFullName: function() { 11 | return first + ' ' + last; 12 | }, 13 | 14 | isCheckedIn: function() { 15 | return checkedIn; 16 | }, 17 | 18 | checkIn: function() { 19 | checkedIn = true; 20 | } 21 | }; 22 | }; -------------------------------------------------------------------------------- /chapter06-디자인패턴/javascript/Callback/attendeeCollection.js: -------------------------------------------------------------------------------- 1 | let Conference = Conference || {}; 2 | Conference.attendeeCollection = function() { 3 | "use strict"; 4 | 5 | let attendees = []; 6 | 7 | return { 8 | contains: function(attendee) { 9 | return attendees.indexOf(attendee) > -1; 10 | }, 11 | add: function(attendee) { 12 | if (!this.contains(attendee)) { 13 | attendees.push(attendee); 14 | } 15 | }, 16 | remove: function(attendee) { 17 | let index = attendees.indexOf(attendee); 18 | if (index > -1) { 19 | attendees.splice(index, 1); 20 | } 21 | }, 22 | getCount: function() { 23 | return attendees.length; 24 | }, 25 | 26 | iterate: function(callback) { 27 | attendees.forEach(callback); 28 | } 29 | }; 30 | }; -------------------------------------------------------------------------------- /chapter06-디자인패턴/javascript/Callback/checkInRecorder.js: -------------------------------------------------------------------------------- 1 | let Conference = Conference || {}; 2 | 3 | Conference.checkInRecorder = function() { 4 | "use strict"; 5 | 6 | return { 7 | recordCheckIn: function(attendee) { 8 | // 외부 서비스를 통해 체크인 등록한다 9 | } 10 | }; 11 | }; -------------------------------------------------------------------------------- /chapter06-디자인패턴/javascript/Callback/checkInService.js: -------------------------------------------------------------------------------- 1 | let Conference = Conference || {}; 2 | 3 | Conference.checkInService = function(checkInRecorder) { 4 | "use strict"; 5 | 6 | // 주입된 checkInRecorder의 참조값을 담아둔다 7 | let recorder = checkInRecorder; 8 | 9 | return { 10 | checkIn: function(attendee) { 11 | attendee.checkIn(); 12 | recorder.recordCheckIn(attendee); 13 | } 14 | }; 15 | }; 16 | 17 | -------------------------------------------------------------------------------- /chapter06-디자인패턴/javascript/Callback/checkInService_tests.js: -------------------------------------------------------------------------------- 1 | describe('Conference.checkInService', function() { 2 | 'use strict'; 3 | 4 | let checkInService, 5 | checkInRecorder, 6 | attendee; 7 | 8 | beforeEach(function() { 9 | checkInRecorder = Conference.checkInRecorder(); 10 | spyOn(checkInRecorder, 'recordCheckIn'); 11 | 12 | // checkInRecorder를 주입하면서 13 | // 이 함수의 recordCheckIn 함수에 스파이를 심는다 14 | checkInService = Conference.checkInService(checkInRecorder); 15 | 16 | attendee = Conference.attendee('형철', '서'); 17 | }); 18 | 19 | describe('checkInService.checkIn(attendee)', function() { 20 | it('참가자를 체크인 처리한 것으로 표시한다', function() { 21 | checkInService.checkIn(attendee); 22 | expect(attendee.isCheckedIn()).toBe(true); 23 | }); 24 | it('체크인을 등록한다', function() { 25 | checkInService.checkIn(attendee); 26 | expect(checkInRecorder.recordCheckIn).toHaveBeenCalledWith(attendee); 27 | }); 28 | }); 29 | }); -------------------------------------------------------------------------------- /chapter06-디자인패턴/javascript/Correct_Object/Functional/functional_01.js: -------------------------------------------------------------------------------- 1 | let AnimalKingdom = AnimalKingdom || {}; 2 | 3 | AnimalKingdom.marsupial = function(name, nocturnal) { 4 | 5 | let instanceName = name, 6 | instanceIsNocturnal = nocturnal; 7 | 8 | return { 9 | getName: function() { 10 | return instanceName; 11 | }, 12 | getIsNocturnal: function() { 13 | return instanceIsNocturnal; 14 | } 15 | }; 16 | }; 17 | 18 | AnimalKingdom.kangaroo = function(name) { 19 | let baseMarsupial = AnimalKingdom.marsupial(name, false); 20 | 21 | baseMarsupial.hop = function() { 22 | return baseMarsupial.getName() + '가 껑충 뛰었어요'; 23 | }; 24 | 25 | return baseMarsupial; 26 | }; 27 | 28 | let jester = AnimalKingdom.kangaroo('제스터'); 29 | console.log(jester.getName()); // '제스터' 30 | console.log(jester.getIsNocturnal()); // false 31 | console.log(jester.hop()); // '제스터가 껑충 뛰었어요!' -------------------------------------------------------------------------------- /chapter06-디자인패턴/javascript/Correct_Object/New Pattern/newpattern_01.js: -------------------------------------------------------------------------------- 1 | function Marsupial(name, nocturnal) { 2 | this.name = name; 3 | this.isNocturnal = nocturnal; 4 | } 5 | 6 | let maverick = new Marsupial('매버릭', true); 7 | let slider = new Marsupial('슬라이더', false); 8 | 9 | console.log(maverick.isNocturnal); // true 10 | console.log(maverick.name); // "매버릭" 11 | 12 | console.log(slider.isNocturnal); // false 13 | console.log(slider.name); // "슬라이더" 14 | -------------------------------------------------------------------------------- /chapter06-디자인패턴/javascript/Correct_Object/New Pattern/newpattern_02.js: -------------------------------------------------------------------------------- 1 | function Marsupial(name, nocturnal) { 2 | if (!(this instanceof Marsupial)) { 3 | throw new Error("이 객체는 new를 사용하여 생성해야 합니다"); 4 | } 5 | this.name = name; 6 | this.isNocturnal = nocturnal; 7 | } 8 | 9 | let slider = Marsupial('슬라이더', true); -------------------------------------------------------------------------------- /chapter06-디자인패턴/javascript/Correct_Object/New Pattern/newpattern_03.js: -------------------------------------------------------------------------------- 1 | function Marsupial(name, nocturnal) { 2 | if (!(this instanceof Marsupial)) { 3 | return new Marsupial(name, nocturnal); 4 | } 5 | this.name = name; 6 | this.isNocturnal = nocturnal; 7 | } 8 | 9 | let slider = Marsupial('슬라이더', true); 10 | 11 | console.log(slider.name); // '슬라이더' -------------------------------------------------------------------------------- /chapter06-디자인패턴/javascript/Correct_Object/New Pattern/newpattern_04.js: -------------------------------------------------------------------------------- 1 | function Marsupial(name, nocturnal) { 2 | if (!(this instanceof Marsupial)) { 3 | throw new Error("이 객체는 new를 사용하여 생성해야 합니다"); 4 | } 5 | this.name = name; 6 | this.isNocturnal = nocturnal; 7 | 8 | // 각 객체 인스턴스는 자신만의 isAwake 사본을 가진다 9 | this.isAwake = function(isNight) { 10 | return isNight === this.isNocturnal; 11 | } 12 | } 13 | 14 | let maverick = new Marsupial('매버릭', true); 15 | let slider = new Marsupial('슬라이더', false); 16 | 17 | let isNightTime = true; 18 | 19 | console.log(maverick.isAwake(isNightTime)); // true 20 | console.log(slider.isAwake(isNightTime)); // false 21 | 22 | // 각 객체는 자신의 isAwake 함수를 가진다 23 | console.log(maverick.isAwake === slider.isAwake); // false -------------------------------------------------------------------------------- /chapter06-디자인패턴/javascript/Correct_Object/New Pattern/newpattern_05.js: -------------------------------------------------------------------------------- 1 | function Marsupial(name, nocturnal) { 2 | if (!(this instanceof Marsupial)) { 3 | throw new Error("이 객체는 new를 사용하여 생성해야 합니다"); 4 | } 5 | this.name = name; 6 | this.isNocturnal = nocturnal; 7 | } 8 | // 각 객체 인스턴스는 자신만의 isAwake 사본을 가진다 9 | Marsupial.prototype.isAwake = function(isNight) { 10 | return isNight === this.isNocturnal; 11 | } 12 | let maverick = new Marsupial('매버릭', true); 13 | let slider = new Marsupial('슬라이더', false); 14 | 15 | let isNightTime = true; 16 | 17 | console.log(maverick.isAwake(isNightTime)); // true 18 | console.log(slider.isAwake(isNightTime)); // false 19 | 20 | // 객체들은 isAwake의 단일 인스턴스를 공유한다 21 | console.log(maverick.isAwake === slider.isAwake); // true -------------------------------------------------------------------------------- /chapter06-디자인패턴/javascript/Correct_Object/New Pattern/newpattern_06.js: -------------------------------------------------------------------------------- 1 | function Marsupial(name, nocturnal) { 2 | this.name = name; 3 | this.isNocturnal = nocturnal; 4 | } 5 | 6 | let maverick = new Marsupial('매버릭', true); 7 | maverick.prototype = { 8 | hop: function() { 9 | return "룰루랄라 고고씽~!"; 10 | } 11 | } 12 | let goose = new Marsupial('구스', false); 13 | 14 | console.log(maverick.isNocturnal); // true 15 | console.log(maverick.name); // "매버릭" 16 | 17 | console.log(goose.isNocturnal); // false 18 | console.log(goose.name); // "구스" 19 | -------------------------------------------------------------------------------- /chapter06-디자인패턴/javascript/Correct_Object/README.md: -------------------------------------------------------------------------------- 1 | # 객체를 바르게 만들기 2 | 3 | ## 고전적 상속 흉내내기 4 | 5 | ## 함수형 상속과 모듈 패턴 6 | 7 | ## new로 객체를 생성 -------------------------------------------------------------------------------- /chapter06-디자인패턴/javascript/ES6/abstract_factory/README.md: -------------------------------------------------------------------------------- 1 | ## Abstract Factory Pattern 2 | > 여러 클래스 패밀리의 인스턴스(instance)를 작성하기 -------------------------------------------------------------------------------- /chapter06-디자인패턴/javascript/ES6/abstract_factory/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | Abstract Factory 9 | 10 | 11 | 12 |

HOME

13 |
14 |

Abstract Factory

15 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /chapter06-디자인패턴/javascript/ES6/abstract_factory/runner.js: -------------------------------------------------------------------------------- 1 | import { PetShop, DogFactory } from './abstractFactory.js'; 2 | const petShop = new PetShop(new DogFactory()); 3 | petShop.showPet(); 4 | -------------------------------------------------------------------------------- /chapter06-디자인패턴/javascript/ES6/abstract_factory/typescript/runner.ts: -------------------------------------------------------------------------------- 1 | import { PetShop, CatFactory, DogFactory } from './abstractFactory'; 2 | 3 | const petShop = new PetShop(new DogFactory()); 4 | petShop.showPet(); 5 | -------------------------------------------------------------------------------- /chapter06-디자인패턴/javascript/ES6/adapter/README.md: -------------------------------------------------------------------------------- 1 | ## Adapter Pattern 2 | > 클래스의 인터페이스를 클라이언트가 필요로 하는 다른 인터페이스로 변환하기 3 | - 호환되지 않는 인터페이스로 인해 클래스가 함께 작동할 수 있습니다. -------------------------------------------------------------------------------- /chapter06-디자인패턴/javascript/ES6/adapter/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | Adapter 9 | 10 | 11 | 12 |

HOME

13 |
14 |

Adapter

15 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /chapter06-디자인패턴/javascript/ES6/adapter/runner.js: -------------------------------------------------------------------------------- 1 | import { Dog, Cat, Human, Car, Adapter } from './adapter.js'; 2 | import { Logger } from '../logger.js'; 3 | const logger = new Logger(); 4 | const objects = []; 5 | const dog = new Dog(); 6 | objects.push(new Adapter(dog, 'bark')); 7 | const cat = new Cat(); 8 | objects.push(new Adapter(cat, 'meow')); 9 | const human = new Human(); 10 | objects.push(new Adapter(human, 'speak')); 11 | const car = new Car(); 12 | objects.push(new Adapter(car, 'makeNoise', 3)); 13 | objects.forEach(adapter => { 14 | logger.log('A ' + adapter.name + ' goes ' + adapter.makeNoise()); 15 | }); 16 | -------------------------------------------------------------------------------- /chapter06-디자인패턴/javascript/ES6/adapter/typescript/runner.ts: -------------------------------------------------------------------------------- 1 | import { Dog, Cat, Human, Car, Adapter } from './adapter'; 2 | import { Logger } from '../logger'; 3 | 4 | const logger = new Logger(); 5 | const objects = []; 6 | const dog = new Dog(); 7 | 8 | objects.push(new Adapter(dog, 'bark')); 9 | 10 | const cat = new Cat(); 11 | objects.push(new Adapter(cat, 'meow')); 12 | 13 | const human = new Human(); 14 | objects.push(new Adapter(human, 'speak')); 15 | 16 | const car = new Car(); 17 | objects.push(new Adapter(car, 'makeNoise', 3)); 18 | 19 | objects.forEach(adapter => { 20 | logger.log('A ' + adapter.name + ' goes ' + adapter.makeNoise()); 21 | }); 22 | -------------------------------------------------------------------------------- /chapter06-디자인패턴/javascript/ES6/bridge/README.md: -------------------------------------------------------------------------------- 1 | ## Bridge Pattern 2 | > 추상화를 구현에서 분리하여 두 가지가 독립적으로 달라지게 하기 -------------------------------------------------------------------------------- /chapter06-디자인패턴/javascript/ES6/bridge/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | Bridge 9 | 10 | 11 | 12 |

HOME

13 |
14 |

Bridge

15 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /chapter06-디자인패턴/javascript/ES6/bridge/runner.js: -------------------------------------------------------------------------------- 1 | import { CircleShape, DrawingAPI1, DrawingAPI2 } from './bridge.js'; 2 | const shapes = [ 3 | new CircleShape(1, 2, 3, new DrawingAPI1()), 4 | new CircleShape(5, 7, 11, new DrawingAPI2()), 5 | ]; 6 | shapes.forEach(shape => { 7 | shape.scale(2.5); 8 | shape.draw(); 9 | }); 10 | -------------------------------------------------------------------------------- /chapter06-디자인패턴/javascript/ES6/bridge/typescript/runner.ts: -------------------------------------------------------------------------------- 1 | import { CircleShape, DrawingAPI1, DrawingAPI2 } from './bridge'; 2 | 3 | const shapes = [ 4 | new CircleShape(1, 2, 3, new DrawingAPI1()), 5 | new CircleShape(5, 7, 11, new DrawingAPI2()), 6 | ]; 7 | 8 | shapes.forEach(shape => { 9 | shape.scale(2.5); 10 | shape.draw(); 11 | }); 12 | -------------------------------------------------------------------------------- /chapter06-디자인패턴/javascript/ES6/builder/README.md: -------------------------------------------------------------------------------- 1 | ## Builder Pattern 2 | > telescoping constructor 문제를 해결하기 -------------------------------------------------------------------------------- /chapter06-디자인패턴/javascript/ES6/builder/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | Builder 9 | 10 | 11 | 12 |

HOME

13 |
14 |

Builder

15 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /chapter06-디자인패턴/javascript/ES6/builder/runner.js: -------------------------------------------------------------------------------- 1 | import { Director, HouseBuilder, FlatBuilder } from './builder.js'; 2 | import { Logger } from '../logger.js'; 3 | const logger = new Logger(); 4 | const director = new Director(); 5 | director.construct(new HouseBuilder()); 6 | director.constructBuilding(); 7 | const building1 = director.getBuilding(); 8 | logger.log(building1.toString()); 9 | director.construct(new FlatBuilder()); 10 | director.constructBuilding(); 11 | const building2 = director.getBuilding(); 12 | logger.log(building2.toString()); 13 | -------------------------------------------------------------------------------- /chapter06-디자인패턴/javascript/ES6/builder/typescript/runner.ts: -------------------------------------------------------------------------------- 1 | import { Director, Builder, HouseBuilder, FlatBuilder, Building } from './builder'; 2 | import { Logger } from '../logger'; 3 | 4 | const logger = new Logger(); 5 | 6 | const director = new Director(); 7 | 8 | director.construct(new HouseBuilder()); 9 | director.constructBuilding(); 10 | const building1 = director.getBuilding(); 11 | logger.log(building1.toString()); 12 | 13 | director.construct(new FlatBuilder()); 14 | director.constructBuilding(); 15 | const building2 = director.getBuilding(); 16 | logger.log(building2.toString()); 17 | -------------------------------------------------------------------------------- /chapter06-디자인패턴/javascript/ES6/command/README.md: -------------------------------------------------------------------------------- 1 | ## Command Pattern 2 | > 작업 및 매개 변수를 캡슐화하는 개체를 만들기 -------------------------------------------------------------------------------- /chapter06-디자인패턴/javascript/ES6/command/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | Command 9 | 10 | 11 | 12 |

HOME

13 |
14 |

Command

15 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /chapter06-디자인패턴/javascript/ES6/command/runner.js: -------------------------------------------------------------------------------- 1 | import { Receiver, ConcreteCommand1, ConcreteCommand2, Invoker } from './command.js'; 2 | const receiver = new Receiver(); 3 | const command1 = new ConcreteCommand1(receiver); 4 | const command2 = new ConcreteCommand2(receiver); 5 | const invoker = new Invoker(); 6 | invoker.storeAndExecute(command1); 7 | invoker.storeAndExecute(command2); 8 | -------------------------------------------------------------------------------- /chapter06-디자인패턴/javascript/ES6/command/typescript/runner.ts: -------------------------------------------------------------------------------- 1 | import { Receiver, ConcreteCommand1, ConcreteCommand2, Invoker } from './command'; 2 | 3 | const receiver = new Receiver(); 4 | const command1 = new ConcreteCommand1(receiver); 5 | const command2 = new ConcreteCommand2(receiver); 6 | const invoker = new Invoker(); 7 | 8 | invoker.storeAndExecute(command1); 9 | invoker.storeAndExecute(command2); 10 | -------------------------------------------------------------------------------- /chapter06-디자인패턴/javascript/ES6/composite/README.md: -------------------------------------------------------------------------------- 1 | ## Composite Pattern 2 | > 하나의 개체와 유사한 방식으로 개체 그룹을 처리하기 -------------------------------------------------------------------------------- /chapter06-디자인패턴/javascript/ES6/composite/composite.js: -------------------------------------------------------------------------------- 1 | export class Employee { 2 | subordinates; 3 | name; 4 | dept; 5 | sal; 6 | constructor(name, dept, sal) { 7 | this.subordinates = []; 8 | this.name = name; 9 | this.dept = dept; 10 | this.sal = sal; 11 | } 12 | add(e) { 13 | this.subordinates.push(e); 14 | } 15 | remove(e) { 16 | const index = this.subordinates.indexOf(e); 17 | if (index > -1) { 18 | this.subordinates.splice(index, 1); 19 | } 20 | } 21 | get Subordinates() { 22 | return this.subordinates; 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /chapter06-디자인패턴/javascript/ES6/composite/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | Composite 9 | 10 | 11 | 12 |

HOME

13 |
14 |

Composite

15 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /chapter06-디자인패턴/javascript/ES6/composite/runner.js: -------------------------------------------------------------------------------- 1 | import { Employee } from './composite.js'; 2 | import { Logger } from '../logger.js'; 3 | const logger = new Logger(); 4 | const ceo = new Employee('John', 'CEO', 30000); 5 | const headSales = new Employee('Robert', 'Head Sales', 20000); 6 | const headMarketing = new Employee('Michel', 'Head Marketing', 20000); 7 | const clerk1 = new Employee('Laura', 'Marketing', 10000); 8 | const clerk2 = new Employee('Bob', 'Marketing', 10000); 9 | const salesExecutive1 = new Employee('Richard', 'Sales', 10000); 10 | const salesExecutive2 = new Employee('Rob', 'Sales', 10000); 11 | ceo.add(headSales); 12 | ceo.add(headMarketing); 13 | headSales.add(salesExecutive1); 14 | headSales.add(salesExecutive2); 15 | headMarketing.add(clerk1); 16 | headMarketing.add(clerk2); 17 | logger.log(JSON.stringify(ceo)); 18 | logger.log(JSON.stringify(headSales)); 19 | //Refactor code. For loop 20 | ceo.subordinates.forEach(_ceo => { 21 | logger.log(JSON.stringify(_ceo)); 22 | }); 23 | -------------------------------------------------------------------------------- /chapter06-디자인패턴/javascript/ES6/composite/typescript/composite.ts: -------------------------------------------------------------------------------- 1 | import { Logger } from '../../logger'; 2 | 3 | export class Employee { 4 | subordinates: Employee[]; 5 | name: string; 6 | dept: string; 7 | sal: number; 8 | constructor(name: string, dept: string, sal: number) { 9 | this.subordinates = []; 10 | this.name = name; 11 | this.dept = dept; 12 | this.sal = sal; 13 | } 14 | add(e: Employee) { 15 | this.subordinates.push(e); 16 | } 17 | remove(e: Employee) { 18 | const index = this.subordinates.indexOf(e); 19 | if (index > -1) { 20 | this.subordinates.splice(index, 1); 21 | } 22 | } 23 | 24 | get Subordinates() { 25 | return this.subordinates; 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /chapter06-디자인패턴/javascript/ES6/decorator/README.md: -------------------------------------------------------------------------------- 1 | ## Decorator Pattern 2 | > 사용자가 구조를 변경하지 않고 기존 객체에 새로운 기능을 추가하기 3 | - 이러한 유형의 설계 패턴은 기존 클래스에 대한 래퍼 역할을 하므로 구조 패턴 아래에 있습니다. -------------------------------------------------------------------------------- /chapter06-디자인패턴/javascript/ES6/decorator/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | Decorator 9 | 10 | 11 | 12 |

HOME

13 |
14 |

Decorator

15 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /chapter06-디자인패턴/javascript/ES6/decorator/runner.js: -------------------------------------------------------------------------------- 1 | import { Circle, Rectangle, RedShapeDecorator } from './decorator.js'; 2 | const circle = new Circle(); 3 | const redCircle = new RedShapeDecorator(new Circle()); 4 | const redRectangle = new RedShapeDecorator(new Rectangle()); 5 | circle.draw(); 6 | redCircle.draw(); 7 | redRectangle.draw(); 8 | -------------------------------------------------------------------------------- /chapter06-디자인패턴/javascript/ES6/decorator/typescript/runner.ts: -------------------------------------------------------------------------------- 1 | import { Circle, Rectangle, RedShapeDecorator } from './decorator'; 2 | 3 | const circle = new Circle(); 4 | const redCircle = new RedShapeDecorator(new Circle()); 5 | const redRectangle = new RedShapeDecorator(new Rectangle()); 6 | 7 | circle.draw(); 8 | redCircle.draw(); 9 | redRectangle.draw(); 10 | -------------------------------------------------------------------------------- /chapter06-디자인패턴/javascript/ES6/facade/README.md: -------------------------------------------------------------------------------- 1 | ## Facade Pattern 2 | > 더 큰 코드 본체에 단순화된 인터페이스를 제공하기 -------------------------------------------------------------------------------- /chapter06-디자인패턴/javascript/ES6/facade/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | Facade 9 | 10 | 11 | 12 |

HOME

13 |
14 |

Facade

15 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /chapter06-디자인패턴/javascript/ES6/facade/runner.js: -------------------------------------------------------------------------------- 1 | import { ComputerFacade } from './facade.js'; 2 | const computerFacade = new ComputerFacade(); 3 | computerFacade.buildComputer(); 4 | -------------------------------------------------------------------------------- /chapter06-디자인패턴/javascript/ES6/facade/typescript/runner.ts: -------------------------------------------------------------------------------- 1 | import { ComputerFacade } from './facade'; 2 | 3 | const computerFacade = new ComputerFacade(); 4 | computerFacade.buildComputer(); 5 | -------------------------------------------------------------------------------- /chapter06-디자인패턴/javascript/ES6/factory_method/README.md: -------------------------------------------------------------------------------- 1 | ## Factory-Method Pattern 2 | > 객체는 클라이언트에 생성 논리를 노출하지 않고 생성되며 공통 인터페이스를 사용하여 새로 생성된 객체를 참조하기 -------------------------------------------------------------------------------- /chapter06-디자인패턴/javascript/ES6/factory_method/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | Factory-Method 9 | 10 | 11 | 12 |

HOME

13 |
14 |

Factory-Method

15 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /chapter06-디자인패턴/javascript/ES6/factory_method/runner.js: -------------------------------------------------------------------------------- 1 | import { ShapeFactory } from './factorymethod.js'; 2 | const shapeFactory = new ShapeFactory(); 3 | //get an object of Circle and call its draw method. 4 | const circleShape = shapeFactory.getShape('CIRCLE'); 5 | //call draw method of Circle 6 | circleShape.draw(); 7 | //get an object of Rectangle and call its draw method. 8 | const rectangleShape = shapeFactory.getShape('RECTANGLE'); 9 | //call draw method of Rectangle 10 | rectangleShape.draw(); 11 | //get an object of Square and call its draw method. 12 | const squareShape = shapeFactory.getShape('SQUARE'); 13 | //call draw method of circle 14 | squareShape.draw(); 15 | -------------------------------------------------------------------------------- /chapter06-디자인패턴/javascript/ES6/factory_method/typescript/runner.ts: -------------------------------------------------------------------------------- 1 | import { ShapeFactory, Circle, Rectangle, Square } from './factorymethod'; 2 | 3 | const shapeFactory = new ShapeFactory(); 4 | 5 | //get an object of Circle and call its draw method. 6 | const circleShape = shapeFactory.getShape('CIRCLE'); 7 | 8 | //call draw method of Circle 9 | circleShape.draw(); 10 | 11 | //get an object of Rectangle and call its draw method. 12 | const rectangleShape = shapeFactory.getShape('RECTANGLE'); 13 | 14 | //call draw method of Rectangle 15 | rectangleShape.draw(); 16 | 17 | //get an object of Square and call its draw method. 18 | const squareShape = shapeFactory.getShape('SQUARE'); 19 | 20 | //call draw method of circle 21 | squareShape.draw(); 22 | -------------------------------------------------------------------------------- /chapter06-디자인패턴/javascript/ES6/iterator/README.md: -------------------------------------------------------------------------------- 1 | ## Iterator Pattern 2 | > 기본 표현을 노출하지 않고 순차적으로 집계 개체의 요소에 액세스할 수 있는 방법을 제공하기 -------------------------------------------------------------------------------- /chapter06-디자인패턴/javascript/ES6/iterator/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | Iterator 9 | 10 | 11 | 12 |

HOME

13 |
14 |

Iterator

15 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /chapter06-디자인패턴/javascript/ES6/iterator/runner.js: -------------------------------------------------------------------------------- 1 | import { ConcreteIterator, Aggregate } from './iterator.js'; 2 | import { Logger } from '../logger.js'; 3 | const logger = new Logger(); 4 | const aggregate = new Aggregate(); 5 | aggregate.items[0] = 'ITEM 1'; 6 | aggregate.items[1] = 'ITEM 2'; 7 | aggregate.items[2] = 'ITEM 3'; 8 | aggregate.items[3] = 'ITEM 4'; 9 | const iterator = new ConcreteIterator(aggregate); 10 | logger.log('Next object: ' + iterator.nextObject()); 11 | logger.log('Current object: ' + iterator.currentObject()); 12 | logger.log('Next object: ' + iterator.nextObject()); 13 | logger.log('First object: ' + iterator.firstObject()); 14 | logger.log('Next object: ' + iterator.nextObject()); 15 | if (iterator.isDone()) logger.log('Iterator is done!'); 16 | else { 17 | logger.log('Not yet!'); 18 | } 19 | logger.log('Next object: ' + iterator.nextObject()); 20 | -------------------------------------------------------------------------------- /chapter06-디자인패턴/javascript/ES6/iterator/typescript/runner.ts: -------------------------------------------------------------------------------- 1 | import { ConcreteIterator, Aggregate } from './iterator'; 2 | import { Logger } from '../logger'; 3 | const logger = new Logger(); 4 | const aggregate = new Aggregate(); 5 | aggregate.items[0] = 'ITEM 1'; 6 | aggregate.items[1] = 'ITEM 2'; 7 | aggregate.items[2] = 'ITEM 3'; 8 | aggregate.items[3] = 'ITEM 4'; 9 | 10 | const iterator = new ConcreteIterator(aggregate); 11 | 12 | logger.log('Next object: ' + iterator.nextObject()); 13 | logger.log('Current object: ' + iterator.currentObject()); 14 | logger.log('Next object: ' + iterator.nextObject()); 15 | logger.log('First object: ' + iterator.firstObject()); 16 | logger.log('Next object: ' + iterator.nextObject()); 17 | if (iterator.isDone()) logger.log('Iterator is done!'); 18 | else { 19 | logger.log('Not yet!'); 20 | } 21 | logger.log('Next object: ' + iterator.nextObject()); 22 | -------------------------------------------------------------------------------- /chapter06-디자인패턴/javascript/ES6/logger.js: -------------------------------------------------------------------------------- 1 | export class Logger { 2 | container; 3 | constructor() { 4 | this.container = document.getElementById('logContainer'); 5 | } 6 | log(...args) { 7 | args.forEach(message => { 8 | const li = document.createElement('li'); 9 | li.appendChild(document.createTextNode(message)); 10 | this.container.appendChild(li); 11 | }); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /chapter06-디자인패턴/javascript/ES6/logger.ts: -------------------------------------------------------------------------------- 1 | export class Logger { 2 | container: HTMLElement; 3 | constructor() { 4 | this.container = document.getElementById('logContainer') as HTMLElement; 5 | } 6 | log(...args: any[]) { 7 | args.forEach(message => { 8 | const li = document.createElement('li'); 9 | li.appendChild(document.createTextNode(message)); 10 | this.container.appendChild(li); 11 | }); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /chapter06-디자인패턴/javascript/ES6/memento/README.md: -------------------------------------------------------------------------------- 1 | ## Memento Pattern 2 | > 캡슐화를 위반하지 않고 개체의 내부 상태를 캡처하고 외부화하여 나중에 개체를 이 상태로 복원하기 -------------------------------------------------------------------------------- /chapter06-디자인패턴/javascript/ES6/memento/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | Memento 9 | 10 | 11 | 12 |

HOME

13 |
14 |

Memento

15 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /chapter06-디자인패턴/javascript/ES6/memento/memento.js: -------------------------------------------------------------------------------- 1 | import { Logger } from '../logger.js'; 2 | export class Originator { 3 | logger; 4 | state; 5 | constructor() { 6 | this.logger = new Logger(); 7 | } 8 | set State(_state) { 9 | this.state = _state; 10 | } 11 | get State() { 12 | return this.state; 13 | } 14 | set stateFromMemento(memento) { 15 | this.state = memento.MementoState; 16 | } 17 | get stateToBeSavedMemento() { 18 | return new Memento(this.state); 19 | } 20 | } 21 | export class Memento { 22 | mementoState; 23 | constructor(_state) { 24 | this.mementoState = _state; 25 | } 26 | get MementoState() { 27 | return this.mementoState; 28 | } 29 | } 30 | export class CareTaker { 31 | mementoList; 32 | constructor() { 33 | this.mementoList = []; 34 | } 35 | addStateToMementoList(_state) { 36 | this.mementoList.push(_state); 37 | } 38 | getStateFromMementoList(index) { 39 | return this.mementoList[index]; 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /chapter06-디자인패턴/javascript/ES6/memento/runner.js: -------------------------------------------------------------------------------- 1 | import { Originator, CareTaker } from './memento.js'; 2 | import { Logger } from '../logger.js'; 3 | const originator = new Originator(); 4 | const careTaker = new CareTaker(); 5 | const logger = new Logger(); 6 | originator.State = 'State #1'; 7 | originator.State = 'State #2'; 8 | careTaker.addStateToMementoList(originator.stateToBeSavedMemento); 9 | originator.State = 'State #3'; 10 | careTaker.addStateToMementoList(originator.stateToBeSavedMemento); 11 | originator.State = 'State #4'; 12 | logger.log('Current state is: ' + originator.State); 13 | originator.stateFromMemento = careTaker.getStateFromMementoList(0); 14 | logger.log('First saved state is: ' + originator.State); 15 | originator.stateFromMemento = careTaker.getStateFromMementoList(1); 16 | logger.log('Second saved state is: ' + originator.State); 17 | -------------------------------------------------------------------------------- /chapter06-디자인패턴/javascript/ES6/memento/typescript/runner.ts: -------------------------------------------------------------------------------- 1 | import { Originator, CareTaker } from './memento'; 2 | import { Logger } from '../logger'; 3 | 4 | const originator = new Originator(); 5 | const careTaker = new CareTaker(); 6 | const logger = new Logger(); 7 | originator.State = 'State #1'; 8 | originator.State = 'State #2'; 9 | careTaker.addStateToMementoList(originator.stateToBeSavedMemento); 10 | 11 | originator.State = 'State #3'; 12 | careTaker.addStateToMementoList(originator.stateToBeSavedMemento); 13 | originator.State = 'State #4'; 14 | logger.log('Current state is: ' + originator.State); 15 | originator.stateFromMemento = careTaker.getStateFromMementoList(0); 16 | logger.log('First saved state is: ' + originator.State); 17 | originator.stateFromMemento = careTaker.getStateFromMementoList(1); 18 | logger.log('Second saved state is: ' + originator.State); 19 | -------------------------------------------------------------------------------- /chapter06-디자인패턴/javascript/ES6/mvc/README.md: -------------------------------------------------------------------------------- 1 | ## MVC Pattern 2 | > 주어진 소프트웨어 응용 프로그램을 세 개의 상호 연결된 부분으로 나누어서 정보가 사용자에게 제공되거나 사용자로부터 받아들여지는 방식과 정보의 내부 표현을 구분하기 -------------------------------------------------------------------------------- /chapter06-디자인패턴/javascript/ES6/mvc/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | MVC 9 | 10 | 11 | 12 |

HOME

13 |
14 |

MVC

15 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /chapter06-디자인패턴/javascript/ES6/mvc/runner.js: -------------------------------------------------------------------------------- 1 | import { StudentController, StudentView, DBManager } from './mvc.js'; 2 | //fetch student record based on his roll no from the database 3 | const db = new DBManager(); 4 | const model = db.retriveStudentFromDatabase(); 5 | //Create a view : to write student details on console 6 | const view = new StudentView(); 7 | const controller = new StudentController(model, view); 8 | controller.updateView(); 9 | //update model data 10 | controller._studentName = 'John'; 11 | controller._studentNo = '15'; 12 | controller.updateView(); 13 | -------------------------------------------------------------------------------- /chapter06-디자인패턴/javascript/ES6/mvc/typescript/runner.ts: -------------------------------------------------------------------------------- 1 | import { Student, StudentController, StudentView, DBManager } from './mvc'; 2 | 3 | //fetch student record based on his roll no from the database 4 | const db = new DBManager(); 5 | const model = db.retriveStudentFromDatabase(); 6 | 7 | //Create a view : to write student details on console 8 | const view = new StudentView(); 9 | 10 | const controller = new StudentController(model, view); 11 | controller.updateView(); 12 | 13 | //update model data 14 | controller._studentName = 'John'; 15 | controller._studentNo = '15'; 16 | 17 | controller.updateView(); 18 | -------------------------------------------------------------------------------- /chapter06-디자인패턴/javascript/ES6/observer/README.md: -------------------------------------------------------------------------------- 1 | ## Observer Pattern 2 | > 개체 간의 일대다 종속성을 정의하여 한 개체의 상태가 변경될 때 모든 종속 개체가 자동으로 알림을 받고 업데이트되기 -------------------------------------------------------------------------------- /chapter06-디자인패턴/javascript/ES6/observer/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | Observer 9 | 10 | 11 | 12 |

HOME

13 |
14 |

Observer

15 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /chapter06-디자인패턴/javascript/ES6/observer/runner.js: -------------------------------------------------------------------------------- 1 | import { ConcreteSubject, ConcreteObserver } from './observer.js'; 2 | const sub = new ConcreteSubject(); 3 | sub.register(new ConcreteObserver(sub, 'Aaron')); 4 | sub.register(new ConcreteObserver(sub, 'Swartz')); 5 | sub.register(new ConcreteObserver(sub, 'Reddit')); 6 | sub.SubjectState = 123; 7 | sub.notify(); 8 | -------------------------------------------------------------------------------- /chapter06-디자인패턴/javascript/ES6/observer/typescript/runner.ts: -------------------------------------------------------------------------------- 1 | import { ConcreteSubject, ConcreteObserver } from './observer'; 2 | 3 | const sub = new ConcreteSubject(); 4 | 5 | sub.register(new ConcreteObserver(sub, 'Aaron')); 6 | sub.register(new ConcreteObserver(sub, 'Swartz')); 7 | sub.register(new ConcreteObserver(sub, 'Reddit')); 8 | 9 | sub.SubjectState = 123; 10 | sub.notify(); 11 | -------------------------------------------------------------------------------- /chapter06-디자인패턴/javascript/ES6/prototype/README.md: -------------------------------------------------------------------------------- 1 | ## Prototype Pattern 2 | > 기존 개체를 복제하여 새 개체를 만들기 -------------------------------------------------------------------------------- /chapter06-디자인패턴/javascript/ES6/prototype/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | Prototype 9 | 10 | 11 | 12 |

HOME

13 |
14 |

Prototype

15 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /chapter06-디자인패턴/javascript/ES6/prototype/prototype.js: -------------------------------------------------------------------------------- 1 | import { Logger } from '../logger.js'; 2 | export class Prototype { 3 | doClone() { 4 | throw new Error('Abstract method!'); 5 | } 6 | } 7 | export class Person extends Prototype { 8 | logger; 9 | surname; 10 | constructor(surname) { 11 | super(); 12 | this.logger = new Logger(); 13 | this.surname = surname; 14 | } 15 | doClone() { 16 | return new Person(this.surname); 17 | } 18 | toString() { 19 | return this.logger.log('This person is named ' + this.surname); 20 | } 21 | } 22 | export class Dog extends Prototype { 23 | logger; 24 | sound; 25 | constructor(sound) { 26 | super(); 27 | this.logger = new Logger(); 28 | this.sound = sound; 29 | } 30 | doClone() { 31 | return new Dog(this.sound); 32 | } 33 | toString() { 34 | return this.logger.log('This dog says ' + this.sound); 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /chapter06-디자인패턴/javascript/ES6/prototype/runner.js: -------------------------------------------------------------------------------- 1 | import { Person, Dog } from './prototype.js'; 2 | const person1 = new Person('Fred'); 3 | const person2 = person1.doClone(); 4 | person1.toString(); 5 | person2.toString(); 6 | const dog1 = new Dog('Wooof!'); 7 | dog1.toString(); 8 | const dog2 = dog1.doClone(); 9 | dog2.toString(); 10 | -------------------------------------------------------------------------------- /chapter06-디자인패턴/javascript/ES6/prototype/typescript/runner.ts: -------------------------------------------------------------------------------- 1 | import { Prototype, Person, Dog } from './prototype'; 2 | 3 | const person1 = new Person('Fred'); 4 | 5 | const person2 = person1.doClone(); 6 | person1.toString(); 7 | person2.toString(); 8 | 9 | const dog1 = new Dog('Wooof!'); 10 | dog1.toString(); 11 | 12 | const dog2 = dog1.doClone(); 13 | dog2.toString(); 14 | -------------------------------------------------------------------------------- /chapter06-디자인패턴/javascript/ES6/proxy/README.md: -------------------------------------------------------------------------------- 1 | ## Proxy Pattern 2 | > 다른 개체에 대한 액세스를 제어할 대리 또는 자리 표시자를 제공하기 -------------------------------------------------------------------------------- /chapter06-디자인패턴/javascript/ES6/proxy/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | Proxy 9 | 10 | 11 | 12 |

HOME

13 |
14 |

Proxy

15 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /chapter06-디자인패턴/javascript/ES6/proxy/runner.js: -------------------------------------------------------------------------------- 1 | import { ProxyDriving } from './proxy.js'; 2 | const proxy = new ProxyDriving(); 3 | proxy.startEngine(); 4 | proxy.hitGas(); 5 | proxy.hitBrake(); 6 | proxy.parkCark(); 7 | proxy.stopEngine(); 8 | -------------------------------------------------------------------------------- /chapter06-디자인패턴/javascript/ES6/proxy/typescript/runner.ts: -------------------------------------------------------------------------------- 1 | import { ProxyDriving } from './proxy'; 2 | 3 | const proxy = new ProxyDriving(); 4 | proxy.startEngine(); 5 | proxy.hitGas(); 6 | proxy.hitBrake(); 7 | proxy.parkCark(); 8 | proxy.stopEngine(); 9 | -------------------------------------------------------------------------------- /chapter06-디자인패턴/javascript/ES6/publish_subscribe/README.md: -------------------------------------------------------------------------------- 1 | ## Publish Subscribe 2 | > 구독하고 발행하기 -------------------------------------------------------------------------------- /chapter06-디자인패턴/javascript/ES6/publish_subscribe/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | Publish Subscribe 9 | 10 | 11 | 12 |

HOME

13 |
14 |

Publish Subscribe

15 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /chapter06-디자인패턴/javascript/ES6/publish_subscribe/runner.js: -------------------------------------------------------------------------------- 1 | import { Provider, Subscriber, Publisher } from './pubsub.js'; 2 | const messageCenter = new Provider(); 3 | const fftv = new Publisher(messageCenter); 4 | const aaron = new Subscriber('aaron', messageCenter); 5 | aaron.subscribe('reddit'); 6 | const aamir = new Subscriber('aamir', messageCenter); 7 | aamir.subscribe('movie'); 8 | const gee = new Subscriber('turing', messageCenter); 9 | gee.subscribe('science'); 10 | fftv.publish('reddit'); 11 | fftv.publish('science'); 12 | fftv.publish('ads'); 13 | fftv.publish('movie'); 14 | fftv.publish('reddit'); 15 | fftv.publish('reddit'); 16 | fftv.publish('science'); 17 | fftv.publish('blank'); 18 | messageCenter.update(); 19 | -------------------------------------------------------------------------------- /chapter06-디자인패턴/javascript/ES6/publish_subscribe/typescript/runner.ts: -------------------------------------------------------------------------------- 1 | import { Provider, Subscriber, Publisher } from './pubsub'; 2 | 3 | const messageCenter = new Provider(); 4 | 5 | const fftv = new Publisher(messageCenter); 6 | 7 | const aaron = new Subscriber('aaron', messageCenter); 8 | aaron.subscribe('reddit'); 9 | 10 | const aamir = new Subscriber('aamir', messageCenter); 11 | aamir.subscribe('movie'); 12 | 13 | const gee = new Subscriber('turing', messageCenter); 14 | gee.subscribe('science'); 15 | 16 | fftv.publish('reddit'); 17 | fftv.publish('science'); 18 | fftv.publish('ads'); 19 | fftv.publish('movie'); 20 | fftv.publish('reddit'); 21 | fftv.publish('reddit'); 22 | fftv.publish('science'); 23 | fftv.publish('blank'); 24 | 25 | messageCenter.update(); 26 | -------------------------------------------------------------------------------- /chapter06-디자인패턴/javascript/ES6/strategy/README.md: -------------------------------------------------------------------------------- 1 | ## Strategy Pattern 2 | > 다양한 전략을 나타내는 개체와 해당 전략 개체에 따라 동작이 달라지는 컨텍스트 개체를 만들기 -------------------------------------------------------------------------------- /chapter06-디자인패턴/javascript/ES6/strategy/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | Strategy 9 | 10 | 11 | 12 |

HOME

13 |
14 |

Strategy

15 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /chapter06-디자인패턴/javascript/ES6/strategy/runner.js: -------------------------------------------------------------------------------- 1 | import { Context, OperationAdd, OperationSubstract, OperationMultiply } from './strategy.js'; 2 | const contextAdd = new Context(new OperationAdd()); 3 | const contextSub = new Context(new OperationSubstract()); 4 | const contextMultiply = new Context(new OperationMultiply()); 5 | contextAdd.executeStrategy(1, 10); 6 | contextSub.executeStrategy(12, 5); 7 | contextMultiply.executeStrategy(5, 10); 8 | -------------------------------------------------------------------------------- /chapter06-디자인패턴/javascript/ES6/strategy/typescript/runner.ts: -------------------------------------------------------------------------------- 1 | import { 2 | Strategy, 3 | Context, 4 | OperationAdd, 5 | OperationSubstract, 6 | OperationMultiply, 7 | } from '../strategy'; 8 | 9 | const contextAdd = new Context(new OperationAdd()); 10 | const contextSub = new Context(new OperationSubstract()); 11 | const contextMultiply = new Context(new OperationMultiply()); 12 | 13 | contextAdd.executeStrategy(1, 10); 14 | contextSub.executeStrategy(12, 5); 15 | contextMultiply.executeStrategy(5, 10); 16 | -------------------------------------------------------------------------------- /chapter06-디자인패턴/javascript/ES6/template/README.md: -------------------------------------------------------------------------------- 1 | ## Template Pattern 2 | > 동작 설계 패턴: 메소드 스텁을 생성하고 구현 단계 중 일부를 하위 클래스로 연기하기 -------------------------------------------------------------------------------- /chapter06-디자인패턴/javascript/ES6/template/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | Template 9 | 10 | 11 | 12 |

HOME

13 |
14 |

Template

15 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /chapter06-디자인패턴/javascript/ES6/template/runner.js: -------------------------------------------------------------------------------- 1 | import { WoodenHouse, GlassHouse } from './template.js'; 2 | const glassHouse = new GlassHouse(); 3 | glassHouse.buildHouse(); 4 | const woodenHouse = new WoodenHouse(); 5 | woodenHouse.buildHouse(); 6 | -------------------------------------------------------------------------------- /chapter06-디자인패턴/javascript/ES6/template/typescript/runner.ts: -------------------------------------------------------------------------------- 1 | import { HouseTemplate, WoodenHouse, GlassHouse } from '../template'; 2 | 3 | const glassHouse = new GlassHouse(); 4 | 5 | glassHouse.buildHouse(); 6 | 7 | const woodenHouse = new WoodenHouse(); 8 | woodenHouse.buildHouse(); 9 | -------------------------------------------------------------------------------- /chapter06-디자인패턴/javascript/ES6/visitor/README.md: -------------------------------------------------------------------------------- 1 | ## Visitor Pattern 2 | > 방문자 클래스로 하위 클래스의 실행 알고리즘을 변경하기 3 | -------------------------------------------------------------------------------- /chapter06-디자인패턴/javascript/ES6/visitor/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | Visitor 9 | 10 | 11 | 12 |

HOME

13 |
14 |

Visitor

15 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /chapter06-디자인패턴/javascript/ES6/visitor/runner.js: -------------------------------------------------------------------------------- 1 | import { Computer, ComputerPartDisplayVisitor } from './visitor.js'; 2 | const computerPart = new Computer(); 3 | computerPart.accept(new ComputerPartDisplayVisitor()); 4 | -------------------------------------------------------------------------------- /chapter06-디자인패턴/javascript/ES6/visitor/typescript/runner.ts: -------------------------------------------------------------------------------- 1 | import { 2 | ComputerPart, 3 | Computer, 4 | ComputerPartVisitor, 5 | ComputerPartDisplayVisitor, 6 | Mouse, 7 | Keyboard, 8 | Monitor, 9 | } from './visitor'; 10 | 11 | const computerPart = new Computer(); 12 | computerPart.accept(new ComputerPartDisplayVisitor()); 13 | -------------------------------------------------------------------------------- /chapter06-디자인패턴/javascript/img/Behavioral-Design-Patterns.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/chapter06-디자인패턴/javascript/img/Behavioral-Design-Patterns.png -------------------------------------------------------------------------------- /chapter06-디자인패턴/javascript/img/flux.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/chapter06-디자인패턴/javascript/img/flux.png -------------------------------------------------------------------------------- /chapter06-디자인패턴/javascript/img/mvc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/chapter06-디자인패턴/javascript/img/mvc.png -------------------------------------------------------------------------------- /chapter07-자료구조와_알고리즘/img/arraylist.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/chapter07-자료구조와_알고리즘/img/arraylist.png -------------------------------------------------------------------------------- /chapter07-자료구조와_알고리즘/img/arraylistvslinkedlist.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/chapter07-자료구조와_알고리즘/img/arraylistvslinkedlist.png -------------------------------------------------------------------------------- /chapter07-자료구조와_알고리즘/img/big-o.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/chapter07-자료구조와_알고리즘/img/big-o.png -------------------------------------------------------------------------------- /chapter07-자료구조와_알고리즘/img/linearlist.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/chapter07-자료구조와_알고리즘/img/linearlist.png -------------------------------------------------------------------------------- /chapter07-자료구조와_알고리즘/img/linkedlist.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/chapter07-자료구조와_알고리즘/img/linkedlist.png -------------------------------------------------------------------------------- /chapter07-자료구조와_알고리즘/img/queue.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/chapter07-자료구조와_알고리즘/img/queue.jpg -------------------------------------------------------------------------------- /chapter07-자료구조와_알고리즘/img/stack.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/chapter07-자료구조와_알고리즘/img/stack.jpg -------------------------------------------------------------------------------- /chapter07-자료구조와_알고리즘/implement/BinarySearch/index.js: -------------------------------------------------------------------------------- 1 | const binarySearch = (arr = [], target = 0) => { 2 | let left = 0; 3 | let right = arr.length - 1; 4 | 5 | while (left <= right) { 6 | const mid = Math.floor((left + right) / 2); 7 | if (target === arr[mid]) return mid; 8 | if (target < arr[mid]) { 9 | right = mid - 1; 10 | } else { 11 | left = mid + 1; 12 | } 13 | } 14 | 15 | return false; 16 | }; 17 | 18 | const arr = [1, 2, 3, 4]; 19 | console.log(binarySearch(arr, 4)); 20 | -------------------------------------------------------------------------------- /chapter08-유닉스와_리눅스/img/process.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/chapter08-유닉스와_리눅스/img/process.png -------------------------------------------------------------------------------- /chapter10-프론트엔드/PACKAGE.md: -------------------------------------------------------------------------------- 1 | # dependencies 2 | - 런타임 및 빌드, 개발 과정 모두에서 해당 키 하위의 패키지들이 필요(종속성)하여 앱이 빌드 될 때 번들에 포함되어 배포됩니다. 3 | 4 | # devDependencies 5 | - 런타임에서는 필요하지 않고 빌드 & 개발 과정에만 필요한 패키지입니다. 빌드 시 하위 패키지들은 빌드에 참조 되나 번들에는 포함되지 않습니다. 6 | 7 | # peerDependencies 8 | - 실제로 패키지를 직접 require(import)하지는 않아도 호환성에 필요한 경우 명시합니다. 9 | - npm@3 부터 npm@6까지는 peerDependencies가 자동으로 설치되지 않았고, 설령 버전이 맞지 않더라도 경고 문구만 떳어요. 헌데 npm@7 부터는 기본으로 설치되고, 이 버전이 맞지 않으면 에러도 발생합니다. -------------------------------------------------------------------------------- /chapter10-프론트엔드/img/9466d8aa53fc5b3e63a92858a94bb429df02bbd20012b738f0461343beaa6f90.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/chapter10-프론트엔드/img/9466d8aa53fc5b3e63a92858a94bb429df02bbd20012b738f0461343beaa6f90.gif -------------------------------------------------------------------------------- /chapter10-프론트엔드/img/domainName.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/chapter10-프론트엔드/img/domainName.jpg -------------------------------------------------------------------------------- /chapter10-프론트엔드/img/frontend-roadmap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/chapter10-프론트엔드/img/frontend-roadmap.png -------------------------------------------------------------------------------- /chapter10-프론트엔드/img/internet-schema-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/chapter10-프론트엔드/img/internet-schema-2.png -------------------------------------------------------------------------------- /chapter10-프론트엔드/img/internet-schema-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/chapter10-프론트엔드/img/internet-schema-3.png -------------------------------------------------------------------------------- /chapter10-프론트엔드/img/internet-schema-5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/chapter10-프론트엔드/img/internet-schema-5.png -------------------------------------------------------------------------------- /chapter10-프론트엔드/img/internet-schema-6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/chapter10-프론트엔드/img/internet-schema-6.png -------------------------------------------------------------------------------- /chapter10-프론트엔드/img/internet-schema-7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/chapter10-프론트엔드/img/internet-schema-7.png -------------------------------------------------------------------------------- /chapter11-방법론/img/01.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/chapter11-방법론/img/01.JPG -------------------------------------------------------------------------------- /chapter11-방법론/img/02.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/chapter11-방법론/img/02.JPG -------------------------------------------------------------------------------- /chapter11-방법론/img/03.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/chapter11-방법론/img/03.JPG -------------------------------------------------------------------------------- /chapter11-방법론/img/04.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/chapter11-방법론/img/04.JPG -------------------------------------------------------------------------------- /chapter11-방법론/img/05.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/chapter11-방법론/img/05.JPG -------------------------------------------------------------------------------- /chapter11-방법론/img/06.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/chapter11-방법론/img/06.JPG -------------------------------------------------------------------------------- /chapter11-방법론/img/07.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/chapter11-방법론/img/07.JPG -------------------------------------------------------------------------------- /chapter11-방법론/img/08.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/chapter11-방법론/img/08.JPG -------------------------------------------------------------------------------- /chapter11-방법론/img/09.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/chapter11-방법론/img/09.JPG -------------------------------------------------------------------------------- /chapter11-방법론/img/10.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/chapter11-방법론/img/10.JPG -------------------------------------------------------------------------------- /chapter11-방법론/img/11.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/chapter11-방법론/img/11.JPG -------------------------------------------------------------------------------- /chapter11-방법론/img/12.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/chapter11-방법론/img/12.JPG -------------------------------------------------------------------------------- /chapter11-방법론/img/13.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/chapter11-방법론/img/13.JPG -------------------------------------------------------------------------------- /chapter11-방법론/img/14.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/chapter11-방법론/img/14.JPG -------------------------------------------------------------------------------- /chapter11-방법론/img/15.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/chapter11-방법론/img/15.JPG -------------------------------------------------------------------------------- /chapter11-방법론/img/16.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/chapter11-방법론/img/16.JPG -------------------------------------------------------------------------------- /chapter11-방법론/img/17.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/chapter11-방법론/img/17.JPG -------------------------------------------------------------------------------- /chapter11-방법론/img/18.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/chapter11-방법론/img/18.JPG -------------------------------------------------------------------------------- /chapter11-방법론/img/19.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/chapter11-방법론/img/19.JPG -------------------------------------------------------------------------------- /chapter11-방법론/img/20.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/chapter11-방법론/img/20.JPG -------------------------------------------------------------------------------- /chapter11-방법론/img/21.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/chapter11-방법론/img/21.JPG -------------------------------------------------------------------------------- /chapter11-방법론/img/22.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/chapter11-방법론/img/22.JPG -------------------------------------------------------------------------------- /chapter11-방법론/img/23.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/chapter11-방법론/img/23.JPG -------------------------------------------------------------------------------- /chapter11-방법론/img/24.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/chapter11-방법론/img/24.JPG -------------------------------------------------------------------------------- /chapter11-방법론/img/25.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/chapter11-방법론/img/25.JPG -------------------------------------------------------------------------------- /chapter11-방법론/img/26.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/chapter11-방법론/img/26.JPG -------------------------------------------------------------------------------- /chapter11-방법론/img/27.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/chapter11-방법론/img/27.JPG -------------------------------------------------------------------------------- /chapter11-방법론/img/28.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/chapter11-방법론/img/28.JPG -------------------------------------------------------------------------------- /chapter11-방법론/img/29.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/chapter11-방법론/img/29.JPG -------------------------------------------------------------------------------- /chapter11-방법론/img/30.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/chapter11-방법론/img/30.JPG -------------------------------------------------------------------------------- /chapter11-방법론/img/31.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/chapter11-방법론/img/31.JPG -------------------------------------------------------------------------------- /chapter11-방법론/img/32.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/chapter11-방법론/img/32.JPG -------------------------------------------------------------------------------- /chapter11-방법론/img/33.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/chapter11-방법론/img/33.JPG -------------------------------------------------------------------------------- /chapter11-방법론/img/34.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/chapter11-방법론/img/34.JPG -------------------------------------------------------------------------------- /chapter11-방법론/img/35.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/chapter11-방법론/img/35.JPG -------------------------------------------------------------------------------- /chapter11-방법론/img/36.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/chapter11-방법론/img/36.JPG -------------------------------------------------------------------------------- /chapter11-방법론/img/37.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/chapter11-방법론/img/37.JPG -------------------------------------------------------------------------------- /chapter11-방법론/img/38.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/chapter11-방법론/img/38.JPG -------------------------------------------------------------------------------- /chapter11-방법론/img/39.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/chapter11-방법론/img/39.JPG -------------------------------------------------------------------------------- /chapter11-방법론/img/40.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/chapter11-방법론/img/40.JPG -------------------------------------------------------------------------------- /chapter11-방법론/img/41.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/chapter11-방법론/img/41.JPG -------------------------------------------------------------------------------- /chapter11-방법론/img/42.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/chapter11-방법론/img/42.JPG -------------------------------------------------------------------------------- /chapter11-방법론/img/43.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/chapter11-방법론/img/43.JPG -------------------------------------------------------------------------------- /chapter11-방법론/img/44.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/chapter11-방법론/img/44.JPG -------------------------------------------------------------------------------- /chapter11-방법론/img/45.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/chapter11-방법론/img/45.JPG -------------------------------------------------------------------------------- /chapter11-방법론/img/46.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/chapter11-방법론/img/46.JPG -------------------------------------------------------------------------------- /chapter11-방법론/img/47.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/chapter11-방법론/img/47.JPG -------------------------------------------------------------------------------- /chapter11-방법론/img/48.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/chapter11-방법론/img/48.JPG -------------------------------------------------------------------------------- /chapter11-방법론/img/49.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/chapter11-방법론/img/49.JPG -------------------------------------------------------------------------------- /chapter11-방법론/img/50.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/chapter11-방법론/img/50.JPG -------------------------------------------------------------------------------- /chapter11-방법론/img/51.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/chapter11-방법론/img/51.JPG -------------------------------------------------------------------------------- /chapter11-방법론/img/52.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/chapter11-방법론/img/52.JPG -------------------------------------------------------------------------------- /chapter11-방법론/img/53.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/chapter11-방법론/img/53.JPG -------------------------------------------------------------------------------- /chapter11-방법론/img/54.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/chapter11-방법론/img/54.JPG -------------------------------------------------------------------------------- /chapter11-방법론/img/55.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/chapter11-방법론/img/55.JPG -------------------------------------------------------------------------------- /chapter11-방법론/img/agile/agile.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/chapter11-방법론/img/agile/agile.png -------------------------------------------------------------------------------- /chapter11-방법론/img/ddd/00.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/chapter11-방법론/img/ddd/00.png -------------------------------------------------------------------------------- /chapter11-방법론/img/ddd/01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/chapter11-방법론/img/ddd/01.png -------------------------------------------------------------------------------- /chapter11-방법론/img/ddd/02.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/chapter11-방법론/img/ddd/02.png -------------------------------------------------------------------------------- /chapter11-방법론/img/ddd/03.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/chapter11-방법론/img/ddd/03.png -------------------------------------------------------------------------------- /chapter11-방법론/img/ddd/04.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/chapter11-방법론/img/ddd/04.png -------------------------------------------------------------------------------- /chapter11-방법론/img/ddd/05.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/chapter11-방법론/img/ddd/05.png -------------------------------------------------------------------------------- /chapter11-방법론/img/ddd/06.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/chapter11-방법론/img/ddd/06.png -------------------------------------------------------------------------------- /chapter11-방법론/img/ddd/07.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/chapter11-방법론/img/ddd/07.png -------------------------------------------------------------------------------- /chapter11-방법론/img/ddd/08.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/chapter11-방법론/img/ddd/08.png -------------------------------------------------------------------------------- /chapter11-방법론/img/ddd/09.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/chapter11-방법론/img/ddd/09.png -------------------------------------------------------------------------------- /chapter11-방법론/img/ddd/10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/chapter11-방법론/img/ddd/10.png -------------------------------------------------------------------------------- /chapter11-방법론/img/ddd/11.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/chapter11-방법론/img/ddd/11.png -------------------------------------------------------------------------------- /chapter11-방법론/img/ddd/12.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/chapter11-방법론/img/ddd/12.png -------------------------------------------------------------------------------- /chapter11-방법론/img/ddd/13.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/chapter11-방법론/img/ddd/13.png -------------------------------------------------------------------------------- /chapter11-방법론/img/waterfall/01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/chapter11-방법론/img/waterfall/01.png -------------------------------------------------------------------------------- /chapter11-방법론/img/waterfall/waterfall.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/chapter11-방법론/img/waterfall/waterfall.png -------------------------------------------------------------------------------- /chapter13-디자인/01_day/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Document 6 | 7 | 8 |
9 |
10 |
11 | 14 | 20 |
21 |
22 |
23 | 24 | -------------------------------------------------------------------------------- /chapter13-디자인/02_day/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Document 6 | 7 | 8 | 9 |
10 |
11 |
12 | 15 | 21 |
22 |
23 |
24 | 25 | -------------------------------------------------------------------------------- /chapter13-디자인/02_day/main.css: -------------------------------------------------------------------------------- 1 | body { 2 | /*default: 8px*/ 3 | margin: 0; 4 | padding: 0; 5 | } 6 | 7 | .header { 8 | /*default font-size 16px*/ 9 | /*default width 100%*/ 10 | /*default height auto*/ 11 | background: white; 12 | border-bottom: 1px solid lightgray; 13 | } 14 | 15 | .container { 16 | width: 980px; 17 | margin: auto; /*600px만큼 가로 너비를 가졌으니 바깥 여백을 자동으로 계산하여 좌, 우를 나눠 가짐*/ 18 | } 19 | 20 | .container-left { 21 | padding-top: 20px; 22 | padding-bottom: 20px; 23 | } 24 | 25 | .logo { 26 | float: left; 27 | margin-right: 5px; 28 | } 29 | 30 | .logo img { 31 | display: block; 32 | } 33 | 34 | .menu { 35 | float: left; 36 | } 37 | 38 | .menu-item { 39 | float: left; 40 | /* margin-right:10px; */ 41 | padding: 8px 10px; /*margin-top/bottom 8px, margin-right/left 10px*/ 42 | } 43 | 44 | .clearfix::after { 45 | content: ''; 46 | display: block; 47 | clear: both; 48 | } 49 | -------------------------------------------------------------------------------- /chapter13-디자인/04_day/01.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/chapter13-디자인/04_day/01.JPG -------------------------------------------------------------------------------- /chapter13-디자인/06_day/01.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/chapter13-디자인/06_day/01.JPG -------------------------------------------------------------------------------- /chapter13-디자인/06_day/02.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/chapter13-디자인/06_day/02.JPG -------------------------------------------------------------------------------- /chapter13-디자인/06_day/03.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/chapter13-디자인/06_day/03.JPG -------------------------------------------------------------------------------- /chapter13-디자인/06_day/04.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/chapter13-디자인/06_day/04.JPG -------------------------------------------------------------------------------- /chapter13-디자인/06_day/05.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/chapter13-디자인/06_day/05.JPG -------------------------------------------------------------------------------- /chapter13-디자인/06_day/06.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/chapter13-디자인/06_day/06.JPG -------------------------------------------------------------------------------- /chapter13-디자인/06_day/07.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/chapter13-디자인/06_day/07.JPG -------------------------------------------------------------------------------- /chapter13-디자인/06_day/08.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/chapter13-디자인/06_day/08.JPG -------------------------------------------------------------------------------- /chapter13-디자인/06_day/09.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/chapter13-디자인/06_day/09.JPG -------------------------------------------------------------------------------- /chapter13-디자인/06_day/10.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/chapter13-디자인/06_day/10.JPG -------------------------------------------------------------------------------- /chapter13-디자인/06_day/11.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/chapter13-디자인/06_day/11.JPG -------------------------------------------------------------------------------- /chapter13-디자인/06_day/12.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/chapter13-디자인/06_day/12.JPG -------------------------------------------------------------------------------- /chapter13-디자인/06_day/flex-basis.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Document 8 | 9 | 27 | 28 |
29 |
Good job!
30 |
A
31 |
Nice
32 |
33 | 34 | -------------------------------------------------------------------------------- /chapter13-디자인/06_day/flex-grow.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Document 8 | 9 | 31 | 32 |
33 |
1
34 |
2
35 |
3
36 |
37 | 38 | -------------------------------------------------------------------------------- /chapter13-디자인/06_day/flex-wrap.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Document 8 | 9 | 23 | 24 |
25 |
A
26 |
B
27 |
C
28 |
D
29 |
E
30 |
31 | 32 | -------------------------------------------------------------------------------- /chapter13-디자인/06_day/flex2.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Document 8 | 9 | 23 | 24 |
25 |
Good job!
26 |
A
27 |
Nice
28 |
29 | 30 | -------------------------------------------------------------------------------- /chapter13-디자인/07_day/01.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/chapter13-디자인/07_day/01.jpg -------------------------------------------------------------------------------- /chapter13-디자인/07_day/02.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/chapter13-디자인/07_day/02.jpg -------------------------------------------------------------------------------- /chapter13-디자인/07_day/03.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/chapter13-디자인/07_day/03.jpg -------------------------------------------------------------------------------- /chapter13-디자인/07_day/04.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/chapter13-디자인/07_day/04.jpg -------------------------------------------------------------------------------- /chapter13-디자인/07_day/05.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/chapter13-디자인/07_day/05.jpg -------------------------------------------------------------------------------- /chapter13-디자인/07_day/06.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/chapter13-디자인/07_day/06.jpg -------------------------------------------------------------------------------- /chapter13-디자인/07_day/07.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/chapter13-디자인/07_day/07.jpg -------------------------------------------------------------------------------- /chapter13-디자인/07_day/08.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/chapter13-디자인/07_day/08.jpg -------------------------------------------------------------------------------- /chapter13-디자인/07_day/09.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/chapter13-디자인/07_day/09.jpg -------------------------------------------------------------------------------- /chapter13-디자인/07_day/10.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/chapter13-디자인/07_day/10.jpg -------------------------------------------------------------------------------- /chapter13-디자인/07_day/11.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/chapter13-디자인/07_day/11.jpg -------------------------------------------------------------------------------- /chapter13-디자인/07_day/12.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/chapter13-디자인/07_day/12.jpg -------------------------------------------------------------------------------- /chapter13-디자인/07_day/13.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/chapter13-디자인/07_day/13.jpg -------------------------------------------------------------------------------- /chapter13-디자인/07_day/14.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/chapter13-디자인/07_day/14.jpg -------------------------------------------------------------------------------- /chapter13-디자인/07_day/15.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/chapter13-디자인/07_day/15.jpg -------------------------------------------------------------------------------- /chapter13-디자인/07_day/16.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/chapter13-디자인/07_day/16.jpg -------------------------------------------------------------------------------- /chapter13-디자인/07_day/17.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/chapter13-디자인/07_day/17.jpg -------------------------------------------------------------------------------- /chapter13-디자인/07_day/18.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/chapter13-디자인/07_day/18.jpg -------------------------------------------------------------------------------- /chapter13-디자인/07_day/19.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/chapter13-디자인/07_day/19.jpg -------------------------------------------------------------------------------- /chapter13-디자인/07_day/20.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/chapter13-디자인/07_day/20.jpg -------------------------------------------------------------------------------- /chapter13-디자인/07_day/21.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/chapter13-디자인/07_day/21.jpg -------------------------------------------------------------------------------- /chapter13-디자인/07_day/22.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/chapter13-디자인/07_day/22.jpg -------------------------------------------------------------------------------- /chapter13-디자인/07_day/23.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/chapter13-디자인/07_day/23.jpg -------------------------------------------------------------------------------- /chapter13-디자인/07_day/24.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/chapter13-디자인/07_day/24.jpg -------------------------------------------------------------------------------- /chapter13-디자인/07_day/25.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/chapter13-디자인/07_day/25.jpg -------------------------------------------------------------------------------- /chapter13-디자인/07_day/26.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/chapter13-디자인/07_day/26.jpg -------------------------------------------------------------------------------- /chapter13-디자인/07_day/27.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/chapter13-디자인/07_day/27.jpg -------------------------------------------------------------------------------- /chapter13-디자인/07_day/display.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Document 8 | 9 | 22 | 23 |
24 |
1
25 |
2
26 |
3
27 |
28 |
29 |
1
30 |
2
31 |
3
32 |
33 | 34 | 35 | -------------------------------------------------------------------------------- /chapter13-디자인/07_day/grid-auto-flow.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Document 8 | 9 | 27 | 28 | 29 |
30 |
1
31 |
2
32 |
3
33 |
4
34 |
35 | 36 | 37 | -------------------------------------------------------------------------------- /chapter13-디자인/07_day/grid-function.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Document 8 | 9 | 20 | 21 |
22 |
www
23 |
testtest
24 |
3
25 |
4
26 |
27 | 28 | 29 | -------------------------------------------------------------------------------- /chapter13-디자인/07_day/grid-template-columns2.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Document 8 | 9 | 18 | 19 |
20 |
1
21 |
2
22 |
3
23 |
4
24 |
25 | 26 | 27 | -------------------------------------------------------------------------------- /chapter13-디자인/07_day/grid-template-rows2.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Document 8 | 9 | 24 | 25 |
26 |
1
27 |
2
28 |
3
29 |
4
30 |
31 | 32 | 33 | -------------------------------------------------------------------------------- /chapter13-디자인/img/01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/chapter13-디자인/img/01.png -------------------------------------------------------------------------------- /etc01-시험_정리/SQLD/README.md: -------------------------------------------------------------------------------- 1 | # SQLD 시험 요약 저장소 2 | 3 | ## [1회차](sqld_01.md) 4 | - 데이터 모델의 이해 5 | 6 |
7 | 8 | ## [2회차](sqld_02.md) 9 | - 엔터티, 속성, 관계 10 | 11 |
12 | 13 | ## [3회차](sqld_03.md) 14 | - 성능 데이터 모델링 15 | 16 |
17 | 18 | ## [4회차](sqld_04.md) 19 | - SQL 기본 20 | 21 |
22 | 23 | ## [5회차](sqld_05.md) 24 | - SQL 기본 및 활용 25 | 26 |
27 | 28 | ## [6회차](sqld_06.md) 29 | - SQL 활용 30 | 31 |
32 | -------------------------------------------------------------------------------- /etc01-시험_정리/SQLD/images/SQL_001.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/etc01-시험_정리/SQLD/images/SQL_001.jpg -------------------------------------------------------------------------------- /etc01-시험_정리/SQLD/images/SQL_002.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/etc01-시험_정리/SQLD/images/SQL_002.jpg -------------------------------------------------------------------------------- /etc01-시험_정리/SQLD/images/SQL_003.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/etc01-시험_정리/SQLD/images/SQL_003.jpg -------------------------------------------------------------------------------- /etc01-시험_정리/SQLD/images/SQL_004.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/etc01-시험_정리/SQLD/images/SQL_004.jpg -------------------------------------------------------------------------------- /etc01-시험_정리/SQLD/images/SQL_005.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/etc01-시험_정리/SQLD/images/SQL_005.jpg -------------------------------------------------------------------------------- /etc01-시험_정리/SQLD/images/SQL_006.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/etc01-시험_정리/SQLD/images/SQL_006.jpg -------------------------------------------------------------------------------- /etc01-시험_정리/SQLD/images/SQL_007.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/etc01-시험_정리/SQLD/images/SQL_007.jpg -------------------------------------------------------------------------------- /etc01-시험_정리/SQLD/images/SQL_008.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/etc01-시험_정리/SQLD/images/SQL_008.jpg -------------------------------------------------------------------------------- /etc01-시험_정리/SQLD/images/SQL_009.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/etc01-시험_정리/SQLD/images/SQL_009.jpg -------------------------------------------------------------------------------- /etc01-시험_정리/SQLD/images/SQL_010.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/etc01-시험_정리/SQLD/images/SQL_010.jpg -------------------------------------------------------------------------------- /etc01-시험_정리/SQLD/images/SQL_011.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/etc01-시험_정리/SQLD/images/SQL_011.jpg -------------------------------------------------------------------------------- /etc01-시험_정리/SQLD/images/SQL_012.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/etc01-시험_정리/SQLD/images/SQL_012.jpg -------------------------------------------------------------------------------- /etc01-시험_정리/SQLD/images/SQL_013.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/etc01-시험_정리/SQLD/images/SQL_013.jpg -------------------------------------------------------------------------------- /etc01-시험_정리/SQLD/images/SQL_014.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/etc01-시험_정리/SQLD/images/SQL_014.jpg -------------------------------------------------------------------------------- /etc01-시험_정리/SQLD/images/SQL_015.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/etc01-시험_정리/SQLD/images/SQL_015.jpg -------------------------------------------------------------------------------- /etc01-시험_정리/SQLD/images/SQL_016.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/etc01-시험_정리/SQLD/images/SQL_016.jpg -------------------------------------------------------------------------------- /etc01-시험_정리/SQLD/images/SQL_017.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/etc01-시험_정리/SQLD/images/SQL_017.jpg -------------------------------------------------------------------------------- /etc01-시험_정리/SQLD/images/SQL_018.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/etc01-시험_정리/SQLD/images/SQL_018.jpg -------------------------------------------------------------------------------- /etc01-시험_정리/SQLD/images/SQL_019.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/etc01-시험_정리/SQLD/images/SQL_019.jpg -------------------------------------------------------------------------------- /etc01-시험_정리/SQLD/images/SQL_020.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/etc01-시험_정리/SQLD/images/SQL_020.jpg -------------------------------------------------------------------------------- /etc01-시험_정리/SQLD/images/SQL_021.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/etc01-시험_정리/SQLD/images/SQL_021.jpg -------------------------------------------------------------------------------- /etc01-시험_정리/SQLD/images/SQL_022.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/etc01-시험_정리/SQLD/images/SQL_022.jpg -------------------------------------------------------------------------------- /etc01-시험_정리/SQLD/images/SQL_023.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/etc01-시험_정리/SQLD/images/SQL_023.jpg -------------------------------------------------------------------------------- /etc01-시험_정리/SQLD/images/SQL_024.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/etc01-시험_정리/SQLD/images/SQL_024.jpg -------------------------------------------------------------------------------- /etc01-시험_정리/SQLD/images/SQL_025.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/etc01-시험_정리/SQLD/images/SQL_025.jpg -------------------------------------------------------------------------------- /etc01-시험_정리/SQLD/images/SQL_026.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/etc01-시험_정리/SQLD/images/SQL_026.jpg -------------------------------------------------------------------------------- /etc01-시험_정리/SQLD/images/SQL_027.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/etc01-시험_정리/SQLD/images/SQL_027.jpg -------------------------------------------------------------------------------- /etc01-시험_정리/SQLD/images/SQL_028.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/etc01-시험_정리/SQLD/images/SQL_028.jpg -------------------------------------------------------------------------------- /etc01-시험_정리/SQLD/images/SQL_029.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/etc01-시험_정리/SQLD/images/SQL_029.jpg -------------------------------------------------------------------------------- /etc01-시험_정리/SQLD/images/SQL_030.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/etc01-시험_정리/SQLD/images/SQL_030.jpg -------------------------------------------------------------------------------- /etc01-시험_정리/SQLD/images/SQL_031.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/etc01-시험_정리/SQLD/images/SQL_031.jpg -------------------------------------------------------------------------------- /etc01-시험_정리/SQLD/images/SQL_032.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/etc01-시험_정리/SQLD/images/SQL_032.jpg -------------------------------------------------------------------------------- /etc01-시험_정리/SQLD/images/SQL_033.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/etc01-시험_정리/SQLD/images/SQL_033.jpg -------------------------------------------------------------------------------- /etc01-시험_정리/SQLD/images/SQL_034.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/etc01-시험_정리/SQLD/images/SQL_034.jpg -------------------------------------------------------------------------------- /etc01-시험_정리/SQLD/images/SQL_035.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/etc01-시험_정리/SQLD/images/SQL_035.jpg -------------------------------------------------------------------------------- /etc01-시험_정리/SQLD/images/SQL_036.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/etc01-시험_정리/SQLD/images/SQL_036.jpg -------------------------------------------------------------------------------- /etc01-시험_정리/SQLD/images/SQL_037.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/etc01-시험_정리/SQLD/images/SQL_037.jpg -------------------------------------------------------------------------------- /etc01-시험_정리/SQLD/images/SQL_038.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/etc01-시험_정리/SQLD/images/SQL_038.jpg -------------------------------------------------------------------------------- /etc01-시험_정리/SQLD/images/SQL_039.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/etc01-시험_정리/SQLD/images/SQL_039.jpg -------------------------------------------------------------------------------- /etc01-시험_정리/SQLD/images/SQL_040.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/etc01-시험_정리/SQLD/images/SQL_040.jpg -------------------------------------------------------------------------------- /etc01-시험_정리/SQLD/images/SQL_041.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/etc01-시험_정리/SQLD/images/SQL_041.jpg -------------------------------------------------------------------------------- /etc01-시험_정리/SQLD/images/SQL_042.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/etc01-시험_정리/SQLD/images/SQL_042.jpg -------------------------------------------------------------------------------- /etc01-시험_정리/SQLD/images/SQL_043.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/etc01-시험_정리/SQLD/images/SQL_043.jpg -------------------------------------------------------------------------------- /etc01-시험_정리/SQLD/images/SQL_044.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/etc01-시험_정리/SQLD/images/SQL_044.jpg -------------------------------------------------------------------------------- /etc01-시험_정리/SQLD/images/SQL_045.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/etc01-시험_정리/SQLD/images/SQL_045.jpg -------------------------------------------------------------------------------- /etc01-시험_정리/SQLD/images/SQL_046.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/etc01-시험_정리/SQLD/images/SQL_046.jpg -------------------------------------------------------------------------------- /etc01-시험_정리/SQLD/images/SQL_047.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/etc01-시험_정리/SQLD/images/SQL_047.jpg -------------------------------------------------------------------------------- /etc01-시험_정리/SQLD/images/SQL_048.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/etc01-시험_정리/SQLD/images/SQL_048.jpg -------------------------------------------------------------------------------- /etc01-시험_정리/SQLD/images/SQL_049.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/etc01-시험_정리/SQLD/images/SQL_049.jpg -------------------------------------------------------------------------------- /etc01-시험_정리/SQLD/images/SQL_050.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/etc01-시험_정리/SQLD/images/SQL_050.jpg -------------------------------------------------------------------------------- /etc01-시험_정리/SQLD/images/SQL_051.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/etc01-시험_정리/SQLD/images/SQL_051.jpg -------------------------------------------------------------------------------- /etc01-시험_정리/SQLD/images/SQL_052.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/etc01-시험_정리/SQLD/images/SQL_052.jpg -------------------------------------------------------------------------------- /etc01-시험_정리/SQLD/images/SQL_053.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/etc01-시험_정리/SQLD/images/SQL_053.jpg -------------------------------------------------------------------------------- /etc01-시험_정리/SQLD/images/SQL_054.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/etc01-시험_정리/SQLD/images/SQL_054.jpg -------------------------------------------------------------------------------- /etc01-시험_정리/SQLD/images/SQL_055.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/etc01-시험_정리/SQLD/images/SQL_055.jpg -------------------------------------------------------------------------------- /etc01-시험_정리/SQLD/images/SQL_056.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/etc01-시험_정리/SQLD/images/SQL_056.jpg -------------------------------------------------------------------------------- /etc01-시험_정리/SQLD/images/SQL_057.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/etc01-시험_정리/SQLD/images/SQL_057.jpg -------------------------------------------------------------------------------- /etc01-시험_정리/SQLD/images/SQL_058.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/etc01-시험_정리/SQLD/images/SQL_058.jpg -------------------------------------------------------------------------------- /etc01-시험_정리/SQLD/images/SQL_059.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/etc01-시험_정리/SQLD/images/SQL_059.jpg -------------------------------------------------------------------------------- /etc01-시험_정리/SQLD/images/SQL_060.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/etc01-시험_정리/SQLD/images/SQL_060.jpg -------------------------------------------------------------------------------- /etc01-시험_정리/SQLD/images/SQL_061.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/etc01-시험_정리/SQLD/images/SQL_061.jpg -------------------------------------------------------------------------------- /etc01-시험_정리/SQLD/images/SQL_062.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/etc01-시험_정리/SQLD/images/SQL_062.jpg -------------------------------------------------------------------------------- /etc01-시험_정리/SQLD/images/SQL_063.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/etc01-시험_정리/SQLD/images/SQL_063.jpg -------------------------------------------------------------------------------- /etc01-시험_정리/SQLD/images/SQL_064.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/etc01-시험_정리/SQLD/images/SQL_064.jpg -------------------------------------------------------------------------------- /etc01-시험_정리/SQLD/images/SQL_065.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/etc01-시험_정리/SQLD/images/SQL_065.jpg -------------------------------------------------------------------------------- /etc01-시험_정리/SQLD/images/SQL_066.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/etc01-시험_정리/SQLD/images/SQL_066.jpg -------------------------------------------------------------------------------- /etc01-시험_정리/SQLD/images/SQL_067.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/etc01-시험_정리/SQLD/images/SQL_067.jpg -------------------------------------------------------------------------------- /etc01-시험_정리/SQLD/images/SQL_068.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/etc01-시험_정리/SQLD/images/SQL_068.jpg -------------------------------------------------------------------------------- /etc01-시험_정리/SQLD/images/SQL_069.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/etc01-시험_정리/SQLD/images/SQL_069.jpg -------------------------------------------------------------------------------- /etc01-시험_정리/SQLD/images/SQL_070.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/etc01-시험_정리/SQLD/images/SQL_070.jpg -------------------------------------------------------------------------------- /etc01-시험_정리/SQLD/images/SQL_071.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/etc01-시험_정리/SQLD/images/SQL_071.jpg -------------------------------------------------------------------------------- /etc01-시험_정리/SQLD/images/SQL_072.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/etc01-시험_정리/SQLD/images/SQL_072.jpg -------------------------------------------------------------------------------- /etc01-시험_정리/SQLD/images/SQL_073.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/etc01-시험_정리/SQLD/images/SQL_073.jpg -------------------------------------------------------------------------------- /etc01-시험_정리/SQLD/images/SQL_074.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/etc01-시험_정리/SQLD/images/SQL_074.jpg -------------------------------------------------------------------------------- /etc01-시험_정리/SQLD/images/SQL_075.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/etc01-시험_정리/SQLD/images/SQL_075.jpg -------------------------------------------------------------------------------- /etc01-시험_정리/SQLD/images/SQL_076.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/etc01-시험_정리/SQLD/images/SQL_076.jpg -------------------------------------------------------------------------------- /etc01-시험_정리/SQLD/images/SQL_077.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/etc01-시험_정리/SQLD/images/SQL_077.jpg -------------------------------------------------------------------------------- /etc01-시험_정리/SQLD/images/SQL_078.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/etc01-시험_정리/SQLD/images/SQL_078.jpg -------------------------------------------------------------------------------- /etc01-시험_정리/SQLD/images/SQL_079.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/etc01-시험_정리/SQLD/images/SQL_079.jpg -------------------------------------------------------------------------------- /etc01-시험_정리/SQLD/images/SQL_080.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/etc01-시험_정리/SQLD/images/SQL_080.jpg -------------------------------------------------------------------------------- /etc01-시험_정리/SQLD/images/SQL_081.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/etc01-시험_정리/SQLD/images/SQL_081.jpg -------------------------------------------------------------------------------- /etc01-시험_정리/SQLD/images/SQL_082.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/etc01-시험_정리/SQLD/images/SQL_082.jpg -------------------------------------------------------------------------------- /etc01-시험_정리/SQLD/images/SQL_083.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/etc01-시험_정리/SQLD/images/SQL_083.jpg -------------------------------------------------------------------------------- /etc01-시험_정리/SQLD/images/SQL_084.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/etc01-시험_정리/SQLD/images/SQL_084.jpg -------------------------------------------------------------------------------- /etc01-시험_정리/SQLD/images/SQL_085.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/etc01-시험_정리/SQLD/images/SQL_085.jpg -------------------------------------------------------------------------------- /etc01-시험_정리/정보처리기사/exam2.md: -------------------------------------------------------------------------------- 1 | # 오답노트 2 | 3 | ## 다음의 설명과 가장 부합하는 용어를 쓰시오. 4 | - 무엇을 개발해야 하는지 요구사항을 정의하고, 분석 및 관리하는 프로세스를 연구하는 학문이다. 요구사항 변경의 원인과 처리 방법을 이해하고 요구사항 관리 프로세스의 품질을 개선하여 소프트웨어 프로젝트 실패를 최소화하는 것을 목표로 한다. 5 | 6 | > 답 : 7 | 8 | ## 다음은 활동(Activity) 다이어그램과 그에 대한 해석이다. 해석을 참고하여 다이어그램의 괄호(1~3)에 들어갈 알맞은 내용을 쓰시오. 9 | 10 |
11 | 12 | 13 | 14 |
15 | 16 | > 해석 17 | - <회원> 액터 18 | - 회원이 카드를 신청하기 위해 로그인 단추를 클릭한 후 회원정보를 입력한다. 19 | - 입력된 정보가 잘못됐으면 회원정보를 다시 입력받고, 그렇지 않으면 '카드발급 신청'으로 이동한다. 20 | - 회원이 신청할 카드를 선택하면 '본인 인증'으로 이동한다. 21 | - 카드발급 신청을 완료하고 액티비티를 종료한다. 22 | - <인증> 시스템 23 | - 회원에 대한 본인 인증을 진행한다. 24 | - 인증에 성공하면 '신용 확인'으로 이동하고, 인증에 실패하면 '인증 재시도'로 이동한다. 25 | - 다시 진행한 본인 인증에 성공하면 '신용 확인'으로 이동하고, 이번에도 인증에 실패하면 액티비티를 종료한다. 26 | - <신용확인> 시스템 27 | - 회원에 대한 신용 확인을 진행한다. 28 | - 신용 상태가 '신용 양호'로 확인되면 '신청 완료'로 이동하고, 신용 상태가 '신용 불량'으로 확인되면 '발급 취소'로 이동한 후 액티비티를 종료한다. 29 | 30 | > 답 31 | > - (1). 32 | > - (2). 33 | > - (3). -------------------------------------------------------------------------------- /etc01-시험_정리/정보처리기사/factorial.js: -------------------------------------------------------------------------------- 1 | function factorial(x, y) { 2 | // 받는 변수 : x, 계산된 변수 : y 3 | 4 | // 종료 로직, 해당 조건문이 되면 함수 실행 종료 5 | if (x == 0) { 6 | return console.log(y); 7 | } 8 | 9 | // 함수가 처음 실행될 때 10 | if (!y) { 11 | factorial(x - 1, x); 12 | // x = 4, y = 5; 13 | // 함수가 두번째부터 실행될 때 14 | } else { 15 | y = y * x; 16 | factorial(x - 1, y); 17 | } 18 | } 19 | 20 | factorial(5); 21 | 22 | // 5! 23 | /** 24 | * 1. 변수 i를 받아서 계산을 시작한다. 25 | * 2. 계산이 1회 끝나면 변수 i의 값을 1 감소 시켜서 재실행한다. 26 | * 3. 변수 i가 0보다 클 때까지 반복한다. 27 | * 4. 순서 예시 28 | * x = 5, y = 0 29 | * x = 4, y = 5 30 | * x = 3, y = 20 31 | * x = 2, y = 60 32 | * x = 1, y = 120 33 | * x = 0, y = 120 34 | */ -------------------------------------------------------------------------------- /etc01-시험_정리/정보처리기사/img/exam_01.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/etc01-시험_정리/정보처리기사/img/exam_01.jpg -------------------------------------------------------------------------------- /etc01-시험_정리/정보처리기사/정보처리기사_키워드_요약.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/InSeong-So/IT-Note/30f8fd2b2879715245426ae05cf12922e0845b62/etc01-시험_정리/정보처리기사/정보처리기사_키워드_요약.pdf -------------------------------------------------------------------------------- /jest.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | moduleFileExtensions: ['js', 'json', 'jsx', 'ts', 'tsx', 'json'], 3 | transform: { 4 | '^.+\\.(js|jsx)?$': 'babel-jest', 5 | }, 6 | moduleNameMapper: { 7 | '^@/(.*)$': '/$1', 8 | '\\.(jpg|ico|jpeg|png|gif|eot|otf|webp|svg|ttf|woff|woff2|mp4|webm|wav|mp3|m4a|aac|oga)$': 9 | '/__mocks__/fileMock.js', 10 | '\\.(css|less)$': '/__mocks__/fileMock.js', 11 | }, 12 | testMatch: ['/**/*.(js|jsx|ts|tsx)'], 13 | transformIgnorePatterns: ['/node_modules/'], 14 | }; 15 | -------------------------------------------------------------------------------- /jsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "baseUrl": "./", 4 | "paths": { 5 | } 6 | }, 7 | "exclude": [ 8 | "node_modules", 9 | ] 10 | } --------------------------------------------------------------------------------