diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 00000000000..42afcd333b3 --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,95 @@ +{ + // Use IntelliSense to learn about possible attributes. + // Hover to view descriptions of existing attributes. + // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 + "version": "0.2.0", + "configurations": [ + { + "type": "java", + "name": "Debug (Launch)", + "request": "launch", + "cwd": "${workspaceFolder}", + "console": "internalConsole", + "stopOnEntry": false, + "mainClass": "", + "args": "" + }, + { + "type": "java", + "name": "Debug (Launch)-Exam01", + "request": "launch", + "cwd": "${workspaceFolder}", + "console": "internalConsole", + "stopOnEntry": false, + "mainClass": "Exam01", + "args": "" + }, + { + "type": "java", + "name": "Debug (Launch)-For1", + "request": "launch", + "cwd": "${workspaceFolder}", + "console": "internalConsole", + "stopOnEntry": false, + "mainClass": "For1", + "args": "" + }, + { + "type": "java", + "name": "Debug (Launch)-If", + "request": "launch", + "cwd": "${workspaceFolder}", + "console": "internalConsole", + "stopOnEntry": false, + "mainClass": "If", + "args": "" + }, + { + "type": "java", + "name": "Debug (Launch)-If2", + "request": "launch", + "cwd": "${workspaceFolder}", + "console": "internalConsole", + "stopOnEntry": false, + "mainClass": "If2", + "args": "" + }, + { + "type": "java", + "name": "Debug (Launch)-Test1", + "request": "launch", + "cwd": "${workspaceFolder}", + "console": "internalConsole", + "stopOnEntry": false, + "mainClass": "Test1", + "args": "" + }, + { + "type": "java", + "name": "Debug (Launch)-While1", + "request": "launch", + "cwd": "${workspaceFolder}", + "console": "internalConsole", + "stopOnEntry": false, + "mainClass": "While1", + "args": "" + }, + { + "type": "java", + "name": "Debug (Launch)-test1", + "request": "launch", + "cwd": "${workspaceFolder}", + "console": "internalConsole", + "stopOnEntry": false, + "mainClass": "test1", + "args": "" + }, + { + "type": "java", + "name": "Debug (Attach)", + "request": "attach", + "hostName": "localhost", + "port": "" + } + ] +} \ No newline at end of file diff --git a/Simple-Jekyll-Search.sublime-project b/Simple-Jekyll-Search.sublime-project new file mode 100644 index 00000000000..28623883b81 --- /dev/null +++ b/Simple-Jekyll-Search.sublime-project @@ -0,0 +1,8 @@ +{ + "folders": + [ + { + "path": "." + } + ] +} \ No newline at end of file diff --git a/_config.yml b/_config.yml index 6579ac9c760..6704e225275 100644 --- a/_config.yml +++ b/_config.yml @@ -1,15 +1,14 @@ # Site -title: Moon -bio: 'Minimal, one column jekyll theme.' -description: "Moon is a minimal, one column jekyll theme for your blog." +title: treasure_b +bio: '주니어개발자 공부 블로그' +description: "주니어개발자 개발, 취미, 관심사를 기록할 예정입니다." reading_time: true words_per_minute: 200 logo: 'assets/img/logo.png' background: 'assets/img/placeholder-big.jpg' tiled_bg: false # Set this true if you want to tile your background image, otherwise it will be covered -locale: en_US -url: https://taylantatli.github.io/Moon - +locale: ko_KR +url: https://choiwono.github.io # Jekyll permalink: /:title/ markdown: kramdown @@ -26,8 +25,8 @@ sass: style: compressed # Comments -disqus_shortname: taylantatli - +disqus_shortname: choiwono +# comments: true # Social # if you don't have any of social below, comment the line. #google: @@ -38,19 +37,20 @@ disqus_shortname: taylantatli #ad-slot: #bing-verify: #email: -twitter: username -facebook: username -github-url: username +#twitter: username +#facebook: username +search: +github-url: choiwono #stackoverflow: 123456/username from a "http://stackoverflow.com/users/123456/username" link #linkedin: username #xing: username -instagram: username +instagram: treasure_b #lastfm: username #tumblr: username #medium: '@username' #pinterest: username #foursquare: username -steam: username +#steam: username #dribbble: username #youtube: username #youtube-channel: channel diff --git a/_includes/nav.html b/_includes/nav.html index c24bd1ed75e..80baf33788e 100644 --- a/_includes/nav.html +++ b/_includes/nav.html @@ -88,7 +88,10 @@

{{ site.title }}

  • Posts
  • diff --git a/_includes/social-links.html b/_includes/social-links.html index 06d5304706c..cd571ba8d5d 100644 --- a/_includes/social-links.html +++ b/_includes/social-links.html @@ -1,5 +1,6 @@

    + {% if site.email %}{% endif %} {% if site.twitter %}{% endif %} {% if site.facebook %}{% endif %} diff --git a/_layouts/algo-list.html b/_layouts/algo-list.html new file mode 100644 index 00000000000..fee41b28972 --- /dev/null +++ b/_layouts/algo-list.html @@ -0,0 +1,44 @@ +--- +layout: compress +--- + + + + + + + {% include head.html %} + + + {% include nav.html %} + + + {% include scripts.html %} + + + + diff --git a/_layouts/certificate-list.html b/_layouts/certificate-list.html new file mode 100644 index 00000000000..b2894296729 --- /dev/null +++ b/_layouts/certificate-list.html @@ -0,0 +1,44 @@ +--- +layout: compress +--- + + + + + + + {% include head.html %} + + + {% include nav.html %} + + + {% include scripts.html %} + + + + diff --git a/_layouts/home.html b/_layouts/home.html index c8b1315f6b4..92ea025be34 100644 --- a/_layouts/home.html +++ b/_layouts/home.html @@ -33,13 +33,13 @@


    - About + 소개 - Posts + 포스팅 - Projects + 프로젝트(준비중)

    diff --git a/_layouts/java-list.html b/_layouts/java-list.html new file mode 100644 index 00000000000..56eb38dd978 --- /dev/null +++ b/_layouts/java-list.html @@ -0,0 +1,44 @@ +--- +layout: compress +--- + + + + + + + {% include head.html %} + + + {% include nav.html %} + + + {% include scripts.html %} + + + + diff --git a/_layouts/post-list.html b/_layouts/post-list.html index 405fd88dbfe..020314453fc 100644 --- a/_layouts/post-list.html +++ b/_layouts/post-list.html @@ -28,7 +28,7 @@

    {{ page.title }}

  • {{ post.title }}

    {{ post.excerpt }}

    - Read More + 더보기
  • {% endif %} diff --git a/_plugins/simple_search_filter.rb b/_plugins/simple_search_filter.rb new file mode 100644 index 00000000000..9aad3a436b3 --- /dev/null +++ b/_plugins/simple_search_filter.rb @@ -0,0 +1,19 @@ +module Jekyll + module CharFilter + def remove_chars(input) + input.gsub! '\\','\' + input.gsub! /\t/, ' ' + input.strip_control_and_extended_characters + end + end +end + +Liquid::Template.register_filter(Jekyll::CharFilter) + +class String + def strip_control_and_extended_characters() + chars.each_with_object("") do |char, str| + str << char if char.ascii_only? and char.ord.between?(32,126) + end + end +end \ No newline at end of file diff --git a/_posts/2012-05-22-readability-post.md b/_posts/2012-05-22-readability-post.md deleted file mode 100644 index e8a70a74bc0..00000000000 --- a/_posts/2012-05-22-readability-post.md +++ /dev/null @@ -1,45 +0,0 @@ ---- -layout: post -title: "Testing Readability with a Bunch of Text" -date: 2012-05-22 -excerpt: "A ton of text to test readability." -tags: [sample post, readability, test] -comments: true ---- - -Portland in shoreditch Vice, labore typewriter pariatur hoodie fap sartorial Austin. Pinterest literally occupy Schlitz forage. Odio ad blue bottle vinyl, 90's narwhal commodo bitters pour-over nostrud. Ugh est hashtag in, fingerstache adipisicing laboris esse Pinterest shabby chic Portland. Shoreditch bicycle rights anim, flexitarian laboris put a bird on it vinyl cupidatat narwhal. Hashtag artisan skateboard, flannel Bushwick nesciunt salvia aute fixie do plaid post-ironic dolor McSweeney's. Cliche pour-over chambray nulla four loko skateboard sapiente hashtag. - -Vero laborum commodo occupy. Semiotics voluptate mumblecore pug. Cosby sweater ullamco quinoa ennui assumenda, sapiente occupy delectus lo-fi. Ea fashion axe Marfa cillum aliquip. Retro Bushwick keytar cliche. Before they sold out sustainable gastropub Marfa readymade, ethical Williamsburg skateboard brunch qui consectetur gentrify semiotics. Mustache cillum irony, fingerstache magna pour-over keffiyeh tousled selfies. - -## Cupidatat 90's lo-fi authentic try-hard - -In pug Portland incididunt mlkshk put a bird on it vinyl quinoa. Terry Richardson shabby chic +1, scenester Tonx excepteur tempor fugiat voluptate fingerstache aliquip nisi next level. Farm-to-table hashtag Truffaut, Odd Future ex meggings gentrify single-origin coffee try-hard 90's. - -* Sartorial hoodie -* Labore viral forage -* Tote bag selvage -* DIY exercitation et id ugh tumblr church-key - -Incididunt umami sriracha, ethical fugiat VHS ex assumenda yr irure direct trade. Marfa Truffaut bicycle rights, kitsch placeat Etsy kogi asymmetrical. Beard locavore flexitarian, kitsch photo booth hoodie plaid ethical readymade leggings yr. - -Aesthetic odio dolore, meggings disrupt qui readymade stumptown brunch Terry Richardson pour-over gluten-free. Banksy american apparel in selfies, biodiesel flexitarian organic meh wolf quinoa gentrify banjo kogi. Readymade tofu ex, scenester dolor umami fingerstache occaecat fashion axe Carles jean shorts minim. Keffiyeh fashion axe nisi Godard mlkshk dolore. Lomo you probably haven't heard of them eu non, Odd Future Truffaut pug keytar meggings McSweeney's Pinterest cred. Etsy literally aute esse, eu bicycle rights qui meggings fanny pack. Gentrify leggings pug flannel duis. - -## Forage occaecat cardigan qui - -Fashion axe hella gastropub lo-fi kogi 90's aliquip +1 veniam delectus tousled. Cred sriracha locavore gastropub kale chips, iPhone mollit sartorial. Anim dolore 8-bit, pork belly dolor photo booth aute flannel small batch. Dolor disrupt ennui, tattooed whatever salvia Banksy sartorial roof party selfies raw denim sint meh pour-over. Ennui eu cardigan sint, gentrify iPhone cornhole. - -> Whatever velit occaecat quis deserunt gastropub, leggings elit tousled roof party 3 wolf moon kogi pug blue bottle ea. Fashion axe shabby chic Austin quinoa pickled laborum bitters next level, disrupt deep v accusamus non fingerstache. - -Tote bag asymmetrical elit sunt. Occaecat authentic Marfa, hella McSweeney's next level irure veniam master cleanse. Sed hoodie letterpress artisan wolf leggings, 3 wolf moon commodo ullamco. Anim occupy ea labore Terry Richardson. Tofu ex master cleanse in whatever pitchfork banh mi, occupy fugiat fanny pack Austin authentic. Magna fugiat 3 wolf moon, labore McSweeney's sustainable vero consectetur. Gluten-free disrupt enim, aesthetic fugiat jean shorts trust fund keffiyeh magna try-hard. - -## Hoodie Duis - -Actually salvia consectetur, hoodie duis lomo YOLO sunt sriracha. Aute pop-up brunch farm-to-table odio, salvia irure occaecat. Sriracha small batch literally skateboard. Echo Park nihil hoodie, aliquip forage artisan laboris. Trust fund reprehenderit nulla locavore. Stumptown raw denim kitsch, keffiyeh nulla twee dreamcatcher fanny pack ullamco 90's pop-up est culpa farm-to-table. Selfies 8-bit do pug odio. - -### Thundercats Ho! - -Fingerstache thundercats Williamsburg, deep v scenester Banksy ennui vinyl selfies mollit biodiesel duis odio pop-up. Banksy 3 wolf moon try-hard, sapiente enim stumptown deep v ad letterpress. Squid beard brunch, exercitation raw denim yr sint direct trade. Raw denim narwhal id, flannel DIY McSweeney's seitan. Letterpress artisan bespoke accusamus, meggings laboris consequat Truffaut qui in seitan. Sustainable cornhole Schlitz, twee Cosby sweater banh mi deep v forage letterpress flannel whatever keffiyeh. Sartorial cred irure, semiotics ethical sed blue bottle nihil letterpress. - -Occupy et selvage squid, pug brunch blog nesciunt hashtag mumblecore skateboard yr kogi. Ugh small batch swag four loko. Fap post-ironic qui tote bag farm-to-table american apparel scenester keffiyeh vero, swag non pour-over gentrify authentic pitchfork. Schlitz scenester lo-fi voluptate, tote bag irony bicycle rights pariatur vero Vice freegan wayfarers exercitation nisi shoreditch. Chambray tofu vero sed. Street art swag literally leggings, Cosby sweater mixtape PBR lomo Banksy non in pitchfork ennui McSweeney's selfies. Odd Future Banksy non authentic. - -Aliquip enim artisan dolor post-ironic. Pug tote bag Marfa, deserunt pour-over Portland wolf eu odio intelligentsia american apparel ugh ea. Sunt viral et, 3 wolf moon gastropub pug id. Id fashion axe est typewriter, mlkshk Portland art party aute brunch. Sint pork belly Cosby sweater, deep v mumblecore kitsch american apparel. Try-hard direct trade tumblr sint skateboard. Adipisicing bitters excepteur biodiesel, pickled gastropub aute veniam. diff --git a/_posts/2012-05-23-readability-feature-post.md b/_posts/2012-05-23-readability-feature-post.md deleted file mode 100644 index 65683d2dbdf..00000000000 --- a/_posts/2012-05-23-readability-feature-post.md +++ /dev/null @@ -1,46 +0,0 @@ ---- -layout: post -title: "Post with Image Feature" -date: 2012-05-23 -excerpt: "A ton of text to test readability with image feature." -tags: [sample post, readability, test, image, feature] -feature: http://i.imgur.com/Ds6S7lJ.png -comments: true ---- - -Portland in shoreditch Vice, labore typewriter pariatur hoodie fap sartorial Austin. Pinterest literally occupy Schlitz forage. Odio ad blue bottle vinyl, 90's narwhal commodo bitters pour-over nostrud. Ugh est hashtag in, fingerstache adipisicing laboris esse Pinterest shabby chic Portland. Shoreditch bicycle rights anim, flexitarian laboris put a bird on it vinyl cupidatat narwhal. Hashtag artisan skateboard, flannel Bushwick nesciunt salvia aute fixie do plaid post-ironic dolor McSweeney's. Cliche pour-over chambray nulla four loko skateboard sapiente hashtag. - -Vero laborum commodo occupy. Semiotics voluptate mumblecore pug. Cosby sweater ullamco quinoa ennui assumenda, sapiente occupy delectus lo-fi. Ea fashion axe Marfa cillum aliquip. Retro Bushwick keytar cliche. Before they sold out sustainable gastropub Marfa readymade, ethical Williamsburg skateboard brunch qui consectetur gentrify semiotics. Mustache cillum irony, fingerstache magna pour-over keffiyeh tousled selfies. - -## Cupidatat 90's lo-fi authentic try-hard - -In pug Portland incididunt mlkshk put a bird on it vinyl quinoa. Terry Richardson shabby chic +1, scenester Tonx excepteur tempor fugiat voluptate fingerstache aliquip nisi next level. Farm-to-table hashtag Truffaut, Odd Future ex meggings gentrify single-origin coffee try-hard 90's. - -* Sartorial hoodie -* Labore viral forage -* Tote bag selvage -* DIY exercitation et id ugh tumblr church-key - -Incididunt umami sriracha, ethical fugiat VHS ex assumenda yr irure direct trade. Marfa Truffaut bicycle rights, kitsch placeat Etsy kogi asymmetrical. Beard locavore flexitarian, kitsch photo booth hoodie plaid ethical readymade leggings yr. - -Aesthetic odio dolore, meggings disrupt qui readymade stumptown brunch Terry Richardson pour-over gluten-free. Banksy american apparel in selfies, biodiesel flexitarian organic meh wolf quinoa gentrify banjo kogi. Readymade tofu ex, scenester dolor umami fingerstache occaecat fashion axe Carles jean shorts minim. Keffiyeh fashion axe nisi Godard mlkshk dolore. Lomo you probably haven't heard of them eu non, Odd Future Truffaut pug keytar meggings McSweeney's Pinterest cred. Etsy literally aute esse, eu bicycle rights qui meggings fanny pack. Gentrify leggings pug flannel duis. - -## Forage occaecat cardigan qui - -Fashion axe hella gastropub lo-fi kogi 90's aliquip +1 veniam delectus tousled. Cred sriracha locavore gastropub kale chips, iPhone mollit sartorial. Anim dolore 8-bit, pork belly dolor photo booth aute flannel small batch. Dolor disrupt ennui, tattooed whatever salvia Banksy sartorial roof party selfies raw denim sint meh pour-over. Ennui eu cardigan sint, gentrify iPhone cornhole. - -> Whatever velit occaecat quis deserunt gastropub, leggings elit tousled roof party 3 wolf moon kogi pug blue bottle ea. Fashion axe shabby chic Austin quinoa pickled laborum bitters next level, disrupt deep v accusamus non fingerstache. - -Tote bag asymmetrical elit sunt. Occaecat authentic Marfa, hella McSweeney's next level irure veniam master cleanse. Sed hoodie letterpress artisan wolf leggings, 3 wolf moon commodo ullamco. Anim occupy ea labore Terry Richardson. Tofu ex master cleanse in whatever pitchfork banh mi, occupy fugiat fanny pack Austin authentic. Magna fugiat 3 wolf moon, labore McSweeney's sustainable vero consectetur. Gluten-free disrupt enim, aesthetic fugiat jean shorts trust fund keffiyeh magna try-hard. - -## Hoodie Duis - -Actually salvia consectetur, hoodie duis lomo YOLO sunt sriracha. Aute pop-up brunch farm-to-table odio, salvia irure occaecat. Sriracha small batch literally skateboard. Echo Park nihil hoodie, aliquip forage artisan laboris. Trust fund reprehenderit nulla locavore. Stumptown raw denim kitsch, keffiyeh nulla twee dreamcatcher fanny pack ullamco 90's pop-up est culpa farm-to-table. Selfies 8-bit do pug odio. - -### Thundercats Ho! - -Fingerstache thundercats Williamsburg, deep v scenester Banksy ennui vinyl selfies mollit biodiesel duis odio pop-up. Banksy 3 wolf moon try-hard, sapiente enim stumptown deep v ad letterpress. Squid beard brunch, exercitation raw denim yr sint direct trade. Raw denim narwhal id, flannel DIY McSweeney's seitan. Letterpress artisan bespoke accusamus, meggings laboris consequat Truffaut qui in seitan. Sustainable cornhole Schlitz, twee Cosby sweater banh mi deep v forage letterpress flannel whatever keffiyeh. Sartorial cred irure, semiotics ethical sed blue bottle nihil letterpress. - -Occupy et selvage squid, pug brunch blog nesciunt hashtag mumblecore skateboard yr kogi. Ugh small batch swag four loko. Fap post-ironic qui tote bag farm-to-table american apparel scenester keffiyeh vero, swag non pour-over gentrify authentic pitchfork. Schlitz scenester lo-fi voluptate, tote bag irony bicycle rights pariatur vero Vice freegan wayfarers exercitation nisi shoreditch. Chambray tofu vero sed. Street art swag literally leggings, Cosby sweater mixtape PBR lomo Banksy non in pitchfork ennui McSweeney's selfies. Odd Future Banksy non authentic. - -Aliquip enim artisan dolor post-ironic. Pug tote bag Marfa, deserunt pour-over Portland wolf eu odio intelligentsia american apparel ugh ea. Sunt viral et, 3 wolf moon gastropub pug id. Id fashion axe est typewriter, mlkshk Portland art party aute brunch. Sint pork belly Cosby sweater, deep v mumblecore kitsch american apparel. Try-hard direct trade tumblr sint skateboard. Adipisicing bitters excepteur biodiesel, pickled gastropub aute veniam. diff --git a/_posts/2013-05-22-sample-post-images.md b/_posts/2013-05-22-sample-post-images.md deleted file mode 100644 index 7279b1668e6..00000000000 --- a/_posts/2013-05-22-sample-post-images.md +++ /dev/null @@ -1,97 +0,0 @@ ---- -layout: post -title: "A Post with Images" -date: 2013-05-22 -excerpt: "Examples and code for displaying images in posts." -tags: [sample post, images, test] -comments: true ---- - -Here are some examples of what a post with images might look like. If you want to display two or three images next to each other responsively use `figure` with the appropriate `class`. Each instance of `figure` is auto-numbered and displayed in the caption. - -### Figures (for images or video) - -#### One Up - -
    - -
    Morning Fog Emerging From Trees by A Guy Taking Pictures, on Flickr.
    -
    - -Vero laborum commodo occupy. Semiotics voluptate mumblecore pug. Cosby sweater ullamco quinoa ennui assumenda, sapiente occupy delectus lo-fi. Ea fashion axe Marfa cillum aliquip. Retro Bushwick keytar cliche. Before they sold out sustainable gastropub Marfa readymade, ethical Williamsburg skateboard brunch qui consectetur gentrify semiotics. Mustache cillum irony, fingerstache magna pour-over keffiyeh tousled selfies. - -#### Two Up - -Apply the `half` class like so to display two images side by side that share the same caption. - -{% highlight html %} -
    - - -
    Caption describing these two images.
    -
    -{% endhighlight %} - -And you'll get something that looks like this: - -
    - - -
    Two images.
    -
    - -#### Three Up - -Apply the `third` class like so to display three images side by side that share the same caption. - -{% highlight html %} -
    - - - -
    Caption describing these three images.
    -
    -{% endhighlight %} - -And you'll get something that looks like this: - -
    - - - -
    Three images.
    -
    - -### Alternative way - -Another way to achieve the same result is to include `gallery` Liquid template. In this case you -don't have to write any HTML tags – just copy a small block of code, adjust the parameters (see below) -and fill the block with any number of links to images. You can mix relative and external links. - -Here is the block you might want to use: - -{% highlight liquid %} -{% raw %} -{% capture images %} - http://vignette2.wikia.nocookie.net/naruto/images/9/97/Hinata.png - http://vignette4.wikia.nocookie.net/naruto/images/7/79/Hinata_Part_II.png - http://vignette1.wikia.nocookie.net/naruto/images/1/15/J%C5%ABho_S%C5%8Dshiken.png -{% endcapture %} -{% include gallery images=images caption="Test images" cols=3 %} -{% endraw %} -{% endhighlight %} - -Parameters: - -- `caption`: Sets the caption under the gallery (see `figcaption` HTML tag above); -- `cols`: Sets the number of columns of the gallery. -Available values: [1..3]. - -It will look something like this: - -{% capture images %} - http://vignette2.wikia.nocookie.net/naruto/images/9/97/Hinata.png - http://vignette4.wikia.nocookie.net/naruto/images/7/79/Hinata_Part_II.png - http://vignette1.wikia.nocookie.net/naruto/images/1/15/J%C5%ABho_S%C5%8Dshiken.png -{% endcapture %} -{% include gallery images=images caption="Test images" cols=3 %} diff --git a/_posts/2013-06-25-video-post.md b/_posts/2013-06-25-video-post.md deleted file mode 100644 index 2960ad85130..00000000000 --- a/_posts/2013-06-25-video-post.md +++ /dev/null @@ -1,20 +0,0 @@ ---- -layout: post -title: "A Post with a Video" -date: 2016-03-15 -excerpt: "Custom written post descriptions are the way to go... if you're not lazy." -tag: -- sample -- post -- video -comments: true ---- - - -Video embeds are responsive and scale with the width of the main content block with the help of [FitVids](http://fitvidsjs.com/). - -Not sure if this only effects Kramdown or if it's an issue with Markdown in general. But adding YouTube video embeds causes errors when building your Jekyll site. To fix add a space between the ` -{% endhighlight %} diff --git a/_posts/2013-08-16-code-highlighting-post.md b/_posts/2013-08-16-code-highlighting-post.md deleted file mode 100644 index cb0d04d2086..00000000000 --- a/_posts/2013-08-16-code-highlighting-post.md +++ /dev/null @@ -1,121 +0,0 @@ ---- -layout: post -title: Syntax Highlighting Post -date: 2013-08-16 -excerpt: "Demo post displaying the various ways of highlighting code in Markdown." -tags: [sample post, code, highlighting] -comments: true ---- - -Syntax highlighting is a feature that displays source code, in different colors and fonts according to the category of terms. This feature facilitates writing in a structured language such as a programming language or a markup language as both structures and syntax errors are visually distinct. Highlighting does not affect the meaning of the text itself; it is intended only for human readers.[^1] - -[^1]: - -### Highlighted Code Blocks - -To modify styling and highlight colors edit `/assets/css/syntax.css`. - -{% highlight css %} -#container { - float: left; - margin: 0 -240px 0 0; - width: 100%; -} -{% endhighlight %} - -{% highlight html %} -{% raw %} - -{% endraw %} -{% endhighlight %} - -{% highlight ruby %} -module Jekyll - class TagIndex < Page - def initialize(site, base, dir, tag) - @site = site - @base = base - @dir = dir - @name = 'index.html' - self.process(@name) - self.read_yaml(File.join(base, '_layouts'), 'tag_index.html') - self.data['tag'] = tag - tag_title_prefix = site.config['tag_title_prefix'] || 'Tagged: ' - tag_title_suffix = site.config['tag_title_suffix'] || '–' - self.data['title'] = "#{tag_title_prefix}#{tag}" - self.data['description'] = "An archive of posts tagged #{tag}." - end - end -end -{% endhighlight %} - - -### Standard Code Block - - {% raw %} - - {% endraw %} - - -### Fenced Code Blocks - -To modify styling and highlight colors edit `/assets/css/syntax.css`. Line numbers and a few other things can be modified in `_config.yml`. Consult [Jekyll's documentation](http://jekyllrb.com/docs/configuration/) for more information. - -~~~ css -#container { - float: left; - margin: 0 -240px 0 0; - width: 100%; -} -~~~ - -~~~ html -{% raw %}{% endraw %} -~~~ - -~~~ ruby -module Jekyll - class TagIndex < Page - def initialize(site, base, dir, tag) - @site = site - @base = base - @dir = dir - @name = 'index.html' - self.process(@name) - self.read_yaml(File.join(base, '_layouts'), 'tag_index.html') - self.data['tag'] = tag - tag_title_prefix = site.config['tag_title_prefix'] || 'Tagged: ' - tag_title_suffix = site.config['tag_title_suffix'] || '–' - self.data['title'] = "#{tag_title_prefix}#{tag}" - self.data['description'] = "An archive of posts tagged #{tag}." - end - end -end -~~~ - -### GitHub Gist Embed - -An example of a Gist embed below. - -{% gist mmistakes/6589546 %} diff --git a/_posts/2015-08-10-mathjax-example.md b/_posts/2015-08-10-mathjax-example.md deleted file mode 100644 index f3157472f23..00000000000 --- a/_posts/2015-08-10-mathjax-example.md +++ /dev/null @@ -1,52 +0,0 @@ ---- -layout: post -title: "MathJax Example" -date: 2015-08-10 -excerpt: "MathJax Example for Moon Jekyll Theme." -tag: -- markdown -- mathjax -- example -- test -- jekyll -comments: true ---- - -[MathJax](http://www.mathjax.org/) is a simple way of including Tex/LaTex/MathML based mathematics in HTML webpages. To get up and running you need to include the MathJax script in the header of your github pages page, and then write some maths. For LaTex, there are two delimiters you need to know about, one for block or displayed mathematics `\[ ... \]`, and the other for inline mathematics `\( ... \)`. - -## Usage - -To enable MathJax support be sure Kramdown is your Markdown flavor of choice and MathJax is set to true in your `_config.yml` file. - -~~~ -markdown: kramdown -mathjax: true -~~~ - -~~~ -Here is an example MathJax inline rendering \\( 1/x^{2} \\), and here is a block rendering: -\\[ \frac{1}{n^{2}} \\] -~~~ - -Here is an example MathJax inline rendering \\( 1/x^{2} \\), and here is a block rendering: -\\[ \frac{1}{n^{2}} \\] - -The only thing to look out for is the escaping of the backslash when using markdown, so the delimiters become `\\[ ... \\]` and `\\( ... \\)` for inline and block maths respectively. - - -$$ -\begin{align*} - & \phi(x,y) = \phi \left(\sum_{i=1}^n x_ie_i, \sum_{j=1}^n y_je_j \right) - = \sum_{i=1}^n \sum_{j=1}^n x_i y_j \phi(e_i, e_j) = \\ - & (x_1, \ldots, x_n) \left( \begin{array}{ccc} - \phi(e_1, e_1) & \cdots & \phi(e_1, e_n) \\ - \vdots & \ddots & \vdots \\ - \phi(e_n, e_1) & \cdots & \phi(e_n, e_n) - \end{array} \right) - \left( \begin{array}{c} - y_1 \\ - \vdots \\ - y_n - \end{array} \right) -\end{align*} -$$ diff --git a/_posts/2016-03-20-markdown-syntax.md b/_posts/2016-03-20-markdown-syntax.md deleted file mode 100644 index e209bce676e..00000000000 --- a/_posts/2016-03-20-markdown-syntax.md +++ /dev/null @@ -1,112 +0,0 @@ ---- -layout: post -title: "Markdown Syntax" -date: 2016-03-15 -excerpt: "Just about everything you'll need to style in the theme: headings, paragraphs, blockquotes, tables, code blocks, and more." -tag: -- markdown -- syntax -- sample -- test -- jekyll -comments: true ---- - -## HTML Elements - -Below is just about everything you'll need to style in the theme. Check the source code to see the many embedded elements within paragraphs. - -# Heading 1 - -## Heading 2 - -### Heading 3 - -#### Heading 4 - -##### Heading 5 - -###### Heading 6 - -### Body text - -Lorem ipsum dolor sit amet, test link adipiscing elit. **This is strong**. Nullam dignissim convallis est. Quisque aliquam. - -![Smithsonian Image](https://mmistakes.github.io/minimal-mistakes/images/3953273590_704e3899d5_m.jpg) -{: .image-right} - -*This is emphasized*. Donec faucibus. Nunc iaculis suscipit dui. 53 = 125. Water is H2O. Nam sit amet sem. Aliquam libero nisi, imperdiet at, tincidunt nec, gravida vehicula, nisl. The New York Times (That’s a citation). Underline.Maecenas ornare tortor. Donec sed tellus eget sapien fringilla nonummy. Mauris a ante. Suspendisse quam sem, consequat at, commodo vitae, feugiat in, nunc. Morbi imperdiet augue quis tellus. - -HTML and CSS are our tools. Mauris a ante. Suspendisse quam sem, consequat at, commodo vitae, feugiat in, nunc. Morbi imperdiet augue quis tellus. Praesent mattis, massa quis luctus fermentum, turpis mi volutpat justo, eu volutpat enim diam eget metus. - -### Blockquotes - -> Lorem ipsum dolor sit amet, test link adipiscing elit. Nullam dignissim convallis est. Quisque aliquam. - -## List Types - -### Ordered Lists - -1. Item one - 1. sub item one - 2. sub item two - 3. sub item three -2. Item two - -### Unordered Lists - -* Item one -* Item two -* Item three - -## Tables - -| Header1 | Header2 | Header3 | -|:--------|:-------:|--------:| -| cell1 | cell2 | cell3 | -| cell4 | cell5 | cell6 | -|---- -| cell1 | cell2 | cell3 | -| cell4 | cell5 | cell6 | -|===== -| Foot1 | Foot2 | Foot3 -{: rules="groups"} - -## Code Snippets - -{% highlight css %} -#container { - float: left; - margin: 0 -240px 0 0; - width: 100%; -} -{% endhighlight %} - -## Buttons - -Make any link standout more when applying the `.btn` class. - -{% highlight html %} -Success Button -{% endhighlight %} - -
    Primary Button
    -
    Success Button
    -
    Warning Button
    -
    Danger Button
    -
    Info Button
    - -## KBD - -You can also use `` tag for keyboard buttons. - -{% highlight html %} -WASD -{% endhighlight %} - -Press WASD to move your car. **Midtown Maddness!!** - -## Notices - -**Watch out!** You can also add notices by appending `{: .notice}` to a paragraph. -{: .notice} diff --git a/_posts/2016-03-21-moon-theme.md b/_posts/2016-03-21-moon-theme.md deleted file mode 100644 index 2e7d79058e8..00000000000 --- a/_posts/2016-03-21-moon-theme.md +++ /dev/null @@ -1,160 +0,0 @@ ---- -layout: post -title: "Moon Jekyll Theme" -date: 2016-04-06 -excerpt: "Minimal, one column Jekyll theme for your blog." -project: true -tag: -- jekyll -- moon -- blog -- about -- theme -comments: true ---- - -![Moon Homepage](https://cloud.githubusercontent.com/assets/754514/14509720/61c61058-01d6-11e6-93ab-0918515ecd56.png) - -
    Moon is a minimal, one column jekyll theme.
    - - I'm not a developer or designer. And I don't add footer to show who did this theme. If you like this theme or using it, please give a **star** for motivation, It makes me happy. - - - -## Installation -* Fork the [Moon repo](https://github.com/TaylanTatli/Moon/fork) -* Edit `_config.yml` file. -* Remove sample posts from `_posts` folder and add yours. -* Edit `index.md` file in `about` folder. -* Change repo name to `YourUserName.github.io` - -That's all. - -## Preview - -{% capture images %} - https://cloud.githubusercontent.com/assets/754514/14509716/61ac6c8e-01d6-11e6-879f-8308883de790.png - https://cloud.githubusercontent.com/assets/754514/14509717/61ad05ae-01d6-11e6-85ae-5a817dd8763b.png - https://cloud.githubusercontent.com/assets/754514/14509714/61a89708-01d6-11e6-8fcd-74b002a060df.png -{% endcapture %} -{% include gallery images=images caption="Screenshots of Moon Theme" cols=3 %} - ---- - -{% capture images %} - https://cloud.githubusercontent.com/assets/754514/14509718/61b09a20-01d6-11e6-8da1-4202ae4d83cd.png - https://cloud.githubusercontent.com/assets/754514/14509715/61aa9d00-01d6-11e6-81a6-c6837edf2e84.png -{% endcapture %} -{% include gallery images=images caption="Moon Theme on Small Screen Size" cols=2 %} - -See a [live version of Moon](http://taylantatli.github.io/Moon) hosted on GitHub. - -## Site Setup -A quick checklist of the files you’ll want to edit to get up and running. - -### Site Wide Configuration -`_config.yml` is your friend. Open it up and personalize it. Most variables are self explanatory but here's an explanation of each if needed: - -#### title - -The title of your site... shocker! - -Example `title: My Awesome Site` - -#### bio - -The description to show on your homepage. - -#### description - -The description to use for meta tags and navigation menu. - -#### url - -Used to generate absolute urls in `sitemap.xml`, `feed.xml`, and for generating canonical URLs in ``. When developing locally either comment this out or use something like `http://localhost:4000` so all assets load properly. *Don't include a trailing `/`*. - -Examples: - -{% highlight yaml %} -url: http://taylantatli.me/Moon -url: http://localhost:4000 -url: //cooldude.github.io -url: -{% endhighlight %} - -#### reading_time - -Set true to show reading time for posts. And set `words_per_minute`, default is 200. - -#### logo -Your site's logo. It will show on homepage and navigation menu. Also used for twitter meta tags. - -#### background -Image for background. If you don't set it, color will be used as a background. - -#### Google Analytics and Webmaster Tools - -Google Analytics UA and Webmaster Tool verification tags can be entered in `_config.yml`. For more information on obtaining these meta tags check [Google Webmaster Tools](http://support.google.com/webmasters/bin/answer.py?hl=en&answer=35179) and [Bing Webmaster Tools](https://ssl.bing.com/webmaster/configure/verify/ownership) support. - -#### MathJax -It's enabled. But if you don't want to use it. Set it false in `_config.yml`. - -#### Disqus Comments -Set your disqus shortname in `_config.yml` to use comments. - ---- - -### Navigation Links - -To set what links appear in the top navigation edit `_data/navigation.yml`. Use the following format to set the URL and title for as many links as you'd like. *External links will open in a new window.* - -{% highlight yaml %} -- title: Home - url: / - -- title: Blog - url: /blog/ - -- title: Projects - url: /projects/ - -- title: About - url: /about/ - -- title: Moon - url: http://taylantatli.me/Moon -{% endhighlight %} - ---- - -## Layouts and Content - -Moon Theme use [Jekyll Compress](https://github.com/penibelst/jekyll-compress-html) to compress html output. But it can cause errors if you use "linenos" (line numbers). I suggest don't use line numbers for codes, because it won't look good with this theme, also i didn't give a proper style for them. If you insist to use line numbers, just remove `layout: compress` string from layouts. It will disable compressing. - -### Feature Image - -You can set feature image per post. Just add `feature: some link` to your post's front matter. - -``` -feature: /assets/img/some-image.png -or -feaure: http://example.com/some-image.png -``` - This also will be used for twitter card: - -![Moon Twitter Card](https://cloud.githubusercontent.com/assets/754514/14509719/61c5751c-01d6-11e6-8c29-ce8ccad149bf.png) - -### Comments -To show disqus comments for your post add `comments: true` to your post's front matter. - ---- - -## Questions? - -Found a bug or aren't quite sure how something works? By all means [file a GitHub Issue](https://github.com/TaylanTatli/Moon/issues/new). And if you make something cool with this theme feel free to let me know. - ---- - -## License - -This theme is free and open source software, distributed under the MIT License. So feel free to use this Jekyll theme on your site without linking back to me or including a disclaimer. diff --git a/_posts/2018-11-21-cert_01.md b/_posts/2018-11-21-cert_01.md new file mode 100644 index 00000000000..e3af87c9ca3 --- /dev/null +++ b/_posts/2018-11-21-cert_01.md @@ -0,0 +1,37 @@ +--- +layout: post +title: "정보처리기사 후기" +date: 2018-11-21 +excerpt: "정보처리기사 자격증 후기" +certificate: true +tag: +- jekyll +- blog +- 정보처리기사 +- 자격증 +comments: true +--- + +## 정보처리기사 3회 후기 + +
    + + +
    + +
    + + +
    + +* 비전공이라 필기 2주, 실기 3주 하루에 3시간씩 정도 회사 다닐때 운좋게 한번에 합격했습니다. + +## 공부법 +* 시나공 필기, 실기 책 구매 +* 이론 1주, 남은시간 기출문제 +* 추천 블로그 : 링크 + +* 위 블로그에서 정말 많이 도움받았고 시간이 없을경우에는 블로그에 있는것만 봐도 충분함, 다만 업무프로세스나 신기술동향은 양이 방대하고 완벽하게 외우는것은 불가능하니 어느정도만 보고 데이터베이스와 알고리즘에서 점수를 따는게 합격률이 높다고 생각함. +* 퀴즈넷 : 링크 +* 위 사이트에서 문제를 풀면서 외울수있음. 정말 도움이 많이 됐습니다. + diff --git a/_posts/2018-12-03-cert_02.md b/_posts/2018-12-03-cert_02.md new file mode 100644 index 00000000000..2228ec42a5a --- /dev/null +++ b/_posts/2018-12-03-cert_02.md @@ -0,0 +1,43 @@ +--- +layout: post +title: "SQLD자격증 후기" +date: 2018-12-03 +excerpt: "SQLD 자격증 후기" +certificate: true +tag: +- jekyll +- blog +- SQLD +- DB_GUIDE + +comments: true +--- + +## SQLD 자격증 후기 + +
    + + +
    + +SQLD에 관심이 생겨서 대략 한달정도 시간을 들여서 시험공부를 하였습니다. + +## 1. 공부법 + +

    구루비 사이트 참조

    +

    SQL 전문가 가이드 (2013년 버전) : 링크

    +{% highlight html %} +개인적으로는 책보다는 구루비 사이트 참고를 하는게 더 도움이 되었습니다. +이론 2주, 기출문제 2주 준비 +{% endhighlight %} + +## 2. 기출문제 참고 + +

    SQL 자격검정 실전문제 : 링크참조

    + +{% highlight html %} +도움은 많이 되었으나 기초지식없이는 상당히 어려움. +고급 SQL 활용 및 튜닝은 손을 댈수가 없었습니다. +카페 반응을 보았을때 이번 시험난이도는 어려웠던걸로 예상합니다. +12.31일 결과발표 후 재포스팅 하겠습니다. +{% endhighlight %} \ No newline at end of file diff --git a/_posts/2018-12-03-install_java.md b/_posts/2018-12-03-install_java.md new file mode 100644 index 00000000000..cb28be34c7e --- /dev/null +++ b/_posts/2018-12-03-install_java.md @@ -0,0 +1,91 @@ +--- +layout: post +title: "자바 설치방법" +date: 2018-12-03 +excerpt: "자바 설치방법" +java: true +tag: +- java +- 자바 설치 +- Jdk +- JRE +comments: true +--- + +## 자바 설치방법 + +## 1. 홈페이지 접속 +

    링크 1번 : http://java.sun.com

    +

    링크 2번 : http://www.oracle.com

    +

    메인페이지에서 - java SE 다운로드

    + +## 2. java SE 8 버전 - JDK 다운로드 +

    운영체제에 맞춰서 다운로드 할것

    +

    ex) Windows x64 jdk-8u191-windows-x64.exe

    + +## 3. 설치 + +설치시 자바설치 경로, 자바홈 설치경로 복사 + +

    자바 설치경로 : C:\Java\jdk1.8.0_191

    +

    자바 홈설치경로 : C:\Program Files\Java\jre1.8.0_191

    +

    CLASSPATH : .;%JAVA_HOME%\lib\tools.jar

    + +## 4. 환경변수 설정 + +시작 - 제어판 - 시스템 - 고급시스템설정 - 환경변수 +환경변수 설정 - 시스템변수 설정 +

    1) CLASSPATH : .;%JAVA_HOME%\lib\tools.jar

    +

    2) JAVA_HOME : C:\Java\jdk1.8.0_191

    +

    3) Path : %JAVA_HOME%\bin;

    + +## 5. 실행 + +환경변수 확인 +

    1) 시작 - CMD 실행

    +

    2) 환경변수 설정값 확인

    + +{% highlight html %} +ECHO %JAVA_HOME% +ECHO %PATH% +ECHO %CLASSPATH% +{% endhighlight %} + +정상적으로 출력시 javac 입력 javac 입력후 에러메시지가 없는경우 환경변수 설정완료 + +시스템변수 등록확인 + +
    + + +
    + +## 6. 테스트 + +1) 편집기 실행 + +MyPf.java 작성 ( 테스트파일 작성 ) + +{% highlight html %} +public class MyPf { + public static void main(String[] args) { + System.out.println("본인이름 : 최원오"); + System.out.println("email : treasure_b@naver.com"); + System.out.println("각오 : 잘하고 싶습니다."); + } +} +{% endhighlight %} + +주의할점 : 인코딩 UTF-8로 저장, 파일 클래스명 = 실제파일명 일치 + +2) javac 컴파일 명령 실행 + +javac MyPf.java 실행 jvm에서 클래스패스 경로 확인->MyPf.java를 메모리에 올리고 class파일 생성 + +인코딩 에러 날시 javac MyPf.java -encoding UTF-8 + +3) java 클래스파일명 실행 + +public static void main(String[] args){} 를 시작점으로 인터프리터 +방식으로 파일을 읽고 결과값을 출력. + diff --git a/_posts/2018-12-03-java_basic_01.md b/_posts/2018-12-03-java_basic_01.md new file mode 100644 index 00000000000..e8a025c68ce --- /dev/null +++ b/_posts/2018-12-03-java_basic_01.md @@ -0,0 +1,112 @@ +--- +layout: post +title: "[자바] 18-12-03 수업내용" +date: 2018-12-03 +excerpt: "수업내용" +java: true +tag: +- java +- Jvm +- Jdk +- JRE +comments: true +--- + +## 1. 자바_12_03일 수업내용 +{% highlight html %} +객체란? OBJECT + +TV 설계도 = 클래스 +TV = 객체 / 인스턴스 + +객체지향언어라는것? +1) 클래스보다는 객체 or 인스턴스가 중심적으로 동작하는것을 중요시여김. +* 클래스를 메모리에 올리는것 ( 가장 중요하다 ) + +자바 프로그램 -> 확장자가 .java 파일로 만든것 +소스파일 작성 -> 해당파일을 컴파일(compile)을 한다. 컴파일을 하게 되면 .class라는 파일이 생성된다. + +jvm(자바 버추얼 머신) : 클래스( 확장자 : .class ) 를 실행해주는 파일, 운영체제별로 따로 존재함. +* jvm은 CLASSPATH에서 .class를 찾아 실행한다. 현재경로 X +* java : JVM + +jdk(자바 개발자 키트) : jvm, jre 포함 ( 개발자용 패키지 ) +* 실제 현업에서는 자바 8.0 버전을 사용하고 있다. + +javac(자바 컴파일러) : 자바 개발 키트에 포함된 주요 자바컴파일러이다. 자바소스코드를 확인하고 +사양을 충족하는 바이트코드를 생성한다. + +javac를 실행하려면 JAVA_HOME (JDK 설치된 경로), PATH 환경설정을 한다. +PATH 환경변수 : 자바를 실행할때 불러오는 환경변수. +CLASSPATH 환경설정을 한다. + +* 자바 환경설정은 운영체제마다 다르다. + +파일명과 클래스명은 동일하다. +규칙) 클래스 이름은 대문자로 시작한다. ( 자바 컨벤션 ) +자바 프로그램을 만들려면 클래스를 작성해야한다. 하나의 프로그램은 1개이상의 클래스로 구성된다. + +모든 프로그램은 메모리에 올라가야만 실행된다. ( 중요 ) +ex) java Hello를 실행하면 Hello 클래스를 메모리에 올린다. +그뒤 JVM은 해당 클래스에서 public static void main(String[]) 이라는 메소드를 찾는다. + +public static void main(String[] args) +public static void main(String args[]) +위의 2줄은 같은 내용. + +해당 메소드를 찾아서 실행을 합니다. 메소드를 프로그램 시작점이라고 이야기한다. +메소드가 반드시 있어야지만 자바 애플리케이션이 실행이 된다. + +JVM은 main 메소드부터 위에서 아래로 한줄씩 실행한다. 이런 실행방식은 인터프린터 방식이라고 말한다. +class 파일은 다른말로 바이트코드라고 말한다. +이 바이트코드를 읽어들여서 컴퓨터(운영체제)에 맞게끔 해석하여 실행해주는 것이 JVM이라고 한다. + +자바에서 문자열은 큰따옴표로 감싸여있다. +문자열은 String 객체다. + +System.out.println(문자열); +표준출력장치(화면)에 문자열을 출력한다. + +추천 에디터 : vi, visual studio code(free) +* IDE ( 통합개발 도구 ) : Eclipse(free), IntelliJ(Not free) 학생 라이센스가 있을시 공짜 +* Vi : 리눅스, 유닉스, MAC OS에서 쓰는 에디터 편집기 ( 윈도우용 메모장이랑 같다. ) + +{% endhighlight %} + +## 2. 금주 스터디 내용 + +

    객체지향 개발 5원칙

    +

    http://www.nextree.co.kr/p6960/

    +

    숙제) for, if 문 공부할것. 자바설치문서 작성

    + +## 3. 취직에 직접적으로 도움이 되는 내용 + +1) 알고리즘 스터디 + +2) github, github blog + +

    하루에 1번 1 commit

    +

    blog에 공부한 내용정리

    + +3) 기술면접 + +

    용어에 대한 설명은 짧게

    +

    모르는 단어 사용 X

    + +4) 수업 방식 + +

    스스로 공부가 가능하고, 알려줄수 있어야한다.

    +

    20분 수업, 10분 설명

    +

    반복훈련을 통해서 익숙함이 필요

    +

    자바 기본문법은 암기가 필요

    + +5) 추천수업 사이트 + +5-1) 프로그래머스 +

    강의 : https://programmers.co.kr/learn/courses/9 (금주까지완료 필요)

    + +5-2) 부스트코스 +

    강의 : https://www.edwith.org/boostcourse-web

    + +5-3) 강사님 사이트 +

    www.sunnyvale.co.kr

    diff --git a/_posts/2018-12-04-hello-coding.md b/_posts/2018-12-04-hello-coding.md new file mode 100644 index 00000000000..d4c596eba58 --- /dev/null +++ b/_posts/2018-12-04-hello-coding.md @@ -0,0 +1,77 @@ +--- +layout: post +title: "[알고리즘] 이진탐색" +date: 2018-12-04 +excerpt: "알고리즘 공부, hello-coding 알고리즘" +algo: true +tag: +- 알고리즘 +- hello-coding +- 이진탐색 +- log + +comments: true +--- + +## 1. 이진탐색 + +이진탐색은 알고리즘입니다. 입력으로는 정렬된 원소리스트를 받습니다. +이진 탐색 알고리즘은 리스트에 원하는 원소가 있으면 그 원소의 위치를 반환하고, 아니면 null값을 반환합니다. +이진 탐색이 어떻게 동작하는가? + +ex) 1부터 100사이의 숫자 중 57을 찾는다. 이제 가능한 가장 적은 횟수의 추측으로 이 숫자를 알아내야합니다. + +100의 중간, 즉 50부터 숫자를 시작한다. +* 숫자 50은 너무작다 -> 51 ~ 100 가운데값 -> 75 +* 숫자 75은 너무크다 -> 51 ~ 75 가운데값 -> 63 +* 숫자 63은 너무크다 -> 51 ~ 63 가운데값 -> 57 ( 정답발견 ) + +#### 이진탐색을 이용하면 단계마다 절반의 숫자를 없앨 수 있다. +* 100 -> 50 -> 25 -> 13 -> 7 -> 4 -> 2 -> 1 ( 100 중에 어느 숫자를 찾아도 최대 7번만에 찾을수있다 ) + +#### 또한 이진탐색은 리스트의 원소들이 정렬되어 있어야만 사용할 수 있다. +* 예를 들어, 전화번호부에 있는 이름은 알파벳 순서로 정렬되어 있기 떄문에 이름을 찾는 데 이진 탐색을 쓸 수 있다. + +{% highlight html %} +// 예제소스를 작성해보았다. + +public class BinarySearch { + public static void main(String[] args) { + int[] arr = { 1,2,3,4,5,6,7,8,9 }; + Search S1 = new Search(); + S1.binarySearch(1,arr); + } +} + +public class Search { + public void binarySearch(int i, int arr[]) { + int low = 0; + int high = arr.length - 1; + int mid = (low+high) /2; + + while(high >= low) { + if(i == mid) { + System.out.println(i+"번째 인덱스에서 발견됨."); + break; + } + + if(i < mid) { + high = mid - 1; + } else { + low = mid + 1; + } + } + } +} + +{% endhighlight %} + +## 2. log +만약 n개의 원소를 가진 리스트에서 이진 탐색을 사용하면 최대 log2 n번만에 답을 찾을수있다. +로그는 거듭제곱의 반대말입니다. + +
    + + +
    + diff --git a/_posts/2018-12-04-java_basic_02.md b/_posts/2018-12-04-java_basic_02.md new file mode 100644 index 00000000000..ab939150cfd --- /dev/null +++ b/_posts/2018-12-04-java_basic_02.md @@ -0,0 +1,327 @@ +--- +layout: post +title: "[자바] 18-12-04 수업내용" +date: 2018-12-04 +excerpt: "수업내용" +java: true +tag: +- java +- 생성자 +- 상속 +- 인터페이스 +- Collection +- List +- Map +- Set +- iterator +comments: true +--- + +## 1. 자바_12_04일 수업내용 + +### 1) 레퍼런스 변수 + +Ball b1 = new Ball(); + +Ball b1 = 레퍼런스 변수 선언. +new : 인스턴스 생성을 위한 연산자 +new Ball() --> Ball 인스턴스(객체)를 메모리에 생성한다. +레퍼런스 변수명이 다를경우 같은 인스턴스를 생성했더라도 실제로는 다른 인스턴스이다. +TV 설계도 = 클래스 +리모컨 = 레퍼런스 변수 ( 메모리를 사용하려면 레퍼런스 변수가 있어야한다. ) +EX) 리모컨이 전원을 킬 경우 실제로는 전원버튼은 신호만 줄뿐 작동은 TV내부에서 작동한다. + +### 2) 객체 응집도, 추상화 + +객체의 응집도 : 관련된것을 한곳에 모으는것을 말한다. +객체의 추상화 : 중요한것은 남기고, 관련없는 것은 없앤다. + +EX) 동물 >> 물고기, 사자, 토끼, 뱀 등등 + +객체의 응집도가 높을경우 -> 직관적으로 객체가 어떤 정보를 가지고 있는지 알수있다. +객체지향은 재사용성이 높다 -> 한번 정의해놓고 지속적으로 호출해서 사용할수 있기때문에 +다만 비지니스 로직을 따라갈 경우는 재사용성이 낮아진다. +EX) 건축설계에 대한 객체지향 프로그램을 작성한경우 다른 비즈니스에는 적용을 할수가없다. +다른 곳에서 적용할수가 없기때문이다. + +### 3) 필드 + +필드는 클래스가 가지는 것이고, 메소드는 클래스에 속하는 기능을 말한다. + +EX) int value : 정수를 저장할 수 있는 value는 필드를 선언했다. + int 기본형 정수는 default값이 0이다. + +자바에서 객체가 아닌 것 : 기본형타입 +자료의 최소 단위 : 1byte + +### 4) 메소드 + +접근제어자 리턴타입 메소드이름(파라미터타입 파라미터 변수 ...){ + 메소드 내용 +} + +EX) +public void plus(int value) { + +} + +메소드는 다음과 같이 생겼다. +메소드에 선언된 변수는 지역변수라고 한다. +메소드에서 필드를 사용할 때는 this.변수명 라고 사용한다. +메소드에서 선언된 지역변수 이름이 필드와 같은 이름이 없을땐 this가 생략할수 있다. + +EX) +int v1; + +public void plus(int v2) { + v1 = v1 + v2; +} + +### 5) 접근제어자 + +접근제어자의 종류 : public, static, protected, X(default), private + +### 6) 클래스 다이어그램 + +
    + + +
    + +다이어그램의 기본적인 형태 + +SDLC(SOFTWARE DEVELOPMENT LIFE CYCLE) == SDP ( SOFTWARE DEVELOPMENT PROCESS ) + +### 7) 상속 + +자바에서 상속이란 의미는 현실에서의 상속과 크게 다르지않다. +현실에서 부모에게서 물려받은 물적재산 또는 지적재산을 자신이 승계받듯이, 자바에서도 +부모 클래스(parent class)로부터 상속받은 자식클래스(children class)는 부모클래스의 +모든 자원과 메서드등을 자신의 것처럼 사용할수 있다. + +{% highlight html %} + +public class Cal2 { + int v1; + + public void plus(int v2) { + v1 = v1 + v2; + } + + public void minus(int v2) { + v1 = v1 - v2; + } + + public void multi(int v2) { + v1 = v1 * v2; + } + + public void divide(int v2) { + v1 = v1 / v2; + } + + public void mod(int v2) { + v1 = v1 % v2; + } + + public void clear() { + v1 = 0; + } + + public void print() { + System.out.println(v1); + } +} + +class Calulator extends Cal2 { + // Calulator는 Cal2를 상속받는다. + // extends는 상속을 뜻한다. + public void setOperand(int left, int right) { + v1 = left + right; + } +} + +public class Exam03 { + public static void main(String[] args) { + Cal2 C2 = new Calulator(); + + C2.plus(12); // C2 레퍼런스변수를 통해서 Cal2 부모 클래스의 메소드를 호출한다. + C2.multi(30); + C2.print(); + } +} + +{% endhighlight %} + +class Calculator extends Cal2 : Calculator는 Cal2를 상속받는다는 의미이다. +extends는 상속을 뜻한다. ( Calculator는 Cal2의 모든 메소드를 사용할수 있다. ) + +계산기를 정의했고, Calculator란 클래스를 정의했다. 이 클래스의 본체에는 substract라는 +메소드만 존재하지만 C1이라는 참조변수를 통해서 Cal2의 메소드를 사용할수있다. +상속을 통해서 코드의 중복을 해결하고, 또한 부모클래스를 개선할 경우에는 +모든 자식클래스에게 혜택이 돌아가기 때문에 유지보수가 편해진다. +* 상속에 상속도 가능하다. + +일반화 : 자바에서는 부모클래스이며 추상클래스라고 말한다. +( 부모클래스이며 추상클래스는 인스턴스가 될수없다 ) + +일반화 시키기 위해서 쓰이는 단어들 +ex) 포유류, 개, 자동차 등등 +ex) 자동차 : 부모클래스 / 버스, 쉐보레, 슈퍼카 등등을 통틀어서 모두 자동차로 부를수있다. + +### 8) 인터페이스(interface) + +실제 기능을 만들기전에 정의를 하는곳 +소프트웨어를 만든다면 당연히 기능부터 정의한다. +ex) 설계서, 도면 등등 + +인터페이스를 먼저 만드는것보다는 잘 만들어진 것을 사용하게된다. +인터페이스는 실제로 구현하기전에 미리 정의를 해놔야한다. +( 필요한 내용에 대해서 미리 정의해놓는다 ) + +상속이 부모 클래스의 기능을 자식 클래스가 물려받는것이라고 하면 인터페이스는 자식클래스에 +특정한 메소드를 정의하도록 강제한다. + +{% highlight html %} + +EX) 인터페이스의 예시 + +public interface Calulatable { // Calulatable 인터페이스 선언 + public void multiStrings(int left, int right); // 기능정의 + public void age(int value); + public void avg(int left, int right); +} + +public class CalulatableDemo implements Calulatable{ + // 클래스 CalulatableDemo는 인터페이스에 따라 기능을 구현했다. + // implements는 인터페이스를 선언할때 사용한다. + public void multiStrings(int left, int right) { + System.out.println(left + right); + } + + public void age(int age) { + System.out.println(age); + } + + public void avg(int v1, int v2) { + System.out.println(v2 / v1); + } +} + +public class interFace01 { // 인터페이스 클래스 + public static void main(String[] args) { + CalulatableDemo D1 = new CalulatableDemo(); // CalulatableDemo 인스턴스 생성 + D1.age(29); // D1의 age 메소드 호출 + D1.multiStrings(1,5); // 메소드 호출 + D1.avg(30,5); // 메소드 호출 + } +} + +Calulatable에는 기능을 정의, CalulatableDemo에 기능을 구현하였다. + +{% endhighlight %} + + +### 9) 인터페이스의 5가지 종류 + +5가지 인터페이스에 대해선 반드시 기억해야한다. + +Collection - 순서를 지키지 않는다. +add(E) - 추가 +int size() - 몇건 들어가 있나? + +Set - 중복 허용 X, 순서를 지키지 않는다. +boolean add(E) - 추가 + +Map - Key, Value로 값을 관리한다. +put(key, value) - 값을 저장한다. +value get(key) - key에 해당하는 value를 구합니다. + +List - 중복허용, 순서를 지킨다. +E get(index) - 특정 위치의 값을 꺼낸다. + +Iterator - 자료구조에서 값을 꺼낼 때 사용한다. +boolean hasNext() - 꺼낼것이 있느냐? 없느냐? +E next() - 꺼내다. + +인터페이스는 고민을 해야한다. +상속은 되도록이면 하지않도록 한다. + +### 10) 생성자 + +생성자 = 인스턴스를 생성할 때 생성자를 사용한다. +생성자가 하는일은 인스턴스가 만들어질때 해당 인스턴스를 초기화하는 기능을 가지고 있다. +또한 매개변수가 다르다면 여러개의 생성자를 선언할수있다. +EX) new 생성자(), new 생성자(1); + +EX) 주사위라는 인스턴스를 만든다, 면의 수는 기본으로 6면이 되도록 한다. +사용자가 원한다면 면의 수를 다르게 설정하고 싶다. 한번 만들어진 인스턴스는 도중에 면의수를 바꿀수없다. + +Dice d1 = new Dice(); // 아무런 값이 없는 경우 default 생성자. +Dice d2 = new Dice(9); // 9라는 값을 받는다. 페러미터값이 다를경우 같은 이름으로 여러개의 생성자 생성가(오버로딩) + +생성자를 하나도 만들지 않을경우, 컴파일 할 때 아무일도 하지않는 기본생성자가 만들어진다. + +{% highlight html %} + +public class Member { + + // private - 해당 클래스 안에서만 사용가능 + // 외부에서는 name을 접근할수 없다. + // name : 필드, 속성, 인스턴스 변수라고 말한다. + + private String name; + + public Member(String name){ + this.name = name; + } + + public String getName() { // 네임에 접근하기 위하여 public String getName을 선언; + return this.name; + } +} + +public class MemberTest { + public static void main(String[] args){ + Member M1 = new Member("트와이스"); + // 멤버 클래스의 참조변수 M1을 선언, 생성자 생성 인스턴스에 올라간다. + // 생성자가 생성되는 경우에 해당 인스턴스는 값이 초기화가 된다. + + Member M2 = new Member("베리굿"); + // 생성자 오버로딩 : 패러미터를 받는값이 다를경우 같은 이름의 여러개의 생성자가 작성이 가능하다. + + System.out.println(M2.getName()); + System.out.println(M1.getName()); + } +} + +public class Car { + private String cname; + // 생성자가 하나라도 있을경우 기본생성자는 만들어지지않는다. + public Car(String cname) { + this.cname = cname; + System.out.println(cname); + } +} + +public class Bus extends Car{ + // Bus 클래스는 car 클래스를 상속받는다. extends = 상속 + // 클래스에 생성자가 없어도 컴파일이 될경우에 자동으로 기본 생성자가 생성된다. + // 클래스이름을 딴 기본생성자 생성. + public Bus() { + super("blackCow"); + // super()는 부모의 생성자를 호출한다. + // 상속받는 경우 부모의 기본생성자를 호출, 그러나 없는 경우 에러가 발생한다. + // 이런경우 반드시 프로그래머가 부모생성자를 받는 경우를 기록해야한다. + } +} + +public class CarTest { + public static void main(String[] args) { + Bus b1 = new Bus(); + // 참조변수 b1 선언 = Bus 생성자 생성 ( 인스턴스는 값이 초기화되고 메모리에 올라간다 ) + } +} + +{% endhighlight %} + diff --git a/_posts/2018-12-05-java_basic_03.md b/_posts/2018-12-05-java_basic_03.md new file mode 100644 index 00000000000..b5a832aabc8 --- /dev/null +++ b/_posts/2018-12-05-java_basic_03.md @@ -0,0 +1,226 @@ +--- +layout: post +title: "[프로그래머스 강의] 자바 18-12-05 공부내용" +date: 2018-12-04 +excerpt: "Object, 오버라이딩, 스트링버퍼, Math" +java: true +tag: +- OverRiding +- 오버라이딩 +- equals +- toString +- hashCode +- java.Lang +- stringBuffer +- Math +comments: true +--- + +## 1. Object와 오버라이딩 + +* equals : 객체가 가진 값을 비교할때 사용 +* toString : 객체가 가진 값을 문자열로 반환 +* hashCode : 객체의 해시코드 값 반환 + +#### 공통점 +* 기준이 있어야 값을 비교할 수 있다. 값을 비교할수 있는 method는 제공하고있지만 +* 값끼리 서로 비교하기 위한기준은 오버라이딩을 통해 프로그래머가 기준점을 정해야한다. +* 이클립스 혹은 인텔리 J 에서 오버라이딩 메소드 생성이 가능하다. + +```java + +실전예제 + +import java.util.HashMap; +import java.util.Objects; + +public class Student { // Student 클래스 생성 + String name; // 이름 필드값 생성 + String number; // 숫자 "" + int birthYear; // 생년월일 "" + + public static void main(String[] args) { + Student s1 = new Student(); // s1 참조변수 선언, Student 인스턴스 생성 + s1.name = "정준일"; // s1.name의 필드값은 스트링 + s1.number = "1234"; // "" + s1.birthYear = 1990; // "" + + Student s2 = new Student(); + s1.name = "정준일"; + s1.number = "1234"; + s1.birthYear = 1990; + + if(s1.equals(s2)) { + System.out.println("s1 과 s2는 값이 동일하다."); + } else { + System.out.println("s1과 s2는 값이 다르다."); + } + System.out.println(s1.hashCode()); + System.out.println(s1.toString()); + } + + @Override + public int hashCode() { + // 오버라이딩 hashCode, equals, toString은 이클립스나 인텔리j 자체에서 생성가능 + return Objects.hash(name, number, birthYear); + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + Student student = (Student) o; + return birthYear == student.birthYear; + } + + @Override + public String toString() { + return "Student{" + + "name='" + name + '\'' + + ", number='" + number + '\'' + + ", birthYear=" + birthYear + + '}'; + } +} + +``` + +## 2. java.lang 패키지 / 오토박싱 + +자바에서 기본 패키지이며 가장 중요한 패키지 +* java.lang 패키지에는 기본형타입을 객체로 변환 시킬때 사용하는 Wrapper 클래스가 있다. +* Boolean, Byte, Short, Interger, Long, Float, Double 클래스 +* java.lang 패키지 클래스는 import를 하지 않고 사용가능 +* java.lang 패키지에 해당하는 유명한 패키지 +* String, StringBuffer, StringBuilder, System, Math, Thread 등등 + +* 오토박싱(Auto Boxing) +* Integer i3 = 5; 숫자 5는 원래 기본형이지만 자동으로 인트형으로 변환된다. + +* 오토 언박싱(Auto unboxing) +* int i5 = i3; Integer 객체타입의 값을 기본형 int로 자동으로 변환하여 값을 할당한다. + +```java + +public class IntegerExam{ + public static void main(String[] args){ + Integer i1 = 5; + int max_int = i1.MAX_VALUE; + long i1_long = i1.longValue(); + double double_value = i1.doubleValue(); + float float_value = i1.floatValue(); + + System.out.println(double_value); + System.out.println(float_value); + + } +} + +``` + +* Interger는 int의 wrapper class입니다. +* class 이기 때문에 속성(필드)과 메소드를 가집니다. +* Interger타입인 경우 필드와 method를 사용할 수 있지만, 기본형 타입은 method를 사용할 수 없다. + +## 3. 스트링 버퍼 + +##### StringBuffer 클래스에 대하여 + +* StringBuffer 특징 +* 메소드 체이닝(Method Chaining) : 자기자신을 리턴하여 자신의 메소드를 호출하는 방식 +* 가지고 있는 메소드들은 대부분 자기자신, this를 반환합니다. +* append 메소드 외에도, 길이를 구하거나, 자르거나 등의 다양한 메소드 들을 가지고 있습니다. + +```java + +import java.util.Random; + +public class StringBufferExam{ + public String randomName(){ //String randomName 이기 때문에 리턴값도 String이 되어야한다. + StringBuffer sb = new StringBuffer(); + String[] firstNames = {"Tod", "John", "Michael"}; + String[] lastNames = {"Smith", "Brown", "Davis"}; + + //0~3 사이의 임의의 숫자를 골라서 + int random1 = new Random().nextInt(3); + //랜덤하게 이름을 뽑는다. + String firstName = firstNames[random1]; + + + //0~3 사이의 임의의 숫자를 골라서 + int random2 = new Random().nextInt(3); + //랜덤하게 성을 뽑는다. + String lastName = lastNames[random2]; + String sb3 = new StringBuffer().append(firstName).append(" ").append(lastName).toString(); + // sb에 이름(fistName) 공백(" ") 성(lastname) 순으로 append해 보세요. + // 단 메소드 체이닝을 이용해야 합니다. + // 리턴하는 값도 String 이어야 리턴이 된다. + return sb3; + } + public static void main(String[]args){ + StringBufferExam sbname = new StringBufferExam(); + System.out.println(sbname.randomName()); + } +} + +``` + +* 스트링 클래스의 문제점 + +* 자바에서 new 객체를 생성하는 횟수가 많을수록 연산속도는 떨어진다. +* 문자열을 반복문안에서 더하는 것(+)은 성능상 문제가 생길 수 있으니 반드시 피하도록 합시다. + +```java +public class StringBufferPerformanceTest{ + public static void main(String[] args){ + // (1) String의 +연산을 이용해서 10,000개의 *를 이어붙입니다. + //시작시간을 기록합니다.(millisecond단위) + long startTime1 = System.currentTimeMillis(); + String str=""; + for(int i=0;i<10000;i++){ + str=str+"*"; + } + //종료시간을 기록합니다.(millisecond단위) + long endTime1 = System.currentTimeMillis(); + + // (2) StringBuffer를 이용해서 10,000개의 *를 이어붙입니다. + //시작시간을 기록합니다.(millisecond단위) + long startTime2 = System.currentTimeMillis(); + StringBuffer sb = new StringBuffer(); + for(int i=0;i<10000;i++){ + sb.append("*"); + } + //종료시간을 기록합니다.(millisecond단위) + long endTime2 = System.currentTimeMillis(); + + // 방법(1)과 방법(2)가 걸린 시간을 비교합니다. + long duration1 = endTime1-startTime1; + long duration2 = endTime2-startTime2; + + System.out.println("String의 +연산을 이용한 경우 : "+ duration1); + System.out.println("StringBuffer의 append()을 이용한 경우 : "+ duration2); + } +} +``` + +## 4. Math 클래스 + +cosign, sign, random 등 수학과 관련된 값을 구할수 있는 클래스 +* Math 클래스는 생성자가 private으로 되어있기 때문에 new 연산자를 이용하여 객체를 생성할수 없습니다. +* 객체를 생성할 수는 없지만 모든 메소드와 속성이 static으로 되어있기 때문에 객체를 생성하지 않고 사용할수 있습니다. + +```java + +public class MathExam{ + // math 클래스의 특징!! + //생성자가 private일 경우 new 연산자를 통해서 객체 생성 불가능 + public static void main(String[] args){ + int mathTest = Math.max(1,30); + System.out.println(mathTest); + System.out.println("2의 10승 = " + Math.pow(2, 10)); // pow, log10 메소드를 사용! + System.out.println("16의 1/2승 = : " + Math.pow(16, 0.5)); + System.out.println("log200 = " + Math.log10(200)); + } +} + +``` \ No newline at end of file diff --git a/_posts/2018-12-05-java_basic_04.md b/_posts/2018-12-05-java_basic_04.md new file mode 100644 index 00000000000..5f0d7a7a4d5 --- /dev/null +++ b/_posts/2018-12-05-java_basic_04.md @@ -0,0 +1,235 @@ +--- +layout: post +title: "[프로그래머스 강의] 자바 18-12-05 공부내용-2" +date: 2018-12-05 +excerpt: "java.util 익히기, 컬렉션 프레임워크" +java: true +tag: +- java.util +- class +- Collection framework +- Generic +comments: true +--- + +## 1. java.util 패키지 + +* Deprecated : 더이상 지원하지 않는다는 의미입니다. +* 자료구조와 관련된 컬렉션 프레임워크와 관련된 인터페이스와 클래스 + +## 2. 컬렉션 프레임워크 + +#### 자료구조 : 자료를 저장할수 있는 구조를 말한다. + * 책을 보관하기 위해서는 책장을 이용하는 것처럼 다양한 자료들을 다양한 방식으로 관리하기 위한 방법이 필요, + * 이러한 방법을 제공하는 것을 자료구조, 컬렉션 프레임워크라고 한다. + +#### Collection : 여기에 자료가 있다는것을 표현, 중복허용, 자료저장 순서 기억 X + * 대표 메서드 add(Object), iterator(), size() + * 저장된 순서를 기억하지 못하기 때문에 "첫번째 자료를 달라, 두번째 자료를 달라"와 같은 기능은 가질수없다. + * "" 은 저장된 자료를 하나씩 꺼낼수 있는 Iterator라는 인터페이스를 반환한다. + +#### Iterator : 보통 꺼낼것이 있는지 없는지 확인하는 용도로 사용한다. + * 대표 메서드 hasNext(), next() + +#### Set : 중복을 허용하지 않는 자료구조를 표현하는 인터페이스, 자료저장 순서 기억 X + * Collection 인터페이스를 상속받는다. + * 대표 메서드 add(), add 메소드는 같은 자료가 있으면 false, 없으면 true를 반환한다. + +#### List : 중복을 허용하는 자료저장 구조 인터페이스, 자료저장 순서 기억 O + * Collection 인터페이스를 상속받는다. + * List 인터페이스는 순서를 기억하고 있기 때문에 n번째 자료를 꺼낼수 있는 get(int) 메소드를 가지고 있다. + +#### Map : Key와 Value를 가지고 있는 자료저장 구조 인터페이스 + * 저장할 때 put() 메소드를 이용하여 Key와 Value를 함께 저장한다. + * 원하는 값을 꺼낼때는 Key를 매개변수로 받아들이는 get() 메소드를 이용하여 값을 꺼낸다. + * Map에 저장되어 있는 모든 Key들은 중복된 값을 가지면 안된다. + * Key의 이런 특징 때문에 Map은 자신이 가지고 있는 모든 Key에 대한 정보를 읽어들일수 있는 Set을 반환하는 KeySet() + * 메소드를 가지고 있다. + +
    + +
    + +## 2. Generic + +* Generic을 사용함으로써 선언할때는 가상의 타입으로 선언하고, 사용시에는 구체적인 타입을 설정함으로써 +* 다양한 타입의 클래스를 이용하는 클래스를 만들 수 있습니다. Generic을 사용하는 대표적인 클래스는 +* 컬렉션 프레임워크와 관련된 클래스입니다. + +```java + public class Box { // 박스클레스 + private Object obj; // 접근제어자(private) 매개변수 선언 + public void setObj(Object obj){ + this.obj = obj; // 매개변수 obj가 이미 선언됐기 때문에 this.obj = obj라고 적음. + } + + public Object getObj(){ // 오브젝트 값을 그대로 돌려준다. + return obj; + } + } + + public class BoxExam { + public static void main(String[] args) { + Box box = new Box(); + box.setObj(new Object()); + Object obj = box.getObj(); + + box.setObj("hello"); + String str = (String)box.getObj(); + System.out.println(str); + + box.setObj(1); + int value = (int)box.getObj(); + System.out.println(value); + } + } +``` + +* Box는 매개변수로 Object를 하나 받아들이고, Object를 반환한다. +* Object를 받아들일 수 있다는 것은 Object의 후손이라면 무엇이든 받아들일 수 있다는 것이다. + +#### Generic을 이용하여 수정한 Box를 이용하는 방법 + +```java + public class BoxExam { + public static void main(String[] args) { + Box box = new Box<>(); + box.setObj(new Object()); + Object obj = box.getObj(); + + Box box2 = new Box<>(); + box2.setObj("hello"); + String str = box2.getObj(); + System.out.println(str); + + Box box3 = new Box<>(); + box3.setObj(1); + int value = (int)box3.getObj(); + System.out.println(value); + } + } + +``` + +* 참조타입에 Object, String, Integer을 볼 수 있다. +* 첫번째는 Object를 사용하는 Box를 인스턴스로 만드는것 +* 두번째는 String을 사용하는 Box를 인스턴스로 만드는것 +* 세번째는 Integer를 사용하는 Box를 인스턴스로 만드는것 + +## 3. Set + +* Set은 중복이 없고, 순서도 없는 자료구조. Hashset과 TreeSet이 있다. + +```java + +import java.util.HashSet; // java.util.HashSet을 가져온다. +import java.util.Iterator; // 동일 +import java.util.Set; + +public class setExam { + public static void main(String[] args) { + Set set1 = new HashSet<>(); // Set Generic을 통해서 String으로 받는다. + + boolean flag1 = set1.add("kang"); // Set.add 메소드는 리턴값이 boolean으로 받는다( true or false ) + boolean flag2 = set1.add("kim"); + boolean flag3 = set1.add("kang"); + + System.out.println(set1.size()); + + System.out.println(flag1); + System.out.println(flag2); + System.out.println(flag3); + + Iterator iter = set1.iterator(); // Iterator 또한 Generic을 통해 String으로 리턴받는다. + while(iter.hasNext()) { // iterator.hasNext는 유효한 결과값이 없을때까지 작동한다. + String str = iter.next(); // iter.next() 값을 String 필드(변수)에 담는다. + System.out.println(str); // str을 출력한다. + } + } +} + +``` + +* 결과값 : 2, true, true, false, kang, kim +* 설명 : set1.size값, flag1은 true, flag2은 true, flag3값은 Set은 중복을 허용하지 않기 때문에 false +* iter.next()에 따라서 순번대로 유효한 값만 출력 + +## 4. List + +```java +import java.util.*; // 자바 유틸 패키지 모두를 가져옴. + +public class ListExam { + public static void main(String[] args) { // 프로그램 시작점 + List list = new ArrayList<>(); // List를 자료형으로 받는다. 인스턴스 ArrayList 생성(배열) + list.add("kim"); // kim, kang, kim 추가 + list.add("kang"); + list.add("kim"); + + System.out.println(list.size()); // list 배열의 사이즈 출력 + for(int i = 0; i addArray(String[]arr1, String[]arr2){ + List list = new ArrayList(); + + for(String str : arr1){ + list.add(str); // foreach문 str에 arr1의 배열을 담는다. + } + + for(String str : arr2){ + list.add(str); // foreach문 str에 arr2의 배열을 담는다. + } + + return list; // return 값이 있는 경우는 자료형을 기재하도록 한다. + } + + public static void main(String[] args){ + ListExam LE = new ListExam(); + String[] arr1 = {"Hello","Coding","알고리즘","책"}; + String[] arr2 = {"벌써","12월","5일이다"}; // 배열 선언 ( 값 담기 ) + + List list = LE.addArray(arr1,arr2); // 결과값 또한 String 자료형으로 받는다. + System.out.println(list); // 리스트 출력 + } +} +``` +* 실행결과 : [Hello, Coding, 알고리즘, 책, 벌써, 12월, 5일이다] + +## 5. Map +* Key와 value가 쌍으로 저장이 되는 자료구조, value는 중복될수 있지만 key는 중복될수 없다. + +``` java +import java.util.*; + +public class MapExam{ + public Map makeMap(){ // Map Generic + Map products = new HashMap<>(); + //상품의 이름과 값을 products에 추가해 보세요. + products.put("가위",2500); // map 자료구조에 값을 추가 ( key, value) + products.put("크레파스",5000); + return products; + } + + public static void main(String[] args){ + MapExam ME = new MapExam(); + + System.out.println(ME.makeMap().get("가위")); + System.out.println(ME.makeMap().get("크레파스")); + } +} + +``` +* 결과값 : 2500, 5000 + diff --git a/_posts/2018-12-06-hello-coding.md b/_posts/2018-12-06-hello-coding.md new file mode 100644 index 00000000000..7d47cb42dee --- /dev/null +++ b/_posts/2018-12-06-hello-coding.md @@ -0,0 +1,78 @@ +--- +layout: post +title: "[알고리즘] 선택정렬" +date: 2018-12-04 +excerpt: "선택정렬, hello-coding 알고리즘" +algo: true +tag: +- 알고리즘 +- hello-coding +- 선택정렬 +- 재귀 + +comments: true +--- + +## 1. 선택정렬 + +선택정렬에 대하여, 컴퓨터에 음악이 많이 저장되어 있다고 가정할 경우 가수별로 몇곡이 + +들었는지 다음과 같이 기록하였습니다. + +| 음악제목 | 연주횟수 | +|----------|----------| +| 음악1 | 156 | +| 음악2 | 146 | +| 음악3 | 140 | + +이 목록을 가장 많이 들은것부터 가장 적게 들은 것 순서로 정렬하여 가장 좋아하는 가수를 + +알고 싶은 경우, 연주횟수가 가장 많은 음악을 음악1 ~ 음악3까지 찾는다. + +| 음악제목 | 연주횟수 | +|----------|----------| +| 음악1 | 156 | + +----------------------- + +| 음악제목 | 연주횟수 | +|----------|----------| +| 음악1 | 156 | +| 음악2 | 146 | + + +이런식으로 반복하면 음악순위를 구할수 있다. 연주횟수가 가장 많은 사람을 찾기 위해서는 + +목록의 모든 항목을 점검해야 하기 때문에 O(n x n) 즉 O(n^2) 시간이 걸립니다. + +```java + +package my.examples.javaexam; + +public class SortExam { + public static void main(String[] args) { + int[] a = {254,3,213,64,75,56,4,324,65,78,9,5,76,3410,8,342,76}; // 배열 + int b; + for(int i = 0 ; i < a.length -1 ; i ++) { // a배열 길이만큼 반복문 + for(int j = i+1 ; j < a.length ; j ++) { // int j는 i보다 1이크다 + if(a[i] > a[j]) { // a의 0번째 배열과, a의 1번째 배열값을 비교하여 값을 바꾼다. + b = a[j]; // a[j] 배열값을 보관 + a[j] = a[i]; // a[j] 1번째 배열에 a[i]값을 기록 + a[i] = b; // a[i] 에는 아까 임시보관값 b를 삽입 + } + } + } + // --> ex) 0번째 배열과 1번째 배열값을 계속 바꾼다. + for(int i = 0 ; i < a.length ; i ++) { + System.out.println(a[i]); + } + } +} + +``` + +## 2. 재귀정렬 + +1) 재귀에 대하여 + +재귀는 간단하게 설명하면 자기자신을 호출하는것입니다. \ No newline at end of file diff --git a/_posts/2018-12-06-java_basic_01.md b/_posts/2018-12-06-java_basic_01.md new file mode 100644 index 00000000000..643a99c3a82 --- /dev/null +++ b/_posts/2018-12-06-java_basic_01.md @@ -0,0 +1,180 @@ +--- +layout: post +title: "[자바] 18-12-06 공부내용" +date: 2018-12-06 +excerpt: "자바,수업" +java: true +tag: +- java.util +- 프로젝트 +- package +- 오버라이딩 +- 추상클래스 + +comments: true +--- + +## 1. 프로젝트 생성 + +빌드(build) 도구 - Ant, Gradle(사용량 ↑), Maven(사용량 ↑ 추천) +- 의존성 관리, 컴파일, 패키징, 배포 등 자동화 하는 도구 +- 다양한 파일을 하나로 만들어주는것 -> 패키징 + +빌드도구도 설치를 해야한다. +- 윈도우 환경에서 개발한 내용을, 리눅스 환경에서도 실행이 가능하다. + +Intellij에는 Maven이 내장되어 있다. + +- GroupId : 도메인 주소를 거꾸로 적는다. ( 이름이 동일하면 안되기 때문에 ) +- ArtifactId : 프로젝트 이름 +- pom.xml 파일 : Maven 설정 파일이다. + +- 기본적으로 Maven은 Java5 기준으로 프로젝트가 생성된다. +- Maven을 사용하면서 Java 8을 사용하려면 어떻게 해야하는가? + +#### 프로젝트를 처음에 만들경우 + +file - openModuleSetting - modules와 project를 반드시 체크할것 - 자바 버전 확인 + +Maven 프로젝트 구조 + +아스키 아트 : 아스키코드로 그림표현 + +{% highlight html %} +javaexam + ----- src +---- main --- java + | | | + | | +----- resources + | +---- test --- java + | + + ----- pom.xml +{% endhighlight %} + +main - java : 개발할 소스폴더 +test - java : 테스트와 관련된 소스 폴더 +resources : 설정파일, 정적Data 등 + +Maven CoC : 관습적으로 (통례적으로) 사용되어지는 수많은 설정들을 default값으로 제공하여 +개발자들로 하여금 프로젝트 설정에 들이는 시간과 노력을 줄여주고, 또한 설정을 공통적으로 +사용하므로서 유연성과 단순성을 잃어버리지 않도록 하기 위한 소프트웨어 디자인 패러다임입니다. +* 개발자에게 체계적이고 합리적인 패턴을 제공하기 위함! + +## 2. package를 만든다. + +main - java 폴더 아래에 패키지를 만든다. +패키지 이름은 my.examples.javaexam으로 만든다. +해당 패키지는 base 패키지라고 말한다. + +#### package란 무엇인가? + +- package는 클래스나 인터페이스를 관련된 것을 모은다. +- 보통 package가 없는 클래스나 인터페이스는 만들지 않는다. + +패키지를 선택하고 클래스를 만든다 + +## 3. 자바가 제공하는 api + +#### 가장 기본이 되는 package + +- java.lang : import를 하지 않아도 사용할 수 있는 가장 기본적인 package +- java.util : 자료구조등 아주 유용한 클래스등이 있다. +- java.io : 자바 입출력과 관련된 클래스들이 있다. +- java.net : 네트워크 프로그래밍과 관련된 클래스(인터페이스 포함)들이 있다. +- java.sql : Database프로그래밍과 관련된 클래스(인터페이스 포함)들이 있다. + +* java.lang, java.util, java.io의 클래스에 대해서 따로 공부를 해야한다. + +패키지가 있는 소스코드를 컴파일 하려면 javac에 -d 옵션을 줘야 한다. + +javac - d /tmp Exam01.java + +위와 같이 컴파일 하면 /tmp/my/examples/javaexam 폴더가 생기고, +해당 폴더에 Exam01.class가 생긴다. + +실행은 tmp 폴더에서 다음과 같이 명령을 내린다. + +java my.examples.javaexam.Exam01 + +자바 api를 볼 경우에는 상속관계도 파악을 해야한다. +한글로 method를 만드는경우에는 테스트코드 일때만 만든다. + +객체를 사용할때는 모든 기능을 사용할 필요가 없는 경우가 있다. +ex) 택시나 버스 -> 자동차로서의 기능만 수행해야 할때가 있다. + +오버라이딩 : 중복해서 구현 +부모가 가지고 있는 메소드와 동일한 이름, 리턴타임, 파라미터등을 가진다. + +* 메소드가 오버라이딩 되면 무조건 자식이 가지고 있는게 실행된다. +* 메소드 이름을 적을때는 해당 객체가 실행되는것을 전제로 짓는다. + +* 어디서, 어떤 목적에 의해 만들어진 건지에 대해서 알아야한다. +* 다른사람의 로직, 형태를 참고할것. + +```java + +public class OverExam { + public static void main(String[] main) { + LanguageSchool L1 = new LanguageSchool(); + L1.intro(); + + LanguageSchool L2 = new Japan(); + L2.intro(); + // Japan class의 intro가 실행된다. + // 부모의 메소드가 아닌 본인의 메소드가 실행된다. + + Japan L3 = new Japan(); + L3.intro(); + + } +} + +public class LanguageSchool { + public void intro() { + system.out.println("안녕하세요"); + } +} + +public class Japan extends LanguageSchool { + public void intro() { + system.out.println("곤니찌와"); + } +} + +public class English extends LanguageSchool { + public void intro() { + system.out.println("헬로"); + } +} + +public class Chinese extends LanguageSchool { + public void intro() { + system.out.println("니하오"); + } +} + +``` + +추상 클래스는 미완성의 메소드를 가질 수 있다. +추상 클래스는 구현되지 않은 메소드를 가질수 있다. +자식 클래스는 반드시 부모 추상클래스의 메소드를 구현해야한다. +자식 클래스가 부모 추상클래스의 메소드를 구현하지 않으면, +자식 클래스도 추상클래스가 된다. + +추상 클래스는 추상메소드를 가지지 않아도 된다. +그러나 대부분의 추상 클래스는 추상 메소드를 가진다. + +클래스중에서 인스턴스를 만들고 싶지 않은경우 ---- 추상화 + +## 4. 숙제 ( 개인별 공부 ) + +* 수업끝나고 Maven PC에 설치할것! +* Maven에 대해서 자세히 알아보기 +* 추상 클래스에 대해 조사합시다 +* 오버라이딩에 대해 조사합시다 +* 인텔리j에서 메이븐으로 2번 이상 구현해볼것! +* java.lang, java.util, java.io의 클래스에 대해서 따로 공부를 해야한다 + +## 5. 내일 수업 중점적 이슈 + +* 인터페이스에 대하여 자세히 공부. +* 접근제어자에 대하여 공부한다. public, protected, X (default), private +* 디자인 패턴 중에 Template Method Pattern에 대하여 공부 diff --git a/_posts/2018-12-06-java_basic_02.md b/_posts/2018-12-06-java_basic_02.md new file mode 100644 index 00000000000..912ab43c154 --- /dev/null +++ b/_posts/2018-12-06-java_basic_02.md @@ -0,0 +1,206 @@ +--- +layout: post +title: "[자바] 18-12-06 공부내용-02" +date: 2018-12-06 +excerpt: "자바,수업" +java: true +tag: +- maven +- 접근제한자 +- 추상클래스 +- 오버라이딩 + +comments: true +--- + +## 1. Maven + +#### 1) 메이븐 설치 ( 사이트참고 ) +https://zetawiki.com/wiki/윈도우_메이븐_설치 + +#### 2) Maven 이란 + +프로젝트를 진행하게 되면 단순히 자신이 작성한 코드만으로 개발하는것이 아니라 많은 라이브러리들을 활용해서 개발을 하게 됩니다. 이 때 사용되는 라이브러리들의 수가 수십개가 훌쩍 넘어버리는 일이 발생해 이 많은 라이브러리들을 관리하는 것이 힘들어지는 경우가 종종 발생하곤 합니다. Maven은 이러한 문제를 해결해 줄 수 있는 도구 입니다. Maven은 내가 사용할 라이브러리 뿐만 아니라 해당 라이브러리가 작동하는데에 필요한 다른 라이브러리들까지 관리하여 네트워크를 통해서 자동으로 다운받아 줍니다. + +즉, 필요한 라이브러리를 특정 문서(pom.xml)에 정의해놓으면 네트워크를 통해서 라이브러리들을 자동으로 +받아줍니다. 그러므로 우리는 jar파일을 공유하고, 카톡으로 데이터를 주고 받을필요가 없이 +pom.xml에 기재해놓은대로 Maven이 라이브러리들을 공유하게 도와줍니다. + +#### 3) Maven의 장점 + +1. 라이브러리의 관리를 매우 용이하게 해준다. +2. 프로젝트 작성부터, 컴파일, 페트스등 라이프 사이클에 포함되는 각 테스트를 지원해준다. +3. war파일 기반의 배포용으로도 자주 사용된다. + +#### 4) Maven의 LifeCycle + +메이븐의 특징은 프레임워크이기 때문에, 동장방식이 정해져있다. +1. Phase : 빌드들의 단계 +2. Build : Phase의 연결된 Goal을 실행하는 과정 +3. Goal : Maven이 이행할수 있는 여러가지 동작을 수행하는 명령 + +즉, 이러한 동장방식을 LifeCycle이라 한다. 각 빌드단계를 Phase라고 한다. + +Maven build : 메이븐빌드를 사용한다 + +Maven build : 새로운 사용자 빌드를 만든다. + +Maven clean : target에 지정된 모든 소스를 삭제한다. + +Maven generate-sources : 컴파일 과정에 포함된 소스를 생성한다. + +Maven install : Local Repository에 패키지를 복사한다. + +일반적으로 메이븐은 3개의 표준 리사이클을 제공합니다. + +1. Clean : 빌드시 생성된 Output을 지워준다. +2. Default : 일반적인 빌드 프로세스를 위한 모델이다. +3. Site : 프로젝트 문서와 사이트 작성을 수행한다. + +
    + +
    + +#### 5) Phase의 특징 + +* 특정 순서에 따라서 goal이 실행되도록 구조를 제공합니다. +* Phase간에 의존 관계가 있습니다. + +즉, 모든 단계는 이전 단계가 성공적으로 실행되었을 때 실행된다는 것이 Dependency입니다. +Goal은 특정 작업, 최소한의 실행 단위(task)로, 각 단계는 0개 이상의 goal과 연결되어있습니다. + +## 2. 추상클래스 + +1) 구체적이지 않은 클래스 / 독수리, 타조는 구체적인 새를 지칭하지만, 새, 포유류는 구체적이지 않다. + +이러한 것은 구현한것을 추상클래스라고 한다. + +#### 특징 + +1) 클래스앞에 abstract 키워드를 이용해서 정의한다. + +2) 추상클래스는 미완성의 추상 메소드를 포함할 수 있다. + +3) 추상메소드는, 내용이 없는 메소드이다. 즉 구현이 되지않은 메소드 + +4) 추상메소드는, 리턴타입 앞에 abstract라는 키워드를 붙여야한다. + +ex) abstract void sing(); + +5) 추상클래스는 인스턴스를 생성할수 없다. + +#### 추상클래스를 상속받는 클래스를 생성할 때 + +1) 추상클래스를 상속받는 클래스는 추상클래스가 갖고 있는 추상 메소드를 반드시 구현해야 한다. + +2) 추상클래스를 상속받고, 추상 클래스가 갖는 추상 메소드를 구현하지 않으면 해당 클래스도 추상 클래스가 된다. + +```java + +//아래는 실행을 위한 코드입니다. 수정하지 마세요. +public class CarExam { + public static void main(String[] args) { + Car car = new Car(); // Car 인스턴스 생성 + if(Machine.class.isInstance(car)){ + System.out.println("정답입니다. [제출]을 누르세요."); + } + else{ + System.out.println("Car가 Machine을 상속받지 않았습니다."); + } + } +} + +public class Car extends Machine { + // Machine 클래스를 상속받고, 추상 메소드를 구현하세요. + public void turnOn() { + // 부모를 상속받았으나 부모클래스에 정의 돼있는 추상화메소드가 + // 구현돼있지 않기 때문에 자식 클래스가 구현한다. + } + + public void turnOff() { + + } +} + +public abstract class Machine { // 추상화 클래스 선언 + public abstract void turnOn(); // 추상화 메소드 + public abstract void turnOff(); // 추상화 메소드 +} + +``` + +## 3. 오버라이딩 + +1) 메소드를 재 정의하는것 + +2) 부모클래스의 메소드를 자식클래스에서 재정의 하는것 + +#### 특징 + +1) 메소드를 오버라이드하면, 항상 자식클래스에서 정의된 메소드가 호출된다. + +2) 오버라이딩을 해도 부모의 메소드가 사라지는것은 아니다. + +3) super(); 키워드를 이용하면 이름이 같은 부모의 메소드도 호출할 수 있다. + +```java + + //run 메소드를 가지고 있는 Car클래스 + public class Car{ + public void run(){ + System.out.println("Car의 run메소드"); + } + } + + //Car 를 상속받는 Bus 클래스 + public class Bus extends Car{ + public void run(){ + super.run(); // 부모의 run 호출!! + System.out.println("Bus의 run메소드"); + } + } + + public class BusExam{ + public static void main(String args[]){ + Bus bus = new Bus(); + bus.run(); //Car의 run메소드가 실행된다. + } + } + +``` + +## 4. 접근제한자 + +접근제한자의 종류 + +1) public : 어떤 클래스든 접근할 수 있다는것을 의미 + +2) private : 자기 자신만 접근할 수 있다는것을 의미 + +3) protected : 자기 자신, 같은 패키지, 서로 다른 패키지라 하더라도 상속받은 자식클래스는 접근가능을 의미 + +4) default : 자기자신만 접근이 가능함. + +```java +public class Exam01 { + public static void main(String[] args) { + Exam02 EX = new Exam02(); + EX.run(); + } +} + +public class Exam02 { + public String P = "public"; // 어느곳에서나 접근이 가능함 + private String S = "private"; // 자기 클래스안에서만 접근가능 + protected String Pd = "protected" // 같은 패키지 안에서 가능, 다른 패키지일 경우 상속에는가능 + String D = "default"; // 기본값, 자기자신에서만 가능 + + public void run() { + System.out.println(P); + System.out.println(S); + System.out.println(Pd); + System.out.println(D); + } +} + +``` \ No newline at end of file diff --git a/_posts/2018-12-06-java_basic_03.md b/_posts/2018-12-06-java_basic_03.md new file mode 100644 index 00000000000..8fbb337a5d7 --- /dev/null +++ b/_posts/2018-12-06-java_basic_03.md @@ -0,0 +1,74 @@ +--- +layout: post +title: "[프로그래머스] 18-12-06 공부내용" +date: 2018-12-06 +excerpt: "자바,수업" +java: true +tag: +- date 클래스 +- calendar +- +comments: true +--- + +## 1. Date 클래스 + +1) 제일 처음에 만들어진 클래스입니다. + +* 지역화가 되어있지 않은 클래스입니다. +ex) 화폐단위, 시간단위, 지역별로 다른 정보, 기후 등등 + +2) Deprecated는 사용을 자제하라는 표현 + +* 가급적이면 Deprecated는 method or 생성자는 사용하지말것 + +3) 주요 생성자 및 method + +* toString() : 현재시간을 문자열로 구합니다. +* java.util.SimpleDateFormat : yyyy는 년, MM은 월, ss는 초를 표현하며 a는 오전/오후를 표현한다. +* getTime() : long 타입으로 현재시간을 알려주는 메소드 +* ex) long Gtime = date.getTime(); + +```java +package my.examples.javaexam; +import java.util.*; + +public class DateTest { + public static void main(String[] args) { + Date date = new Date(); + System.out.println(date.toString()); + long t1 = date.getTime(); + System.out.println(t1); + } +} +``` + +## 2. Calendar 클래스 + +1) Date의 단점을 해결하고 등장한 것이 Calendar 클래스!! + +Calendar 클래스는 추상클래스입니다. 그렇기 때문에 인스턴스를 생성하려면 Calendar가 + +가지고 있는 클래스 메소드 getInstance()를 사용해야합니다. getInstance() 메소드를 + +호출하면 내부적으로 java.util.GregorianCalendar 인스턴스를 만들어서 리턴합니다. + +Calender cal = Calendar.getInstance(); + +2) Calendar 클래스를 이용해서 현재 날짜와 시간에 대해 알아내는 방법 + +* Calendar는 현재 날짜와 시간에 대한 정보를 가집니다. +* Calendar가 가지고 있는 get메소드에 Calendar의 상수를 어떤것을 넣어주냐에 따라서 다른값이 나옵니다. + +```java +import java.util.*; + +public class Cal { + public static void main(String[] args) { + + } +} + +int year = cal.get(Calendar.YEAR); +int month = cal.get(Calendar.Month); +``` diff --git a/_posts/2018-12-07-java_basic_01.md b/_posts/2018-12-07-java_basic_01.md new file mode 100644 index 00000000000..4b17adf6cfa --- /dev/null +++ b/_posts/2018-12-07-java_basic_01.md @@ -0,0 +1,131 @@ +--- +layout: post +title: "[자바] 18-12-07 공부내용" +date: 2018-12-07 +excerpt: "자바,수업" +java: true +tag: +- template method pattern + +comments: true +--- + +## 1. Final + +1) 오버라이딩을 하지 못하게 한다. + +## 2. Template Method Pattern + +1) +```java +package my.examples.javaexam.fw; + +public abstract class Action { + + // 추상 메소드. 메소드를 선언만한다. + // abstract 리턴타입 메소드명(파라미터들); + void init(){ + System.out.println("init!!"); + } + protected abstract void service(); + + void destroy(){ + System.out.println("destroy!!"); + } + + public final void run(){ + init(); + service(); + destroy(); + } +} + +package my.examples.javaexam.my; + +import my.examples.javaexam.fw.Action; + +public class MyAction extends Action { + protected void service() { + System.out.println("service"); + } +} +package my.examples.javaexam; + +import my.examples.javaexam.fw.Action; +import my.examples.javaexam.my.MyAction; + +public class Exam03 { + public static void main(String[] args){ + Action action = new MyAction(); + action.run(); + } +} +``` + +* package, 접근제어자, final 에 대해 올바른 이해가 있어야 이해할 수 있다. + + +* 부모 메서드가 protected 이면 오버라이딩시 protected or public, 부모 메서드가 public이면 + +오버라이딩시 public 이어야 한다. + +출처: http://roxxy.tistory.com/entry/접근제어자와-캡슐화 [AreYou준비] + +## 3. 인터페이스 + +1) 기능을 정의하겠다. 프로그램을 만들기전에 미리 정의한다. + +인터페이스 = 설계작업과 같다. + +* 인터페이스(규약,정의)와 추상클래스(일반화)를 구별할수 있어야한다. + +* 책을 보고 어떠한 예제구현을 할때 안보고 작성을 할수있을 정도가 되어야한다. + +## 4. 레퍼런스 참조 예제 + +``` java +package my.examples.javaexam; + +public class Item { + int x; + int y; +} + +package my.examples.javaexam; + +// Item을 한개 가질 수 있는 상자. +// Box가 태어날때(?)부터 Item을 가지고 태어나는 것은 아니다. +// Item을 한개 저장하고, Item을 꺼내고 싶다. +public class Box { + private Item item; // null 을 가진다. (참조하는 것이 없다.) + + public void add(Item item){ + this.item = item; + int tmp = this.item.x; + this.item.x = this.item.y; + this.item.y = tmp; + } + + public Item get(){ + return item; + } +} + +package my.examples.javaexam; + +public class Exam05 { + public static void main(String[] args){ + Box box = new Box(); + Item item1 = new Item(); + item1.x = 100; + item1.y = 200; + box.add(item1); + Item i = box.get(); + System.out.println(i.x); + System.out.println(i.y); + } +} + +``` + +i가 참조하는 것은? 그 이유를 설명하시오. diff --git a/_sass/typography.scss b/_sass/typography.scss index 51afc4316b4..46024652b45 100644 --- a/_sass/typography.scss +++ b/_sass/typography.scss @@ -43,6 +43,7 @@ h3.title a { ul { list-style: none; padding-left: 0; + box-shadow: 1px 1px 1px #aaaaaa; } li { padding: 10px 18px; diff --git a/about/index.md b/about/index.md index d3c042a7a15..5f005cc49e8 100644 --- a/about/index.md +++ b/about/index.md @@ -1,37 +1,40 @@ --- layout: page -title: About the Theme +title: About tags: [about, Jekyll, theme, moon] -date: 2016-03-21 +date: 2018-11-20 comments: false --- -
    Moon is a minimal, one column jekyll theme.
    +
    다시 한번 도전중!
    -## Features -* Minimal, you can focus on your content -* Responsive -* Disqus integration -* Syntax highlighting -* Optional post image -* Social icons -* Page for sharing projects -* Optional background image -* Simple navigation menu -* MathJax support +## 신상정보 +* 이름 : 최원오 +* 나이 : 만 27세 +* 생일 : 90년 12월 20일 +* 이메일 : treasure_b@naver.com +* github : 깃허브 주소 +* skills : PHP, JAVA, CI, SPRING, MSSQL, MYSQL, JQUERY, AJAX, JAVASCRIPT, CSS, HTML +* 개발환경 : LINUX, CENTOS +* 사용툴 : VSCODE, ATOM, ECLIPSE, EDITPLUS +
    -## Preview +## 학력 && 경력 +* 2018.12 ~ 2019.05.31 패스트캠퍼스 - 자바, 스프링 과정 수료 +* 2017.07 ~ 2018.10 (주)네오메이트 - 스타트업 재직 +* 2016.04 ~ 2016.10 강남 그린컴퓨터 아카데미 프론트엔드 개발자 과정 수료 +* 2016.02 ~ 남서울대학교 졸업 +* 2012.06 ~ 2012.12 캐나다 6개월 어학연수 +* 2009.02 ~ 남서울대학교 시각정보디자인학과 입학 +
    -{% capture images %} - https://cloud.githubusercontent.com/assets/754514/14509720/61c61058-01d6-11e6-93ab-0918515ecd56.png - https://cloud.githubusercontent.com/assets/754514/14509716/61ac6c8e-01d6-11e6-879f-8308883de790.png -{% endcapture %} -{% include gallery images=images caption="Screenshots of Moon Theme" cols=2 %} +## 기타 자격사항 +* 정보처리기사 자격증 취득 +* sqld 자격증 취득 +* aws associate 자격증 +* 토익 +* jlpt +
    -See a [live version of Moon](http://taylantatli.github.io/Moon) hosted on GitHub. - -## Getting Started - -To learn how to install and use this theme check out the [Setup Guide](http://taylantatli.me/Moon/moon-theme/) for more information. - -[Install Moon](https://github.com/TaylanTatli/Moon){: .btn} +## 프로젝트 +
    \ No newline at end of file diff --git a/algo/index.md b/algo/index.md new file mode 100644 index 00000000000..7f3e0c3c19d --- /dev/null +++ b/algo/index.md @@ -0,0 +1,6 @@ +--- +layout: algo-list +title: 알고리즘 +excerpt: "A List of Posts" +comments: false +--- diff --git a/assets/img/cert_01.png b/assets/img/cert_01.png new file mode 100644 index 00000000000..d8d9e1c4678 Binary files /dev/null and b/assets/img/cert_01.png differ diff --git a/assets/img/cert_02.png b/assets/img/cert_02.png new file mode 100644 index 00000000000..ab3a48d9760 Binary files /dev/null and b/assets/img/cert_02.png differ diff --git a/assets/img/class_diagram.png b/assets/img/class_diagram.png new file mode 100644 index 00000000000..90a4b3bfc8c Binary files /dev/null and b/assets/img/class_diagram.png differ diff --git a/assets/img/collection_framework.png b/assets/img/collection_framework.png new file mode 100644 index 00000000000..24b36f0d367 Binary files /dev/null and b/assets/img/collection_framework.png differ diff --git a/assets/img/hello_coding01.png b/assets/img/hello_coding01.png new file mode 100644 index 00000000000..f4d0116d925 Binary files /dev/null and b/assets/img/hello_coding01.png differ diff --git a/assets/img/java_01.png b/assets/img/java_01.png new file mode 100644 index 00000000000..bec1fee0a27 Binary files /dev/null and b/assets/img/java_01.png differ diff --git a/assets/img/logo.png b/assets/img/logo.png index 6027917bfa0..55ff48fd1c2 100644 Binary files a/assets/img/logo.png and b/assets/img/logo.png differ diff --git a/assets/img/maven_01.png b/assets/img/maven_01.png new file mode 100644 index 00000000000..59577921d1a Binary files /dev/null and b/assets/img/maven_01.png differ diff --git a/assets/img/placeholder-big.jpg b/assets/img/placeholder-big.jpg index 941a04bf4bf..b5ddfb07e3b 100644 Binary files a/assets/img/placeholder-big.jpg and b/assets/img/placeholder-big.jpg differ diff --git a/assets/img/search-icon.png b/assets/img/search-icon.png new file mode 100644 index 00000000000..29f541b0889 Binary files /dev/null and b/assets/img/search-icon.png differ diff --git a/assets/img/sqld_cert.png b/assets/img/sqld_cert.png new file mode 100644 index 00000000000..3a79edfc2a0 Binary files /dev/null and b/assets/img/sqld_cert.png differ diff --git a/certificate/index.md b/certificate/index.md new file mode 100644 index 00000000000..5eafe35b9e8 --- /dev/null +++ b/certificate/index.md @@ -0,0 +1,6 @@ +--- +layout: certificate-list +title: 자격증 +excerpt: "A List of Posts" +comments: false +--- diff --git a/dest/jekyll-search.js b/dest/jekyll-search.js new file mode 100644 index 00000000000..79d07946851 --- /dev/null +++ b/dest/jekyll-search.js @@ -0,0 +1,394 @@ +(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);throw new Error("Cannot find module '"+o+"'")}var f=n[o]={exports:{}};t[o][0].call(f.exports,function(e){var n=t[o][1][e];return s(n?n:e)},f,f.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o tlen) { + return false; + } + if (qlen === tlen) { + return needle === haystack; + } + outer: for (var i = 0, j = 0; i < qlen; i++) { + var nch = needle.charCodeAt(i); + while (j < tlen) { + if (haystack.charCodeAt(j++) === nch) { + continue outer; + } + } + return false; + } + return true; +} + +module.exports = fuzzysearch; + +},{}],2:[function(require,module,exports){ +'use strict' +module.exports = { + load: load +} + +function load(location,callback){ + var xhr = getXHR() + xhr.open('GET', location, true) + xhr.onreadystatechange = createStateChangeListener(xhr, callback) + xhr.send() +} + +function createStateChangeListener(xhr, callback){ + return function(){ + if ( xhr.readyState===4 && xhr.status===200 ){ + try{ + callback(null, JSON.parse(xhr.responseText) ) + }catch(err){ + callback(err, null) + } + } + } +} + +function getXHR(){ + return (window.XMLHttpRequest) ? new XMLHttpRequest() : new ActiveXObject('Microsoft.XMLHTTP') +} + +},{}],3:[function(require,module,exports){ +'use strict' +module.exports = function OptionsValidator(params){ + if( !validateParams(params) ){ + throw new Error('-- OptionsValidator: required options missing') + } + if( !(this instanceof OptionsValidator) ){ + return new OptionsValidator(params) + } + + var requiredOptions = params.required + + this.getRequiredOptions = function(){ + return requiredOptions + } + + this.validate = function(parameters){ + var errors = [] + requiredOptions.forEach(function(requiredOptionName){ + if( parameters[requiredOptionName] === undefined ){ + errors.push(requiredOptionName) + } + }) + return errors + } + + function validateParams(params){ + if( !params ) { + return false + } + return params.required !== undefined && params.required instanceof Array + } +} +},{}],4:[function(require,module,exports){ +'use strict' +module.exports = { + put:put, + clear: clear, + get: get, + search: search, + setOptions: setOptions +} + +var FuzzySearchStrategy = require('./SearchStrategies/FuzzySearchStrategy') +var LiteralSearchStrategy = require('./SearchStrategies/LiteralSearchStrategy') + +var data = [] +var opt = {} +opt.fuzzy = false +opt.limit = 10 +opt.searchStrategy = opt.fuzzy ? FuzzySearchStrategy : LiteralSearchStrategy + + +function put(data){ + if( isObject(data) ){ + return addObject(data) + } + if( isArray(data) ){ + return addArray(data) + } + return undefined +} +function clear(){ + data.length = 0 + return data +} + +function get(){ + return data +} + + +function isObject(obj){ return !!obj && Object.prototype.toString.call(obj) === '[object Object]' } +function isArray(obj){ return !!obj && Object.prototype.toString.call(obj) === '[object Array]' } + +function addObject(_data){ + data.push(_data) + return data +} + +function addArray(_data){ + var added = [] + for (var i = 0; i < _data.length; i++){ + if( isObject(_data[i]) ){ + added.push(addObject(_data[i])) + } + } + return added +} + + + +function search(crit){ + if( !crit ){ + return [] + } + return findMatches(data,crit,opt.searchStrategy,opt) +} + +function setOptions(_opt){ + opt = _opt || {} + + opt.fuzzy = _opt.fuzzy || false + opt.limit = _opt.limit || 10 + opt.searchStrategy = _opt.fuzzy ? FuzzySearchStrategy : LiteralSearchStrategy +} + +function findMatches(data,crit,strategy,opt){ + var matches = [] + for(var i = 0; i < data.length && matches.length < opt.limit; i++) { + var match = findMatchesInObject(data[i],crit,strategy,opt) + if( match ){ + matches.push(match) + } + } + return matches +} + +function findMatchesInObject(obj,crit,strategy,opt){ + for(var key in obj) { + if( !isExcluded(obj[key], opt.exclude) && strategy.matches(obj[key], crit) ){ + return obj + } + } +} + +function isExcluded(term, excludedTerms){ + var excluded = false + excludedTerms = excludedTerms || [] + for (var i = 0; i= 0 + } +} + +},{}],7:[function(require,module,exports){ +'use strict' +module.exports = { + compile: compile, + setOptions: setOptions +} + +var options = {} +options.pattern = /\{(.*?)\}/g +options.template = '' +options.middleware = function(){} + +function setOptions(_options){ + options.pattern = _options.pattern || options.pattern + options.template = _options.template || options.template + if( typeof _options.middleware === 'function' ){ + options.middleware = _options.middleware + } +} + +function compile(data){ + return options.template.replace(options.pattern, function(match, prop) { + var value = options.middleware(prop, data[prop], options.template) + if( value !== undefined ){ + return value + } + return data[prop] || match + }) +} + +},{}],8:[function(require,module,exports){ +;(function(window, document, undefined){ + 'use strict' + + var options = { + searchInput: null, + resultsContainer: null, + json: [], + searchResultTemplate: '
  • {title}
  • ', + templateMiddleware: function(){}, + noResultsText: 'No results found', + limit: 10, + fuzzy: false, + exclude: [] + } + + var requiredOptions = ['searchInput','resultsContainer','json'] + + var templater = require('./Templater') + var repository = require('./Repository') + var jsonLoader = require('./JSONLoader') + var optionsValidator = require('./OptionsValidator')({ + required: requiredOptions + }) + var utils = require('./utils') + + /* + Public API + */ + window.SimpleJekyllSearch = function SimpleJekyllSearch(_options){ + var errors = optionsValidator.validate(_options) + if( errors.length > 0 ){ + throwError('You must specify the following required options: ' + requiredOptions) + } + + options = utils.merge(options, _options) + + templater.setOptions({ + template: options.searchResultTemplate, + middleware: options.templateMiddleware, + }) + + repository.setOptions({ + fuzzy: options.fuzzy, + limit: options.limit, + }) + + if( utils.isJSON(options.json) ){ + initWithJSON(options.json) + }else{ + initWithURL(options.json) + } + } + + // for backwards compatibility + window.SimpleJekyllSearch.init = window.SimpleJekyllSearch + + if (typeof window.SimpleJekyllSearchInit === 'function') { + window.SimpleJekyllSearchInit.call(this, window.SimpleJekyllSearch); + } + + function initWithJSON(json){ + repository.put(json) + registerInput() + } + + function initWithURL(url){ + jsonLoader.load(url, function(err,json){ + if( err ){ + throwError('failed to get JSON (' + url + ')') + } + initWithJSON(json) + }) + } + + function emptyResultsContainer(){ + options.resultsContainer.innerHTML = '' + } + + function appendToResultsContainer(text){ + options.resultsContainer.innerHTML += text + } + + function registerInput(){ + options.searchInput.addEventListener('keyup', function(e){ + emptyResultsContainer(); + var key = e.which + var query = e.target.value + if( isWhitelistedKey(key) && isValidQuery(query) ) { + render( repository.search(query) ); + } + }) + } + + function render(results) { + if( results.length === 0 ){ + return appendToResultsContainer(options.noResultsText) + } + for (var i = 0; i < results.length; i++) { + appendToResultsContainer( templater.compile(results[i]) ) + } + } + + function isValidQuery(query) { + return query && query.length > 0 + } + + function isWhitelistedKey(key) { + return [13,16,20,37,38,39,40,91].indexOf(key) === -1 + } + + function throwError(message){ throw new Error('SimpleJekyllSearch --- '+ message) } +})(window, document); + +},{"./JSONLoader":2,"./OptionsValidator":3,"./Repository":4,"./Templater":7,"./utils":9}],9:[function(require,module,exports){ +'use strict' +module.exports = { + merge: merge, + isJSON: isJSON, +} + +function merge(defaultParams, mergeParams){ + var mergedOptions = {} + for(var option in defaultParams){ + mergedOptions[option] = defaultParams[option] + if( mergeParams[option] !== undefined ){ + mergedOptions[option] = mergeParams[option] + } + } + return mergedOptions +} + +function isJSON(json){ + try{ + if( json instanceof Object && JSON.parse(JSON.stringify(json)) ){ + return true + } + return false + }catch(e){ + return false + } +} + +},{}]},{},[8]) +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9zYWlwaC9Eb2N1bWVudHMvcHJvamVjdHMvU2ltcGxlLUpla3lsbC1TZWFyY2gvbm9kZV9tb2R1bGVzL2Jyb3dzZXItcGFjay9fcHJlbHVkZS5qcyIsIi9Vc2Vycy9zYWlwaC9Eb2N1bWVudHMvcHJvamVjdHMvU2ltcGxlLUpla3lsbC1TZWFyY2gvbm9kZV9tb2R1bGVzL2Z1enp5c2VhcmNoL2luZGV4LmpzIiwiL1VzZXJzL3NhaXBoL0RvY3VtZW50cy9wcm9qZWN0cy9TaW1wbGUtSmVreWxsLVNlYXJjaC9zcmMvSlNPTkxvYWRlci5qcyIsIi9Vc2Vycy9zYWlwaC9Eb2N1bWVudHMvcHJvamVjdHMvU2ltcGxlLUpla3lsbC1TZWFyY2gvc3JjL09wdGlvbnNWYWxpZGF0b3IuanMiLCIvVXNlcnMvc2FpcGgvRG9jdW1lbnRzL3Byb2plY3RzL1NpbXBsZS1KZWt5bGwtU2VhcmNoL3NyYy9SZXBvc2l0b3J5LmpzIiwiL1VzZXJzL3NhaXBoL0RvY3VtZW50cy9wcm9qZWN0cy9TaW1wbGUtSmVreWxsLVNlYXJjaC9zcmMvU2VhcmNoU3RyYXRlZ2llcy9GdXp6eVNlYXJjaFN0cmF0ZWd5LmpzIiwiL1VzZXJzL3NhaXBoL0RvY3VtZW50cy9wcm9qZWN0cy9TaW1wbGUtSmVreWxsLVNlYXJjaC9zcmMvU2VhcmNoU3RyYXRlZ2llcy9MaXRlcmFsU2VhcmNoU3RyYXRlZ3kuanMiLCIvVXNlcnMvc2FpcGgvRG9jdW1lbnRzL3Byb2plY3RzL1NpbXBsZS1KZWt5bGwtU2VhcmNoL3NyYy9UZW1wbGF0ZXIuanMiLCIvVXNlcnMvc2FpcGgvRG9jdW1lbnRzL3Byb2plY3RzL1NpbXBsZS1KZWt5bGwtU2VhcmNoL3NyYy9mYWtlX2U1YThjNmE3LmpzIiwiL1VzZXJzL3NhaXBoL0RvY3VtZW50cy9wcm9qZWN0cy9TaW1wbGUtSmVreWxsLVNlYXJjaC9zcmMvdXRpbHMuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUNBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdkdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDVkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDWkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoSEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiZ2VuZXJhdGVkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXNDb250ZW50IjpbIihmdW5jdGlvbiBlKHQsbixyKXtmdW5jdGlvbiBzKG8sdSl7aWYoIW5bb10pe2lmKCF0W29dKXt2YXIgYT10eXBlb2YgcmVxdWlyZT09XCJmdW5jdGlvblwiJiZyZXF1aXJlO2lmKCF1JiZhKXJldHVybiBhKG8sITApO2lmKGkpcmV0dXJuIGkobywhMCk7dGhyb3cgbmV3IEVycm9yKFwiQ2Fubm90IGZpbmQgbW9kdWxlICdcIitvK1wiJ1wiKX12YXIgZj1uW29dPXtleHBvcnRzOnt9fTt0W29dWzBdLmNhbGwoZi5leHBvcnRzLGZ1bmN0aW9uKGUpe3ZhciBuPXRbb11bMV1bZV07cmV0dXJuIHMobj9uOmUpfSxmLGYuZXhwb3J0cyxlLHQsbixyKX1yZXR1cm4gbltvXS5leHBvcnRzfXZhciBpPXR5cGVvZiByZXF1aXJlPT1cImZ1bmN0aW9uXCImJnJlcXVpcmU7Zm9yKHZhciBvPTA7bzxyLmxlbmd0aDtvKyspcyhyW29dKTtyZXR1cm4gc30pIiwiJ3VzZSBzdHJpY3QnO1xuXG5mdW5jdGlvbiBmdXp6eXNlYXJjaCAobmVlZGxlLCBoYXlzdGFjaykge1xuICB2YXIgdGxlbiA9IGhheXN0YWNrLmxlbmd0aDtcbiAgdmFyIHFsZW4gPSBuZWVkbGUubGVuZ3RoO1xuICBpZiAocWxlbiA+IHRsZW4pIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgaWYgKHFsZW4gPT09IHRsZW4pIHtcbiAgICByZXR1cm4gbmVlZGxlID09PSBoYXlzdGFjaztcbiAgfVxuICBvdXRlcjogZm9yICh2YXIgaSA9IDAsIGogPSAwOyBpIDwgcWxlbjsgaSsrKSB7XG4gICAgdmFyIG5jaCA9IG5lZWRsZS5jaGFyQ29kZUF0KGkpO1xuICAgIHdoaWxlIChqIDwgdGxlbikge1xuICAgICAgaWYgKGhheXN0YWNrLmNoYXJDb2RlQXQoaisrKSA9PT0gbmNoKSB7XG4gICAgICAgIGNvbnRpbnVlIG91dGVyO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZnV6enlzZWFyY2g7XG4iLCIndXNlIHN0cmljdCdcbm1vZHVsZS5leHBvcnRzID0ge1xuICBsb2FkOiBsb2FkXG59XG5cbmZ1bmN0aW9uIGxvYWQobG9jYXRpb24sY2FsbGJhY2spe1xuICB2YXIgeGhyID0gZ2V0WEhSKClcbiAgeGhyLm9wZW4oJ0dFVCcsIGxvY2F0aW9uLCB0cnVlKVxuICB4aHIub25yZWFkeXN0YXRlY2hhbmdlID0gY3JlYXRlU3RhdGVDaGFuZ2VMaXN0ZW5lcih4aHIsIGNhbGxiYWNrKVxuICB4aHIuc2VuZCgpXG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVN0YXRlQ2hhbmdlTGlzdGVuZXIoeGhyLCBjYWxsYmFjayl7XG4gIHJldHVybiBmdW5jdGlvbigpe1xuICAgIGlmICggeGhyLnJlYWR5U3RhdGU9PT00ICYmIHhoci5zdGF0dXM9PT0yMDAgKXtcbiAgICAgIHRyeXtcbiAgICAgICAgY2FsbGJhY2sobnVsbCwgSlNPTi5wYXJzZSh4aHIucmVzcG9uc2VUZXh0KSApXG4gICAgICB9Y2F0Y2goZXJyKXtcbiAgICAgICAgY2FsbGJhY2soZXJyLCBudWxsKVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRYSFIoKXtcbiAgcmV0dXJuICh3aW5kb3cuWE1MSHR0cFJlcXVlc3QpID8gbmV3IFhNTEh0dHBSZXF1ZXN0KCkgOiBuZXcgQWN0aXZlWE9iamVjdCgnTWljcm9zb2Z0LlhNTEhUVFAnKVxufVxuIiwiJ3VzZSBzdHJpY3QnXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIE9wdGlvbnNWYWxpZGF0b3IocGFyYW1zKXtcbiAgaWYoICF2YWxpZGF0ZVBhcmFtcyhwYXJhbXMpICl7XG4gICAgdGhyb3cgbmV3IEVycm9yKCctLSBPcHRpb25zVmFsaWRhdG9yOiByZXF1aXJlZCBvcHRpb25zIG1pc3NpbmcnKVxuICB9XG4gIGlmKCAhKHRoaXMgaW5zdGFuY2VvZiBPcHRpb25zVmFsaWRhdG9yKSApe1xuICAgIHJldHVybiBuZXcgT3B0aW9uc1ZhbGlkYXRvcihwYXJhbXMpXG4gIH1cblxuICB2YXIgcmVxdWlyZWRPcHRpb25zID0gcGFyYW1zLnJlcXVpcmVkXG5cbiAgdGhpcy5nZXRSZXF1aXJlZE9wdGlvbnMgPSBmdW5jdGlvbigpe1xuICAgIHJldHVybiByZXF1aXJlZE9wdGlvbnNcbiAgfVxuXG4gIHRoaXMudmFsaWRhdGUgPSBmdW5jdGlvbihwYXJhbWV0ZXJzKXtcbiAgICB2YXIgZXJyb3JzID0gW11cbiAgICByZXF1aXJlZE9wdGlvbnMuZm9yRWFjaChmdW5jdGlvbihyZXF1aXJlZE9wdGlvbk5hbWUpe1xuICAgICAgaWYoIHBhcmFtZXRlcnNbcmVxdWlyZWRPcHRpb25OYW1lXSA9PT0gdW5kZWZpbmVkICl7XG4gICAgICAgIGVycm9ycy5wdXNoKHJlcXVpcmVkT3B0aW9uTmFtZSlcbiAgICAgIH1cbiAgICB9KVxuICAgIHJldHVybiBlcnJvcnNcbiAgfVxuXG4gIGZ1bmN0aW9uIHZhbGlkYXRlUGFyYW1zKHBhcmFtcyl7XG4gICAgaWYoICFwYXJhbXMgKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gICAgcmV0dXJuIHBhcmFtcy5yZXF1aXJlZCAhPT0gdW5kZWZpbmVkICYmIHBhcmFtcy5yZXF1aXJlZCBpbnN0YW5jZW9mIEFycmF5XG4gIH1cbn0iLCIndXNlIHN0cmljdCdcbm1vZHVsZS5leHBvcnRzID0ge1xuICBwdXQ6cHV0LFxuICBjbGVhcjogY2xlYXIsXG4gIGdldDogZ2V0LFxuICBzZWFyY2g6IHNlYXJjaCxcbiAgc2V0T3B0aW9uczogc2V0T3B0aW9uc1xufVxuXG52YXIgRnV6enlTZWFyY2hTdHJhdGVneSA9IHJlcXVpcmUoJy4vU2VhcmNoU3RyYXRlZ2llcy9GdXp6eVNlYXJjaFN0cmF0ZWd5JylcbnZhciBMaXRlcmFsU2VhcmNoU3RyYXRlZ3kgPSByZXF1aXJlKCcuL1NlYXJjaFN0cmF0ZWdpZXMvTGl0ZXJhbFNlYXJjaFN0cmF0ZWd5JylcblxudmFyIGRhdGEgPSBbXVxudmFyIG9wdCA9IHt9XG5vcHQuZnV6enkgPSBmYWxzZVxub3B0LmxpbWl0ID0gMTBcbm9wdC5zZWFyY2hTdHJhdGVneSA9IG9wdC5mdXp6eSA/IEZ1enp5U2VhcmNoU3RyYXRlZ3kgOiBMaXRlcmFsU2VhcmNoU3RyYXRlZ3lcblxuXG5mdW5jdGlvbiBwdXQoZGF0YSl7XG4gIGlmKCBpc09iamVjdChkYXRhKSApe1xuICAgIHJldHVybiBhZGRPYmplY3QoZGF0YSlcbiAgfVxuICBpZiggaXNBcnJheShkYXRhKSApe1xuICAgIHJldHVybiBhZGRBcnJheShkYXRhKVxuICB9XG4gIHJldHVybiB1bmRlZmluZWRcbn1cbmZ1bmN0aW9uIGNsZWFyKCl7XG4gIGRhdGEubGVuZ3RoID0gMFxuICByZXR1cm4gZGF0YVxufVxuXG5mdW5jdGlvbiBnZXQoKXtcbiAgcmV0dXJuIGRhdGFcbn1cblxuXG5mdW5jdGlvbiBpc09iamVjdChvYmopeyByZXR1cm4gISFvYmogJiYgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG9iaikgPT09ICdbb2JqZWN0IE9iamVjdF0nIH1cbmZ1bmN0aW9uIGlzQXJyYXkob2JqKXsgcmV0dXJuICEhb2JqICYmIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvYmopID09PSAnW29iamVjdCBBcnJheV0nIH1cblxuZnVuY3Rpb24gYWRkT2JqZWN0KF9kYXRhKXtcbiAgZGF0YS5wdXNoKF9kYXRhKVxuICByZXR1cm4gZGF0YVxufVxuXG5mdW5jdGlvbiBhZGRBcnJheShfZGF0YSl7XG4gIHZhciBhZGRlZCA9IFtdXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgX2RhdGEubGVuZ3RoOyBpKyspe1xuICAgIGlmKCBpc09iamVjdChfZGF0YVtpXSkgKXtcbiAgICAgIGFkZGVkLnB1c2goYWRkT2JqZWN0KF9kYXRhW2ldKSlcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGFkZGVkXG59XG5cblxuXG5mdW5jdGlvbiBzZWFyY2goY3JpdCl7XG4gIGlmKCAhY3JpdCApe1xuICAgIHJldHVybiBbXVxuICB9XG4gIHJldHVybiBmaW5kTWF0Y2hlcyhkYXRhLGNyaXQsb3B0LnNlYXJjaFN0cmF0ZWd5LG9wdClcbn1cblxuZnVuY3Rpb24gc2V0T3B0aW9ucyhfb3B0KXtcbiAgb3B0ID0gX29wdCB8fCB7fVxuXG4gIG9wdC5mdXp6eSA9IF9vcHQuZnV6enkgfHwgZmFsc2VcbiAgb3B0LmxpbWl0ID0gX29wdC5saW1pdCB8fCAxMFxuICBvcHQuc2VhcmNoU3RyYXRlZ3kgPSBfb3B0LmZ1enp5ID8gRnV6enlTZWFyY2hTdHJhdGVneSA6IExpdGVyYWxTZWFyY2hTdHJhdGVneVxufVxuXG5mdW5jdGlvbiBmaW5kTWF0Y2hlcyhkYXRhLGNyaXQsc3RyYXRlZ3ksb3B0KXtcbiAgdmFyIG1hdGNoZXMgPSBbXVxuICBmb3IodmFyIGkgPSAwOyBpIDwgZGF0YS5sZW5ndGggJiYgbWF0Y2hlcy5sZW5ndGggPCBvcHQubGltaXQ7IGkrKykge1xuICAgIHZhciBtYXRjaCA9IGZpbmRNYXRjaGVzSW5PYmplY3QoZGF0YVtpXSxjcml0LHN0cmF0ZWd5LG9wdClcbiAgICBpZiggbWF0Y2ggKXtcbiAgICAgIG1hdGNoZXMucHVzaChtYXRjaClcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1hdGNoZXNcbn1cblxuZnVuY3Rpb24gZmluZE1hdGNoZXNJbk9iamVjdChvYmosY3JpdCxzdHJhdGVneSxvcHQpe1xuICBmb3IodmFyIGtleSBpbiBvYmopIHtcbiAgICBpZiggIWlzRXhjbHVkZWQob2JqW2tleV0sIG9wdC5leGNsdWRlKSAmJiBzdHJhdGVneS5tYXRjaGVzKG9ialtrZXldLCBjcml0KSApe1xuICAgICAgcmV0dXJuIG9ialxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBpc0V4Y2x1ZGVkKHRlcm0sIGV4Y2x1ZGVkVGVybXMpe1xuICB2YXIgZXhjbHVkZWQgPSBmYWxzZVxuICBleGNsdWRlZFRlcm1zID0gZXhjbHVkZWRUZXJtcyB8fCBbXVxuICBmb3IgKHZhciBpID0gMDsgaTxleGNsdWRlZFRlcm1zLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGV4Y2x1ZGVkVGVybSA9IGV4Y2x1ZGVkVGVybXNbaV1cbiAgICBpZiggIWV4Y2x1ZGVkICYmIG5ldyBSZWdFeHAodGVybSkudGVzdChleGNsdWRlZFRlcm0pICl7XG4gICAgICBleGNsdWRlZCA9IHRydWVcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGV4Y2x1ZGVkXG59XG4iLCIndXNlIHN0cmljdCdcbnZhciBmdXp6eXNlYXJjaCA9IHJlcXVpcmUoJ2Z1enp5c2VhcmNoJylcblxubW9kdWxlLmV4cG9ydHMgPSBuZXcgRnV6enlTZWFyY2hTdHJhdGVneSgpXG5cbmZ1bmN0aW9uIEZ1enp5U2VhcmNoU3RyYXRlZ3koKXtcbiAgdGhpcy5tYXRjaGVzID0gZnVuY3Rpb24oc3RyaW5nLCBjcml0KXtcbiAgICByZXR1cm4gZnV6enlzZWFyY2goY3JpdCwgc3RyaW5nKVxuICB9XG59XG4iLCIndXNlIHN0cmljdCdcbm1vZHVsZS5leHBvcnRzID0gbmV3IExpdGVyYWxTZWFyY2hTdHJhdGVneSgpXG5cbmZ1bmN0aW9uIExpdGVyYWxTZWFyY2hTdHJhdGVneSgpe1xuICB0aGlzLm1hdGNoZXMgPSBmdW5jdGlvbihzdHJpbmcsY3JpdCl7XG4gICAgaWYoIHR5cGVvZiBzdHJpbmcgIT09ICdzdHJpbmcnICl7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gICAgc3RyaW5nID0gc3RyaW5nLnRyaW0oKVxuICAgIHJldHVybiBzdHJpbmcudG9Mb3dlckNhc2UoKS5pbmRleE9mKGNyaXQudG9Mb3dlckNhc2UoKSkgPj0gMFxuICB9XG59XG4iLCIndXNlIHN0cmljdCdcbm1vZHVsZS5leHBvcnRzID0ge1xuICBjb21waWxlOiBjb21waWxlLFxuICBzZXRPcHRpb25zOiBzZXRPcHRpb25zXG59XG5cbnZhciBvcHRpb25zID0ge31cbm9wdGlvbnMucGF0dGVybiA9IC9cXHsoLio/KVxcfS9nXG5vcHRpb25zLnRlbXBsYXRlID0gJydcbm9wdGlvbnMubWlkZGxld2FyZSA9IGZ1bmN0aW9uKCl7fVxuXG5mdW5jdGlvbiBzZXRPcHRpb25zKF9vcHRpb25zKXtcbiAgb3B0aW9ucy5wYXR0ZXJuID0gX29wdGlvbnMucGF0dGVybiB8fCBvcHRpb25zLnBhdHRlcm5cbiAgb3B0aW9ucy50ZW1wbGF0ZSA9IF9vcHRpb25zLnRlbXBsYXRlIHx8IG9wdGlvbnMudGVtcGxhdGVcbiAgaWYoIHR5cGVvZiBfb3B0aW9ucy5taWRkbGV3YXJlID09PSAnZnVuY3Rpb24nICl7XG4gICAgb3B0aW9ucy5taWRkbGV3YXJlID0gX29wdGlvbnMubWlkZGxld2FyZVxuICB9XG59XG5cbmZ1bmN0aW9uIGNvbXBpbGUoZGF0YSl7XG4gIHJldHVybiBvcHRpb25zLnRlbXBsYXRlLnJlcGxhY2Uob3B0aW9ucy5wYXR0ZXJuLCBmdW5jdGlvbihtYXRjaCwgcHJvcCkge1xuICAgIHZhciB2YWx1ZSA9IG9wdGlvbnMubWlkZGxld2FyZShwcm9wLCBkYXRhW3Byb3BdLCBvcHRpb25zLnRlbXBsYXRlKVxuICAgIGlmKCB2YWx1ZSAhPT0gdW5kZWZpbmVkICl7XG4gICAgICByZXR1cm4gdmFsdWVcbiAgICB9XG4gICAgcmV0dXJuIGRhdGFbcHJvcF0gfHwgbWF0Y2hcbiAgfSlcbn1cbiIsIjsoZnVuY3Rpb24od2luZG93LCBkb2N1bWVudCwgdW5kZWZpbmVkKXtcbiAgJ3VzZSBzdHJpY3QnXG5cbiAgdmFyIG9wdGlvbnMgPSB7XG4gICAgc2VhcmNoSW5wdXQ6IG51bGwsXG4gICAgcmVzdWx0c0NvbnRhaW5lcjogbnVsbCxcbiAgICBqc29uOiBbXSxcbiAgICBzZWFyY2hSZXN1bHRUZW1wbGF0ZTogJzxsaT48YSBocmVmPVwie3VybH1cIiB0aXRsZT1cIntkZXNjfVwiPnt0aXRsZX08L2E+PC9saT4nLFxuICAgIHRlbXBsYXRlTWlkZGxld2FyZTogZnVuY3Rpb24oKXt9LFxuICAgIG5vUmVzdWx0c1RleHQ6ICdObyByZXN1bHRzIGZvdW5kJyxcbiAgICBsaW1pdDogMTAsXG4gICAgZnV6enk6IGZhbHNlLFxuICAgIGV4Y2x1ZGU6IFtdXG4gIH1cblxuICB2YXIgcmVxdWlyZWRPcHRpb25zID0gWydzZWFyY2hJbnB1dCcsJ3Jlc3VsdHNDb250YWluZXInLCdqc29uJ11cblxuICB2YXIgdGVtcGxhdGVyID0gcmVxdWlyZSgnLi9UZW1wbGF0ZXInKVxuICB2YXIgcmVwb3NpdG9yeSA9IHJlcXVpcmUoJy4vUmVwb3NpdG9yeScpXG4gIHZhciBqc29uTG9hZGVyID0gcmVxdWlyZSgnLi9KU09OTG9hZGVyJylcbiAgdmFyIG9wdGlvbnNWYWxpZGF0b3IgPSByZXF1aXJlKCcuL09wdGlvbnNWYWxpZGF0b3InKSh7XG4gICAgcmVxdWlyZWQ6IHJlcXVpcmVkT3B0aW9uc1xuICB9KVxuICB2YXIgdXRpbHMgPSByZXF1aXJlKCcuL3V0aWxzJylcblxuICAvKlxuICAgIFB1YmxpYyBBUElcbiAgKi9cbiAgd2luZG93LlNpbXBsZUpla3lsbFNlYXJjaCA9IGZ1bmN0aW9uIFNpbXBsZUpla3lsbFNlYXJjaChfb3B0aW9ucyl7XG4gICAgdmFyIGVycm9ycyA9IG9wdGlvbnNWYWxpZGF0b3IudmFsaWRhdGUoX29wdGlvbnMpXG4gICAgaWYoIGVycm9ycy5sZW5ndGggPiAwICl7XG4gICAgICB0aHJvd0Vycm9yKCdZb3UgbXVzdCBzcGVjaWZ5IHRoZSBmb2xsb3dpbmcgcmVxdWlyZWQgb3B0aW9uczogJyArIHJlcXVpcmVkT3B0aW9ucylcbiAgICB9XG5cbiAgICBvcHRpb25zID0gdXRpbHMubWVyZ2Uob3B0aW9ucywgX29wdGlvbnMpXG5cbiAgICB0ZW1wbGF0ZXIuc2V0T3B0aW9ucyh7XG4gICAgICB0ZW1wbGF0ZTogb3B0aW9ucy5zZWFyY2hSZXN1bHRUZW1wbGF0ZSxcbiAgICAgIG1pZGRsZXdhcmU6IG9wdGlvbnMudGVtcGxhdGVNaWRkbGV3YXJlLFxuICAgIH0pXG5cbiAgICByZXBvc2l0b3J5LnNldE9wdGlvbnMoe1xuICAgICAgZnV6enk6IG9wdGlvbnMuZnV6enksXG4gICAgICBsaW1pdDogb3B0aW9ucy5saW1pdCxcbiAgICB9KVxuXG4gICAgaWYoIHV0aWxzLmlzSlNPTihvcHRpb25zLmpzb24pICl7XG4gICAgICBpbml0V2l0aEpTT04ob3B0aW9ucy5qc29uKVxuICAgIH1lbHNle1xuICAgICAgaW5pdFdpdGhVUkwob3B0aW9ucy5qc29uKVxuICAgIH1cbiAgfVxuXG4gIC8vIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eVxuICB3aW5kb3cuU2ltcGxlSmVreWxsU2VhcmNoLmluaXQgPSB3aW5kb3cuU2ltcGxlSmVreWxsU2VhcmNoXG4gIFxuICBpZiAodHlwZW9mIHdpbmRvdy5TaW1wbGVKZWt5bGxTZWFyY2hJbml0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgd2luZG93LlNpbXBsZUpla3lsbFNlYXJjaEluaXQuY2FsbCh0aGlzLCB3aW5kb3cuU2ltcGxlSmVreWxsU2VhcmNoKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGluaXRXaXRoSlNPTihqc29uKXtcbiAgICByZXBvc2l0b3J5LnB1dChqc29uKVxuICAgIHJlZ2lzdGVySW5wdXQoKVxuICB9XG5cbiAgZnVuY3Rpb24gaW5pdFdpdGhVUkwodXJsKXtcbiAgICBqc29uTG9hZGVyLmxvYWQodXJsLCBmdW5jdGlvbihlcnIsanNvbil7XG4gICAgICBpZiggZXJyICl7XG4gICAgICAgIHRocm93RXJyb3IoJ2ZhaWxlZCB0byBnZXQgSlNPTiAoJyArIHVybCArICcpJylcbiAgICAgIH1cbiAgICAgIGluaXRXaXRoSlNPTihqc29uKVxuICAgIH0pXG4gIH1cblxuICBmdW5jdGlvbiBlbXB0eVJlc3VsdHNDb250YWluZXIoKXtcbiAgICBvcHRpb25zLnJlc3VsdHNDb250YWluZXIuaW5uZXJIVE1MID0gJydcbiAgfVxuXG4gIGZ1bmN0aW9uIGFwcGVuZFRvUmVzdWx0c0NvbnRhaW5lcih0ZXh0KXtcbiAgICBvcHRpb25zLnJlc3VsdHNDb250YWluZXIuaW5uZXJIVE1MICs9IHRleHRcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlZ2lzdGVySW5wdXQoKXtcbiAgICBvcHRpb25zLnNlYXJjaElucHV0LmFkZEV2ZW50TGlzdGVuZXIoJ2tleXVwJywgZnVuY3Rpb24oZSl7XG4gICAgICBlbXB0eVJlc3VsdHNDb250YWluZXIoKTtcbiAgICAgIHZhciBrZXkgPSBlLndoaWNoXG4gICAgICB2YXIgcXVlcnkgPSBlLnRhcmdldC52YWx1ZVxuICAgICAgaWYoIGlzV2hpdGVsaXN0ZWRLZXkoa2V5KSAmJiBpc1ZhbGlkUXVlcnkocXVlcnkpICkge1xuICAgICAgICByZW5kZXIoIHJlcG9zaXRvcnkuc2VhcmNoKHF1ZXJ5KSApO1xuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICBmdW5jdGlvbiByZW5kZXIocmVzdWx0cykge1xuICAgIGlmKCByZXN1bHRzLmxlbmd0aCA9PT0gMCApe1xuICAgICAgcmV0dXJuIGFwcGVuZFRvUmVzdWx0c0NvbnRhaW5lcihvcHRpb25zLm5vUmVzdWx0c1RleHQpXG4gICAgfVxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmVzdWx0cy5sZW5ndGg7IGkrKykge1xuICAgICAgYXBwZW5kVG9SZXN1bHRzQ29udGFpbmVyKCB0ZW1wbGF0ZXIuY29tcGlsZShyZXN1bHRzW2ldKSApXG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gaXNWYWxpZFF1ZXJ5KHF1ZXJ5KSB7XG4gICAgcmV0dXJuIHF1ZXJ5ICYmIHF1ZXJ5Lmxlbmd0aCA+IDBcbiAgfVxuXG4gIGZ1bmN0aW9uIGlzV2hpdGVsaXN0ZWRLZXkoa2V5KSB7XG4gICAgcmV0dXJuIFsxMywxNiwyMCwzNywzOCwzOSw0MCw5MV0uaW5kZXhPZihrZXkpID09PSAtMVxuICB9XG5cbiAgZnVuY3Rpb24gdGhyb3dFcnJvcihtZXNzYWdlKXsgdGhyb3cgbmV3IEVycm9yKCdTaW1wbGVKZWt5bGxTZWFyY2ggLS0tICcrIG1lc3NhZ2UpIH1cbn0pKHdpbmRvdywgZG9jdW1lbnQpO1xuIiwiJ3VzZSBzdHJpY3QnXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgbWVyZ2U6IG1lcmdlLFxuICBpc0pTT046IGlzSlNPTixcbn1cblxuZnVuY3Rpb24gbWVyZ2UoZGVmYXVsdFBhcmFtcywgbWVyZ2VQYXJhbXMpe1xuICB2YXIgbWVyZ2VkT3B0aW9ucyA9IHt9XG4gIGZvcih2YXIgb3B0aW9uIGluIGRlZmF1bHRQYXJhbXMpe1xuICAgIG1lcmdlZE9wdGlvbnNbb3B0aW9uXSA9IGRlZmF1bHRQYXJhbXNbb3B0aW9uXVxuICAgIGlmKCBtZXJnZVBhcmFtc1tvcHRpb25dICE9PSB1bmRlZmluZWQgKXtcbiAgICAgIG1lcmdlZE9wdGlvbnNbb3B0aW9uXSA9IG1lcmdlUGFyYW1zW29wdGlvbl1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1lcmdlZE9wdGlvbnNcbn1cblxuZnVuY3Rpb24gaXNKU09OKGpzb24pe1xuICB0cnl7XG4gICAgaWYoIGpzb24gaW5zdGFuY2VvZiBPYmplY3QgJiYgSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShqc29uKSkgKXtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuICAgIHJldHVybiBmYWxzZVxuICB9Y2F0Y2goZSl7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbn1cbiJdfQ== \ No newline at end of file diff --git a/dest/jekyll-search.min.js b/dest/jekyll-search.min.js new file mode 100644 index 00000000000..ab653bf8d28 --- /dev/null +++ b/dest/jekyll-search.min.js @@ -0,0 +1 @@ +!function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a="function"==typeof require&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);throw new Error("Cannot find module '"+o+"'")}var f=n[o]={exports:{}};t[o][0].call(f.exports,function(e){var n=t[o][1][e];return s(n?n:e)},f,f.exports,e,t,n,r)}return n[o].exports}for(var i="function"==typeof require&&require,o=0;otlen)return!1;if(qlen===tlen)return needle===haystack;outer:for(var i=0,j=0;i=0)}}module.exports=new LiteralSearchStrategy},{}],7:[function(require,module,exports){"use strict";function setOptions(_options){options.pattern=_options.pattern||options.pattern,options.template=_options.template||options.template,"function"==typeof _options.middleware&&(options.middleware=_options.middleware)}function compile(data){return options.template.replace(options.pattern,function(match,prop){var value=options.middleware(prop,data[prop],options.template);return void 0!==value?value:data[prop]||match})}module.exports={compile:compile,setOptions:setOptions};var options={};options.pattern=/\{(.*?)\}/g,options.template="",options.middleware=function(){}},{}],8:[function(require,module,exports){!function(window,document,undefined){"use strict";function initWithJSON(json){repository.put(json),registerInput()}function initWithURL(url){jsonLoader.load(url,function(err,json){err&&throwError("failed to get JSON ("+url+")"),initWithJSON(json)})}function emptyResultsContainer(){options.resultsContainer.innerHTML=""}function appendToResultsContainer(text){options.resultsContainer.innerHTML+=text}function registerInput(){options.searchInput.addEventListener("keyup",function(e){emptyResultsContainer();var key=e.which,query=e.target.value;isWhitelistedKey(key)&&isValidQuery(query)&&render(repository.search(query))})}function render(results){if(0===results.length)return appendToResultsContainer(options.noResultsText);for(var i=0;i0}function isWhitelistedKey(key){return[13,16,20,37,38,39,40,91].indexOf(key)===-1}function throwError(message){throw new Error("SimpleJekyllSearch --- "+message)}var options={searchInput:null,resultsContainer:null,json:[],searchResultTemplate:'
  • {title}
  • ',templateMiddleware:function(){},noResultsText:"No results found",limit:10,fuzzy:!1,exclude:[]},requiredOptions=["searchInput","resultsContainer","json"],templater=require("./Templater"),repository=require("./Repository"),jsonLoader=require("./JSONLoader"),optionsValidator=require("./OptionsValidator")({required:requiredOptions}),utils=require("./utils");window.SimpleJekyllSearch=function(_options){var errors=optionsValidator.validate(_options);errors.length>0&&throwError("You must specify the following required options: "+requiredOptions),options=utils.merge(options,_options),templater.setOptions({template:options.searchResultTemplate,middleware:options.templateMiddleware}),repository.setOptions({fuzzy:options.fuzzy,limit:options.limit}),utils.isJSON(options.json)?initWithJSON(options.json):initWithURL(options.json)},window.SimpleJekyllSearch.init=window.SimpleJekyllSearch,"function"==typeof window.SimpleJekyllSearchInit&&window.SimpleJekyllSearchInit.call(this,window.SimpleJekyllSearch)}(window,document)},{"./JSONLoader":2,"./OptionsValidator":3,"./Repository":4,"./Templater":7,"./utils":9}],9:[function(require,module,exports){"use strict";function merge(defaultParams,mergeParams){var mergedOptions={};for(var option in defaultParams)mergedOptions[option]=defaultParams[option],void 0!==mergeParams[option]&&(mergedOptions[option]=mergeParams[option]);return mergedOptions}function isJSON(json){try{return!!(json instanceof Object&&JSON.parse(JSON.stringify(json)))}catch(e){return!1}}module.exports={merge:merge,isJSON:isJSON}},{}]},{},[8]); \ No newline at end of file diff --git a/java/index.md b/java/index.md new file mode 100644 index 00000000000..603224fcc90 --- /dev/null +++ b/java/index.md @@ -0,0 +1,6 @@ +--- +layout: java-list +title: 자바 +excerpt: "A List of Posts" +comments: false +--- diff --git a/search.html b/search.html new file mode 100644 index 00000000000..397066017d1 --- /dev/null +++ b/search.html @@ -0,0 +1,35 @@ +--- +layout: default +page_title: Search +permalink: /search/ +--- +
    +

    + +
      + +
    +
    + + +
    + +
      +
      + + + + + + diff --git a/search2.json b/search2.json new file mode 100644 index 00000000000..1e72f0ec558 --- /dev/null +++ b/search2.json @@ -0,0 +1,28 @@ +--- +layout: null +--- +[ + {% for post in site.posts %} + { + "title" : "{{ post.title | escape }}", + "category" : "{{ post.category }}", + "tags" : "{{ post.tags | join: ', ' }}", + "url" : "{{ site.baseurl }}{{ post.url }}", + "date" : "{{ post.date }}", + "content" : {{ page.content | jsonify }} + } {% unless forloop.last %},{% endunless %} + {% endfor %} + , + {% for page in site.pages %} + { + {% if page.title != nil %} + "title" : "{{ page.title | escape }}", + "category" : "{{ page.category }}", + "tags" : "{{ page.tags | join: ', ' }}", + "url" : "{{ site.baseurl }}{{ page.url }}", + "date" : "{{ page.date }}", + "content" : {{ page.content | jsonify }} + {% endif %} + } {% unless forloop.last %},{% endunless %} + {% endfor %} +]