<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>zo_ohbb.log</title>
        <link>https://velog.io/</link>
        <description></description>
        <lastBuildDate>Sun, 01 Oct 2023 07:10:58 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>zo_ohbb.log</title>
            <url>https://velog.velcdn.com/images/zo_ohbb/profile/ad97fa3f-1272-4408-b83f-4d28a448eba8/image.png</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. zo_ohbb.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/zo_ohbb" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[Java 객체지향 - 다향성]]></title>
            <link>https://velog.io/@zo_ohbb/Java-%EA%B0%9D%EC%B2%B4%EC%A7%80%ED%96%A5-%EB%8B%A4%ED%96%A5%EC%84%B1</link>
            <guid>https://velog.io/@zo_ohbb/Java-%EA%B0%9D%EC%B2%B4%EC%A7%80%ED%96%A5-%EB%8B%A4%ED%96%A5%EC%84%B1</guid>
            <pubDate>Sun, 01 Oct 2023 07:10:58 GMT</pubDate>
            <description><![CDATA[<pre><code>class Coffee {
    int price;

    public Coffee(int price){
        this.price = price;
    }
}

class Americano extends Coffee {
    public Americano(){
        super(4000);
    }
    //Object 클래스 toString() 메서드 오버라이딩
    public String toString(){
        return &quot;아메리카노&quot;;
    }    
}

class CaffeLatte extends Coffee {
    public CaffeLatte(){
        super(5000);
    }
    //Object 클래스 toString() 메서드 오버라이딩
    public String toString(){
        return &quot;카페라떼&quot;;
    }    
}

class Customer {
    int money = 5000;

    void buyCoffee(Coffee coffee) {
        if (money &lt; coffee.price) {
            System.out.println(&quot;잔액이 부족합니다&quot;);
            return;
        }
        money -= coffee.price;
        System.out.println(coffee + &quot;를 구매하였습니다.&quot;);
    }


    /*
    아메리카노, 카페라떼 구매 메서드를 따로 구현하지 않아도 된다. 
    void buyCoffee(Americano americano){
        money -= americano.price;
    }
    void buyCoffee(CarreLatte caffeLatte){
        money -= caffeLatte.price;
    }
    */

}</code></pre><pre><code>public class PolymorphismEx {
    public static void main(String[] args) {
        Customer me = new Customer();
        me.buyCoffee(new Americano());
        me.buyCoffee(new CaffeLatte());

        System.out.println(&quot;현재 잔액: &quot; + me.money)
    }
}</code></pre>]]></description>
        </item>
        <item>
            <title><![CDATA[[Openstack] Keystone - Identity]]></title>
            <link>https://velog.io/@zo_ohbb/Openstack-Keystone-Identity</link>
            <guid>https://velog.io/@zo_ohbb/Openstack-Keystone-Identity</guid>
            <pubDate>Sat, 30 Sep 2023 05:05:39 GMT</pubDate>
            <description><![CDATA[<p>Openstack 서비스 전반에서 인증, 권한 부여 및 식별 서비스를 처리하며 단일 로그인 기능을 제공한다 </p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Openstack] Glance - Image]]></title>
            <link>https://velog.io/@zo_ohbb/Openstack-Glance-Image</link>
            <guid>https://velog.io/@zo_ohbb/Openstack-Glance-Image</guid>
            <pubDate>Sat, 30 Sep 2023 05:04:37 GMT</pubDate>
            <description><![CDATA[<p>새로운 인스턴스를 생성하는데 사용되는 가상 머신 이미지를 관리한다. 사용자가 템플릿으로 사용할 수 있는 이미지 목록을 제공한다 </p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Openstack] Swift - Object Storage]]></title>
            <link>https://velog.io/@zo_ohbb/Openstack-Swift-Object-Storage</link>
            <guid>https://velog.io/@zo_ohbb/Openstack-Swift-Object-Storage</guid>
            <pubDate>Sat, 30 Sep 2023 05:03:45 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[prometheus query]]></title>
            <link>https://velog.io/@zo_ohbb/prometheus-query</link>
            <guid>https://velog.io/@zo_ohbb/prometheus-query</guid>
            <pubDate>Sat, 30 Sep 2023 04:57:42 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[springBoot - prometheus - grafana]]></title>
            <link>https://velog.io/@zo_ohbb/springBoot-prometheus-grafana</link>
            <guid>https://velog.io/@zo_ohbb/springBoot-prometheus-grafana</guid>
            <pubDate>Sat, 30 Sep 2023 04:57:33 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[WebClient, SSL]]></title>
            <link>https://velog.io/@zo_ohbb/WebClient-SSL</link>
            <guid>https://velog.io/@zo_ohbb/WebClient-SSL</guid>
            <pubDate>Sat, 30 Sep 2023 04:42:52 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[REST API]]></title>
            <link>https://velog.io/@zo_ohbb/REST-API</link>
            <guid>https://velog.io/@zo_ohbb/REST-API</guid>
            <pubDate>Sat, 30 Sep 2023 04:42:29 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[[Java의 정석] Chapter16 네트워킹(Networking)]]></title>
            <link>https://velog.io/@zo_ohbb/Java%EC%9D%98-%EC%A0%95%EC%84%9D-Chapter16-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%82%B9Networking</link>
            <guid>https://velog.io/@zo_ohbb/Java%EC%9D%98-%EC%A0%95%EC%84%9D-Chapter16-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%82%B9Networking</guid>
            <pubDate>Sat, 30 Sep 2023 04:39:57 GMT</pubDate>
            <description><![CDATA[<p>2023/09</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Java의 정석] Chapter15 입출력(I/O)
]]></title>
            <link>https://velog.io/@zo_ohbb/Java%EC%9D%98-%EC%A0%95%EC%84%9D-Chapter15-%EC%9E%85%EC%B6%9C%EB%A0%A5IO</link>
            <guid>https://velog.io/@zo_ohbb/Java%EC%9D%98-%EC%A0%95%EC%84%9D-Chapter15-%EC%9E%85%EC%B6%9C%EB%A0%A5IO</guid>
            <pubDate>Sat, 30 Sep 2023 04:39:50 GMT</pubDate>
            <description><![CDATA[<p>2023/09</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Java의 정석]Chapter14 람다(rambda)와 스트림(stream)]]></title>
            <link>https://velog.io/@zo_ohbb/Java%EC%9D%98-%EC%A0%95%EC%84%9DChapter14-%EB%9E%8C%EB%8B%A4rambda%EC%99%80-%EC%8A%A4%ED%8A%B8%EB%A6%BCstream</link>
            <guid>https://velog.io/@zo_ohbb/Java%EC%9D%98-%EC%A0%95%EC%84%9DChapter14-%EB%9E%8C%EB%8B%A4rambda%EC%99%80-%EC%8A%A4%ED%8A%B8%EB%A6%BCstream</guid>
            <pubDate>Sat, 30 Sep 2023 04:39:24 GMT</pubDate>
            <description><![CDATA[<p>2023/09</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Java의 정석] Chapter13 쓰레드(Thread)]]></title>
            <link>https://velog.io/@zo_ohbb/Java%EC%9D%98-%EC%A0%95%EC%84%9D-Chapter13-%EC%93%B0%EB%A0%88%EB%93%9CThread</link>
            <guid>https://velog.io/@zo_ohbb/Java%EC%9D%98-%EC%A0%95%EC%84%9D-Chapter13-%EC%93%B0%EB%A0%88%EB%93%9CThread</guid>
            <pubDate>Sat, 30 Sep 2023 04:39:19 GMT</pubDate>
            <description><![CDATA[<p>2023/09</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Java의 정석] Chapter12 지네릭스(Generics), 열거형(enums), 애너테이션(annotation)]]></title>
            <link>https://velog.io/@zo_ohbb/Java%EC%9D%98-%EC%A0%95%EC%84%9D-Chapter12-%EC%A7%80%EB%84%A4%EB%A6%AD%EC%8A%A4Generics-%EC%97%B4%EA%B1%B0%ED%98%95enums-%EC%95%A0%EB%84%88%ED%85%8C%EC%9D%B4%EC%85%98annotation</link>
            <guid>https://velog.io/@zo_ohbb/Java%EC%9D%98-%EC%A0%95%EC%84%9D-Chapter12-%EC%A7%80%EB%84%A4%EB%A6%AD%EC%8A%A4Generics-%EC%97%B4%EA%B1%B0%ED%98%95enums-%EC%95%A0%EB%84%88%ED%85%8C%EC%9D%B4%EC%85%98annotation</guid>
            <pubDate>Sat, 30 Sep 2023 04:35:47 GMT</pubDate>
            <description><![CDATA[<p>2023/09</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Java의 정석] Chapter07 객체지향 프로그래밍2]]></title>
            <link>https://velog.io/@zo_ohbb/Java%EC%9D%98-%EC%A0%95%EC%84%9D-Chapter07-%EA%B0%9D%EC%B2%B4%EC%A7%80%ED%96%A5-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D2</link>
            <guid>https://velog.io/@zo_ohbb/Java%EC%9D%98-%EC%A0%95%EC%84%9D-Chapter07-%EA%B0%9D%EC%B2%B4%EC%A7%80%ED%96%A5-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D2</guid>
            <pubDate>Sat, 30 Sep 2023 04:34:56 GMT</pubDate>
            <description><![CDATA[<p>2023/09</p>
<h1 id="1-상속"><strong><em>1 상속</em></strong></h1>
<h2 id="11-상속의-정의와-장점">1.1 상속의 정의와 장점</h2>
<h2 id="12-클래스간의-관계---포함관계">1.2 클래스간의 관계 - 포함관계</h2>
<h2 id="13-클래스간의-관계-결정하기">1.3 클래스간의 관계 결정하기</h2>
<h2 id="14-단일상속single-inheritance">1.4 단일상속(single inheritance)</h2>
<h2 id="15-object클래스---모든-클래스의-조상">1.5 Object클래스 - 모든 클래스의 조상</h2>
<h1 id="2-오버라이딩overriding"><strong><em>2 오버라이딩(overriding)</em></strong></h1>
<h2 id="21-오버라이딩이란">2.1 오버라이딩이란?</h2>
<h2 id="22-오버라이딩의-조건">2.2 오버라이딩의 조건</h2>
<h2 id="23-오버로딩-vs-오버라이딩">2.3 오버로딩 vs 오버라이딩</h2>
<h2 id="24-super">2.4 super</h2>
<p>super는 자손 클래스에서 조상 클래스로부터 상속받은 멤버를 참조하는데 사용되는 참조변수이다. 멤버변수와 지역변수의 이름이 같을 때 this를 붙여서 구별했듯이 상속받은 멤버와 자신의 멤버 이름이 같을 때에는 super를 붙여서 구별할 수 있다. </p>
<pre><code>class SuperTest {
    public static void main(String args[]){
        Child c = new Child();
        c.method();
    }
}

class Parent {
    int x=10;
}

class Child extends Parent{
    void method{
        System.out.println(&quot;x=&quot; + x); //x=10
        System.out.println(&quot;this.x=&quot; + this.x); //this.x=10
        System.out.println(&quot;super.x=&quot; + super.x); //this.x=10
    }
}</code></pre><pre><code>class SuperTest2{
    public static void main(String args[]){
        Child c = new Child();
        c.method();
    }
}
class Parent{
    int x = 10;
}
class Child extends Parent{
    int x = 20;
    void method(){
        System.out.println(&quot;x=&quot; + x); //x=20
        System.out.println(&quot;this.x=&quot; + this.x); //this.x=20
        System.out.println(&quot;super.x=&quot; + super.x); //this.x=10
    }
}</code></pre><p>같은 이름의 멤버변수가 조상 클래스인 Parent에도 있고 자손 클래스인 Child클래스에도 있을 때는 super.x와 this.x는 서로 다른 값을 참조하게 된다.
super.x는 조상 클래스로부터 상속받은 멤버변수 x를 뜻하며, this.x는 자손 클래스에 선언된 멤버변수를 뜻한다. 
이처럼 조상 클래스에 선언된 멤버변수와 같은 이름의 멤버변수를 자손 클래스에서 중복 정의하는 것이 가능하며, 참조변수 super를 이용해서 서로 구별할 수 있다. </p>
<p>변수만이 아니라 메서드 역시 super를 써서 호출할 수 있다. 특히 조상 클래스의 메서드를 자손 클래스에서 오버라이딩 한 경우에 super를 사용한다</p>
<pre><code>class Point {
    int x;
    int y;
    String getLocation(){
        return &quot;x :&quot; + x + &quot;y :&quot; + y;
    }
}
class Point3D extends Point{
    int z;
    String getLocation(){ //오버라이딩
        //return &quot;x :&quot; + x + &quot;,y :&quot; + y, &quot;,z :&quot; + z; 
        return super.getLocation() + &quot;, z:&quot; + z; //조상의 메서드 호출
       }
}</code></pre><h2 id="25-super---조상-클래스의-생성자">2.5 super() - 조상 클래스의 생성자</h2>
<h1 id="3-package와-import"><strong><em>3 package와 import</em></strong></h1>
<h2 id="31-패키지package">3.1 패키지(package)</h2>
<h2 id="32-패키지의-선언">3.2 패키지의 선언</h2>
<h2 id="33-import문">3.3 import문</h2>
<h2 id="34-import문의-선언">3.4 import문의 선언</h2>
<h2 id="35-static-import문">3.5 static import문</h2>
<h1 id="4-제어자modifier"><strong><em>4 제어자(modifier)</em></strong></h1>
<h2 id="41-제어자란">4.1 제어자란?</h2>
<h2 id="42-static---클래스의-공통적인">4.2 static - 클래스의, 공통적인</h2>
<h2 id="43-final---마지막의-변경될-수-없는">4.3 final - 마지막의, 변경될 수 없는</h2>
<h2 id="44-abstruct---추상의-미완성의">4.4 abstruct - 추상의, 미완성의</h2>
<h2 id="45-접근제어자access-modifier">4.5 접근제어자(access modifier)</h2>
<p>접근제어자는 멤버 또는 클래스에 사용되어, 해당하는 멤버 또는 클래스를 외부에서 접근하지 못하도록 제한하는 역할을 한다 </p>
<p><strong>접근제어자가 사용될 수 있는 곳 - 클래스, 멤버변수, 메서드, 생성자</strong>
<strong>private</strong> - 같은 클래스 내에서만 접근이 가능하다
<strong>protected</strong> - 같은 패키지 내에서, 그리고 다른 패키지의 자손 클래스에서 접근이 가능하다 
<strong>default</strong> - 같은 패키지 내에서만 접근이 가능하다 (패키지에 관계 없이 상속 관계에 있는 자손 클래스에서 접근할 수 있도록 하는 것이 제한 목적이지만, 같은 패키지 내에서도 접근이 가능하다. 그래서 protected가 default보다 접근 범위기 더 넓다)
<strong>public</strong> - 접근 제한이 전혀 없다  </p>
<pre><code>public class Time {
    private int hour;
    private int minute;
    private int second;

    public int getHour(){
        return hour;
    }
    public void setHour(int hour){
        if(hour&lt;0 || hour23) return;
        this.hour = hour;
    }

    public int getMinute(){
        return minute;
    }
    public void setMinute(){
        if(minute &lt; 0 || minute &gt; 59) return;
        this.minute = minute;
    }

    public int getSecond(){
        return second;
    }
    public void setSecond(){
        if(second &lt; 0 || second &gt; 59) return;
        this.second = second;
    }

}</code></pre><h2 id="46-제어자modifier의-조합">4.6 제어자(modifier)의 조합</h2>
<h1 id="5-다형성polymorphism"><strong><em>5 다형성(polymorphism)</em></strong></h1>
<h2 id="51-다형성이란">5.1 다형성이란?</h2>
<h2 id="52-참조변수의-형변환">5.2 참조변수의 형변환</h2>
<pre><code>class Car {
    String color;
    int door;
    void drive(){ //운전하는 기능
        System.out.println(&quot;drive, Brrr~~~&quot;);
    }
    void stop(){ //멈추는 기능
        System.out.println(&quot;stop!!!&quot;);
    }
}

class FireEngine extends Car { //소방차 
    void water(){ //물 뿌리는 기능
        System.out.println(&quot;water!!!&quot;);
    }
}

class Ambulance extends Car { //앰뷸런스
    void water(){ //사이렌을 울리는 기능
        System.out.println(&quot;siren~~~&quot;);
    }
}</code></pre><pre><code>Car car = null;
FireEngine fe = new FireEngine();
FireEngine fe2 = null

car = fe; //car = (Car)fe;에서 형변환 생략됨. 업캐스팅
fe2 = (FireEngine)car //형변환 생략 불가. 다운캐스팅</code></pre><h2 id="53-instanceof-연산자">5.3 instanceof 연산자</h2>
<h2 id="54-참조변수와-인스턴스의-연결">5.4 참조변수와 인스턴스의 연결</h2>
<h2 id="55-매개변수의-다형성">5.5 매개변수의 다형성</h2>
<h2 id="56-여러-종류의-객체를-배열로-다루기">5.6 여러 종류의 객체를 배열로 다루기</h2>
<h1 id="6-추상클래스-abstract-class"><strong><em>6 추상클래스 (abstract class)</em></strong></h1>
<h2 id="61-추상클래스란">6.1 추상클래스란?</h2>
<h2 id="62-추상메서드abstract-method">6.2 추상메서드(abstract method)</h2>
<h2 id="63-추상클래스의-작성">6.3 추상클래스의 작성</h2>
<h1 id="7-인터페이스interface"><strong><em>7 인터페이스(interface)</em></strong></h1>
<h2 id="71-인터페이스란">7.1 인터페이스란?</h2>
<h2 id="72-인터페이스의-작성">7.2 인터페이스의 작성</h2>
<h2 id="73-인터페이스의-상속">7.3 인터페이스의 상속</h2>
<h2 id="74-인터페이스의-구현">7.4 인터페이스의 구현</h2>
<h2 id="75-인터페이스를-이용한-다중-상속">7.5 인터페이스를 이용한 다중 상속</h2>
<h2 id="76-인터페이스를-이용한-다형성">7.6 인터페이스를 이용한 다형성</h2>
<h2 id="77-인터페이스의-장점">7.7 인터페이스의 장점</h2>
<h2 id="78-인터페이스의-이해">7.8 인터페이스의 이해</h2>
<h2 id="79-디폴트-메서드와-static메서드">7.9 디폴트 메서드와 static메서드</h2>
<h1 id="8-내부-클래스inner-class"><strong><em>8 내부 클래스(inner class)</em></strong></h1>
<h2 id="81-내부-클래스란">8.1 내부 클래스란?</h2>
<h2 id="82-내부-클래스의-종류와-특징">8.2 내부 클래스의 종류와 특징</h2>
<h2 id="83-내부-클래스의-선언">8.3 내부 클래스의 선언</h2>
<h2 id="84-내부-클래스의-제어자와-접근성">8.4 내부 클래스의 제어자와 접근성</h2>
<h2 id="85-익명-클래스anonymous-class">8.5 익명 클래스(anonymous class)</h2>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Java의 정석] Chapter06 객체지향 프로그래밍1]]></title>
            <link>https://velog.io/@zo_ohbb/Java%EC%9D%98-%EC%A0%95%EC%84%9D-Chapter06-%EA%B0%9D%EC%B2%B4%EC%A7%80%ED%96%A5-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D1-ki6mxad6</link>
            <guid>https://velog.io/@zo_ohbb/Java%EC%9D%98-%EC%A0%95%EC%84%9D-Chapter06-%EA%B0%9D%EC%B2%B4%EC%A7%80%ED%96%A5-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D1-ki6mxad6</guid>
            <pubDate>Sat, 30 Sep 2023 04:33:44 GMT</pubDate>
            <description><![CDATA[<p>2023/09</p>
<h1 id="1-객체지향언어"><strong><em>1 객체지향언어</em></strong></h1>
<h2 id="11-객체지향언어의-역사">1.1 객체지향언어의 역사</h2>
<p>객체지향이론의 기본 개념</p>
<ul>
<li>실제 세계는 사물(객체)로 이루어져있으며, 발생하는 모든 사건들은 사물간의 상호작용이다</li>
<li>실제 사물의 속성과 기능을 분석한 다음 데이터(변수)와 함수로 정의함으로써 실제 세계를 컴퓨터 속에 옮겨 놓은 것과 같은 가상 세계를 구현하고 이 가상세계에서 모의실험을 함으로써 많은 시간과 비용을 절약할 수 있다.</li>
</ul>
<h2 id="12-객체지향언어">1.2 객체지향언어</h2>
<p>객체지향언어의 주요 특징</p>
<ul>
<li>코드의 재사용성이 높다<ul>
<li>새로운 코드를 작성할 때 기존의 코드를 이용하여 쉽게 작성할 수 있다</li>
</ul>
</li>
<li>코드의 관리가 용이하다<ul>
<li>코드간의 관계를 이용해서 적은 노력으로 쉽게 코드를 변경할 수 있다</li>
</ul>
</li>
<li>신뢰성이 높은 프로그래밍을 가능하게 한다<ul>
<li>제어자와 메서드를 이용해서 데이터를 보호하고 올바른 값을 유지하도록 하며, 코드의 중복을 제거하여 코드의 불일치로 인한 오동작을 방지할 수 있다.</li>
</ul>
</li>
</ul>
<p>⇒ 코드의 재사용성이 높고 유지보수가 용이하다 </p>
<p>⭐️ 재사용성, 유지보수, 중복된 코드의 제거 </p>
<h1 id="2-클래스와-객체"><strong><em>2 클래스와 객체</em></strong></h1>
<h2 id="21-클래스와-객체의-정의와-용도">2.1 클래스와 객체의 정의와 용도</h2>
<h3 id="클래스">클래스</h3>
<ul>
<li>클래스의 정의 : 클래스란 객체를 정의해놓은 것이다</li>
<li>클래스의 용도 : 클래스는 객체를 생성하는데 사용된다</li>
</ul>
<p>클래스는 객체를 생성하는데 사용되며, 객체는 클래스에 정의된 대로 생성된다 </p>
<h3 id="객체">객체</h3>
<ul>
<li>객체의 정의 : 실제로 존재하는 것, 사물 또는 개념</li>
<li>객체의 용도 : 객체가 가지고 있는 기능과 속성에 따라 다름</li>
<li>유형의 객체 : 책상, 의자, 자동차, TV와 같은 사물</li>
<li>무형의 객체 : 수학공식, 프로그램 에러와 같은 논리나 개념</li>
</ul>
<h2 id="22-객체와-인스턴스">2.2 객체와 인스턴스</h2>
<h2 id="23-객체의-구성요소---속성과-기능">2.3 객체의 구성요소 - 속성과 기능</h2>
<ul>
<li><p>TvTest1</p>
<pre><code class="language-java">  class Tv {
      String color; //색깔
      boolean power; //전원상태
      int channel; //채널 

      void power(){
          power = !power;
      }
      void channelUp(){
          channel++;
      }
      void channelDown(){
          channel--;
      }
  }

  class TvTest {
      public static void main(String args[]) {
          Tv t;
          t = new Tv();
          t.channel = 7;
          t.channelDown();
          System.out.println(&quot;현재 채널은 &quot; + t.channel + &quot;입니다.&quot;);
      }
  }</code></pre>
</li>
<li><p>TvTest2</p>
<pre><code class="language-java">  class Tv {
      String color; //색깔
      boolean power; //전원상태
      int channel; //채널 

      void power(){
          power = !power;
      }
      void channelUp(){
          channel++;
      }
      void channelDown(){
          channel--;
      }
  }

  class TvTest2 {
      public static void main(String args[]) {
          Tv t1 = new Tv();
          Tv t2 = new Tv();
          System.out.println(&quot;t1의 channel 값은 &quot; + t1.channel + &quot;입니다.&quot;);
          System.out.println(&quot;t2의 channel 값은 &quot; + t2.channel + &quot;입니다.&quot;);

          t1.channel = 7;
          System.out.println(&quot;t1의 channel값을 7로 변경하였습니다.&quot;);

          System.out.println(&quot;t1의 channel 값은 &quot; + t1.channel + &quot;입니다.&quot;);
          System.out.println(&quot;t2의 channel 값은 &quot; + t2.channel + &quot;입니다.&quot;);
  }</code></pre>
</li>
</ul>
<h2 id="24-인스턴스의-생성과-사용">2.4 인스턴스의 생성과 사용</h2>
<h2 id="25-객체-배열">2.5 객체 배열</h2>
<h2 id="26-클래스의-또-다른-정의">2.6 클래스의 또 다른 정의</h2>
<h1 id="3-변수와-메서드"><strong><em>3 변수와 메서드</em></strong></h1>
<h2 id="31-선언위치에-따른-변수의-종류">3.1 선언위치에 따른 변수의 종류</h2>
<h3 id="인스턴스-변수-instance-variable">인스턴스 변수 (instance variable)</h3>
<h3 id="클래스-변수-class-variable">클래스 변수 (class variable)</h3>
<h3 id="지역-변수-local-variable">지역 변수 (local variable)</h3>
<h2 id="32-클래스-변수와-인스턴스-변수">3.2 클래스 변수와 인스턴스 변수</h2>
<h2 id="33-메서드">3.3 메서드</h2>
<p>메서드(method)는 특정 작업을 수행하는 일련의 문장들을 하나로 묶은 것이다</p>
<p>메서드를 사용하는 이유</p>
<ul>
<li>높은 재사용성 (reusability)</li>
<li>중복된 코드의 제거</li>
<li>프로그램의 구조화</li>
</ul>
<h2 id="34-메서드의-선언과-구현">3.4 메서드의 선언과 구현</h2>
<h2 id="35-메서드의-호출">3.5 메서드의 호출</h2>
<h2 id="36-return문">3.6 return문</h2>
<h2 id="37-jvm-메모리-구조">3.7 JVM 메모리 구조</h2>
<h2 id="38-기본형-매개변수와-참조형-매개변수">3.8 기본형 매개변수와 참조형 매개변수</h2>
<h2 id="39-참조형-반환타입">3.9 참조형 반환타입</h2>
<h2 id="310-재귀호출recursive-call">3.10 재귀호출(recursive call)</h2>
<h2 id="311-클래스-메서드static메서드와-인스턴스-메서드">3.11 클래스 메서드(static메서드)와 인스턴스 메서드</h2>
<h2 id="312-클래스-멤버와-인스턴스-멤버간의-참조와-호출">3.12 클래스 멤버와 인스턴스 멤버간의 참조와 호출</h2>
<h1 id="4-오버로딩overloading"><strong><em>4 오버로딩(overloading)</em></strong></h1>
<h2 id="41-오버로딩이란">4.1 오버로딩이란?</h2>
<p>자바에서는 한 클래스 내에 이미 사용하려는 이름과 같은 메서드가 있더라도 매개변수의 개수 또는 타입이 다르면, 같은 이름을 사용해서 메서드를 정의할 수 있다. 이처럼 한 클래스 내에 같은 이름의 메서드를 여러 개 정의하는 것을 <strong>&#39;메서드 오버로딩(method overloading)&#39;</strong> 또는 <strong>&#39;오버로딩(overloading)&#39;</strong>이라 한다.</p>
<h2 id="42-오버로딩의-조건">4.2 오버로딩의 조건</h2>
<blockquote>
<ol>
<li>메서드 이름이 같아야 한다.</li>
<li>매개변수의 개수 또는 타입이 달라야 한다.</li>
</ol>
</blockquote>
<p>주의할 점 : 오버로딩된 메서드들은 매개변수에 의해서만 구별될 수 있으므로 반환 타입은 오버로딩을 구현하는데 아무런 영향을 주지 못한다 </p>
<h2 id="43-오버로딩의-예">4.3 오버로딩의 예</h2>
<p>대표적인 예 : println 메서드 
println메서드를 호출할 때 매개변수로 지정하는 값의 타입에 따라서 호출되는 println 메서드가 달라진다 </p>
<pre><code>//보기1
//오버로딩 성립X
//매개변수의 이름만 다를 뿐 매개변수의 타입이 같음
int add(int a, int b){return a+b;}
int add(int x, int y) {return x+y;}</code></pre><pre><code>//보기2
//오버로딩 성립X
//리턴타입만 다름
int add(int a, int b){return a+b;}
int add(int a, int b) {return long(a+b);}
}</code></pre><pre><code>//보기3
//오버로딩 성립O
//두 메서드 모두 int형과 long형 매개변수가 하나씩 선언되어있지만 서로 순서가 다름
int add(int a, long b){return a+b;}
int add(long a, int b) {return a+b;}
}</code></pre><h2 id="44-오버로딩의-장점">4.4 오버로딩의 장점</h2>
<ul>
<li>오버로딩을 통해 여러 메서드들이 하나의 이름으로 정의될 수 있다
기억하기 쉽고, 이름도 짧게 할 수 있어서 오류의 가능성을 많이 줄일 수 있다. </li>
<li>메서드의 이름을 절약할 수 있다.
하나의 이름으로 여러 개의 메서드를 정의할 수 있으니, 메서드의 이름을 짓는데 고민을 덜 수 있는 동시에 사용되었어야 할 메서드의 이름을 다른 메서드의 이름으로 사용할 수 있다 </li>
</ul>
<h2 id="45-가변인자varags와-오버로딩">4.5 가변인자(varags)와 오버로딩</h2>
<p><em><strong>타입... 변수명</strong></em> 과 같은 형식으로 선언한다 </p>
<pre><code>public PrintStream printf(String format, Object... args){
 ...
}
</code></pre><pre><code>String concatenate(String s1, String s2) {...}
String concatenate(String s1, String s2, String s3) {...}
String concatenate(String s1, String s2, String s3, String s4) {...}</code></pre><p>위 코드를 아래와 같이 대체할 수 있다</p>
<pre><code>String concatenate(String... str) {...}


System.out.println(concatenate()); //인자가 없음
System.out.println(concatenate(&quot;a&quot;)); //인자가 하나
System.out.println(concatenate(&quot;a&quot;, &quot;b&quot;)); //인자가 둘
System.out.println(concatenate(new String[]{&quot;A&quot;, &quot;B&quot;})); //배열도 가능</code></pre><p><strong>가변인자</strong>는 아래와 같이 <strong>매개변수타입을 배열로 하는 것</strong>과 어떤 차이가 있을까?</p>
<pre><code>String concatenate(String[] str) {...}

String result = concatenate(new String[0]) //인자를 배열로 지정
String result = concatenate(null) //인자를 null로 지정
String result = concatenate() //에러!! 인자가 필요함</code></pre><p>매개변수 타입을 배열로 하면, 반드시 인자를 지정해줘야하기 때문에, 위의 코드에서처럼 인자를 생략할 수 없다. 그래서 null이나 길이가 0인 배열을 인자로 지정해줘야하는 불편함이 있다. </p>
<h1 id="5-생성자constructor"><strong><em>5 생성자(constructor)</em></strong></h1>
<h2 id="51-생성자란">5.1 생성자란?</h2>
<h2 id="52-기본-생성자">5.2 기본 생성자</h2>
<h2 id="53-매개변수가-있는-생성자">5.3 매개변수가 있는 생성자</h2>
<h2 id="54-생성자에서-다른-생성자-호출하기">5.4 생성자에서 다른 생성자 호출하기</h2>
<h2 id="55-생성자를-이용한-인스턴스의-복사">5.5 생성자를 이용한 인스턴스의 복사</h2>
<h1 id="6-변수의-초기화"><strong><em>6 변수의 초기화</em></strong></h1>
<h2 id="61-변수의-초기화">6.1 변수의 초기화</h2>
<h2 id="62-명시적-초기화">6.2 명시적 초기화</h2>
<h2 id="63-초기화-블럭">6.3 초기화 블럭</h2>
<h2 id="64-멤버변수의-초기화-시기와-순서">6.4 멤버변수의 초기화 시기와 순서</h2>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Java의 정석] Chapter11 컬렉션 프레임웤(Collection Framework)]]></title>
            <link>https://velog.io/@zo_ohbb/Java%EC%9D%98-%EC%A0%95%EC%84%9D-Chapter06-%EA%B0%9D%EC%B2%B4%EC%A7%80%ED%96%A5-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D1</link>
            <guid>https://velog.io/@zo_ohbb/Java%EC%9D%98-%EC%A0%95%EC%84%9D-Chapter06-%EA%B0%9D%EC%B2%B4%EC%A7%80%ED%96%A5-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D1</guid>
            <pubDate>Sat, 30 Sep 2023 04:31:39 GMT</pubDate>
            <description><![CDATA[<p>2023/09</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Java의 정석] 목차]]></title>
            <link>https://velog.io/@zo_ohbb/Java%EC%9D%98-%EC%A0%95%EC%84%9D-%EB%AA%A9%EC%B0%A8</link>
            <guid>https://velog.io/@zo_ohbb/Java%EC%9D%98-%EC%A0%95%EC%84%9D-%EB%AA%A9%EC%B0%A8</guid>
            <pubDate>Sat, 30 Sep 2023 04:29:03 GMT</pubDate>
            <description><![CDATA[<h3 id="chapter01-자바를-시작하기-전에">Chapter01 자바를 시작하기 전에</h3>
<h3 id="chapter02-변수variable">Chapter02 변수(Variable)</h3>
<h3 id="chapter03-연산자operator">Chapter03 연산자(Operator)</h3>
<h3 id="chapter04-조건문과-반복문">Chapter04 조건문과 반복문</h3>
<h3 id="chapter06-객체지향-프로그래밍1">Chapter06 객체지향 프로그래밍1</h3>
<p><a href="https://velog.io/@zo_ohbb/Java%EC%9D%98-%EC%A0%95%EC%84%9D-Chapter06-%EA%B0%9D%EC%B2%B4%EC%A7%80%ED%96%A5-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D1-ki6mxad6">객체지향 프로그래밍1</a></p>
<h3 id="chapter07-객체지향-프로그래밍2">Chapter07 객체지향 프로그래밍2</h3>
<p><a href="https://velog.io/@zo_ohbb/Java%EC%9D%98-%EC%A0%95%EC%84%9D-Chapter07-%EA%B0%9D%EC%B2%B4%EC%A7%80%ED%96%A5-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D2">객체지향 프로그래밍2</a></p>
<h3 id="chapter08-예외처리exception-handling">Chapter08 예외처리(Exception Handling)</h3>
<h3 id="chapter09-javalang패키지와-유용한-클래스">Chapter09 java.lang패키지와 유용한 클래스</h3>
<h3 id="chapter10-날짜와-시간--형식화">Chapter10 날짜와 시간 &amp; 형식화</h3>
<h3 id="🍋-chapter11-컬렉션-프레임웤collection-framework">🍋 Chapter11 컬렉션 프레임웤(Collection Framework)</h3>
<p><a href="https://velog.io/@zo_ohbb/Java%EC%9D%98-%EC%A0%95%EC%84%9D-Chapter06-%EA%B0%9D%EC%B2%B4%EC%A7%80%ED%96%A5-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D1">컬렉션 프레임웤(Collection Framework)</a></p>
<h3 id="chapter12-지네릭스generics-열거형enums-애너테이션annotation">Chapter12 지네릭스(Generics), 열거형(enums), 애너테이션(annotation)</h3>
<p><a href="https://velog.io/@zo_ohbb/Java%EC%9D%98-%EC%A0%95%EC%84%9D-Chapter12-%EC%A7%80%EB%84%A4%EB%A6%AD%EC%8A%A4Generics-%EC%97%B4%EA%B1%B0%ED%98%95enums-%EC%95%A0%EB%84%88%ED%85%8C%EC%9D%B4%EC%85%98annotation">지네릭스(Generics), 열거형(enums), 애너테이션(annotation)</a></p>
<h3 id="chapter13-쓰레드thread">Chapter13 쓰레드(Thread)</h3>
<p><a href="https://velog.io/@zo_ohbb/Java%EC%9D%98-%EC%A0%95%EC%84%9D-Chapter13-%EC%93%B0%EB%A0%88%EB%93%9CThread">쓰레드(Thread)</a></p>
<h3 id="chapter14-람다rambda와-스트림stream">Chapter14 람다(rambda)와 스트림(stream)</h3>
<p><a href="https://velog.io/@zo_ohbb/Java%EC%9D%98-%EC%A0%95%EC%84%9DChapter14-%EB%9E%8C%EB%8B%A4rambda%EC%99%80-%EC%8A%A4%ED%8A%B8%EB%A6%BCstream">람다(rambda)와 스트림(stream) </a></p>
<h3 id="chapter15-입출력io">Chapter15 입출력(I/O)</h3>
<p><a href="https://velog.io/@zo_ohbb/Java%EC%9D%98-%EC%A0%95%EC%84%9D-Chapter15-%EC%9E%85%EC%B6%9C%EB%A0%A5IO">입출력(I/O)</a></p>
<h3 id="chapter16-네트워킹networking">Chapter16 네트워킹(Networking)</h3>
<p><a href="https://velog.io/@zo_ohbb/Java%EC%9D%98-%EC%A0%95%EC%84%9D-Chapter16-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%82%B9Networking">네트워킹(Networking)</a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Openstack] Cinder - Block Storage (Volume)]]></title>
            <link>https://velog.io/@zo_ohbb/Volume</link>
            <guid>https://velog.io/@zo_ohbb/Volume</guid>
            <pubDate>Sat, 29 Jul 2023 06:09:26 GMT</pubDate>
            <description><![CDATA[<p>영구 스토리지 볼륨을 생성하고 관리하여 가상머신에 연결할 수 있는 블록 스토리지 서비스를 제공</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Openstack] Compute - Nova]]></title>
            <link>https://velog.io/@zo_ohbb/Compute</link>
            <guid>https://velog.io/@zo_ohbb/Compute</guid>
            <pubDate>Sat, 29 Jul 2023 06:08:38 GMT</pubDate>
            <description><![CDATA[<p>가상머신과 컴퓨팅 리소스를 프로비저닝하고 관리</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Openstack] Neutron - Network]]></title>
            <link>https://velog.io/@zo_ohbb/NETWORK</link>
            <guid>https://velog.io/@zo_ohbb/NETWORK</guid>
            <pubDate>Sat, 29 Jul 2023 06:07:44 GMT</pubDate>
            <description><![CDATA[<p>네트워킹 서비스를 처리하며 IP주소, 네트워크, 라우터, 로드밸런서 및 기타 네트워크 관련 리소스를 관리</p>
]]></description>
        </item>
    </channel>
</rss>