<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>steaming_c.log</title>
        <link>https://velog.io/</link>
        <description>즐겁게 코딩코딩</description>
        <lastBuildDate>Tue, 17 May 2022 07:58:31 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>steaming_c.log</title>
            <url>https://images.velog.io/images/steaming_c/profile/1e2fc839-e8f7-465c-98a3-3b534782e496/social.png</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. steaming_c.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/steaming_c" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[자바 복습 Day0517]]></title>
            <link>https://velog.io/@steaming_c/%EC%9E%90%EB%B0%94-%EB%B3%B5%EC%8A%B5-Day0517</link>
            <guid>https://velog.io/@steaming_c/%EC%9E%90%EB%B0%94-%EB%B3%B5%EC%8A%B5-Day0517</guid>
            <pubDate>Tue, 17 May 2022 07:58:31 GMT</pubDate>
            <description><![CDATA[<ol>
<li>독립 클래스로 Action 이벤트 리스너 작성
<img src="https://velog.velcdn.com/images/steaming_c/post/b2badda5-f9d3-429b-a65d-9cc6eea35de8/image.PNG" alt=""></li>
</ol>
</br>

<ol start="2">
<li>내부 클래스로 Action 이벤트 리스너 만들기
<img src="https://velog.velcdn.com/images/steaming_c/post/0294ed2f-f644-44cb-b1a2-dd2430b7f048/image.PNG" alt=""></li>
</ol>
</br>

<ol start="3">
<li>익명 클래스로 Action 이벤트 리스너 만들기
<img src="https://velog.velcdn.com/images/steaming_c/post/09afae69-fcc6-4e4f-b670-2bc83e6dcef0/image.PNG" alt=""></li>
</ol>
</br>

<ol start="4">
<li>마우스로 문자열 이동시키기 – 마우스 이벤트 연습
<img src="https://velog.velcdn.com/images/steaming_c/post/36065ce1-68ed-4fde-b48e-f9a39344dce3/image.PNG" alt=""></li>
</ol>
</br>

<ol start="5">
<li>MouseAdapter 사용하기
<img src="https://velog.velcdn.com/images/steaming_c/post/b4d757c5-9149-4e34-ad42-bf846ea146a4/image.PNG" alt=""></li>
</ol>
</br>

<ol start="6">
<li>상하좌우키로 텍스트 움직이기
<img src="https://velog.velcdn.com/images/steaming_c/post/a5b27412-65ec-480c-bce3-d3b2210ea522/image.PNG" alt=""></li>
</ol>
</br>

<ol start="7">
<li>다양한 KeyEvent와 KeyListener 활용
<img src="https://velog.velcdn.com/images/steaming_c/post/8ba9063a-2e70-452e-8166-d6f66fc2c220/image.PNG" alt=""></li>
</ol>
</br>

<ol start="8">
<li>마우스와 마우스 모션 이벤트 활용
<img src="https://velog.velcdn.com/images/steaming_c/post/dd949056-4e1d-48ed-90ed-9e5dc5299bbc/image.PNG" alt=""></li>
</ol>
</br>

<ol start="9">
<li>체크박스 생성
<img src="https://velog.velcdn.com/images/steaming_c/post/5ff97de6-47eb-4c42-8e6f-0d7445c0f786/image.PNG" alt=""></li>
</ol>
]]></description>
        </item>
        <item>
            <title><![CDATA[자바 복습 Day0516]]></title>
            <link>https://velog.io/@steaming_c/%EC%9E%90%EB%B0%94-%EB%B3%B5%EC%8A%B5-Day0516</link>
            <guid>https://velog.io/@steaming_c/%EC%9E%90%EB%B0%94-%EB%B3%B5%EC%8A%B5-Day0516</guid>
            <pubDate>Mon, 16 May 2022 07:41:48 GMT</pubDate>
            <description><![CDATA[<ol>
<li>스윙 - 프레임창 띄우기
<img src="https://velog.velcdn.com/images/steaming_c/post/75cf3985-2543-4e1c-a02d-6be0b945f075/image.PNG" alt=""></li>
</ol>
</br>

<ol start="2">
<li>프레임창 띄우기
<img src="https://velog.velcdn.com/images/steaming_c/post/e7d388df-b54c-42c6-bc47-391ebe253139/image.PNG" alt=""></li>
</ol>
</br>]]></description>
        </item>
        <item>
            <title><![CDATA[자바 복습 Day0513]]></title>
            <link>https://velog.io/@steaming_c/%EC%9E%90%EB%B0%94-%EB%B3%B5%EC%8A%B5-Day0513</link>
            <guid>https://velog.io/@steaming_c/%EC%9E%90%EB%B0%94-%EB%B3%B5%EC%8A%B5-Day0513</guid>
            <pubDate>Fri, 13 May 2022 03:21:55 GMT</pubDate>
            <description><![CDATA[<ol>
<li>InputStreamReader로 한글 텍스트 파일 출력(UTF-8 인코딩)
<img src="https://velog.velcdn.com/images/steaming_c/post/46104778-2ba6-4462-9390-c1ee34e7b1f2/image.PNG" alt=""></li>
</ol>
</br>

<ol start="2">
<li>FileWriter&amp;Scanner로 파일 만들고 내용 입력하기
<img src="https://velog.velcdn.com/images/steaming_c/post/8816ad8f-c88f-416c-8f00-6beca157cbfb/image.PNG" alt=""></li>
</ol>
</br>

<ol start="3">
<li>버퍼 스트림 이용하기 (버퍼 크기 5)
<img src="https://velog.velcdn.com/images/steaming_c/post/6d76de08-5dbd-4455-a8c0-8f7d72fa4903/image.PNG" alt=""></li>
</ol>
<p>-&gt; 버퍼 크기가 5라서 5개의 문자만 출력되고 사용자의 엔터를 기다리고 있는 상태</p>
<p><img src="https://velog.velcdn.com/images/steaming_c/post/301fa144-42c8-4de7-b07f-c013df0122cb/image.PNG" alt="">
-&gt; 엔터를 입력하니까 나머지 문자들이 출력되고 프로그램이 종료됨.</p>
</br>

<ol start="4">
<li>File 객체 만들기
<img src="https://velog.velcdn.com/images/steaming_c/post/4464a5bf-e837-4bfe-be67-7b31175414d8/image.PNG" alt=""></li>
</ol>
</br>

<ol start="5">
<li>문자 스트림 FileReader &amp; FileWriter를 이용하여 텍스트 파일 복사하기
<img src="https://velog.velcdn.com/images/steaming_c/post/495aa62b-27dc-4e9d-b31c-5a1501db463d/image.PNG" alt=""></li>
</ol>
</br>

<ol start="6">
<li>이미지 복사 
<img src="https://velog.velcdn.com/images/steaming_c/post/d956fc42-c230-49eb-85e6-4d2b69b6f0e3/image.PNG" alt=""></li>
</ol>
<p>-&gt; 오래 걸림</p>
</br>

<p><img src="https://velog.velcdn.com/images/steaming_c/post/a772a2a5-50e7-459f-9c5e-12226e914067/image.PNG" alt="">
-&gt; 버퍼 처리 후 속도 향상</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[자바 복습 Day0511]]></title>
            <link>https://velog.io/@steaming_c/%EC%9E%90%EB%B0%94-%EB%B3%B5%EC%8A%B5-Day0511</link>
            <guid>https://velog.io/@steaming_c/%EC%9E%90%EB%B0%94-%EB%B3%B5%EC%8A%B5-Day0511</guid>
            <pubDate>Wed, 11 May 2022 07:43:06 GMT</pubDate>
            <description><![CDATA[<ol>
<li>벡터와 메서드 사용</li>
</ol>
<p><img src="https://velog.velcdn.com/images/steaming_c/post/c7c342d6-d98d-4d3d-a6cd-f8307efe2f19/image.PNG" alt=""></p>
</br>

<ol start="2">
<li>문자열 입력 받아 ArrayList에 저장</li>
</ol>
<p><img src="https://velog.velcdn.com/images/steaming_c/post/42f40414-4b21-4fd3-96c8-776daf24da79/image.PNG" alt=""></p>
</br>

<ol start="3">
<li>HashMap을 이용하여 (영어, 한글) 단어 쌍 검색</li>
</ol>
<p><img src="https://velog.velcdn.com/images/steaming_c/post/80303de8-75e9-4a2f-8116-ddc1bccdf83a/image.PNG" alt=""></p>
</br>

<ol start="4">
<li>HashMap에 객체 저장, 학생 정보 관리</li>
</ol>
<p><img src="https://velog.velcdn.com/images/steaming_c/post/45879033-b33c-4b36-991e-7e34342cde67/image.PNG" alt=""></p>
</br>

<ol start="5">
<li>Collectin 클래스의 활용</li>
</ol>
<p><img src="https://velog.velcdn.com/images/steaming_c/post/bbeb6344-22f9-454c-a434-57349c70f32d/image.PNG" alt=""></p>
</br>]]></description>
        </item>
        <item>
            <title><![CDATA[자바 복습 Day0510]]></title>
            <link>https://velog.io/@steaming_c/%EC%9E%90%EB%B0%94-%EB%B3%B5%EC%8A%B5-Day0510</link>
            <guid>https://velog.io/@steaming_c/%EC%9E%90%EB%B0%94-%EB%B3%B5%EC%8A%B5-Day0510</guid>
            <pubDate>Tue, 10 May 2022 07:49:28 GMT</pubDate>
            <description><![CDATA[<ol>
<li>StringBuffer 객체 생성 및 메서드 활용
<img src="https://velog.velcdn.com/images/steaming_c/post/41d5eb39-c865-4b60-a4b9-2b97bf385d46/image.PNG" alt=""></li>
</ol>
</br>

<ol start="2">
<li>Calendar 객체
<img src="https://velog.velcdn.com/images/steaming_c/post/0a4ba8b8-afbe-45f1-b9f0-2ad66f986f1d/image.PNG" alt=""></li>
</ol>
</br>]]></description>
        </item>
        <item>
            <title><![CDATA[자바 복습 Day0509]]></title>
            <link>https://velog.io/@steaming_c/%EC%9E%90%EB%B0%94-%EB%B3%B5%EC%8A%B5-Day0509</link>
            <guid>https://velog.io/@steaming_c/%EC%9E%90%EB%B0%94-%EB%B3%B5%EC%8A%B5-Day0509</guid>
            <pubDate>Mon, 09 May 2022 08:23:30 GMT</pubDate>
            <description><![CDATA[<ol>
<li>예외 처리 printStackTrace(); 메서드 사용
<img src="https://velog.velcdn.com/images/steaming_c/post/6ea8333e-d6a7-4b50-b077-60a2210c4259/image.PNG" alt=""></li>
</ol>
</br>

<ol start="2">
<li>예외 발생시키기 (throw로 던져주기)
<img src="https://velog.velcdn.com/images/steaming_c/post/849eb809-f567-4bfe-8cf2-62b39e0292a6/image.PNG" alt=""></li>
</ol>
</br>

<ol start="3">
<li>예외 처리 (throw 메서드 선언부에 사용해서 미루기)
<img src="https://velog.velcdn.com/images/steaming_c/post/bb42314d-09fb-46e2-8e02-4a165d938c07/image.PNG" alt=""></li>
</ol>
</br>

]]></description>
        </item>
        <item>
            <title><![CDATA[자바 복습 Day03]]></title>
            <link>https://velog.io/@steaming_c/%EC%9E%90%EB%B0%94-%EB%B3%B5%EC%8A%B5-Day03</link>
            <guid>https://velog.io/@steaming_c/%EC%9E%90%EB%B0%94-%EB%B3%B5%EC%8A%B5-Day03</guid>
            <pubDate>Wed, 27 Apr 2022 11:13:35 GMT</pubDate>
            <description><![CDATA[<ul>
<li>배열 만들기
<img src="https://velog.velcdn.com/images/steaming_c/post/53a30de9-79f8-48d3-b3a8-64b9221f5fa5/image.PNG" alt=""></li>
</ul>
</br>

<ul>
<li>배열로 성적의 평균, 총합, 최대값, 최소값 구해보기
<img src="https://velog.velcdn.com/images/steaming_c/post/60e48e73-2ce6-4d0c-b83c-833ad1a2357f/image.PNG" alt=""></li>
</ul>
</br>

<ul>
<li>배열로 숫자 나열하기
<img src="https://velog.velcdn.com/images/steaming_c/post/e341563a-5dcd-41c3-9037-1215436f2243/image.PNG" alt=""></li>
</ul>
</br>

<ul>
<li>배열로 16진수를 2진수로 변환
<img src="https://velog.velcdn.com/images/steaming_c/post/63dbcd31-7c03-41b4-8d00-7d76485fdcca/image.PNG" alt=""></li>
</ul>
</br>

<ul>
<li>사용자 입력 받기_입력창(InputDialog)
<img src="https://velog.velcdn.com/images/steaming_c/post/42eed13b-74bb-4915-8f7b-c769145e6d3f/image.PNG" alt="">
<img src="https://velog.velcdn.com/images/steaming_c/post/c9b710f7-bfab-4fc4-ab2c-9e339df25579/image.PNG" alt=""></li>
</ul>
</br>

<ul>
<li>배열로 모스부호 출력하기
<img src="https://velog.velcdn.com/images/steaming_c/post/926805c2-41ec-40f2-b814-fd7cab6daf20/image.PNG" alt=""></li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[자바 복습 Day02]]></title>
            <link>https://velog.io/@steaming_c/%EC%9E%90%EB%B0%94-%EB%B3%B5%EC%8A%B5-Day02</link>
            <guid>https://velog.io/@steaming_c/%EC%9E%90%EB%B0%94-%EB%B3%B5%EC%8A%B5-Day02</guid>
            <pubDate>Wed, 27 Apr 2022 11:11:19 GMT</pubDate>
            <description><![CDATA[<ul>
<li>If 문
<img src="https://velog.velcdn.com/images/steaming_c/post/b25dd4cb-7df4-4e18-b7f9-3dccd4278db9/image.PNG" alt=""></li>
</ul>
</br>

<ul>
<li>If문 조건식
<img src="https://velog.velcdn.com/images/steaming_c/post/ed9d1fbe-7d69-47d8-a755-959b4a71567f/image.PNG" alt=""></li>
</ul>
</br>

<ul>
<li>Scanner로 성적 부여하기
<img src="https://velog.velcdn.com/images/steaming_c/post/c543d393-b482-4cac-bf9f-0b38c1c2cb91/image.PNG" alt=""></li>
</ul>
</br>

<ul>
<li>Scanner로 계절 맞추기
<img src="https://velog.velcdn.com/images/steaming_c/post/812dba1a-1a28-425d-9c8b-0bfbbc3e3572/image.PNG" alt=""></li>
</ul>
</br>

<ul>
<li>String 클래스 출력해보기
<img src="https://velog.velcdn.com/images/steaming_c/post/1e8a770d-d101-4a9c-a223-3e9b854791fa/image.PNG" alt=""></li>
</ul>
</br>

<ul>
<li>클래스 변수 값 비교
<img src="https://velog.velcdn.com/images/steaming_c/post/2a7749ef-a668-47eb-8fb2-0ca7ffe363ce/image.PNG" alt=""></li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[자바 복습 Day01]]></title>
            <link>https://velog.io/@steaming_c/%EC%9E%90%EB%B0%94-%EB%B3%B5%EC%8A%B5-Day01</link>
            <guid>https://velog.io/@steaming_c/%EC%9E%90%EB%B0%94-%EB%B3%B5%EC%8A%B5-Day01</guid>
            <pubDate>Mon, 25 Apr 2022 12:01:40 GMT</pubDate>
            <description><![CDATA[<ul>
<li>형 변환
<img src="https://velog.velcdn.com/images/steaming_c/post/3fe15ab0-b8a1-40f3-8f8f-1f6fa293da5b/image.PNG" alt=""></li>
</ul>
</br>

<ul>
<li>오버로드 확인
<img src="https://velog.velcdn.com/images/steaming_c/post/787871c3-d8a0-4a9c-8994-6accbd6c1b52/image.PNG" alt=""></li>
</ul>
</br>

<ul>
<li>문자열 변환
<img src="https://velog.velcdn.com/images/steaming_c/post/38133220-1b78-4013-9744-2f6db59a41a0/image.PNG" alt=""></li>
</ul>
</br>

<ul>
<li>임시 변수
<img src="https://velog.velcdn.com/images/steaming_c/post/e89f2ed1-ae66-42be-9b89-3293d6d8079d/image.PNG" alt=""></li>
</ul>
</br>

<ul>
<li>스캐너
<img src="https://velog.velcdn.com/images/steaming_c/post/2106c995-ab3e-4e06-a0c1-43092e81827e/image.PNG" alt=""></li>
</ul>
</br>

<ul>
<li>캐스팅 &amp; 문자열
<img src="https://velog.velcdn.com/images/steaming_c/post/406e9f6c-3311-441f-ad3f-2f11a2a58682/image.PNG" alt=""></li>
</ul>
</br>

<ul>
<li>char 타입과 정수값 호환
<img src="https://velog.velcdn.com/images/steaming_c/post/e9c23608-49d6-4bff-b653-4f5980dda0e2/image.PNG" alt=""></li>
</ul>
</br>

<ul>
<li>연산자 우선 순위
<img src="https://velog.velcdn.com/images/steaming_c/post/e5badbd3-b72f-49f3-8a53-36044808a8c0/image.PNG" alt=""></li>
</ul>
</br>

<ul>
<li>삼항 연산자
<img src="https://velog.velcdn.com/images/steaming_c/post/2812044e-d99b-4954-a89e-df25d48094c2/image.PNG" alt=""></li>
</ul>
</br>

<ul>
<li>연산자
<img src="https://velog.velcdn.com/images/steaming_c/post/cb251c66-6e7e-46bb-aaa4-355ccbf34158/image.PNG" alt=""></li>
</ul>
</br>

<ul>
<li>마스크 : 어떤 수의 특정 숫자만 출력하고 싶을 때 마스크 기능 사용.
<img src="https://velog.velcdn.com/images/steaming_c/post/7d299f40-a8f5-4bec-b36e-d85e132b9996/image.PNG" alt=""></li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[12일차] 10장 : 인터페이스]]></title>
            <link>https://velog.io/@steaming_c/12%EC%9D%BC%EC%B0%A8-10%EC%9E%A5-%EC%9D%B8%ED%84%B0%ED%8E%98%EC%9D%B4%EC%8A%A4</link>
            <guid>https://velog.io/@steaming_c/12%EC%9D%BC%EC%B0%A8-10%EC%9E%A5-%EC%9D%B8%ED%84%B0%ED%8E%98%EC%9D%B4%EC%8A%A4</guid>
            <pubDate>Tue, 05 Apr 2022 02:32:11 GMT</pubDate>
            <description><![CDATA[<ul>
<li>인터페이스란?
: 클래스 혹은 프로그램이 제공하는 기능을 명시적으로 선언하는 역할을 한다. 추상메서드와 상수로만 이루어져 있고 구현된 코드가 없기 때문에 인터페이스로는 인스턴스를 생성할 수 없다.
<img src="https://velog.velcdn.com/cloudflare/steaming_c/e409f4e2-dc89-4561-a635-a86b09b2618b/1.%20Calc%20%EC%9D%B8%ED%84%B0%ED%8E%98%EC%9D%B4%EC%8A%A4%20%EB%A7%8C%EB%93%A4%EA%B8%B0.PNG" alt=""></li>
<li><blockquote>
<p>인터페이스 만들기
<img src="https://velog.velcdn.com/cloudflare/steaming_c/9ac98425-4602-4bf8-bd52-8af47d7b5bc1/2-2.%20%EC%9D%B8%ED%84%B0%ED%8E%98%EC%9D%B4%EC%8A%A4%20%EA%B5%AC%ED%98%84%ED%95%98%EA%B8%B0_Calculator.PNG" alt=""></p>
</blockquote>
</li>
<li><blockquote>
<p>인터페이스 구현하기 (추상 클래스로 만들고 추상 메서드를 2개 구현함.)
<img src="https://velog.velcdn.com/cloudflare/steaming_c/2721a650-45d3-42c5-a2ac-6f5a8848404c/2-3.%20%EA%B3%84%EC%82%B0%EA%B8%B0%20%ED%81%B4%EB%9E%98%EC%8A%A4%20%EB%A7%8C%EB%93%A4%EA%B8%B0_CompleteCalc.PNG" alt=""></p>
</blockquote>
</li>
<li><blockquote>
<p>계산기 클래스 완성
<img src="https://velog.velcdn.com/cloudflare/steaming_c/6c33ed73-c988-4c19-bb0b-94185fb60235/2-4.%20CompleteCalc%20%ED%81%B4%EB%9E%98%EC%8A%A4%20%EC%8B%A4%ED%96%89%ED%95%98%EA%B8%B0.PNG" alt=""></p>
</blockquote>
</li>
<li><blockquote>
<p>클래스 실행</p>
</blockquote>
</li>
<li><blockquote>
<p>CompleteCalc 클래스는 상위 클래스인 Calculator 형이면서, Calc 인터페이스를 구현하였으므로 Calc형이기도 하다. 인터페이스를 구현한 클래스가 있을 때 그 클래스는 해당 이너페이스형으로 묵시적 형 변환이 이루어지며, 형 변환되었을 때 사용할 수 있는 메서드는 인터페이스에서 선언한 메서드뿐이다.</p>
</blockquote>
</li>
</ul>
<br>

<ul>
<li>응용_위 코드에 새로운 메서드 추가하기
<img src="https://velog.velcdn.com/cloudflare/steaming_c/d3b0e93a-68a6-45b3-b385-f556f0070d85/3-1.%20(%ED%98%BC%EC%9E%90)%20Calc%20%EC%9D%B8%ED%84%B0%ED%8E%98%EC%9D%B4%EC%8A%A4%EC%97%90%20square()%20%EB%A9%94%EC%84%9C%EB%93%9C%20%EC%B6%94%EA%B0%80%ED%95%98%EA%B8%B0_Calc%20%EC%9D%B8%ED%84%B0%ED%8E%98%EC%9D%B4%EC%8A%A4.PNG" alt="">
<img src="https://velog.velcdn.com/cloudflare/steaming_c/59df45fc-84e4-4024-88ed-7d884bd8da57/3-2.%20(%ED%98%BC%EC%9E%90)%20CompleteCalc%20%ED%81%B4%EB%9E%98%EC%8A%A4%EC%97%90%20%EC%B6%94%EA%B0%80%20%EB%A9%94%EC%84%9C%EB%93%9C%20%EA%B5%AC%ED%98%84.PNG" alt="">
<img src="https://velog.velcdn.com/cloudflare/steaming_c/51d73534-41a5-409c-9232-b1641ee99776/3-3.%20(%ED%98%BC%EC%9E%90)%20CalculatorTest%20%ED%81%B4%EB%9E%98%EC%8A%A4%20%EA%B5%AC%ED%98%84.PNG" alt=""></li>
</ul>
<br>

<ul>
<li>인터페이스의 역할 
: 클라이언트 프로그램에 어떤 메서드를 제공하는지 미리 알려주는 명세 또는 약속의 역할을 한다. 즉, 인터페이스를 구현한 클래스가 어떤 기능의 메서드를 제공하는지 명시함.</li>
</ul>
<br>

<ul>
<li>인터페이스를 사용하여 다형성을 구현한 확장성 있는 프로그램 만들기
<img src="https://velog.velcdn.com/cloudflare/steaming_c/337dd372-92c7-4bb7-83b8-db78a10957f4/4-1.%20scheduler%20%EC%9D%B8%ED%84%B0%ED%8E%98%EC%9D%B4%EC%8A%A4%20%EC%A0%95%EC%9D%98.PNG" alt="">
<img src="https://velog.velcdn.com/cloudflare/steaming_c/f0529a9b-9823-48fa-986a-8cbd951b9008/4-2.%20%EC%88%9C%EC%84%9C%EB%8C%80%EB%A1%9C%20%EB%B0%B0%EB%B6%84%ED%95%98%EA%B8%B0.PNG" alt="">
<img src="https://velog.velcdn.com/cloudflare/steaming_c/7ce80471-0524-4ced-9ee8-a74e746444d3/4-3.%20%EC%A7%A7%EC%9D%80%20%EB%8C%80%EA%B8%B0%EC%97%B4%20%EB%A8%BC%EC%A0%80%20%EB%B0%B0%EB%B6%84%ED%95%98%EA%B8%B0.PNG" alt="">
<img src="https://velog.velcdn.com/cloudflare/steaming_c/fd5b2096-742d-429e-9fa3-c8eb00e96706/4-4.%20%EC%9A%B0%EC%84%A0%EC%88%9C%EC%9C%84%EC%97%90%20%EB%94%B0%EB%9D%BC%20%EB%B0%B0%EB%B6%84%ED%95%98%EA%B8%B0.PNG" alt="">
<img src="https://velog.velcdn.com/cloudflare/steaming_c/6a558069-334c-4497-a77c-07026dd87e57/4-5.%20%EC%9E%85%EB%A0%A5%20%EB%AC%B8%EC%9E%90%EC%97%90%20%EB%94%B0%EB%9D%BC%20%EB%B0%B0%EB%B6%84%20%EC%A0%95%EC%B1%85%20%EC%88%98%ED%96%89%ED%95%98%EA%B8%B0.PNG" alt=""></li>
<li><blockquote>
<p>위 출력칸에 원하는 정책을 입력하면 아래처럼 출력됨.
<img src="https://velog.velcdn.com/cloudflare/steaming_c/aa117ffd-a487-40e1-9a25-2f63e3b984fe/4-6.%20%EB%AC%B8%EC%9E%90%20%EC%9E%85%EB%A0%A5%ED%95%B4%EB%B3%B4%EA%B8%B0.PNG" alt=""></p>
</blockquote>
</li>
</ul>
<br>

<ul>
<li>상담 전화 배분 정책 추가하기
<img src="https://velog.velcdn.com/cloudflare/steaming_c/94511b4b-7665-43bd-9152-c7237c219b61/4-7.%20(%ED%98%BC%EC%9E%90)%20AgentGetCall%20%ED%81%B4%EB%9E%98%EC%8A%A4%20%EC%B6%94%EA%B0%80%ED%95%98%EA%B8%B0.PNG" alt="">
<img src="https://velog.velcdn.com/cloudflare/steaming_c/531aaa5e-ad18-464c-b9c0-b561bc8ef503/4-8.%20(%ED%98%BC%EC%9E%90)%20AgentGetCall%20%ED%81%B4%EB%9E%98%EC%8A%A4%20%EA%B5%AC%ED%98%84.PNG" alt=""></li>
</ul>
<br>

<ul>
<li>인터페이스 요소
: 상수, 디폴트 메서드, 정적 메서드, private 메서드</li>
</ul>
<br>

<ul>
<li>디폴트 메서드
: 기본으로 제공되는 메서드. 인터페이스에서 구현하지만, 이후 인터페이스를 구현한 클래스가 생성되면 그 클래스에서 사용할 기본 기능. default 예약어를 사용하여 선언한다. 하위 클래스에서 디폴트 메서드를 재정의 할 수 있다.</li>
</ul>
<br>

<ul>
<li>정적 메서드
: static 예약어를 사용하여 선언. 클래스 생성과 무관하게 사용할 수 있다. 정적 메서드를 사용할 때는 인터페이스 이름으로 직접 참조하여 사용한다. </li>
</ul>
<br>

<ul>
<li>private 메서드
: 인터페이스를 구현한 클래스에서 사용하거나 재정의 할 수 없다. 따라서 기존에 구현된 코드를 변경하지 않고 인터페이스를 구현한 클래스에서 공통으로 사용하는 경우에 private 메서드로 구현하면 코드 재사용성을 높일 수 있다. 클라이언트 프로그램에 제공할 기본 기능을 private 메서드로 구현하기도 한다. private 메서드는 코드를 모두 구현해야 하므로 추상 메서드에 private 예약어를 사용할 수는 없지만, static 예약어는 함께 사용할 수 있다. private static 메서드는 정적 메서드에서 호출하여 사용한다.</li>
</ul>
<br>

<ul>
<li>디폴트 메서드, 정적 메서드, private 메서드
<img src="https://velog.velcdn.com/cloudflare/steaming_c/625232bd-5b52-4d59-b184-bbde9391b8a7/5-1.%20%EB%94%94%ED%8F%B4%ED%8A%B8%20%EB%A9%94%EC%84%9C%EB%93%9C,%20%EC%A0%95%EC%A0%81%20%EB%A9%94%EC%84%9C%EB%93%9C,%20private%20%EB%A9%94%EC%84%9C%EB%93%9C%20(%EC%A3%BC%EC%84%9D%20%EC%B6%94%EA%B0%80).PNG" alt="">
<img src="https://velog.velcdn.com/cloudflare/steaming_c/62f8ec6d-c6bc-4daa-a814-0d129cd06a6a/5-2.%20%EB%94%94%ED%8F%B4%ED%8A%B8%20%EB%A9%94%EC%84%9C%EB%93%9C,%20%EC%A0%95%EC%A0%81%20%EB%A9%94%EC%84%9C%EB%93%9C,%20private%20%EB%A9%94%EC%84%9C%EB%93%9C%20%EC%B6%9C%EB%A0%A5%20(%EC%A3%BC%EC%84%9D%20%EC%B6%94%EA%B0%80).PNG" alt=""></li>
</ul>
<br>

<ul>
<li>한 클래스가 여러 인터페이스를 구현
: 인터페이스는 구현 코드나 멤버 변수를 가지지 않기 때문에 여러 개를 동시에 구현할 수 있다. 두 인터페이스에 같은 이름의 메서드가 선언되었다고 해도 구현은 클래스에서 이루어지므로, 어떤 메서드를 호출해야 하는지 모호하지 않다.</li>
</ul>
<br> 

<ul>
<li>두 인터페이스의 디폴트 메서드가 중복되는 경우
: 두 인터페이스를 구현하는 클래스에서 해당 메서드를 재정의 해야 한다. 클래스에서 디폴트 메서드를 재정의하면 클래스를 생성하여 사용할 때 재정의된 메서드가 호출된다. </li>
</ul>
<br>

<ul>
<li>인터페이스 상속
: 인터페이스 간에도 상속이 가능하다. 인터페이스 간 상속은 구현 코드를 통해 기능을 상속하는 것이 아니므로 형 상속(type inheritance)라고 한다. 하나의 클래스만 상속 받을 수 있는 클래스와는 달리 인터페이스는 여러 개를 동시에 상속받을 수 있다. 인터페이스들을 상속 받은 가장 하위 클래스에서 상위 인터페이스의 추상 메서드를 구현해야 한다. 생성한 클래스는 상위 인터페이스형으로 변환할 수 있다. 다만 형 변환한 상위 인터페이스에 선언한 메서드만 호출 가능.</li>
</ul>
<br>

<ul>
<li>인터페이스 구현과 클래스 상속 동시에 하기
<img src="https://velog.velcdn.com/cloudflare/steaming_c/71bd1b88-2f4a-4ce6-977a-c693e5e37f8b/6-1.%20%EC%9D%B8%ED%84%B0%ED%8E%98%EC%9D%B4%EC%8A%A4%20%EA%B5%AC%ED%98%84%EA%B3%BC%20%ED%81%B4%EB%9E%98%EC%8A%A4%20%EC%83%81%EC%86%8D%20%ED%95%A8%EA%BB%98%20%EC%93%B0%EA%B8%B0_Shelf%20%ED%81%B4%EB%9E%98%EC%8A%A4.PNG" alt="">
<img src="https://velog.velcdn.com/cloudflare/steaming_c/2b2c3367-4e2f-4fd9-bef3-238fe74ff3a3/6-2.%20%EC%9D%B8%ED%84%B0%ED%8E%98%EC%9D%B4%EC%8A%A4%20%EA%B5%AC%ED%98%84%EA%B3%BC%20%ED%81%B4%EB%9E%98%EC%8A%A4%20%EC%83%81%EC%86%8D%20%ED%95%A8%EA%BB%98%20%EC%93%B0%EA%B8%B0_Queue%20%EC%9D%B8%ED%84%B0%ED%8E%98%EC%9D%B4%EC%8A%A4.PNG" alt="">
<img src="https://velog.velcdn.com/cloudflare/steaming_c/d9bf07ba-68ec-4410-b46b-b0e45180c184/6-3.%20%EC%9D%B8%ED%84%B0%ED%8E%98%EC%9D%B4%EC%8A%A4%20%EA%B5%AC%ED%98%84%EA%B3%BC%20%ED%81%B4%EB%9E%98%EC%8A%A4%20%EC%83%81%EC%86%8D%20%ED%95%A8%EA%BB%98%20%EC%93%B0%EA%B8%B0_BookShelf%20%ED%81%B4%EB%9E%98%EC%8A%A4.PNG" alt="">
<img src="https://velog.velcdn.com/cloudflare/steaming_c/562747d2-a00e-4e75-963d-be62ff8b55d1/6-4.%20%EC%9D%B8%ED%84%B0%ED%8E%98%EC%9D%B4%EC%8A%A4%20%EA%B5%AC%ED%98%84%EA%B3%BC%20%ED%81%B4%EB%9E%98%EC%8A%A4%20%EC%83%81%EC%86%8D%20%ED%95%A8%EA%BB%98%20%EC%93%B0%EA%B8%B0_BookShelfTest%20%ED%81%B4%EB%9E%98%EC%8A%A4.PNG" alt=""></li>
</ul>
<br>

<ul>
<li>프로그램이 하나인데 사용하는 데이터베이스가 제각각일 때 데이터 베이스 기능을 수행할 인터페이스를 정의한다. 인터페이스 정의에 맞게 여러 데이터베이스 관련 모듈을 개발하면 된다. 인터페이스를 잘 정의한다면 확장성 있는 프로그램을 만들 수 있다. </li>
</ul>
<br>

<ul>
<li>숫자 정렬 알고리즘 프로그램 만들기
<img src="https://velog.velcdn.com/cloudflare/steaming_c/6aea6148-d05c-4c18-ad2b-a20d6e466b21/7-1.%20(%EA%B3%BC%EC%A0%9C)%20%EC%88%AB%EC%9E%90%20%EC%A0%95%EB%A0%AC%20%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98%20%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%A8%20%EB%A7%8C%EB%93%A4%EA%B8%B0_Sort%20%EC%9D%B8%ED%84%B0%ED%8E%98%EC%9D%B4%EC%8A%A4.PNG" alt="">
<img src="https://velog.velcdn.com/cloudflare/steaming_c/8b57c2cd-9509-455b-a79b-1273a5ab0588/7-2.%20(%EA%B3%BC%EC%A0%9C)%20%EC%88%AB%EC%9E%90%20%EC%A0%95%EB%A0%AC%20%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98%20%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%A8%20%EB%A7%8C%EB%93%A4%EA%B8%B0_QuickSort%ED%81%B4%EB%9E%98%EC%8A%A4.PNG" alt="">
<img src="https://velog.velcdn.com/cloudflare/steaming_c/2a9cae29-54a2-4188-91e7-8f80746a598e/7-3.%20(%EA%B3%BC%EC%A0%9C)%20%EC%88%AB%EC%9E%90%20%EC%A0%95%EB%A0%AC%20%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98%20%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%A8%20%EB%A7%8C%EB%93%A4%EA%B8%B0_HeapSort%20%ED%81%B4%EB%9E%98%EC%8A%A4.PNG" alt="">
<img src="https://velog.velcdn.com/cloudflare/steaming_c/0b6d221e-e972-435f-b5e9-da78f11453c6/7-4.%20(%EA%B3%BC%EC%A0%9C)%20%EC%88%AB%EC%9E%90%20%EC%A0%95%EB%A0%AC%20%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98%20%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%A8%20%EB%A7%8C%EB%93%A4%EA%B8%B0_BubbleSort%20%ED%81%B4%EB%9E%98%EC%8A%A4.PNG" alt="">
<img src="https://velog.velcdn.com/cloudflare/steaming_c/3f92e3ea-2ca1-43a0-9831-1d85f431976d/7-5.%20(%EA%B3%BC%EC%A0%9C)%20%EC%88%AB%EC%9E%90%20%EC%A0%95%EB%A0%AC%20%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98%20%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%A8%20%EB%A7%8C%EB%93%A4%EA%B8%B0_SortTest%20%ED%81%B4%EB%9E%98%EC%8A%A4.PNG" alt=""></li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[11일차] 9장 : 추상클래스]]></title>
            <link>https://velog.io/@steaming_c/11%EC%9D%BC%EC%B0%A8-9%EC%9E%A5-%EC%B6%94%EC%83%81%ED%81%B4%EB%9E%98%EC%8A%A4</link>
            <guid>https://velog.io/@steaming_c/11%EC%9D%BC%EC%B0%A8-9%EC%9E%A5-%EC%B6%94%EC%83%81%ED%81%B4%EB%9E%98%EC%8A%A4</guid>
            <pubDate>Sun, 03 Apr 2022 04:52:49 GMT</pubDate>
            <description><![CDATA[<ul>
<li>추상 클래스란
: 추상 메서드를 항상 포함하는 클래스이며 추상 메서드는 함수의 구현 코드가 없고, abstract 예약어를 사용하여 선언만 하는 메서드다.</li>
</ul>
<br>

<ul>
<li>메서드 선언 의미
: 메서드 선언은 봐도 어떤 일을 하는 메서드인지 알 수 있다. 함수의 선언부 즉, 반환 값, 함수 이름, 매변수를 정의한다는 것은 곧 함수의 역할이 무엇인지, 어떻게 구현하는지 정의한다는 뜻이다.</li>
</ul>
<br>

<ul>
<li>추상 클래스 구현하기
<img src="https://media.vlpt.us/images/steaming_c/post/f53d6af9-c7a4-4d55-8622-25a913b269f7/1.%20%EC%B6%94%EC%83%81%20%ED%81%B4%EB%9E%98%EC%8A%A4%20%EA%B5%AC%ED%98%84%ED%95%98%EA%B8%B0.PNG" alt=""></li>
<li><blockquote>
<p>완전하게 구현되지 않은 두 추상 메서드에서 오류 발생
<img src="https://media.vlpt.us/images/steaming_c/post/f7ff2aa7-98cb-4ae6-82c9-3cd297b37962/1-2.%20%EC%B6%94%EC%83%81%20%ED%81%B4%EB%9E%98%EC%8A%A4%20%EA%B5%AC%ED%98%84%ED%95%98%EA%B8%B0%20(%EC%98%A4%EB%A5%98%20%ED%95%B4%EA%B2%B0).PNG" alt=""></p>
</blockquote>
</li>
<li><blockquote>
<p>오류 해결 : 추상 클래스와 메서드에 abstract 예약어 추가
<img src="https://media.vlpt.us/images/steaming_c/post/ccc94978-82be-4c6c-b0b5-381f143fd3df/1-3.%20%EC%B6%94%EC%83%81%20%EB%A9%94%EC%84%9C%EB%93%9C%20%EA%B5%AC%ED%98%84%ED%95%98%EA%B8%B0(DeskTop%20%ED%81%B4%EB%9E%98%EC%8A%A4).PNG" alt=""></p>
</blockquote>
</li>
<li><blockquote>
<p>추상 클래스를 상속 받은 하위 클래스는 구현되지 않은 추상 메서드를 모두 구현해야 구체적인 클래스가 된다. displya(), typing() 추상 메서드의 몸체 코드를 작성했다.
<img src="https://media.vlpt.us/images/steaming_c/post/5fd36530-41db-4526-847b-47f918ea2381/1-4.%20%EC%B6%94%EC%83%81%20%EB%A9%94%EC%84%9C%EB%93%9C%20%EA%B5%AC%ED%98%84%ED%95%98%EA%B8%B0(NoteBook%20%ED%81%B4%EB%9E%98%EC%8A%A4).PNG" alt=""></p>
</blockquote>
</li>
<li><blockquote>
<p>display() 하나만 구현했다. 추상 메서드를 하나 가지고 있기 때문에 추상 클래스가 된다.
<img src="https://media.vlpt.us/images/steaming_c/post/326d3e97-5e7a-49b4-9b8d-8e531413de66/1-5.%20%EC%B6%94%EC%83%81%20%EB%A9%94%EC%84%9C%EB%93%9C%20%EA%B5%AC%ED%98%84%ED%95%98%EA%B8%B0(MyNoteBook).PNG" alt=""></p>
</blockquote>
</li>
<li><blockquote>
<p>MyNoteBook은 모든 추상 메서드가 구현된 클래스이므로 abstract 예약어를 사용하지 않는다.</p>
</blockquote>
</li>
</ul>
<br>

<ul>
<li>추상 클래스를 만드는 이유
<img src="https://media.vlpt.us/images/steaming_c/post/a71fcd52-bacb-455d-8985-dbfcc12248f5/3.%20%EC%B6%94%EC%83%81%ED%81%B4%EB%9E%98%EC%8A%A4%20%ED%85%8C%EC%8A%A4%ED%8A%B8%ED%95%98%EA%B8%B0(%EC%98%A4%EB%A5%98).PNG" alt=""></li>
<li><blockquote>
<p>추상 클래스는 인스턴스로 생성할 수 없다. 추상 클래에서 구현하는 메서드는 하위 클래스에서도 사용할, 즉 하위 클래스에서도 구현 내용을 공유할 메서드를 구현한다. </p>
</blockquote>
</li>
</ul>
<br>

<ul>
<li>추상 클래스 재현하기
<img src="https://media.vlpt.us/images/steaming_c/post/dc4ca9d2-e09b-4a54-afb3-be434a82cc77/2-1.%20(%ED%98%BC%EC%9E%90)%20%EC%B6%94%EC%83%81%20%ED%81%B4%EB%9E%98%EC%8A%A4%20%EA%B5%AC%ED%98%84%ED%95%98%EA%B8%B0_Car%ED%81%B4%EB%9E%98%EC%8A%A4.PNG" alt="">
<img src="https://media.vlpt.us/images/steaming_c/post/b8e58b39-9e78-40fd-ad8f-0efbb4e862a4/2-2.%20(%ED%98%BC%EC%9E%90)%20%EC%B6%94%EC%83%81%20%ED%81%B4%EB%9E%98%EC%8A%A4%20%EA%B5%AC%ED%98%84%ED%95%98%EA%B8%B0_Bus%ED%81%B4%EB%9E%98%EC%8A%A4.PNG" alt="">
<img src="https://media.vlpt.us/images/steaming_c/post/828bbc39-8c38-4e57-9a50-9eebac766ba7/2-3.%20(%ED%98%BC%EC%9E%90)%20%EC%B6%94%EC%83%81%20%ED%81%B4%EB%9E%98%EC%8A%A4%20%EA%B5%AC%ED%98%84%ED%95%98%EA%B8%B0_AutoCar%20%ED%81%B4%EB%9E%98%EC%8A%A4.PNG" alt="">
<img src="https://media.vlpt.us/images/steaming_c/post/657599b3-5919-4897-844c-239603ea3e9d/2-4.%20(%ED%98%BC%EC%9E%90)%20%EC%B6%94%EC%83%81%20%ED%81%B4%EB%9E%98%EC%8A%A4%20%EA%B5%AC%ED%98%84%ED%95%98%EA%B8%B0_CarTest%20%ED%81%B4%EB%9E%98%EC%8A%A4.PNG" alt=""></li>
</ul>
<br>

<ul>
<li>템플릿 메서드
: 틀이 있는 메서드
<img src="https://media.vlpt.us/images/steaming_c/post/a7bada40-ba41-40a5-b1f2-2ab62aa0e487/4-1.%20%EC%B6%94%EC%83%81%20%ED%81%B4%EB%9E%98%EC%8A%A4%EC%99%80%20%ED%85%9C%ED%94%8C%EB%A6%BF%20%EB%A9%94%EC%84%9C%EB%93%9C_Car.PNG" alt=""></li>
<li><blockquote>
<p>자동차 시동의 켜고 끄는 방법은 어느 차나 같기 때문에 starCar()와 turnOff()는 미리 코드를 구현해두었고 drive()와 stop()은 차종에 따라 다른 방식으로 움직일 수 있기 때문에 추상 메서드로 선언했다. 이 중15~20행은 자동차가 달리는 방법을 순서대로 구현해 둔 템플릿 메서드이다.
<img src="https://media.vlpt.us/images/steaming_c/post/343a73ec-54cf-45dc-bab5-dd0a8e31d6c5/4-2.%20%EC%B6%94%EC%83%81%20%ED%81%B4%EB%9E%98%EC%8A%A4%EC%99%80%20%ED%85%9C%ED%94%8C%EB%A6%BF%20%EB%A9%94%EC%84%9C%EB%93%9C_AICar.PNG" alt="">
<img src="https://media.vlpt.us/images/steaming_c/post/f049e193-6e54-45e0-aa9e-4d39a6fe4c48/4-3.%20%EC%B6%94%EC%83%81%20%ED%81%B4%EB%9E%98%EC%8A%A4%EC%99%80%20%ED%85%9C%ED%94%8C%EB%A6%BF%20%EB%A9%94%EC%84%9C%EB%93%9C_ManualCar.PNG" alt=""></p>
</blockquote>
</li>
<li><blockquote>
<p>두 클래스 모두 Car 클래스를 상속 받고 추상 메서드인 drive()와 stop()을 구현했다.
<img src="https://media.vlpt.us/images/steaming_c/post/d9b60a37-e1e4-49dc-8a1e-0e61952b02f0/4-4.%20%EC%B6%94%EC%83%81%20%ED%81%B4%EB%9E%98%EC%8A%A4%EC%99%80%20%ED%85%9C%ED%94%8C%EB%A6%BF%20%EB%A9%94%EC%84%9C%EB%93%9C_CarTest.PNG" alt=""></p>
</blockquote>
</li>
</ul>
<br>

<ul>
<li>템플릿 메서드의 역할
: 메서드 실행 순서와 시나리오를 정의. 템플릿 메서드는 실행 순서, 즉 시나리오를 정의한 메서드이므로 바꿀 수 없다. 메서드 앞에 final 을 사용하면 상속받은 하위 클래스가 메서드를 재정의 할 수 없다. 템플렛 메서드는 로직 흐름이 이미 정해져 있는 프레임워크에서 많이 사용하는 기본 구현 방법이다.</li>
</ul>
<br>

<ul>
<li>공통으로 사용하는 메서드를 상위 클래스에 추가하기
<img src="https://media.vlpt.us/images/steaming_c/post/75a6ab72-0b05-4bb9-8655-228bbb358d10/5-1.%20(%ED%98%BC%EC%9E%90)%20%EA%B3%B5%ED%86%B5%EC%9C%BC%EB%A1%9C%20%EC%82%AC%EC%9A%A9%ED%95%98%EB%8A%94%20%EB%A9%94%EC%84%9C%EB%93%9C%EB%A5%BC%20%EC%83%81%EC%9C%84%20%ED%81%B4%EB%9E%98%EC%8A%A4%EC%97%90%20%EC%B6%94%EA%B0%80%ED%95%98%EA%B8%B0_Car.PNG" alt=""></li>
<li><blockquote>
<p>wiper() 추상 메서드 추가
<img src="https://media.vlpt.us/images/steaming_c/post/cb7a6c37-3ca0-4379-9bbe-9d1fb43d15c3/5-2.%20(%ED%98%BC%EC%9E%90)%20%EA%B3%B5%ED%86%B5%EC%9C%BC%EB%A1%9C%20%EC%82%AC%EC%9A%A9%ED%95%98%EB%8A%94%20%EB%A9%94%EC%84%9C%EB%93%9C%EB%A5%BC%20%EC%83%81%EC%9C%84%20%ED%81%B4%EB%9E%98%EC%8A%A4%EC%97%90%20%EC%B6%94%EA%B0%80%ED%95%98%EA%B8%B0_AICar.PNG" alt="">
<img src="https://media.vlpt.us/images/steaming_c/post/bc51c109-bb05-4877-b992-8cb53cb10f3a/5-3.%20(%ED%98%BC%EC%9E%90)%20%EA%B3%B5%ED%86%B5%EC%9C%BC%EB%A1%9C%20%EC%82%AC%EC%9A%A9%ED%95%98%EB%8A%94%20%EB%A9%94%EC%84%9C%EB%93%9C%EB%A5%BC%20%EC%83%81%EC%9C%84%20%ED%81%B4%EB%9E%98%EC%8A%A4%EC%97%90%20%EC%B6%94%EA%B0%80%ED%95%98%EA%B8%B0_ManualCar.PNG" alt=""></p>
</blockquote>
</li>
<li><blockquote>
<p>두 클래스에서 wiper() 추상 메서드를 구현
<img src="https://media.vlpt.us/images/steaming_c/post/5fe4a80a-9135-4ba1-981e-08b4e3fd1fbe/5-4.%20(%ED%98%BC%EC%9E%90)%20%EA%B3%B5%ED%86%B5%EC%9C%BC%EB%A1%9C%20%EC%82%AC%EC%9A%A9%ED%95%98%EB%8A%94%20%EB%A9%94%EC%84%9C%EB%93%9C%EB%A5%BC%20%EC%83%81%EC%9C%84%20%ED%81%B4%EB%9E%98%EC%8A%A4%EC%97%90%20%EC%B6%94%EA%B0%80%ED%95%98%EA%B8%B0_CarTest.PNG" alt=""></p>
</blockquote>
</li>
</ul>
<br>

<ul>
<li>템플릿 메서드 응용하기
<img src="https://media.vlpt.us/images/steaming_c/post/6e349e78-6ed7-4a3b-b3d3-0d551d079f8f/6-1.%20%EA%B2%8C%EC%9E%84%20Player.PNG" alt="">
<img src="https://media.vlpt.us/images/steaming_c/post/988c609c-4302-4d63-9770-f246e3d89be8/6-2.%20%EA%B2%8C%EC%9E%84%20PlayerLevel.PNG" alt="">
<img src="https://media.vlpt.us/images/steaming_c/post/212a13e6-e712-45ca-bdc8-59a5f7c71a91/6-3.%20%EA%B2%8C%EC%9E%84%20BeginnerLevel.PNG" alt="">
<img src="https://media.vlpt.us/images/steaming_c/post/f2e8c001-b7e5-4543-b376-5ac31be4145a/6-4.%20%EA%B2%8C%EC%9E%84%20AdvancedLevel.PNG" alt="">
<img src="https://media.vlpt.us/images/steaming_c/post/42c6b235-0309-48a8-8ed0-3832e6e69399/6-5.%20%EA%B2%8C%EC%9E%84%20SuperLevel.PNG" alt="">
<img src="https://media.vlpt.us/images/steaming_c/post/b41e8daf-66bf-4b25-bc8c-423e1291965c/6-6.%20%EA%B2%8C%EC%9E%84%20MainBoard%20%EC%B6%9C%EB%A0%A5.PNG" alt=""></li>
<li><blockquote>
<p>Player 클래스와 PlayerLevel 클래스는 포함(HAS-A) 관계이다. 게임에서 모든 Player는 자신의 레벨이 있기 때문에 Player클래스에서 PlayerLevel을 멤버 변수로 갖는다. 레벨이 올라갈수록 수행하는 기능이 달라지기 때문에 PlayerLevel 클래스를 추상 클래스로 만들어 모든 레벨에서 공통으로 수행하는 기능을 구현하고, 각 레벨마다 달라지는 기능은 추상 메서드로 만들었다. PlayerLevel을 상속받은 BeginnerLevel, AdvancedLevel, SuperLevel에서 추상 메서드로 선언한 부분을 필요에 맞게 구체적으로 구현했다. </p>
</blockquote>
</li>
</ul>
<br>

<ul>
<li>final 예약어
: 마지막으로 정한 것이니 더 이상 수정할 수 없다는 뜻이다.
final 변수 - 상수
final 메서드 - 하위 클래스에서 재정의 할 수 없음
final 클래스 - 상속 할 수 없음
<img src="https://media.vlpt.us/images/steaming_c/post/6cde7bb0-3d7e-4513-9b74-84c2129403d1/7-1.%20final%20%EC%83%81%EC%88%98.PNG" alt=""></li>
</ul>
<br>

<ul>
<li>여러 자바 파일에서 공유하는 상수 값 정의하기
<img src="https://media.vlpt.us/images/steaming_c/post/c31940ef-aa5e-4cb9-85cb-2f387e070ec5/8-1.%20%EC%97%AC%EB%9F%AC%20%ED%8C%8C%EC%9D%BC%EC%97%90%EC%84%9C%20%EA%B3%B5%EC%9C%A0%ED%95%98%EB%8A%94%20%EC%83%81%EC%88%98.PNG" alt="">
<img src="https://media.vlpt.us/images/steaming_c/post/73d8bd75-b211-48d2-bdb5-62efd8405c80/8-2.%20%EC%83%81%EC%88%98%20%EC%82%AC%EC%9A%A9%ED%95%98%EA%B8%B0.PNG" alt=""></li>
</ul>
<br>

<ul>
<li>추상 클래스와 상속 받는 클래스 구현하기
<img src="https://media.vlpt.us/images/steaming_c/post/5e93af1e-6b9a-454d-8dc4-c6de0082b77c/9-1.%20%EC%B6%94%EC%83%81%ED%81%B4%EB%9E%98%EC%8A%A4%20%EC%83%81%EC%86%8D%20Car.PNG" alt="">
<img src="https://media.vlpt.us/images/steaming_c/post/99856ef8-83f4-4e10-9cfa-628e64f23f7e/9-2.%20%EC%B6%94%EC%83%81%ED%81%B4%EB%9E%98%EC%8A%A4%20%EC%83%81%EC%86%8D%20Sonata.PNG" alt="">
<img src="https://media.vlpt.us/images/steaming_c/post/8589837d-e087-439d-a4c4-418181c00c02/9-3.%20%EC%B6%94%EC%83%81%ED%81%B4%EB%9E%98%EC%8A%A4%20%EC%83%81%EC%86%8D%20Avante.PNG" alt="">
<img src="https://media.vlpt.us/images/steaming_c/post/eddcbbb8-04aa-4d5a-ac5a-99017957c83c/9-4.%20%EC%B6%94%EC%83%81%ED%81%B4%EB%9E%98%EC%8A%A4%20%EC%83%81%EC%86%8D%20Grandeur.PNG" alt="">
<img src="https://media.vlpt.us/images/steaming_c/post/6f55a647-3926-4492-b928-3daa47eb2565/9-5.%20%EC%B6%94%EC%83%81%ED%81%B4%EB%9E%98%EC%8A%A4%20%EC%83%81%EC%86%8D%20Genesis.PNG" alt="">
<img src="https://media.vlpt.us/images/steaming_c/post/272f08c1-8d26-406d-9acc-e11d6c010db3/9-6.%20%EC%B6%94%EC%83%81%ED%81%B4%EB%9E%98%EC%8A%A4%20%EC%83%81%EC%86%8D%20CarTest%20%EC%B6%9C%EB%A0%A5.PNG" alt=""></li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[9,10일차] 8장 : 상속과 다형성]]></title>
            <link>https://velog.io/@steaming_c/910%EC%9D%BC%EC%B0%A8-8%EC%9E%A5-%EC%83%81%EC%86%8D%EA%B3%BC-%EB%8B%A4%ED%98%95%EC%84%B1</link>
            <guid>https://velog.io/@steaming_c/910%EC%9D%BC%EC%B0%A8-8%EC%9E%A5-%EC%83%81%EC%86%8D%EA%B3%BC-%EB%8B%A4%ED%98%95%EC%84%B1</guid>
            <pubDate>Sat, 02 Apr 2022 04:03:50 GMT</pubDate>
            <description><![CDATA[<ul>
<li>상속
: B클래스가 A클래스를 상속받으면 B클래스는 A클래스의 멤버 변수와 메서드를 사용할 수 있다.
A클래스 (상위 클래스)
&nbsp;&nbsp;&nbsp;^ &nbsp;&nbsp;&nbsp; = A클래스가 B클래스에게 상속한다. 
&nbsp;&nbsp;&nbsp;^ &nbsp;&nbsp;&nbsp; = B클래스가 A클래스를 상속받는다
B클래스 (하위 클래스)<pre><code>class B extends A {
}</code></pre><pre><code>class Mammal {
...
}
class Human extends Mammal {
...
}</code></pre></li>
</ul>
<br>

<ul>
<li>상속을 사용하여 고객 관리 프로그램 구현하기
<img src="https://media.vlpt.us/images/steaming_c/post/5adc77dc-e385-46ad-b2ab-de5d7030b371/1.%20Customer%20%ED%81%B4%EB%9E%98%EC%8A%A4%20%EA%B5%AC%ED%98%84%ED%95%98%EA%B8%B0.PNG" alt="">
<img src="https://media.vlpt.us/images/steaming_c/post/04436abe-2929-4a8b-9d05-7260249d5101/1-2.%20VIPCustomer%20%ED%81%B4%EB%9E%98%EC%8A%A4%20%EA%B5%AC%ED%98%84%ED%95%98%EA%B8%B0%20(%EC%83%81%EC%86%8D,%20%EC%98%A4%EB%A5%98%EB%B0%9C%EC%83%9D).PNG" alt=""></li>
<li><blockquote>
<p>VIP 클래스 8행 오류 발생 이유 : 상위클래스에서 customerGrade가 private 변수이기 때문에 외부 클래스에서는 이 변수를 사용할 수 없다. 해결방법은 protected 예약어 사용</p>
</blockquote>
</li>
</ul>
<p><img src="https://media.vlpt.us/images/steaming_c/post/21755a59-9669-4023-8752-b1eb13fd94ba/1-3.%20protected%20%EB%B3%80%EC%88%98%20%EC%84%A0%EC%96%B8%20(1)%20private%20%EB%B3%80%EC%88%98%EB%A5%BC%20protected%20%EB%B3%80%EC%88%98%EB%A1%9C%20%EB%B3%80%ED%99%98%20(VIPCustomer%20%ED%81%B4%EB%9E%98%EC%8A%A4%20%EC%98%A4%EB%A5%98%20%ED%95%B4%EA%B2%B0).PNG" alt="">
<img src="https://media.vlpt.us/images/steaming_c/post/942ebd08-d5cc-4637-8094-3609bb2714c3/1-4.%20protected%20%EB%B3%80%EC%88%98%20%EC%84%A0%EC%96%B8%20(2)%20protected%EB%A1%9C%20%EC%84%A0%EC%96%B8%ED%95%9C%20%EB%B3%80%EC%88%98%EB%93%A4%EC%9D%84%20%EC%82%AC%EC%9A%A9%ED%95%98%EA%B8%B0%20%EC%9C%84%ED%95%B4%20get(),%20set()%20%EB%A9%94%EC%84%9C%EB%93%9C%20%EC%B6%94%EA%B0%80%20(VIPCustomer%20%ED%81%B4%EB%9E%98%EC%8A%A4%20%EC%98%A4%EB%A5%98%20%ED%95%B4%EA%B2%B0).PNG" alt="">
-&gt; protected 변수로 선언하고 외부에서 사용할 수 있도록 get(), set() 메서드 추가
<img src="https://media.vlpt.us/images/steaming_c/post/3a987918-5b19-4313-9fcc-07fa424e3372/1-5.%20%EC%83%81%EC%86%8D%20%ED%81%B4%EB%9E%98%EC%8A%A4%20%ED%85%8C%EC%8A%A4%ED%8A%B8%ED%95%98%EA%B8%B0.PNG" alt=""></p>
<br>

<ul>
<li>하위 클래스가 생성되는 과정
<img src="https://media.vlpt.us/images/steaming_c/post/0b8cb435-21ec-4c85-a03c-34fd84dde040/2-1.%20%EC%83%81%EC%86%8D%EC%97%90%EC%84%9C%20%ED%81%B4%EB%9E%98%EC%8A%A4%20%EA%B3%BC%EC%A0%95(1)%20Customer%20%ED%81%B4%EB%9E%98%EC%8A%A4%EC%97%90%20%EC%B6%9C%EB%A0%A5%EB%AC%B8%20%EC%B6%94%EA%B0%80.PNG" alt=""></li>
<li><blockquote>
<p>Customer() 생성자에 출력문을 추가함. Customer 인스턴스가 생성되면 이 호출문이 출력될 것이다.
<img src="https://media.vlpt.us/images/steaming_c/post/4a64dc54-9c10-4b67-8dee-2c5ed6bd18b6/2-2.%20%EC%83%81%EC%86%8D%EC%97%90%EC%84%9C%20%ED%81%B4%EB%9E%98%EC%8A%A4%20%EA%B3%BC%EC%A0%95(2)%20VIPCustomer%20%ED%81%B4%EB%9E%98%EC%8A%A4%EC%97%90%20%EC%B6%9C%EB%A0%A5%EB%AC%B8%20%EC%B6%94%EA%B0%80.PNG" alt=""></p>
</blockquote>
</li>
<li><blockquote>
<p>VIPCustomer() 생성자에도 출력문 추가</p>
</blockquote>
</li>
</ul>
<p><img src="https://media.vlpt.us/images/steaming_c/post/0be0a65a-e29a-42fd-a363-c759b5776714/2-3.%20%ED%95%98%EC%9C%84%20%ED%81%B4%EB%9E%98%EC%8A%A4%20%EC%83%9D%EC%84%B1%ED%95%98%EA%B8%B0.PNG" alt="">
-&gt; 출력 화면을 보면 상위 클래스의 Customer() 생성자가 먼저 호출되고 그다음에 VIPCustomer()가 호출되는 것을 알 수 있다. 즉, 상위 클래스를 상속받은 하위 클래스가 생성될 때는 반드시 상위 클래스의 생성자가 먼저 호출된다. 그리고 상위 클래스 생성자가 호출될 때 상위 클래스의 멤버 변수가 메모리에 생성된다.</p>
<br>

<ul>
<li>super 예약어
: 하위 클래스에서 상위 클래스로 접근할 때 사용함. 하위 클래스는 상위 클래스의 주소, 즉 참조 값을 알고 있고 이 참조 값을 가지고 있는 예약어가 super다.</li>
</ul>
<br>

<ul>
<li>super 예약어로 매개변수가 있는 생성자 호출하기
<img src="https://media.vlpt.us/images/steaming_c/post/79263768-0d86-41b4-8909-e4db393e2742/3-1.%20Customer%20%ED%81%B4%EB%9E%98%EC%8A%A4%EC%97%90%20%EC%83%88%EB%A1%9C%EC%9A%B4%20%EC%83%9D%EC%84%B1%EC%9E%90%20%EC%B6%94%EA%B0%80%ED%95%98%EA%B8%B0.PNG" alt=""></li>
<li><blockquote>
<p>기존 Customer 클래스에 새로운 생성자를 추가하고 기존 디폴트 생성자를 삭제.
<img src="https://media.vlpt.us/images/steaming_c/post/e0977b78-fbf7-4d64-bad8-ae6f33c4f91a/3-2.%20%EB%AA%85%EC%8B%9C%EC%A0%81%EC%9C%BC%EB%A1%9C%20%EC%83%81%EC%9C%84%20%ED%81%B4%EB%9E%98%EC%8A%A4%20%EC%83%9D%EC%84%B1%EC%9E%90%20%ED%98%B8%EC%B6%9C%ED%95%98%EA%B8%B0.PNG" alt=""></p>
</blockquote>
</li>
<li><blockquote>
<p>호출될 디폴트 생성자 Customer()가 위에서 삭제됐기 때문에 다시 명시적으로 상위 클래스 생성자를 호출함.</p>
</blockquote>
</li>
</ul>
<br>

<ul>
<li>메서드 오버라이딩
: 상위 클래스에 정의한 메서드가 하위 클래스에서 구현할 내용과 맞지 않을 경우에 하위 클래스에서 이 메서드를 재정의할 수 있는데 이를 메서드 오버라이딩(method overriding)이라고 한다. *오버라이딩을 할 때에는 반환형, 메서드 이름, 매개변수 개수, 매개변수 자료형이 반드시 같아야 한다.</li>
</ul>
<br>

<ul>
<li>VIP 고객 클래스의 제품 가격 계산 (calcPrice()) 메서드 재정의하기
<img src="https://media.vlpt.us/images/steaming_c/post/39b537f2-44af-4807-9d2e-528814841e19/4-1.calcPirce()%20%EB%A9%94%EC%84%9C%EB%93%9C%20%EC%9E%AC%EC%A0%95%EC%9D%98%ED%95%98%EA%B8%B0(overriding).PNG" alt=""></li>
<li><blockquote>
<p>재정의한 메서드 / @Override 애노테이션은 &#39;이 메서드는 재정의된 메서드입니다.&#39; 라고 컴파일러에 명확히 알려주는 역할이다.<img src="https://media.vlpt.us/images/steaming_c/post/90f3ca6d-10c7-438e-a4a4-f26176c39109/4-2.%20calcPrice()%20%ED%85%8C%EC%8A%A4%ED%8A%B8%ED%95%98%EA%B8%B0.PNG" alt=""></p>
</blockquote>
</li>
<li><blockquote>
<p>두 고객을 생성해서 지불하는 가격을 출력한 테스트</p>
</blockquote>
</li>
</ul>
<br>

<ul>
<li>묵시적 클래스 형 변환과 메서드 재정의
<img src="https://media.vlpt.us/images/steaming_c/post/0fc417b0-1993-48b1-a70d-7a27767559ef/4-3.%20%ED%81%B4%EB%9E%98%EC%8A%A4%20%ED%98%95%20%EB%B3%80%ED%99%98%EA%B3%BC%20%EC%9E%AC%EC%A0%95%EC%9D%98%20%EB%A9%94%EC%84%9C%EB%93%9C%20%ED%98%B8%EC%B6%9C%ED%95%98%EA%B8%B0.PNG" alt=""></li>
<li><blockquote>
<p>멤버 변수와 메서드는 선언한 클래스형에 따라 호출되는데 위를 보면 재정의된 메서드가 호출된 것을 알 수 있다. 이는 상속에서 상위 클래스와 하위 클래스에 같은 이름의 메서드가 존재할 때 호출되는 메서드는 인스턴스에 따라 결정되기 때문이다. 즉 선언한 클래스형이 아닌 생성된 인스턴스의 메서드를 호출하는 것이다. 이렇게 인스턴스의 메서드가 호출되는 기술을 &#39;가상 메서드(virtual method)&#39; 라고 한다. </p>
</blockquote>
</li>
</ul>
<br>

<ul>
<li>가상 메서드
<img src="https://media.vlpt.us/images/steaming_c/post/8bdf635e-03a0-41d4-a773-890ca9b5d5e2/5.%20%EB%A9%94%EC%84%9C%EB%93%9C%20%ED%98%B8%EC%B6%9C%ED%95%98%EA%B8%B0(%EA%B0%80%EC%83%81%EB%A9%94%EC%84%9C%EB%93%9C).PNG" alt=""></li>
<li><blockquote>
<p>같은 객체의 인스턴스를 여러 개 생성한다고 해서 메서드도 여러 개 생성되지 않는다. 메서드의 메모리는 변수가 사용하는 메모리와 다르다. 메서드는 실행해야 할 명령 집합이기 때문에 인스턴스가 달라도 같은 로직을 수행한다.</p>
</blockquote>
</li>
</ul>
<br>

<ul>
<li>클래스형에 기반하여 지불 금액 계산하기
<img src="https://media.vlpt.us/images/steaming_c/post/3ed925a4-ea62-4883-a207-9ea9a933d373/5-2.%20%ED%81%B4%EB%9E%98%EC%8A%A4%ED%98%95%EC%97%90%20%EA%B8%B0%EB%B0%98%ED%95%98%EC%97%AC%20%EC%A7%80%EB%B6%88%20%EA%B8%88%EC%95%A1%20%EA%B3%84%EC%82%B0%ED%95%98%EA%B8%B0.PNG" alt=""></li>
<li><blockquote>
<p>마지막 13행에서 VIPCustomer로 생성하고 Customer형으로 변환한 vc는 원래 Customer형 메서드가 호출되는 것이 맞지만, 가상 메서드 방식에 의해 VIPCustomer 인스턴스의 메서드가 호출되어 할인 가격 9,000원이 출력된다.</p>
<br>
=> 정리) 상위 클래스에서 선언한 calcPrice() 메서드가 있고 이를 하위 클래스에서 재정의한 상태에서 하위 클래스 인스턴스(vc)가 상위 클래스로 형 변환이 되었다. 이때 vc.calcPrice()가 호출되면, vc변수를 선언할 때 사용한 자료형(Customer)의 메서드가 호출되는 것이 아니라 생성된 인스턴스(VIPCustomer)의 메서드가 호출된다. 이를 가상 메서드라고 하며 자바의 모든 메서드는 가상 메서드이다.
</blockquote>
</li>
</ul>
<br>

<ul>
<li>다형성
: 하나의 코드가 여러 자료형으로 구현되어 실행되는 것
<img src="https://media.vlpt.us/images/steaming_c/post/62d4c497-9735-41d5-b397-373d7fd350e0/6.%20%EB%8B%A4%ED%98%95%EC%84%B1%20%ED%85%8C%EC%8A%A4%ED%8A%B8%20%ED%95%98%EA%B8%B0.PNG" alt=""></li>
<li><blockquote>
<p>테스트를 하기 위해 AnimalTest1 클래스에 moveAnimal() 메서드를 만들었다. 이 메서드는 어떤 인스턴스가 매개변수로 넘어와도 모두 Animal형으로 변환한다. 예를 들어 매개변수가 전달되는 부분에 Human 인스턴스가 전달되었다면 Animal형으로 변환되므로 animal.move() 메서드를 호출할 수 있다. 가상 메서드의 원리에 따라 animal.move() 메서드가 호출하는 메서드는 Animal의 move가 아닌 매개변수로 넘어온 실제 인스턴스의 메서드이다. animal.move() 코드는 변함이 없지만 어떤 매개변수가 넘어왔느냐에 따라 출력문이 달라지는데 이것이 바로 다형성이다.</p>
</blockquote>
</li>
</ul>
<br>

<ul>
<li>다형성을 활용해 VIP 고객 클래스 완성하기
<img src="https://media.vlpt.us/images/steaming_c/post/35c8b224-04f4-4e3b-a56b-dbc474d86851/7-1.%20%EA%B3%A0%EA%B0%9D%20%EA%B4%80%EB%A6%AC%20%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%A8%20%EC%99%84%EC%84%B1%ED%95%98%EA%B8%B0(1)%20Customer%20%ED%81%B4%EB%9E%98%EC%8A%A4.PNG" alt=""></li>
<li><blockquote>
<p>기존 Customer 클래스 수정한 내용. initCustomer() 메서드는 클래스의 멤버 변수를 초기화 하는데, Customer 클래스를 생성하는 두 생성자에서 공통으로 사용하는 코드이므로 메서드로 분리하여 호출함
<img src="https://media.vlpt.us/images/steaming_c/post/209f0df7-3147-4fc8-89e7-f493b3f4e729/7-2.%20%EA%B3%A0%EA%B0%9D%20%EA%B4%80%EB%A6%AC%20%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%A8%20%EC%99%84%EC%84%B1%ED%95%98%EA%B8%B0%20(2)%20VIPCustomer%20%ED%81%B4%EB%9E%98%EC%8A%A4.PNG" alt=""></p>
</blockquote>
</li>
<li><blockquote>
<p>VIP 고객 클래스에서 calcPrice() 메서드와 showCustomerInfo() 메서드를 재정의 했다.
<img src="https://media.vlpt.us/images/steaming_c/post/ad21e5d7-e512-453b-b798-1256ab58ec99/7-3.%20%EA%B3%A0%EA%B0%9D%20%EA%B4%80%EB%A6%AC%20%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%A8%20%EC%99%84%EC%84%B1%ED%95%98%EA%B8%B0%20(3)%20CustomerTest%20%ED%81%B4%EB%9E%98%EC%8A%A4.PNG" alt=""></p>
</blockquote>
</li>
</ul>
<br>

<ul>
<li>새로운 고객 등급 추가하고, 배열을 활용한 고객 관리 프로그램 구현하기
<img src="https://media.vlpt.us/images/steaming_c/post/e6ce3641-da23-44d0-a2e6-2537ffe40b58/8-1.%20%EC%83%88%EB%A1%9C%EC%9A%B4%20%EA%B3%A0%EA%B0%9D%20%EB%93%B1%EA%B8%89%20%EC%B6%94%EA%B0%80%ED%95%98%EA%B8%B0(Gold).PNG" alt="">
<img src="https://media.vlpt.us/images/steaming_c/post/7db1a7b1-a7c7-42ce-b6b1-304a46bdd6ea/8-2.%20%EB%B0%B0%EC%97%B4%EC%9D%84%20%ED%99%9C%EC%9A%A9%ED%95%9C%20%EA%B3%A0%EA%B0%9D%20%EA%B4%80%EB%A6%AC%20%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%A8%20%EA%B5%AC%ED%98%84%ED%95%98%EA%B8%B0.PNG" alt="">
<img src="https://media.vlpt.us/images/steaming_c/post/b0a19915-f8d0-496f-86e9-60818517cbff/8-3.%20%EB%B0%B0%EC%97%B4%EC%9D%84%20%ED%99%9C%EC%9A%A9%ED%95%9C%20%EA%B3%A0%EA%B0%9D%20%EA%B4%80%EB%A6%AC%20%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%A8%20%EA%B5%AC%ED%98%84%ED%95%98%EA%B8%B0%20(%EC%B6%9C%EB%A0%A5).PNG" alt=""></li>
</ul>
<br>

<ul>
<li>상속 활용
: 모든 등급에서 공통으로 사용하는 코드 부분은 상위 클래스에 구현하고, 각 등급별 고객의 내용은 각각의 하위 클래스에 구현한다. 따라서 프로그램이 확장성 있고 유지보수하기 좋다.</li>
</ul>
<br>

<ul>
<li>상속 활용 관계
: IS-A 관계, 일반클래스를 점차 구체화하는 상황에서 상속 사용
: HAS-A 관계, 한 클래스가 다른 클래스를 소유한 관계에서는 상속을 사용하지 않는게 좋다. </li>
</ul>
<br>

<ul>
<li>자바는 다중 상속을 지원하지 않기 때문에 extends 예약어 뒤에 오는 클래스는 반드시 한 개여야만 한다.</li>
</ul>
<br>

<ul>
<li>다운캐스팅(downcasting)
: 상위 클래스로 형 변환되었던 하위 클래스를 다시 원래 자료형으로 형 변환하는 것을 말한다. 다운캐스팅을 하기 전에 상위 클래스로 형 변환된 인스턴스의 원래 자료형을 확인해야 변환할 때 오류를 막을 수 있다. 이때 사용하는 예약어가 instanceof 이다.<pre><code>Animal hAnimal = new Human();
if(hAnimal instanceof Human) {    //hAnimal 인스턴스 자료형이 Human형이라면
  Human human = (Human)hAnimal;     //인스턴스 hAnimal을 Human형으로 다운 캐스팅
}</code></pre><img src="https://media.vlpt.us/images/steaming_c/post/a6f0d52c-0ea7-471d-873e-dc0402151411/9-1.%20instanceof%EB%A1%9C%20%EC%9B%90%EB%9E%98%20%EC%9D%B8%EC%8A%A4%ED%84%B4%EC%8A%A4%ED%98%95%20%ED%99%95%EC%9D%B8%20%ED%9B%84%20%EB%8B%A4%EC%9A%B4%20%EC%BA%90%EC%8A%A4%ED%8C%85%ED%95%98%EA%B8%B0(1).PNG" alt="">
<img src="https://media.vlpt.us/images/steaming_c/post/c3c2d8b1-09a0-4773-830f-3432acf21f2a/9-2.%20instanceof%EB%A1%9C%20%EC%9B%90%EB%9E%98%20%EC%9D%B8%EC%8A%A4%ED%84%B4%EC%8A%A4%ED%98%95%20%ED%99%95%EC%9D%B8%20%ED%9B%84%20%EB%8B%A4%EC%9A%B4%20%EC%BA%90%EC%8A%A4%ED%8C%85%ED%95%98%EA%B8%B0(2).PNG" alt="">
<img src="https://media.vlpt.us/images/steaming_c/post/b973b579-46bc-4f49-8af4-e3ed23dee171/9-3.%20instanceof%EB%A1%9C%20%EC%9B%90%EB%9E%98%20%EC%9D%B8%EC%8A%A4%ED%84%B4%EC%8A%A4%ED%98%95%20%ED%99%95%EC%9D%B8%20%ED%9B%84%20%EB%8B%A4%EC%9A%B4%EC%BA%90%EC%8A%A4%ED%8C%85%ED%95%98%EA%B8%B0(%EC%B6%9C%EB%A0%A5).PNG" alt=""></li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[7,8일차] 7장 : 배열과 ArrayList]]></title>
            <link>https://velog.io/@steaming_c/78%EC%9D%BC%EC%B0%A8-7%EC%9E%A5-%EB%B0%B0%EC%97%B4%EA%B3%BC-ArrayList</link>
            <guid>https://velog.io/@steaming_c/78%EC%9D%BC%EC%B0%A8-7%EC%9E%A5-%EB%B0%B0%EC%97%B4%EA%B3%BC-ArrayList</guid>
            <pubDate>Thu, 31 Mar 2022 06:04:45 GMT</pubDate>
            <description><![CDATA[<ul>
<li>배열(array)을 사용하면 자료형이 같은 자료 여러 개를 한 번에 관리할 수 있다.</li>
</ul>
<br>

<ul>
<li>배열 선언과 초기화
자료형[ ] V 배열 이름 = new V 자료형[개수];
자료형 V 배열 이름[ ] = new V 자료형[개수];<pre><code>int[ ] studentIDs = new int[10]; //int형 요소가 10개인 배열 선언</code></pre></li>
</ul>
<br>

<ul>
<li>배열 초기화하기<pre><code>int[ ] studentIDs = new int[ ] {101, 102, 103}; //개수는 생략함
int[ ] studentIDs = new int[3] {101, 102, 103}; //오류 발생
int[ ] studentIDs = {101, 102, 103}; //int형 요소가 3개인 배열 생성</code></pre><pre><code>int[ ] studentIDs;     //배열 자료형 선언
studentIDs = new int[ ] {101, 102, 103};    //new int[ ]를 생략할 수 없음</code></pre></li>
</ul>
<br>

<ul>
<li>배열 선언하기<pre><code>studentIDs[0] = 10;        //배열의 첫 번째 요소에 값 10을 저장</code></pre></li>
</ul>
<br>

<ul>
<li>배열 초기화하고 출력하기
<img src="https://images.velog.io/images/steaming_c/post/3372e8b0-2eb6-47c1-8346-8fb4c2e9c03e/1.%20%EB%B0%B0%EC%97%B4%20%EC%B4%88%EA%B8%B0%ED%99%94%ED%95%98%EA%B3%A0%20%EC%B6%9C%EB%A0%A5%ED%95%98%EA%B8%B0.PNG" alt=""></li>
</ul>
<br>

<ul>
<li>배열 길이만큼 출력하기
<img src="https://images.velog.io/images/steaming_c/post/e9eacbc6-9a21-4980-a990-e8cd42c0bbba/2.%20%EB%B0%B0%EC%97%B4%20%EA%B8%B8%EC%9D%B4%EB%A7%8C%ED%81%BC%20%EC%B6%9C%EB%A0%A5%ED%95%98%EA%B8%B0.PNG" alt=""></li>
<li><blockquote>
<p>double형으로 길이가 5인 배열을 선언. 자바에서 정수 배열과 실수 배열을 별도로 초기화하지 않고 선언하면 배열의 요소 값은 0으로 초기화된다. 배열의 세번째 요소까지만 값을 저장했으므로 4,5번째 요소는 0이 출력된다.</p>
</blockquote>
</li>
</ul>
<br>

<ul>
<li>배열의 유효한 요소 값 출력하기
<img src="https://images.velog.io/images/steaming_c/post/ada14f3d-a5af-4c8e-835d-40767ee74861/3.%20%EB%B0%B0%EC%97%B4%EC%9D%98%20%EC%9C%A0%ED%9A%A8%ED%95%9C%20%EC%9A%94%EC%86%8C%20%EA%B0%92%20%EC%B6%9C%EB%A0%A5%ED%95%98%EA%B8%B0.PNG" alt=""></li>
<li><blockquote>
<p>유효한 값을 저장하고 있는 배열의 요소 개수를 알 수 있다. 12행의 반복문은 유효한 요소 개수만큼만 반복한다.</p>
</blockquote>
</li>
</ul>
<br>

<ul>
<li>알파벳 문자와 아스키 코드 값 출력하기
<img src="https://images.velog.io/images/steaming_c/post/42254775-a745-4c2b-ab40-446813b5d2fe/4.%20%EC%95%8C%ED%8C%8C%EB%B2%B3%20%EB%AC%B8%EC%9E%90%EC%99%80%20%EC%95%84%EC%8A%A4%ED%82%A4%20%EC%BD%94%EB%93%9C%20%EA%B0%92%20%EC%B6%9C%EB%A0%A5%ED%95%98%EA%B8%B0.PNG" alt=""></li>
<li><blockquote>
<p>문자 자료형 배열은 char[ ]로 선언해야 한다.</p>
</blockquote>
</li>
</ul>
<br>

<ul>
<li>객체 배열 사용하기
: 참조 자료형 변수도 여러 개를 배열로 사용할 수 있는데 객체 배열은 int나 char 등 기본 자료형 배열과 사용 방법이 다르다.
<img src="https://images.velog.io/images/steaming_c/post/9cdba940-ea30-4203-92fb-9aa96d7dce8d/5.%20%EA%B0%9D%EC%B2%B4%EB%B0%B0%EC%97%B4%EB%A7%8C%EB%93%A4%EA%B8%B0(1).PNG" alt="">
<img src="https://images.velog.io/images/steaming_c/post/621c2998-14a2-42c3-82b2-6f408a3013fd/5-2.%20%EA%B0%9D%EC%B2%B4%EB%B0%B0%EC%97%B4%EB%A7%8C%EB%93%A4%EA%B8%B0(2).PNG" alt=""></li>
<li><blockquote>
<p>인스턴스를 가리키는 주소 값 5개를 생성했다. 즉 인스턴스가 바로 생성된 것이 아님. 아래 예제를 통해 각 배열 요소에 인스턴스를 생성해 넣었다.
<img src="https://images.velog.io/images/steaming_c/post/fafb31bb-92b0-408e-8ea6-0972c977e801/5-3.%20%EA%B0%9D%EC%B2%B4%EB%B0%B0%EC%97%B4%EB%A7%8C%EB%93%A4%EA%B8%B0(3).PNG" alt=""></p>
</blockquote>
</li>
<li><blockquote>
<p>Book 인스턴스 멤버들과 Book 인스턴스를 저장한 메모리 공간 주소를 출력했다.</p>
</blockquote>
</li>
</ul>
<br>

<ul>
<li>객체 배열 만들어 활용하기_학생 관리
<img src="https://images.velog.io/images/steaming_c/post/476f043d-373d-43a9-b0f4-b8b03f97ea09/6-1.%20%EA%B0%9D%EC%B2%B4%20%EB%B0%B0%EC%97%B4%20%EB%A7%8C%EB%93%A4%EC%96%B4%20%ED%99%9C%EC%9A%A9%ED%95%98%EA%B8%B0.PNG" alt="">
<img src="https://images.velog.io/images/steaming_c/post/697642e0-e9fb-4cf1-aa50-b8874d43f1f1/6-2.%20%EA%B0%9D%EC%B2%B4%20%EB%B0%B0%EC%97%B4%20%EB%A7%8C%EB%93%A4%EC%96%B4%20%ED%99%9C%EC%9A%A9%ED%95%98%EA%B8%B0(2).PNG" alt=""></li>
</ul>
<br>

<ul>
<li>System.arraycopy()로 배열 복사하기<pre><code>System.arraycopy(복사할 배열, 복사할 첫 위치, 대상 배열, 붙여 넣을 첫 위치, 복사할 요소 개수)</code></pre><img src="https://images.velog.io/images/steaming_c/post/d308e11c-fe57-418c-9917-5539ecc36f9b/7.%20System.arraycopy()%EB%A1%9C%20%EB%B0%B0%EC%97%B4%20%EB%B3%B5%EC%82%AC%20%ED%95%98%EA%B8%B0.PNG" alt=""></li>
</ul>
<br>

<ul>
<li>객체 배열 복사하기
<img src="https://images.velog.io/images/steaming_c/post/ef336271-5280-4ee6-b46d-445511999e6a/8.%20%EA%B0%9D%EC%B2%B4%20%EB%B0%B0%EC%97%B4%20%EB%B3%B5%EC%82%AC%ED%95%98%EA%B8%B0.PNG" alt=""></li>
<li><blockquote>
<p>bookArray2 배열의 인스턴스를 따로 만들지 않았는ㄴ데 각 요소 값이 잘 출력되고 있다. 객체 배열을 사용하려면 꼭 인스턴스를 생성해서 넣어야 한다고 했는데 어찌된 일일까? (얕은 복사)</p>
</blockquote>
</li>
</ul>
<br>

<ul>
<li>객체 배열의 얕은 복사
<img src="https://images.velog.io/images/steaming_c/post/efb17451-a4bd-4e30-a5a2-45203657effe/9.%20%EA%B0%9D%EC%B2%B4%20%EB%B0%B0%EC%97%B4%EC%9D%98%20%EC%96%95%EC%9D%80%20%EB%B3%B5%EC%82%AC.PNG" alt=""></li>
<li><blockquote>
<p>bookArray1의 변경 사항이 bookArray2에 반영되었다. 객체 배열의 요소에 저장된 값은 인스턴스 자체가 아니고 인스턴스의 주소 값이기 때문에 기존 인스턴스의 주소 값만 복사한다. 결국 두 배열의 서로 다른 요소가 같은 인스턴스를 가리키고 있으므로 복사되는 배열의 인스턴스 값이 변경되면 두 배열 모두 영향을 받는 것이다. 이처럼 주소 값만 복사한다고 해서 &#39;얕은 복사(shallow copy)&#39; 라고 부른다.</p>
</blockquote>
</li>
</ul>
<br>

<ul>
<li>깊은 복사 : 인스턴스를 따로 관리하고 싶다면 직접 인스턴스를 만들고 그 값을 복사해야 한다. 이를 깊은 복사(deep copy)라고 한다.
<img src="https://images.velog.io/images/steaming_c/post/29fbf2b8-8747-4c81-955d-25f3d7f69456/10.%20%EA%B0%9D%EC%B2%B4%20%EB%B0%B0%EC%97%B4%EC%9D%98%20%EA%B9%8A%EC%9D%80%20%EB%B3%B5%EC%82%AC.PNG" alt="">
<img src="https://images.velog.io/images/steaming_c/post/8eb4dcc4-cf9a-4bf9-a36a-c9a28d8ede0b/10-2.%20%EA%B0%9D%EC%B2%B4%20%EB%B0%B0%EC%97%B4%EC%9D%98%20%EA%B9%8A%EC%9D%80%20%EB%B3%B5%EC%82%AC%20(2).PNG" alt=""></li>
<li><blockquote>
<p>bookArray1 배열 요소 값과 bookArray2의 배열 요소 값이 서로 다른 내용으로 출력됨.</p>
</blockquote>
</li>
</ul>
<br>

<ul>
<li>향상된 for문과 배열<pre><code>for(변수 : 배열) {
  반복 실행문;
}</code></pre><img src="https://images.velog.io/images/steaming_c/post/0bd1ebdc-bc06-411c-99ae-cbd3dd0eaa50/11.%20%ED%96%A5%EC%83%81%EB%90%9C%20for%EB%AC%B8%20%EC%82%AC%EC%9A%A9%ED%95%98%EA%B8%B0.PNG" alt=""></li>
</ul>
<br>

<ul>
<li>다차원 배열
:  이차원 이상으로 구현한 배열. 다차원 배열은 평면이나 공간 개념을 구현하는 데 사용한다.<pre><code>int [ ][ ] arr = new int[2][3];
ㄴ자료형    ㄴ배열 이름    ㄴ행개수, 열개수</code></pre><pre><code>int [ ][ ] arr = {{1,2,3}, {4,5,6}};</code></pre></li>
</ul>
<br>

<ul>
<li>이차원 배열 초기화하기
<img src="https://images.velog.io/images/steaming_c/post/c981f1dc-06ed-436c-846e-26f90b5b5130/12.%20%EC%9D%B4%EC%B0%A8%EC%9B%90%20%EB%B0%B0%EC%97%B4%20%EC%B4%88%EA%B8%B0%ED%99%94%20%ED%95%98%EA%B8%B0.PNG" alt=""></li>
</ul>
<br>

<ul>
<li>이차원 배열의 길이 출력하기
<img src="https://images.velog.io/images/steaming_c/post/6f0c3675-f27c-41e6-9441-0e52de90c7fa/14.%20%EC%9D%B4%EC%B0%A8%EC%9B%90%20%EB%B0%B0%EC%97%B4%EC%9D%98%20%EA%B8%B8%EC%9D%B4%20%EC%B6%9C%EB%A0%A5%ED%95%98%EA%B8%B0.PNG" alt=""></li>
<li><blockquote>
<p>위 코드를 보면 이차원 배열을 선언만 하고 초기화를 따로 하지 않았기 때문에 모두 0으로 자동 초기화 된 것을 알 수 있다. 출력된 내용 중 마지막 두 줄은 행 길이와 열 길이다.</p>
</blockquote>
</li>
</ul>
<br>

<ul>
<li>ArrayList 클래스 사용하기
: 기본 배열은 항상 배열 길이를 정하고 시작하는데 배열을 사용하는 중에는 배열 길이를 변경할 수 없기 때문에 코드를 수정해야 한다. 혹은 배열 중간에 요소를 삭제하는 경우에도 배열 요소 위치를 변경해야 한다. 이럴 때 ArrayList 클래스를 사용하여 객체 배열을 손쉽게 관리할 수 있다. <pre><code>ArrayList&lt;E&gt; 배열 이름 = new ArrayList&lt;E&gt;();</code></pre><pre><code>ex) ArrayList&lt;Book&gt; library = new ArrayList&lt;Book&gt;();</code></pre></li>
<li><blockquote>
<p>ArrayList는 java.util 패키지에 구현되어 있는 클래스이기 때문에 프로그램 시작 전에 임포트해주어야 함.</p>
</blockquote>
</li>
</ul>
<br>

<ul>
<li>ArrayList 클래스 사용하기
<img src="https://images.velog.io/images/steaming_c/post/a95bcd15-cac6-4dec-98ff-83440c95f04a/15.%20ArrayList%20%ED%81%B4%EB%9E%98%EC%8A%A4%20%EC%82%AC%EC%9A%A9%ED%95%98%EA%B8%B0.PNG" alt=""></li>
<li><blockquote>
<p>기본 배열과 다르게 배열 전체 길이를 미리 지정하지 않고 add() 메서드를 사용해 생성자만 호출하면 된다.</p>
</blockquote>
</li>
</ul>
<br>

<ul>
<li>배열 응용 프로그램_학생 성적 출력 프로그램 구현하기
<img src="https://images.velog.io/images/steaming_c/post/a95a4b6a-d5bb-4f8f-87b4-cb8265eb2c3e/17.%20%EB%B0%B0%EC%97%B4%20%EC%9D%91%EC%9A%A9%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%A8(Student%20%ED%81%B4%EB%9E%98%EC%8A%A4).PNG" alt="">
<img src="https://images.velog.io/images/steaming_c/post/7ba90706-564a-4a38-b434-f3788205172c/17-2.%20%EB%B0%B0%EC%97%B4%20%EC%9D%91%EC%9A%A9%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%A8(Subject%20%ED%81%B4%EB%9E%98%EC%8A%A4).PNG" alt="">
<img src="https://images.velog.io/images/steaming_c/post/bcdb3036-393a-4470-a757-10b2469caae1/17-3.%20%EB%B0%B0%EC%97%B4%20%EC%9D%91%EC%9A%A9%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%A8(StudentTest%20%ED%81%B4%EB%9E%98%EC%8A%A4).PNG" alt=""></li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[6일차] 6장(2) : 변수 유효 범위, static 변수 응용 - 싱글톤 패턴]]></title>
            <link>https://velog.io/@steaming_c/6%EC%9D%BC%EC%B0%A8-6%EC%9E%A52-%EB%B3%80%EC%88%98-%EC%9C%A0%ED%9A%A8-%EB%B2%94%EC%9C%84-static-%EB%B3%80%EC%88%98-%EC%9D%91%EC%9A%A9-%EC%8B%B1%EA%B8%80%ED%86%A4-%ED%8C%A8%ED%84%B4</link>
            <guid>https://velog.io/@steaming_c/6%EC%9D%BC%EC%B0%A8-6%EC%9E%A52-%EB%B3%80%EC%88%98-%EC%9C%A0%ED%9A%A8-%EB%B2%94%EC%9C%84-static-%EB%B3%80%EC%88%98-%EC%9D%91%EC%9A%A9-%EC%8B%B1%EA%B8%80%ED%86%A4-%ED%8C%A8%ED%84%B4</guid>
            <pubDate>Fri, 25 Mar 2022 05:43:52 GMT</pubDate>
            <description><![CDATA[<ul>
<li>지역 변수 (로컬 변수)
함수 내부에 선언
함수 내부에서만 사용
메모리 : 스택
함수가 호출될 때 생성되고 함수가 끝나면 소멸함</li>
</ul>
<br>

<ul>
<li>멤버 변수 (인스턴스 변수)
클래스 멤버 변수로 선언
클래스 내부에서 사용하고 private이 아니면 참조 변수로 다른 클래스에서 사용 가능
메모리 : 힙
인스턴스가 생성될 대 힙에 생성되고, 가비지 컬렉터가 메모리를 수거할 때 소멸됨</li>
</ul>
<br>

<ul>
<li>static 변수 (클래스 변수)
static 예약어를 사용하여 클래스 내부에 선언
클래스 내부에서 사용하고 private이 아니면 클래스 이름으로 다른 클래스에서 사용 가능
메모리 : 데이터 영역
프로그램이 처음 시작할 때 상수와 함께 데이터 영역에 생성되고 프로그램이 끝나고 메모리를 해제할 때 소멸됨</li>
</ul>
<br>

<ul>
<li>싱글톤 패턴이란?
객체지향프로그램에서 인스턴스를 단 하나만 생성하는 디자인 패턴을 말한다. 가령 회사의 직원들을 객체 지향 프로그램으로 구현한다고 가정할 때 직원은 여럿이지만 회사는 하나이다. 이럴 때 직원 인스턴스는 여러 개 생성하지만 회사 객체는 하나만 생성한다. </li>
</ul>
<br>

<ul>
<li>싱글톤 패턴으로 company 클래스 생성해보기
<img src="https://images.velog.io/images/steaming_c/post/8dd578d1-51aa-406e-b850-8cba3b865803/19.%20%EC%8B%B1%EA%B8%80%ED%86%A4%ED%8C%A8%ED%84%B4-%20private%20%EC%83%9D%EC%84%B1%EC%9E%90%20%EB%A7%8C%EB%93%A4%EA%B3%A0%20%EC%9D%B8%EC%8A%A4%ED%84%B4%EC%8A%A4%20%EC%83%9D%EC%84%B1%ED%95%98%EA%B3%A0%20public%20%EB%A9%94%EC%84%9C%EB%93%9C%20%EB%A7%8C%EB%93%A4%EA%B8%B0.PNG" alt="">
<img src="https://images.velog.io/images/steaming_c/post/4d3d4c5d-40ae-4347-b60b-3c97a50f24eb/20.%20%EC%8B%B1%EA%B8%80%ED%86%A4%ED%8C%A8%ED%84%B4_%EB%B3%80%EC%88%98%EC%9D%98%20%EC%A3%BC%EC%86%8C%EA%B0%92%20%EB%B9%84%EA%B5%90%ED%95%98%EA%B8%B0.PNG" alt=""></li>
</ul>
<br>

<ul>
<li>응용 1_싱글톤 패턴으로 클래스 구현 연습하기
<img src="https://images.velog.io/images/steaming_c/post/7e02739b-820b-4f86-baa9-59942ae9a2e2/21.%20(%ED%98%BC%EC%9E%90)%20Car%20%ED%81%B4%EB%9E%98%EC%8A%A4.PNG" alt="">
<img src="https://images.velog.io/images/steaming_c/post/13ced3b8-a3cb-4dda-b66a-bea8bf52c7e3/22.%20(%ED%98%BC%EC%9E%90)%20CarFactory%20%ED%81%B4%EB%9E%98%EC%8A%A4.PNG" alt="">
<img src="https://images.velog.io/images/steaming_c/post/bc26eca5-d30b-42a1-9bc8-be0dfb25abff/23.%20(%ED%98%BC%EC%9E%90)%20CarFactoryTest%20%EC%B6%9C%EB%A0%A5.PNG" alt=""></li>
</ul>
<br>

<ul>
<li>응용 2_객체 지향 프로그래밍 구현 연습하기
<img src="https://images.velog.io/images/steaming_c/post/31215f55-4b8c-4c54-b045-7648a4a0c14e/24-1.%20(%EA%B0%9D%EC%B2%B4%EA%B0%84%ED%98%91%EB%A0%A5)%20Menu%20%ED%81%B4%EB%9E%98%EC%8A%A4%20%EB%A7%8C%EB%93%A4%EA%B8%B0.PNG" alt="">
<img src="https://images.velog.io/images/steaming_c/post/1b31339c-fdac-48d7-b61e-4d2974f1b0ba/24-2.%20(%EA%B0%9D%EC%B2%B4%EA%B0%84%ED%98%91%EB%A0%A5)%20StarCoffee%20%ED%81%B4%EB%9E%98%EC%8A%A4%20%EB%A7%8C%EB%93%A4%EA%B8%B0.PNG" alt="">
<img src="https://images.velog.io/images/steaming_c/post/71b361c7-3e0a-4972-801a-1e5b2ab7592d/24-3.%20(%EA%B0%9D%EC%B2%B4%EA%B0%84%ED%98%91%EB%A0%A5)%20BeanCoffee%20%ED%81%B4%EB%9E%98%EC%8A%A4%20%EB%A7%8C%EB%93%A4%EA%B8%B0.PNG" alt="">
<img src="https://images.velog.io/images/steaming_c/post/0ce96287-4a6e-4e71-818b-b0f9265f4b67/24-4.%20(%EA%B0%9D%EC%B2%B4%EA%B0%84%ED%98%91%EB%A0%A5)%20Person%20%ED%81%B4%EB%9E%98%EC%8A%A4%20%EB%A7%8C%EB%93%A4%EA%B8%B0.PNG" alt="">
<img src="https://images.velog.io/images/steaming_c/post/b4443f45-f6c9-48cb-aa0a-e4318167cea8/24-5.%20(%EA%B0%9D%EC%B2%B4%EA%B0%84%ED%98%91%EB%A0%A5)%20CoffeeTest%20%EC%B6%9C%EB%A0%A5%ED%95%98%EA%B8%B0.PNG" alt=""></li>
</ul>
<br>

<ul>
<li>응용 3_싱글톤 패턴 사용해보기
<img src="https://images.velog.io/images/steaming_c/post/a4d7d1d5-4469-478f-8917-d307872bf8ef/25-1.%20(%EC%8B%B1%EA%B8%80%ED%86%A4%ED%8C%A8%ED%84%B4%EA%B5%AC%ED%98%84)%20Card%20%ED%81%B4%EB%9E%98%EC%8A%A4%20%EB%A7%8C%EB%93%A4%EC%96%B4%EC%84%9C%20%EC%9E%90%EB%8F%99%20%EC%B9%B4%EB%93%9C%20%EB%B2%88%ED%98%B8%20%EB%B6%80%EC%97%AC%ED%95%98%EA%B8%B0.PNG" alt="">
<img src="https://images.velog.io/images/steaming_c/post/63e8658b-ba52-4b73-b654-e3ce8a9e9bbc/25-2.%20(%EC%8B%B1%EA%B8%80%ED%86%A4%ED%8C%A8%ED%84%B4%EA%B5%AC%ED%98%84)%20CardCompany%20%ED%81%B4%EB%9E%98%EC%8A%A4%20%EB%A7%8C%EB%93%A4%EA%B8%B0.PNG" alt="">
<img src="https://images.velog.io/images/steaming_c/post/b35c0776-012b-4ee7-90f9-82faa7949ccd/25-3.%20(%EC%8B%B1%EA%B8%80%ED%86%A4%ED%8C%A8%ED%84%B4%EA%B5%AC%ED%98%84)%20CardCompanyTest%20%EC%B6%9C%EB%A0%A5.PNG" alt=""></li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[5일차] 6장(1) : this 예약어, 객체 간 협력, static 변수]]></title>
            <link>https://velog.io/@steaming_c/5%EC%9D%BC%EC%B0%A8-6%EC%9E%A51-this-%EC%98%88%EC%95%BD%EC%96%B4-%EA%B0%9D%EC%B2%B4-%EA%B0%84-%ED%98%91%EB%A0%A5-static-%EB%B3%80%EC%88%98</link>
            <guid>https://velog.io/@steaming_c/5%EC%9D%BC%EC%B0%A8-6%EC%9E%A51-this-%EC%98%88%EC%95%BD%EC%96%B4-%EA%B0%9D%EC%B2%B4-%EA%B0%84-%ED%98%91%EB%A0%A5-static-%EB%B3%80%EC%88%98</guid>
            <pubDate>Thu, 24 Mar 2022 06:15:07 GMT</pubDate>
            <description><![CDATA[<ul>
<li>자신의 메모리를 가리키는 this
: 생성된 인스턴스 스스로를 가리키는 예약어다.
<img src="https://images.velog.io/images/steaming_c/post/af4a2fd2-5d11-4454-9ed3-bd65b382a9b5/1.%20this%20%EC%B6%9C%EB%A0%A5%ED%95%98%EA%B8%B0.PNG" alt=""></li>
</ul>
<br>

<ul>
<li>this로 다른 생성자 호출하기
<img src="https://images.velog.io/images/steaming_c/post/db6f2740-4566-44b3-86af-baa5a8019098/2.%20this%EB%A1%9C%20%EB%8B%A4%EB%A5%B8%20%EC%83%9D%EC%84%B1%EC%9E%90%20%ED%98%B8%EC%B6%9C%ED%95%98%EA%B8%B0.PNG" alt=""></li>
</ul>
<br>

<ul>
<li>자신의 주소를 반환하는 this
<img src="https://images.velog.io/images/steaming_c/post/a1f7fed5-ccaa-4993-a04b-8b4d3775ba42/3.%20this%EB%A5%BC%20%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC%20%EC%A3%BC%EC%86%8C%20%EA%B0%92%20%EB%B0%98%ED%99%98%ED%95%98%EA%B8%B0.PNG" alt=""></li>
</ul>
<br>

<ul>
<li>객체 간 협력
1) 학생 클래스
<img src="https://images.velog.io/images/steaming_c/post/95dc8043-8fc9-44b9-9ae7-0e66963adbcf/8.%20%ED%83%9D%EC%8B%9C%EC%B6%94%EA%B0%80_%ED%95%99%EC%83%9D%ED%81%B4%EB%9E%98%EC%8A%A4.PNG" alt="">
2) 버스 클래스
<img src="https://images.velog.io/images/steaming_c/post/4b8b01d8-a21c-4cf7-bdfd-863cd0804650/5.%20%EA%B0%9D%EC%B2%B4%EA%B0%84%20%ED%98%91%EB%A0%A5_%EB%B2%84%EC%8A%A4%ED%81%B4%EB%9E%98%EC%8A%A4%20%EA%B5%AC%ED%98%84.PNG" alt="">
3) 지하철 클래스
<img src="https://images.velog.io/images/steaming_c/post/3a8d31c3-13b6-483c-b15f-6151063de38b/6.%20%EA%B0%9D%EC%B2%B4%EA%B0%84%20%ED%98%91%EB%A0%A5_%EC%A7%80%ED%95%98%EC%B2%A0%ED%81%B4%EB%9E%98%EC%8A%A4%20%EA%B5%AC%ED%98%84.PNG" alt="">
4) 택시 클래스
<img src="https://images.velog.io/images/steaming_c/post/65b216d9-f929-475a-b777-f0cd701bffb3/8-2.%20%ED%83%9D%EC%8B%9C%EC%B6%94%EA%B0%80_%ED%83%9D%EC%8B%9C%ED%81%B4%EB%9E%98%EC%8A%A4.PNG" alt="">
5) 교통수단을 활용하는 학생 인스턴스 생성하여 결과 출력하기
<img src="https://images.velog.io/images/steaming_c/post/e8c49b5f-7ec6-4e68-8e85-229d1d307e47/8-3.%20%ED%83%9D%EC%8B%9C%EC%B6%94%EA%B0%80_%EA%B0%9D%EC%B2%B4%EA%B0%84%ED%98%91%EB%A0%A5.PNG" alt="">
=&gt; 이 프로그램에서 사용한 객체는 학생, 버스, 지하철, 택시다. 각 객체에 필요한 멤버 변수를 선언하고 생성자를 정의하고 객체 사이의 협력 기능도 구현했다.
학생 객체 입장 : 학생이 지하철을 탄다.
지하철 객체 입장 : 지하철에 학생이 탄다.
즉, 하나의 경우에 대해 두 객체에서 서로 다른 일이 발생하는 것이므로 이를 각각의 클래스에 메서드로 구현했다.</li>
</ul>
<br>

<ul>
<li>static 변수 = 정적변수 = 클래스 변수
: 클래스 내부에 선언하지만 다른 멤버 변수처럼 인스턴스가 생성될 때마다 새로 생성되는 변수가 아니라 프로그램이 실행되어 메모리에 올라갔을 때 딱 한 번 메모리 공간이 할당된다. 이 값은 모든 인스턴스가 공유한다. 즉 일반 멤버 변수는 인스턴스가 생성될 때 마다 새로 생성되어 각각 다른 studentName을 가지게 되지만, static으로 선언한 변수는 인스턴스 생성과 상관없이 먼저 생성되고 그 값을 모든 인스턴스가 공유하게 된다.</li>
</ul>
<br>

<ul>
<li>static 변수 사용하여 학번이 자동으로 부여되는 프로그램 만들기
<img src="https://images.velog.io/images/steaming_c/post/8013bf33-3fbf-45a6-a47c-416b080d2a7b/11.%20%ED%95%99%EB%B2%88%20%EC%9E%90%EB%8F%99%EC%9C%BC%EB%A1%9C%20%EB%B6%80%EC%97%AC%ED%95%98%EA%B8%B0_static%EB%B3%80%EC%88%98%20%EC%84%A0%EC%96%B8.PNG" alt="">
<img src="https://images.velog.io/images/steaming_c/post/82c75777-53a9-4b1e-8b81-3b0427e0b63d/12.%20%ED%95%99%EB%B2%88%20%ED%99%95%EC%9D%B8%ED%95%98%EA%B8%B0.PNG" alt=""></li>
</ul>
<br>

<ul>
<li>클래스 이름으로 static 변수 참조하기
<img src="https://images.velog.io/images/steaming_c/post/d195aa38-3020-4f81-a519-5d253c19fcb3/13.%20%ED%81%B4%EB%9E%98%EC%8A%A4%20%EC%9D%B4%EB%A6%84%EC%9C%BC%EB%A1%9C%20static%20%EB%B3%80%EC%88%98%20%EC%B0%B8%EC%A1%B0%ED%95%98%EA%B8%B0%20(serialNum%20%EB%B3%80%EC%88%98%EB%A5%BC%20%EC%A7%81%EC%A0%91%20%ED%81%B4%EB%9E%98%EC%8A%A4%20%EC%9D%B4%EB%A6%84%EC%9C%BC%EB%A1%9C%20%EC%B0%B8%EC%A1%B0).PNG" alt=""></li>
</ul>
<br> 

<ul>
<li>클래스 메서드
: 일반 멤버 변수를 위한 메서드가 존재하듯이 static 변수를 위한 메서드도 있다. 이런 메서드를 &#39;static 메서드&#39; 또는 &#39;클래스 메서드&#39; 라고 한다.
예문에서는 serialNum변수를 사용하는 메서드를 만들어 보았다.
<img src="https://images.velog.io/images/steaming_c/post/38a62956-2aaf-4659-86bc-ebec36475f60/14.%20serialNum%EC%9D%98%20get(),%20set()%20%EB%A9%94%EC%84%9C%EB%93%9C%20%EC%82%AC%EC%9A%A9%ED%95%98%EA%B8%B0.PNG" alt="">
<img src="https://images.velog.io/images/steaming_c/post/394c0d0d-f49d-4c9c-b178-e68659fdf7a5/15.%20serialNum%EC%9D%98%20get(),%20set()%20%EB%A9%94%EC%84%9C%EB%93%9C%20%EC%82%AC%EC%9A%A9%ED%95%B4%EC%84%9C%20%ED%95%99%EB%B2%88%20%EC%B6%9C%EB%A0%A5%ED%95%98%EA%B8%B0.PNG" alt=""></li>
</ul>
<br>

<ul>
<li>클래스 메서드 내부에서는 인스턴스 변수를 사용할 수 없다. 인스턴스 변수는 인스턴스가 생성될 때 만들어지기 때문이다. 반면 클래스 메서드와 클래스 변수는 인스턴스가 생성되지 않아도 사용할 수 있다.
<img src="https://images.velog.io/images/steaming_c/post/60aad170-64e2-4e52-b1e6-9b1d0d11ad15/16.%20StudentName%20%EB%B3%80%EC%88%98%20%EC%82%B4%ED%8E%B4%EB%B3%B4%EA%B8%B0.PNG" alt=""></li>
</ul>
<br>

<ul>
<li>응용
<img src="https://images.velog.io/images/steaming_c/post/2a026c27-95a7-41d8-94e8-653ac5e06c99/17.%20(%ED%98%BC%EC%9E%90)%20static%20%EB%B3%80%EC%88%98%EC%99%80%20static%20%EB%A9%94%EC%84%9C%EB%93%9C%20%EC%97%B0%EC%8A%B5%ED%95%98%EA%B8%B0_%ED%95%99%EB%B2%88%EC%97%90%20%ED%95%99%EC%83%9D%20%EC%B9%B4%EB%93%9C%20%EB%B2%88%ED%98%B8%EB%A5%BC%20100%EC%94%A9%20%EB%8D%94%ED%95%98%EA%B8%B0.PNG" alt="">
<img src="https://images.velog.io/images/steaming_c/post/15f7ceae-97dc-467b-a7e8-ab96b434daf6/18.%20(%ED%98%BC%EC%9E%90)%20static%20%EB%B3%80%EC%88%98%EC%99%80%20static%20%EB%A9%94%EC%84%9C%EB%93%9C%20%EC%97%B0%EC%8A%B5%ED%95%98%EA%B8%B0_%EC%B6%9C%EB%A0%A5.PNG" alt=""></li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[4일차] 5장(2) : 참조 자료형, 정보 은닉]]></title>
            <link>https://velog.io/@steaming_c/4%EC%9D%BC%EC%B0%A8-5%EC%9E%A52-%EC%B0%B8%EC%A1%B0-%EC%9E%90%EB%A3%8C%ED%98%95-%EC%A0%95%EB%B3%B4-%EC%9D%80%EB%8B%89</link>
            <guid>https://velog.io/@steaming_c/4%EC%9D%BC%EC%B0%A8-5%EC%9E%A52-%EC%B0%B8%EC%A1%B0-%EC%9E%90%EB%A3%8C%ED%98%95-%EC%A0%95%EB%B3%B4-%EC%9D%80%EB%8B%89</guid>
            <pubDate>Wed, 23 Mar 2022 03:07:03 GMT</pubDate>
            <description><![CDATA[<ul>
<li>참조 자료형이란?
크기가 정해진 기본 자료형(int, char, float, double 등..)이 아닌 자료형으로, 프로그래머가 필요에 의해 만든 클래스를 사용할 수도 있고 JDK에서 제공하는 클래스를 사용할 수도 있다. (String 등) 기본 자료형을 사용하듯이 클래스 자료형 변수를 선언해서 사용한다고 생각하면 이해하기 쉬움.</li>
</ul>
<br>

<pre><code>&lt;기본&gt;</code></pre><p><img src="https://images.velog.io/images/steaming_c/post/11314582-b35d-4dbe-aa57-fc67ef754b96/17.%20%ED%95%99%EC%83%9D%ED%81%B4%EB%9E%98%EC%8A%A4%EB%A7%8C%EB%93%A4%EA%B8%B0_%EA%B3%BC%EB%AA%A9%EC%84%B1%EC%A0%81.PNG" alt=""></p>
<pre><code>&lt;과목 이름 변수 추가&gt;</code></pre><p><img src="https://images.velog.io/images/steaming_c/post/266dae3c-d8a2-4839-b6ab-779dbc33b7ae/18.%20%ED%95%99%EC%83%9D%ED%81%B4%EB%9E%98%EC%8A%A4%EB%A7%8C%EB%93%A4%EA%B8%B0_%EA%B3%BC%EB%AA%A9%EC%9D%B4%EB%A6%84%20%EB%B3%80%EC%88%98%20%EC%B6%94%EA%B0%80.PNG" alt=""></p>
<pre><code>&lt;과목 클래스 만들기&gt;</code></pre><p><img src="https://images.velog.io/images/steaming_c/post/54ec5b69-0fd4-4398-a223-86e2cf703876/20.%20%EA%B3%BC%EB%AA%A9%ED%81%B4%EB%9E%98%EC%8A%A4%EB%A7%8C%EB%93%A4%EA%B8%B0.PNG" alt=""></p>
<pre><code>&lt;과목 클래스를 분리해서 만들기&gt;</code></pre><p><img src="https://images.velog.io/images/steaming_c/post/2574f39f-7051-4076-8300-a808decfe967/19.%20%ED%95%99%EC%83%9D%ED%81%B4%EB%9E%98%EC%8A%A4%EB%A7%8C%EB%93%A4%EA%B8%B0_%EA%B3%BC%EB%AA%A9%ED%81%B4%EB%9E%98%EC%8A%A4%EB%A1%9C%20%EB%B6%84%EB%A6%AC%ED%95%98%EC%97%AC%20%EC%B0%B8%EC%A1%B0%20%EC%9E%90%EB%A3%8C%ED%98%95%20%ED%81%B4%EB%9E%98%EC%8A%A4.PNG" alt=""></p>
<br>

<ul>
<li>접근 제어자
: 객체 지향 프로그램에서는 예약어를 사용해 클래스 내부의 변수나 메섣, 생성자에 대한 접근 권한을 지정할 수 있다. 이러한 예약어를  &#39;접근 제어자(access modifier)&#39;라고 한다. ex) public, private</li>
</ul>
<br>

<ul>
<li>public 예약어 
: public이라고 선언한 변수나 메서드는 외부 클래스에서 접근이 가능하며 외부 클래스가 사용할 수 있다.</li>
</ul>
<br>

<ul>
<li>private 예약어
: 외부 클래스에서 사용 불가</li>
</ul>
<p><img src="https://images.velog.io/images/steaming_c/post/69275eab-13c5-45a1-9e15-17bbcba87d50/21.%20private%20%EC%82%AC%EC%9A%A9%ED%95%98%EA%B8%B0.PNG" alt=""></p>
<p><img src="https://images.velog.io/images/steaming_c/post/5471b9f2-f7ef-45f8-9ac4-4ba4a5989474/22.%20private%20%EB%B3%80%EC%88%98%20%ED%85%8C%EC%8A%A4%ED%8A%B8%ED%95%98%EA%B8%B0.PNG" alt=""></p>
<br>

<ul>
<li>get(), set() 메서드 사용
: private로 선언한 변수를 외부 코드에서 사용하려면 public를 제공해야 한다. get(), set() 메서드를 사용할 수 있다.</li>
</ul>
<p><img src="https://images.velog.io/images/steaming_c/post/a34194de-5323-4b55-84f0-1b0cdb3f68ae/23.%20private%20%EB%B3%80%EC%88%98%EC%97%90%20get(),%20set()%20%EB%A9%94%EC%84%9C%EB%93%9C%20%EC%82%AC%EC%9A%A9%ED%95%98%EA%B8%B0.PNG" alt=""></p>
<p><img src="https://images.velog.io/images/steaming_c/post/96c2a063-a1fa-4f17-9308-f34ca7e34afa/24.%20private%20%EB%B3%80%EC%88%98%EC%97%90%20%EC%A0%91%EA%B7%BC%ED%95%98%EA%B8%B0.PNG" alt=""></p>
<br>

<ul>
<li>정보은닉이란?
: 클래스의 멤버 변수를 public으로 선언하면 접근이 제한되지 않으므로 정보의 오류가 발생할 수 있다. 이런 경우에는 오류가 나더라도 그 값이 해당 변수에 대임되지 못하도록 변수를 private로 바꾸고 public 메서드를 별도로 제공해야 한다.
: 클래스 내부에서 사용할 변수나 메서드는 private로 선언해서 외부에서 접근하지 못하도록 하는 것을 객체 지향에서는 &#39;정보 은닉(information hiding)&#39;이라고 한다. 자바에서는 접근 제어자를 사용하여 정보 은닉을 구현한다. </li>
</ul>
<br>

<ul>
<li>자바에서 사용하는 접근 제어자
public : 외부 클래스 어디에서나 접근 가능
protected : 같은 패키지 내부와 상속 관계의 클래스에서만 접근할 수 있고 그 외 클래스에서는 접근할 수 없다.
아무것도 없는 경우 : default이며 같은 패키지 내부에서만 접근할 수 있다.
private : 같은 클래스 내부에서만 접근할 수 있다.</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[3일차] 5장(1) : 클래스, 메서드, 인스턴스, 생성자]]></title>
            <link>https://velog.io/@steaming_c/3%EC%9D%BC%EC%B0%A8-5%EC%9E%A51-%ED%81%B4%EB%9E%98%EC%8A%A4-%EB%A9%94%EC%84%9C%EB%93%9C-%EC%9D%B8%EC%8A%A4%ED%84%B4%EC%8A%A4-%EC%83%9D%EC%84%B1%EC%9E%90</link>
            <guid>https://velog.io/@steaming_c/3%EC%9D%BC%EC%B0%A8-5%EC%9E%A51-%ED%81%B4%EB%9E%98%EC%8A%A4-%EB%A9%94%EC%84%9C%EB%93%9C-%EC%9D%B8%EC%8A%A4%ED%84%B4%EC%8A%A4-%EC%83%9D%EC%84%B1%EC%9E%90</guid>
            <pubDate>Tue, 22 Mar 2022 06:33:25 GMT</pubDate>
            <description><![CDATA[<ul>
<li>객체 지향 프로그램
: 객체를 기반으로 하는 프로그램
: &#39;어떤 대상(객체)을 가지고 프로그래밍한다&#39;고 이해하면 됨
: 객체를 정의하고 객체 간 협력을 프로그래밍 하는 것</li>
</ul>
<br>

<ul>
<li>절차 지향 프로그래밍
: 순서대로 일어나는 일을 시간순으로 프로그래밍하는 것 ex. C 언어</li>
</ul>
<br>

<ul>
<li>클래스
: 객체 지향 프로그램은 클래스를 기반으로 프로그래밍한다. 클래스는 객체의 속성과 기능을 코드로 구현한 것. 객체를 클래스로 구현하는 것을 &#39;클래스를 정의한다&#39;라고 함.<pre><code>(접근 제어자) class 클래스 이름 {
  멤버 변수;
  메서드;
}</code></pre></li>
</ul>
<p>-&gt; 학생 클래스 만들기
<img src="https://images.velog.io/images/steaming_c/post/9ebc7f68-1b0c-4105-859a-6c09c6721272/1.%ED%95%99%EC%83%9D%ED%81%B4%EB%9E%98%EC%8A%A4%20%EB%A7%8C%EB%93%A4%EA%B8%B0.PNG" alt=""></p>
<br>

<p>-&gt; 학생 이름과 주소 출력하는 메서드 만들기
<img src="https://images.velog.io/images/steaming_c/post/3f5ae7e5-c1bc-427d-9c2b-cadfdd56b8cc/3.%20%ED%95%99%EC%83%9D%20%EC%9D%B4%EB%A6%84%EA%B3%BC%20%EC%A3%BC%EC%86%8C%20%EC%B6%9C%EB%A0%A5%ED%95%98%EB%8A%94%20%EB%A9%94%EC%84%9C%EB%93%9C%20%EB%A7%8C%EB%93%A4%EA%B8%B0.PNG" alt=""></p>
<br>

<ul>
<li>패키지
: 클래스 파일의 묶음. 계층구조를 가질 수 있음. 전체 프로젝트의 소스 코드를 어떻게 관리할지와 관련있음.</li>
</ul>
<br>

<ul>
<li>패키지 선언하기<pre><code>package domain.student.view;
</code></pre></li>
</ul>
<p>public class StudentView {</p>
<p>  }</p>
<pre><code>    -&gt; 클래스 이름: StudentView
    -&gt; 클래스의 전체 이름(class full name): domain.student.view.StudentView

&lt;br&gt;

* 함수 정의하기</code></pre><p>int add (int num1, int num2) {        // int = 함수 반환형 / add = 함수 이름 / (int num1, int num2) = 매개변수
    int result;
    result = num1 + num2;
    return result;                    // return = return 예약어</p>
<pre><code>
&lt;br&gt;

* 함수 반환형 void = 반환할 값이 없다는 예약어

&lt;br&gt;

* 함수 구현하고 호출하기
![](https://images.velog.io/images/steaming_c/post/831aa152-d684-4021-98e5-3daaf14c4d0c/4.%20%ED%95%A8%EC%88%98%20%EA%B5%AC%ED%98%84%ED%95%98%EA%B3%A0%20%ED%98%B8%EC%B6%9C%ED%95%98%EA%B8%B0.PNG)

&lt;br&gt;

* 함수 호출과 스택 메모리 (p.138)
: 함수를 호출하면 그 함수만을 위한 메모리 공간이 할당되는데 이 메모리 공간을 스택(stack)이라고 부름. 스택은 마지막에 추가된 자료부터 순서대로 꺼내서 사용할 수 있으며 LIFO(Last In First Out) 구조라고 부른다.

&lt;br&gt;

* 학생 이름을 반환/부여하는 메서드
![](https://images.velog.io/images/steaming_c/post/dc3707c2-2640-4470-abba-5a62f15f3214/6.%20%ED%95%99%EC%83%9D%20%EC%9D%B4%EB%A6%84%EC%9D%84%20%EB%B0%98%ED%99%98%ED%95%98%EA%B3%A0%20%EB%B6%80%EC%97%AC%ED%95%98%EB%8A%94%20%EB%A9%94%EC%84%9C%EB%93%9C.PNG)

&lt;br&gt;

* 클래스 내부에 main 함수 만들기
![](https://images.velog.io/images/steaming_c/post/696bcb1c-123f-4e5a-ac66-fc91b9a715e0/7.%20Student%20%ED%81%B4%EB%9E%98%EC%8A%A4%EC%97%90%20main()%20%ED%95%A8%EC%88%98%20%EC%B6%94%EA%B0%80%ED%95%98%EA%B8%B0.PNG)

&lt;br&gt;

* 클래스 외부에 main()함수를 포함한 실행 클래스 따로 만들기
![](https://images.velog.io/images/steaming_c/post/8309e475-6804-4316-8bf8-a4f571fa0e15/8.%20StudentTest%20%EC%8B%A4%ED%96%89%20%ED%81%B4%EB%9E%98%EC%8A%A4%20%EB%A7%8C%EB%93%A4%EA%B8%B0.PNG)

&lt;br&gt;

* new 예약어로 클래스 생성하기
: 클래스형V변수 이름 = newV생성자;</code></pre><p>Student studentAhn = new Student();</p>
<pre><code>    -&gt; 여기서 studentAhn를 참조변수라고 하고, 이 변수가 생성된 인스턴스를 가리킨다.
    -&gt; 클래스는 하나지만 이 클래스로부터 여러 개의 각각 다른 인스턴스를 생성할 수 있다. 어떤 학교에서 학생이란 추상어는 뜻이 하나지만, 그 학교에 다니는 학생 개개인은 여러 명인 것과 마찬가지다.

&lt;br&gt;

* 인스턴스 여러 개 생성하기
![](https://images.velog.io/images/steaming_c/post/a52f48ca-84d2-4484-8c17-c686555aea89/9.%20%EC%9D%B8%EC%8A%A4%ED%84%B4%EC%8A%A4%20%EC%97%AC%EB%9F%AC%20%EA%B0%9C%20%EC%83%9D%EC%84%B1%ED%95%98%EA%B8%B0.PNG)

&lt;br&gt;

* 참조 변수 사용하기</code></pre><p>참조 변수.멤버 변수
참조 변수.메서드</p>
<pre><code></code></pre><p>studentAhn.studentName = &#39;홍길동&#39;;    // studentName 멤버 변수 사용
System.out.print(studentAhn.getStudentName());    //getStudentName()메서드 사용</p>
<pre><code>
&lt;br&gt;

* 참조 값 출력하기
![](https://images.velog.io/images/steaming_c/post/6a207be1-77b4-4801-bdf1-f78bf7ae5490/10.%20%EC%B0%B8%EC%A1%B0%EA%B0%92%20%EC%B6%9C%EB%A0%A5%ED%95%98%EA%B8%B0.PNG)
    -&gt; &#39;클래스이름@주소값&#39; =&gt; 주소값은 다른 말로 해시코드라고도 함
    -&gt; 해시코드는 자바 가상 머신에서 객체가 생성되었을 때 생성된 객체에 할당하는 가상 주소 값.

&lt;br&gt;

* 예제
![](https://images.velog.io/images/steaming_c/post/49cc0da0-d4f9-4e52-bcdd-b9a7014d739d/11.%20%ED%98%BC%EC%9E%90%EC%BD%94%EB%94%A9_%ED%81%B4%EB%9E%98%EC%8A%A4%EB%A7%8C%EB%93%A4%EA%B8%B0.PNG)

![](https://images.velog.io/images/steaming_c/post/0b575b8e-dc70-43f1-bafa-079c556e6af9/12.%20%ED%98%BC%EC%9E%90%EC%BD%94%EB%94%A9_%EC%A3%BC%EB%AC%B8%EC%84%9C%20%EB%A7%8C%EB%93%A4%EA%B8%B0.PNG)

&lt;br&gt;

* 생성자 테스트 하기
![](https://images.velog.io/images/steaming_c/post/ed3c79d8-7031-45ec-bb26-9cb18f9b0065/13.%20%EC%83%9D%EC%84%B1%EC%9E%90%20%EB%A7%8C%EB%93%A4%EA%B3%A0%20%ED%85%8C%EC%8A%A4%ED%8A%B8%20%ED%95%98%EA%B8%B0.PNG)

&lt;br&gt;

* 생성자
위 예제에서 자바에서 클래스를 생성할 때 사용하는 Person() 같은 함수를 생성자라고 한다. 생성자가 하는 일은 클래스를 처음 만들 때 멤버 변수나 상수를 초기화하는 것.

&lt;br&gt;

* 디폴트 생성자
![](https://images.velog.io/images/steaming_c/post/ebb2db4f-3ebe-4b00-b794-65047efd7565/14.%20%EB%94%94%ED%8F%B4%ED%8A%B8%20%EC%83%9D%EC%84%B1%EC%9E%90.PNG)

&lt;br&gt;

* 생성자 만들기
![](https://images.velog.io/images/steaming_c/post/56565453-8740-45a0-90b6-f6c48d2cca7d/15.%20%EC%83%9D%EC%84%B1%EC%9E%90%20%ED%85%8C%EC%8A%A4%ED%8A%B8%20%ED%95%98%EA%B8%B0.PNG)
    -&gt; PersonTest를 실행하면 오류가 뜨는데 생성자를 직접 구현하여 디폴트 생성자가 없기 때문이다. 자바 컴파일러는 생성자가 하나도 없는 경우에만 디폴트 생성자를 제공한다. 오류를 해결하려면 디폴트 생성자도 직접 추가하면 됨.

&lt;br&gt;

* 매개변수가 있는 생성자_사용하기
![](https://images.velog.io/images/steaming_c/post/0fa626fe-ca24-4f33-b71f-6c49090ea68e/16-1%20%EA%B0%81%EC%A3%BC.PNG)

&lt;br&gt;

* 매개변수가 있는 생성자_테스트 클래스 구현하기
![](https://images.velog.io/images/steaming_c/post/4f89ec8a-6baf-481c-9117-169380437c61/16-2.%20%EA%B0%81%EC%A3%BC.PNG)
</code></pre>]]></description>
        </item>
        <item>
            <title><![CDATA[[2일차] 4장 : 조건문과 반복문]]></title>
            <link>https://velog.io/@steaming_c/2%EC%9D%BC%EC%B0%A8-4%EC%9E%A5-%EC%A1%B0%EA%B1%B4%EB%AC%B8%EA%B3%BC-%EB%B0%98%EB%B3%B5%EB%AC%B8</link>
            <guid>https://velog.io/@steaming_c/2%EC%9D%BC%EC%B0%A8-4%EC%9E%A5-%EC%A1%B0%EA%B1%B4%EB%AC%B8%EA%B3%BC-%EB%B0%98%EB%B3%B5%EB%AC%B8</guid>
            <pubDate>Mon, 21 Mar 2022 13:20:54 GMT</pubDate>
            <description><![CDATA[<ul>
<li>if문<pre><code>if(조건식){
  수행문;    //조건식이 참일 경우에 이 문장을 수행
}</code></pre></li>
</ul>
<br>

<ul>
<li>if-else문<pre><code>if(조건식){
  수행문1;    //조건식이 참일 경우에 이 문장을 수행
}
else{
  수행문2;    //조건식이 거짓일 경우에 이 문장을 수행
}</code></pre><img src="https://images.velog.io/images/steaming_c/post/68ebcb01-2b19-407c-b0e0-52fcc1a6079b/1.%20%EB%82%98%EC%9D%B4%EC%97%90%20%EB%94%B0%EB%9D%BC%20%EB%8B%A4%EB%A5%B8%20%EB%AC%B8%EC%9E%A5%20%EC%B6%9C%EB%A0%A5%ED%95%98%EA%B8%B0.PNG" alt=""></li>
</ul>
<br>

<ul>
<li>if-else if-else문<pre><code>if(조건식1){
  수행문1;        //조건식1이 참일 경우에 수행함
}
else if(조건식2){
  수행문2;        //조건식2가 참일 경우에 수행함
}
else if(조건식3){
  수행문3;        //조건식3가 참일 경우에 수행함
}
else{
  수행문4;        //위의 조건이 모두 해당하지 않는 경우에 수행함
  return;        //해당 메서드를 종료시킴
}
수행문5;            //if-else if-else문이 모두 끝난 후 수행함 </code></pre><img src="https://images.velog.io/images/steaming_c/post/b83c4a57-e166-4fb6-8682-486efce3f001/2.%20if-else%20if-else%EB%AC%B8%EC%9C%BC%EB%A1%9C%20%EC%9E%85%EC%9E%A5%EB%A3%8C%20%EA%B3%84%EC%82%B0%ED%95%98%EA%B8%B0.PNG" alt=""></li>
</ul>
<br>

<ul>
<li>if-else문과 if-if문의 차이
: if-else문은 하나의 조건을 만족하면 나머지 조건을 비교하지 않고 다음 수행문으로 넘어가지만, if문으로만 이루어진 코드는 조건마다 각각 비교하여 결과를 출력한다.</li>
</ul>
<br>

<ul>
<li>switch-case문
: case의 값에 문자열 사용 가능 
: break;를 사용하여 switch-case문의 수행을 멈추고 빠져나가도록 만듦<pre><code>switch(조건){
  case 값1 : 수행문1; break;
  case 값2 : 수행문2; break;
  case 값3 : 수행문3; break;
  default  : 수행문4;</code></pre><img src="https://images.velog.io/images/steaming_c/post/e61b556f-1345-4b68-b21d-ac25cfed5286/5.%20Switch-case%EB%AC%B8%EC%9C%BC%EB%A1%9C%20%EB%A9%94%EB%8B%AC%20%EC%83%89%EA%B9%94%20%EC%A0%95%ED%95%98%EA%B8%B02.PNG" alt="">
<img src="https://images.velog.io/images/steaming_c/post/f5e491b7-6bca-40dc-8a81-745e56e1280d/6.%20Switch-case%EB%AC%B8%EC%9C%BC%EB%A1%9C%20%EC%B8%B5%20%EC%95%88%EB%82%B4.PNG" alt=""></li>
</ul>
<br>

<ul>
<li>while문<pre><code>while(조건식){
  수행문1;    //조건식이 참인동안 수행문1 및 ...을 반복 수행
  ...
}
  수행문2;    //조건식이 거짓이 되어서 while문이 끝나면 수행문2를 수행</code></pre></li>
</ul>
<p><img src="https://images.velog.io/images/steaming_c/post/1f202118-8914-484a-a2ea-6836b282ddd0/8.%20%20while%EB%AC%B8%20%ED%99%9C%EC%9A%A9%ED%95%98%EC%97%AC%201%EB%B6%80%ED%84%B0%2010%EA%B9%8C%EC%A7%80%20%EB%8D%94%ED%95%98%EA%B8%B0.PNG" alt=""></p>
<br>

<ul>
<li>do while문
: while문은 조건을 먼저 검사하기 때문에 조건식에 맞지 않으면 반복 수행이 한 번도 일어나지 않지만, do-while문은 {}안의 문장을 무조건 한 번 수행한 후에 조건식을 검사한다. 즉 조건이 만족하는지 여부를 마지막에 검사. 따라서 중괄호 안의 문장을 반드시 한 번 이상 수행해야 할 때 while문 대신 do-while문을 사용.<pre><code>do{
  수행문1;
  ...
} while(조건식);
  수행문2;
  ...</code></pre><img src="https://images.velog.io/images/steaming_c/post/e98e1de1-4285-42c3-b7aa-8856d8182a3a/9.%20do-while%EB%AC%B8%20%EC%98%88%EC%A0%9C.PNG" alt=""></li>
</ul>
<br>

<ul>
<li>for문<pre><code>for(초기화식; 조건식; 증감식){
  수행문;
}</code></pre><img src="https://images.velog.io/images/steaming_c/post/f1352cee-aad9-4427-9306-ddec53ea9f54/11.%20for%EB%AC%B8%20%ED%98%BC%EC%9E%90%20%EC%97%B0%EC%8A%B5%ED%95%98%EA%B8%B0.PNG" alt=""></li>
</ul>
<br>

<ul>
<li>중첩된 반복문
<img src="https://images.velog.io/images/steaming_c/post/3541dd3b-4699-49d5-80b5-6af1c42d5e4b/12.%20%EC%A4%91%EC%B2%A9%EB%90%9C%20%EB%B0%98%EB%B3%B5%EB%AC%B8.PNG" alt=""></li>
</ul>
<br>

<ul>
<li>continue문
: 반복문과 함께 쓰임. 반복문 안에서 continue문을 만나면 이후의 문장은 수행하지 않고 for문의 처음으로 돌아가 증감식을 수행.
<img src="https://images.velog.io/images/steaming_c/post/2cbb0c51-d661-4591-a5cc-a53bee12c8fe/13.%20continue%EB%AC%B8%20%EC%98%88%EC%A0%9C.PNG" alt=""></li>
</ul>
<br>

<ul>
<li>break문
: 반복문에서 break문을 사용하면 그 지점에서 더 이상 수행문을 반복하지 않고 반복문을 빠져나온다.
<img src="https://images.velog.io/images/steaming_c/post/ba47cd97-dcfe-456d-9153-3b05fc515953/14.%20break%EB%AC%B8%20%EC%98%88%EC%A0%9C.PNG" alt=""></li>
</ul>
<br>

<ul>
<li>continue문 사용하여 구구단 짝수 단만 출력
<img src="https://images.velog.io/images/steaming_c/post/ef17368c-8cba-49a9-baaf-77271761d190/17.%20Q2%20%EA%B5%AC%EA%B5%AC%EB%8B%A8%20%EC%A7%9D%EC%88%98%EB%8B%A8%EB%A7%8C%20%EC%B6%9C%EB%A0%A5%ED%95%98%EA%B8%B0.PNG" alt=""></li>
</ul>
<br>

<ul>
<li>break문 사용하여 구구단을 단보다 곱하는 수가 작거나 같은 경우만 출력
<img src="https://images.velog.io/images/steaming_c/post/8644ee8f-a817-42d6-aade-99593195e705/18.%20Q3%20%EA%B5%AC%EA%B5%AC%EB%8B%A8%EC%9D%84%20%EB%8B%A8%EB%B3%B4%EB%8B%A4%20%EA%B3%B1%ED%95%98%EB%8A%94%20%EC%88%98%EA%B0%80%20%EC%9E%91%EA%B1%B0%EB%82%98%20%EA%B0%99%EC%9D%80%20%EA%B2%BD%EC%9A%B0%EC%97%90%EB%A7%8C%20%EC%B6%9C%EB%A0%A5(break%EB%AC%B8%20%EC%82%AC%EC%9A%A9).PNG" alt=""></li>
</ul>
<br>

<ul>
<li>반복문 사용하여 도형 만들기
<img src="https://images.velog.io/images/steaming_c/post/d628b69c-2951-4139-8e8c-75fea46fa580/20.%20Q5%20%EB%8F%84%ED%98%95%EB%A7%8C%EB%93%A4%EA%B8%B02.PNG" alt=""></li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[1일차] 1장 ~ 3장 : 자바 프로그래밍 시작하기, 변수와 자료형, 여러가지 연산자]]></title>
            <link>https://velog.io/@steaming_c/1%EC%9D%BC%EC%B0%A8-1%EC%9E%A5-4%EC%9E%A5</link>
            <guid>https://velog.io/@steaming_c/1%EC%9D%BC%EC%B0%A8-1%EC%9E%A5-4%EC%9E%A5</guid>
            <pubDate>Sun, 20 Mar 2022 06:08:14 GMT</pubDate>
            <description><![CDATA[<ul>
<li>Compile 컴파일 : 프로그래밍 언어 문법에 잘 맞는지 확인하고, 컴퓨터가 이해할 수 있는 언어로 번역하는 것.</li>
</ul>
<br>

<ul>
<li>자바 특징</li>
<li><blockquote>
<p>플랫폼에 영향 X, 다양한 환경에서 사용 O</p>
</blockquote>
</li>
<li><blockquote>
<p>객체 지향 언어로, 유지보수가 쉽고 확장성이 좋다</p>
</blockquote>
</li>
<li><blockquote>
<p>안정적인 프로그램</p>
</blockquote>
</li>
<li><blockquote>
<p>오픈소스로서 다양한 기능 제공</p>
</blockquote>
</li>
</ul>
<br>

<ul>
<li>자바로 만들 수 있는 것</li>
<li><blockquote>
<p>웹서버, 안드로이드 앱, 게임(ex.마인크래프트)</p>
</blockquote>
</li>
</ul>
<br>

<ul>
<li>부호비트 : 부호를 나타내는 비트로 가장 앞쪽 비트 자리 (0이면 양수, 1이면 음수)</li>
</ul>
<br>

<ul>
<li>2의 보수 : 2진수에서 더하면 0이 되는 값 (음수)</li>
</ul>
<br>

<ul>
<li>2의 보수 구하기 : 1의 보수를 구한 뒤 가장 낮은 자리에 1을 더하면 됨
e.g) 00000101의 1의 보수 : 11111010
11111010 + (가장 낮은 자리) 1 : 11111011 =&gt; 2의 보수</li>
</ul>
<br>

<ul>
<li>변수 선언하고 값 대입하기
<img src="https://images.velog.io/images/steaming_c/post/a3dae130-73c7-4b18-89d6-04930dfc842e/1.%20%EB%B3%80%EC%88%98%20%EC%84%A0%EC%96%B8%ED%95%98%EC%97%AC%20%EC%82%AC%EC%9A%A9%ED%95%98%EA%B8%B0.PNG" alt=""></li>
</ul>
<p><img src="https://images.velog.io/images/steaming_c/post/6c90a895-8e36-4e7a-af63-5550bb342cc2/1-2.%20%EB%B3%80%EC%88%98%20%EC%84%A0%EC%96%B8%20%EC%B6%9C%EB%A0%A5%20%ED%99%94%EB%A9%B4.PNG" alt=""></p>
<br>

<ul>
<li>변수 초기화하기 : level 변수 선언과 동시에 값을 대입(초기화:변수에 처음 값을 대입하는 것)
<img src="https://images.velog.io/images/steaming_c/post/bbda0d83-723b-45d8-bfd7-0791f9ac94d8/3.%20%EB%B3%80%EC%88%98%20%EC%B4%88%EA%B8%B0%ED%99%94.PNG" alt=""></li>
</ul>
<p><img src="https://images.velog.io/images/steaming_c/post/c56d161e-6dc3-432c-9b39-9519d6dae612/1-2.%20%EB%B3%80%EC%88%98%20%EC%84%A0%EC%96%B8%20%EC%B6%9C%EB%A0%A5%20%ED%99%94%EB%A9%B4.PNG" alt=""></p>
<br>

<ul>
<li>기본 자료형 종류 (&#39;☆&#39;가 붙은 것은 기본 단위)
정수형 : byte(1바이트), short(2바이트), ☆int(4바이트), long(8바이트)
문자형 : char(2바이트)
실수형 : float(4바이트), ☆double(8바이트)
논리형 : boolean(1바이트)</li>
</ul>
<br>

<ul>
<li>문자형 연습
<img src="https://images.velog.io/images/steaming_c/post/813e1358-c36f-4182-89cc-bd3d4fa10859/4-3.%20%EB%AC%B8%EC%9E%90%ED%98%95%20%EC%97%B0%EC%8A%B5%20%EC%A3%BC%EC%84%9D.PNG" alt=""><img src="https://images.velog.io/images/steaming_c/post/5cebd25f-5bed-4b68-9c5f-e367a3545b46/4-2.%20%EB%AC%B8%EC%9E%90%ED%98%95%20%EC%97%B0%EC%8A%B5%20%EC%B6%9C%EB%A0%A5.PNG" alt=""></li>
</ul>
<br>

<ul>
<li>실수형 연습
<img src="https://images.velog.io/images/steaming_c/post/974599d4-84e3-4986-8d74-597d52d75b57/7.%20%EC%8B%A4%EC%88%98%ED%98%95%20%EC%97%B0%EC%8A%B5.PNG" alt=""></li>
</ul>
<p><img src="https://images.velog.io/images/steaming_c/post/8471d010-3ca3-4acf-aea7-cbbc30bee417/7-2.%20%EA%B2%B0%EA%B3%BC.PNG" alt=""></p>
<br>

<ul>
<li>논리형 연습
<img src="https://images.velog.io/images/steaming_c/post/c362cc4d-0529-4458-9aac-95b7cb33d4b6/9-3.%20%EA%B0%81%EC%A3%BC.PNG" alt=""></li>
</ul>
<p><img src="https://images.velog.io/images/steaming_c/post/35a4408f-0cb7-4f1a-a4a7-730ca5ce28f9/9-2.%20%EC%B6%9C%EB%A0%A5.PNG" alt=""></p>
<br>

<ul>
<li>상수 선언하기 : 상수는 변하지 않는 값. final 예약어 사용. (초기화:변수에 처음 값을 대입하는 것)</li>
</ul>
<p>-&gt; 선언과 동시에 초기화</p>
<pre><code>final double PI = 3.14;
final int MAX_NUM = 500;</code></pre><p>-&gt; 사용하기 전 초기화</p>
<pre><code>final int MIN_NUM;
MIN_NUM = 0;</code></pre><br>

<ul>
<li>상수 사용이 편리한 이유
: 내부에서 반복적으로 사용하고 변하지 않아야 하는 값을 상수로 선언하면, 이후에 수정이 필요하더라도 상수를 선언한 부분의 값만 변경하면 됨</li>
</ul>
<br>

<ul>
<li>리터럴
: 프로그램에서 사용하는 모든 숫자, 문자, 논리값을 일컫는 말. 리터럴은 프로그램이 시작할 때 상수 풀에 놓이며 거기서 대입 및 복사할 수 있음.
리터럴 -(로딩)-&gt; 상수 풀 -(대입/복사)-&gt; 변수</li>
</ul>
<br>

<ul>
<li>형 변환</li>
</ul>
<p>1) 묵시적 형 변환 : 바이트 크기가 작은 자료형에서 큰 자료형으로 / 덜 정밀한 자료형에서 더 정밀한 자료 형으로
정수 [byte -&gt; short / char -&gt; int -&gt; long] -&gt; 실수 [float -&gt; double]
<img src="https://images.velog.io/images/steaming_c/post/6ea22cb2-b2c9-4ec3-873e-2fa203691d25/12.%20%EB%AC%B5%EC%8B%9C%EC%A0%81%20%ED%98%95%20%EB%B3%80%ED%99%98.PNG" alt=""></p>
<p><img src="https://images.velog.io/images/steaming_c/post/f2b8318e-48a2-4de3-9df1-8139e41ae7d1/12-2.%20%EC%B6%9C%EB%A0%A5.PNG" alt=""></p>
<p>2) 명시적 형 변환 : 반대, 변환한 범위를 넘는 경우는 손실이 발생(e.g. 실수를 정수로 변환하면 소수점 이하 부분 생략됨)
<img src="https://images.velog.io/images/steaming_c/post/8b0b0ddd-8bd1-45aa-bcf5-bfacd96fd3f7/13.%20%EB%AA%85%EC%8B%9C%EC%A0%81%20%ED%98%95%20%EB%B3%80%ED%99%98.PNG" alt=""></p>
<p><img src="https://images.velog.io/images/steaming_c/post/7e13c5a1-192f-4dad-9429-affc4aa39cb0/13-2.%20%EC%B6%9C%EB%A0%A5.PNG" alt=""></p>
<br>

<ul>
<li>대입 연산자 : 오른쪽 변수나 식을 왼쪽 변수에 대입하는 것
왼쪽 변수 = 오른쪽 변수(또는 식)</li>
</ul>
<br>

<ul>
<li>부호 연산자 : +, -</li>
</ul>
<br>

<ul>
<li>산술 연산자 : +, -, *, /, %
<img src="https://images.velog.io/images/steaming_c/post/c4d3b869-1e3e-465a-b5b4-ad813dd321fc/1-4.%20%EC%A0%84%EC%B2%B4.PNG" alt=""></li>
</ul>
<br>

<ul>
<li>증가, 감소 연산자 : ++, --<pre><code>val = ++num //먼저 num 값이 1증가한 후 val 변수에 대입
val = num++ //val 변수에 기존 num 값을 먼저 대입한 후 num 값 1 증가
val = --num //먼저 num 값이 1 감소한 후 val 변수에 대입
val = num-- //val 변수에 기존 num 값을 먼저 대입한 후 num 값 1 감소</code></pre><img src="https://images.velog.io/images/steaming_c/post/215868b9-1e05-49fd-939a-0df169123dc2/2-4.%20%EC%A0%84%EC%B2%B4.PNG" alt=""></li>
</ul>
<br>

<ul>
<li>관계 연산자 : &gt;, &lt;, &gt;=, &lt;=, ==(두개 항이 같으면 참, 아니면 거짓), !=(두 개 항이 다르면 참, 아니면 거짓)</li>
</ul>
<br>

<ul>
<li>논리 연산자</li>
<li><blockquote>
<p>&amp;&amp; (논리 곱) : 두 항이 모두 참인 경우에만 결과 값이 참이다. 그렇지 않으면 거짓</p>
</blockquote>
</li>
<li><blockquote>
<p>|| (논리 합) : 두 항 중 하나의 항만 참이면 결과 값은 참이다. 그렇지 않으면 거짓</p>
</blockquote>
</li>
<li><blockquote>
<p>! (부정) : 단항 연산자. 참인 경우는 거짓으로 바꾸고, 거짓인 경우는 참으로 바꾼다</p>
</blockquote>
</li>
</ul>
<p><img src="https://images.velog.io/images/steaming_c/post/e7db7154-0f4f-463b-ad57-1f5a3ff892c8/3.%20%EB%8B%A8%EB%9D%BD%20%ED%9A%8C%EB%A1%9C%20%ED%8F%89%EA%B0%80%20%EC%8B%A4%EC%8A%B5%ED%95%98%EA%B8%B0.PNG" alt=""></p>
<ul>
<li>복합 대입 연산자</li>
<li>= : 두 항의 값을 더해서 왼쪽 항에 대입</li>
<li>= : 왼쪽 항에서 오른쪽 항을 빼서 그 값을 왼쪽 항에 대입</li>
<li>= : 두 항의 값을 곱해서 왼쪽 항에 대입
/= : 왼쪽 항을 오른쪽 항으로 나누어 그 몫을 왼쪽 항에 대입
%= : 왼쪽 항을 오른쪽 항으로 나누어 그 나머지를 왼쪽 항에 대입
&lt;&lt;= : 비트를 왼쪽으로 이동하고 그 값을 왼쪽 항에 대입
&nbsp;&gt;&gt;= : 비트를 오른쪽으로 이동하고 그 값을 왼쪽 항에 대입
&nbsp;&gt;&gt;&gt;= : 비트를 오른쪽으로 이동하고 그 값을 왼쪽 항에 대입 (가장 왼쪽에 채워지는 비트 값은 부호 비트와 관계 없이 무조건 0)
&amp;= : 두 항의 &amp; 비트 연산 후 그 값을 왼쪽 항에 대입
|= : 두 항의 | 비트 연산 후 그 값을 왼쪽 항에 대입
^= : 두 항의 ^ 비트 연산 후 그 값을 왼쪽 항에 대입</li>
</ul>
<br>

<ul>
<li>조건 연산자 : 조건식이 참이면 결과1, 조건식이 거짓이면 결과2가 선택됨
표기법 =&gt; 조건식 ? 결과1 : 결과2
<img src="https://images.velog.io/images/steaming_c/post/b4bfea01-722d-4e45-b31b-45787848ff09/4.%20%EC%A1%B0%EA%B1%B4%20%EC%97%B0%EC%82%B0%EC%9E%90%EB%A5%BC%20%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC%20%EB%B6%80%EB%AA%A8%EB%8B%98%20%EB%82%98%EC%9D%B4%20%EB%B9%84%EA%B5%90%ED%95%98%EA%B8%B0.PNG" alt=""></li>
</ul>
<br>

<ul>
<li>비트 논리 연산자 (p.83~)
&amp;(AND) 연산자 : 두 개의 비트 값이 모두 1인 경우에만 연산의 결과 값이 1
|(OR) 연산자 : 비트 값이 하나라도 1이면 연산 결과 값이 1
^(XOR) 연산자 : 같은 값이면 0, 다른 값이면 1의 결과 값
~(반전) 연산자 : 비트 값 0을 1로, 1은 0으로 바꾸는 연산자</li>
</ul>
<br>

<ul>
<li>비트 이동 연산자(시프트 연산자)
&lt;&lt;연산자, &gt;&gt;연산자, &gt;&gt;&gt;연산자
<img src="https://images.velog.io/images/steaming_c/post/6a11bfa4-e679-4215-8bfb-5fccde7b1d43/5.%20%EB%B9%84%ED%8A%B8%20%EC%9D%B4%EB%8F%99%20%EC%97%B0%EC%82%B0%EC%9E%90%EB%A5%BC%20%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC%20%EC%97%B0%EC%82%B0%ED%95%98%EA%B8%B0.PNG" alt=""></li>
</ul>
<br>

<ul>
<li>연산자 우선 순위
1 &nbsp; &nbsp;() [] .
2 &nbsp; &nbsp;! ++ -- + -
3 &nbsp; &nbsp;% /
4 &nbsp; &nbsp;+ -
5 &nbsp; &nbsp;&lt;&lt; &gt;&gt;
6 &nbsp; &nbsp;&lt; &gt; &lt;= &gt;=
7 &nbsp; &nbsp;== !=
8 &nbsp; &nbsp;&amp;
9 &nbsp; &nbsp;^
10 &nbsp; &nbsp;|
11 &nbsp; &nbsp;&amp;&amp;
12 &nbsp; &nbsp;||
13 &nbsp; &nbsp;? :
14 &nbsp; &nbsp;= += -= *= %= /=</li>
</ul>
]]></description>
        </item>
    </channel>
</rss>