<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>cokesh.log</title>
        <link>https://velog.io/</link>
        <description>개발 공부로그~</description>
        <lastBuildDate>Wed, 04 May 2022 11:31:06 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>cokesh.log</title>
            <url>https://velog.velcdn.com/images/coke_sh___/profile/97fcfac7-717c-48cc-b184-5b5526ba1fb2/image.gif</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. cokesh.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/coke_sh___" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[[kosta] JAVA - 12일차]]></title>
            <link>https://velog.io/@coke_sh___/kosta-JAVA-12%EC%9D%BC%EC%B0%A8</link>
            <guid>https://velog.io/@coke_sh___/kosta-JAVA-12%EC%9D%BC%EC%B0%A8</guid>
            <pubDate>Wed, 04 May 2022 11:31:06 GMT</pubDate>
            <description><![CDATA[<h2 id="wrapper-class">Wrapper Class</h2>
<p>기본형 -&gt; String으로 바꿔주는 메소드를 활용
String s = String.valueOf();
String -&gt; 기본형으로 바꿔주는 메소드를 활용
int j = Integer.parseInt(s);</p>
<h2 id="string-메소드">String 메소드</h2>
<p>기본형 -&gt; 참조형으로 바꿔주는 방법
Integer inte = new Integer(i);
참조형 -&gt; 기본형으로 바꿔주는 방법
int k = inte.intValue();
<img src="https://velog.velcdn.com/images/coke_sh___/post/111bfcd8-befc-46ab-afe9-24e511ce8716/image.jpeg" alt="">
<strong><em>기본형에 대한 정보를 알려주는 Wrapper Class</em></strong></p>
<h2 id="stringtokenizer">StringTokenizer</h2>
<p>StringTokenizer 는 빈 문자열을 인식 못한다.</p>
<h2 id="list-set-map">List Set Map</h2>
<p>Collection에는 List 와 Set이 있다.</p>
<h3 id="list">List</h3>
<p>List : 크기가 고정되어져 있지 않고 동적으로 변한다는 점이다.
원하는 만큼의 값을 담을 수 있다.</p>
<pre><code>ArrayList &lt;String&gt; pitches = new ArrayList&lt;&gt;();</code></pre><h3 id="set">Set</h3>
<p>중복을 허용하지 않는다.
순서가 없다.
리스트나 배열은 순서가 있기 때문에 인덱싱을 통해 자료형의 값을 얻을순 있지만 집합 자료형은 순서가 없기 때문에 인덱싱으로 값을 얻을 수 없다.
맵자료형 역시 순서가 없는 자료형이라 인덱싱을 지원하지 않는다.
(중복을 허용하지 않는 집합 자료형의 특징은 자료형의 중복을 제거하기 위한 필터역할)</p>
<ul>
<li>TreeSet 오름차순으로 값을 정렬하여 저장하는 특징</li>
<li>LinkedHashSet 입력한 순서대로 값을 정렬하여 저장하는 특징</li>
</ul>
<h3 id="map">Map</h3>
<p>Map은 대응관계를 쉽게 표현할 수 있게 해주는 자료형임.
맵은 사전과 비슷하다. -&gt; <strong><em>Key 와 value를 한 쌍으로 갖는 자료형</em></strong>
<img src="https://velog.velcdn.com/images/coke_sh___/post/3db25129-fcfb-4b59-8f3a-6bb193d13ce0/image.png" alt="">
Map 은 key를 통해 value를 얻는다.
baseball 이라는 단어가 있는 곳만 펼쳐본다.</p>
<ul>
<li>LinkedHashMap 입력된 순서대로 데이터를 저장하는 특징</li>
<li>TreeMap 입력된 key의 오름차순 순서로 데이터를 저장하는 특징</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[kosta]JAVA 10일차]]></title>
            <link>https://velog.io/@coke_sh___/kostaJAVA-12%EC%9D%BC%EC%B0%A8</link>
            <guid>https://velog.io/@coke_sh___/kostaJAVA-12%EC%9D%BC%EC%B0%A8</guid>
            <pubDate>Sat, 30 Apr 2022 10:15:07 GMT</pubDate>
            <description><![CDATA[<h2 id="자바에서-에러와-예외의-차이점">자바에서 에러와 예외의 차이점</h2>
<h3 id="에러">에러</h3>
<p>에러는 Throwable의 서브 클래스이다.
오류는 시스템 자원부족으로 인해 발생하는 조건이며 프로그램 코드로 처리할 수 없다.
컴파일러는 발생에 대한 지식이 없으므로 검사되지 않은 유형이다.
오류가 발생하면 프로그램이 비정상적으로 종료된다.</p>
<h3 id="예외">예외</h3>
<p>Throwable의 하위 클래스이다. 예외는 런타임 환경에서 발생하는 예외적인 조건이다.
예외의 대부분은 프로그램의 코드로 발생하지만 예외는 복구할 수 있으므로 프로그램 자체에서 예외를 처리할 수 있다. -&gt; 부적정한 코드로 인해 발생한 실수를 예외라고 할수 있다.</p>
<h2 id="예외처리">예외처리</h2>
<p>프로그램을 만들다 보면 수많은 오류가 발생한다. 
이러한 오류를 무시하고 싶을 때도 있고 오류가 날 때 그에 맞는 적절한 처리를 하고 싶을 때도 있다.
이에 자바는 try catch, throw구문을 이용해 오류를 처리한다.
<img src="https://velog.velcdn.com/images/coke_sh___/post/5d1dadb5-4b00-45aa-8926-1172b05cd341/image.png" alt="">
존재하지 않은 파일을 열려고 하면 FileNotFoundException이라는 이름의 예외가 발생한다.</p>
<pre><code>int c = 4/0;
=&gt; ArithmeticException예외가 발생한다.

try {

} catch(예외 1) {
} catch(예외 2) {
} finally {
}
</code></pre><p>try 문안의 수행할 문장들에서 예외가 발생하지 않는다면 catch문 다음의 문장들은 수행이 되지 않는다.</p>
<p>ArithmeticException e 에서 e는 ArithmeticException 클래스의 객체, 즉 오류 객체에 해당한다.
이 오류 객체를 통해 해당 예외 클래스의 메서드를 호출할 수 있다.</p>
<p>finally 구문은 try 문장 수행 중 예외발생 여부에 상관없이 무조건 실행된다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[kosta] JAVA 9일차]]></title>
            <link>https://velog.io/@coke_sh___/kosta-JAVA-11%EC%9D%BC%EC%B0%A8</link>
            <guid>https://velog.io/@coke_sh___/kosta-JAVA-11%EC%9D%BC%EC%B0%A8</guid>
            <pubDate>Fri, 29 Apr 2022 06:35:34 GMT</pubDate>
            <description><![CDATA[<h2 id="어노테이션">어노테이션</h2>
<p>@Override
어노테이션은 메타데이터라고 볼 수 있음.
메타데이터란 컴파일 과정과 실행과정에서 코드를 어떻게 컴파일하고 처리할 것인지를 알려주는 정보임.</p>
<ul>
<li>컴파일러에게 코드문법에러를 체크하도록 정보를 제공</li>
<li>소프트웨어 개발 툴이 빌드나 배치시 코드를 자동으로 생성할 수 있도록 정보를 제공</li>
<li>실행시 특정기능을 실행하도록 정보를 제공</li>
</ul>
<blockquote>
<p>메소드가 오버라이드된 것임을 컴파일러에게 알려주어 컴파일럭가 오버라이드 검사를 해도록 해준다. 정확히 오버라이드가 되지 않았다면 컴파일러는 에러를 발생시킴</p>
</blockquote>
<h2 id="상속">상속</h2>
<p>부모가 자식에게 물려주는 행위
프로그램에서는 부모 클래스를 상위 클래스라 부르기도 하고
자식클래스를 하위 클래스(파생클래스)라고 부른다.
상속은 이미 잘 개발된 클래스를 재사용해서 새로운 클래스를 만들기 때문에 코드의 중복을 줄여준다.
클래스들의 수정효과를 가져오기 때문에 유지보수시간을 최소화시켜준다.
현실에서 상속은 부모가 자식을 선택해서 물려주지만 프로그램에서는 자식이 부모를 선택한다.</p>
<pre><code>class 자식클래스 extends 부모클래스 {
    필드
    생성자
    메소드
}</code></pre><p>자바에서도 자식객체를 생성하면 부모 객체가 먼저 생성되고 자식 객체가 그 다음에 생성된다.
모든 객체는 클래스의 생성자를 호출해야만 한다.
부모 생성자는 자식 생성자의 맨 첫 줄에서 호출된다.</p>
<h2 id="추상클래스">추상클래스</h2>
<h3 id="개념">개념</h3>
<p>추상은 실체간에 공통되는 특성을 추출하는 것이다.
삼성, 현대, lg 등의 실체에서 공통되는 특성을 추출해보면 회사라는 공통점이 있다.
회사는 구체적인 실체라기보다는 실체들의 공통되는 특성을 가지고 있다.
객체를 직접 생성할 수 있는 클래스를 실체 클래스라고 한다면 이 클래스들의 공통적인 특성을 추출해서 선언한 클래스를 추상클래스라고 한다.
추상클래스는 실체 클래스의 공통되는 필드와 메소드를 추출해서 만들었기 때문에 객체를 직접 생성해서 사용할수없다.</p>
<ul>
<li>추상클래스는 new연산자를 사용하여 객체를 생성하지 못한다.</li>
<li>추상클래스는 새로운 실체 클래스를 만들기 위해 부모클래스로만 사용</li>
<li>추상클래스는 extends 뒤에만 올수 있는 클래스임</li>
</ul>
<h3 id="용도">용도</h3>
<ol>
<li>실채클래스들의 공통된 필드와 메소드의 이름을 통일할 목적</li>
<li>실체 클래스를 작성할 때 시간을 절약</li>
</ol>
]]></description>
        </item>
        <item>
            <title><![CDATA[[kosta] JAVA 8일차]]></title>
            <link>https://velog.io/@coke_sh___/kosta-JAVA-10%EC%9D%BC%EC%B0%A8</link>
            <guid>https://velog.io/@coke_sh___/kosta-JAVA-10%EC%9D%BC%EC%B0%A8</guid>
            <pubDate>Thu, 28 Apr 2022 00:00:23 GMT</pubDate>
            <description><![CDATA[<h3 id="다형성">다형성</h3>
<p>같은 타입이지만 실행 결과가 다양한 객채를 이용할 수 있는 성질이다.</p>
<p>다형성을 위해 자바는 부모클래스로 타입변환을 허용한다. -&gt; 부모타입에 모든 자식객체가 대입될수 있다.
이것을 이용하여 제품의 객체화가 가능해진다.
클래스 타입의 변환은 상속관계에 있는 클래스 사이에서 발생한다.
자동타입변환 : 자식은 부모의 특징과 기능을 상속받기 때문에 부모와 동일하게 취급될수 있다.
고양이는 동물이다 라는 말이 성립이 된다.</p>
<p>부모타입으로 변환된 이후에는 부모클래스에 선언된 필드와 메소드만 접근이 가능함.
but, 메소드가 자식 클래스에서 오버라이딩되었다면 자식 클래스의 메소드가 대신 호출된다.</p>
<p>다형성이란 동일한 타입을 사용하지만 다양한 결과가 나오는 성질을 말함.
프로그램은 수많은 객체들이 서로 연결되고 각자의 역할을 하게 되는데 이객체들은 다른 객체로 교체될수 있어야 한다.
새로 교체되는 타이어 객체는 언제든지 성능이 좋은 타이어 객체로 교체할수 있어야 한다.
새로교체되는 타이어는 기존 타이어와 사용방법이 동일하지만 성능은 더 우수하게 나와야 한다.(오버라이딩한 메소드는 실행결과가 더 우수해야함)</p>
<p><strong>매개변수의 다형성</strong>
매개값을 다양화하기 위해 매개 변수에 자식 타입객체를 지정할 수도 있다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[kosta] JAVA 7일차]]></title>
            <link>https://velog.io/@coke_sh___/kosta-JAVA-9%EC%9D%BC%EC%B0%A8</link>
            <guid>https://velog.io/@coke_sh___/kosta-JAVA-9%EC%9D%BC%EC%B0%A8</guid>
            <pubDate>Wed, 27 Apr 2022 05:14:41 GMT</pubDate>
            <description><![CDATA[<h3 id="싱글톤">싱글톤</h3>
<p>전체프로그램에서 단 하나의 객체만 만들도록 보장해야 할 때 사용함.
단 하나만 생성된다고 해서 싱글톤이라고 한다.</p>
<ol>
<li>생성자를 호출한 만큼 객체가 생성되기 때문에 클래스 외부에서 new연산자로 생성자를 호출할 수 없도록 막아야 한다.</li>
<li>생성자를 외부에서 호출할 수 없도록 private 접근 제한자를 붙인다.</li>
<li>자신의 타입인 정적 필드를 하나 선언하고 자신의 객체를 생성해서 초기화한다,</li>
<li>정적필드 또한 private</li>
<li>외부에서 호출할 수 있는 정적메소드인 getInstance()를 선언 - 자신의 객체를 리턴함.</li>
</ol>
<pre><code>public class Singleton{
    private static Singleton singleton = new Singleton();

    private Singleton(){}

    static Singleton getInstance() {
        return singleton;
    }
}</code></pre><h3 id="final필드와-상수">final필드와 상수</h3>
<p>final이란? 최종적인 필드란 뜻이다. 프로그램 실행 도중에 수정할 수 없다는 것이다.</p>
<pre><code>final 타입 필드[=초기값];</code></pre><p>생성자는 final필드의 최종 초기화를 마쳐야 하는데 만약 초기화가 되지 않은 필드를 그대로 남겨두면 컴파일 에러가 발생한다.</p>
<p>주민등록필드는 한번 값이 저장되면 변경할 수 없도록 final 필드로 선언함.</p>
<pre><code>final String registerNum;</code></pre><p>final 필드를 상수라고 부르지 않는 이유?
final 필드는 객체마다 저장되고 생성자의 매개값을 통해서 여려가지 값을 가질수 있기 때문이다.
상수는 static이면서 final이어야 한다.
static final 필드는 객체마다 저장되지 않고 클래스에만 포함된다. 한번 초기값이 저장이 되면 변경할 수 없다.
초기값이 단순 값이라면 선언시에 주는 것이 일반적이다.
하지만 복잡한 초기화일 경우 정적블록에서도 할 수 있음.</p>
<pre><code>static final 타입 상수;
static {
    상수 = 초기값;
}</code></pre><h3 id="패키지">패키지</h3>
<p>패키지는 클래스를 컴파일하는 과정에서 자동적으로 생성되는 폴더이다.
컴파일러는 클래스에 포함되어 있는 패키지 선언을 보고 파일 시스템의 폴더로 자동 생성시킴.</p>
<pre><code>패키지를 선언하는 방법: package 상위패키지.하위패키지;</code></pre><p>패키지이름이 중복될 가능성이 있기 때문에 흔히 회사의 도메인 이름으로 패키지를 만든다.
도메인 이름으로 할 때는 도메인 이름의 역순으로 패키지이름을 지어준다.
<strong>com.lg.projectname</strong></p>
<p>다른 패키지에 속하는 클래스들을 사용하가 위한 두가지 방법이 있다.</p>
<ol>
<li>com.hankook.Tire tire = new com.hankook.Tire();</li>
<li>import com.hankook.Tire; or import com.hanKook.*;</li>
</ol>
<p>주의할 점은 패키지 이름 전체를 기술해야 하는 경우가 있는데 서로 다른 패키지에 동일한 클래스 이름이 존재하고, 두 패키지가 모두 import되어 있을 경우이다.</p>
<h3 id="접근제한자">접근제한자</h3>
<p>객체 생성을 막기 위해 생성자를 호출하지 못하게 하거나 객체의 특정 데이터를 보호하기 위해 해당 필드에 접근하지 못하도록 해야함.
접근제한자는 public, protected, default, private 가 있다.</p>
<p><img src="https://velog.velcdn.com/images/coke_sh___/post/0430bbb5-4ffc-4e87-95f9-1d23d3a3273f/image.png" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[kosta] JAVA  6일차]]></title>
            <link>https://velog.io/@coke_sh___/kosta-JAVA-class-instance</link>
            <guid>https://velog.io/@coke_sh___/kosta-JAVA-class-instance</guid>
            <pubDate>Mon, 25 Apr 2022 23:39:38 GMT</pubDate>
            <description><![CDATA[<h3 id="클래스">클래스</h3>
<p>클래스란 설계도라고 이해하는 것이 편하다. 설계도는 어떠한 규칙에 따랄서 그린 도면을 말한다.
따라서 소프트웨어의 세계에서는 클래스가 설계도이다.</p>
<p>클래스를 통하여 만들어진(new 연산자)를 인스턴스라고 한다.
new 연산자와 같이 사용되어 클래스로부터 객체를 생성할 때 호출되어 객체의 초기화를 담당한다.
클래스의 변수를 클래스 변수라고 하고 인스턴스의 변수를 인스턴스변수라고 한다.</p>
<p>클래스의 변수를 static한 값으로 생성한다면 실행클래스에서 클래스변수에 값을 할당가능함</p>
<blockquote>
<p>클래스 변수를 사용하는 이유는?
인스턴스에 따라서 변하지 않는 값이 필요한 경우(final을 쓰면 더 좋음)
인스턴스를 생성할 필요가 없는 값을 클래스에 저장하고 싶은 경우
값의 변경사항을 모든 인스턴스가 공유해야 하는 경우</p>
</blockquote>
<p>메소드에 static을 붙이면 클래스에 직접 접근하여 사용가능</p>
<p>인스턴스 메소드는 클래스멤버에 접근할 수 있다.
클래스 메소드는 인스턴스 멤버에 접근할 수 있다.</p>
<p>인스턴스 변수 -&gt; Non Static Field
클래스 변수 -&gt; Static Field
(필드라는 것은 클래스 전역에서 접근할 수 있는 변수를 의미함.)</p>
<h3 id="생성자">생성자</h3>
<p>리턴타입이 없으며 클래스이름과 동일함.
클래스에 명시적 선언한 생성자가 한개라도 있으면 컴파일러는 기본 생성자를 추가시킴.
명시적으로 생성자를 선언하는 이유는 객체를 다양하게 초기화하기위해서이다.</p>
<h3 id="메소드-오버로딩">메소드 오버로딩</h3>
<p>한 클래스 내에 같은 이름의 메소드를 여러개 선언하는것.
오버로딩의 조건은 매개변수의 타입, 개수, 순서 중 하나가 달라야 함.
오버로딩을 하는 결정적 이유는 &quot;같은 목적의 기능을 만들기 위해서&quot;</p>
<blockquote>
<p>javadoc을 이클립스에서 하는법
나중에 프로젝트할 때 설명을 잘 해놓으면 좋다.(남들이 내코드를 더 잘 알아보게 하기 위해)
.java 파일을 우클릭 - export - next - next -next - 만약 한글이 포함되어 있으면 vm options에 다음과 같이 입력함.</p>
</blockquote>
<pre><code>-locale ko_KR -encoding UTF-8 -charset UTF-8 -docencoding UTF-8</code></pre><p>더 정확하고 알기 쉽게 설명서를 작성해야 한다!</p>
<h3 id="static">static</h3>
<p>정적멤버는 클래스에 고정된 멤버로서 객체를 생성하지 않고 사용할 수 있는 필드와 메소드를 말함.
static은 클래스 로더가 클래스를 로딩해서 메소드 메모리 영역에 적재할 때 클래스 별로 관리된다. -&gt; 클래스의 로딩이 끝나면 바로 사용가능함.</p>
<p>객체마다 가지고 있는 필요성이 없는 공용적인 데이터라묜 정적필드로 선언하는 것이 좋다.
ex) 원의 넓이나 둘레를 구할 때 필요한 파이는 객체마다 가지고 있을 필요가 없는 변하지 않는 공용적인 데이터이므로 정적필드로 선언.
<strong>클래스가 메모리로 로딩되면 정적멤버를 바로 사용가능</strong></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[kosta] Reference Type & JVM]]></title>
            <link>https://velog.io/@coke_sh___/kosta-Reference-Type-JVM</link>
            <guid>https://velog.io/@coke_sh___/kosta-Reference-Type-JVM</guid>
            <pubDate>Sun, 24 Apr 2022 13:27:26 GMT</pubDate>
            <description><![CDATA[<h2 id="reference-type">Reference Type</h2>
<p>전까지 기본타입으로 변수를 선언하고 데이터를 저장하였다면 오늘 배운것은 
객체의 번지를 참조하는 타입이다.
참조타입에는 배열 / 열거 / 클래스 / 인터페이스</p>
<p>참조타입으로 선언된 변수는 메모리의 번지를 값으로 갖는다.번지를 통해 객체를 참조한다는 뜻에서 참조타입이라고 부른다.</p>
<p>변수는 스택이란 영역에 생성이 되고 객체는 힙 영역에 생성된다.
String 타입 변수에 저장을 할 경우 주소값이 스택영역(?)에  저장이 되고 생성된 주소가 참조하는 값이 힙영역(?)에 객체로 생성이 된다.</p>
<blockquote>
<p>주소를 통해 객체를 참조한다는 뜻에서 String 클래스 변수를 참조타입 변수라고 한다.</p>
</blockquote>
<p>그렇다면 스택영역은 무엇이고 힙영역은 무엇일까?
자바는 JVM이라는 자바가상기계라는 가상의 운영체제를 갖고 있다. 이는 바이트코드를 해석하고 실행하는 역할을 한다.
JVM은 실행할 때 운영체제에서 할당받은 메모리 영역을 여러 영역으로 나누어 사용한다.</p>
<h3 id="메소드영역">메소드영역</h3>
<p>메소드 영역이 하는 역할은 코드에서 사용되는 .class 들을 클래서 로더로 읽어 클래스 별로 런타임 상수풀, 필드 데이터, 메소드데이터, 메소드 코드, 생성자 코드 등을 분류하여 저장한다.
메소드 영역은 JVM이 시작할 때 생성되고 모든 스레드가 공유하는 영역이다.</p>
<blockquote>
<p>JVM이 뭔가를 실행하려면 먼저 그 바이트 코드들이 메모리 공간에 저장이 되어있어야함.
JVM은 메인 메소드를 호출하는 것으로 시작을 함. 여기서부터 프로그램이 시작이됨.</p>
</blockquote>
<h3 id="힙영역">힙영역</h3>
<p>힙영역은 객채와 배열이 생성되는 영역이다.
그렇게 생성된 객체와 배열은 JVM스택 영역의 변수나 다른 객체의 필드에서 참조한다. 하지만 참조하는 변수나 필드가 없다면 의미 없는 객체가 되기 때문에 이것을 쓰레기로 취급하고 Garbage Collector를 실행시켜 쓰레기 객체를 힙영역에서 자동으로 삭제한다.</p>
<h3 id="스택영역">스택영역</h3>
<p>스택영역은 각 스레드마다 하나씩 존재하며 스레드가 시작될때 할당이 된다.
메소드를 호출할 때마다 프레임을 추가하고 메소드가 종료되면 해당 프레임을 제거하는 동작을 수행함.
프레임 내부에는 로컬 변수 스택이 있는데, 기본타입 변수와 참조타입 변수가 추가 되거나 제거된다.
변수가 이 영역에 생성되는 시점은 초기화가 될때, 최초로 변수에 값이 저장될 때이다.</p>
<p>클래스를 실행시키면</p>
<ol>
<li>.class파일 찾기</li>
<li>클래스를 JVM에 로드함.</li>
<li>바이트코드를 검증</li>
<li>0과1로 재해석</li>
<li>클래스 영역에 기억시킨다.</li>
<li>static 변수 자동초기화됨.</li>
<li>main() 호출함.    </li>
</ol>
]]></description>
        </item>
        <item>
            <title><![CDATA[[kosta] Java : OOP]]></title>
            <link>https://velog.io/@coke_sh___/kosta-Java-OOP</link>
            <guid>https://velog.io/@coke_sh___/kosta-Java-OOP</guid>
            <pubDate>Thu, 21 Apr 2022 03:20:14 GMT</pubDate>
            <description><![CDATA[<h3 id="객체지향-프로그래밍이란object-oriented-programming">객체지향 프로그래밍이란?(Object Oriented Programming)</h3>
<p>기계들의 해당 부품을 먼저 만들고 이것들을 하나씩 조립해나가는 기법을 말한다.</p>
<h3 id="객체란">객체란?</h3>
<p>객체는 속성과 동작으로 이뤄져 있다.(필드 + 메서드)
자동차로 치면 자동차의 색상, 바퀴의 갯수, 문의 갯수 등이 속성(필드)이며 전진하다, 후진하다 등과 같은 동작이 메서드이다.</p>
<p>현실세계의 객체를 software객체로 설계하는 것을 객체모델링이라고 한다.</p>
<h3 id="캡슐화란">캡슐화란?</h3>
<p>객체의 필드, 메소드를 하나로 묶고 실제 구현내용을 감추는 것을 말함.</p>
<ul>
<li>캡슐화 왜필요해?
  외부의 잘못된 사용으로 인해 객체가 손상되지 않도록 하는 것이다.</li>
</ul>
<h3 id="상속이란">상속이란?</h3>
<p>상위객체가 가지고 있는 필드와 메서드를 하위 객체에게 물려주어 하위 객체가 사용할 수 있도록 해준다.</p>
<h3 id="다형성이란">다형성이란?</h3>
<p>같은 타입이지만 실행결과가 다양한 객체를 이용할 수 있는 성질을 말한다.</p>
<h3 id="class">Class</h3>
<p>메모리에서 사용하고 싶은 객체가 있다면 우선 설계도로 해당 객체를 만드는 작업이 필요하다.
자바에서는 설계도가 바로 class이다.
클래스에는 객체를 생성하기 위한 필드와 메서드가 정의되어 있다.
객체를 해당 클래스의 인스턴스라고 한다.
(자동차 객체는 자동차 클래스의 인스턴스임)
객체를 만드는 과정 =&gt; 인스턴스화
동일한 설계도로부터 여러 대의 자동차를 만드는 것과 동일하다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[kosta] Java 연산자]]></title>
            <link>https://velog.io/@coke_sh___/kosta-Java-%EC%97%B0%EC%82%B0%EC%9E%90</link>
            <guid>https://velog.io/@coke_sh___/kosta-Java-%EC%97%B0%EC%82%B0%EC%9E%90</guid>
            <pubDate>Wed, 20 Apr 2022 08:42:29 GMT</pubDate>
            <description><![CDATA[<h2 id="자바의-데이터-타입">자바의 데이터 타입</h2>
<p>데이터타입에는 크게 기본형(Primitive)과 참조형(Reference)가 있다.</p>
<h2 id="기본형">기본형</h2>
<ul>
<li>숫자형
  -정수형 : byte / short / int / long
  -실수형 : float / double</li>
<li>문자형
  -char</li>
<li>논리형
  -boolean</li>
</ul>
<p><strong>각 데이터 타입의 크기는 아래와 같다.</strong>
1byte - byte
2byte - short char
4byte - int &lt; float
8byte - long &lt; double</p>
<blockquote>
<p>float 과 double은 각각 4byte 8byte 이지만 표현할수 있는 범위가 더 크다.</p>
</blockquote>
<h3 id="형변환">형변환</h3>
<p>형변환은 크게 두가지로 나뉜다. 자동형변환 / 강제형변환
자동형변환이란?
프로그램 실행 도중에 자동적으로 타입변환이 일어나는 것을 말한다.
작은 크기를 가진 타입이 큰 크기의 타입에 저장될 때 발생한다.
반대로 작은 크기를 가진 타입안에 큰 크기의 타입을 저장할 때는 어떻게 될까?
아쉽게도 자동으로 이뤄지지 않으면서 그대로 실행할 경우 컴파일상 오류가 발생한다.
<img src="https://velog.velcdn.com/images/coke_sh___/post/718008c5-cfa2-4202-9ed7-23bda848ace5/image.png" alt="">
<em>사진과 같이 int타입의 값을 byte 변수에 담을수 없는 것처럼 말이다.</em></p>
<p>그렇다면 이를 해결하기 위한 방법은?
바로 <strong>&quot;강제형변환&quot;</strong>이다.
이 방법은 큰 그릇을 작은 그릇 사이즈로 쪼개어서 한 조각만 작은 그릇에 넣는것이다.
강제형변환을 <strong>캐스팅</strong>이라고 한다.
캐스팅을 할 때에는 캐스팅연산자인 ()를 사용하는데 괄호 안에 들어가는 타입은 쪼개는 단위이다. </p>
<blockquote>
<p>short타입과 char타입은 메모리공간이 서로 2byte로 같지만 short는 음수부터 양수까지의 범위이므로 char는 문자가 들어가는 타입이기때문에 애초에 자동형변환이 성립이 되지않음
또한, boolean 타입은 다른 타입과(강제, 자동)형변환이 불가능하다.</p>
</blockquote>
<p>캐스팅을 할 때에 가장중요한 것은 사용자로부터 입력받은 값을 변환할 때에 값의 손실이 발생하면 안된다. 캐스팅하기 전에 우선 안전하게 값이 보존될수 있는지 검사하는 것이 좋다!</p>
<pre><code>int i = 128;

if(i&lt;Byte.MIN_VALUE)||(i&gt;Byte.MAX_VALUE){
    System.out.println(&quot;byte타입으로 변환할 수 없다.&quot;);
    System.out.println(&quot;값을 다시 확인해 주세요.&quot;);
} else{
    byte b = (byte)i;
    System.out.println(b);
}</code></pre>]]></description>
        </item>
    </channel>
</rss>