<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>공돌이 출신 개발자</title>
    <link>https://seohong.tistory.com/</link>
    <description>공돌이 출신 개발자입니다</description>
    <language>ko</language>
    <pubDate>Sun, 5 Apr 2026 12:47:56 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>공돌이 출신 개발자</managingEditor>
    <image>
      <title>공돌이 출신 개발자</title>
      <url>https://tistory1.daumcdn.net/tistory/7545409/attach/117e85d67b934837972b16775a12d41e</url>
      <link>https://seohong.tistory.com</link>
    </image>
    <item>
      <title>  포함 관계(Composition)</title>
      <link>https://seohong.tistory.com/146</link>
      <description>&lt;h2 data-end=&quot;219&quot; data-start=&quot;207&quot; data-ke-size=&quot;size26&quot;&gt;✍️ 시작하며&lt;/h2&gt;
&lt;p data-end=&quot;381&quot; data-start=&quot;220&quot; data-ke-size=&quot;size16&quot;&gt;이전 글에서는 객체지향 프로그래밍의 핵심 개념 중 하나인 &lt;b&gt;상속(Inheritance)&lt;/b&gt; 을 통해&lt;br /&gt;기존 클래스를 확장하는 방법과 메서드 오버라이딩에 대해 알아보았습니다.&lt;br /&gt;이번 글에서는 클래스 간의 관계 중 하나인 &lt;b&gt;포함 관계(Composition)&lt;/b&gt; 를 학습해보겠습니다.&lt;/p&gt;
&lt;p data-end=&quot;478&quot; data-start=&quot;383&quot; data-ke-size=&quot;size16&quot;&gt;포함 관계는 객체가 다른 객체를 &lt;b&gt;&quot;포함(has-a)&quot;&lt;/b&gt; 하는 구조로,&lt;br /&gt;자동차가 엔진을 가지듯, 집이 여러 방을 가지듯 객체 간 구성 관계를 표현할 때 사용됩니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-end=&quot;498&quot; data-start=&quot;485&quot; data-ke-size=&quot;size26&quot;&gt;  학습 목표&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;635&quot; data-start=&quot;499&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;536&quot; data-start=&quot;499&quot;&gt;포함 관계(Composition)의 개념과 의미를 이해한다.&lt;/li&gt;
&lt;li data-end=&quot;573&quot; data-start=&quot;537&quot;&gt;&quot;has-a&quot; 관계와 &quot;is-a&quot; 관계를 비교할 수 있다.&lt;/li&gt;
&lt;li data-end=&quot;605&quot; data-start=&quot;574&quot;&gt;포함 관계를 실제 코드로 구현하는 방법을 익힌다.&lt;/li&gt;
&lt;li data-end=&quot;635&quot; data-start=&quot;606&quot;&gt;컴포지션의 생명주기 및 UML 표기법을 이해한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-end=&quot;655&quot; data-start=&quot;642&quot; data-ke-size=&quot;size26&quot;&gt;  개념 정리&lt;/h2&gt;
&lt;h3 data-end=&quot;686&quot; data-start=&quot;657&quot; data-ke-size=&quot;size23&quot;&gt;  포함 관계(Composition)란?&lt;/h3&gt;
&lt;p data-end=&quot;805&quot; data-start=&quot;687&quot; data-ke-size=&quot;size16&quot;&gt;포함 관계는 &lt;b&gt;한 클래스가 다른 클래스를 자신의 필드(속성)로 포함하는 구조&lt;/b&gt;를 의미합니다.&lt;br /&gt;이는 &amp;ldquo;has-a&amp;rdquo; 관계로 표현되며, 구성된 객체가 &lt;b&gt;의존적이고 강한 생명주기 결합&lt;/b&gt;을 가질 때 사용합니다.&lt;/p&gt;
&lt;p data-end=&quot;815&quot; data-start=&quot;807&quot; data-ke-size=&quot;size16&quot;&gt;예를 들어,&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;878&quot; data-start=&quot;816&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;845&quot; data-start=&quot;816&quot;&gt;자동차는 엔진을 &amp;ldquo;가지고 있다&amp;rdquo; &amp;rarr; 포함 관계&lt;/li&gt;
&lt;li data-end=&quot;878&quot; data-start=&quot;846&quot;&gt;집은 여러 개의 방을 &amp;ldquo;가지고 있다&amp;rdquo; &amp;rarr; 포함 관계&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;921&quot; data-start=&quot;880&quot; data-ke-size=&quot;size16&quot;&gt;&amp;rarr; 포함된 객체는 주 객체가 소멸되면 함께 소멸되는 강한 의존 관계입니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;589&quot; data-origin-height=&quot;579&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/czkq07/btsNLq4x9NL/pJGKKG3lKl3ZlVIg4cIiK1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/czkq07/btsNLq4x9NL/pJGKKG3lKl3ZlVIg4cIiK1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/czkq07/btsNLq4x9NL/pJGKKG3lKl3ZlVIg4cIiK1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fczkq07%2FbtsNLq4x9NL%2FpJGKKG3lKl3ZlVIg4cIiK1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;589&quot; height=&quot;579&quot; data-origin-width=&quot;589&quot; data-origin-height=&quot;579&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-end=&quot;959&quot; data-start=&quot;928&quot; data-ke-size=&quot;size26&quot;&gt;  문법 설명 &amp;ndash; 포함 관계 vs 상속 관계 비교&lt;/h2&gt;
&lt;div&gt;
&lt;table style=&quot;border-collapse: collapse; width: 96.8605%; height: 259px;&quot; border=&quot;1&quot; data-end=&quot;1542&quot; data-start=&quot;961&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&lt;b&gt;구분&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&lt;b&gt; 포함&lt;/b&gt;&lt;b&gt; 관계&lt;/b&gt;&lt;b&gt; (Composition) &lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&lt;b&gt; 상속 &lt;/b&gt;&lt;b&gt;관계 (Inheritance)&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;1236&quot; data-start=&quot;1143&quot;&gt;
&lt;td style=&quot;text-align: center;&quot; data-col-size=&quot;sm&quot; data-end=&quot;1158&quot; data-start=&quot;1143&quot;&gt;&lt;b&gt;관계 표현&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot; data-end=&quot;1196&quot; data-start=&quot;1158&quot; data-col-size=&quot;sm&quot;&gt;&quot;has-a&quot;&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot; data-end=&quot;1236&quot; data-start=&quot;1196&quot; data-col-size=&quot;sm&quot;&gt;&quot;is-a&quot;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;1308&quot; data-start=&quot;1237&quot;&gt;
&lt;td style=&quot;text-align: center;&quot; data-col-size=&quot;sm&quot; data-end=&quot;1252&quot; data-start=&quot;1237&quot;&gt;&lt;b&gt;구현 방식&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot; data-col-size=&quot;sm&quot; data-end=&quot;1277&quot; data-start=&quot;1252&quot;&gt;다른 클래스의 객체를 필드로 선언&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot; data-end=&quot;1308&quot; data-start=&quot;1277&quot; data-col-size=&quot;sm&quot;&gt;extends 키워드로 클래스 확장&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;1378&quot; data-start=&quot;1309&quot;&gt;
&lt;td style=&quot;text-align: center;&quot; data-col-size=&quot;sm&quot; data-end=&quot;1324&quot; data-start=&quot;1309&quot;&gt;&lt;b&gt;생명주기&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot; data-end=&quot;1351&quot; data-start=&quot;1324&quot; data-col-size=&quot;sm&quot;&gt;포함 객체는 소유 객체에 종속&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot; data-end=&quot;1378&quot; data-start=&quot;1351&quot; data-col-size=&quot;sm&quot;&gt;자식 객체는 독립적으로 존재 가능&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;1458&quot; data-start=&quot;1379&quot;&gt;
&lt;td style=&quot;text-align: center;&quot; data-col-size=&quot;sm&quot; data-end=&quot;1394&quot; data-start=&quot;1379&quot;&gt;&lt;b&gt;사용 예시&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot; data-end=&quot;1426&quot; data-start=&quot;1394&quot; data-col-size=&quot;sm&quot;&gt;자동차 &amp;rarr; 엔진, 집 &amp;rarr; 방&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot; data-end=&quot;1458&quot; data-start=&quot;1426&quot; data-col-size=&quot;sm&quot;&gt;학생 &amp;rarr; 사람, 개발자 &amp;rarr; 직원&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;1542&quot; data-start=&quot;1459&quot;&gt;
&lt;td style=&quot;text-align: center;&quot; data-col-size=&quot;sm&quot; data-end=&quot;1476&quot; data-start=&quot;1459&quot;&gt;&lt;b&gt;UML 표기&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot; data-end=&quot;1506&quot; data-start=&quot;1476&quot; data-col-size=&quot;sm&quot;&gt;채워진 다이아몬드(◆)&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot; data-end=&quot;1542&quot; data-start=&quot;1506&quot; data-col-size=&quot;sm&quot;&gt;빈 삼각형(△)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-end=&quot;1586&quot; data-start=&quot;1549&quot; data-ke-size=&quot;size26&quot;&gt;  예시 코드 ① &amp;ndash; 자동차와 엔진 (자동 구성 포함 관계)&lt;/h2&gt;
&lt;pre id=&quot;code_1746553888531&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;package com.composition;

public class Engine {

    String name;
    int price;

    void start() {
        System.out.println(&quot;엔진이 시작 됩니다.&quot;);
    }

    void stop() {
        System.out.println(&quot;엔진을 멈춥니다.&quot;);
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1746553897743&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;package com.composition;

public class Car {

    String name;
    int price;
    // 포함관계(컴포지션)
    // car 클래스는 Engine 객체를 포함 합니다.
    Engine engine;

    public Car() {
        // 자동차 객체가 생성될 때 엔진 객체도 함께 생성 된다.
        // 강한 의존성
        engine = new Engine();
    }
    
    void startCar() {
        engine.start(); // car 객체를 통해 Engine 의 start() 메서드를 호출합니다. 
        System.out.println(&quot;자동차가 출발합니다&quot;);
    }

    void stopCar() {
        engine.stop();
        System.out.println(&quot;자동차가 멈춥니다.&quot;);
    }

    // 테스트 코드 작성
    public static void main(String[] args) {

        // **컴포지션 관계를**
        // 자동차 클래스 내부에서 엔진 객체를 생성 시켜야 콤포지션 관계이다.
        Car car = new Car();
        car.startCar();
        car.stopCar();

    } // end of main

}&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #000000;&quot; data-end=&quot;301&quot; data-start=&quot;286&quot; data-ke-size=&quot;size18&quot;&gt;✅ Car 클래스는 &lt;b&gt;Engine 객체를 필드로 포함&lt;/b&gt;하고 있으며, Car가 생성될 때 Engine도 함께 생성됩니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-end=&quot;2460&quot; data-start=&quot;2416&quot; data-ke-size=&quot;size26&quot;&gt;  예시 코드 ② &amp;ndash; 집과 방 구조 (House has-a Room[])&lt;/h2&gt;
&lt;pre id=&quot;code_1746553972134&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;package com.composition;

public class Room {

    private String type;

    public Room(String type) {
        this.type = type;
    }

    void describe() {
        System.out.println(type + &quot; 방입니다.&quot;);
    }

}&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1746553977940&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;package com.composition;

public class House {

    private String address;
    Room[] rooms;

    public House(String address) {
        this.address = address;
        this.rooms = new Room[3]; // 컴포지션 : House 가 Room 배열을 소유하고 있다.
        rooms[0] = new Room(&quot;거실&quot;);
        rooms[1] = new Room(&quot;침실&quot;);
        rooms[2] = new Room(&quot;주방&quot;);
        // 속성으로 선언되고 내부에서 객체 생성 했기 때문에 컴포지션이라 할 수 있다.
        //room = new Room(&quot;안방&quot;);
    }

    void showRooms() {
        System.out.println( address + &quot; 에 있는 방 목록 : &quot;);
        for(int i = 0; i &amp;lt; rooms.length; i++) {
            if(rooms[i] != null) {
                rooms[i].describe();
            }
        }
    }
    
    // 테스트 작성 
    public static void main(String[] args) {
        House house = new House(&quot;부산시 진구&quot;);
        house.showRooms();

        // house 객체가 소멸이 되면 rooms 도 Room 객체도 소멸 (GC 에 의해 소멸)
        house = null;
    }
    
}&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-end=&quot;3385&quot; data-start=&quot;3365&quot; data-ke-size=&quot;size26&quot;&gt;  UML에서의 컴포지션 표현&lt;/h2&gt;
&lt;p data-end=&quot;3432&quot; data-start=&quot;3387&quot; data-ke-size=&quot;size16&quot;&gt;클래스 다이어그램에서는 포함 관계를 &lt;b&gt;채워진 다이아몬드(◆)&lt;/b&gt; 로 표현합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1746554003534&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;+---------------------+
|       House         |
+---------------------+
| - address: String   |
| - rooms: Room[]     |
+---------------------+
| + House()           |
| + showRooms()       |
+---------------------+
         ◆ 1
         |
         |
         | *
+---------------------+
|        Room         |
+---------------------+
| - type: String      |
+---------------------+
| + describe()        |
+---------------------+&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;3902&quot; data-start=&quot;3875&quot;&gt;House &amp;rarr; Room: 1:N 포함 관계&lt;/li&gt;
&lt;li data-end=&quot;3946&quot; data-start=&quot;3903&quot;&gt;House가 소멸되면 내부 Room들도 함께 사라짐 (강한 생명주기 결합)&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-end=&quot;3963&quot; data-start=&quot;3953&quot; data-ke-size=&quot;size26&quot;&gt;  정리 표&lt;/h2&gt;
&lt;div&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;
&lt;table style=&quot;border-collapse: collapse; width: 95.3488%; height: 175px;&quot; border=&quot;1&quot; data-end=&quot;4476&quot; data-start=&quot;3965&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 25px;&quot;&gt;
&lt;td style=&quot;text-align: center; height: 25px;&quot;&gt;&lt;b&gt;항목&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center; height: 25px;&quot;&gt;&lt;b&gt;설명&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 25px;&quot; data-end=&quot;4166&quot; data-start=&quot;4113&quot;&gt;
&lt;td style=&quot;text-align: center; height: 25px;&quot; data-col-size=&quot;sm&quot; data-end=&quot;4124&quot; data-start=&quot;4113&quot;&gt;&lt;b&gt;포함 관계&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center; height: 25px;&quot; data-col-size=&quot;sm&quot; data-end=&quot;4166&quot; data-start=&quot;4124&quot;&gt;한 클래스가 다른 클래스를 필드로 포함하는 관계&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 25px;&quot; data-end=&quot;4237&quot; data-start=&quot;4167&quot;&gt;
&lt;td style=&quot;text-align: center; height: 25px;&quot; data-col-size=&quot;sm&quot; data-end=&quot;4178&quot; data-start=&quot;4167&quot;&gt;&lt;b&gt;대표 표현&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center; height: 25px;&quot; data-col-size=&quot;sm&quot; data-end=&quot;4237&quot; data-start=&quot;4178&quot;&gt;&amp;ldquo;has-a&amp;rdquo; 관계&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 25px;&quot; data-end=&quot;4294&quot; data-start=&quot;4238&quot;&gt;
&lt;td style=&quot;text-align: center; height: 25px;&quot; data-col-size=&quot;sm&quot; data-end=&quot;4250&quot; data-start=&quot;4238&quot;&gt;&lt;b&gt;생명주기&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center; height: 25px;&quot; data-end=&quot;4294&quot; data-start=&quot;4250&quot; data-col-size=&quot;sm&quot;&gt;포함된 객체는 소유 객체와 함께 생성/소멸됨&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 25px;&quot; data-end=&quot;4349&quot; data-start=&quot;4295&quot;&gt;
&lt;td style=&quot;text-align: center; height: 25px;&quot; data-col-size=&quot;sm&quot; data-end=&quot;4306&quot; data-start=&quot;4295&quot;&gt;&lt;b&gt;구현 방법&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center; height: 25px;&quot; data-col-size=&quot;sm&quot; data-end=&quot;4349&quot; data-start=&quot;4306&quot;&gt;필드로 선언 후 생성자 또는 내부에서 인스턴스화&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 25px;&quot; data-end=&quot;4414&quot; data-start=&quot;4350&quot;&gt;
&lt;td style=&quot;text-align: center; height: 25px;&quot; data-col-size=&quot;sm&quot; data-end=&quot;4363&quot; data-start=&quot;4350&quot;&gt;&lt;b&gt;UML 표현&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center; height: 25px;&quot; data-col-size=&quot;sm&quot; data-end=&quot;4414&quot; data-start=&quot;4363&quot;&gt;채워진 다이아몬드(◆) 사용&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 25px;&quot; data-end=&quot;4476&quot; data-start=&quot;4415&quot;&gt;
&lt;td style=&quot;text-align: center; height: 25px;&quot; data-col-size=&quot;sm&quot; data-end=&quot;4426&quot; data-start=&quot;4415&quot;&gt;&lt;b&gt;사용 예시&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center; height: 25px;&quot; data-col-size=&quot;sm&quot; data-end=&quot;4476&quot; data-start=&quot;4426&quot;&gt;자동차 &amp;rarr; 엔진, 집 &amp;rarr; 방, 회사 &amp;rarr; 부서 등&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/blockquote&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-style=&quot;style6&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;h2 style=&quot;color: #000000;&quot; data-end=&quot;79&quot; data-start=&quot;68&quot; data-ke-size=&quot;size26&quot;&gt;  마무리하며&lt;/h2&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-end=&quot;277&quot; data-start=&quot;127&quot; data-ke-size=&quot;size16&quot;&gt;이번 글에서는 클래스가 다른 클래스를 포함하여 구성하는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;포함 관계(Composition)&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;에 대해 알아보았습니다.&lt;br /&gt;자동차와 엔진, 집과 방처럼&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;객체가 객체를 소유하는 구조&lt;/b&gt;를 통해&lt;br /&gt;객체 간의 강한 생명주기 결합을 어떻게 코드로 표현하는지 배웠습니다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-end=&quot;406&quot; data-start=&quot;279&quot; data-ke-size=&quot;size16&quot;&gt;다음 글에서는 클래스 간의 연결을 나타내는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;연관 관계(Association)&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;를 다루어보겠습니다.&lt;br /&gt;포함 관계와 달리 객체 간&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;느슨한 연결&lt;/b&gt;이나&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;참조만 존재하는 관계&lt;/b&gt;는 어떻게 설계하는지 함께 살펴보겠습니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-style=&quot;style6&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;h2 style=&quot;color: #000000;&quot; data-ke-size=&quot;size26&quot; data-start=&quot;57&quot; data-end=&quot;93&quot;&gt;  다음 글 예고 : 연관 관계(Association)&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot; data-start=&quot;94&quot; data-end=&quot;231&quot;&gt;객체지향 설계에서 연관 관계는 클래스 간의 연결을 의미하며,&lt;br /&gt;한 객체가 다른 객체를 참조하거나 사용하는 구조를 표현합니다.&lt;br /&gt;다음 글에서는 연관 관계의 기본 개념과 단방향/양방향 연관, 그리고 실전 예제 코드를 통해 구조를 학습해보겠습니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-style=&quot;style6&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;h2 style=&quot;color: #000000;&quot; data-end=&quot;645&quot; data-start=&quot;629&quot; data-ke-size=&quot;size26&quot;&gt;  이전 글 다시 보기&lt;/h2&gt;
&lt;/div&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt; 상속(Inheritance)에 대해서 궁금하다면??&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://seohong.tistory.com/145&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;2025.05.05 - [Java] -   상속(Inheritance)이란?&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;figure id=&quot;og_1746555087328&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;  상속(Inheritance)이란?&quot; data-og-description=&quot;✍️ 시작하며이전 글에서는 같은 이름으로 다양한 매개변수를 처리하는 메서드 오버로딩(Overloading) 개념을 배웠습니다.이번 글에서는 객체지향 프로그래밍에서 가장 핵심적인 원칙 중 하나인 &quot; data-og-host=&quot;seohong.tistory.com&quot; data-og-source-url=&quot;https://seohong.tistory.com/145&quot; data-og-url=&quot;https://seohong.tistory.com/145&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/eT6l8/hyYMZhtUkM/cyGRe1cBsmKtrpn8GtznCK/img.png?width=800&amp;amp;height=498&amp;amp;face=0_0_800_498,https://scrap.kakaocdn.net/dn/7i4YE/hyYMXKI58M/jt9qmcNGygcTqsZyXZVWE0/img.png?width=800&amp;amp;height=498&amp;amp;face=0_0_800_498,https://scrap.kakaocdn.net/dn/czDdW2/hyYMUHfwZB/tIPKISxNofKvnUKNwUliG0/img.png?width=1054&amp;amp;height=657&amp;amp;face=0_0_1054_657&quot;&gt;&lt;a href=&quot;https://seohong.tistory.com/145&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://seohong.tistory.com/145&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/eT6l8/hyYMZhtUkM/cyGRe1cBsmKtrpn8GtznCK/img.png?width=800&amp;amp;height=498&amp;amp;face=0_0_800_498,https://scrap.kakaocdn.net/dn/7i4YE/hyYMXKI58M/jt9qmcNGygcTqsZyXZVWE0/img.png?width=800&amp;amp;height=498&amp;amp;face=0_0_800_498,https://scrap.kakaocdn.net/dn/czDdW2/hyYMUHfwZB/tIPKISxNofKvnUKNwUliG0/img.png?width=1054&amp;amp;height=657&amp;amp;face=0_0_1054_657');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;  상속(Inheritance)이란?&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;✍️ 시작하며이전 글에서는 같은 이름으로 다양한 매개변수를 처리하는 메서드 오버로딩(Overloading) 개념을 배웠습니다.이번 글에서는 객체지향 프로그래밍에서 가장 핵심적인 원칙 중 하나인&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;seohong.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Java</category>
      <category>composition</category>
      <category>Java</category>
      <category>UML</category>
      <category>객체지향</category>
      <category>소유</category>
      <category>컴포지션</category>
      <category>코드재사용</category>
      <category>클래스다이어그램</category>
      <category>포함관계</category>
      <category>포함관계란?</category>
      <author>공돌이 출신 개발자</author>
      <guid isPermaLink="true">https://seohong.tistory.com/146</guid>
      <comments>https://seohong.tistory.com/146#entry146comment</comments>
      <pubDate>Tue, 6 May 2025 21:15:43 +0900</pubDate>
    </item>
    <item>
      <title>  상속(Inheritance)이란?</title>
      <link>https://seohong.tistory.com/145</link>
      <description>&lt;h2 data-end=&quot;187&quot; data-start=&quot;175&quot; data-ke-size=&quot;size26&quot;&gt;✍️ 시작하며&lt;/h2&gt;
&lt;p data-end=&quot;399&quot; data-start=&quot;188&quot; data-ke-size=&quot;size16&quot;&gt;이전 글에서는 같은 이름으로 다양한 매개변수를 처리하는 &lt;b&gt;메서드 오버로딩(Overloading)&lt;/b&gt; 개념을 배웠습니다.&lt;br /&gt;이번 글에서는 객체지향 프로그래밍에서 &lt;b&gt;가장 핵심적인 원칙 중 하나인 상속(Inheritance)&lt;/b&gt; 에 대해 알아보겠습니다.&lt;br /&gt;상속은 &lt;b&gt;기존 클래스를 확장하여 재사용&lt;/b&gt;할 수 있도록 도와주는 기능으로, 실제 현업 코드에서도 매우 많이 활용됩니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-end=&quot;419&quot; data-start=&quot;406&quot; data-ke-size=&quot;size26&quot;&gt;  학습 목표&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;557&quot; data-start=&quot;420&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;441&quot; data-start=&quot;420&quot;&gt;상속의 개념과 역할을 이해한다.&lt;/li&gt;
&lt;li data-end=&quot;478&quot; data-start=&quot;442&quot;&gt;extends 키워드를 사용한 클래스 확장을 학습한다.&lt;/li&gt;
&lt;li data-end=&quot;521&quot; data-start=&quot;479&quot;&gt;메서드 오버라이딩(Overriding)의 개념과 적용 방법을 익힌다.&lt;/li&gt;
&lt;li data-end=&quot;557&quot; data-start=&quot;522&quot;&gt;상속을 활용한 클래스 다이어그램 구조와 코드를 이해한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-end=&quot;575&quot; data-start=&quot;564&quot; data-ke-size=&quot;size26&quot;&gt;  개념 정리&lt;/h2&gt;
&lt;h3 data-end=&quot;602&quot; data-start=&quot;577&quot; data-ke-size=&quot;size23&quot;&gt;  상속(Inheritance)이란?&lt;/h3&gt;
&lt;p data-end=&quot;698&quot; data-start=&quot;604&quot; data-ke-size=&quot;size16&quot;&gt;상속은 기존 클래스를 기반으로 새로운 클래스를 정의하는 방식입니다.&lt;br /&gt;상속을 사용하면 &lt;b&gt;기존 클래스의 속성과 기능을 물려받아&lt;/b&gt; 새로운 클래스를 확장할 수 있습니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;837&quot; data-start=&quot;700&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;769&quot; data-start=&quot;700&quot;&gt;&lt;b&gt;부모 클래스(Superclass / Parent Class)&lt;/b&gt;&lt;br /&gt;: 공통 속성과 기능을 정의한 기존 클래스&lt;/li&gt;
&lt;li data-end=&quot;837&quot; data-start=&quot;770&quot;&gt;&lt;b&gt;자식 클래스(Subclass / Child Class)&lt;/b&gt;&lt;br /&gt;: 부모 클래스를 상속받아 확장한 새로운 클래스&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote data-end=&quot;898&quot; data-start=&quot;839&quot; data-ke-style=&quot;style1&quot;&gt;
&lt;p data-end=&quot;898&quot; data-start=&quot;841&quot; data-ke-size=&quot;size16&quot;&gt;자바에서는 &lt;b&gt;단일 상속만 지원&lt;/b&gt;합니다. 즉, 한 클래스는 하나의 부모 클래스만 상속할 수 있습니다.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1054&quot; data-origin-height=&quot;657&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ceCuIi/btsNMJhNp8Y/SW7p1khJ2DUlgICUz69an0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ceCuIi/btsNMJhNp8Y/SW7p1khJ2DUlgICUz69an0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ceCuIi/btsNMJhNp8Y/SW7p1khJ2DUlgICUz69an0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FceCuIi%2FbtsNMJhNp8Y%2FSW7p1khJ2DUlgICUz69an0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1054&quot; height=&quot;657&quot; data-origin-width=&quot;1054&quot; data-origin-height=&quot;657&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-end=&quot;916&quot; data-start=&quot;905&quot; data-ke-size=&quot;size26&quot;&gt;  문법 설명&lt;/h2&gt;
&lt;h3 data-end=&quot;927&quot; data-start=&quot;918&quot; data-ke-size=&quot;size23&quot;&gt;기본 문법&lt;/h3&gt;
&lt;pre id=&quot;code_1746552820599&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;class 부모클래스 {
    // 공통 기능 및 속성
}

class 자식클래스 extends 부모클래스 {
    // 부모 클래스의 필드/메서드를 물려받고 추가 확장
}&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-end=&quot;1080&quot; data-start=&quot;1046&quot; data-ke-size=&quot;size26&quot;&gt;  예시 코드 ① &amp;ndash; 상속 없이 직접 필드 복붙한 경우&lt;/h2&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;pre id=&quot;code_1746553012298&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// A.java
public class A {
    String name;
    int height;
    int weight;
    int age;
}

// B.java
public class B {
    String name;
    int height;
    int weight;
    int age;
    int level;
    String nickName;
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p style=&quot;color: #000000;&quot; data-end=&quot;301&quot; data-start=&quot;286&quot; data-ke-size=&quot;size18&quot;&gt;✅ 코드 중복이 심합니다. 유지보수가 어려워집니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-end=&quot;1374&quot; data-start=&quot;1349&quot; data-ke-size=&quot;size26&quot;&gt;  예시 코드 ② &amp;ndash; 상속 사용한 경우&lt;/h2&gt;
&lt;pre id=&quot;code_1746553051276&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// C.java
public class C extends A {
    // A 클래스의 name, height, weight, age 자동 상속
    int level;
    String nickName;
}&lt;/code&gt;&lt;/pre&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;✅&lt;/span&gt; C 클래스는 A의 필드를 모두 물려받아 재사용하고, 자신만의 필드를 추가로 선언할 수 있습니다.&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-end=&quot;1613&quot; data-start=&quot;1574&quot; data-ke-size=&quot;size26&quot;&gt;  예시 코드 ③ &amp;ndash; 메서드 상속과 오버라이드(Override)&lt;/h2&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;pre id=&quot;code_1746553074919&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// Cal.java
public class Cal {
    public int sum(int n1, int n2) {
        return n1 + n2;
    }

    public int multiply(int n1, int n2) {
        return n1 * n2;
    }
}

// ChildCal.java
class ChildCal extends Cal {

    public int minus(int n1, int n2) {
        return n1 - n2;
    }

    // 오버라이딩: 부모 메서드 재정의
    @Override
    public int multiply(int n1, int n2) {
        if(n1 == 0 || n2 == 0) {
            System.out.println(&quot;0을 입력하지 마시오.&quot;);
        }
        return n1 * n2;
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;2178&quot; data-start=&quot;2123&quot;&gt;@Override는 &lt;b&gt;부모 클래스의 메서드를 동일한 시그니처로 재정의&lt;/b&gt;했다는 표시입니다.&lt;/li&gt;
&lt;li data-end=&quot;2236&quot; data-start=&quot;2179&quot;&gt;이 기능을 &lt;b&gt;메서드 오버라이딩(Overriding)&lt;/b&gt; 이라고 부르며, 상속에서 매우 중요합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-end=&quot;2278&quot; data-start=&quot;2243&quot; data-ke-size=&quot;size26&quot;&gt;  실전 예제 &amp;ndash; Animal 클래스 상속 및 오버라이딩&lt;/h2&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;pre id=&quot;code_1746553090727&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;class Animal {
    protected String name;

    void eat() {
        System.out.println(name + &quot;이(가) 밥을 먹습니다.&quot;);
    }

    void bark() {
        System.out.println(name + &quot;이(가) 짖습니다.&quot;);
    }
}

class Dog extends Animal {
    @Override
    void eat() {
        System.out.println(&quot;강아지가 사료를 먹습니다.&quot;);
    }
}

class Cat extends Animal {
    @Override
    void eat() {
        System.out.println(&quot;고양이가 츄르를 먹습니다.&quot;);
    }
}

public class Main1 {
    public static void main(String[] args) {
        Dog dog = new Dog();
        dog.name = &quot;바둑이&quot;;
        dog.eat();   // 오버라이드된 메서드 호출
        dog.bark();  // 상속된 메서드 호출
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-end=&quot;3175&quot; data-start=&quot;3165&quot; data-ke-size=&quot;size26&quot;&gt;  정리 표&lt;/h2&gt;
&lt;div&gt;
&lt;table style=&quot;border-collapse: collapse; width: 92.907%; height: 277px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 22px;&quot;&gt;
&lt;td style=&quot;height: 22px; text-align: center;&quot;&gt;&lt;b&gt;항목&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 22px; text-align: center;&quot;&gt;&lt;b&gt;설명&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 22px;&quot;&gt;
&lt;td style=&quot;height: 22px; text-align: center;&quot;&gt;&lt;b&gt;상속이란?&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 22px; text-align: center;&quot;&gt;기존 클래스를 기반으로 새로운 클래스를 정의하는 기법&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 22px;&quot;&gt;
&lt;td style=&quot;height: 22px; text-align: center;&quot;&gt;&lt;b&gt;핵심 키워드&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 22px; text-align: center;&quot;&gt;extends&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 22px;&quot;&gt;
&lt;td style=&quot;height: 22px; text-align: center;&quot;&gt;&lt;b&gt;오버라이딩 조건&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 22px; text-align: center;&quot;&gt;이름, 매개변수, 반환형이 부모 메서드와 동일해야 함&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 22px;&quot;&gt;
&lt;td style=&quot;height: 22px; text-align: center;&quot;&gt;&lt;b&gt;대표 활용 예시&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 22px; text-align: center;&quot;&gt;Animal &amp;rarr; Dog, Cat / Cal &amp;rarr; ChildCal 등&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 22px;&quot;&gt;
&lt;td style=&quot;height: 22px; text-align: center;&quot;&gt;&lt;b&gt;상속의 장점&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 22px; text-align: center;&quot;&gt;코드 재사용, 확장성, 가독성 향상&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-end=&quot;206&quot; data-start=&quot;173&quot; data-ke-size=&quot;size26&quot;&gt; ️ 도전 과제 &amp;ndash; 상속 활용 멤버십 클래스 구현&lt;/h2&gt;
&lt;blockquote data-end=&quot;3739&quot; data-start=&quot;3676&quot; data-ke-style=&quot;style3&quot;&gt;아래 다이어그램을 참고하여 Customer와 VIPCustomer 클래스를 상속 구조로 직접 구현해보세요.&lt;/blockquote&gt;
&lt;p data-end=&quot;338&quot; data-start=&quot;208&quot; data-ke-size=&quot;size16&quot;&gt;이번에는 &lt;b&gt;실제 상황을 반영한 상속 예제&lt;/b&gt;를 구현해보겠습니다.&lt;br /&gt;회사에서는 고객 정보를 기반으로 서비스를 제공하고 있으며,&lt;br /&gt;고객 등급에 따라 일반 고객(Customer)과 VIP 고객(VIPCustomer)으로 나뉩니다.&lt;/p&gt;
&lt;p data-end=&quot;444&quot; data-start=&quot;340&quot; data-ke-size=&quot;size16&quot;&gt;두 고객은 공통적인 속성과 기능이 존재하므로, &lt;b&gt;Customer 클래스를 부모로&lt;/b&gt; 정의하고&lt;br /&gt;VIP 고객은 &lt;b&gt;VIPCustomer라는 자식 클래스로 확장&lt;/b&gt;해 구현할 수 있습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;970&quot; data-origin-height=&quot;450&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/OPvzV/btsNMcSdXeH/E67WeW3mY3cRShajnpRFl0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/OPvzV/btsNMcSdXeH/E67WeW3mY3cRShajnpRFl0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/OPvzV/btsNMcSdXeH/E67WeW3mY3cRShajnpRFl0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FOPvzV%2FbtsNMcSdXeH%2FE67WeW3mY3cRShajnpRFl0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;970&quot; height=&quot;450&quot; data-origin-width=&quot;970&quot; data-origin-height=&quot;450&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-start=&quot;451&quot; data-end=&quot;465&quot; data-ke-size=&quot;size23&quot;&gt;  다이어그램&lt;/h3&gt;
&lt;pre id=&quot;code_1746553314221&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;---------------------------------
|           Customer            |
---------------------------------
| - customerID: int             |
| - customerName: String        |
| - customerGrade: String       |
| - bonusPoint: int             |
| - bonusRatio: double          |
---------------------------------
| + Customer()                  |
| + calcPrice(int): int         |
| + showCustomerInfo(): String  |
---------------------------------

---------------------------------
|          VIPCustomer          |
---------------------------------
| - agentID: int                |
| - salesRatio: double          |
---------------------------------
| + VIPCustomer()               |
| + getAgentID(): int           |
---------------------------------&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;4519&quot; data-start=&quot;4499&quot;&gt;일반 고객: 1% 보너스 적립&lt;/li&gt;
&lt;li data-end=&quot;4548&quot; data-start=&quot;4520&quot;&gt;VIP 고객: 추가 할인율 + 전담 상담원 배정&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 data-end=&quot;465&quot; data-start=&quot;451&quot; data-ke-size=&quot;size23&quot;&gt;  요구사항 정리&lt;/h3&gt;
&lt;div&gt;
&lt;table style=&quot;border-collapse: collapse; width: 93.9535%; height: 199px;&quot; border=&quot;1&quot; data-end=&quot;771&quot; data-start=&quot;467&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&lt;b&gt;항목&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&lt;b&gt;설명&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;650&quot; data-start=&quot;601&quot;&gt;
&lt;td style=&quot;text-align: center;&quot; data-col-size=&quot;sm&quot; data-end=&quot;614&quot; data-start=&quot;601&quot;&gt;&lt;b&gt;공통 속성&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot; data-col-size=&quot;md&quot; data-end=&quot;650&quot; data-start=&quot;614&quot;&gt;고객 ID, 고객 이름, 등급, 보너스 포인트, 적립 비율&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;715&quot; data-start=&quot;651&quot;&gt;
&lt;td style=&quot;text-align: center;&quot; data-col-size=&quot;sm&quot; data-end=&quot;664&quot; data-start=&quot;651&quot;&gt;&lt;b&gt;공통 기능&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot; data-end=&quot;715&quot; data-start=&quot;664&quot; data-col-size=&quot;md&quot;&gt;구매 금액 계산(calcPrice), 고객 정보 출력(showCustomerInfo)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;771&quot; data-start=&quot;716&quot;&gt;
&lt;td style=&quot;text-align: center;&quot; data-col-size=&quot;sm&quot; data-end=&quot;728&quot; data-start=&quot;716&quot;&gt;&lt;b&gt;VIP 전용 속성&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot; data-col-size=&quot;md&quot; data-end=&quot;771&quot; data-start=&quot;728&quot;&gt;전담 상담원 ID, 할인율(salesRatio)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 data-end=&quot;790&quot; data-start=&quot;778&quot; data-ke-size=&quot;size23&quot;&gt;✔️ 구현 코드&lt;/h3&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;pre id=&quot;code_1746553212702&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// 부모 클래스
public class Customer {

    protected int customerID;
    protected String customerName;
    protected String customerGrade;
    int bonusPoint;
    double bonusRatio;

    public Customer() {
        this.customerGrade = &quot;SILVER&quot;;
        this.bonusRatio = 0.01;
    }

    public Customer(int customerID, String customerName) {
        this();
        this.customerID = customerID;
        this.customerName = customerName;
    }

    public int calcPrice(int price) {
        bonusPoint += price * bonusRatio;
        return price;
    }

    public String showCustomerInfo() {
        return customerName + &quot;님의 등급은 &quot; + customerGrade + &quot;이며, 보너스 포인트는 &quot; + bonusPoint + &quot;점입니다.&quot;;
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;pre id=&quot;code_1746553219805&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// 자식 클래스
public class VIPCustomer extends Customer {

    private int agentID;
    double salesRatio;

    public VIPCustomer() {
        super(); // 부모 생성자 호출
        this.customerGrade = &quot;VIP&quot;;
        this.bonusRatio = 0.05;
        this.salesRatio = 0.1;
    }

    public VIPCustomer(int customerID, String customerName, int agentID) {
        super(customerID, customerName);
        this.customerGrade = &quot;VIP&quot;;
        this.bonusRatio = 0.05;
        this.salesRatio = 0.1;
        this.agentID = agentID;
    }

    @Override
    public int calcPrice(int price) {
        bonusPoint += price * bonusRatio;
        price -= price * salesRatio;
        return price;
    }

    public int getAgentID() {
        return agentID;
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1746553230310&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// 실행 클래스
public class Main {
    public static void main(String[] args) {

        Customer customerLee = new Customer(10010, &quot;이순신&quot;);
        System.out.println(customerLee.showCustomerInfo());
        System.out.println(&quot;지불 금액 : &quot; + customerLee.calcPrice(10000));

        System.out.println(&quot;------------------------------&quot;);

        VIPCustomer customerKim = new VIPCustomer(10020, &quot;김유신&quot;, 777);
        System.out.println(customerKim.showCustomerInfo());
        System.out.println(&quot;지불 금액 : &quot; + customerKim.calcPrice(10000));
        System.out.println(&quot;상담원 ID : &quot; + customerKim.getAgentID());
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 data-end=&quot;2903&quot; data-start=&quot;2884&quot; data-ke-size=&quot;size23&quot;&gt;✅ 결과 예시 (실행 출력)&lt;/h3&gt;
&lt;pre id=&quot;code_1746553253652&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;이순신님의 등급은 SILVER이며, 보너스 포인트는 100점입니다.
지불 금액 : 10000
------------------------------
김유신님의 등급은 VIP이며, 보너스 포인트는 500점입니다.
지불 금액 : 9000
상담원 ID : 777&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-end=&quot;2932&quot; data-start=&quot;2921&quot; data-ke-size=&quot;size26&quot;&gt;  마무리하며&lt;/h2&gt;
&lt;p data-end=&quot;3078&quot; data-start=&quot;2934&quot; data-ke-size=&quot;size16&quot;&gt;상속은 객체지향 설계에서 중복을 줄이고 코드를 재사용할 수 있게 도와주는 핵심 기능입니다.&lt;br /&gt;자식 클래스는 부모의 필드와 메서드를 물려받아 사용할 수 있으며,&lt;br /&gt;&lt;b&gt;필요 시 오버라이딩(Overriding)을 통해 원하는 방식으로 재정의&lt;/b&gt;할 수 있습니다.&lt;/p&gt;
&lt;p data-end=&quot;3158&quot; data-start=&quot;3080&quot; data-ke-size=&quot;size16&quot;&gt;다음 포스팅에서는 포함관계(Composition)에 대해서 알아볼게요!&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-end=&quot;142&quot; data-start=&quot;106&quot; data-ke-size=&quot;size26&quot;&gt;  다음 글 예고 : 포함 관계(Composition)&lt;/h2&gt;
&lt;p data-end=&quot;307&quot; data-start=&quot;143&quot; data-ke-size=&quot;size16&quot;&gt;객체 지향 설계에서는 객체 간의 관계를 표현하는 다양한 방식이 있습니다.&lt;br /&gt;다음 글에서는 클래스 간의 &quot;has-a&quot; 관계를 나타내는 &lt;b&gt;포함 관계(Composition)&lt;/b&gt; 를 중심으로,&lt;br /&gt;자동차와 엔진, 집과 방(Room) 같은 예제를 통해 컴포지션의 개념과 코드를 함께 학습해보겠습니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 style=&quot;color: #000000;&quot; data-end=&quot;645&quot; data-start=&quot;629&quot; data-ke-size=&quot;size26&quot;&gt;  이전 글 다시 보기&lt;/h2&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;메서드 오버로딩에 대해서 궁금하다면??&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://seohong.tistory.com/144&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;2025.05.04 - [Java] -   메서드 오버로딩이란?&lt;/a&gt;&lt;/p&gt;
&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;figure id=&quot;og_1746553628408&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;  메서드 오버로딩이란?&quot; data-og-description=&quot;✍️ 시작하며이전 글에서는 클래스와 메서드를 정의하는 방법을 살펴보았습니다.이번 글에서는 자바에서 같은 이름의 메서드를 다양한 방식으로 정의할 수 있는 기술,바로 **메서드 오버로딩(&quot; data-og-host=&quot;seohong.tistory.com&quot; data-og-source-url=&quot;https://seohong.tistory.com/144&quot; data-og-url=&quot;https://seohong.tistory.com/144&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/LUItW/hyYPk5W3ge/PgvvwOJNdne4r6ny46cHL0/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/bEgGLB/hyYRuGSm1f/vainT3mQiMY4wlaZSKo411/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800&quot;&gt;&lt;a href=&quot;https://seohong.tistory.com/144&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://seohong.tistory.com/144&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/LUItW/hyYPk5W3ge/PgvvwOJNdne4r6ny46cHL0/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/bEgGLB/hyYRuGSm1f/vainT3mQiMY4wlaZSKo411/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;  메서드 오버로딩이란?&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;✍️ 시작하며이전 글에서는 클래스와 메서드를 정의하는 방법을 살펴보았습니다.이번 글에서는 자바에서 같은 이름의 메서드를 다양한 방식으로 정의할 수 있는 기술,바로 **메서드 오버로딩(&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;seohong.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;</description>
      <category>Java</category>
      <category>객체지향</category>
      <category>부모</category>
      <category>부모 클래스</category>
      <category>상속</category>
      <category>상속이란?</category>
      <category>오버라이딩</category>
      <category>자식</category>
      <category>자식 클래스</category>
      <category>재사용</category>
      <category>클래스</category>
      <author>공돌이 출신 개발자</author>
      <guid isPermaLink="true">https://seohong.tistory.com/145</guid>
      <comments>https://seohong.tistory.com/145#entry145comment</comments>
      <pubDate>Mon, 5 May 2025 20:46:56 +0900</pubDate>
    </item>
    <item>
      <title>  메서드 오버로딩이란?</title>
      <link>https://seohong.tistory.com/144</link>
      <description>&lt;h2 data-end=&quot;214&quot; data-start=&quot;202&quot; data-ke-size=&quot;size26&quot;&gt;✍️ 시작하며&lt;/h2&gt;
&lt;p data-end=&quot;354&quot; data-start=&quot;215&quot; data-ke-size=&quot;size16&quot;&gt;이전 글에서는 클래스와 메서드를 정의하는 방법을 살펴보았습니다.&lt;br /&gt;이번 글에서는 자바에서 &lt;b&gt;같은 이름의 메서드를 다양한 방식으로 정의할 수 있는 기술&lt;/b&gt;,&lt;br /&gt;바로 **메서드 오버로딩(Method Overloading)**에 대해 배워보겠습니다.&lt;/p&gt;
&lt;p data-end=&quot;481&quot; data-start=&quot;356&quot; data-ke-size=&quot;size16&quot;&gt;이 개념은 일상적으로 자주 쓰이며, 특히 실무에서 같은 기능을 다양한 방식으로 처리할 때 매우 유용합니다.&lt;br /&gt;실제 예제로는 Calculator 클래스와 함께, 스타크래프트 유닛 전투를 코드로 설계한 예시도 함께 소개합니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;  학습 목표&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;624&quot; data-start=&quot;502&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;529&quot; data-start=&quot;502&quot;&gt;메서드 오버로딩의 개념과 조건을 이해한다.&lt;/li&gt;
&lt;li data-end=&quot;553&quot; data-start=&quot;530&quot;&gt;오버로딩이 언제 유용한지 파악한다.&lt;/li&gt;
&lt;li data-end=&quot;601&quot; data-start=&quot;554&quot;&gt;실전 코드(Calculator, StarCraft 유닛)로 오버로딩을 익힌다.&lt;/li&gt;
&lt;li data-end=&quot;624&quot; data-start=&quot;602&quot;&gt;오버라이딩과 차이를 구분할 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-end=&quot;406&quot; data-start=&quot;395&quot; data-ke-size=&quot;size26&quot;&gt;  개념 정리&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;  메서드 오버로딩(Method Overloading)이란?&lt;/h3&gt;
&lt;blockquote data-end=&quot;555&quot; data-start=&quot;505&quot; data-ke-style=&quot;style1&quot;&gt;
&lt;p data-end=&quot;768&quot; data-start=&quot;686&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;같은 이름의 메서드를 여러 개 정의하는 것&lt;/b&gt;입니다.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p style=&quot;color: #666666; text-align: start;&quot; data-start=&quot;686&quot; data-end=&quot;768&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #666666; text-align: start;&quot; data-start=&quot;686&quot; data-end=&quot;768&quot; data-ke-size=&quot;size16&quot;&gt;다만, 이름은 같지만 **매개변수(파라미터)**의 타입, 개수, 순서가 달라야 합니다.&lt;/p&gt;
&lt;p style=&quot;color: #666666; text-align: start;&quot; data-start=&quot;770&quot; data-end=&quot;821&quot; data-ke-size=&quot;size16&quot;&gt;이렇게 하면 다양한 입력을 하나의 이름으로 처리할 수 있어&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;코드 가독성&lt;/b&gt;이 향상됩니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 data-end=&quot;863&quot; data-start=&quot;828&quot; data-ke-size=&quot;size23&quot;&gt;  메서드 시그니처(Method Signature)란?&lt;/h3&gt;
&lt;p data-end=&quot;897&quot; data-start=&quot;865&quot; data-ke-size=&quot;size16&quot;&gt;메서드를 구분하는 고유한 정보입니다. 다음으로 구성됩니다:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;934&quot; data-start=&quot;899&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;911&quot; data-start=&quot;899&quot;&gt;&lt;b&gt;메서드 이름&lt;/b&gt;&lt;/li&gt;
&lt;li data-end=&quot;934&quot; data-start=&quot;912&quot;&gt;&lt;b&gt;매개변수의 타입, 순서, 개수&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;972&quot; data-start=&quot;936&quot; data-ke-size=&quot;size16&quot;&gt;※ 반환형(return type)은 시그니처에 포함되지 않습니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-end=&quot;992&quot; data-start=&quot;979&quot; data-ke-size=&quot;size26&quot;&gt;  문법 설명&lt;/h2&gt;
&lt;h3 data-end=&quot;1011&quot; data-start=&quot;994&quot; data-ke-size=&quot;size23&quot;&gt;오버로딩이 성립하는 조건&lt;/h3&gt;
&lt;table style=&quot;border-collapse: collapse; width: 87.7907%; height: 189px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&lt;b&gt;구분&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&lt;b&gt;예시&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&lt;b&gt;매개변수 개수&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;add(int a), add(int a, int b)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&lt;b&gt;매개변수 타입&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;add(int a), add(double a)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&lt;b&gt;매개변수 순서&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;add(int, double), add(double, int)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-end=&quot;1355&quot; data-start=&quot;1338&quot; data-ke-size=&quot;size16&quot;&gt;※ 아래는 불가능한 경우입니다:&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;pre id=&quot;code_1746551878151&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;int add(int a, int b) {}
double add(int a, int b) {} // 오류 발생: 시그니처가 같음&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-end=&quot;1479&quot; data-start=&quot;1447&quot; data-ke-size=&quot;size26&quot;&gt;  예시 코드 &amp;ndash; 기본 예제 (Calculator)&lt;/h2&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;pre id=&quot;code_1746551901094&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;public class Calculator {

    public int add(int a, int b) {
        return a + b;
    }

    public double add(double a, double b) {
        return a + b;
    }

    public int add(int a, int b, int c) {
        return a + b + c;
    }

    public String add(String str1, String str2) {
        return str1 + str2;
    }

    public static void main(String[] args) {
        Calculator c = new Calculator();
        System.out.println(c.add(3, 4));           // 7
        System.out.println(c.add(2.5, 1.5));       // 4.0
        System.out.println(c.add(1, 2, 3));        // 6
        System.out.println(c.add(&quot;안녕&quot;, &quot;하세요&quot;)); // 안녕하세요
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;같은 이름의 add() 메서드를 다양한 타입과 개수로 정의하였고,&lt;br /&gt;컴파일러는 &lt;b&gt;전달된 인자에 따라 적절한 메서드를 자동 선택&lt;/b&gt;합니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-end=&quot;2258&quot; data-start=&quot;2226&quot; data-ke-size=&quot;size26&quot;&gt; ️ 실전 활용 예 &amp;ndash; 스타크래프트 유닛 공격 설계&lt;/h2&gt;
&lt;p data-end=&quot;2335&quot; data-start=&quot;2260&quot; data-ke-size=&quot;size16&quot;&gt;유닛 간 전투를 설계할 때도 &lt;b&gt;오버로딩&lt;/b&gt;은 강력한 기능입니다.&lt;br /&gt;attack() 메서드를 유닛마다 다르게 정의할 수 있습니다.&lt;/p&gt;
&lt;h3 data-end=&quot;2354&quot; data-start=&quot;2337&quot; data-ke-size=&quot;size23&quot;&gt;✔️ Zealot 클래스&lt;/h3&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;pre id=&quot;code_1746551926854&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;package com.startcraft_v02;
/**
 * ver02
 * 메서드 오버로딩 기법을 적용해서 코드를 설계해 보자.
 */
public class Zealot {
    private String name;
    private int power;
    private int hp;

    public Zealot(String name) {
        this.name = name;
        this.power = 4;
        this.hp = 70;
    }

    // read only --&amp;gt; getter
    public String getName() {
        return name;
    }

    public int getPower() {
        return power;
    }

    public int getHp() {
        return hp;
    }

    public void attack(Zealot zealot) {
        zealot.beAttacked(this.power);
        System.out.println(name + &quot; 이 &quot;+ zealot.getName() +&quot;을 공격합니다 &quot; );
    }
  public void attack(Zergling zergling) {
       zergling.beAttacked(this.power);
       System.out.println(name + &quot; 이 &quot; + zergling.getName() + &quot;을 공격합니다 &quot; );
  }

    public void beAttacked(int power) {
        if(this.hp &amp;lt;= 0 ) {
            System.out.println(name + &quot; 이(가) 이미 사망하였습니다.&quot;);
            // 실행에 제어권을 반납하고 싶으면 키워드 !! (돌아가)
            return;
        }
        this.hp -= power;
        System.out.println(name + &quot;이(가) 공격을 당합니다&quot;);
    }

    public void showInfo() {
        System.out.println(&quot;---------⭐상태창⭐----------&quot;);
        System.out.println(&quot;마린 이름 : &quot; + name);
        System.out.println(&quot;마린 공격력 : &quot; + power);
        System.out.println(&quot;마린 체력 : &quot; + hp);
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3 data-end=&quot;3162&quot; data-start=&quot;3138&quot; data-ke-size=&quot;size23&quot;&gt;✔️ Zergling 클래스&amp;nbsp;&lt;/h3&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;pre id=&quot;code_1746551936017&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;package com.startcraft_v02;

public class Zergling {
    private String name;
    private int power;
    private int hp;

    public Zergling(String name) {
        this.name = name;
        this.power = 3;
        this.hp = 50;
    }

    // read only --&amp;gt; getter
    public String getName() {
        return name;
    }

    public int getPower() {
        return power;
    }

    public int getHp() {
        return hp;
    }

    public void attack(Zealot zealot) {
        zealot.beAttacked(this.power);
        System.out.println(name + &quot; 이 &quot;+ zealot.getName() +&quot;을 공격합니다 &quot; );
    }

    public void attack(Marine marine) {
        System.out.println(name + &quot; 이 &quot; + marine.getName() + &quot;을 공격합니다 &quot; );
    }

    public void beAttacked(int power) {
        if(this.hp &amp;lt;= 0 ) {
            System.out.println(name + &quot; 이(가) 이미 사망하였습니다.&quot;);
            // 실행에 제어권을 반납하고 싶으면 키워드 !! (돌아가)
            return;
        }
        this.hp -= power;
        System.out.println(name + &quot;이(가) 공격을 당합니다&quot;);
    }

    public void showInfo() {
        System.out.println(&quot;---------⭐상태창⭐----------&quot;);
        System.out.println(&quot;저글링 이름 : &quot; + name);
        System.out.println(&quot;저글링 공격력 : &quot; + power);
        System.out.println(&quot;저글링 체력 : &quot; + hp);
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-start=&quot;3138&quot; data-end=&quot;3162&quot; data-ke-size=&quot;size23&quot;&gt;✔️ Marine 클래스&amp;nbsp;&lt;/h3&gt;
&lt;pre id=&quot;code_1746552162144&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;package com.startcraft_v02;
/**
 * ver02
 * 메서드 오버로딩 기법을 적용해서 코드를 설계해 보자.
 */
// 클래스 측, 실행 측
public class Marine {

    private String name;
    private int power;
    private int hp;

    public Marine(String name) {
        this.name = name;
        this.power = 4;
        this.hp = 70;
    }

    // read only --&amp;gt; getter
    public String getName() {
        return name;
    }

    public int getPower() {
        return power;
    }

    public int getHp() {
        return hp;
    }

    public void attack(Zealot zealot) {
        zealot.beAttacked(this.power);
        System.out.println(name + &quot; 이 &quot;+ zealot.getName() +&quot;을 공격합니다 &quot; );
    }

    public void attack(Zergling zergling) {
        zergling.beAttacked(this.power);
        System.out.println(name + &quot; 이 &quot; + zergling.getName() + &quot;을 공격합니다 &quot; );
    }

    public void beAttacked(int power) {
        if(this.hp &amp;lt;= 0 ) {
            System.out.println(name + &quot; 이(가) 이미 사망하였습니다.&quot;);
            // 실행에 제어권을 반납하고 싶으면 키워드 !! (돌아가)
            return;
        }
        this.hp -= power;
        System.out.println(name + &quot;이(가) 공격을 당합니다&quot;);
    }

    public void showInfo() {
        System.out.println(&quot;---------⭐상태창⭐----------&quot;);
        System.out.println(&quot;마린 이름 : &quot; + name);
        System.out.println(&quot;마린 공격력 : &quot; + power);
        System.out.println(&quot;마린 체력 : &quot; + hp);
    }


} // end of class&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-end=&quot;3559&quot; data-start=&quot;3549&quot; data-ke-size=&quot;size26&quot;&gt;✅ 추가 설명&lt;/h2&gt;
&lt;h3 data-end=&quot;3581&quot; data-start=&quot;3561&quot; data-ke-size=&quot;size23&quot;&gt;오버로딩 vs 오버라이딩 비교&lt;/h3&gt;
&lt;div&gt;
&lt;table style=&quot;border-collapse: collapse; width: 94.186%; height: 257px;&quot; border=&quot;1&quot; data-end=&quot;4215&quot; data-start=&quot;3583&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&lt;b&gt;항목&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&lt;b&gt;오버로딩 (Overloading)&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&lt;b&gt;오버라이딩 (Overriding)&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;3856&quot; data-start=&quot;3785&quot;&gt;
&lt;td style=&quot;text-align: center;&quot; data-col-size=&quot;sm&quot; data-end=&quot;3796&quot; data-start=&quot;3785&quot;&gt;&lt;b&gt;정의&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot; data-col-size=&quot;sm&quot; data-end=&quot;3827&quot; data-start=&quot;3796&quot;&gt;같은 클래스 내에서 메서드를 여러 개 정의&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot; data-end=&quot;3856&quot; data-start=&quot;3827&quot; data-col-size=&quot;sm&quot;&gt;부모 클래스의 메서드를 자식에서 재정의&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;3934&quot; data-start=&quot;3857&quot;&gt;
&lt;td style=&quot;text-align: center;&quot; data-col-size=&quot;sm&quot; data-end=&quot;3868&quot; data-start=&quot;3857&quot;&gt;&lt;b&gt;조건&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot; data-end=&quot;3902&quot; data-start=&quot;3868&quot; data-col-size=&quot;sm&quot;&gt;이름 같고 매개변수 다르면 가능&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot; data-end=&quot;3934&quot; data-start=&quot;3902&quot; data-col-size=&quot;sm&quot;&gt;시그니처(이름, 매개변수, 반환형) 모두 같아야 함&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;4023&quot; data-start=&quot;3935&quot;&gt;
&lt;td style=&quot;text-align: center;&quot; data-col-size=&quot;sm&quot; data-end=&quot;3946&quot; data-start=&quot;3935&quot;&gt;&lt;b&gt;시점&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot; data-col-size=&quot;sm&quot; data-end=&quot;3986&quot; data-start=&quot;3946&quot;&gt;컴파일 타임 결정&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot; data-col-size=&quot;sm&quot; data-end=&quot;4023&quot; data-start=&quot;3986&quot;&gt;런타임 시점에 동작 결정&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;4124&quot; data-start=&quot;4024&quot;&gt;
&lt;td style=&quot;text-align: center;&quot; data-col-size=&quot;sm&quot; data-end=&quot;4034&quot; data-start=&quot;4024&quot;&gt;&lt;b&gt;키워드&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot; data-end=&quot;4079&quot; data-start=&quot;4034&quot; data-col-size=&quot;sm&quot;&gt;없음&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot; data-end=&quot;4124&quot; data-start=&quot;4079&quot; data-col-size=&quot;sm&quot;&gt;@Override 사용&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;4215&quot; data-start=&quot;4125&quot;&gt;
&lt;td style=&quot;text-align: center;&quot; data-col-size=&quot;sm&quot; data-end=&quot;4134&quot; data-start=&quot;4125&quot;&gt;&lt;b&gt;예시 활용&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot; data-end=&quot;4178&quot; data-start=&quot;4134&quot; data-col-size=&quot;sm&quot;&gt;System.out.println(), 생성자&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot; data-end=&quot;4215&quot; data-start=&quot;4178&quot; data-col-size=&quot;sm&quot;&gt;상속 구조에서 다형성 활용&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-end=&quot;4232&quot; data-start=&quot;4222&quot; data-ke-size=&quot;size26&quot;&gt;  정리 표&lt;/h2&gt;
&lt;div&gt;
&lt;table style=&quot;border-collapse: collapse; width: 92.5581%; height: 264px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&lt;b&gt;내용 구분&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&lt;b&gt;설명&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&lt;b&gt;정의&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;같은 이름의 메서드를 매개변수만 다르게 정의하는 것&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&lt;b&gt;시그니처&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;이름 + 매개변수의 타입/개수/순서&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&lt;b&gt;반환형 포함 여부&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;포함되지 않음&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&lt;b&gt;대표 활용&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;계산기 기능, 전투 시스템, 생성자&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&lt;b&gt;장점&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;가독성 향상, 일관성 있는 이름 사용 가능&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-end=&quot;4668&quot; data-start=&quot;4655&quot; data-ke-size=&quot;size26&quot;&gt;  마무리하며&lt;/h2&gt;
&lt;p data-end=&quot;4786&quot; data-start=&quot;4669&quot; data-ke-size=&quot;size16&quot;&gt;메서드 오버로딩은 실무에서 자주 사용되는 기본이자 강력한 문법입니다.&lt;br /&gt;다양한 입력을 하나의 이름으로 처리함으로써 &lt;b&gt;코드의 일관성&lt;/b&gt;을 높이고&lt;br /&gt;&lt;b&gt;유지보수에 유리한 구조&lt;/b&gt;를 만드는데 큰 역할을 합니다.&lt;/p&gt;
&lt;p data-end=&quot;4876&quot; data-start=&quot;4788&quot; data-ke-size=&quot;size16&quot;&gt;다음 글에서는 이와 자주 비교되는 &lt;b&gt;메서드 오버라이딩&lt;/b&gt;과 함께,&lt;br /&gt;객체지향의 핵심 개념인 &lt;b&gt;다형성(Polymorphism)&lt;/b&gt; 까지 확장해 보겠습니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 style=&quot;color: #000000;&quot; data-end=&quot;507&quot; data-start=&quot;494&quot; data-ke-size=&quot;size26&quot;&gt; &lt;span&gt;&amp;nbsp;&lt;/span&gt;다음 글 예고 : 상속(Inheritance)&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자바의 객체지향 핵심 개념 중 하나인 '상속'은&lt;br /&gt;부모 클래스의 속성과 기능을 자식 클래스가 물려받아 재사용하는 구조입니다.&lt;br /&gt;다음 글에서는 extends 키워드를 중심으로 상속의 기본 문법과 예제를 함께 살펴보겠습니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-end=&quot;4946&quot; data-start=&quot;4931&quot; data-ke-size=&quot;size26&quot;&gt;  이전 글 보기&lt;/h2&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;배열과 배열 예제가 궁금하다면??&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://seohong.tistory.com/142&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;2025.05.02 - [Java] -   Array(배열)에 대한 이해&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;figure id=&quot;og_1746552387650&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;  Array(배열)에 대한 이해&quot; data-og-description=&quot;  시작하며이번 글에서는 자바의 기본 자료구조 중 가장 핵심인배열(Array) 에 대해 자세히 배워봅니다.지난 글에서는 static 키워드를 통해 클래스 수준의 공유 데이터를 다뤘다면,이번에는 다&quot; data-og-host=&quot;seohong.tistory.com&quot; data-og-source-url=&quot;https://seohong.tistory.com/142&quot; data-og-url=&quot;https://seohong.tistory.com/142&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/6PtSQ/hyYRkK06nA/Q2IbOZqzyNgZh0PsQ8nYE1/img.png?width=800&amp;amp;height=622&amp;amp;face=0_0_800_622,https://scrap.kakaocdn.net/dn/dfcD97/hyYMSbBeQj/5pOkDiatHxtk0RukMXjMh0/img.png?width=800&amp;amp;height=622&amp;amp;face=0_0_800_622,https://scrap.kakaocdn.net/dn/YWkvQ/hyYRkEhjO8/Oaj3IlRhZDTxMNIr6xQdlk/img.png?width=853&amp;amp;height=664&amp;amp;face=0_0_853_664&quot;&gt;&lt;a href=&quot;https://seohong.tistory.com/142&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://seohong.tistory.com/142&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/6PtSQ/hyYRkK06nA/Q2IbOZqzyNgZh0PsQ8nYE1/img.png?width=800&amp;amp;height=622&amp;amp;face=0_0_800_622,https://scrap.kakaocdn.net/dn/dfcD97/hyYMSbBeQj/5pOkDiatHxtk0RukMXjMh0/img.png?width=800&amp;amp;height=622&amp;amp;face=0_0_800_622,https://scrap.kakaocdn.net/dn/YWkvQ/hyYRkEhjO8/Oaj3IlRhZDTxMNIr6xQdlk/img.png?width=853&amp;amp;height=664&amp;amp;face=0_0_853_664');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;  Array(배열)에 대한 이해&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;  시작하며이번 글에서는 자바의 기본 자료구조 중 가장 핵심인배열(Array) 에 대해 자세히 배워봅니다.지난 글에서는 static 키워드를 통해 클래스 수준의 공유 데이터를 다뤘다면,이번에는 다&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;seohong.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://seohong.tistory.com/143&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;2025.05.03 - [Java] -   배열 복습하기 - 도서 관리 프로그램 (CRUD 실습)&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1746552396847&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;  배열 복습하기 - 도서 관리 프로그램 (CRUD 실습)&quot; data-og-description=&quot;✍️ 시작하며지난 시간에는 자바의 기본 자료구조 중 하나인 **배열(Array)**에 대해 배웠습니다.이번 글에서는 배열을 활용해 도서 데이터를 관리하는 간단한 콘솔 프로그램을 만들어 보겠습니&quot; data-og-host=&quot;seohong.tistory.com&quot; data-og-source-url=&quot;https://seohong.tistory.com/143&quot; data-og-url=&quot;https://seohong.tistory.com/143&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/zw2oy/hyYMZhtPLE/8mkpoaVhhCVKOTHKxsgoT1/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/fO5q6/hyYMdfQ6HY/d0GV6fuquD5pvmjhk5DmhK/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800&quot;&gt;&lt;a href=&quot;https://seohong.tistory.com/143&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://seohong.tistory.com/143&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/zw2oy/hyYMZhtPLE/8mkpoaVhhCVKOTHKxsgoT1/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/fO5q6/hyYMdfQ6HY/d0GV6fuquD5pvmjhk5DmhK/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;  배열 복습하기 - 도서 관리 프로그램 (CRUD 실습)&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;✍️ 시작하며지난 시간에는 자바의 기본 자료구조 중 하나인 **배열(Array)**에 대해 배웠습니다.이번 글에서는 배열을 활용해 도서 데이터를 관리하는 간단한 콘솔 프로그램을 만들어 보겠습니&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;seohong.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Java</category>
      <category>@Override</category>
      <category>overloading</category>
      <category>다형성</category>
      <category>런타임</category>
      <category>메서드</category>
      <category>메서드 오버로딩</category>
      <category>오버라이딩</category>
      <category>오버라이딩과 차이</category>
      <category>오버로딩</category>
      <category>유지보수</category>
      <author>공돌이 출신 개발자</author>
      <guid isPermaLink="true">https://seohong.tistory.com/144</guid>
      <comments>https://seohong.tistory.com/144#entry144comment</comments>
      <pubDate>Sun, 4 May 2025 23:51:29 +0900</pubDate>
    </item>
    <item>
      <title>  배열 복습하기 - 도서 관리 프로그램 (CRUD 실습)</title>
      <link>https://seohong.tistory.com/143</link>
      <description>&lt;h4 style=&quot;color: #000000;&quot; data-ke-size=&quot;size20&quot; data-start=&quot;98&quot; data-end=&quot;112&quot;&gt;✍️ 시작하며&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot; data-start=&quot;113&quot; data-end=&quot;284&quot;&gt;지난 시간에는 자바의 기본 자료구조 중 하나인 **배열(Array)**에 대해 배웠습니다.&lt;br /&gt;이번 글에서는 배열을 활용해&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;도서 데이터를 관리하는 간단한 콘솔 프로그램&lt;/b&gt;을 만들어 보겠습니다.&lt;br /&gt;이를 통해 프로그래밍의 가장 기본이 되는 개념 중 하나인&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;CRUD&lt;/b&gt;도 자연스럽게 복습할 수 있습니다.&lt;/p&gt;
&lt;h4 style=&quot;color: #000000;&quot; data-ke-size=&quot;size20&quot; data-start=&quot;286&quot; data-end=&quot;301&quot;&gt;✅ CRUD란?&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot; data-start=&quot;302&quot; data-end=&quot;336&quot;&gt;CRUD는 데이터 처리의 기본적인 네 가지 동작을 의미합니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot; data-start=&quot;338&quot; data-end=&quot;427&quot;&gt;
&lt;li data-start=&quot;338&quot; data-end=&quot;360&quot;&gt;&lt;b&gt;C: Create (생성)&lt;/b&gt;&lt;/li&gt;
&lt;li data-start=&quot;361&quot; data-end=&quot;381&quot;&gt;&lt;b&gt;R: Read (조회)&lt;/b&gt;&lt;/li&gt;
&lt;li data-start=&quot;382&quot; data-end=&quot;404&quot;&gt;&lt;b&gt;U: Update (수정)&lt;/b&gt;&lt;/li&gt;
&lt;li data-start=&quot;405&quot; data-end=&quot;427&quot;&gt;&lt;b&gt;D: Delete (삭제)&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot; data-start=&quot;429&quot; data-end=&quot;516&quot;&gt;이 개념은 웹, 앱, DB 등 모든 프로그래밍 영역에서 반복적으로 사용됩니다.&lt;br /&gt;이번 실습에서는 배열과 클래스를 활용해 이 동작들을 직접 구현해볼 거예요.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-style=&quot;style6&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot; data-start=&quot;422&quot; data-end=&quot;434&quot;&gt; 학습 목표&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot; data-start=&quot;532&quot; data-end=&quot;679&quot;&gt;
&lt;li data-start=&quot;532&quot; data-end=&quot;557&quot;&gt;배열을 이용한 도서 목록 관리 시스템 구현&lt;/li&gt;
&lt;li data-start=&quot;558&quot; data-end=&quot;596&quot;&gt;자바의 객체 배열과 null 체크를 통한&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;방어적 코드 작성&lt;/b&gt;&lt;/li&gt;
&lt;li data-start=&quot;597&quot; data-end=&quot;639&quot;&gt;while문 + switch 또는 if문을 이용한 메뉴 처리 흐름 익히기&lt;/li&gt;
&lt;li data-start=&quot;640&quot; data-end=&quot;679&quot;&gt;static 변수와 메서드를 이용한&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;데이터 관리의 흐름&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;이해&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-style=&quot;style6&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-ke-size=&quot;size23&quot; data-start=&quot;623&quot; data-end=&quot;650&quot;&gt;  1단계 - Book 클래스 만들기&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot; data-start=&quot;651&quot; data-end=&quot;682&quot;&gt;도서 정보를 담을 Book 클래스를 먼저 정의합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1746549220976&quot; class=&quot;arduino&quot; style=&quot;background-color: #f8f8f8; color: #383a42;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;java&quot;&gt;&lt;code&gt;package books;

public class Book {
    private String title;
    private String author;

    // 생성자
    public Book(String title, String author) {
        this.title = title;
        this.author = author;
    }

    // getter 메서드
    public String getTitle() {
        return title;
    }

    public String getAuthor() {
        return author;
    }

    // 도서 정보 출력
    public void showInfo() {
        System.out.println(&quot;&amp;gt;&amp;gt; 책 정보 &amp;lt;&amp;lt;&quot;);
        System.out.println(&quot;제목 : &quot; + title);
        System.out.println(&quot;저자 : &quot; + author);
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt; &lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;설명&lt;/b&gt;&lt;br /&gt;Book 클래스는 도서 정보를 표현하는 데이터 모델입니다.&lt;br /&gt;생성자에서 제목과 저자를 받아 저장하고, getter를 통해 외부에서 접근할 수 있도록 했습니다.&lt;br /&gt;showInfo()는 도서 정보를 깔끔하게 출력해주는 메서드입니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-style=&quot;style6&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot; data-end=&quot;1100&quot; data-start=&quot;1076&quot;&gt;  2단계 - 메인 클래스 설계&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot; data-end=&quot;1151&quot; data-start=&quot;1101&quot;&gt;MyBookStore 클래스를 만들고, 콘솔 메뉴를 통해 사용자의 입력을 받아 기능을 실행하도록 구성합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1746549220978&quot; class=&quot;reasonml&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Scanner scanner = new Scanner(System.in);
Book[] books = new Book[100];
boolean flag = true;

while (flag) {
    System.out.println(&quot;1.저장 2.전체조회 3.선택조회 4.전체삭제 5.종료&quot;);
    String selectedNumber = scanner.nextLine();

    if (selectedNumber.equals(&quot;1&quot;)) {
        save(scanner, books);
    } else if (selectedNumber.equals(&quot;2&quot;)) {
        readAll(books);
    } else if (selectedNumber.equals(&quot;3&quot;)) {
        readByTitle(scanner, books);
    } else if (selectedNumber.equals(&quot;4&quot;)) {
        deleteAll(books);
    } else if (selectedNumber.equals(&quot;5&quot;)) {
        flag = false;
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;✅ 메뉴를 선택하면 해당 기능이 호출되는 구조입니다.&lt;br /&gt;사용자가 &quot;1&quot;을 입력하면 save()가 실행되고, &quot;5&quot;를 입력하면 프로그램이 종료됩니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-ke-size=&quot;size23&quot; data-start=&quot;1783&quot; data-end=&quot;1806&quot;&gt;  3단계 - CRUD 기능 구현&lt;/h3&gt;
&lt;p style=&quot;color: #000000;&quot; data-ke-size=&quot;size18&quot; data-start=&quot;1808&quot; data-end=&quot;1833&quot;&gt;  Create - 도서 정보 저장&lt;/p&gt;
&lt;pre id=&quot;code_1746549220982&quot; class=&quot;reasonml&quot; style=&quot;background-color: #f8f8f8; color: #383a42;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;java&quot;&gt;&lt;code&gt;public static void save(Scanner scanner, Book[] books) {
    System.out.println(&quot;책 제목을 입력하세요:&quot;);
    String title = scanner.nextLine();
    System.out.println(&quot;저자를 입력하세요:&quot;);
    String author = scanner.nextLine();

    books[currentBookIndex] = new Book(title, author);
    currentBookIndex++;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;✅ 사용자의 입력을 받아 Book 객체를 만들고 배열에 저장합니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-style=&quot;style6&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;  Read - 전체 도서 목록 조회&lt;/p&gt;
&lt;pre id=&quot;code_1746549220983&quot; class=&quot;cs&quot; style=&quot;background-color: #f8f8f8; color: #383a42;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;java&quot;&gt;&lt;code&gt;public static void readAll(Book[] books) {
    for (int i = 0; i &amp;lt; books.length; i++) {
        if (books[i] != null) {
            System.out.println(books[i].getTitle() + &quot;, &quot; + books[i].getAuthor());
        }
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;✅ 배열을 순회하며 등록된 도서만 출력합니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-style=&quot;style7&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;  Read - 도서 제목으로 검색&lt;/p&gt;
&lt;pre id=&quot;code_1746549220983&quot; class=&quot;pgsql&quot; style=&quot;background-color: #f8f8f8; color: #383a42;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;java&quot;&gt;&lt;code&gt;public static void readByTitle(Scanner scanner, Book[] books) {
    System.out.println(&quot;책 제목 입력:&quot;);
    String title = scanner.nextLine().trim();
    boolean found = false;

    for (Book book : books) {
        if (book != null &amp;amp;&amp;amp; book.getTitle().equals(title)) {
            System.out.println(book.getTitle() + &quot;, &quot; + book.getAuthor());
            found = true;
            break;
        }
    }

    if (!found) System.out.println(&quot;해당 책은 존재하지 않습니다.&quot;);
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;✅ 특정 제목을 가진 도서를 배열에서 검색합니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-style=&quot;style6&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt; ️ Delete - 전체 삭제&lt;/p&gt;
&lt;pre id=&quot;code_1746549220984&quot; class=&quot;aspectj&quot; style=&quot;background-color: #f8f8f8; color: #383a42;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;java&quot;&gt;&lt;code&gt;public static void deleteAll(Book[] books) {
    for (int i = 0; i &amp;lt; books.length; i++) {
        books[i] = null;
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;✅ 배열의 모든 요소를 null로 초기화하여 도서를&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;논리적으로 삭제&lt;/b&gt;합니다.&lt;br /&gt;저장된 도서 정보는 사라지며, readAll() 실행 시 출력되지 않습니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-style=&quot;style6&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;h2 style=&quot;color: #000000;&quot; data-ke-size=&quot;size26&quot; data-start=&quot;75&quot; data-end=&quot;108&quot;&gt;  4단계 - 참조형 배열 활용 (BookTest1)&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot; data-start=&quot;110&quot; data-end=&quot;211&quot;&gt;배열은 단순한 숫자만 저장하는 것이 아니라, 우리가 만든 클래스의 객체도 저장할 수 있습니다. Book 객체를 배열에 저장하고 활용하는 예제를 보며 배열의 특징을 정리해 봅시다.&lt;/p&gt;
&lt;pre id=&quot;code_1746549220984&quot; class=&quot;reasonml&quot; style=&quot;background-color: #f8f8f8; color: #383a42;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;java&quot;&gt;&lt;code&gt;public class BookTest1 {
    public static void main(String[] args) {
        // 배열 안에 요소는 기본형 또는 참조형일 수 있다.
        Book[] books = new Book[10]; // 길이는 10 (0~9)

        // 객체 저장
        books[0] = new Book(&quot;개발자가되고싶습니다.&quot;, &quot;앨런&quot;);
        books[1] = new Book(&quot;무궁화꽃이피었습니다.&quot;, &quot;김진명&quot;);
        books[2] = new Book(&quot;흐르는강물처럼.&quot;, &quot;파울로코엘료&quot;);
        books[3] = new Book(&quot;리딩으로리드하라.&quot;, &quot;이지성&quot;);
        books[4] = new Book(&quot;사피엔스.&quot;, &quot;유발하라리&quot;);
        books[9] = new Book(&quot;홍길동전.&quot;, &quot;허균&quot;);

        // 단일 요소 조회
        String title9 = books[9].getTitle();
        String author9 = books[9].getAuthor();

        System.out.println(&quot;title9: &quot; + title9);
        System.out.println(&quot;author9: &quot; + author9);

        // 반복문을 이용한 전체 조회 (null 방어)
        for (int i = 0; i &amp;lt; books.length; i++) {
            if (books[i] != null) {
                System.out.println(books[i].getTitle());
            }
        }
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;✅&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;참조형 배열&lt;/b&gt;은 우리가 만든 클래스의 인스턴스를 저장할 수 있습니다.&lt;br /&gt;✅ 배열 전체 길이와 실제로 저장된 요소 수는 다를 수 있으므로&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;null 체크는 필수&lt;/b&gt;입니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-style=&quot;style6&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;h2 style=&quot;color: #000000;&quot; data-ke-size=&quot;size26&quot; data-start=&quot;1231&quot; data-end=&quot;1250&quot;&gt;  배열의 특징과 한계 정리&lt;/h2&gt;
&lt;div&gt;
&lt;table style=&quot;border-collapse: collapse; width: 86.3953%; height: 227px;&quot; border=&quot;1&quot; data-ke-style=&quot;style12&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&lt;b&gt;항목&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&lt;b&gt;설명&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&lt;b&gt;고정 길이&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;한 번 생성된 배열의 길이는 변경할 수 없음&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&lt;b&gt;순차 저장&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;인덱스를 통해 빠르게 접근 가능&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&lt;b&gt;null 처리&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;비어있는 인덱스는 null이므로 방어적 코드 필요&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&lt;b&gt;참조형 저장&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;객체를 배열에 저장하여 구조적인 데이터 관리 가능&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-style=&quot;style6&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;h2 style=&quot;color: #000000;&quot; data-ke-size=&quot;size26&quot; data-start=&quot;68&quot; data-end=&quot;79&quot;&gt;  마무리하며&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot; data-start=&quot;81&quot; data-end=&quot;208&quot;&gt;이번 실습을 통해 자바 배열과 객체를 활용하여&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;도서 관리 프로그램&lt;/b&gt;을 직접 구현해보았습니다.&lt;br /&gt;배열은 단순한 숫자 저장을 넘어, 우리가 만든 객체 데이터를 체계적으로 관리할 수 있는 유용한 자료구조임을 확인할 수 있었죠.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot; data-start=&quot;210&quot; data-end=&quot;280&quot;&gt;특히, 이번 프로젝트에서는 프로그램의 핵심 개념인&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;CRUD&lt;/b&gt;를 실제 코드로 체험하며 그 동작 방식을 익힐 수 있었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot; data-start=&quot;282&quot; data-end=&quot;290&quot;&gt;다시 정리하면,&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot; data-start=&quot;292&quot; data-end=&quot;441&quot;&gt;
&lt;li data-start=&quot;292&quot; data-end=&quot;321&quot;&gt;&lt;b&gt;C (Create)&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;: 도서를 배열에 추가&lt;/li&gt;
&lt;li data-start=&quot;322&quot; data-end=&quot;361&quot;&gt;&lt;b&gt;R (Read)&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;: 저장된 도서를 전체 또는 선택적으로 조회&lt;/li&gt;
&lt;li data-start=&quot;362&quot; data-end=&quot;401&quot;&gt;&lt;b&gt;U (Update)&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;: (선택적으로) 특정 도서 정보를 수정&lt;/li&gt;
&lt;li data-start=&quot;402&quot; data-end=&quot;441&quot;&gt;&lt;b&gt;D (Delete)&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;: 배열 데이터를 null 처리하여 삭제&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot; data-start=&quot;443&quot; data-end=&quot;487&quot;&gt; &lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;CRUD는 프로그래밍의 기본 중의 기본입니다. 반드시 기억해두세요!&lt;/b&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-style=&quot;style6&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;h2 style=&quot;color: #000000;&quot; data-ke-size=&quot;size26&quot; data-start=&quot;494&quot; data-end=&quot;507&quot;&gt;  다음 글 예고 : 메서드 오버로딩&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot; data-start=&quot;509&quot; data-end=&quot;622&quot;&gt;다음 글에서는 자바의 중요한 문법 개념인&lt;br /&gt;&lt;b&gt;메서드 오버로딩(Method Overloading)&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;에 대해 다룹니다.&lt;br /&gt;같은 이름의 메서드를 다양한 입력 방식으로 처리하는 방법을 함께 배워보세요!&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-style=&quot;style6&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;h2 style=&quot;color: #000000;&quot; data-ke-size=&quot;size26&quot; data-start=&quot;629&quot; data-end=&quot;645&quot;&gt;  이전 글 다시 보기&lt;/h2&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;배열(Array)에 대해서 궁금하다면??&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://seohong.tistory.com/142&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;2025.05.02 - [Java] -   Array(배열)에 대한 이해&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;figure id=&quot;og_1746549886730&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;  Array(배열)에 대한 이해&quot; data-og-description=&quot;  시작하며이번 글에서는 자바의 기본 자료구조 중 가장 핵심인배열(Array) 에 대해 자세히 배워봅니다.지난 글에서는 static 키워드를 통해 클래스 수준의 공유 데이터를 다뤘다면,이번에는 다&quot; data-og-host=&quot;seohong.tistory.com&quot; data-og-source-url=&quot;https://seohong.tistory.com/142&quot; data-og-url=&quot;https://seohong.tistory.com/142&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/6PtSQ/hyYRkK06nA/Q2IbOZqzyNgZh0PsQ8nYE1/img.png?width=800&amp;amp;height=622&amp;amp;face=0_0_800_622,https://scrap.kakaocdn.net/dn/dfcD97/hyYMSbBeQj/5pOkDiatHxtk0RukMXjMh0/img.png?width=800&amp;amp;height=622&amp;amp;face=0_0_800_622,https://scrap.kakaocdn.net/dn/YWkvQ/hyYRkEhjO8/Oaj3IlRhZDTxMNIr6xQdlk/img.png?width=853&amp;amp;height=664&amp;amp;face=0_0_853_664&quot;&gt;&lt;a href=&quot;https://seohong.tistory.com/142&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://seohong.tistory.com/142&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/6PtSQ/hyYRkK06nA/Q2IbOZqzyNgZh0PsQ8nYE1/img.png?width=800&amp;amp;height=622&amp;amp;face=0_0_800_622,https://scrap.kakaocdn.net/dn/dfcD97/hyYMSbBeQj/5pOkDiatHxtk0RukMXjMh0/img.png?width=800&amp;amp;height=622&amp;amp;face=0_0_800_622,https://scrap.kakaocdn.net/dn/YWkvQ/hyYRkEhjO8/Oaj3IlRhZDTxMNIr6xQdlk/img.png?width=853&amp;amp;height=664&amp;amp;face=0_0_853_664');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;  Array(배열)에 대한 이해&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;  시작하며이번 글에서는 자바의 기본 자료구조 중 가장 핵심인배열(Array) 에 대해 자세히 배워봅니다.지난 글에서는 static 키워드를 통해 클래스 수준의 공유 데이터를 다뤘다면,이번에는 다&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;seohong.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Java</category>
      <category>array</category>
      <category>crud</category>
      <category>crud란?</category>
      <category>Java</category>
      <category>JAVA 기초</category>
      <category>데이터 처리</category>
      <category>도서 관리 프로그램</category>
      <category>배열</category>
      <category>자료구조</category>
      <category>자바 배열</category>
      <author>공돌이 출신 개발자</author>
      <guid isPermaLink="true">https://seohong.tistory.com/143</guid>
      <comments>https://seohong.tistory.com/143#entry143comment</comments>
      <pubDate>Sat, 3 May 2025 21:52:47 +0900</pubDate>
    </item>
    <item>
      <title>  Array(배열)에 대한 이해</title>
      <link>https://seohong.tistory.com/142</link>
      <description>&lt;h3 data-end=&quot;136&quot; data-start=&quot;125&quot; data-ke-size=&quot;size23&quot;&gt;  시작하며&lt;/h3&gt;
&lt;p data-end=&quot;198&quot; data-start=&quot;138&quot; data-ke-size=&quot;size16&quot;&gt;이번 글에서는 자바의 기본 자료구조 중 가장 핵심인&lt;br /&gt;&lt;b&gt;배열(Array)&lt;/b&gt; 에 대해 자세히 배워봅니다.&lt;/p&gt;
&lt;p data-end=&quot;317&quot; data-start=&quot;200&quot; data-ke-size=&quot;size16&quot;&gt;지난 글에서는 static 키워드를 통해 클래스 수준의 공유 데이터를 다뤘다면,&lt;br /&gt;이번에는 다수의 데이터를 &lt;b&gt;효율적으로 저장하고 관리&lt;/b&gt;하기 위한&lt;br /&gt;배열의 개념과 사용 방법을 실습 중심으로 정리합니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 data-end=&quot;370&quot; data-start=&quot;358&quot; data-ke-size=&quot;size23&quot;&gt;  학습 목표&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;474&quot; data-start=&quot;372&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;367&quot; data-start=&quot;338&quot;&gt;배열의 개념과 선언, 초기화 방법을 이해한다.&lt;/li&gt;
&lt;li data-end=&quot;403&quot; data-start=&quot;368&quot;&gt;반복문과 함께 배열을 효율적으로 사용하는 방법을 익힌다.&lt;/li&gt;
&lt;li data-end=&quot;463&quot; data-start=&quot;404&quot;&gt;문자(char), 문자열(String), 정수형(int), 실수형(double) 배열을 활용해본다.&lt;/li&gt;
&lt;li data-end=&quot;488&quot; data-start=&quot;464&quot;&gt;배열 인덱스와 길이 차이를 이해한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-end=&quot;493&quot; data-start=&quot;481&quot; data-ke-size=&quot;size26&quot;&gt;1️⃣ 배열이란?&lt;/h2&gt;
&lt;blockquote data-end=&quot;540&quot; data-start=&quot;501&quot; data-ke-style=&quot;style1&quot;&gt;
&lt;p data-end=&quot;540&quot; data-start=&quot;503&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;같은 타입의 데이터를 연속된 메모리 공간에 저장&lt;/b&gt;하는 자료구조입니다.&lt;br /&gt;자바에서 배열은 객체로 간주되며, &lt;b&gt;크기가 고정&lt;/b&gt;되어 있고 인덱스를 통해 요소에 접근합니다.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;pre id=&quot;code_1746270053185&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;int[] numbers = new int[3];  // 정수형 배열 선언 및 공간 3칸 확보&lt;/code&gt;&lt;/pre&gt;
&lt;table style=&quot;border-collapse: collapse; width: 83.1395%; height: 215px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&lt;b&gt;항목&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&lt;b&gt;설명&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&lt;b&gt;배열 선언 문법&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;타입[] 변수명 또는 타입 변수명[] 형태 모두 가능&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&lt;b&gt;크기 지정&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;new 키워드와 함께 &lt;b&gt;크기를 지정&lt;/b&gt;해야 메모리에 공간이 할당됨&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&lt;b&gt;길이 확인&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;.length 속성을 통해 배열의 총 길이를 확인할 수 있음&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&lt;b&gt;인덱스 범위&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;인덱스는 &lt;b&gt;항상 0부터 시작&lt;/b&gt;하며, 마지막 인덱스는 length - 1이 됨&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;853&quot; data-origin-height=&quot;664&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/q8mHZ/btsNKxCqkpL/CqDvEYOMzOl3CyzEGJYTtK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/q8mHZ/btsNKxCqkpL/CqDvEYOMzOl3CyzEGJYTtK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/q8mHZ/btsNKxCqkpL/CqDvEYOMzOl3CyzEGJYTtK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fq8mHZ%2FbtsNKxCqkpL%2FCqDvEYOMzOl3CyzEGJYTtK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;712&quot; height=&quot;554&quot; data-origin-width=&quot;853&quot; data-origin-height=&quot;664&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-end=&quot;977&quot; data-start=&quot;953&quot; data-ke-size=&quot;size26&quot;&gt;2️⃣ 배열 선언과 다양한 초기화 방식&lt;/h2&gt;
&lt;h3 data-end=&quot;998&quot; data-start=&quot;979&quot; data-ke-size=&quot;size23&quot;&gt;  기본 선언 후 값 대입&lt;/h3&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;pre id=&quot;code_1746270213960&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;int[] numbers = new int[3];  // 3개의 공간만 확보되고 값은 초기화되지 않음
numbers[0] = 10;
numbers[1] = 20;
numbers[2] = 30;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3 data-end=&quot;1138&quot; data-start=&quot;1120&quot; data-ke-size=&quot;size23&quot;&gt;  선언과 동시에 초기화&lt;/h3&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;pre id=&quot;code_1746270224748&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;int[] grades = new int[] {1, 2, 3};
int[] grades2 = {1, 2, 3, 4, 5, 6}; // 더 축약된 표현&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;배열 초기화는 이렇게 다양한 형태로 가능합니다. 다만 &lt;b&gt;new int[] {} 방식은 선언과 동시에만 사용 가능&lt;/b&gt;하다는 점에 주의!&lt;/blockquote&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-end=&quot;1334&quot; data-start=&quot;1318&quot; data-ke-size=&quot;size26&quot;&gt;3️⃣ 실수형 배열 연습&lt;/h2&gt;
&lt;p data-end=&quot;1378&quot; data-start=&quot;1336&quot; data-ke-size=&quot;size18&quot;&gt;✅ 문제: 5개의 double 값을 담는 배열을 만들고 초기화하시오.&lt;/p&gt;
&lt;pre id=&quot;code_1746270283270&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;double[] doubles = new double[5];
doubles[0] = 1.0;
doubles[1] = 1.1;
doubles[2] = 1.2;
doubles[3] = 1.3;
doubles[4] = 1.4;&lt;/code&gt;&lt;/pre&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;p data-end=&quot;1526&quot; data-start=&quot;1519&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;포인트&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1613&quot; data-start=&quot;1531&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1560&quot; data-start=&quot;1531&quot;&gt;배열의 길이는 5지만, 마지막 인덱스는 4입니다.&lt;/li&gt;
&lt;li data-end=&quot;1613&quot; data-start=&quot;1563&quot;&gt;배열.length는 전체 길이이며, 유효한 인덱스 범위는 0 ~ length-1&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-end=&quot;1628&quot; data-start=&quot;1615&quot; data-ke-size=&quot;size23&quot;&gt;  반복문 출력&lt;/h3&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&lt;span data-state=&quot;closed&quot;&gt;&lt;span data-state=&quot;closed&quot;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;pre id=&quot;code_1746270313871&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;for (int i = 0; i &amp;lt; doubles.length; i++) {
    System.out.println(doubles[i]);
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-end=&quot;1754&quot; data-start=&quot;1728&quot; data-ke-size=&quot;size26&quot;&gt;4️⃣ String 배열과 출력 반복문&lt;/h2&gt;
&lt;pre id=&quot;code_1746265367001&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;String[] stringBox = new String[3];
stringBox[0] = &quot;가&quot;;
stringBox[1] = &quot;나&quot;;
stringBox[2] = &quot;다&quot;;

System.out.println(stringBox.length); // 3

for (int i = 0; i &amp;lt; stringBox.length; i++) {
    System.out.println(stringBox[i]);
}&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote data-end=&quot;2053&quot; data-start=&quot;1995&quot; data-ke-style=&quot;style1&quot;&gt;
&lt;p data-end=&quot;2053&quot; data-start=&quot;1997&quot; data-ke-size=&quot;size16&quot;&gt;문자열도 배열로 저장 가능하며, null 값이 들어가지 않도록 방어적 코드가 필요할 수 있습니다.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-end=&quot;2085&quot; data-start=&quot;2060&quot; data-ke-size=&quot;size26&quot;&gt;5️⃣ 문자(char) 배열과 아스키코드&lt;/h2&gt;
&lt;p data-end=&quot;2112&quot; data-start=&quot;2087&quot; data-ke-size=&quot;size18&quot;&gt;✅ 문자 저장 및 ASCII 변환 확인&lt;/p&gt;
&lt;pre id=&quot;code_1746270356831&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;char[] alphabet = new char[26];
alphabet[0] = 'A';  // 정수값 65
alphabet[1] = 'B';

System.out.println((int)alphabet[0]); // 출력: 65
System.out.println((int)alphabet[1]); // 출력: 66&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-end=&quot;2320&quot; data-start=&quot;2304&quot; data-ke-size=&quot;size23&quot;&gt;✅ 인코딩 vs 디코딩&lt;/h3&gt;
&lt;div&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-end=&quot;2440&quot; data-start=&quot;2322&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&lt;b&gt;개념&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&lt;b&gt;설명&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&lt;b&gt;예시&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;2400&quot; data-start=&quot;2362&quot;&gt;
&lt;td style=&quot;text-align: center;&quot; data-col-size=&quot;sm&quot; data-end=&quot;2368&quot; data-start=&quot;2362&quot;&gt;&lt;b&gt;인코딩&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot; data-end=&quot;2381&quot; data-start=&quot;2368&quot; data-col-size=&quot;sm&quot;&gt;문자를 숫자로 변환&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot; data-end=&quot;2400&quot; data-start=&quot;2381&quot; data-col-size=&quot;sm&quot;&gt;(int)'A' &amp;rarr; 65&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;2440&quot; data-start=&quot;2401&quot;&gt;
&lt;td style=&quot;text-align: center;&quot; data-col-size=&quot;sm&quot; data-end=&quot;2407&quot; data-start=&quot;2401&quot;&gt;&lt;b&gt;디코딩&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot; data-end=&quot;2420&quot; data-start=&quot;2407&quot; data-col-size=&quot;sm&quot;&gt;숫자를 문자로 변환&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot; data-end=&quot;2440&quot; data-start=&quot;2420&quot; data-col-size=&quot;sm&quot;&gt;(char)66 &amp;rarr; 'B'&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 data-end=&quot;2469&quot; data-start=&quot;2447&quot; data-ke-size=&quot;size23&quot;&gt;  알파벳 a ~ z 반복 출력&lt;/h3&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;pre id=&quot;code_1746270423893&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;for(int i = 0; i &amp;lt; alphabet.length; i++) {
    alphabet[i] = (char)('a' + i);  // 97부터 시작
}

for (int i = 0; i &amp;lt; alphabet.length; i++) {
    System.out.print(alphabet[i] + &quot; &quot;);
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-end=&quot;2693&quot; data-start=&quot;2668&quot; data-ke-size=&quot;size26&quot;&gt;6️⃣ 정수 배열 + 랜덤 숫자 + 정렬&lt;/h2&gt;
&lt;pre id=&quot;code_1746275989208&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Random random = new Random();
int[] intBoxes = new int[6];

for (int i = 0; i &amp;lt; intBoxes.length; i++) {
    intBoxes[i] = random.nextInt(45) + 1;  // 1 ~ 45 사이의 수
}&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-end=&quot;2887&quot; data-start=&quot;2873&quot; data-ke-size=&quot;size23&quot;&gt;  정렬 후 출력&lt;/h3&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;pre id=&quot;code_1746276016284&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Arrays.sort(intBoxes); // 오름차순 정렬

for (int i = 0; i &amp;lt; intBoxes.length; i++) {
    System.out.printf(intBoxes[i] + &quot;\t&quot;);
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;blockquote data-end=&quot;3090&quot; data-start=&quot;3025&quot; data-ke-style=&quot;style1&quot;&gt;
&lt;p data-end=&quot;3090&quot; data-start=&quot;3027&quot; data-ke-size=&quot;size16&quot;&gt;java.util.Arrays.sort()는 배열 정렬을 위한 유용한 메서드이며, 다양한 자료형에도 적용 가능&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-end=&quot;3122&quot; data-start=&quot;3097&quot; data-ke-size=&quot;size26&quot;&gt;7️⃣ 문자열 배열 + 랜덤 인덱스 출력&lt;/h2&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;pre id=&quot;code_1746276202068&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;String[] fruits = {&quot;Apple&quot;, &quot;Banana&quot;, &quot;Orange&quot;, &quot;Mango&quot;};
Random random = new Random();

int choice = random.nextInt(4); // 0~3
System.out.println(&quot;오늘의 과일은 : &quot; + fruits[choice]);&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;blockquote data-end=&quot;3384&quot; data-start=&quot;3316&quot; data-ke-style=&quot;style1&quot;&gt;
&lt;p data-end=&quot;3384&quot; data-start=&quot;3318&quot; data-ke-size=&quot;size16&quot;&gt;랜덤 인덱스를 통해 배열에서 무작위 값을 선택하는 실습으로, 배열과 Random 클래스를 함께 연습할 수 있습니다.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-start=&quot;2304&quot; data-end=&quot;2320&quot; data-ke-size=&quot;size18&quot;&gt;✅ &lt;span style=&quot;color: #000000; font-size: 1.44em; letter-spacing: -1px;&quot;&gt;정리&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 85.814%; height: 257px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&lt;b&gt;구분&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&lt;b&gt;설명&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&lt;b&gt;배열 선언&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;타입[] 변수명 = new 타입[크기];&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&lt;b&gt;초기화 방법&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;선언 후 개별 할당 또는 {값, 값, ...} 축약&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&lt;b&gt;인덱스 시작&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;항상 0부터 시작, 끝은 length - 1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&lt;b&gt;반복문 사용&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;for문을 통한 순회가 일반적&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&lt;b&gt;기타&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;.length, Arrays.sort(), Random 클래스 등과 함께 자주 활용&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-end=&quot;2675&quot; data-start=&quot;2662&quot; data-ke-size=&quot;size26&quot;&gt;⏭️ 다음 글 예고 :&lt;span&gt; 배열 복습(도서 관리 프로그램)&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음 글에서는 지금 배운 배열 개념을 활용하여&lt;br /&gt;&lt;b&gt;도서 관리 프로그램&lt;/b&gt;을 직접 만들어보며 배열과 반복문의 실전 감각을 키워볼 예정입니다.&lt;br /&gt;CRUD(Create, Read, Update, Delete) 패턴을 배열로 어떻게 구현하는지 함께 학습해봅시다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot; data-start=&quot;4146&quot; data-end=&quot;4161&quot;&gt;  이전 글 바로가기&lt;/h2&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;static 키워드에 대해서 궁금하다면??&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://seohong.tistory.com/141&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;2025.05.01 - [Java] -   static 키워드에 대한 이해&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;figure id=&quot;og_1746516028159&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;  static 키워드에 대한 이해&quot; data-og-description=&quot;  시작하며지금까지 우리는 객체 지향 프로그래밍에서 클래스와 인스턴스를 중심으로 학습을 진행해왔습니다.하지만 어떤 경우에는 객체마다 값이 달라질 필요 없이, 모든 객체가 공유하는 &quot; data-og-host=&quot;seohong.tistory.com&quot; data-og-source-url=&quot;https://seohong.tistory.com/141&quot; data-og-url=&quot;https://seohong.tistory.com/141&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/fMXBD/hyYPiUsbUJ/zutKckOIcdISZ8Hl7hQyU0/img.png?width=800&amp;amp;height=774&amp;amp;face=0_0_800_774,https://scrap.kakaocdn.net/dn/bH7yCa/hyYM3RpPSE/4LKRDtsqv8l5ym7GCVyiP1/img.png?width=800&amp;amp;height=774&amp;amp;face=0_0_800_774,https://scrap.kakaocdn.net/dn/GTOS2/hyYMeFYh5g/VNoUK7wn6W78icuHbK6po1/img.png?width=1091&amp;amp;height=758&amp;amp;face=0_0_1091_758&quot;&gt;&lt;a href=&quot;https://seohong.tistory.com/141&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://seohong.tistory.com/141&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/fMXBD/hyYPiUsbUJ/zutKckOIcdISZ8Hl7hQyU0/img.png?width=800&amp;amp;height=774&amp;amp;face=0_0_800_774,https://scrap.kakaocdn.net/dn/bH7yCa/hyYM3RpPSE/4LKRDtsqv8l5ym7GCVyiP1/img.png?width=800&amp;amp;height=774&amp;amp;face=0_0_800_774,https://scrap.kakaocdn.net/dn/GTOS2/hyYMeFYh5g/VNoUK7wn6W78icuHbK6po1/img.png?width=1091&amp;amp;height=758&amp;amp;face=0_0_1091_758');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;  static 키워드에 대한 이해&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;  시작하며지금까지 우리는 객체 지향 프로그래밍에서 클래스와 인스턴스를 중심으로 학습을 진행해왔습니다.하지만 어떤 경우에는 객체마다 값이 달라질 필요 없이, 모든 객체가 공유하는&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;seohong.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Java</category>
      <category>array</category>
      <category>Java</category>
      <category>문자 배열</category>
      <category>문자열</category>
      <category>반복문</category>
      <category>배열</category>
      <category>배열 초기화</category>
      <category>배열이란?</category>
      <category>실수형</category>
      <category>정수형</category>
      <author>공돌이 출신 개발자</author>
      <guid isPermaLink="true">https://seohong.tistory.com/142</guid>
      <comments>https://seohong.tistory.com/142#entry142comment</comments>
      <pubDate>Fri, 2 May 2025 16:41:31 +0900</pubDate>
    </item>
    <item>
      <title>  static 키워드에 대한 이해</title>
      <link>https://seohong.tistory.com/141</link>
      <description>&lt;h3 data-end=&quot;180&quot; data-start=&quot;169&quot; data-ke-size=&quot;size23&quot;&gt;  시작하며&lt;/h3&gt;
&lt;p data-end=&quot;299&quot; data-start=&quot;182&quot; data-ke-size=&quot;size16&quot;&gt;지금까지 우리는 객체 지향 프로그래밍에서 클래스와 인스턴스를 중심으로 학습을 진행해왔습니다.&lt;br /&gt;하지만 어떤 경우에는 객체마다 값이 달라질 필요 없이, &lt;b&gt;모든 객체가 공유하는 값&lt;/b&gt;이 필요한 상황도 있습니다.&lt;/p&gt;
&lt;p data-end=&quot;380&quot; data-start=&quot;301&quot; data-ke-size=&quot;size16&quot;&gt;이번 글에서는 그런 역할을 수행하는 &lt;b&gt;static 키워드&lt;/b&gt;에 대해 알아보고,&lt;br /&gt;어디에 쓰이고 왜 중요한지 예제를 통해 배워보겠습니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 data-end=&quot;399&quot; data-start=&quot;387&quot; data-ke-size=&quot;size23&quot;&gt;  학습 목표&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;531&quot; data-start=&quot;401&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;429&quot; data-start=&quot;401&quot;&gt;static 키워드의 의미와 역할을 이해한다&lt;/li&gt;
&lt;li data-end=&quot;464&quot; data-start=&quot;430&quot;&gt;static 변수와 static 메서드의 차이를 배운다&lt;/li&gt;
&lt;li data-end=&quot;500&quot; data-start=&quot;465&quot;&gt;static이 메모리에서 어떻게 관리되는지 개념을 익힌다&lt;/li&gt;
&lt;li data-end=&quot;531&quot; data-start=&quot;501&quot;&gt;실제 예제를 통해 클래스 변수의 사용법을 익힌다&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-end=&quot;554&quot; data-start=&quot;538&quot; data-ke-size=&quot;size26&quot;&gt;1️⃣ static이란?&lt;/h2&gt;
&lt;p data-end=&quot;633&quot; data-start=&quot;556&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;static&lt;/b&gt; 키워드는 &quot;고정된&quot;이라는 뜻을 가지고 있으며,&lt;br /&gt;자바에서는 **클래스에 고정된 멤버(변수나 메서드)**를 의미합니다.&lt;/p&gt;
&lt;h3 data-end=&quot;659&quot; data-start=&quot;635&quot; data-ke-size=&quot;size23&quot;&gt;✅ static 변수 = 클래스 변수&lt;/h3&gt;
&lt;table style=&quot;border-collapse: collapse; width: 75.814%; height: 210px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&lt;b&gt;특징&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&lt;b&gt;설명&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&lt;b&gt;소속&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;클래스에 소속됨 (객체가 아닌 클래스에)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&lt;b&gt;공유 여부&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;생성된 모든 객체가 &lt;b&gt;같은 static 변수 하나를 공유&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&lt;b&gt;접근 방법&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;객체 없이도 클래스이름.변수명으로 바로 접근 가능&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&lt;b&gt;메모리 위치&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;**Method Area(Class Area)**에 저장됨&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1255&quot; data-origin-height=&quot;1215&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cnjsSV/btsNLa7OMIF/Bq43zlrq7Yj6N2xrtlAmGK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cnjsSV/btsNLa7OMIF/Bq43zlrq7Yj6N2xrtlAmGK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cnjsSV/btsNLa7OMIF/Bq43zlrq7Yj6N2xrtlAmGK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcnjsSV%2FbtsNLa7OMIF%2FBq43zlrq7Yj6N2xrtlAmGK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;675&quot; height=&quot;653&quot; data-origin-width=&quot;1255&quot; data-origin-height=&quot;1215&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-end=&quot;1168&quot; data-start=&quot;1147&quot; data-ke-size=&quot;size26&quot;&gt;2️⃣ static이 필요한 상황&lt;/h2&gt;
&lt;blockquote data-end=&quot;1207&quot; data-start=&quot;1170&quot; data-ke-style=&quot;style1&quot;&gt;
&lt;p data-end=&quot;1207&quot; data-start=&quot;1172&quot; data-ke-size=&quot;size16&quot;&gt;✔️ 여러 객체가 하나의 기준 값을 공유해야 할 때 사용합니다.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p data-end=&quot;1215&quot; data-start=&quot;1209&quot; data-ke-size=&quot;size16&quot;&gt;예를 들어,&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1345&quot; data-start=&quot;1216&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1238&quot; data-start=&quot;1216&quot;&gt;학생마다 새로운 학번이 필요할 때&lt;/li&gt;
&lt;li data-end=&quot;1273&quot; data-start=&quot;1239&quot;&gt;회사에서 사원이 입사할 때마다 새로운 사번이 필요할 때&lt;/li&gt;
&lt;li data-end=&quot;1310&quot; data-start=&quot;1274&quot;&gt;카드회사가 새로운 카드를 발급할 때 고유 번호를 부여할 때&lt;/li&gt;
&lt;li data-end=&quot;1345&quot; data-start=&quot;1311&quot;&gt;은행에서 여러 기기가 같은 대기번호 기준을 공유해야 할 때&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-end=&quot;1380&quot; data-start=&quot;1352&quot; data-ke-size=&quot;size26&quot;&gt;3️⃣ static 변수 예제: 번호표 발급기&lt;/h2&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;pre id=&quot;code_1746261279555&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;package com._static;

public class NumberPrinter {

    /**
     *  static 변수는, static 메서드는 객체 생성 없이 클래스 이름으로 바로 접근 가능 하다.
     *  왜? heap 메모리에 들어가기 위해서는 new 키워드와 생성자를 호출한 뒤
     *  동작할 수 있지만 method area 영역은 프로그램을 실행 시키면
     *  바로 메모리를 할당 받아 실행되는 영역이기 때문이다. 
     */

    private int id;
    // 멤버 변수 (NumberPrinter 소속된 변수)
    // public int waitNumber;

    // waitNumber &amp;lt;-- 멤버 변수가 아니라 class area 영역에 포함된다.
    public static int waitNumber; // static 변수 선언(클래스 변수)

    public NumberPrinter(int id) {
        this.id = id;
        this.waitNumber = 1;
    }

    // 번호표를 출력합니다.
    public void printWaitNumber() {
        System.out.println(id + &quot; 기기에 대기 순번은 : &quot; + waitNumber);
        waitNumber++;
    }

}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;  이 코드는 여러 대기표 기기(객체)가 &lt;b&gt;하나의 waitNumber 변수를 공유&lt;/b&gt;해서 &lt;br /&gt;같은 기준의 대기 번호를 순서대로 출력하게 합니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1091&quot; data-origin-height=&quot;758&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b1uWnS/btsNJC5ErsM/umnyd5K6BuOakfKcV1Jc8k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b1uWnS/btsNJC5ErsM/umnyd5K6BuOakfKcV1Jc8k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b1uWnS/btsNJC5ErsM/umnyd5K6BuOakfKcV1Jc8k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb1uWnS%2FbtsNJC5ErsM%2Fumnyd5K6BuOakfKcV1Jc8k%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1091&quot; height=&quot;758&quot; data-origin-width=&quot;1091&quot; data-origin-height=&quot;758&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;정리&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;static 변수는 모든 객체들이 공유할 수 있는 변수 이다.&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1240&quot; data-origin-height=&quot;399&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cs9AoW/btsNJ2Xei8G/0jg54BwwCYrbq9CNrEnQP1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cs9AoW/btsNJ2Xei8G/0jg54BwwCYrbq9CNrEnQP1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cs9AoW/btsNJ2Xei8G/0jg54BwwCYrbq9CNrEnQP1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcs9AoW%2FbtsNJ2Xei8G%2F0jg54BwwCYrbq9CNrEnQP1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1240&quot; height=&quot;399&quot; data-origin-width=&quot;1240&quot; data-origin-height=&quot;399&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1746261557753&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;비공식 이름 static 메모리 
공식적인 이름 * Method area * Class area&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-end=&quot;1864&quot; data-start=&quot;1831&quot; data-ke-size=&quot;size26&quot;&gt;4️⃣ static 변수 예제: 직원 ID 부여 시스템&lt;/h2&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;pre id=&quot;code_1746261316689&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;package com._static;

public class Employee {
    private int employeeId;
    private String name; // 이름
    private String department; // 부서

    // 생성자
    public Employee(String name) {
        this.name = name;
        // 클래스 변수를 활용해보자. Company.empSerialNumber
        // 클래스 이름으로 접근할 수 있다.
        employeeId = Company.empSerialNumber;
        Company.empSerialNumber++;
        // employeeId = 1;
    }

    // getter
    public int getEmployeeId() {
        return employeeId;
    }

    public String getName() {
        return name;
    }

    public String getDepartment() {
        return department;
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;pre id=&quot;code_1746261323867&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;package com._static;

public class Company {

    // 클래스 변수(static) &amp;rarr; 모든 직원에게 공통으로 사용됨
    static int empSerialNumber = 1;

    public static void main(String[] args) {
        Employee e1 = new Employee(&quot;야스오&quot;);
        Employee e2 = new Employee(&quot;티모&quot;);
        Employee e3 = new Employee(&quot;샤코&quot;);
        Employee e4 = new Employee(&quot;홍길동&quot;);

        System.out.println(&quot;야스오: &quot; + e1.getEmployeeId());
        System.out.println(&quot;티모: &quot; + e2.getEmployeeId());
        System.out.println(&quot;샤코: &quot; + e3.getEmployeeId());
        System.out.println(&quot;홍길동: &quot; + e4.getEmployeeId());
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;  출력 결과: 각 직원에게 고유한 ID가 자동으로 부여됩니다.&lt;br /&gt;클래스 변수 empSerialNumber는 모든 Employee 인스턴스가 공유합니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-end=&quot;2901&quot; data-start=&quot;2884&quot; data-ke-size=&quot;size26&quot;&gt;5️⃣ static 메서드&lt;/h2&gt;
&lt;blockquote data-end=&quot;2955&quot; data-start=&quot;2903&quot; data-ke-style=&quot;style1&quot;&gt;
&lt;p data-end=&quot;2955&quot; data-start=&quot;2905&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;static 메서드는 객체 없이 클래스 이름으로 바로 호출할 수 있는 메서드입니다.&lt;/b&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p data-end=&quot;3000&quot; data-start=&quot;2957&quot; data-ke-size=&quot;size16&quot;&gt;  주의: static 메서드 안에서는 인스턴스 변수에 접근할 수 없습니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 data-end=&quot;3028&quot; data-start=&quot;3007&quot; data-ke-size=&quot;size23&quot;&gt;  예제: 카드 고유번호 부여&lt;/h3&gt;
&lt;pre id=&quot;code_1746261356356&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;public class Card2 {

    private static int cardCounter = 0; // 모든 객체가 공유하는 변수
    private final int cardId;
    private final String cardName;

    public Card2(String cardName) {
        this.cardName = cardName;
        this.cardId = ++cardCounter;
    }

    // static 메서드
    public static int getTotalCards() {
        return cardCounter;
    }

    public void showInfo() {
        System.out.println(cardName + &quot;의 고유 번호는 &quot; + cardId + &quot;입니다.&quot;);
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1746261362575&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;public class CardMain {

    public static void main(String[] args) {
        // static 변수는 객체 생성전에 사용가능
        // static 메서드는 객체 생성전에 사용 가능
        // 사용하는 방법 (클래스의 이름으로 접근 가능하다)
        System.out.println(Card2.getTotalCards());
        // 인스턴스 메서드 일까 static 메서드 이다.
        // 그래서 객체 생성전에 호출해 볼 수 있다.
        Card2 c1 = new Card2(&quot;우리카드&quot;);
        Card2 c2 = new Card2(&quot;하나카드&quot;);

        c1.showInfo();
        c2.showInfo();

        System.out.println(&quot;총 발급된 카드 수: &quot; + Card2.getTotalCards());
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-end=&quot;3915&quot; data-start=&quot;3883&quot; data-ke-size=&quot;size26&quot;&gt;6️⃣ static 변수와 메서드는 어디에 저장될까?&lt;/h2&gt;
&lt;div&gt;
&lt;table style=&quot;border-collapse: collapse; width: 95.3488%; height: 149px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&lt;b&gt;구분&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&lt;b&gt;저장 위치&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&lt;b&gt;특징&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&lt;b&gt;static 변수/메서드&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;Method Area (클래스 영역)&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;프로그램 시작 시 메모리 할당&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&lt;b&gt;인스턴스 변수/메서드&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;Heap (객체 영역)&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;객체 생성 시에만 메모리 할당됨&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 data-end=&quot;4219&quot; data-start=&quot;4208&quot; data-ke-size=&quot;size23&quot;&gt;✨ 마무리하며&lt;/h3&gt;
&lt;p data-end=&quot;4230&quot; data-start=&quot;4221&quot; data-ke-size=&quot;size16&quot;&gt;이번 글에서는&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;4295&quot; data-start=&quot;4231&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;4258&quot; data-start=&quot;4231&quot;&gt;static 변수와 메서드가 왜 필요하고,&lt;/li&gt;
&lt;li data-end=&quot;4276&quot; data-start=&quot;4259&quot;&gt;어떤 상황에서 사용하는지&lt;/li&gt;
&lt;li data-end=&quot;4295&quot; data-start=&quot;4277&quot;&gt;어떻게 메모리에 저장되는지&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;4312&quot; data-start=&quot;4297&quot; data-ke-size=&quot;size16&quot;&gt;를 예제와 함께 배웠습니다.&lt;/p&gt;
&lt;p data-end=&quot;4312&quot; data-start=&quot;4297&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;4312&quot; data-start=&quot;4297&quot; data-ke-size=&quot;size16&quot;&gt;기억하세요!&lt;br /&gt;static은 클래스에 고정된 값이고,&lt;br /&gt;&lt;b&gt;객체들끼리 공유하는 값&lt;/b&gt;입니다.&lt;br /&gt;그래서 절대 함부로 인스턴스 상태를 변경하는 데 쓰면 안 돼요!&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot; data-start=&quot;2662&quot; data-end=&quot;2675&quot;&gt;⏭️&lt;span&gt;&amp;nbsp;&lt;/span&gt; 다음 글 예고: Array(배열)에 대한 이해&lt;/h2&gt;
&lt;p data-end=&quot;201&quot; data-start=&quot;137&quot; data-ke-size=&quot;size16&quot;&gt;이번 글에서는 클래스 변수인 &lt;b&gt;static 키워드&lt;/b&gt;를 통해&lt;br /&gt;공유되는 데이터와 메모리 영역에 대해 배웠습니다.&lt;/p&gt;
&lt;p data-end=&quot;288&quot; data-start=&quot;203&quot; data-ke-size=&quot;size16&quot;&gt;이제부터는 자바에서 데이터를 더 &lt;b&gt;효율적으로 저장하고 관리&lt;/b&gt;하는 방법,&lt;br /&gt;즉 **자료구조(Data Structure)**에 대해 알아볼 차례입니다.&lt;/p&gt;
&lt;p data-end=&quot;318&quot; data-start=&quot;290&quot; data-ke-size=&quot;size16&quot;&gt;그 첫 걸음은 바로 **배열(Array)**입니다.&lt;/p&gt;
&lt;blockquote data-end=&quot;388&quot; data-start=&quot;320&quot; data-ke-style=&quot;style1&quot;&gt;
&lt;p data-end=&quot;388&quot; data-start=&quot;322&quot; data-ke-size=&quot;size16&quot;&gt;✔️ 배열이란 무엇일까?&lt;br /&gt;✔️ 어떻게 선언하고 값을 넣을까?&lt;br /&gt;✔️ 반복문과 함께 배열을 어떻게 활용할까?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p data-end=&quot;435&quot; data-start=&quot;390&quot; data-ke-size=&quot;size16&quot;&gt;다음 글에서는 배열의 기본 개념부터 실습 예제까지 탄탄하게 정리해드릴게요  &lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-end=&quot;4161&quot; data-start=&quot;4146&quot; data-ke-size=&quot;size26&quot;&gt;  이전 글 바로가기&lt;/h2&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;this의 3가지 사용방법이 궁금하다면?&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://seohong.tistory.com/140&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;2025.04.29 - [Java] -   this 3가지 사용 방법&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;figure id=&quot;og_1746262011736&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;  this 3가지 사용 방법&quot; data-og-description=&quot;  시작하며지난 글에서는 **접근 제어 지시자(Access Modifier)**에 대해 배웠습니다.변수와 메서드의 접근 범위를 설정해 코드의 안정성과 보안성을 높였죠.이번 글에서는✔️ this 키워드의 개념,&quot; data-og-host=&quot;seohong.tistory.com&quot; data-og-source-url=&quot;https://seohong.tistory.com/140&quot; data-og-url=&quot;https://seohong.tistory.com/140&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/dmv5T8/hyYMcA79tp/GesFG9Y9xUOLhZ9Nw6pFy0/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/Juw05/hyYPlC9rX7/FkXiZYpHPGrA3sv3TLPCi1/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800&quot;&gt;&lt;a href=&quot;https://seohong.tistory.com/140&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://seohong.tistory.com/140&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/dmv5T8/hyYMcA79tp/GesFG9Y9xUOLhZ9Nw6pFy0/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/Juw05/hyYPlC9rX7/FkXiZYpHPGrA3sv3TLPCi1/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;  this 3가지 사용 방법&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;  시작하며지난 글에서는 **접근 제어 지시자(Access Modifier)**에 대해 배웠습니다.변수와 메서드의 접근 범위를 설정해 코드의 안정성과 보안성을 높였죠.이번 글에서는✔️ this 키워드의 개념,&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;seohong.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Java</category>
      <category>static</category>
      <category>static 변수</category>
      <category>static 이란?</category>
      <category>개발자 공부</category>
      <category>객체</category>
      <category>공유하는 값</category>
      <category>메모리</category>
      <category>배열</category>
      <category>인스턴스 변수</category>
      <category>클래스 변수</category>
      <author>공돌이 출신 개발자</author>
      <guid isPermaLink="true">https://seohong.tistory.com/141</guid>
      <comments>https://seohong.tistory.com/141#entry141comment</comments>
      <pubDate>Thu, 1 May 2025 23:55:28 +0900</pubDate>
    </item>
    <item>
      <title>  this 3가지 사용 방법</title>
      <link>https://seohong.tistory.com/140</link>
      <description>&lt;h2 data-end=&quot;152&quot; data-start=&quot;142&quot; data-ke-size=&quot;size26&quot;&gt;  시작하며&lt;/h2&gt;
&lt;p data-end=&quot;244&quot; data-start=&quot;154&quot; data-ke-size=&quot;size16&quot;&gt;지난 글에서는 **접근 제어 지시자(Access Modifier)**에 대해 배웠습니다.&lt;br /&gt;변수와 메서드의 접근 범위를 설정해 코드의 안정성과 보안성을 높였죠.&lt;/p&gt;
&lt;p data-end=&quot;346&quot; data-start=&quot;246&quot; data-ke-size=&quot;size16&quot;&gt;이번 글에서는&lt;br /&gt;✔️ this 키워드의 개념,&lt;br /&gt;✔️ this의 3가지 주요 사용 방법,&lt;br /&gt;✔️ 코드 예제&lt;br /&gt;를 통해 &lt;b&gt;this&lt;/b&gt;에 대해 확실히 이해해보겠습니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-end=&quot;364&quot; data-start=&quot;353&quot; data-ke-size=&quot;size26&quot;&gt;  학습 목표&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;459&quot; data-start=&quot;366&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;395&quot; data-start=&quot;366&quot;&gt;this 키워드의 3가지 사용 방법을 이해한다&lt;/li&gt;
&lt;li data-end=&quot;426&quot; data-start=&quot;396&quot;&gt;생성자에서 this()를 활용하는 방법을 익힌다&lt;/li&gt;
&lt;li data-end=&quot;459&quot; data-start=&quot;427&quot;&gt;객체 자신의 주소를 반환하거나 사용하는 상황을 학습한다&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-end=&quot;479&quot; data-start=&quot;466&quot; data-ke-size=&quot;size26&quot;&gt;1️⃣ this란?&lt;/h2&gt;
&lt;p data-end=&quot;554&quot; data-start=&quot;481&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;this&lt;/b&gt;는 클래스 내부에서 &lt;b&gt;인스턴스(객체) 자신을 가리키는 키워드&lt;/b&gt;입니다.&lt;br /&gt;주로 다음 세 가지 상황에서 사용됩니다.&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 89.186%; height: 186px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&lt;b&gt;구분&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&lt;b&gt;설명&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&lt;b&gt;1&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;인스턴스(객체) 자신의 메모리를 가리킬 때&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&lt;b&gt;2&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;생성자 내부에서 또 다른 생성자를 호출할 때&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&lt;b&gt;3&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;자신의 주소(참조값)를 반환할 때&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-end=&quot;705&quot; data-start=&quot;678&quot; data-ke-size=&quot;size26&quot;&gt;2️⃣ this.를 이용해 멤버변수 구분하기&lt;/h2&gt;
&lt;p data-end=&quot;766&quot; data-start=&quot;707&quot; data-ke-size=&quot;size16&quot;&gt;같은 이름의 지역변수와 멤버변수가 있을 때,&lt;br /&gt;this를 이용해 멤버변수를 명확하게 가리킬 수 있습니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 data-end=&quot;791&quot; data-start=&quot;773&quot; data-ke-size=&quot;size23&quot;&gt;  Person.java&lt;/h3&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;pre id=&quot;code_1745917672357&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;package com._this;

public class Person {

    private String name;
    private int age;
    private String phone;
    private String gender; // F, M

    // this를 이용한 멤버변수 초기화
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
        System.out.println(&quot;1번 생성자 호출 됨&quot;);
    }

    // 다른 생성자 호출(this())
    public Person(String name, int age, String phone) {
        this(name, age);
        this.phone = phone;
        System.out.println(&quot;2번 생성자 호출 됨&quot;);
    }

    public Person(String name, int age, String phone, String gender) {
        this(name, age, phone);
        this.gender = gender;
        System.out.println(&quot;3번 생성자 호출 됨&quot;);
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;✅ 이 코드에서는 this.name = name 처럼,&lt;br /&gt;멤버변수와 매개변수를 명확하게 구분하기 위해 &lt;b&gt;this&lt;/b&gt;를 사용했습니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-end=&quot;1609&quot; data-start=&quot;1577&quot; data-ke-size=&quot;size26&quot;&gt;3️⃣ 생성자에서 this()로 다른 생성자 호출하기&lt;/h2&gt;
&lt;p data-end=&quot;1672&quot; data-start=&quot;1611&quot; data-ke-size=&quot;size16&quot;&gt;생성자 안에서 this()를 사용하면&lt;br /&gt;&lt;b&gt;같은 클래스 안에 있는 다른 생성자&lt;/b&gt;를 호출할 수 있습니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 data-end=&quot;1705&quot; data-start=&quot;1679&quot; data-ke-size=&quot;size23&quot;&gt;  PersonMainTest.java&lt;/h3&gt;
&lt;pre id=&quot;code_1745917697356&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;package com._this;

public class PersonMainTest {

    public static void main(String[] args) {
        Person p1 = new Person(&quot;홍길동&quot;, 10, &quot;010-1234-1234&quot;, &quot;F&quot;);
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-end=&quot;1902&quot; data-start=&quot;1889&quot; data-ke-size=&quot;size23&quot;&gt; ️ 실행 결과&lt;/h3&gt;
&lt;div&gt;
&lt;pre id=&quot;code_1745917717043&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;1번 생성자 호출 됨
2번 생성자 호출 됨
3번 생성자 호출 됨&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;✅ this(name, age, phone)처럼 생성자 안에서 또 다른 생성자를 호출하고,&lt;br /&gt;순차적으로 초기화가 이뤄지는 모습을 볼 수 있습니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-end=&quot;2075&quot; data-start=&quot;2040&quot; data-ke-size=&quot;size26&quot;&gt;4️⃣ UserInfo 클래스 예제 (this 활용 심화)&lt;/h2&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 data-end=&quot;2102&quot; data-start=&quot;2082&quot; data-ke-size=&quot;size23&quot;&gt;  UserInfo.java&lt;/h3&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;pre id=&quot;code_1745917743324&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;package com._this;

public class UserInfo {

    private String userId;
    private String userPassword;
    private String userName;
    private String userAddress;
    private String phoneNumber;

    public UserInfo(String userId) {
        System.out.println(&quot;1번 생성자 호출&quot;);
        this.userId = userId;
    }

    public UserInfo(String userId, String userPassword) {
        this(userId);
        System.out.println(&quot;2번 생성자 호출&quot;);
        this.userPassword = userPassword;
    }

    public UserInfo(String userId, String userPassword, String userName) {
        this(userId, userPassword);
        System.out.println(&quot;3번 생성자 호출&quot;);
        this.userName = userName;
    }

    public UserInfo(String userId, String userPassword, String userName, String userAddress) {
        this(userId, userPassword, userName);
        System.out.println(&quot;4번 생성자 호출&quot;);
        this.userAddress = userAddress;
    }

    public UserInfo(String userId, String userPassword, String userName, String userAddress, String phoneNumber) {
        this(userId, userPassword, userName, userAddress);
        System.out.println(&quot;마지막 5번 생성자 호출&quot;);
        this.phoneNumber = phoneNumber;
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-end=&quot;3357&quot; data-start=&quot;3290&quot; data-ke-size=&quot;size16&quot;&gt;✅ this()를 통해 생성자끼리 코드를 재사용하면서,&lt;br /&gt;반복되는 초기화 코드를 줄이고 있는 것을 알 수 있습니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-end=&quot;3404&quot; data-start=&quot;3364&quot; data-ke-size=&quot;size26&quot;&gt;5️⃣ Student, Bus 예제 (this와 객체 간 상호작용)&lt;/h2&gt;
&lt;h3 data-end=&quot;3430&quot; data-start=&quot;3411&quot; data-ke-size=&quot;size23&quot;&gt;  Student.java&lt;/h3&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;pre id=&quot;code_1745917766560&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;package com.oop1;

public class Student {

    private String name;
    private int money;

    public Student(String name, int money) {
        this.name = name;
        this.money = money;
    }

    public void takeBus(Bus bus) {
        bus.take(1500);
        this.money -= 1500;
    }

    public void showInfo() {
        System.out.println(&quot;학생 이름 : &quot; + name);
        System.out.println(&quot;학생 소지금 : &quot; + money);
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 data-end=&quot;3890&quot; data-start=&quot;3875&quot; data-ke-size=&quot;size23&quot;&gt;  Bus.java&lt;/h3&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;pre id=&quot;code_1745917777882&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;package com.oop1;

public class Bus {

    private int busNumber;
    private int count;
    private int money;

    public Bus(int busNumber) {
        this.busNumber = busNumber;
    }

    public void take(int money) {
        this.money += money;
        count++;
    }

    public void showInfo() {
        System.out.println(&quot;버스 번호 : &quot; + busNumber);
        System.out.println(&quot;승객 수  : &quot; + count);
        System.out.println(&quot;버스 수익금 : &quot; + money);
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 data-end=&quot;4391&quot; data-start=&quot;4371&quot; data-ke-size=&quot;size23&quot;&gt;  MainTest.java&lt;/h3&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;pre id=&quot;code_1745917795004&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;package com.oop1;

public class MainTest {

    public static void main(String[] args) {

        Student s1 = new Student(&quot;티모&quot;, 10_000);
        Bus bus1 = new Bus(100);
        Bus bus2 = new Bus(133);

        s1.takeBus(bus2);

        s1.showInfo();
        System.out.println(&quot;-------------&quot;);
        bus2.showInfo();
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot; data-start=&quot;4744&quot; data-end=&quot;4757&quot;&gt; ️&lt;span&gt;&amp;nbsp;&lt;/span&gt;실행 결과&lt;/h3&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;pre id=&quot;code_1745917824349&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;학생 이름 : 티모
학생 소지금 : 8500
-------------
버스 번호 : 133
승객 수  : 1
버스 수익금 : 1500&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-end=&quot;4902&quot; data-start=&quot;4843&quot; data-ke-size=&quot;size16&quot;&gt;✅ 객체 간 상호작용에서도 &lt;b&gt;this&lt;/b&gt;를 사용해 객체 내부 상태를 수정하는 모습을 확인할 수 있습니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-end=&quot;4919&quot; data-start=&quot;4909&quot; data-ke-size=&quot;size26&quot;&gt;✨ 마무리하며&lt;/h2&gt;
&lt;p data-end=&quot;4979&quot; data-start=&quot;4921&quot; data-ke-size=&quot;size16&quot;&gt;이번 글에서는&lt;br /&gt;&lt;b&gt;this&lt;/b&gt; 키워드가 무엇이고,&lt;br /&gt;&lt;b&gt;어디서 어떻게 사용하는지&lt;/b&gt;를 정리했습니다.&lt;/p&gt;
&lt;p data-end=&quot;5063&quot; data-start=&quot;4981&quot; data-ke-size=&quot;size16&quot;&gt;특히 생성자 안에서 this()를 호출하는 방식은&lt;br /&gt;코드 중복을 줄이고, 생성자 체인(chain)을 만드는 데 매우 유용하니 꼭 기억해두세요.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-end=&quot;2675&quot; data-start=&quot;2662&quot; data-ke-size=&quot;size26&quot;&gt;⏭️ 다음 글 예고 : static 키워드 이해&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음 글에서는 &lt;b&gt;static 키워드&lt;/b&gt;가 무엇인지, 왜 모든 객체가 공유할 수 있는지,&lt;br /&gt;그리고 static 변수와 메서드가 어떤 상황에서 유용하게 쓰이는지를&lt;br /&gt;실제 예제를 통해 알아보겠습니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot; data-start=&quot;4146&quot; data-end=&quot;4161&quot;&gt;  이전 글 바로가기&lt;/h2&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;접근 제어 지시자(Access Modifier)에 대해서 궁금하다면??&lt;br /&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://seohong.tistory.com/139&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;2025.04.29 - [Java] -   접근 제어 지시자(Access Modifier)&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1745918070829&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;  접근 제어 지시자(Access Modifier)&quot; data-og-description=&quot;  시작하며지난 글에서는 함수, 메서드, 생성자의 차이를 복습했습니다.이번 글에서는 **접근 제어 지시자(Access Modifier)**를 배워보겠습니다.접근 제어 지시자는 클래스나 멤버 변수, 메서드에 &quot; data-og-host=&quot;seohong.tistory.com&quot; data-og-source-url=&quot;https://seohong.tistory.com/139&quot; data-og-url=&quot;https://seohong.tistory.com/139&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/nSnT1/hyYMWXRYg6/jsW84dZ7JuIwEKx3rx8elK/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/hsBwn/hyYH9K83Sp/kKIK4aINUZsPxymH8iokO0/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800&quot;&gt;&lt;a href=&quot;https://seohong.tistory.com/139&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://seohong.tistory.com/139&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/nSnT1/hyYMWXRYg6/jsW84dZ7JuIwEKx3rx8elK/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/hsBwn/hyYH9K83Sp/kKIK4aINUZsPxymH8iokO0/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;  접근 제어 지시자(Access Modifier)&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;  시작하며지난 글에서는 함수, 메서드, 생성자의 차이를 복습했습니다.이번 글에서는 **접근 제어 지시자(Access Modifier)**를 배워보겠습니다.접근 제어 지시자는 클래스나 멤버 변수, 메서드에&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;seohong.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Java</category>
      <category>Java</category>
      <category>This</category>
      <category>this 키워드</category>
      <category>this()</category>
      <category>this란?</category>
      <category>객체</category>
      <category>멤버변수</category>
      <category>생성자</category>
      <category>인스턴스</category>
      <category>접근 제어 지시자</category>
      <author>공돌이 출신 개발자</author>
      <guid isPermaLink="true">https://seohong.tistory.com/140</guid>
      <comments>https://seohong.tistory.com/140#entry140comment</comments>
      <pubDate>Wed, 30 Apr 2025 10:50:04 +0900</pubDate>
    </item>
    <item>
      <title>  접근 제어 지시자(Access Modifier)</title>
      <link>https://seohong.tistory.com/139</link>
      <description>&lt;h2 data-end=&quot;175&quot; data-start=&quot;165&quot; data-ke-size=&quot;size26&quot;&gt;  시작하며&lt;/h2&gt;
&lt;p data-end=&quot;261&quot; data-start=&quot;177&quot; data-ke-size=&quot;size16&quot;&gt;지난 글에서는 함수, 메서드, 생성자의 차이를 복습했습니다.&lt;br /&gt;이번 글에서는 **접근 제어 지시자(Access Modifier)**를 배워보겠습니다.&lt;/p&gt;
&lt;p data-end=&quot;358&quot; data-start=&quot;263&quot; data-ke-size=&quot;size16&quot;&gt;접근 제어 지시자는 &lt;b&gt;클래스나 멤버 변수, 메서드에 접근할 수 있는 범위&lt;/b&gt;를 결정하는 중요한 문법입니다.&lt;br /&gt;객체지향 설계에서 아주 기본적이지만 꼭 필요한 개념입니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-end=&quot;376&quot; data-start=&quot;365&quot; data-ke-size=&quot;size26&quot;&gt;  학습 목표&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;456&quot; data-start=&quot;378&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;403&quot; data-start=&quot;378&quot;&gt;접근 제어 지시자의 종류와 특징을 이해한다&lt;/li&gt;
&lt;li data-end=&quot;429&quot; data-start=&quot;404&quot;&gt;각 접근 제어 지시자의 사용 방법을 익힌다&lt;/li&gt;
&lt;li data-end=&quot;456&quot; data-start=&quot;430&quot;&gt;캡슐화(정보은닉)를 위한 설계 방법을 배운다&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-end=&quot;481&quot; data-start=&quot;463&quot; data-ke-size=&quot;size26&quot;&gt;1️⃣ 접근 제어 지시자란?&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;클래스, 변수, 메서드에 대해&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&quot;누가 어디까지 접근할 수 있는지&quot;를 설명하는 키워드&lt;/b&gt;입니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 data-end=&quot;561&quot; data-start=&quot;542&quot; data-ke-size=&quot;size23&quot;&gt;  주요 접근 제어 지시자&lt;/h3&gt;
&lt;table style=&quot;border-collapse: collapse; width: 89.5349%; height: 214px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&lt;b&gt;지시자&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&lt;b&gt;접근 범위 설명&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&lt;b&gt;public&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;어디서나 접근 가능&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&lt;b&gt;default&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;같은 패키지 내에서만 접근 가능&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&lt;b&gt;private&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;해당 클래스 내부에서만 접근 가능&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&lt;b&gt;protected&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;(상속을 배운 뒤 다룹니다)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;blockquote data-end=&quot;763&quot; data-start=&quot;724&quot; data-ke-style=&quot;style1&quot;&gt;
&lt;p data-end=&quot;763&quot; data-start=&quot;726&quot; data-ke-size=&quot;size16&quot;&gt;가장 많이 사용하는 것은 &lt;b&gt;public, private&lt;/b&gt;입니다.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-end=&quot;788&quot; data-start=&quot;770&quot; data-ke-size=&quot;size26&quot;&gt;2️⃣ Bank 클래스 예제&lt;/h2&gt;
&lt;h3 data-end=&quot;806&quot; data-start=&quot;790&quot; data-ke-size=&quot;size23&quot;&gt;  Bank.java&lt;/h3&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;pre id=&quot;code_1745909157509&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;package com.access;

// Bank 클래스를 설계하는 측 코드
public class Bank {
    
    // public: 어디서나 접근 가능
    public String name;
    
    // default: 같은 패키지 내에서만 접근 가능
    int balance;
    
    // private: 오직 Bank 클래스 내부에서만 접근 가능
    private String number;
    
    public void showInfo() {
        System.out.println(&quot;현재 계좌 번호는 : &quot; + number + &quot; 입니다&quot;);
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-end=&quot;1249&quot; data-start=&quot;1172&quot; data-ke-size=&quot;size16&quot;&gt;✅ 위 코드를 보면, name, balance, number 각각 다른 접근 제어 지시자가 설정되어 있는 것을 볼 수 있습니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-end=&quot;1280&quot; data-start=&quot;1256&quot; data-ke-size=&quot;size26&quot;&gt;3️⃣ Account 클래스 설계 예제&lt;/h2&gt;
&lt;h3 data-end=&quot;1301&quot; data-start=&quot;1282&quot; data-ke-size=&quot;size23&quot;&gt;  Account.java&lt;/h3&gt;
&lt;pre id=&quot;code_1745909175004&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;package com.access;

public class Account {

    private String name;
    private int balance;

    // getter 메서드
    public int getBalance() {
        return balance;
    }

    public String getName() {
        return name;
    }

    // setter 메서드
    public void setBalance(int b) {
        if (b &amp;lt; 0) {
            System.out.println(&quot;0 이하 값을 넣을 수 없습니다.&quot;);
        } else {
            balance = b;
        }
    }

    public void setName(String n) {
        name = n;
    }

    // 입금 메서드
    public void deposit(int money) {
        balance += money;
    }

    // 출금 메서드
    public void withdraw(int money) {
        balance -= money;
    }

    // 현재 잔액 출력
    public void showInfo() {
        System.out.println(&quot;현재 계좌 잔액은 : &quot; + balance + &quot; 입니다&quot;);
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;✅ balance와 name 변수를 private로 선언하여 &lt;b&gt;외부 직접 접근을 차단&lt;/b&gt;하고, 대신 &lt;b&gt;메서드를 통해 간접적으로 접근&lt;/b&gt;하게 만들었습니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-end=&quot;2209&quot; data-start=&quot;2175&quot; data-ke-size=&quot;size26&quot;&gt;4️⃣ AccountTest 클래스 (접근 제어 필요성)&lt;/h2&gt;
&lt;h3 data-end=&quot;2234&quot; data-start=&quot;2211&quot; data-ke-size=&quot;size23&quot;&gt;  AccountTest.java&lt;/h3&gt;
&lt;pre id=&quot;code_1745909232595&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;package com.access;

public class AccountTest {

    public static void main(String[] args) {

        Account account = new Account();
        account.deposit(10_000);
        account.withdraw(6_000);
        account.showInfo();

        // 과거: 직접 접근 (문제점 발생 가능성)
        // account.balance = 10_000;  // 이런 직접 접근은 위험

        // 현재: 메서드를 통해서만 접근 가능 (캡슐화)
        account.showInfo();
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-end=&quot;2750&quot; data-start=&quot;2727&quot; data-ke-size=&quot;size26&quot;&gt;5️⃣ .(dot) 연산자 연결 예제&lt;/h2&gt;
&lt;p data-end=&quot;2786&quot; data-start=&quot;2752&quot; data-ke-size=&quot;size16&quot;&gt;객체 간 연결을 통해 내부 기능을 호출하는 예제를 살펴봅니다.&lt;/p&gt;
&lt;h3 data-end=&quot;2806&quot; data-start=&quot;2793&quot; data-ke-size=&quot;size23&quot;&gt;  A.java&lt;/h3&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;pre id=&quot;code_1745909292775&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;package com.dot;

public class A {

    B b;

    public A() {
        System.out.println(&quot;A 생성자 호출&quot;);
        b = new B();
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 data-end=&quot;2971&quot; data-start=&quot;2958&quot; data-ke-size=&quot;size23&quot;&gt;  B.java&lt;/h3&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;pre id=&quot;code_1745909303922&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;package com.dot;

public class B {

    C c;

    public B() {
        // 생성자
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 data-end=&quot;3090&quot; data-start=&quot;3077&quot; data-ke-size=&quot;size23&quot;&gt;  C.java&lt;/h3&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;pre id=&quot;code_1745909316019&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;package com.dot;

public class C {

    public void callFinal() {
        System.out.println(&quot;callFinal() 메소드가 호출 되었다.&quot;);
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 data-end=&quot;3260&quot; data-start=&quot;3240&quot; data-ke-size=&quot;size23&quot;&gt;  MainTest.java&lt;/h3&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;pre id=&quot;code_1745909329322&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;package com.dot;

public class MainTest {

    public static void main(String[] args) {
        System.out.println(&quot; . 연산자의 여행!!! &quot;);

        A a1 = new A();

        a1.b.c.callFinal();
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 data-end=&quot;3489&quot; data-start=&quot;3476&quot; data-ke-size=&quot;size23&quot;&gt; ️ 실행 결과&lt;/h3&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;pre id=&quot;code_1745909351595&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;. 연산자의 여행!!!
A 생성자 호출
callFinal() 메소드가 호출 되었다.&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-end=&quot;3625&quot; data-start=&quot;3547&quot; data-ke-size=&quot;size16&quot;&gt;✅ a1.b.c.callFinal() 처럼 &lt;b&gt;객체 &amp;rarr; 객체 &amp;rarr; 객체&lt;/b&gt; 식으로 연결하며 최종 메서드까지 접근하는 것을 볼 수 있습니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-end=&quot;3642&quot; data-start=&quot;3632&quot; data-ke-size=&quot;size26&quot;&gt;✨ 마무리하며&lt;/h2&gt;
&lt;p data-end=&quot;3734&quot; data-start=&quot;3644&quot; data-ke-size=&quot;size16&quot;&gt;이번 글에서는&lt;br /&gt;&lt;b&gt;접근 제어 지시자&lt;/b&gt;란 무엇이고,&lt;br /&gt;&lt;b&gt;public, default, private 지시자&lt;/b&gt;가 각각 어떻게 적용되는지를 학습했습니다.&lt;/p&gt;
&lt;p data-end=&quot;3796&quot; data-start=&quot;3736&quot; data-ke-size=&quot;size16&quot;&gt;캡슐화를 통해 실수나 잘못된 접근을 막고,&lt;br /&gt;코드를 더 안전하고 견고하게 만들 수 있다는 점을 기억하세요.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-end=&quot;2675&quot; data-start=&quot;2662&quot; data-ke-size=&quot;size26&quot;&gt;⏭️ 다음 글 예고 : this 키워드&lt;/h2&gt;
&lt;p data-end=&quot;309&quot; data-start=&quot;206&quot; data-ke-size=&quot;size16&quot;&gt;다음 글에서는 &lt;b&gt;this 키워드&lt;/b&gt;가 무엇이고,&lt;br /&gt;&lt;b&gt;this의 3가지 사용 방법&lt;/b&gt;(자기자신 가리키기, 다른 생성자 호출하기, 주소 반환하기)에 대해 배워보겠습니다.&lt;/p&gt;
&lt;p data-end=&quot;349&quot; data-start=&quot;315&quot; data-ke-size=&quot;size16&quot;&gt;다양한 예제와 함께 this 키워드를 확실히 이해해봅시다!&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-end=&quot;3912&quot; data-start=&quot;3897&quot; data-ke-size=&quot;size26&quot;&gt;  이전 글 바로가기&lt;/h2&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;함수,메서드,생성자가 궁금하다면??&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://seohong.tistory.com/138&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;2025.04.28 - [Java] -   함수, 메서드, 생성자 복습&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1745909567007&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;  함수, 메서드, 생성자 복습&quot; data-og-description=&quot;  시작하며지난 글에서는 객체를 초기화하는 **생성자(Constructor)**에 대해 배웠습니다.생성자는 객체가 생성될 때 처음으로 호출되어 초기값을 설정해주는 역할을 했었죠.이번 글에서는✔️ &quot; data-og-host=&quot;seohong.tistory.com&quot; data-og-source-url=&quot;https://seohong.tistory.com/138&quot; data-og-url=&quot;https://seohong.tistory.com/138&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/fO17L/hyYM0spkSR/dx7jqzK60i8kOda1Npey20/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/dgEqLe/hyYMcmC7bW/V6qXbZhRY1WrnNMYB5L5FK/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800&quot;&gt;&lt;a href=&quot;https://seohong.tistory.com/138&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://seohong.tistory.com/138&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/fO17L/hyYM0spkSR/dx7jqzK60i8kOda1Npey20/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/dgEqLe/hyYMcmC7bW/V6qXbZhRY1WrnNMYB5L5FK/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;  함수, 메서드, 생성자 복습&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;  시작하며지난 글에서는 객체를 초기화하는 **생성자(Constructor)**에 대해 배웠습니다.생성자는 객체가 생성될 때 처음으로 호출되어 초기값을 설정해주는 역할을 했었죠.이번 글에서는✔️&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;seohong.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Java</category>
      <category>default</category>
      <category>Final</category>
      <category>Private</category>
      <category>Protected</category>
      <category>Public</category>
      <category>상속</category>
      <category>접근 제어</category>
      <category>접근 제어 지시자</category>
      <category>접근 제한</category>
      <category>캡슐화</category>
      <author>공돌이 출신 개발자</author>
      <guid isPermaLink="true">https://seohong.tistory.com/139</guid>
      <comments>https://seohong.tistory.com/139#entry139comment</comments>
      <pubDate>Tue, 29 Apr 2025 15:54:41 +0900</pubDate>
    </item>
    <item>
      <title>  함수, 메서드, 생성자 복습</title>
      <link>https://seohong.tistory.com/138</link>
      <description>&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot; data-start=&quot;165&quot; data-end=&quot;176&quot;&gt;  시작하며&lt;/h3&gt;
&lt;p data-end=&quot;279&quot; data-start=&quot;183&quot; data-ke-size=&quot;size16&quot;&gt;지난 글에서는 객체를 초기화하는 **생성자(Constructor)**에 대해 배웠습니다.&lt;br /&gt;생성자는 객체가 생성될 때 처음으로 호출되어 초기값을 설정해주는 역할을 했었죠.&lt;/p&gt;
&lt;p data-end=&quot;390&quot; data-start=&quot;281&quot; data-ke-size=&quot;size16&quot;&gt;이번 글에서는&lt;br /&gt;✔️ 함수(Function),&lt;br /&gt;✔️ 메서드(Method),&lt;br /&gt;✔️ 생성자(Constructor)&lt;br /&gt;이 세 가지를 함께 복습하면서 각각의 차이점을 깔끔하게 정리해보겠습니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot; data-start=&quot;422&quot; data-end=&quot;434&quot;&gt;  학습 목표&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;478&quot; data-start=&quot;410&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;429&quot; data-start=&quot;410&quot;&gt;함수와 메서드의 차이를 이해한다&lt;/li&gt;
&lt;li data-end=&quot;448&quot; data-start=&quot;430&quot;&gt;생성자의 역할을 다시 복습한다&lt;/li&gt;
&lt;li data-end=&quot;478&quot; data-start=&quot;449&quot;&gt;각각의 개념을 코드와 함께 명확히 구분할 수 있다&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-end=&quot;504&quot; data-start=&quot;485&quot; data-ke-size=&quot;size26&quot;&gt;1️⃣ 함수(Function)&lt;/h2&gt;
&lt;h3 data-end=&quot;517&quot; data-start=&quot;506&quot; data-ke-size=&quot;size23&quot;&gt;  함수란?&lt;/h3&gt;
&lt;p data-end=&quot;604&quot; data-start=&quot;519&quot; data-ke-size=&quot;size16&quot;&gt;함수는 데이터를 입력받아 연산을 수행하고 결과를 반환하는 코드 블록입니다.&lt;br /&gt;static 키워드를 붙이면 객체를 생성하지 않고 호출할 수 있습니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot; data-start=&quot;2308&quot; data-end=&quot;2320&quot;&gt; &lt;span&gt;&amp;nbsp;&lt;/span&gt;예제 코드&lt;/h3&gt;
&lt;pre id=&quot;code_1745906898552&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;package com.function;

/**
 * 함수란? 데이터를 받아서 처리하고 결과를 돌려주는 코드 블록이야.
 * static 을 사용하면 객체 없이 바로 호출 가능 해!
 */
public class CalculatorMain {

    public static void main(String[] args) {
        int num1 = 10;
        int num2 = 5;
        int testNumber = 7;

        int sum = add(num1, num2);
        int difference = subtract(num1, num2);
        int product = multiply(num1, num2);
        double quotient = divide(num1, num2);
        boolean odd = isOdd(testNumber);
        boolean even = isEven(testNumber);

        System.out.println(num1 + &quot; + &quot; + num2 + &quot; = &quot; + sum);
        System.out.println(num1 + &quot; - &quot; + num2 + &quot; = &quot; + difference);
        System.out.println(num1 + &quot; * &quot; + num2 + &quot; = &quot; + product);
        System.out.println(num1 + &quot; / &quot; + num2 + &quot; = &quot; + quotient);
        System.out.println(testNumber + &quot;은(는) 홀수인가요? &quot; + odd);
        System.out.println(testNumber + &quot;은(는) 짝수인가요? &quot; + even);
    }

    static int add(int a, int b) { return a + b; }
    static int subtract(int a, int b) { return a - b; }
    static int multiply(int a, int b) { return a * b; }
    static double divide(int a, int b) {
        if (b == 0) {
            System.out.println(&quot;0으로 나눌 수 없습니다.&quot;);
            return 0;
        }
        return (double) a / b;
    }
    static boolean isEven(int number) { return number % 2 == 0; }
    static boolean isOdd(int number) { return number % 2 != 0; }
}&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot; data-start=&quot;3362&quot; data-end=&quot;3375&quot;&gt; ️ 실행결과&lt;/h3&gt;
&lt;pre id=&quot;code_1745906975234&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;10 + 5 = 15
10 - 5 = 5
10 * 5 = 50
10 / 5 = 2.0
7은(는) 홀수인가요? true
7은(는) 짝수인가요? false&lt;/code&gt;&lt;/pre&gt;
&lt;p data-end=&quot;2194&quot; data-start=&quot;2145&quot; data-ke-size=&quot;size16&quot;&gt;✅ 이 코드를 보면, 함수를 통해 다양한 연산 작업을 수행하고 있는 걸 알 수 있습니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-end=&quot;2219&quot; data-start=&quot;2201&quot; data-ke-size=&quot;size26&quot;&gt;2️⃣ 메서드(Method)&lt;/h2&gt;
&lt;h3 data-end=&quot;2233&quot; data-start=&quot;2221&quot; data-ke-size=&quot;size23&quot;&gt;  메서드란?&lt;/h3&gt;
&lt;p data-end=&quot;2301&quot; data-start=&quot;2235&quot; data-ke-size=&quot;size16&quot;&gt;메서드는 클래스 내부에 작성된 함수입니다.&lt;br /&gt;객체의 속성(멤버 변수)을 변경하거나, 객체가 수행할 동작을 정의합니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 data-end=&quot;2320&quot; data-start=&quot;2308&quot; data-ke-size=&quot;size23&quot;&gt;  예제 코드&lt;/h3&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;pre id=&quot;code_1745904830839&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;package com.method;

/**
 * 메서드 연습
 * 메서드란? 객체에 소속된 함수로, 클래스의 상태(데이터)를 활용하거나 객체와 관련된
 * 작업을 처리할 때 사용한다 
 */
public class CoffeeMachine {

    int water;
    int coffee;

    public void refillWater(int amount) {
        if (amount &amp;gt; 0) {
            water += amount;
            System.out.println(amount + &quot;ml의 물을 채웠습니다&quot;);
        } else {
            System.out.println(&quot;0보다 큰 양의 물을 채워주세요&quot;);
        }
    }

    public void refillCoffee(int amount) {
        if (amount &amp;gt; 0) {
            coffee += amount;
            System.out.println(amount + &quot;g의 커피 원두를 채웠습니다&quot;);
        } else {
            System.out.println(&quot;0보다 큰 양의 원두를 채워주세요&quot;);
        }
    }

    public String makeCoffee() {
        if (water &amp;gt;= 100 &amp;amp;&amp;amp; coffee &amp;gt;= 10) {
            water -= 100;
            coffee -= 10;
            return &quot;맛있는 커피 한 잔 완성&quot;;
        } else {
            return &quot;재료가 부족해요! 물이나 원두를 채워주세요&quot;;
        }
    }

    public CoffeeMachine() {}

    public CoffeeMachine(int w, int c) {
        water = w;
        coffee = c;
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 data-end=&quot;3375&quot; data-start=&quot;3362&quot; data-ke-size=&quot;size23&quot;&gt; ️ 실행 결과&lt;/h3&gt;
&lt;div&gt;
&lt;pre id=&quot;code_1745904845003&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;200ml의 물을 채웠습니다
30g의 커피 원두를 채웠습니다
-----------------
커피 주문!
맛있는 커피 한 잔 완성
또 커피 주문!
맛있는 커피 한 잔 완성
마지막 커피 주문
재료가 부족해요! 물이나 원두를 채워주세요&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p data-end=&quot;3571&quot; data-start=&quot;3516&quot; data-ke-size=&quot;size16&quot;&gt;✅ 이 코드를 보면, 메서드를 통해 객체의 상태를 조작하고 동작을 수행하는 모습을 알 수 있습니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-end=&quot;3601&quot; data-start=&quot;3578&quot; data-ke-size=&quot;size26&quot;&gt;3️⃣ 생성자(Constructor)&lt;/h2&gt;
&lt;h3 data-end=&quot;3615&quot; data-start=&quot;3603&quot; data-ke-size=&quot;size23&quot;&gt;  생성자란?&lt;/h3&gt;
&lt;p data-end=&quot;3691&quot; data-start=&quot;3617&quot; data-ke-size=&quot;size16&quot;&gt;생성자는 객체를 생성할 때 자동으로 호출되는 특별한 메서드입니다.&lt;br /&gt;주로 객체의 초기값을 설정하거나 필요한 준비 작업을 처리합니다.&lt;/p&gt;
&lt;p data-end=&quot;3702&quot; data-start=&quot;3693&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;3702&quot; data-start=&quot;3693&quot; data-ke-size=&quot;size18&quot;&gt;✅ 생성자의 특징&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 96.1628%; height: 190px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;height: 21px; text-align: center;&quot;&gt;&lt;b&gt;특징&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 21px; text-align: center;&quot;&gt;&lt;b&gt;설명&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;height: 21px; text-align: center;&quot;&gt;이름이 클래스와 같아야 한다&lt;/td&gt;
&lt;td style=&quot;height: 21px; text-align: center;&quot;&gt;public CoffeeMachine() {...}&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;height: 21px; text-align: center;&quot;&gt;반환 타입이 없다&lt;/td&gt;
&lt;td style=&quot;height: 21px; text-align: center;&quot;&gt;void조차 쓰지 않는다&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;height: 21px; text-align: center;&quot;&gt;객체 생성 시 자동 호출된다&lt;/td&gt;
&lt;td style=&quot;height: 21px; text-align: center;&quot;&gt;new CoffeeMachine();&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;3887&quot; data-start=&quot;3852&quot; data-ke-size=&quot;size16&quot;&gt;생성자 오버로딩을 통해 다양한 형태의 객체 초기화도 가능합니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-end=&quot;3904&quot; data-start=&quot;3894&quot; data-ke-size=&quot;size26&quot;&gt;✨ 마무리하며&lt;/h2&gt;
&lt;p data-end=&quot;3982&quot; data-start=&quot;3906&quot; data-ke-size=&quot;size16&quot;&gt;이번 글에서는&lt;br /&gt;&lt;b&gt;함수, 메서드, 생성자&lt;/b&gt; 각각의 개념을 복습하고,&lt;br /&gt;예제 코드를 통해 구체적으로 어떻게 사용하는지 확인했습니다.&lt;/p&gt;
&lt;p data-end=&quot;4044&quot; data-start=&quot;3984&quot; data-ke-size=&quot;size16&quot;&gt;특히 함수와 메서드는 비슷해 보이지만,&lt;br /&gt;&lt;b&gt;메서드는 객체 소속&lt;/b&gt;이라는 점이 다르다는 것을 기억해두세요.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot; data-start=&quot;2662&quot; data-end=&quot;2675&quot;&gt;⏭️ 다음 글 예고 : 접근 제어 지시자(access modifier)&lt;/h2&gt;
&lt;p data-end=&quot;4139&quot; data-start=&quot;4066&quot; data-ke-size=&quot;size16&quot;&gt;다음 글에서는&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-end=&quot;2675&quot; data-start=&quot;2662&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;접근 제어 지시자(access modifier)&lt;/b&gt; 에 대해 자세히 정리해보겠습니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-end=&quot;4161&quot; data-start=&quot;4146&quot; data-ke-size=&quot;size26&quot;&gt;  이전 글 바로가기&lt;/h2&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;생성자(Constructor) 란??&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://seohong.tistory.com/137&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;2025.04.23 - [Java] -   생성자(Constructor)란?&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1745905072973&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;  생성자(Constructor)란?&quot; data-og-description=&quot;  시작하며지난 글에서는 객체의 행동(기능)을 표현하는 **메서드(Method)**에 대해 배웠습니다.객체는 속성(멤버 변수)과 행동(메서드)을 가지며,이 속성들에 처음 어떤 값이 들어갈지를 설정해&quot; data-og-host=&quot;seohong.tistory.com&quot; data-og-source-url=&quot;https://seohong.tistory.com/137&quot; data-og-url=&quot;https://seohong.tistory.com/137&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/cSOVuv/hyYM4hfRGy/1rJtirJ1OI4BCFSmb9emOK/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/eoKowf/hyYIky4w5h/YL4cwHJPjn3WWn1ghKWHe1/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800&quot;&gt;&lt;a href=&quot;https://seohong.tistory.com/137&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://seohong.tistory.com/137&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/cSOVuv/hyYM4hfRGy/1rJtirJ1OI4BCFSmb9emOK/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/eoKowf/hyYIky4w5h/YL4cwHJPjn3WWn1ghKWHe1/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;  생성자(Constructor)란?&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;  시작하며지난 글에서는 객체의 행동(기능)을 표현하는 **메서드(Method)**에 대해 배웠습니다.객체는 속성(멤버 변수)과 행동(메서드)을 가지며,이 속성들에 처음 어떤 값이 들어갈지를 설정해&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;seohong.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Java</category>
      <category>constructor</category>
      <category>function</category>
      <category>JAVA 기초</category>
      <category>Method</category>
      <category>static</category>
      <category>메서드</category>
      <category>생성자</category>
      <category>오버로딩</category>
      <category>클래스</category>
      <category>함수</category>
      <author>공돌이 출신 개발자</author>
      <guid isPermaLink="true">https://seohong.tistory.com/138</guid>
      <comments>https://seohong.tistory.com/138#entry138comment</comments>
      <pubDate>Mon, 28 Apr 2025 23:46:11 +0900</pubDate>
    </item>
    <item>
      <title>  생성자(Constructor)란?</title>
      <link>https://seohong.tistory.com/137</link>
      <description>&lt;h3 data-end=&quot;176&quot; data-start=&quot;165&quot; data-ke-size=&quot;size23&quot;&gt;  시작하며&lt;/h3&gt;
&lt;p data-end=&quot;324&quot; data-start=&quot;178&quot; data-ke-size=&quot;size16&quot;&gt;지난 글에서는 객체의 행동(기능)을 표현하는 **메서드(Method)**에 대해 배웠습니다.&lt;br /&gt;객체는 속성(멤버 변수)과 행동(메서드)을 가지며,&lt;br /&gt;이 속성들에 &lt;b&gt;처음 어떤 값이 들어갈지&lt;/b&gt;를 설정해주는 게 바로 **생성자(Constructor)**입니다.&lt;/p&gt;
&lt;p data-end=&quot;415&quot; data-start=&quot;326&quot; data-ke-size=&quot;size16&quot;&gt;이번 글에서는&lt;br /&gt;✔️ 생성자의 기본 개념,&lt;br /&gt;✔️ 기본 생성자와 사용자 정의 생성자,&lt;br /&gt;✔️ 생성자 오버로딩까지&lt;br /&gt;예제와 함께 깔끔하게 정리해보겠습니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 data-end=&quot;434&quot; data-start=&quot;422&quot; data-ke-size=&quot;size23&quot;&gt;  학습 목표&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;521&quot; data-start=&quot;436&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;468&quot; data-start=&quot;436&quot;&gt;기본 생성자와 사용자 정의 생성자의 차이를 이해한다&lt;/li&gt;
&lt;li data-end=&quot;490&quot; data-start=&quot;469&quot;&gt;생성자의 역할과 규칙을 학습한다&lt;/li&gt;
&lt;li data-end=&quot;521&quot; data-start=&quot;491&quot;&gt;생성자 오버로딩이 무엇인지 알고 직접 활용해본다&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-end=&quot;553&quot; data-start=&quot;528&quot; data-ke-size=&quot;size26&quot;&gt;1️⃣ 생성자(Constructor)란?&lt;/h2&gt;
&lt;p data-end=&quot;561&quot; data-start=&quot;555&quot; data-ke-size=&quot;size16&quot;&gt;생성자는&lt;/p&gt;
&lt;blockquote data-end=&quot;599&quot; data-start=&quot;562&quot; data-ke-style=&quot;style1&quot;&gt;
&lt;p data-end=&quot;599&quot; data-start=&quot;564&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;객체를 생성할 때 자동으로 호출되는 특별한 메서드&lt;/b&gt;입니다.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p data-end=&quot;651&quot; data-start=&quot;601&quot; data-ke-size=&quot;size16&quot;&gt;객체가 생성될 때&lt;br /&gt;&lt;b&gt;필요한 초기값을 설정하거나, 필요한 초기화 작업을 처리&lt;/b&gt;합니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 data-end=&quot;671&quot; data-start=&quot;658&quot; data-ke-size=&quot;size23&quot;&gt;✅ 생성자의 특징&lt;/h3&gt;
&lt;div&gt;
&lt;div&gt;
&lt;table style=&quot;border-collapse: collapse; width: 87.5581%; height: 232px;&quot; border=&quot;1&quot; data-end=&quot;1099&quot; data-start=&quot;673&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;height: 21px; text-align: center;&quot;&gt;&lt;b&gt;특징&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 21px; text-align: center;&quot;&gt;&lt;b&gt;설명&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot; data-end=&quot;904&quot; data-start=&quot;835&quot;&gt;
&lt;td style=&quot;height: 21px; text-align: center;&quot; data-end=&quot;859&quot; data-start=&quot;835&quot;&gt;&lt;b&gt;이름이 클래스와 동일해야 한다&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 21px; text-align: center;&quot; data-end=&quot;904&quot; data-start=&quot;859&quot;&gt;public Bus { ... }&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot; data-end=&quot;972&quot; data-start=&quot;905&quot;&gt;
&lt;td style=&quot;height: 21px; text-align: center;&quot; data-end=&quot;934&quot; data-start=&quot;905&quot;&gt;&lt;b&gt;반환 타입이 없다&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 21px; text-align: center;&quot; data-end=&quot;972&quot; data-start=&quot;934&quot;&gt;void조차 쓰지 않는다&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot; data-end=&quot;1045&quot; data-start=&quot;973&quot;&gt;
&lt;td style=&quot;height: 21px; text-align: center;&quot; data-end=&quot;1000&quot; data-start=&quot;973&quot;&gt;&lt;b&gt;객체 생성 시 new 키워드와 함께 호출&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 21px; text-align: center;&quot; data-end=&quot;1045&quot; data-start=&quot;1000&quot;&gt;new Bus();&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot; data-end=&quot;1099&quot; data-start=&quot;1046&quot;&gt;
&lt;td style=&quot;height: 21px; text-align: center;&quot; data-end=&quot;1070&quot; data-start=&quot;1046&quot;&gt;&lt;b&gt;기본 생성자와 사용자 정의 생성자 존재&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 21px; text-align: center;&quot; data-end=&quot;1099&quot; data-start=&quot;1070&quot;&gt;직접 만들 수도 있고, 안 만들면 자동 생성됨&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-end=&quot;1141&quot; data-start=&quot;1106&quot; data-ke-size=&quot;size26&quot;&gt;2️⃣ 기본 생성자 (default constructor)&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1191&quot; data-start=&quot;1143&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1174&quot; data-start=&quot;1143&quot;&gt;생성자를 &lt;b&gt;작성하지 않아도 자동으로 만들어짐&lt;/b&gt;&lt;/li&gt;
&lt;li data-end=&quot;1191&quot; data-start=&quot;1175&quot;&gt;아무 매개변수도 없는 형태&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1745389319023&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;public class Student {
    // 기본 생성자 (자동 생성됨)
    public Student() {
        // 아무 코드 없어도 존재함
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote data-end=&quot;1360&quot; data-start=&quot;1308&quot; data-ke-style=&quot;style1&quot;&gt;
&lt;p data-end=&quot;1360&quot; data-start=&quot;1310&quot; data-ke-size=&quot;size16&quot;&gt;  &lt;b&gt;클래스에 생성자가 하나도 없으면, 컴파일러가 기본 생성자를 자동 추가해줍니다.&lt;/b&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-end=&quot;1409&quot; data-start=&quot;1367&quot; data-ke-size=&quot;size26&quot;&gt;3️⃣ 사용자 정의 생성자 (Overloaded Constructor)&lt;/h2&gt;
&lt;p data-end=&quot;1469&quot; data-start=&quot;1411&quot; data-ke-size=&quot;size16&quot;&gt;직접 생성자 코드를 작성해서&lt;br /&gt;&lt;b&gt;객체 생성 시 초기값을 강제하거나, 유연하게 설정&lt;/b&gt;할 수 있습니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 data-end=&quot;1488&quot; data-start=&quot;1476&quot; data-ke-size=&quot;size23&quot;&gt;  예제 코드&lt;/h3&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;pre id=&quot;code_1745389415559&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;package ch09;

public class Bus {

    // 속성
    int busId;  // 버스 ID
    String busType; // 버스 종류 (시내버스, 고속버스)
    String company; // 운영 회사

    // 생성자가 여러가 있으면 생성자 오버로딩이라 한다.

    // 매개변수 1 받는 생성자
    public Bus(int id) {
        busId = id;
    }

    public Bus(int id, String type) {
        busId = id;
        busType = type;
    }

    public Bus(int id, String type, String com) {
        busId = id;
        busType = type;
        company = com; 
    }

    // 메서드
    public void showInfo() {
        System.out.println(&quot;-----상태창------&quot;);
        System.out.println(&quot;버스 ID : &quot; + busId);
        System.out.println(&quot;버스 type : &quot; + busType);
        System.out.println(&quot;버스 company : &quot; + company);
    }

}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-end=&quot;2247&quot; data-start=&quot;2231&quot; data-ke-size=&quot;size26&quot;&gt;4️⃣ 생성자 호출 예제&lt;/h2&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;pre id=&quot;code_1745389447411&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;package ch09;

public class BusMainTest {

    public static void main(String[] args) {

        // 객체 생성과 동시에 초기값 설정
        Bus b1 = new Bus(133, &quot;시내버스&quot;, &quot;텐코&quot;);

        // 객체의 상태 확인
        b1.showInfo();
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 data-end=&quot;2498&quot; data-start=&quot;2483&quot; data-ke-size=&quot;size23&quot;&gt;  실행 결과 예시&lt;/h3&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;pre id=&quot;code_1745389484293&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;----- 상태창 ------
버스 ID : 133
버스 type : 시내버스
버스 company : 텐코&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;✅ &lt;b&gt;생성자의 목적:&lt;/b&gt;&lt;br /&gt;&amp;rarr; 객체 생성 시 초기값을 꼭 넣게 만들기 (강제성 부여!)&lt;br /&gt;&amp;rarr; 생성과 동시에 필요한 설정을 할 수 있음&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-end=&quot;2671&quot; data-start=&quot;2653&quot; data-ke-size=&quot;size26&quot;&gt;5️⃣ 생성자 오버로딩이란?&lt;/h2&gt;
&lt;blockquote data-end=&quot;2731&quot; data-start=&quot;2673&quot; data-ke-style=&quot;style1&quot;&gt;
&lt;p data-end=&quot;2731&quot; data-start=&quot;2675&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;같은 이름의 생성자를 여러 개 만들 수 있는데,&lt;br /&gt;매개변수의 개수나 타입이 다르면 가능!&lt;/b&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;pre id=&quot;code_1745389501172&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;public Bus(int id) { ... }
public Bus(int id, String type) { ... }
public Bus(int id, String type, String com) { ... }&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rarr; 이렇게 여러 개의 생성자를 만들어두면,&lt;br /&gt;&amp;rarr; &lt;b&gt;상황에 따라 필요한 생성자를 선택해서 사용할 수 있어요.&lt;/b&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 data-end=&quot;2946&quot; data-start=&quot;2935&quot; data-ke-size=&quot;size23&quot;&gt;✨ 마무리하며&lt;/h3&gt;
&lt;p data-end=&quot;2957&quot; data-start=&quot;2948&quot; data-ke-size=&quot;size16&quot;&gt;이번 글에서는&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;3034&quot; data-start=&quot;2958&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;2976&quot; data-start=&quot;2958&quot;&gt;&lt;b&gt;생성자가 무엇인지&lt;/b&gt;,&lt;/li&gt;
&lt;li data-end=&quot;3008&quot; data-start=&quot;2977&quot;&gt;&lt;b&gt;기본 생성자와 사용자 정의 생성자의 차이&lt;/b&gt;,&lt;/li&gt;
&lt;li data-end=&quot;3034&quot; data-start=&quot;3009&quot;&gt;&lt;b&gt;생성자 오버로딩&lt;/b&gt;에 대해 배웠습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;3095&quot; data-start=&quot;3036&quot; data-ke-size=&quot;size16&quot;&gt;생성자는 객체가 생성될 때 가장 먼저 호출되어&lt;br /&gt;&lt;b&gt;객체가 올바르게 사용될 수 있도록 준비&lt;/b&gt;시켜줍니다.&lt;/p&gt;
&lt;p data-end=&quot;3135&quot; data-start=&quot;3097&quot; data-ke-size=&quot;size16&quot;&gt;객체 설계 시 반드시 알아야 할 기본 중 기본이니 꼭 익혀두세요  &lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-end=&quot;2675&quot; data-start=&quot;2662&quot; data-ke-size=&quot;size26&quot;&gt;⏭️ 다음 글 예고 : 메서드, 생성자 복습&lt;/h2&gt;
&lt;p data-end=&quot;3188&quot; data-start=&quot;3179&quot; data-ke-size=&quot;size16&quot;&gt;지금까지 배운&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;3211&quot; data-start=&quot;3189&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;3195&quot; data-start=&quot;3189&quot;&gt;함수&lt;/li&gt;
&lt;li data-end=&quot;3203&quot; data-start=&quot;3196&quot;&gt;메서드&lt;/li&gt;
&lt;li data-end=&quot;3211&quot; data-start=&quot;3204&quot;&gt;생성자&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;3246&quot; data-start=&quot;3213&quot; data-ke-size=&quot;size16&quot;&gt;이 세 가지는 헷갈리기 쉬운 개념이죠.&lt;br /&gt;다음 글에서는&lt;/p&gt;
&lt;blockquote data-end=&quot;3303&quot; data-start=&quot;3247&quot; data-ke-style=&quot;style1&quot;&gt;
&lt;p data-end=&quot;3303&quot; data-start=&quot;3249&quot; data-ke-size=&quot;size16&quot;&gt;&quot;이 셋은 어떻게 다르고, 각각 어디에 쓰이는 걸까?&quot;&lt;br /&gt;깔끔하게 정리해보면서 복습해보겠습니다.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-end=&quot;3325&quot; data-start=&quot;3310&quot; data-ke-size=&quot;size26&quot;&gt;  이전 글 바로가기&lt;/h2&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;메서드(Method)란 뭘까??&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://seohong.tistory.com/136&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;2025.04.23 - [분류 전체보기] -   메서드(Method)란 뭘까?&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Java</category>
      <category>개발</category>
      <category>객체 생성</category>
      <category>기본 생성자</category>
      <category>매개 변수</category>
      <category>메서드</category>
      <category>사용자 정의 생성자</category>
      <category>생성자</category>
      <category>생성자란?</category>
      <category>오버로딩</category>
      <category>자바</category>
      <author>공돌이 출신 개발자</author>
      <guid isPermaLink="true">https://seohong.tistory.com/137</guid>
      <comments>https://seohong.tistory.com/137#entry137comment</comments>
      <pubDate>Sun, 27 Apr 2025 16:29:43 +0900</pubDate>
    </item>
  </channel>
</rss>