<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>Pig_Developer.log</title>
        <link>https://velog.io/</link>
        <description>메리아빠, 먹다가 죽어도 되는 개발자.(살뺴자....)</description>
        <lastBuildDate>Thu, 08 Jun 2023 06:01:09 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>Pig_Developer.log</title>
            <url>https://velog.velcdn.com/images/naskim_311/profile/65f89efa-a947-4b8d-a7fe-153a9420d326/image.png</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. Pig_Developer.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/naskim_311" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[ES6 <array method>]]></title>
            <link>https://velog.io/@naskim_311/ES6-array-method</link>
            <guid>https://velog.io/@naskim_311/ES6-array-method</guid>
            <pubDate>Thu, 08 Jun 2023 06:01:09 GMT</pubDate>
            <description><![CDATA[<p><strong>{ Array.of( ) }</strong>
: 전달된 인수를 요소로 갖는 배열을 생성한다.</p>
<pre><code class="language-javascript">ex)
    // 전달된 숫자가 1개이고 숫자이더라도 인수를 요소로 갖는 배열을 생성한다.
    Array.of(3);    // [3]

    Array.of(3, 6, 9);    // [3, 6, 9]

    Array.of(&#39;Java&#39;);    // [&#39;Java&#39;]

    Array.of(1, 4, 6, true, &quot;yellow&quot;);    // [1, 4, 6, true, &quot;yellow&quot;]</code></pre>
<hr>
<p><strong>{ Array.from( ) }</strong>
: 유사 배열 객체 또는 이터러블 객체를 인수로 전달받아 배열로 변환하여 반환한다.</p>
<pre><code class="language-javascript">ex)
    // 유사 배열 객체를 변환하여 배열을 생성한다.
    Array.from( {length: 3, 0: &#39;a&#39;, 1: &#39;b&#39;, 2: &#39;c&#39;} );    // [&quot;a&quot;, &quot;b&quot;, &quot;c&quot;]

    // 이터러블을 변환하여 배열을 생성한다. 문자열은 이터러블이다.
    Array.from(&#39;Java&#39;);    // [&quot;J&quot;, &quot;a&quot;, &quot;v&quot;, &quot;a&quot;]

    // html 태그를 배열형태로 바꾸어 사용할 수 있다.
    &lt;button class=&quot;btn&quot;&gt;1&lt;/button&gt;
    &lt;button class=&quot;btn&quot;&gt;2&lt;/button&gt;
    &lt;button class=&quot;btn&quot;&gt;3&lt;/button&gt;
    &lt;button class=&quot;btn&quot;&gt;4&lt;/button&gt;

    const buttons = document.getElementsByClassName(&quot;btn&quot;);

    const ar = Array.from(buttons);    // ar는 배열형태의 데이터이다.

    ar.forEach(button =&gt; {
        button.addEventListener(&quot;click&quot;, () =&gt; console.log(&quot;i ve been clicked&quot;))
    })</code></pre>
]]></description>
        </item>
        <item>
            <title><![CDATA[ES6 <String Method>]]></title>
            <link>https://velog.io/@naskim_311/ES6-String-Method</link>
            <guid>https://velog.io/@naskim_311/ES6-String-Method</guid>
            <pubDate>Thu, 08 Jun 2023 04:41:44 GMT</pubDate>
            <description><![CDATA[<p><strong>{ includes( ) }</strong>
: (문자열or배열)이 특정 요소를 포함하고 있는지 판별한다.</p>
<pre><code class="language-javascript">1) 문자열

ex)
    let isEmail = email =&gt; email.includes(&quot;@&quot;);

    console.log(isEmail(&quot;abcd123@naver.com&quot;));    // true
    console.log(isEmail(&quot;hello&quot;));    // false

-----------------------------------------------------------------------------------------------------

2) 배열

ex)
    const pets = [&#39;cat&#39; , &#39;dog&#39; , &#39;pig&#39;];

    console.log(pets.includes(&#39;cat&#39;));    // true
    console.log(pets.includes(&#39;me&#39;));    // false</code></pre>
<hr>
<p><strong>{ repeat( ) }</strong>
: 문자열을 주어진 횟수만큼 반복해 붙인 새로운 문자열을 반환한다.</p>
<pre><code class="language-javascript">ex)
    &quot;************1234&quot; 만들기

    const CCNumber = &quot;1234&quot;;
    const displayNumber = `${&quot;*&quot;.repeat(12)}${CCNumber}`;

    console.log(displayNumber);    // &quot;************1234
</code></pre>
<hr>
<p><strong>{ startsWith( ) }</strong>
: 어떤 문자열이 특정 문자로 시작하는지 확인하여 결과를 true or false로 반환한다.</p>
<pre><code class="language-javascript">ex)
    const name = &quot;Mr.pig&quot;;

    console.log(name.startWith(&quot;Mr&quot;));    // true
    console.log(name.startWith(&quot;pig&quot;));    // false</code></pre>
<hr>
<p><strong>{ endsWith( ) }</strong>
: 어떤 문자열에서 특정 문자열로 끝나는지를 확인할 수 있으며, 그 결과를 true or false로 반환한다.</p>
<pre><code class="language-javascript">ex)
    const name = &quot;Mr.pig&quot;;

    console.log(name.startWith(&quot;Mr&quot;));    // flase
    console.log(name.startWith(&quot;pig&quot;));    // true</code></pre>
<hr>
]]></description>
        </item>
        <item>
            <title><![CDATA[날짜 데이터를 Date의 형식으로 포맷해서 사용하는 이유]]></title>
            <link>https://velog.io/@naskim_311/%EB%82%A0%EC%A7%9C-%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%A5%BC-Date%EC%9D%98-%ED%98%95%EC%8B%9D%EC%9C%BC%EB%A1%9C-%ED%8F%AC%EB%A7%B7%ED%95%B4%EC%84%9C-%EC%82%AC%EC%9A%A9%ED%95%98%EB%8A%94-%EC%9D%B4%EC%9C%A0</link>
            <guid>https://velog.io/@naskim_311/%EB%82%A0%EC%A7%9C-%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%A5%BC-Date%EC%9D%98-%ED%98%95%EC%8B%9D%EC%9C%BC%EB%A1%9C-%ED%8F%AC%EB%A7%B7%ED%95%B4%EC%84%9C-%EC%82%AC%EC%9A%A9%ED%95%98%EB%8A%94-%EC%9D%B4%EC%9C%A0</guid>
            <pubDate>Tue, 30 May 2023 07:39:26 GMT</pubDate>
            <description><![CDATA[<p>날짜,시간은 지구가 둥글기 떄문에 현재 위치에 따라 달라진다.
따라서 각국or각도시마다 접근하는 날짜,시간이 다르기 때문에 영국의 그리니치 천문대를 기준으로 하는 협정 세계시(UTC)를 기준으로 데이터를 다루기 위해 string형식이 아닌 Date형식으로 사용하는 것이다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[ES6 <default value>]]></title>
            <link>https://velog.io/@naskim_311/ES6-default-value</link>
            <guid>https://velog.io/@naskim_311/ES6-default-value</guid>
            <pubDate>Tue, 30 May 2023 06:29:00 GMT</pubDate>
            <description><![CDATA[<p><strong>{ defalut value를 설정 안한 경우 }</strong></p>
<pre><code class="language-javascript">fundtion sayHi(aName) {
    return &quot;Hello &quot; + aName;
}

console.log(sayHi(&quot;nas&quot;)); // &quot;Hello nas&quot;
console.log(sayHi()); // &quot;Hello undefined&quot;</code></pre>
<p>=&gt; 두번째 콘솔값처럼 기본 값이 없을 경우를 대비해 default value값을 설정하는 법이 있다.</p>
<hr>
<p><strong>{ defalut value를 설정 한 경우 }</strong></p>
<pre><code class="language-javascript">const sayHi = (aName = &quot;pig&quot;) =&gt; &quot;Hello &quot; + aName;

console.log(sayHi(&quot;nas&quot;)); // &quot;Hello nas&quot;
console.log(sayHi()); // &quot;Hello pig&quot;</code></pre>
<p>=&gt; arg에 &#39;=&#39;를 사용하여 default value를 설정해주면 된다.
또한 default value는 어떠한 타입의 값으로도 올 수 있다. ( number타입, object타입.. 등등 / 변수를 만들어서 사용 가능하다. )</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[ES6 <array function helper method>]]></title>
            <link>https://velog.io/@naskim_311/ES6-array-function-helper-method</link>
            <guid>https://velog.io/@naskim_311/ES6-array-function-helper-method</guid>
            <pubDate>Tue, 30 May 2023 06:12:33 GMT</pubDate>
            <description><![CDATA[<p><strong>{ map( ) }</strong>
: 주어진 함수를 사용하여 원래 배열의 각 요소에 대해 새로운 배열을 생성한다. 
(기존 배열 변경X , 새로운 배열 반환 O)</p>
<pre><code class="language-javascript">배열.map((요소, 인덱스, 배열) =&gt; {
  // 변환 작업을 수행하는 로직
  // 변환된 결과로 새로운 배열 생성
});

ex)
  const numbers = [1, 2, 3, 4, 5];

  const doubledNumbers = numbers.map((num) =&gt; num * 2);
  console.log(doubledNumbers); // [2, 4, 6, 8, 10]</code></pre>
<hr>
<p><strong>{ filter( ) }</strong>
: 주어진 함수(조건식)의 조건을 만족하는 요소들로 이루어진 새로운 배열을 생성한다.</p>
<pre><code class="language-javascript">배열.filter((요소, 인덱스, 배열) =&gt; {
  // 조건을 확인하는 로직
  // 조건을 만족하는 요소들로 새로운 배열 생성
});

ex)
  const numbers = [1, 2, 3, 4, 5];

  const evenNumbers = numbers.filter((num) =&gt; num % 2 === 0);
  console.log(evenNumbers); // [2, 4]</code></pre>
<hr>
<p><strong>{ forEach( ) }</strong>
: 배열의 각 요소에 대해 주어진 함수를 실행한다. 
반복문과 유사한 역할을 하며, 주로 배열의 요소를 순회하면서 작업을 수행할 때 사용된다.</p>
<pre><code class="language-javascript">배열.forEach((요소, 인덱스, 배열) =&gt; {
  // 작업을 수행하는 로직
});

ex)
  const numbers = [1, 2, 3, 4, 5];

  numbers.forEach((num) =&gt; console.log(num + 1));
  // 2
  // 3
  // 4
  // 5
  // 6</code></pre>
<hr>
<p><strong>{ find( ) }</strong>
: 주어진 조건을 만족하는 첫 번째 요소를 반환하는 배열함수이다.
조건을 만족하는 요소가 없을 시, undefined를 반환한다.</p>
<pre><code class="language-javascript">배열.find((요소, 인덱스, 배열) =&gt; {
  // 조건을 확인하는 로직
});

ex)
  const numbers = [1, 2, 3, 4, 5];

  const foundNumber = numbers.find((num) =&gt; num &gt; 3);
  console.log(foundNumber); // 4</code></pre>
<hr>
<p><strong>{ reduce( ) }</strong>
: 배열의 각 요소에 대해 주어진 함수를 실행하고, 하나의 결과값(최종 결과값)을 반환한다.</p>
<pre><code class="language-javascript">배열.reduce((누적값, 현재값, 인덱스, 배열) =&gt; {
  // 계산 논리
  return 새로운_누적값;
}, 초기값);

ex)
  const numbers = [1, 2, 3, 4, 5];

  const sum = numbers.reduce((accumulator, currentValue) =&gt; accumulator + currentValue, 0);
  console.log(sum); // 15</code></pre>
<p>-&gt; 초기값을 지정하지 않을 경우, 첫 번째 요소가 초기값으로 사용되며 두 번째 요소부터 계산이 시작됩니다.</p>
<hr>
<p><strong>{ every( ) }</strong>
: 배열의 <strong>모든 요소</strong>가 주어진 조건을 만족하는지를 확인하는 배열함수이다.
이 메소드는 <strong>배열의 모든 요소</strong>가 주어진 함수의 조건을 만족하면 true를 반환,
그렇지 않으면 false를 반환한다.</p>
<pre><code class="language-javascript">배열.every((요소, 인덱스, 배열) =&gt; {
  // 조건을 확인하는 로직
  // 모든 요소가 조건을 만족하는지 여부를 반환
});

ex)
  const numbers = [1, 2, 3, 4, 5];

  const allPositive = numbers.every((num) =&gt; num &gt; 0); // 모든 요소가 양수인지 확인하는 조건
  console.log(allPositive); // true

  const allLargerNumTwo = numbers.every((num) =&gt; num &gt; 2); // 모든 요소가 숫자&#39;2&#39;보다 큰지 확인하는 조건 
  console.log(allLargerNumTwo); // false
</code></pre>
<hr>
<p><strong>{ some( ) }</strong>
: 배열의 <strong>요소 중 하나 이상</strong>이 주어진 조건을 만족하는지를 확인하는 배열함수이다.
이 메소드는 <strong>배열의 요소 중 하나</strong>라도 주어진 함수의 조건을 만족하면 true를 반환,
그렇지 않으면 false를 반환한다.</p>
<pre><code class="language-javascript">배열.some((요소, 인덱스, 배열) =&gt; {
  // 조건을 확인하는 로직
  // 하나 이상의 요소가 조건을 만족하는지 여부를 반환
});

ex)
  const numbers = [1, 2, 3, 4, 5];

  const hasNegative = numbers.some((num) =&gt; num &lt; 0); // 요소 중 음수가 있는지 확인하는 조건
  console.log(hasNegative); // false

  const allLargerNumTwo = numbers.every((num) =&gt; num &gt; 2); // 요소 중 숫자&#39;2&#39;보다 큰 요소가 있는지 확인하는 조건
  console.log(allLargerNumTwo); // true    
</code></pre>
<hr>
]]></description>
        </item>
        <item>
            <title><![CDATA[ES6 <arrow function 주의사항>]]></title>
            <link>https://velog.io/@naskim_311/ES6-arrow-function-%EC%A3%BC%EC%9D%98%EC%82%AC%ED%95%AD</link>
            <guid>https://velog.io/@naskim_311/ES6-arrow-function-%EC%A3%BC%EC%9D%98%EC%82%AC%ED%95%AD</guid>
            <pubDate>Tue, 30 May 2023 04:32:07 GMT</pubDate>
            <description><![CDATA[<ul>
<li><p>arrow function 내부에서는 eventListener의 타겟을 this로 감지할 수 없으며, 
this는 window를 가리키고 있음.</p>
</li>
<li><p>object 내부에 선언된 함수도 마찬가지이므로, 
object 내부의 property를 핸들링하려면 funxtion으로 선언 필요.</p>
</li>
</ul>
<p>❇ arrow function을 사용하면서 eventListener를 등록해야 할 때에는 
event를 &#39;(event) =&gt;&#39; 형태로 인자로 넘겨주는 방식의 대안이 존재함.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[ES6 <Block Scope>]]></title>
            <link>https://velog.io/@naskim_311/ES6-Block-Scope</link>
            <guid>https://velog.io/@naskim_311/ES6-Block-Scope</guid>
            <pubDate>Tue, 30 May 2023 02:25:23 GMT</pubDate>
            <description><![CDATA[<p><strong>{ Scope }</strong>
: 컨테이너 또는 바구니 역할을 하는 일종의 버블(블록)이다.
이 버블(블록)이 접근가능한지 아닌지를 감지해준다.</p>
<p><strong>{ 버블(블록) }</strong>
: 블록은 &#39;{ }&#39;로 감싸져 있는 형태를 말하는데,
let과 const는 block scope를 가지며,
var는 function scope를 가진다.</p>
<p>=&gt; let과 const는 외부로부터 내부로 접근하는 것을 완전히 차단하고 보호함.
=&gt; var는 함수 내에서는 외부의 접근을 차단하지만, [ if , else , try ~ catch , for ] 등을 사용할 때는 접근이 가능하다.</p>
<p>❇ 물론 내부에서는 외부에 접근하여 값을 참조할 수 있다. ( 밖에서 안으로는 접근x )</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[ES6 <var를 사용하지 않는 이유>]]></title>
            <link>https://velog.io/@naskim_311/ES6-var%EB%A5%BC-%EC%82%AC%EC%9A%A9%ED%95%98%EC%A7%80-%EC%95%8A%EB%8A%94-%EC%9D%B4%EC%9C%A0</link>
            <guid>https://velog.io/@naskim_311/ES6-var%EB%A5%BC-%EC%82%AC%EC%9A%A9%ED%95%98%EC%A7%80-%EC%95%8A%EB%8A%94-%EC%9D%B4%EC%9C%A0</guid>
            <pubDate>Tue, 30 May 2023 02:09:19 GMT</pubDate>
            <description><![CDATA[<p><strong>{ hoisting }</strong>
: 인터프리터가 변수와 함수의 메모리 공간을 선언 전에 미리 할당하는 것을 의미함. 
&#39;var&#39;로 선언한 변수의 경우 hoisting시 undefined로 변수를 초기화 함.</p>
<pre><code class="language-javascript">&lt;개발자의 멍청한 실수&gt;

  &lt;1&gt;
    console.log(myName);
    var myName = &#39;nas&#39;

    =&gt; undefined

-----------------------------------------------------------

  &lt;2&gt;
    console.log(myName);
    let myName = &#39;nas&#39;

    =&gt; RerenceError 발생.
</code></pre>
<p>=&gt; 자바스크립트에서 let 사용시 친절하게 알려줌.
따라서 개발자의 멍청한 실수를 알 수 있는 let 사용 권장.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[ES6 <Let vs Const>]]></title>
            <link>https://velog.io/@naskim_311/ES6-Let-vs-Const</link>
            <guid>https://velog.io/@naskim_311/ES6-Let-vs-Const</guid>
            <pubDate>Tue, 30 May 2023 01:39:22 GMT</pubDate>
            <description><![CDATA[<p><strong>{ let }</strong> &lt;재할당 가능&gt;
: 블록 스코프의 범위를 가지는 지역 변수를 선언하며, 선언과 동시에 임의의 값으로 초기화할 수도 있다.</p>
<p><strong>{ const }</strong> &lt;재할당 불가능&gt;
: 선언은 블록 범위의 상수를 선언. 상수의 값은 재할당할 수 없으며 다시 선언할 수도 없음.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[오라클 데이터베이스 11g버전 다운 경로]]></title>
            <link>https://velog.io/@naskim_311/%EC%98%A4%EB%9D%BC%ED%81%B4-%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4-11g%EB%B2%84%EC%A0%84-%EB%8B%A4%EC%9A%B4-%EA%B2%BD%EB%A1%9C</link>
            <guid>https://velog.io/@naskim_311/%EC%98%A4%EB%9D%BC%ED%81%B4-%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4-11g%EB%B2%84%EC%A0%84-%EB%8B%A4%EC%9A%B4-%EA%B2%BD%EB%A1%9C</guid>
            <pubDate>Wed, 29 Mar 2023 11:52:02 GMT</pubDate>
            <description><![CDATA[<p><a href="https://www.oracle.com/database/technologies/xe-prior-release-downloads.html">https://www.oracle.com/database/technologies/xe-prior-release-downloads.html</a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[Angular 초기 개발환경 세팅]]></title>
            <link>https://velog.io/@naskim_311/Angular-%EC%B4%88%EA%B8%B0-%EA%B0%9C%EB%B0%9C%ED%99%98%EA%B2%BD-%EC%84%B8%ED%8C%85</link>
            <guid>https://velog.io/@naskim_311/Angular-%EC%B4%88%EA%B8%B0-%EA%B0%9C%EB%B0%9C%ED%99%98%EA%B2%BD-%EC%84%B8%ED%8C%85</guid>
            <pubDate>Tue, 21 Mar 2023 10:31:52 GMT</pubDate>
            <description><![CDATA[<p>&lt;Angular 개발 환경 세팅&gt;</p>
<ul>
<li><p>Node.js 설치 <a href="https://nodejs.org/ko">https://nodejs.org/ko</a></p>
</li>
<li><p>Vscode 설치 <a href="https://code.visualstudio.com/">https://code.visualstudio.com/</a></p>
</li>
<li><p>Vscode 확장앱 angular 검색 후 최 상단 프로그램 설치</p>
</li>
<li><p>pwershell에 입력</p>
<ul>
<li>타입스크립트를 사용하기 위한 라이브러리 설치 : npm install -g typescript</li>
<li>앵큘러 사용하기 위한 명령어 입력 : npm i @angular/cli -g</li>
</ul>
</li>
<li><p>앵귤러 프로젝트 생성 : ng new 프로젝트명
  -&gt; 라우팅 no / css 선택</p>
</li>
<li><p>서버 구동(default port : 4200)
  해당 디렉토리로 경로 이동 후 : ng serve --open</p>
</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[다형성 (Polymorphism)]]></title>
            <link>https://velog.io/@naskim_311/%EB%8B%A4%ED%98%95%EC%84%B1-Polymorphism</link>
            <guid>https://velog.io/@naskim_311/%EB%8B%A4%ED%98%95%EC%84%B1-Polymorphism</guid>
            <pubDate>Fri, 17 Feb 2023 06:49:08 GMT</pubDate>
            <description><![CDATA[<h2 id="💡-다형성이란">💡 다형성이란?</h2>
<p>-&gt; 조상 타입 참조 변수로 자손 타입 객체를 다루는 것.</p>
<hr>
<h2 id="💡-다형성-특징">💡 다형성 특징</h2>
<ul>
<li>자손 타입의 참조변수로 조상 타입의 객체를 가리킬 수 없다.
<img src="https://velog.velcdn.com/images/naskim_311/post/828c70d9-4a20-4d87-9d3c-c8fa166014fc/image.png" alt=""></li>
</ul>
<hr>
<h2 id="💡-다형성-문제">💡 다형성 문제</h2>
<ul>
<li><p>Q1. 참조변수의 타입은 인스턴스의 타입과 반드시 일치해야 하나요?
  -&gt; 아닙니다. 일치하는 것이 보통이지만 일치 하지 않을 수도 있습니다.</p>
<pre><code class="language-java">SmartTv s = new SmartTv();    // 참조 변수와 인스턴스의 타입이 일치.
Tv t = new SmartTv();    // 조상 타입 참조변수로 자손 타입 인스턴스 참조.</code></pre>
<ul>
<li><p>Q2. 참조변수가 조상타입일 때와 자손타입일 때의 차이?
 -&gt; 참조변수로 사용할 수 있는 멤버의 갯수가 달라집니다.</p>
</li>
<li><p>Q3. 자손 타입의 참조변수로 조상 타입의 객체를 가리킬 수 있나요?
 -&gt; 아니요. 허용되지 않습니다.</p>
<pre><code class="language-java">Tv t = new SmartTv();    // 허용.
SmartTv s = new Tv();    // 에러.</code></pre>
</li>
</ul>
</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[캡슐화]]></title>
            <link>https://velog.io/@naskim_311/%EC%BA%A1%EC%8A%90%ED%99%94</link>
            <guid>https://velog.io/@naskim_311/%EC%BA%A1%EC%8A%90%ED%99%94</guid>
            <pubDate>Mon, 06 Feb 2023 06:28:07 GMT</pubDate>
            <description><![CDATA[<h2 id="💡-캡슐화-encapsulation">💡 캡슐화 (Encapsulation)</h2>
<p>객체. 즉 <strong>클래스의 내부 변수와 메소드를 하나로 패키징</strong>하는 특징이다.</p>
<p>객체에 선언된 변수나 메소드가 구분없이 중구난방으로 접근할 수 있다면 정상적인 객체로 보기 어렵다.</p>
<p>캡슐화와 비슷한 개념으로 정보은닉이라는 개념이 있다.</p>
<p>정보 은닉은 객체의 내부 구현을 숨김으로써 객체가 반드시 정해진 메소드를 통해 상요작용하도록 유도한다.</p>
<p>이 두 개념은 객체의 응집도와 독립성을 높임으로써 객체의 모듈화를 지향한다.</p>
<p>객체의 모듈화가 잘 이루어져있을 경우 모듈 단위의 재사용이 매우 용이하다.</p>
<p>여러 로직에서 중복되는 코드를 모듈로 대처하면 모듈 내부의 소스만 수정하는 것으로 수정사항을 반영할 수 있다.</p>
<p>이는 곧 간편한 유지보수와 직결된다.</p>
<ul>
<li><p>모듈 : 소프트웨어 설계에서 기능단위로 분해하고 추상화 되어 재사용 및 공유 가능한 수준으로 만들어진 단위</p>
</li>
<li><p>모듈화 : 소프트웨어의 성능을 향상시키거나 시스템의 디버깅, 시험, 통합 및 수정을 용이하도록 하는 소프트웨어 설계 기법</p>
</li>
</ul>
<hr>
<h2 id="💡-캡슐화-사용-이유">💡 캡슐화 사용 이유</h2>
<p>-&gt; 변경에 유연한 프로그래밍 작업을 위함.</p>
<ul>
<li>중복 방지.</li>
<li>편리한 유지보수를 위함.</li>
<li>데이터와 그 데이터를 다르는 메서드로 이루어진 것이 캡슐화이다.</li>
</ul>
<hr>
<h2 id="💡접근-제어자를-이용한-캡슐화encapsulation">💡접근 제어자를 이용한 캡슐화(encapsulation)</h2>
<ul>
<li>클래스나 멤버, 주로 멤버에 접근제어자를 사용하는 이유는 클래스 내부에 선언된 데이터를 보호하기 위해서이다.<ul>
<li>데이터가 유효한 값을 유지하도록, 또는 비밀번호와 같은 데이터를 외부에서 함부로 변경하지 못하도록 하기 위해서<pre><code> 외부로부터의 접근을 제한하는 것이 중요하다.</code></pre></li>
<li>이를 데이터 감추기(data hiding)라고 하며, 객체지향개념의 캡슐화(encapsulation)에 해당하는 내용이다.</li>
<li>또 다른 이유는 클래스 내에서만 사용되는, 내부 작업을 위해 임시로 사용되는 멤버 변수나 부분 작업을 처리하기 위한<pre><code> 메소드 등의 멤버들을 클래스 내부에 감추기 위함이다.</code></pre></li>
<li>외부에서 접근할 필요가 없는 멤버들은 private으로 지정하여 외부에 노출시키지 않음으로써 복잡성을 줄일 수가 있다.</li>
</ul>
</li>
</ul>
<hr>
<h3 id="👀-문제-풀이">👀 문제 풀이</h3>
<p>내가 낸 문제) 캡슐화는 객체의 ( ) 와 ( ) 을 높임으로써 객체의 ( )를 지향한다.
빈칸을 채워주세요
답: 응집도, 독립성, 모듈화</p>
<ul>
<li>모듈화 : 소프트웨어의 성능을 향상시키거나 시스템의 디버깅, 시험, 통합 및 수정을 용이하도록 하는 소프트웨어 설계 기법</li>
</ul>
<p>문제 1) 좋은 설계는 낮은 응집도와 높은 결합도를 구성하는 것이다 (o,x)
내 답 :  x, 이유: 높은 응집도와 낮은 결합도를 구성하는 것이다.(정답)
정답 : x, 높은 응집성 낮은 결합도(의존성의 정도)</p>
<p>문제 2) 객체지향 기법에서 캡슐화에 대한 설명으로 틀린 것은?</p>
<p>1) 캡슐화를 하면 객체 간의 결합도가 높아진다.
2) 캡슐화된 객체들은 재사용이 용이하다.
3) 프로그램 변경에 대한 오류의 파급 효과가 적다.
4) 인터페이스가 단순해진다.
내 답 : 1, 이유: 결합도가 낮아진다.(독립성이 높아짐) (정답)
정답 : 1</p>
<p>문제 3) 정보은닉을 위해서 객체에 있는 데이터와 함수들을 모두 은폐시켜야 한다 (o/x)
그 이유는?
내 답 : x, 이유: 은닉된 데이터에 접근할 수 있는 메서드가 필요하므로 모두 은폐시키면 안된다. (정답)
정답 : x, 객체지향 언어에서 어떤 목적을 달성하기 위해서는 필연적으로 다른 객체와의 협력이 있어야 하기 때문에 객체는 서로 관계를 맺는다.
만약 캡슐(객체) 속에 있는 모든 데이터와 함수들을 모두 은폐시킨다면 해당객체는 외부 다른 객체들과 정보를 주고받을 수 없기 때문에.</p>
<p>문제 4) 정보 은닉의 종류 중 캡슐화는 객체의 ( ) 및 ( )를 은닉하는 것이다.
내 답 : 데이터, 메서드 (오답)
정답 : 속성(멤버 변수), 행위(method)</p>
<p>문제 5) 멤버변수의 경우 보통 ( )접근제어자를 사용하여 외부로부터의 직접적인 접근을 막고 
( )를 만들어 사용함으로써 내부 데이터에 제한적 접근을 할 수 있게 한다.
내 답 : private, getter setter (정답)
정답 : private, getter setter</p>
<p>문제 6) </p>
<ol>
<li>class Sepecial 이미지 참고
<img src="https://velog.velcdn.com/images/naskim_311/post/cfd2feaf-f166-4617-a869-e99c2922f882/image.png" alt=""></li>
</ol>
<p>1-1. Sepecial 클래스는 한 번만 생성하게끔 개발하려고 한다. 이러한 작업을 설계하는 디자인 패턴은?
내 답 : 싱글톤 패턴 (정답)
정답 : singleton pattern</p>
<p>1-2. 1번 이미지는 해당 디자인 패턴이 미적용된 상태이다. 수정해야할 줄번호와 수정된 코드를 쓰시오.
내 답 : 13번줄 / return null;(오답)
정답 : 3번 - private static Sepecial sepecial;
        5번 - private Sepecial ( ){ }
        9번 - public static getInstance( ) { /*내용 */}</p>
<ol start="2">
<li>class Person 이미지 참고
<img src="https://velog.velcdn.com/images/naskim_311/post/5cfd0d1e-9968-40c7-81ba-38d19023affc/image.png" alt=""></li>
</ol>
<p>2-1. Person 클래스의 name을 읽기전용으로 설계한다고 했을 때 작성해야 할 메서드 이름과 접근지정자를 작성하시오
내 답 :
정답 : public, getName</p>
<p>2-2. Person 클래스의 name을 쓰기전용으로 설계한다고 했을 때 작성해야 할 메서드 이름과 접근지정자를 작성하시오
내 답 :
정답 : public, setName</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[접근제어자]]></title>
            <link>https://velog.io/@naskim_311/%EC%A0%91%EA%B7%BC%EC%A0%9C%EC%96%B4%EC%9E%90</link>
            <guid>https://velog.io/@naskim_311/%EC%A0%91%EA%B7%BC%EC%A0%9C%EC%96%B4%EC%9E%90</guid>
            <pubDate>Fri, 03 Feb 2023 07:27:09 GMT</pubDate>
            <description><![CDATA[<ul>
<li>접근제어자는 추상 클래스, final, 인터페이스 등과 같이 규제에 해당하는 것이다.</li>
<li>막장을 막기 위함이다.</li>
<li>예를 들어, 자바스크립트와 PHP 같은 언어는 변수의 타입이 없어 어떠한 값이든 변수에 할당 될 수 있다. </li>
<li><blockquote>
<p>코드 작성자는 편하겠지만, 코드 사용자는 그 변수의 어떠한 값이 들어가 있는지 한 번 더 확인해야하는 번거러움이 있다.</p>
</blockquote>
</li>
<li>종류 : public(많이 쓰임), protected, default, private(많이 쓰임)
<img src="https://velog.velcdn.com/images/naskim_311/post/f0cfd9f5-3e21-4240-81d0-332bc9fab7b1/image.png" alt=""></li>
<li>사용하는 이유 : 은닉성, 캡슐화</li>
</ul>
<hr>
<p>💡스터디원들의 문제</p>
<p>문제 1) 다른 클래스 , 패키지에서도 private 변수에 접근할 수 있도록 해주는 메서드는??
-&gt; getter, setter (정답)</p>
<p>문제 2) protected로 구현된 메소드는 반드시 자식클래스가 override를 해야한다?
-&gt; 아니다 (정답)
이유 : 해도되고 안해도 된다.</p>
<p>문제 3) abstract메서드의 접근 제어자는 private일 수 있다/없다
-&gt; 없다 (정답)
이유 : abstract 메서드는 자식클래스에서 구현하기 위해 접근해야 하기 때문</p>
<p>문제 4) 접근제어자를 사용하는 궁극적 목표는 캡슐화이다 그렇다면 spring을 이용한 개발 중 사용했던 캡슐화의 대표적 예시는?
-&gt; DTO </p>
<p>문제 5) public 메소드는 private 멤버와 프로그램 사이의 (  ) 역할을 수행한다고 할 수 있습니다. ( )안에 답을 넣으시오.
-&gt; 인터페이스</p>
<p>문제 6) (<a href="https://velog.velcdn.com/images/naskim_311/post/8b016461-7a78-49a8-b39e-70c0c2c22efd/image.pdf">https://velog.velcdn.com/images/naskim_311/post/8b016461-7a78-49a8-b39e-70c0c2c22efd/image.pdf</a>)
-&gt; 1. 아니다 (멤버변수가 private으로 지정되어 있어야 하기 떄문)
    2. ++++30++++
        ----30----
        3. 아니다
        4. private 접근제어자는 같은 클래스에서만 실행되므로, public 접근제어자를 가진 메소드만이 다른 클래스의 private 메소드를 실행시킬 수 있다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[자바스크립트 런타임]]></title>
            <link>https://velog.io/@naskim_311/%EC%9E%90%EB%B0%94%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8-%EB%9F%B0%ED%83%80%EC%9E%84</link>
            <guid>https://velog.io/@naskim_311/%EC%9E%90%EB%B0%94%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8-%EB%9F%B0%ED%83%80%EC%9E%84</guid>
            <pubDate>Fri, 27 Jan 2023 11:13:53 GMT</pubDate>
            <description><![CDATA[<ul>
<li>Node.js는 V8 자바스크립트 엔진으로 빌드된 자바스크립트이다.</li>
<li>이벤트 기반, 논블로킹 I/O 모델을 사용해 가볍고 효율적이다.</li>
<li>노드는 자바스크립트 런타임입니다.
  런타임은 특정 언어로 만든 프로그램들을 실행할 수 있는 환경을 뜻합니다.</li>
<li>자바스크립트 런타임환경은 프로그램에 실해 동안 사용 가능한 내장된 라이브러리를 제공합니다.</li>
<li>브라우저 안에서 윈도우 오브젝트나 DOM API를 사용하고자 한다면, 이과정에 브라우저의 JavaScript 런타임 환경(Runtime Environment)이 포함될 것입니다.</li>
<li>기존에는 자바스크립트 프로그램을 인터넥 브라우저 위에서만 실행할 수 있었지만,
Node.js를 이용하면 자바스크립트를 서버나 일반PC환경에서도 실행 될 수 있게 만든 프로그램이다.</li>
<li>Node.js 는 2009년에 시작되었다.</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[Spring <Annotation Tag>]]></title>
            <link>https://velog.io/@naskim_311/Spring-Annotation-Tag</link>
            <guid>https://velog.io/@naskim_311/Spring-Annotation-Tag</guid>
            <pubDate>Wed, 07 Dec 2022 10:42:24 GMT</pubDate>
            <description><![CDATA[<pre><code class="language-java">- @Controller
    : Controller에 붙여준다. 해당 mapping url을 찾는 어노테이션 태그.

- @GetMapping
    : get방식의 요청에서 해당 url을 받아온다.

- @PostMapping
    : post방식의 요청에서 해당 url을 받아온다.

- @RequestMapping
    : get, post방식 모두의 요청에서 해당 url을 받아온다.

- @RequestParam
    : 파라미터 이름으로 바인딩하는 어노테이션 태그
    - required    : 파라미터 값 필수 여부를 설정하는 속성
                &lt;true -&gt; 필수(default) / false -&gt; 필수아님&gt;

- @ResponseBody
    : view 조회를 무시하고, HTTP message body에 직접 해당 내용을 입력하는 태그.

- @ModelAttribute
    : 파라미터를 받아서 필요한 객체를 만들고, 
    그 객체에 값을 넣어주는 과정을 자동화시키는 태그.

- @RequiredArgsConstructor
    : final이 붙은 멤버변수만 사용해서 생성자를 자동으로 만들어준다.
        &lt;생성자 자동 생성하는 어노테이션 태그(lombok에서 제공)&gt;</code></pre>
]]></description>
        </item>
        <item>
            <title><![CDATA[Spring Boot 특징]]></title>
            <link>https://velog.io/@naskim_311/Spring-Boot-%ED%8A%B9%EC%A7%95</link>
            <guid>https://velog.io/@naskim_311/Spring-Boot-%ED%8A%B9%EC%A7%95</guid>
            <pubDate>Wed, 07 Dec 2022 10:27:22 GMT</pubDate>
            <description><![CDATA[<ul>
<li><p>Embed Tomcat
  -&gt; Spring Boot는 내장형 톰캣을 가지고 있기 때문에 별도의 톰캣을 설정할 필요가 없어졌으며, 그렇기 때문에 독립적으로 실행 가능한 jae로 손쉽게 배포가 가능해졌다.</p>
</li>
<li><p>AutoConfigurator
  -&gt; 설정을 어노테이션 태그를 이용하여 대신한다.</p>
</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[Framework란?]]></title>
            <link>https://velog.io/@naskim_311/Framework%EB%9E%80</link>
            <guid>https://velog.io/@naskim_311/Framework%EB%9E%80</guid>
            <pubDate>Wed, 07 Dec 2022 10:23:58 GMT</pubDate>
            <description><![CDATA[<ol>
<li>Framework란?<ul>
<li>&#39;뼈대나 근간&#39;을 이루는 코드들의 묶음</li>
<li>프로그램의 기본 흐름이나 구조는 정하고, 이 구조에 자신의 코드를 추가하는 방식으로 개발할 수 있도록 하는 프로그램의 기본 틀을 의미한다.</li>
<li>개발에 필요한 구조가 제공되고, 여기에 필요한 부분을 조립하는 형태로 개발이 진행된다.
ex) 소형차를 만들기 위해 뼈대를 사용하는데, 이 뼈대로 SUV를 만들 수 없다.(Framework)</li>
</ul>
<hr>
</li>
<li>라이브러리란?<ul>
<li>자주 사용되는 로직을 재사용하기 편리하도록 잘 정히한 일련의 코드들의 집합.
ex) 바퀴나, 선루프, 헤드라이트 등은 비교적 다른 종류로 쉽게 바꿀수 있다.(라이브러리)     </li>
</ul>
</li>
</ol>
]]></description>
        </item>
        <item>
            <title><![CDATA[Spring Boot 프로젝트 생성]]></title>
            <link>https://velog.io/@naskim_311/Spring-Boot-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-%EC%83%9D%EC%84%B1</link>
            <guid>https://velog.io/@naskim_311/Spring-Boot-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-%EC%83%9D%EC%84%B1</guid>
            <pubDate>Mon, 21 Nov 2022 02:02:28 GMT</pubDate>
            <description><![CDATA[<h3 id="spring-boot-메뉴얼-경로">Spring Boot 메뉴얼 경로</h3>
<p>-&gt; <a href="https://docs.spring.io/spring-boot/docs/current/reference/html/web.html#web">https://docs.spring.io/spring-boot/docs/current/reference/html/web.html#web</a></p>
<h3 id="프로젝트-생성하는-웹-경로">프로젝트 생성하는 웹 경로</h3>
<p>-&gt; 구글에 spring starter라고 검색하면 밑에 링크 나옴.
-&gt; <a href="https://start.spring.io/">https://start.spring.io/</a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[Javascript Date 객체]]></title>
            <link>https://velog.io/@naskim_311/Javascript-Date-%EA%B0%9D%EC%B2%B4</link>
            <guid>https://velog.io/@naskim_311/Javascript-Date-%EA%B0%9D%EC%B2%B4</guid>
            <pubDate>Mon, 21 Nov 2022 02:01:27 GMT</pubDate>
            <description><![CDATA[<h3 id="💡-명령어">💡 명령어</h3>
<pre><code class="language-javascript">1. getFullYear()        : 오늘 날짜의 연도를 리턴하는 명령어.

2. getMonth()             : 오늘 날짜의 달의 -1을 한 값음 리턴하는 명령어.

3. getDate()            : 오늘 날짜의 일수를 리턴하는 명령어.

4. getDay()                : 요일을 구할 때 사용하는 명령어.
                        0 ~ 6의 값을 리턴하는 명령어 인데,
                        일요일 = 0 ~ 토요일 = 6 으로 생각하고
                        배열 생성해서 요일을 구하면 된다.</code></pre>
]]></description>
        </item>
    </channel>
</rss>