<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>blue___ae.log</title>
        <link>https://velog.io/</link>
        <description>성장하는 코린이</description>
        <lastBuildDate>Wed, 09 Mar 2022 06:44:26 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>blue___ae.log</title>
            <url>https://images.velog.io/images/blue___ae/profile/4faa15b6-a63e-4da1-8ce4-6edb60c77af4/KakaoTalk_20220212_212614264.jpg</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. blue___ae.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/blue___ae" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[난 정말 JAVA를 공부한 적이 없다구요.3]]></title>
            <link>https://velog.io/@blue___ae/%EB%82%9C-%EC%A0%95%EB%A7%90-JAVA%EB%A5%BC-%EA%B3%B5%EB%B6%80%ED%95%9C-%EC%A0%81%EC%9D%B4-%EC%97%86%EB%8B%A4%EA%B5%AC%EC%9A%94.3</link>
            <guid>https://velog.io/@blue___ae/%EB%82%9C-%EC%A0%95%EB%A7%90-JAVA%EB%A5%BC-%EA%B3%B5%EB%B6%80%ED%95%9C-%EC%A0%81%EC%9D%B4-%EC%97%86%EB%8B%A4%EA%B5%AC%EC%9A%94.3</guid>
            <pubDate>Wed, 09 Mar 2022 06:44:26 GMT</pubDate>
            <description><![CDATA[<p><strong>Chapter 3. 상수와 형 변화</strong></p>
<p>자료형을 기반으로 표현이 되는 상수
Int num = 1 + 5; 
1도 5도 상수지만 메모리에 저장되어 있음.
그에 따른 결과값(변수)인 6도 메모리에 저장됨!
-변수와 마찬가지로 상수(1,5)도 메모리 공간에 저장이 된다.
-다만 이이 존재하지 않으니 값의 변경이 불가능하다(결과값 6 = 6 num이라는 이름이 있음)
-상수는 존재 의미가 없어지면 바로 소멸된다.</p>
<p>상수의 저장방식의 근거는 자료형
정수형 상수 - int형으로 표현
실수형 상수 - double형으로 표현
→Int, double과 같은 자료형은 데이터 표현의 기준이다.
따라서 변수뿐만 아니라 상수의 데이터 저장 및 참조의 기준이다.
<img src="https://images.velog.io/images/blue___ae/post/719df839-1e33-4df9-9caf-a83c892f0871/image.png" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[난 정말 JAVA를 공부한 적이 없다구요.2]]></title>
            <link>https://velog.io/@blue___ae/%EB%82%9C-%EC%A0%95%EB%A7%90-JAVA%EB%A5%BC-%EA%B3%B5%EB%B6%80%ED%95%9C-%EC%A0%81%EC%9D%B4-%EC%97%86%EB%8B%A4%EA%B5%AC%EC%9A%94.2</link>
            <guid>https://velog.io/@blue___ae/%EB%82%9C-%EC%A0%95%EB%A7%90-JAVA%EB%A5%BC-%EA%B3%B5%EB%B6%80%ED%95%9C-%EC%A0%81%EC%9D%B4-%EC%97%86%EB%8B%A4%EA%B5%AC%EC%9A%94.2</guid>
            <pubDate>Wed, 09 Mar 2022 06:43:27 GMT</pubDate>
            <description><![CDATA[<p><strong>Chapter 2. 변수와 자료형</strong>
변수=Variable
메모리 공간의 접근을 위한 문법적 요소다?
메모리 공간의 활용에 필요한 두가지 요소</p>
<ol>
<li>데이터 저장을 위한 메모리 공간의 할당 방법 &gt; 확보</li>
<li>할당된 메모리 공간의 접근(저장 및 참조) 방법 &gt; 접근<pre><code>                ▼▽▼▽</code></pre>JAVA는 &#39;변수(variable)&#39;라는 것을 통해 이 두가지 방법을 모두 제공</li>
</ol>
<p>&quot;난 10진수 정수의 저장을 위한 메모리 공간을 할당하겠다!&quot;
&quot;그리고 그 메모리 공간의 이름을 num이라 하겠다!&quot;
→int num : 변수의 선언
Int와 같이 변수의 특성을 결정짓는 키워드를 가리켜 자료형이라 한다.</p>
<p>정수 표현방식의 이해
1Byte에서 8bit로 쪼개서 보면
&lt;양의 정수&gt;
[0]    |    [0] [0] [1] [1] [0] [0] [1]    =25
↓
부호: MSB(Most Significant Bit)
MSB를 제외한 나머지는 크기를 나타낸다.</p>
<p>&lt;음의 정수&gt;
2의 보수가 음의 정수 표현 방식이라는데 정확히는 이해가 가지 않지만 
0과 1을 반전시킨다음 1을 더하면 되는거 같음, 심지어 내림도 해야함 1bit를 </p>
<p>실수 표현방식의 이해
※미리 결론: 실수는 오차를 동반한다.
실수는 1.1과 1.2사이에도 무한대로 존재하기에 근사치를 사용하므로 오차가 있을 수밖에 없음
→정밀도를 포기하고 대신 표현할 수 있는 값의 범위를 넓히려고 함</p>
<p>실수의 표현 위한 수식 : ±(1.m)×2e-127 </p>
<p>Double num1 = 2.000001; 이라고 선언을 함. 위의 수식을 근거로 근사치를 뽑아냄
&#39;m은 몇이고 e는 몇이다&#39; 이런 식으로!
그러면 이제 double이 8byte데, 맨 앞에 MSB가 부호를 지정하고 나머지에서 m의 값과 e의 값을 저장해주는 것이다. 이것이 앞서 방법에 따라  나온 2.000001의 근사값 num1이 저장되는 방법이다.</p>
<p>자료형의 이해
[byte, short, int, long] 정수 자료형
을 구분하는 기준은 바이트 크기에 따라!</p>
<p>작은 크기의 정수 저장에는 short? Or int?
웬만하면 int가 나음! &gt; CPU는 int형 데이터의 크기만 연산 가능(8byte)
근데 short는 4byte이니까 변환의 과정을 거쳐야 함, 심지어 별도의 변환데이터 저장공간 마저 필요하기에 번거로움.</p>
<p>그러면 short나 byte따위는 왜 필요할까? 그거 말고 int쓰거나 가끔 long쓰면 되는거 아닌가? &gt; 연산보다 데이터의 양이 중요시 되는 상황에서 용이, mp3나 동영상 같은것. </p>
<p>JAVA의 2가지 실수 자료형
Float, Double(각 4byte와 8byte)
둘다 표현할 수 있는 범위가 넓은 편임!
각 소수점 이하 6,12자리 정밀도
일반적으로 double이 선호된다. 
<img src="https://images.velog.io/images/blue___ae/post/215d23f9-c2c4-45bd-ab72-043022d93dc6/image.png" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[난 정말 JAVA를 공부한 적이 없다구요.1]]></title>
            <link>https://velog.io/@blue___ae/%EB%82%9C-%EC%A0%95%EB%A7%90-JAVA%EB%A5%BC-%EA%B3%B5%EB%B6%80%ED%95%9C-%EC%A0%81%EC%9D%B4-%EC%97%86%EB%8B%A4%EA%B5%AC%EC%9A%94</link>
            <guid>https://velog.io/@blue___ae/%EB%82%9C-%EC%A0%95%EB%A7%90-JAVA%EB%A5%BC-%EA%B3%B5%EB%B6%80%ED%95%9C-%EC%A0%81%EC%9D%B4-%EC%97%86%EB%8B%A4%EA%B5%AC%EC%9A%94</guid>
            <pubDate>Sun, 06 Mar 2022 06:56:00 GMT</pubDate>
            <description><![CDATA[<p>Chapter 1. Let&#39;s Start JAVA!</p>
<p>JAVA의 분류
JAVA SE(standard edition) - 데스크 탑에 설치 가능하고 모든 곳에서 사용가능한 기본 버전
JAVA EE(enterprise edition) - SE보단 더 큰 버전, 기업환경에서 요구하는 더 많은 기능을 가지고 있는 버전
JAVA ME(micro edition) - 모든 구성요소가 작아야 사용가능한 곳에서 JAVA를 활용하기 위해 만든 라이트 버전</p>
<p>▼일반적인 프로그램의 실행구조▼</p>
<hr>
<p>Program
↕
Operating System에 상당히 의존적이다
↕
Hardware</p>
<hr>
<p>▼JAVA 프로그램의 실행구조▼</p>
<hr>
<p>JAVA Program이 운영체제랑 통신하는게 아니라 가상머신이랑 통신함
↕일정한 약속으로 통신↕<br>JAVA Virtual Machine는 단순한 대리자 역할을 해준다.
↕
Operating System 운영체제가 달라짐에 따라 다른 프로그램을 사용해야 하지만 JAVA는 가상머신만 다르다면 OK. Src만 다르면 된다 이거지. 예를 들어 아래를 보면
↕
Hardware</p>
<hr>
<p>JAVA Program                JAVA Program
Windows JVM               Linux JVM 이 부분만 다르면 된다 이말씀
Windows                       Linux
Hardware                      Hardware</p>
<hr>
<p>JAVAProgram.java가 있다고 치면 바로 인식가능한게 아님
Javac.exe에 의한 compile을 실행
JAVAProgram.class라는 파일이 만들어짐!
Java Virtual Machine이 이제 이해 가능해짐</p>
<p>→자바 컴파일러는 자바 가상머신이 인식할 수 있는 자바 바이트코드를 생성해 낸다.</p>
<hr>
<p>Public Class ClassName{
Public static void main(String[] args){
오늘 강의에서 배운 그동안 몰랐던 main의 의미는 main method즉
저 ClassName이라는 class의 main method라는 것이었다.
<img src="https://images.velog.io/images/blue___ae/post/2d404341-cfc5-47d5-9170-3f1d62ce572c/image.png" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[객체지향과 절차지향의 차이]]></title>
            <link>https://velog.io/@blue___ae/%EA%B0%9D%EC%B2%B4%EC%A7%80%ED%96%A5%EA%B3%BC-%EC%A0%88%EC%B0%A8%EC%A7%80%ED%96%A5%EC%9D%98-%EC%B0%A8%EC%9D%B4</link>
            <guid>https://velog.io/@blue___ae/%EA%B0%9D%EC%B2%B4%EC%A7%80%ED%96%A5%EA%B3%BC-%EC%A0%88%EC%B0%A8%EC%A7%80%ED%96%A5%EC%9D%98-%EC%B0%A8%EC%9D%B4</guid>
            <pubDate>Fri, 04 Mar 2022 03:59:28 GMT</pubDate>
            <description><![CDATA[<p><img src="https://images.velog.io/images/blue___ae/post/1ed4a046-2664-484e-86aa-d934ddb4096f/%ED%99%94%EB%A9%B4%20%EC%BA%A1%EC%B2%98%202022-03-04%20105607.jpg" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[코린이 상속 2일차]]></title>
            <link>https://velog.io/@blue___ae/%EC%BD%94%EB%A6%B0%EC%9D%B4-%EC%83%81%EC%86%8D-2%EC%9D%BC%EC%B0%A8</link>
            <guid>https://velog.io/@blue___ae/%EC%BD%94%EB%A6%B0%EC%9D%B4-%EC%83%81%EC%86%8D-2%EC%9D%BC%EC%B0%A8</guid>
            <pubDate>Fri, 04 Mar 2022 03:56:10 GMT</pubDate>
            <description><![CDATA[<p><img src="https://images.velog.io/images/blue___ae/post/526f5839-d0ea-4d52-9723-42bf1caacbff/image.png" alt="">
<img src="https://images.velog.io/images/blue___ae/post/a85bbb11-876d-4fac-aaf5-97709074d5c9/image.png" alt="">
<img src="https://images.velog.io/images/blue___ae/post/780e80ac-c481-47ca-8f11-6808b676e541/image.png" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[코린이 상속 1일차]]></title>
            <link>https://velog.io/@blue___ae/%EC%BD%94%EB%A6%B0%EC%9D%B4-%EC%83%81%EC%86%8D-1%EC%9D%BC%EC%B0%A8</link>
            <guid>https://velog.io/@blue___ae/%EC%BD%94%EB%A6%B0%EC%9D%B4-%EC%83%81%EC%86%8D-1%EC%9D%BC%EC%B0%A8</guid>
            <pubDate>Fri, 04 Mar 2022 03:54:40 GMT</pubDate>
            <description><![CDATA[<p><img src="https://images.velog.io/images/blue___ae/post/4403801e-9c9d-4bad-8c13-76f6e5b9325c/image.png" alt="">
<img src="https://images.velog.io/images/blue___ae/post/4124c577-6791-49a0-a252-eb1fcde9584a/image.png" alt="">
<img src="https://images.velog.io/images/blue___ae/post/2376f080-f726-4e06-9d65-b61fe126b280/image.png" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[코린이 메소드 맛보기 2일차]]></title>
            <link>https://velog.io/@blue___ae/%EC%BD%94%EB%A6%B0%EC%9D%B4-%EB%A9%94%EC%86%8C%EB%93%9C-%EB%A7%9B%EB%B3%B4%EA%B8%B0-2%EC%9D%BC%EC%B0%A8</link>
            <guid>https://velog.io/@blue___ae/%EC%BD%94%EB%A6%B0%EC%9D%B4-%EB%A9%94%EC%86%8C%EB%93%9C-%EB%A7%9B%EB%B3%B4%EA%B8%B0-2%EC%9D%BC%EC%B0%A8</guid>
            <pubDate>Tue, 01 Mar 2022 11:51:36 GMT</pubDate>
            <description><![CDATA[<h4 id="chapter-3-수업을-마치며">Chapter 3. 수업을 마치며</h4>
<p>많은 컴퓨터 언어가 class 같은게 없거나 나중에 생긴 경우도 있음 </p>
<p><strong>Access level modifiers</strong>
Public이 뭔가? 
public, protected, default, private 같은 것들을 그 공간에 쓸 수 있음
Private의 경우는 같은 class안에서만 사용 가능, 다른 class에서는 private의 method는 사용 불가
Public은 해당 class 밖에서도 사용가능. 접근레벨을 설정하는 것 같음.</p>
<p>Static이란 뭔가?
   **  static-class의 method다.
No static-instance의 method다.**</p>
<p>소속을 정하는데 있어서 매우 중요한 지표 instance를 만들면 그 method의 static이랑 키워드를 쓰면 안된다!
<img src="https://images.velog.io/images/blue___ae/post/33b9bb18-14a3-4950-8257-74fb7167a03e/image.png" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[코린이 메소드 맛보기 1일차]]></title>
            <link>https://velog.io/@blue___ae/%EC%BD%94%EB%A6%B0%EC%9D%B4-%EB%A9%94%EC%86%8C%EB%93%9C-%EB%A7%9B%EB%B3%B4%EA%B8%B0-1%EC%9D%BC%EC%B0%A8</link>
            <guid>https://velog.io/@blue___ae/%EC%BD%94%EB%A6%B0%EC%9D%B4-%EB%A9%94%EC%86%8C%EB%93%9C-%EB%A7%9B%EB%B3%B4%EA%B8%B0-1%EC%9D%BC%EC%B0%A8</guid>
            <pubDate>Tue, 01 Mar 2022 06:26:08 GMT</pubDate>
            <description><![CDATA[<h4 id="chapter-1-오리엔테이션"><strong>Chapter 1. 오리엔테이션</strong></h4>
<p>2022년 3월 1일 화요일</p>
<p><strong>수업소개</strong>
Method란 것은 funtion이라고도 할 수 있다.
&#39;복잡한 것을 정리해서 다시 단순하게 만드는 정리정돈의 기구&#39;</p>
<h4 id="chapter-2-메소드"><strong>Chapter 2. 메소드</strong></h4>
<p>2022년 3월 1일 화요일</p>
<p><strong>이미 익숙한 메소드</strong></p>
<blockquote>
<p>public class FirstMethod {
  public static void main(String[] args) {
         System.out.println(&quot;Hello Method&quot;);
         System.out.println(Math.floor(1.1));
         }
}</p>
</blockquote>
<p>JAVA에서 Class(ex.FirstMethod)를 만들때 public static void main 이라는 코드가 있고 그 아래에는 실행되었으면 하는 코드들이 나열되어 있는데 그 자체가 이미 Method이다. 그러니 우리는 항상 특정 Class에 필요한 Method를 만들어 왔었던 것이다.</p>
<p><strong>메소드의 기본 형식</strong>
    System.out.println(&quot;-&quot;);
    System.out.println(&quot;A&quot;);
    System.out.println(&quot;A&quot;);</p>
<p>대충 이런코드가 엄청 많다고 쳤을때 이것을 만약 수정하고 싶으면 일일히 다 수정해야 하거나 하는 귀찮음이 있다. 그래서 저 코드를 printTwoTimesA라는 이름으로 Method화 시킨다면 </p>
<blockquote>
<p>  public static void printTwoTimesA() {
       System.out.println(&quot;-&quot;);
       System.out.println(&quot;A&quot;);
       System.out.println(&quot;A&quot;);
    }</p>
</blockquote>
<p>이렇게 만들 수 있고, 추후에는 printTwoTimesA(); 이렇게 입력하기만 해도 결과값이 나오면서 코드를 단순화할 수 있게 되는 것이다.</p>
<p>Refactor&gt;Extract Method를 통해 범위를 잡은 코드를 Method화 시키는 방법도 있다. 그러면 자연스럽게 method화에 필요한 정의? 정리정돈 시킬 코드들은 아래에 입력된다 .</p>
<p><strong>메소드의 입력</strong>
입력값에 따라 다르게 출력하고 싶다. 예를들어 a,b,c가 출력됐으면 좋겠다.
그러면 printTwoTimesB나 C를 만들어서 Method들을 새로 만드는 것도 나쁘지 않지만,
입력값에 따라 다르게 출력되게 하는 식으로 코드를 만져보자</p>
<p>printTwoTimes( );로 A를 뺀 후에 이 Method를 어떻게 설정할 것이냐 하면 </p>
<blockquote>
<p> public static void printTwoTimes(String text) {
     System.out.println(&quot;-&quot;);
     System.out.println(text);
     System.out.println(text);
 }</p>
</blockquote>
<p>이게 설정 했 경우 문자열 DataType의 text가 입력될 것이고 그것에 따라 다른 값을 출력하게 할 수 있는 것이다.</p>
<blockquote>
<p>  printTwoTimes(&quot;a&quot;);<br>    printTwoTimes(&quot;b&quot;);<br>    printTwoTimes(&quot;c&quot;);</p>
</blockquote>
<p>인경우 결과값이 [ - a a - b b - c c ]이렇게 입력값을 반영하게 할 수 있는 것이다.
구분자(delimiter)같은 경우도 (String text, String delimiter)이렇게 값을 하나 더 입력할 것이라는 것을 알려주고 &quot;-&quot;를 delimiter라는 입력값으로 설정할 수 있게 해주면 
printTwoTimes(&quot;a&quot;, &quot;-&quot;); 이렇게 해줌으로 인해 동일한 결과값, 그러나 구분자를 자유롭게 설정할 수 있게 되는 것이다.</p>
<p>★public static void main ( String[] args) {
args는 main이라는 method를 java가 실행했을때 입력해주는 입력값이 args를 통해 들어온다. Run configuration의 argument에서 입력값을 설정할 수 있다.</p>
<p><strong>메소드의 출력</strong>
Method output</p>
<p>Method의 return뒤에 있는 값이 그 method의 실행 결과값이 된다. 그리고 return값은 그 method를 종료시키는 역할도 한다. Return뒤에 아무리 많은 값이 있어도 return에서 끝나게 되어 있다.
Method는 그 method의 return값의 datatype을 정해주어야 한다. (ex.Int면 정수 / void는 return값이 없다는 것을 의미!)</p>
<blockquote>
<p>printTwoTimes(&quot;a&quot;, &quot;-&quot;);
   System.out.println(twoTimes(&quot;a&quot;, &quot;-&quot;));</p>
</blockquote>
<p>위 두코드는 기본적으로 결과값 자체는 같을 수 있느나 twoTimes는 화면에 출력하지 않고 return값을 가지기에 여러군데에 사용이 가능해진다.</p>
<p>▶출력할때 사용하는 핵심적인 키워드는 return이고 어떤 datatype을 return할 것인지 직접 지정해주어야 한다!</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[코린이 객체지향 4일차]]></title>
            <link>https://velog.io/@blue___ae/%EC%BD%94%EB%A6%B0%EC%9D%B4-%EA%B0%9D%EC%B2%B4%EC%A7%80%ED%96%A5-4%EC%9D%BC%EC%B0%A8</link>
            <guid>https://velog.io/@blue___ae/%EC%BD%94%EB%A6%B0%EC%9D%B4-%EA%B0%9D%EC%B2%B4%EC%A7%80%ED%96%A5-4%EC%9D%BC%EC%B0%A8</guid>
            <pubDate>Mon, 28 Feb 2022 13:26:48 GMT</pubDate>
            <description><![CDATA[<h4 id="chapter-4-상속"><strong>Chapter 4. 상속</strong></h4>
<p>2022년 2월 28일 월요일
오후 8:03</p>
<p><strong>Inheritance</strong></p>
<p>Parent라는 class에 method1이라는 멤버가 있다고 하자
근데 이 class를 수정 불가 or 하기 싫은데 Method2를 추가하고 싶다면?</p>
<blockquote>
<p>Class Parent {
   public void method1() {
   //..
   }
}</p>
</blockquote>
<p>▼ copy 1
 //쉽긴한데 Parent에서 생긴 버그를 수정하려면 ClonedChild도 하나하나 다 수정해야함</p>
<blockquote>
<p>Class ClonedChild {
   public void method1() {
   //..
   }
   public void method2() {
   //..
   }
}</p>
</blockquote>
<p>▼ copy 2</p>
<blockquote>
<p>Class child extends Parent{
   public void method2() {
   //..
   }
}</p>
</blockquote>
<p>이 class는 Parent를 extends한다는건 Parent의 class를 상속받는다는 건데,<br>이 Child에는 method1이 구현되어 있지 않지만 상속받았기에 Parent의 method1을 사용할 수 있게됨. 그리고 Parent의 method를 수정하면 얘를 상속받는 자식들의 모든 method들이 수정되는 효과적인 작업이 가능. </p>
<p><strong>Interface</strong></p>
<blockquote>
<p>Interface Contract {
    public String method1(String param);
    public int method2(int param);
}
...
Class concreate1 implements Contract{
} </p>
</blockquote>
<p>//concreate1이라는 class는 contract라는 interface에 적혀있는 method들의 형식을 구현했다 or 구현해야 한다.</p>
<p>이상태로 compile을 하게 되면 compile조차 되지 않음. 
→Why? Contract에 적혀있는 method들을 정의해야한다는 규칙을 어겼기 때문에</p>
<blockquote>
<p>Class concreate1 implements Contract{
      public String method1(String param) {
              return &quot;foo&quot;;
      }
      public int mehod2(int param) {
              return 1;
      }
} </p>
</blockquote>
<p>Contract에 적혀있는 형태의 method를 구체적으로 구현해야하는 책임을 concreate1이 가지게 됨
Contract에 적혀있는 것들을 구현한다는 일종의 계약인 셈</p>
<p>Interface
서로 같은 이름의 class가 존재하려면 그것을 서로 다른 package에 담아야 한다!</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[코린이 객체지향 3일차]]></title>
            <link>https://velog.io/@blue___ae/%EC%BD%94%EB%A6%B0%EC%9D%B4-%EA%B0%9D%EC%B2%B4%EC%A7%80%ED%96%A5-3%EC%9D%BC%EC%B0%A8</link>
            <guid>https://velog.io/@blue___ae/%EC%BD%94%EB%A6%B0%EC%9D%B4-%EA%B0%9D%EC%B2%B4%EC%A7%80%ED%96%A5-3%EC%9D%BC%EC%B0%A8</guid>
            <pubDate>Mon, 28 Feb 2022 11:02:53 GMT</pubDate>
            <description><![CDATA[<h4 id="chapter-3-클래스와-인스턴스의-활용">Chapter 3. 클래스와 인스턴스의 활용</h4>
<p>2022년 2월 28일 월요일
오후 5:51</p>
<p><strong>클래스화</strong></p>
<blockquote>
<p>   public class AccountingApp {
     public static double valueOfSupply;
     public static double vatRate = 0.1;
     public static double getVAT() {
        return valueOfSupply * vatRate;
     }
         public static double getTotal() {
             return valueOfSupply + getVAT();
         }
         public static void main(String[] args) {
          valueOfSupply = 10000.0;
           System.out.println(&quot;Value of supply :&quot; + valueOfSupply);
           System.out.println(&quot;VAT : &quot; + getVAT());
           System.out.println(&quot;Total : &quot; + getTotal());
          }
}</p>
</blockquote>
<p>이런 형식의 코드가 있다고 했을때, 지금이야 큰 코드개수가 적어서 문제가 없지만 관련 코드가 많아질수록 보기 난잡해 보일 수 있다.</p>
<p>관련 Method와 변수를 class화 시키면 정리가 되어서 편하게 만들수 있는데 그 과정이</p>
<blockquote>
<p> class Accounting{
    public static double valueOfSupply; 
    public static double vatRate = 0.1; 
    public static double getVAT() {
        return valueOfSupply * vatRate;
    }
    public static double getTotal() {
        return valueOfSupply + getVAT();
    }
}
public class AccountingApp {
    public static void main(String[] args) {
        Accounting.valueOfSupply = 10000.0;
        System.out.println(&quot;Value of supply :&quot; + Accounting.valueOfSupply);
        System.out.println(&quot;VAT : &quot; + Accounting.getVAT());
        System.out.println(&quot;Total : &quot; + Accounting.getTotal());</p>
</blockquote>
<pre><code>}</code></pre><p>}</p>
<p>이렇게 Class를 생성해서 이름을 적당히 붙이고, 여기서는 회계와 관련이 있다고 생각되는 {변수나 Method}들을 중괄호 안에 넣어 묶어준다. 뒤에 public class에서 관련 Accounting으로 class화 시킨것을 꺼내 쓸때 Accounting.만 적어도 관련 Method나 변수들이 자동으로 추천돼서 사용이 더욱 용이해지는 것을 확인할 수 있다.</p>
<p><strong>인스턴스화</strong>
Class를 인스턴스화시키는 방법을 알아보자.
Accounting.valueOfSupply = 10000.0;
System.out.println(&quot;Value of supply :&quot; + Accounting.valueOfSupply);
Accounting.valueOfSupply = 20000.0;
System.out.println(&quot;Value of supply :&quot; + Accounting.valueOfSupply);</p>
<p>Accounting.valueOfSupply = 10000.0;
System.out.println(&quot;VAT : &quot; + Accounting.getVAT());
Accounting.valueOfSupply = 20000.0;
System.out.println(&quot;VAT : &quot; + Accounting.getVAT());</p>
<p>Accounting.valueOfSupply = 10000.0;
System.out.println(&quot;Total : &quot; + Accounting.getTotal());
Accounting.valueOfSupply = 20000.0;
System.out.println(&quot;Total : &quot; + Accounting.getTotal());</p>
<p>각각 다른 값을 뽑아내야 하고 순서에 따라 valueOfSupply의 값을 계속 바꿔야 한다면 귀찮으니 이런 경우에 instance를 만들어 각자의 내부 상태를 가지게 하는것이 효율적이다.</p>
<pre><code>Ø   Accounting a1 = new Accounting();
    a1.valueOfSupply=10000.0;

    Accounting a2 = new Accounting();
    a2.valueOfSupply=20000.0;

    System.out.println(&quot;Value of supply : &quot; + a1.valueOfSupply);
    System.out.println(&quot;Value of supply : &quot; + a2.valueOfSupply);

    System.out.println(&quot;VAT : &quot; + a1.getVAT());
    System.out.println(&quot;VAT : &quot; + a2.getVAT());

    System.out.println(&quot;Total : &quot; + a1.getTotal());
    System.out.println(&quot;Total : &quot; + a2.getTotal());</code></pre><p>이렇게 만들면 귀찮게 계속 valueOfSupply의 값을 지정해줄 필요없이 각 a1, a2에 지정하고 꺼내 쓰면 되니 매우 편해졌다.</p>
<p>여기에 더해 애초에 instance를 만들때 입력값 자체를 바로 valueOfSupply에 넣으려면</p>
<blockquote>
<pre><code>public double valueOfSupply
public Accounting(double valueOfSupply) {
    this.valueOfSupply = valueOfSupply;</code></pre></blockquote>
<p>이렇게 설정을 매개변수를 설정해주면</p>
<pre><code>Accounting a1 = new Accounting(10000.0);
Accounting a2 = new Accounting(20000.0);</code></pre><p>위처럼 instance 생설할때 입력된 값 바로 사용가능하다!</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[코린이 객체지향 2일차]]></title>
            <link>https://velog.io/@blue___ae/%EC%BD%94%EB%A6%B0%EC%9D%B4-%EA%B0%9D%EC%B2%B4%EC%A7%80%ED%96%A5-2%EC%9D%BC%EC%B0%A8</link>
            <guid>https://velog.io/@blue___ae/%EC%BD%94%EB%A6%B0%EC%9D%B4-%EA%B0%9D%EC%B2%B4%EC%A7%80%ED%96%A5-2%EC%9D%BC%EC%B0%A8</guid>
            <pubDate>Mon, 28 Feb 2022 08:54:01 GMT</pubDate>
            <description><![CDATA[<h4 id="chapter-2-클래스와-인스턴스"><strong>Chapter 2. 클래스와 인스턴스</strong></h4>
<p>2022년 2월 28일 월요일
오전 11:17</p>
<p>남의 클래스 &amp; 남의 인스턴스</p>
<p>new를 붙임으로 인해서 &quot;data.txt&quot;라는 곳에 파일을 저장하겠다고 하는 상태를 가진 FileWriter라는 class의 복제본이 된다.  복제본의 DataType은 class이름인 FileWriter타입이다
    Ø FileWriter f1 = new FileWriter(&quot;data.txt&quot;);
    f1.write(&quot;Hello&quot;);
    f1.write(&quot; JAVA&quot;);
    f1.close();</p>
<pre><code>FileWriter f2 = new FileWriter(&quot;data2.txt&quot;);
   f2.write(&quot;Hello&quot;);
f2.write(&quot; JAVA&quot;);
f2.close();

    //class : system, Math, FileWriter...etc
    //instance : f1, f2</code></pre><p>변수와 메소드
무수히 반복되는 코드를 Refactor&gt;Extract Method를 통해 이름을 설정해주면 간편하게 바뀐다.
    Ø System.out.println(&quot;_구분-&quot;);
           System.out.println(&quot;A&quot;);을 pirntA로 설정하면
    Ø printA(); </p>
<pre><code>   이렇게 출력이 된다.</code></pre><p>Delimiter(인자)를 이용해 변수를 줄 수 있다.</p>
<p>public static void printA() {
        System.out.println(&quot;<em>구분</em>&quot;);
        System.out.println(&quot;A&quot;);</p>
<p>이것이 Refactor를 이용해 method를 만들어주는 코드인데 
Delimiter를 설정하고 입력해서 값을 변경할 수 있게 해준다.</p>
<p>public static void printA(String delimiter) {
        System.out.println(delimiter);
        System.out.println(&quot;A&quot;);</p>
<p>이런식으로 코드를 변경해준 후 
String delimiter = &quot;----&quot;
printA(delimiter);
이렇게 설정하면 해당 코드에서는 인자가 &quot;----&quot;으로 설정돼서 출력되고 다른 줄에서 delimiter를 변경하면 변경된 값으로 출력돼서 일일이 refacter를 설정하거나 다른 코드를 변경할 필요가 없게 된다.</p>
<p>존재 이유와 기본형식
    Ø class Print{
    public static String delimiter = &quot;&quot;;
    public static void A() {
        System.out.println(delimiter);
        System.out.println(&quot;A&quot;);
    }</p>
<pre><code>public static void B() {
    System.out.println(delimiter);
    System.out.println(&quot;B&quot;);
}</code></pre><p>}</p>
<p>이렇게 Class를 생성할 수 있다. Print라는 class를 생성 후 그 안에 method들을 집어 넣어서 Print.만 해도 바로 연관된 변수나 Method 튀어나올 수 있게 만들어 준 것이다.</p>
<p>형식
특정 class안에 class가 하나 더 생성하면 public class가 아닌 class는 따로 class를 파일 안에 생성하게 된다.</p>
<p>Tip. Ex) 특정 Class를 Refactor&gt; move type to new file을 누르면 
public class를 생성하는 java에 있던 그 특정 class의 .java를 새로 생성하게 되면 기존 .java에서 그 코드들을 움직이게 할 수 있다.
<img src="https://images.velog.io/images/blue___ae/post/44b8037d-7bbe-49be-ba2d-069bc97d5880/image.png" alt=""></p>
<p>Instance
Class에 new를 붙여 내부 상태를 지정해서 편하게 만드는 건데 하도 많이 썼으니 패스!!!
냉장고 비유는 꽤 재밌었음</p>
<p>Static</p>
<pre><code>Ø class Foo{    //여기에 두개의 변수를 만들건데 

public static String classVar = &quot;I class Var&quot;;
public String instanceVar = &quot;I instance Var&quot;;

public static void classMethod() {
    System.out.println(classVar);
         System.out.println(instanceVar); //error
}
public void instanceMethod() {
    System.out.println(classVar); //Ok
    System.out.println(instanceVar); //Ok
}</code></pre><p>}</p>
<p>public class StaticApp {</p>
<pre><code>public static void main(String[] args) {
    System.out.println(Foo.classVar); //ok
                  System.out.println(Foo.instanceVar); //error 
    //인스턴스는 인스턴스를 통해서 사용할 수 있게 고안된 변수다
    Foo.classMethod();
    Foo.instanceMethod(); //error  접근이 안됨. 인스턴스 소속이기에 class를 통해 접근하는게 x

    Foo f1 = new Foo();
    Foo f2 = new Foo();

    System.out.println(f1.classVar); // I class var
    System.out.println(f1.instanceVar); // I instance var

    f1.classVar = &quot;changed by f1&quot;; //f1의 classVar은 static이기에 class Foo의 class var이다
    System.out.println(Foo.classVar); // changed by f1
    System.out.println(f2.classVar); //f2의 classVar 역시 class Foo의 classVar인데 상기 작업으로 인해 값이 변화했기에 값이 바뀔것이다.

    f1.instanceVar = &quot;changed by f1&quot;;
    System.out.println(f1.instanceVar); //changed by f1
    System.out.println(f2.instanceVar); //독립적으로 운용되는 인스턴스기에 위처럼 바뀌어도 영향을 받지 않음.

}</code></pre><p>}</p>
<p>생성자와 this
생성자: 초기에 주입할 필요가 있는 데이터 값, 초기에 작업을 수행하도록 할때 하는거.
this. 내가 생한 instance를 가르키는 이름</p>
<pre><code>Ø class Print {
public String delimiter = &quot;&quot;;
public Print (String delimiter) {
this.delimiter = delimiter;
}
public void A() {
    System.out.println(this.delimiter);
    System.out.println(&quot;A&quot;);
       }</code></pre><p>}</p>
<p>this.delimiter의 delimiter는 생성자 Method delimiter의 매개변수이다.
Print p1 = new Print(&quot;----&quot;);일때
P1.A();는 ---- / A가 나오는데 그 과정을 이해하는게 중요
<img src="https://images.velog.io/images/blue___ae/post/119b626e-f9ab-479d-a2a7-ae51fc99f158/image.png" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[코린이 객체지향 1일차]]></title>
            <link>https://velog.io/@blue___ae/%EC%BD%94%EB%A6%B0%EC%9D%B4-%EA%B0%9D%EC%B2%B4%EC%A7%80%ED%96%A5-1%EC%9D%BC%EC%B0%A8</link>
            <guid>https://velog.io/@blue___ae/%EC%BD%94%EB%A6%B0%EC%9D%B4-%EA%B0%9D%EC%B2%B4%EC%A7%80%ED%96%A5-1%EC%9D%BC%EC%B0%A8</guid>
            <pubDate>Mon, 28 Feb 2022 02:17:06 GMT</pubDate>
            <description><![CDATA[<h4 id="chapter-1-오리엔테이션"><strong>Chapter 1. 오리엔테이션</strong></h4>
<p>2022년 2월 28일 월요일
오전 10:55</p>
<p>JAVA Object Oriented Programming</p>
<p>Method 다른 컴퓨터 언어에서는 function이나 subroutine, procedural이라고도 부른다.
한국어로 하면 절차지향 프로그래밍이라 하는데, 이것을 이용해서 프로그램을 정리정돈하는 기법이다.</p>
<p>Method로만 프로그래밍하는데 부족함을 느낀 몇몇  개발자들이 서로 연관된 Method와 변수들을 모아
그룹을 만들고 이름을 붙여 정리정돈을 하였고 그 수납상자를 Class라고 부른다.
→Class를 중심으로 프로그램의 구조를 만들어가는 컴퓨터 프로그래밍 방법을 객체지향 프로그래밍이라고 부른다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[코린이 제어문 2일차 -4]]></title>
            <link>https://velog.io/@blue___ae/%EC%BD%94%EB%A6%B0%EC%9D%B4-%EC%A0%9C%EC%96%B4%EB%AC%B8-2%EC%9D%BC%EC%B0%A8-4</link>
            <guid>https://velog.io/@blue___ae/%EC%BD%94%EB%A6%B0%EC%9D%B4-%EC%A0%9C%EC%96%B4%EB%AC%B8-2%EC%9D%BC%EC%B0%A8-4</guid>
            <pubDate>Thu, 24 Feb 2022 07:45:06 GMT</pubDate>
            <description><![CDATA[<h2 id="chapter-7-종합응용"><strong>Chapter 7. 종합응용</strong></h2>
<p>2022년 2월 24일 목요일
오후 4:05
<img src="https://images.velog.io/images/blue___ae/post/57ca8f0b-f7a2-4bc7-878f-b98108cfe399/image.png" alt=""></p>
<p>배열에 이름 넣고inputId에는 Run configuration-argument의 입력값이 들어간다.
For로 반복 돌리는 것은 inputId의 값과 일치하는지 계속 돌려보는 것이고,
currentId는 현재 java가 users[]에서 꺼내온 값이라고 할 수 있다. 
그것이 inputId와 일치한다면 isLogined가 true가 되고 break포인트에서 반복문을 빠져나와 system.out으로 넘어가는 것이다. </p>
<p>일치하지 않는다면 찾을때까지 돌리다가 찾아서 빠져나오던가 아니면 결국 일치하지 않은채로 배열안에 있는 값과 전부 대조해서 빠져나온 후 isLogined가 false여서 else에 있는 코드 값을 실행하는 것이다.!</p>
<p>여기에 password도 대조할 수 있게 만들어 본다면 </p>
<blockquote>
<p>String[][] users = {
                    {&quot;LUKAKU&quot;, &quot;9&quot;},
                    {&quot;MOUNT&quot;, &quot;19&quot;},
                    {&quot;PULISIC&quot;, &quot;10&quot;}
                    };
        String inputId = args[0];
        String inputPass = args[1];</p>
</blockquote>
<pre><code>    boolean isLogined = false;
    for(int i=0;  i&lt;users.length;  i++) {
        String[] current = users[i];
        if(
            current[0].equals(inputId) &amp;&amp; //current[0]은 &quot;LUKAKU&quot;와 같다
            current[1].equals(inputPass)
            ) { 
            isLogined = true;
            break;
        }
    }

    System.out.println(&quot;Hi,&quot;);    
    if (isLogined) {
        System.out.println(&quot;Master!!&quot;);
    } else {
        System.out.println(&quot;Who are you&quot;);
    }</code></pre><p>배열에 배열을 만든게 [] []를 붙인건데 저런식으로 만드는 거란 것을 배움.
배열 안에서 {}내에 있는 첫번재째 값이 inputId 두번째 값이 inputPass로 지정을 하고,
나머지는 거의 동일하게 만들면 된다. 
중간에 &amp;&amp;연산자를 써서 id와 pass가 모두 일치해야 isLogined된다는 것을 신경 써주면 된다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[코린이 제어문 2일차 -3]]></title>
            <link>https://velog.io/@blue___ae/%EC%BD%94%EB%A6%B0%EC%9D%B4-%EC%A0%9C%EC%96%B4%EB%AC%B8-2%EC%9D%BC%EC%B0%A8-3</link>
            <guid>https://velog.io/@blue___ae/%EC%BD%94%EB%A6%B0%EC%9D%B4-%EC%A0%9C%EC%96%B4%EB%AC%B8-2%EC%9D%BC%EC%B0%A8-3</guid>
            <pubDate>Thu, 24 Feb 2022 07:02:42 GMT</pubDate>
            <description><![CDATA[<p><strong>Chapter 6. 반복문과 배열</strong></p>
<p>2022년 2월 24일 목요일
오후 1:14</p>
<p>반복문 Looping statement
While (  boolean  )   {
}
이 boolean 값에 따라 중괄호 안에 있는 코드를 반복하게 된다.</p>
<blockquote>
<p>int i = 0;<br>      while (i &lt; 3) {
       System.out.println(2);<br>       System.out.println(3);<br>        i = i + 1;
       //i++;는 i=i+1;과 같음
    }    </p>
</blockquote>
<p><img src="https://images.velog.io/images/blue___ae/post/fd38ae42-2cb4-4a98-b054-c00de8736d0d/image.png" alt=""></p>
<p>이런 코드가 있다면 초기 i값이 0이고 반복문을 통해 &#39;2&#39;, &#39;3&#39;을 print한 후 i값에 1이 더해지게 되면서 반복하게 되는데, 이 과정에서 i가 3이상이 되면 반복을 하지 않게 된다. 즉 결과 값은 [2 3 2 3 2 3]
while의 경우 1억줄의 코드가 껴있다고 치면 i의 값이 변형될 가능성이 있음. 서로 침범을 하거나 오염되서 </p>
<blockquote>
<p>for (int j = 0;   j &lt; 3;   j++) {
     System.out.println(2);<br>     System.out.println(3);<br>    }</p>
</blockquote>
<p>for에서 첫 부분(int j=0;)은 무조건 한번만 실행, 두번째 값(j&lt;3)이 맞는지에 따라 아래 코드를 실행, 세번째 (j++)는 두번째 실행때부터 두번째 값 전에 실행되어 반영된다.
[2 3 2 3 2 3]이 결과 값!
for를 쓰면 연관된 요소들이 package되어 있기에 문제가 생길 가능성이 적고, 코드의 의도 파악에 용이</p>
<p>배열 Array
반복문과 뗄래야 뗄수가 없는 관계</p>
<p><img src="https://images.velog.io/images/blue___ae/post/6b31a6ac-2066-4b35-a722-86939fc332a0/image.png" alt=""></p>
<blockquote>
<p>String[] users = new string[3];
     users[0] = &quot;LUKAKU&quot;;
     users[1] = &quot;MOUNT&quot;;
     users[2] = &quot;PULISIC&quot;;</p>
</blockquote>
<p>java는 &#39;아~ 문자열(String)로 이루어진/ 배열([])이라는 데이터 타입을 값으로 하는/ users라는 변수를 만드는 구나&#39; + new String[3];에서는 배열의 크기를 3으로 지정한 것이다.</p>
<blockquote>
<p>  System.out.println(users[1]);
    System.out.println(users.length);</p>
</blockquote>
<p>배열 1에 들어 있는 값이 &quot;MOUNT&quot;이므로 MOUNT를 출력
.length를 통해 배열 칸의 크기도 알 수 있음 총 3개로 지정했으니 3 출력</p>
<p>▲상기 배열은 먼저 빈 깡통같은 배열을 만들고 추후에 값을 입력한 것
값을 처음에 담아서 생성하는 방법도 있음</p>
<blockquote>
<p>  int[] scores = {10, 7, 3};
    System.out.println(scores[1]);
    System.out.println(scores.length);
    }</p>
</blockquote>
<p>이 코드에서는 int타입의 배열([]) scores를 생성한 것이고, { }안에 값을 넣으면 된다.
넣은 순서대로 int[0]이 10을, int[1]이 7을, int[2]가 3을 의미한다. 
값이 3개 들어 있기에 length는 3이다.</p>
<p>0, 1, 2와 같은 것을 INDEX라고 하고, LUKAKU나 MOUNT..등 같은 것을 ELEMENT라고 한다.</p>
<p>반복문 + 배열
반복문과 배열이 만나면 폭발적인 효과가 나온다.</p>
<li>LUKAKU</li>
<li>MOUNT</li>
<li>PULISIC</li>
예를 들어 이런 식으로 값 출력하고 싶다고 해보자.
![](https://images.velog.io/images/blue___ae/post/38b225c6-a48a-4465-acc7-a40d1e66298e/image.png)

<blockquote>
<p>String[] users = new String[3];<br>        users[0] = &quot;LUKAKU&quot;;
        users[1] = &quot;MOUNT&quot;;
        users[2] = &quot;PULISIC&quot;;</p>
</blockquote>
<p>배열은 이렇게 세팅을 마치고 여기서 반복문을 통해 앞뒤에 text를 붙여 출력하면 된다.</p>
<blockquote>
<p>for (int i=0;   i&lt;users.length;   i++) {      //users.length에 따라 error없이 반복됨...
        System.out.println(&quot;<li>&quot;+users[i]+&quot;</li>&quot;);
    }</p>
</blockquote>
<p>결과 값은 아래와 같이 무난하게 나온다!</p>
<li>LUKAKU</li>
<li>MOUNT</li>
<li>PULISIC</li>
]]></description>
        </item>
        <item>
            <title><![CDATA[코린이 제어문 2일차 -2]]></title>
            <link>https://velog.io/@blue___ae/%EC%BD%94%EB%A6%B0%EC%9D%B4-%EC%A0%9C%EC%96%B4%EB%AC%B8-2%EC%9D%BC%EC%B0%A8-2</link>
            <guid>https://velog.io/@blue___ae/%EC%BD%94%EB%A6%B0%EC%9D%B4-%EC%A0%9C%EC%96%B4%EB%AC%B8-2%EC%9D%BC%EC%B0%A8-2</guid>
            <pubDate>Thu, 24 Feb 2022 04:12:14 GMT</pubDate>
            <description><![CDATA[<p><strong>Chapter 5. 논리연산자</strong></p>
<p>2022년 2월 24일 목요일
오후 12:00</p>
<p>Logical operator</p>
<p> System.out.println(1 == 1);  //이건 동등 연산자임!</p>
<p>//논리 연산자는 좌항과 우항에 모두 boolean이 와야 함
// &amp;&amp;=AND연산자
System.out.println(true &amp;&amp; true); //true
System.out.println(true &amp;&amp; false); //false
System.out.println(false &amp;&amp; true); //false
System.out.println(false &amp;&amp; false); //false</p>
<p>// OR연산자= &#39;||&#39;, 왼쪽것과 오른쪽것 중 하나라도 true면 &gt; true
System.out.println(true || true); //true
System.out.println(true || false); //true
System.out.println(false || true); //true
System.out.println(false || false); //false</p>
<p>// &#39;!&#39; = NOT연산자
System.out.println(!true); //false
System.out.println(!false); //true</p>
<pre><code>&gt;boolean isRightPass = (inputPass.equals(pass) || inputPass.equals(pass2));
            if (inputId.equals(id) &amp;&amp; isRightPass) { 
                System.out.println(&quot;Master!&quot;);
                } else {
            System.out.println(&quot;who are you?&quot;);</code></pre><p>isRightPass는 입력값이 pass와 pass2중 하나라도 만족하면 true를 retrun하도록 설정
&#39; | | &#39;가 or 이기 때문에 두개의 비밀번호중 하나라도 만족하면 true값을 얻을 수 있도록 설정한 것.</p>
<p>Run configuration의 argument에서 입력을 &#39;1111&#39; or &#39;2222&#39;면 true가 나오고 그 외에는 false가 됨.
논리 연산자는 이런게 가능!</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[코린이 제어문 2일차]]></title>
            <link>https://velog.io/@blue___ae/%EC%BD%94%EB%A6%B0%EC%9D%B4-%EC%A0%9C%EC%96%B4%EB%AC%B8-2%EC%9D%BC%EC%B0%A8</link>
            <guid>https://velog.io/@blue___ae/%EC%BD%94%EB%A6%B0%EC%9D%B4-%EC%A0%9C%EC%96%B4%EB%AC%B8-2%EC%9D%BC%EC%B0%A8</guid>
            <pubDate>Thu, 24 Feb 2022 02:59:53 GMT</pubDate>
            <description><![CDATA[<p><strong>Chapter 4. 문자의 비교</strong></p>
<p>2022년 2월 24일 목요일
오전 11:24</p>
<p>== vs equals
비교 연산자에 대해 더 자세히 알아보자</p>
<p>Primitive 원시 data type(더 이상 쪼갤 수 없는 데이터)
Ex.boolean, int, double, short, long, float, char
Non Primitive
Ex. String, array, day ….
                     [value]
Int P1 = 1 -------------1
Int P2 = 1 ------------┘
둘다 1을 지정하는데, 여기서 P1 == P2가 같은 곳(위치)을 가르키고 있느냐를 확인하는 연산자인데, 여기서 이건 true가 된다.
Int는 원시Datatype이라 equals를 가지고 있지도 않기에 동등 연산자를 사용해야한다.
                                         [value]
String o1 = new String&quot;java&quot;;------------&quot;java&quot;
String o2 = new String(&quot;java&quot;);----------&quot;java&quot;
이미 있음에도 새로운 &quot;java&quot;를 만듬.
여기서 동등 비교 연산자를 하게 되면 o1 == o2
&#39;==&#39;는 같은 곳에 위치하는 지를 확인하는 것인데, 그렇지 않기에 false
→원시 DataType이 아닌 객체들은 equals라는 Method를 가지고 있음
o1.equals(o2) 이런식으로 하면 내용이 같은지를 확인하고 맞다면 true 아니라면 false를 return해줌.
                                 [value]
String o3 = &quot;java2&quot; ------------ &quot;java2&quot;
String o4 = &quot;java2&quot; ---------------┘
??? 이건 문자열인데 왜 같은 곳으로 지정이 될까?</p>
<p>→일종의 특혜처럼 문자열은 java가 마치 원시 datatype처럼 생각함.
새로운 곳에 만들지 않고 이미 있는 걸 지정함.
o3 == o4 &gt;true </p>
]]></description>
        </item>
        <item>
            <title><![CDATA[코린이 제어문 1일차 -3]]></title>
            <link>https://velog.io/@blue___ae/%EC%BD%94%EB%A6%B0%EC%9D%B4-%EC%A0%9C%EC%96%B4%EB%AC%B8-1%EC%9D%BC%EC%B0%A8-3</link>
            <guid>https://velog.io/@blue___ae/%EC%BD%94%EB%A6%B0%EC%9D%B4-%EC%A0%9C%EC%96%B4%EB%AC%B8-1%EC%9D%BC%EC%B0%A8-3</guid>
            <pubDate>Tue, 22 Feb 2022 08:29:01 GMT</pubDate>
            <description><![CDATA[<p><strong>Chapter 3. 조건문</strong>
2022년 2월 22일 화요일
오후 4:10</p>
<p>조건문 형식
비교연산자 conditional Statement</p>
<p>조건문의 가장 기본적인 형식 if (blooean) {} true냐 false냐에 따라 중괄호 안에 있는 코드가 실행될 수도 있고 아닐 수도 있다.
Else를 이용해서 if 안에 있는 코드가 true나 false가 아닐때 다른 코드를 실행할 수 있게 해준다.</p>
<blockquote>
<p>if (false) {
            System.out.println(1);<br>        }</p>
</blockquote>
<p>데드코드가 됨. 영원히 실행될리가 없는 코드. 이런것도 있다라고만 알아두자 노란 밑줄쳐짐</p>
<p>조건문 응용
로그인 하는 APP을 만들어 보자</p>
<p>Id를 blue___ae로 설정한다 다음 
Run configurations의 argumentd에서 입력값을 미리 blue___ae로 해준다면
Id가 inputId와 같은 경우 뒤에 &#39;master!&#39;를 붙일 수 있는 조건문을 만드는 과정인데
당연히 입력값과 id는 같을테니 blooean은 true이기에 &#39;master!&#39;를 출력할 것이다.
<img src="https://images.velog.io/images/blue___ae/post/41268330-b407-4c0a-9309-fe15ac0cc34d/chapter%203%20%EC%A1%B0%EA%B1%B4%EB%AC%B8%20%EC%9D%91%EC%9A%A9.jpg" alt=""><br>관건은 왜 inputId == id로 했을 경우 에러가 나느냐인데 이거에 대한 설명은 듣지 못했다. 
그외에는 무난히 됐음.</p>
<p>조건문 응용 .2</p>
<p>Password를 도입시킨것으로 별거 없이 </p>
<blockquote>
<p>String pass = &quot;1111&quot;;
  String inputPass = args[1];
<img src="https://images.velog.io/images/blue___ae/post/1599e537-6524-405b-875a-9be8fb4b773c/chapter%203%20%EC%A1%B0%EA%B1%B4%EB%AC%B8%20%EC%9D%91%EC%9A%A9%202.jpg" alt=""><br>만 추가 시켰는데 여기서 조건문 if 를 두개 나열시켜서 상단에 주석화 시킨것과 같이 만들 수 있으나 논리 연산자 &amp;&amp;을 사용해서 간략화 시킬 수 있었다. 
<img src="https://images.velog.io/images/blue___ae/post/a0e82dc8-3582-434d-a346-0bd4b0445364/image.png" alt=""></p>
</blockquote>
]]></description>
        </item>
        <item>
            <title><![CDATA[코린이 제어문 1일차 -2]]></title>
            <link>https://velog.io/@blue___ae/%EC%BD%94%EB%A6%B0%EC%9D%B4-%EC%A0%9C%EC%96%B4%EB%AC%B8-1%EC%9D%BC%EC%B0%A8-2</link>
            <guid>https://velog.io/@blue___ae/%EC%BD%94%EB%A6%B0%EC%9D%B4-%EC%A0%9C%EC%96%B4%EB%AC%B8-1%EC%9D%BC%EC%B0%A8-2</guid>
            <pubDate>Tue, 22 Feb 2022 07:57:14 GMT</pubDate>
            <description><![CDATA[<p><strong>Chapter 2.</strong></p>
<p>2022년 2월 22일 화요일
오후 3:46</p>
<p>Blooean Datatype
blooean type은 굉장히 특이해서 여기에 속하는 data type은 단 두개다. </p>
<blockquote>
<blockquote>
<p>true or flase.</p>
</blockquote>
</blockquote>
<p>String foo = &quot;Hello world&quot;;
String true = &quot;Hello world&quot;; &gt;error
 &quot;&quot;가 없는 true라는 text는 blooean이다라고 약속되어 있기에 error가 남
이렇게 컴퓨터가 사용중이거나 할 예정인 몇개의 언어들을 reserved word라고 부름</p>
<p>그래서 얘네 둘을 언제 쓰냐</p>
<blockquote>
<p>System.out.println(foo.contains(&quot;world&quot;)); &gt;&gt;true
contains는 그 안에 들어있는 입력값이 해당문에 있다면 true를 없다면 false를 return함
System.out.println(foo.contains(&quot;egoing&quot;));  &gt;&gt;false</p>
</blockquote>
<p>Comparison Operator 비교 연산자
1+1=2
&quot;1&quot;+&quot;1&quot;=&quot;11&quot; //문자열 11이 됨. +는 문자&#39;열&#39;을 만들어내는 연산자</p>
<pre><code>Ø  System.out.println(1&gt;1);   //여기서 &#39;&gt;&#39;가 비교연산자 인가봄! 출력값은 false로 나옴
     System.out.println(1 == 1);   //&#39;=&#39;이 아니고 왜 &#39;==&#39;지?&gt;무튼 true
     System.out.println(1 &lt; 1);
     System.out.println(1 &gt;= 1)  ; //이상 이라는 뜻인가보네</code></pre><p>-왼쪽 값과 오른쪽 값을 비교해서 비교 연산자에 따라 true/false를 return해주는 듯</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[코린이 제어문 1일차 -1]]></title>
            <link>https://velog.io/@blue___ae/%EC%BD%94%EB%A6%B0%EC%9D%B4-%EC%A0%9C%EC%96%B4%EB%AC%B8-1%EC%9D%BC%EC%B0%A8-1</link>
            <guid>https://velog.io/@blue___ae/%EC%BD%94%EB%A6%B0%EC%9D%B4-%EC%A0%9C%EC%96%B4%EB%AC%B8-1%EC%9D%BC%EC%B0%A8-1</guid>
            <pubDate>Tue, 22 Feb 2022 07:55:08 GMT</pubDate>
            <description><![CDATA[<p>*<em>Chapter 1. 오리엔테이션 *</em></p>
<p>2022년 2월 22일 화요일
오후 3:38</p>
<p>수업소개
제어문 FLOW CONTROL</p>
<p>시간의 순서에 따라 Program을 작동만 시켜도 너무 혁신적이였음.
그러나 욕심은 끝이 없기에 더 많은 것을 원함.</p>
<p>조건에 따라 실행되는 순서를 제어하는 방식이 다른걸 conditional statement
엄청 많은 것을 반복해서 처리하는 걸 반복문이라고 함.</p>
<blockquote>
<p>반복문이나 조건문을 통해 많은 logic을 통제함</p>
</blockquote>
<p>먼저 알아야 할 건 boolean data type
비교 연산자 comparison operator
이 두개를 알아야 하는데</p>
<p>비교를 하는 능력은 살아 있는 것의 가장 중요한 특성일지도 모름
논리학의 위대한 성취중 하나인 blooean data type과 이걸 만들어내는 유일한 연산자인 
비교연산자 comparison operator를 배울거임.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[코린이 예습 10일차]]></title>
            <link>https://velog.io/@blue___ae/%EC%BD%94%EB%A6%B0%EC%9D%B4-%EC%98%88%EC%8A%B5-10%EC%9D%BC%EC%B0%A8</link>
            <guid>https://velog.io/@blue___ae/%EC%BD%94%EB%A6%B0%EC%9D%B4-%EC%98%88%EC%8A%B5-10%EC%9D%BC%EC%B0%A8</guid>
            <pubDate>Mon, 21 Feb 2022 06:07:49 GMT</pubDate>
            <description><![CDATA[<p><strong>10일차</strong> 22.02.20~22.02.21 </p>
<p>No.13 나의 앱 만들기 </p>
<p>오리엔테이션 </p>
<p>My App1을 만들어보자 지금까지 배운것을 통해! </p>
<p>어떤 앱을 만들것인가? &gt; 판매자라고 가정을 해보자.  </p>
<p>소비자에게 물건을 판매하는 가격&gt; 공급가=Value of supply라고 함. </p>
<p>국세청이 소비자에게 소비에 대한 세금을 부과&gt; 부가가치세=Value Added Tax,VAT </p>
<p>소비자가 판매자에게 세금을 얹어서 구매를 하면 판매자가 세금을 국세청에게 대신 전달하는 구조 </p>
<p>판매자가 판매를 하기 위해 쓴 돈&gt; 비용=expense </p>
<p>이것을 제한게 이익=income </p>
<p>이익을 배당에 따라 나누는 것을 dividend라고 한다. </p>
<p>기본 기능 구현 </p>
<p>시간의 순서에 따라 진행된다는 구조만 가지고 문제를 해결하는 방법을 알아보자! </p>
<p>회계: Accounting </p>
<p>변수 도입 </p>
<p>Edit&gt; File/Replace를 통해 특정 단어를 교체할 수 있음. ‘Replace All’을 누르면 전부 교체 가능 </p>
<p>Tip. [우클릭&gt; Refactor&gt; Extract Local Variable&gt; “OOO” enter]하면 전부 교체됨 </p>
<p>입력값 도입 </p>
<p>입력값에 따라 서로 다른 출력값을 주는 것을 만들고 싶음 </p>
<p>복습. Run configurations&gt; arguments가 입력값과 관련된 카테고리임. </p>
<blockquote>
<p>double valueOfSupply = 10000.0; 에서 공급가가 double 이였는데, 입력값 args[]는 string이기에 double로 바꿔주기 위해 Double.parseDouble(args[0]);로 바꿔줘야 함. </p>
</blockquote>
<p>복습. Duplicate를 통해 입력값을 여러개 run configurations에 만들어 줄 수 있음. </p>
<p>실행할때마다 eclipse키는게 귀찮으니, 이거 없이 java APP을 쓰고 싶다고 생각한다면 폴더 자체(ex. MyApp)을 우클릭해서 properties를 눌러 경로를 복사하고 cmd를 켜서 cd 붙여넣은 후, dir or dir/w를 하면 파일들이 보임. 그럼 실행시키고자 하는 프로그램이 보일텐데, </p>
<blockquote>
<p>java AccountingApp.java(예를들어) 하고 enter를 하면 에러가 난다. Args[0];값이 없어서 그런건데 띄어쓰기를 해서 입력값을 넣으면 결과값이 나온다 </p>
</blockquote>
<p>오리엔테이션 2 </p>
<p>배우지 않을걸 사용해서 문제를 해결해보자. </p>
<p>조건문 </p>
<p>제어문이라는 것을 우리 Project에 도입해서 개선시켜나가보자. </p>
<blockquote>
<p>if(income &gt; 10000.0) { </p>
</blockquote>
<pre><code>dividend1= income * 0.5; 

dividend2= income * 0.3; 

dividend3= income * 0.2; 

} else { 

dividend1= income * 1.0; 

dividend2= income * 0; 

dividend3= income * 0;     

} </code></pre><p>수입이 10,000원 이상일때는 분배를 저렇게 아니라면 dividend1에게 몰아주는 식으로 조건을 걸어 봄. </p>
<p>배열 </p>
<blockquote>
<p> double dividend1= income * 0.5; </p>
</blockquote>
<pre><code>double dividend2= income * 0.3; 

double dividend3= income * 0.2; </code></pre><p>이런식으로 되어 있는 변수는 지금이야 이름도 비슷하고 갯수가 적어 다른것에 영향을 받지 않을 수 있으나 작업이 복잡해질수록 헷갈릴수도 있고 영향을 받을 수도 있어서 깔끔하게 정리하는 작업이 중요한데 이것을 배열이라고 한다. </p>
<blockquote>
<p>double[] dividendRates = new double[3]; </p>
</blockquote>
<p>//double형의 데이터를 3개 담을 수 있는 수납상자가 띡 하고 만들어진것 </p>
<pre><code>dividendRates[0] = 0.5; 

dividendRates[1] = 0.3; 

dividendRates[2] = 0.2; </code></pre><p>이렇게 하면 double 데이터로 이루어져 있는 배열의 서로 연관된 값을 묶고 ‘divdiendRates’라는 이름을 붙인 것이다. 배열을 도입해서 각각의 값이 연관된 거라는 것을 알 수 있고, 이전에는 3개의 변수가 있었는데 하나로 묶어서 정리를 시킨것. 훨씬 가시성이 뛰어나졌다. </p>
<p>반복문-Loop </p>
<blockquote>
<p> System.out.println(&quot;dividend1 1 : &quot; + dividend1); </p>
</blockquote>
<pre><code>System.out.println(&quot;dividend1 2 : &quot; + dividend2); 

System.out.println(&quot;dividend1 3 : &quot; + dividend3); </code></pre><p>같은 작업을 반복하는데 그 개수가 3개가 아닌 몇십 몇백 몇천이라면 너무 길어질 것이다. 이것을 반복문을 사용해서 해결 가능하다. </p>
<blockquote>
<p> int i = 0; </p>
</blockquote>
<pre><code>while(i &lt; dividendRates.length) { 

System.out.println(&quot;Dividend : &quot; + income * dividendRates[i]);  

i = i + 1; 

} </code></pre><p>While은 반복문에 사용되는데 저 중괄호{}안에 있는 코드들이 계속 반복된다. </p>
<p>I를 정수로 지정 후 반복될때마다 1씩 더하게 해서 i가 dividendRates.length를 넘기 전까지 반복되게 하는 Loop인 셈이다.   </p>
<p>메소드 </p>
<p>는 서로 연관된 코드를 그루핑해서 이름을 붙인 정리정돈의 상자다 &lt;이것만 알아두면 됨. </p>
<p>Double vat = valueOfSupply * vatRate; 였는데, 드래그 해서 Refactor&gt; Extract Method한 후 Method name을 지정한뒤 가장 아래 Replcae 1 addi...를 해제해서 ok하면  </p>
<p>ex. getVAT(valueOfSupply, vatRate);로 바뀌는 것을 확인할 수 있다.  그리고 하단에  </p>
<blockquote>
<p>public static double getVAT(double valueOfSupply, double vatRate) { </p>
</blockquote>
<pre><code>    return valueOfSupply * vatRate; </code></pre><p>이렇게 나와 있는 것을 볼 수 있다. 이 부분은 Method를 만드는 code이다. / getVAT는 만들어진 Method를 호출하는 code라고 할 수 있다. </p>
<p>GetVAT() &lt; 괄호 안에 값을 지우고 Public~의 괄호 안 값 역시 지우면 좀더 간단하게 할 수 있지만 과정에서 값을 불러와야 하는 경우 getOOOO을 붙여서 그 값을 불러와야 하고 몇개의 변수는 전역 변수로 지정해줘야 한다. Refactor&gt; convert Local Variable to Fied로 해서 전역변수 지정! </p>
<p>클래스- 객체? </p>
<p>객체는 (class) 서로 연관된 변수와 Method를 grouping한 것이고 거기에 이름을 붙인것. 정리정돈의 상자 </p>
<p>이것이 중요한 이유는 소프트웨어를 만드는데 구조를 결정하기 때문이다. 신체의 뼈대같은 것 </p>
<p>Outline을 통해 Method등을 볼 수 있음. Window&gt; show view&gt; outline </p>
<p>현재 AccountingApp(예를들어)을 만들고 있는데, 작업이 복잡해질수록 자의가 아니여도 회계와 상관 없는 다른 취지의 변수가 있을 수도 있음. ex) anotherVariable = ...; 이런 다른게 있다면 생산성을 떨어뜨리는 방해요소가 될 수 있음. </p>
<p>이런 과정에서 우리를 구원해주는게 Class </p>
<blockquote>
<p>class Accounting{   </p>
</blockquote>
<p>이렇게 열고 나서 </p>
<p>각종 class들을 그 아래 붙여 놓으면 소속 자체가 달라지고 명확해지며, 다른 소속과 겹쳐도 상관이 없음  </p>
<p>인스턴스 </p>
<p>객체 지향의 양대산맥은 class와 instance </p>
<p>Instance: 하나의 Class를 복제해서 서로다른 data의 값과 서로 같은 Method를 가진 복제본을 만드는 것이다. </p>
<p>만일 수십 수백개의 method가 있고 호출이 되었다고 하는데 어쩌다 다른 제품(값을 가진)이 들어왔다고 치면 </p>
<blockquote>
<p>   accounting.valueOfSupply = 20000.0; </p>
</blockquote>
<pre><code>accounting.vatRate = 0.05; 등  </code></pre><p>이거 조금 달라졌다고 전부 class의 내부 상태를 바꿔줘야하는데 귀찮고 버그를 마늘 가능성도 높음 </p>
<p>New를 붙이면 되는 것이다! 라고 할 수 있음 </p>
<p>Accounting A1 = new Accounting (); 이런식으로 new를 붙여 class를 Instance로 만들어주고  </p>
<p>그 밑에 A1의 값을 지정해주면 된다. A1.valueOfSupply = 10000.0; 이런식으로 말이다. </p>
]]></description>
        </item>
    </channel>
</rss>