├── .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 |
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 |
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 |
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 |
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 |
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 |
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 |
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 |
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 |
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 |
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 |
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 |
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 |
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 |
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 |
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 |
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 |
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 |
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 |
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 |
23 |
24 |
--------------------------------------------------------------------------------
/chapter13-디자인/02_day/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Document
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |

14 |
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 | }
--------------------------------------------------------------------------------