<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>gy_uri03.log</title>
        <link>https://velog.io/</link>
        <description></description>
        <lastBuildDate>Thu, 01 Oct 2026 02:18:45 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>gy_uri03.log</title>
            <url>https://velog.velcdn.com/images/gy_uri03/profile/08b73fa5-d945-4b9b-8f39-1960aef59205/image.jpeg</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. gy_uri03.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/gy_uri03" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[[JAVA] ArrayList]]></title>
            <link>https://velog.io/@gy_uri03/JAVA-ArrayList</link>
            <guid>https://velog.io/@gy_uri03/JAVA-ArrayList</guid>
            <pubDate>Thu, 01 Oct 2026 02:18:45 GMT</pubDate>
            <description><![CDATA[<h1 id="arraylist란">ArrayList란?</h1>
<p>패키지에 있는 크기가 자동으로 조절되는 배열 기반 리스트이다. ArrayList는 요소를 추가 시 자동으로 크기를 늘린다.</p>
<p><img src="https://velog.velcdn.com/images/gy_uri03/post/9fb88f92-876c-441d-b89e-66bc00fd5cde/image.png" alt=""></p>
<pre><code>ArrayList&lt;Movie&gt; movies = new ArrayLisr&lt;&gt;();
// Movie 객체를 여러개 담아두는 리스트</code></pre><h4 id="값-넣기-add">값 넣기 add()</h4>
<h4 id="값-꺼내기-get">값 꺼내기 get()</h4>
<h4 id="개수-확인-size">개수 확인 size()</h4>
<h4 id="삭제-remove">삭제 remove()</h4>
]]></description>
        </item>
        <item>
            <title><![CDATA[[JAVA] try catch문]]></title>
            <link>https://velog.io/@gy_uri03/JAVA-try-catch%EB%AC%B8</link>
            <guid>https://velog.io/@gy_uri03/JAVA-try-catch%EB%AC%B8</guid>
            <pubDate>Thu, 01 Oct 2026 01:31:28 GMT</pubDate>
            <description><![CDATA[<h1 id="try-catch-문">try catch 문</h1>
<p>예외가 발생했을 때 프로그램을 멈추지 않고 안전하게 다음 코드를 실행하도록 처리하는 핵심 문법</p>
<p><strong>&quot;이 코드를 실행하고(try), 문제가 생기면 이렇게 처리해(catch).&quot;</strong></p>
<p><img src="https://velog.velcdn.com/images/gy_uri03/post/f6dfe17f-80e1-4e17-bb83-e5b63348b6df/image.png" alt=""></p>
<pre><code>try {
    // 오류가 발생할 수 있는 코드
} catch (예외타입 변수) {
    // 오류가 발생했을 때 실행할 코드
}</code></pre><hr>
<pre><code>try {
    int num = Integer.parseInt(&quot;abc&quot;);
} catch (NumberFormatException e) {
    System.out.println(&quot;숫자를 입력해주세요.&quot;);
}</code></pre><h3 id="numberformatexception-e">NumberFormatException e</h3>
<p>숫자로 바꾸려고 했는데 숫자로 바꿀 수 없을 때 발생하는 오류</p>
<p>ex. Integer.parseInt(&quot;123&quot;);   // 정상
    Integer.parseInt(&quot;abc&quot;);   // NumberFormatException ( 오류</p>
<p>  <code>e</code>는 발생할 오류를 저장하는 변수 이름이다
  : 발생한 예외정보가 포함된다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[JAVA] 상속]]></title>
            <link>https://velog.io/@gy_uri03/JAVA-%EC%83%81%EC%86%8D</link>
            <guid>https://velog.io/@gy_uri03/JAVA-%EC%83%81%EC%86%8D</guid>
            <pubDate>Wed, 09 Sep 2026 13:59:43 GMT</pubDate>
            <description><![CDATA[<h1 id="상속이란">상속이란?</h1>
<p><strong>상속(Inheritance)</strong>은 기존 클래스의 <strong>필드와 메서드를 물려받아 새로운 클래스를 만드는 것</strong>이다.</p>
<p>기존 클래스의 기능을 그대로 재사용할 수 있기 때문에 <strong>코드의 중복을 줄이고 유지보수를 쉽게</strong> 할 수 있다.</p>
<h3 id="상속에서-물려받는-것">상속에서 물려받는 것</h3>
<ul>
<li><strong>필드(Field)</strong> → 클래스의 특성이나 상태를 나타냄</li>
<li><strong>메서드(Method)</strong> → 클래스의 동작이나 기능을 나타냄</li>
</ul>
<p>즉,</p>
<blockquote>
<p><strong>기존 클래스의 필드와 메서드를 물려받아 새로운 클래스를 만드는 것</strong></p>
</blockquote>
<p>이라고 이해하면 된다.</p>
<hr>
<h2 id="부모-클래스와-자식-클래스">부모 클래스와 자식 클래스</h2>
<p>상속 관계에서는 두 클래스를 다음과 같이 부른다.</p>
<ul>
<li><strong>부모 클래스(Super Class)</strong> → 상속을 해주는 클래스</li>
<li><strong>자식 클래스(Sub Class)</strong> → 부모 클래스를 상속받는 클래스</li>
</ul>
<p>Java에서는 <code>extends</code> 키워드를 사용하여 상속받을 수 있다.</p>
<pre><code class="language-java">class Animal {
    String name;

    void eat() {
        System.out.println(&quot;먹습니다.&quot;);
    }
}

class Dog extends Animal {
    void bark() {
        System.out.println(&quot;멍멍!&quot;);
    }
}</code></pre>
<p><code>Dog</code> 클래스는 <code>Animal</code> 클래스를 상속받았기 때문에
<code>Animal</code>의 <code>name</code> 필드와 <code>eat()</code> 메서드를 사용할 수 있다.</p>
<p>또한 <code>Dog</code>만의 새로운 메서드인 <code>bark()</code>도 추가할 수 있다.</p>
<hr>
<h2 id="상속의-특징">상속의 특징</h2>
<p>상속을 사용하면 부모 클래스의 기능을 <strong>재사용</strong>할 수 있다.</p>
<pre><code class="language-java">class Animal {
    void eat() {
        System.out.println(&quot;먹습니다.&quot;);
    }
}

class Dog extends Animal {
    void bark() {
        System.out.println(&quot;멍멍!&quot;);
    }
}</code></pre>
<pre><code class="language-java">Dog dog = new Dog();

dog.eat();   // 부모 클래스에서 상속받은 메서드
dog.bark();  // 자식 클래스에서 추가한 메서드</code></pre>
<p>실행 결과:</p>
<pre><code class="language-text">먹습니다.
멍멍!</code></pre>
<p>이처럼 자식 클래스는 <strong>부모 클래스의 기능을 사용할 수 있고, 필요한 기능을 추가할 수도 있다.</strong></p>
<hr>
<h2 id="상속을-사용하는-이유">상속을 사용하는 이유</h2>
<h3 id="1-코드-재사용">1. 코드 재사용</h3>
<p>이미 만들어진 부모 클래스의 필드와 메서드를 다시 작성하지 않고 사용할 수 있다.</p>
<h3 id="2-코드-중복-감소">2. 코드 중복 감소</h3>
<p>여러 클래스에서 공통적으로 사용하는 기능을 부모 클래스에 작성하면 중복 코드를 줄일 수 있다.</p>
<h3 id="3-유지보수-편리">3. 유지보수 편리</h3>
<p>공통 기능을 부모 클래스에서 관리하기 때문에 수정이 필요한 경우 부모 클래스의 코드를 수정하면 된다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[JAVA] String 빌더와 버퍼 클래스]]></title>
            <link>https://velog.io/@gy_uri03/JAVA-String-%EB%B9%8C%EB%8D%94%EC%99%80-%EB%B2%84%ED%8D%BC-%ED%81%B4%EB%9E%98%EC%8A%A4</link>
            <guid>https://velog.io/@gy_uri03/JAVA-String-%EB%B9%8C%EB%8D%94%EC%99%80-%EB%B2%84%ED%8D%BC-%ED%81%B4%EB%9E%98%EC%8A%A4</guid>
            <pubDate>Tue, 08 Sep 2026 14:51:12 GMT</pubDate>
            <description><![CDATA[<h1 id="stringbuilder">StringBuilder</h1>
<p><code>StringBuilder</code>는 문자열을 <strong>변경하거나 추가할 때 사용하는 클래스</strong>이다.</p>
<p><code>String</code>은 한 번 생성된 문자열을 직접 변경할 수 없는 <strong>불변(immutable) 객체</strong>이기 때문에 문자열을 자주 수정해야 한다면 <code>StringBuilder</code>를 사용하는 것이 효율적이다.</p>
<p>특히 문자열을 반복해서 연결하거나 수정할 때 새로운 <code>String</code> 객체를 계속 생성하는 것보다 메모리와 성능 측면에서 유리하다.</p>
<hr>
<h2 id="stringbuilder의-버퍼buffer">StringBuilder의 버퍼(Buffer)</h2>
<p><code>StringBuilder</code>는 문자열을 저장하기 위해 <strong>버퍼(Buffer)</strong>라는 공간을 사용한다.</p>
<h3 id="기본-생성자">기본 생성자</h3>
<pre><code class="language-java">StringBuilder sb = new StringBuilder();</code></pre>
<p>기본 버퍼 크기는 <strong>16개의 문자</strong>를 저장할 수 있다.</p>
<pre><code class="language-java">StringBuilder sb = new StringBuilder();

System.out.println(sb.capacity());</code></pre>
<p>실행 결과:</p>
<pre><code class="language-text">16</code></pre>
<p>버퍼의 공간이 부족해지면 <code>StringBuilder</code>가 <strong>자동으로 버퍼 크기를 늘린다.</strong></p>
<hr>
<h2 id="stringbuilderint-capacity">StringBuilder(int capacity)</h2>
<p>원하는 크기의 버퍼를 미리 지정할 수도 있다.</p>
<pre><code class="language-java">StringBuilder sb = new StringBuilder(50);</code></pre>
<p>위 코드는 <strong>50개의 문자를 저장할 수 있는 버퍼</strong>를 생성한다.</p>
<pre><code class="language-java">System.out.println(sb.capacity());</code></pre>
<p>실행 결과:</p>
<pre><code class="language-text">50</code></pre>
<blockquote>
<p>버퍼 크기를 미리 지정하면 문자열의 크기를 어느 정도 예상할 수 있는 경우 불필요한 버퍼 확장을 줄일 수 있다.</p>
</blockquote>
<hr>
<h2 id="stringbuilderstring-str">StringBuilder(String str)</h2>
<p>문자열을 초기값으로 지정할 수도 있다.</p>
<pre><code class="language-java">StringBuilder sb = new StringBuilder(&quot;Hello&quot;);</code></pre>
<p><code>&quot;Hello&quot;</code>가 버퍼의 초기 문자열로 저장된다.</p>
<pre><code class="language-java">System.out.println(sb);</code></pre>
<p>실행 결과:</p>
<pre><code class="language-text">Hello</code></pre>
<p>이때 기본 버퍼 크기인 16에 문자열의 길이가 더해져 <strong>초기 용량은 21</strong>이 된다.</p>
<hr>
<h1 id="stringbuilder와-스레드">StringBuilder와 스레드</h1>
<p><code>StringBuilder</code>를 이해하기 위해서는 <strong>스레드(Thread)</strong>의 개념도 알아야 한다.</p>
<h2 id="싱글스레드">싱글스레드</h2>
<p><strong>싱글스레드(Single Thread)</strong>는 하나의 프로세스에서 <strong>하나의 스레드가 작업을 수행하는 방식</strong>이다.</p>
<pre><code class="language-text">프로세스
   ↓
스레드 1
   ↓
작업 수행</code></pre>
<p>하나의 작업 흐름으로 프로그램이 실행된다.</p>
<hr>
<h2 id="멀티스레드">멀티스레드</h2>
<p><strong>멀티스레드(Multi Thread)</strong>는 하나의 프로세스에서 <strong>둘 이상의 스레드가 작업을 수행하는 방식</strong>이다.</p>
<pre><code class="language-text">프로세스
 ├─ 스레드 1
 ├─ 스레드 2
 └─ 스레드 3</code></pre>
<p>여러 스레드가 동시에 작업하거나 실행 흐름을 나누어 작업할 수 있다.</p>
<hr>
<h1 id="stringbuilder-vs-stringbuffer">StringBuilder vs StringBuffer</h1>
<p><code>StringBuilder</code>와 비슷한 클래스로 <code>StringBuffer</code>가 있다.</p>
<p>두 클래스 모두 문자열을 변경할 수 있는 <strong>가변(Mutable) 문자열 클래스</strong>이다.</p>
<table>
<thead>
<tr>
<th>구분</th>
<th>StringBuilder</th>
<th>StringBuffer</th>
</tr>
</thead>
<tbody><tr>
<td>문자열 변경</td>
<td>가능</td>
<td>가능</td>
</tr>
<tr>
<td>멀티스레드 환경</td>
<td>적합하지 않음</td>
<td>안전하게 사용 가능</td>
</tr>
<tr>
<td>동기화</td>
<td>지원하지 않음</td>
<td>지원</td>
</tr>
<tr>
<td>속도</td>
<td>상대적으로 빠름</td>
<td>상대적으로 느림</td>
</tr>
<tr>
<td>주 사용 환경</td>
<td>싱글스레드</td>
<td>멀티스레드</td>
</tr>
</tbody></table>
<p><code>StringBuffer</code>는 <strong>동기화(Synchronization)</strong>를 지원하기 때문에 여러 스레드가 동시에 접근하는 상황에서도 안전하게 사용할 수 있다.</p>
<p>반면 <code>StringBuilder</code>는 동기화를 지원하지 않는 대신 동기화에 따른 오버헤드가 없어 <strong>싱글스레드 환경에서 더 빠르게 사용할 수 있다.</strong></p>
<h3 id="정리">정리</h3>
<blockquote>
<p><strong>싱글스레드 → StringBuilder</strong>
<strong>멀티스레드 → StringBuffer</strong></p>
</blockquote>
<p>다만 실제 프로그램에서는 멀티스레드 환경이라고 해서 무조건 <code>StringBuffer</code>를 사용하는 것은 아니며, 공유 문자열에 대한 동시 접근이 필요한지 등을 고려해야 한다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[JAVA] 문자 관련 클래스]]></title>
            <link>https://velog.io/@gy_uri03/JAVA-%EB%AC%B8%EC%9E%90-%EA%B4%80%EB%A0%A8-%ED%81%B4%EB%9E%98%EC%8A%A4</link>
            <guid>https://velog.io/@gy_uri03/JAVA-%EB%AC%B8%EC%9E%90-%EA%B4%80%EB%A0%A8-%ED%81%B4%EB%9E%98%EC%8A%A4</guid>
            <pubDate>Mon, 07 Sep 2026 14:15:09 GMT</pubDate>
            <description><![CDATA[<h1 id="object-클래스">Object 클래스</h1>
<p>Object 클래스는 최상위 조상 클래스이다. 선언 시 <code>extend</code> 키워드로 다른 클래스를 상속하지 않으면 묵시적으로 <code>java.lang.Object</code> 클래스를 <strong>강제 상속</strong>하게 된다.</p>
<h2 id="주요-메소드">주요 메소드</h2>
<h3 id="1-clone-메소드"><strong>1) clone() 메소드</strong></h3>
<p>객체 자신을 복제하는 메소드로 반환 타입은 <strong>Object 타입</strong>으로 선언되어 있다. 따라서 타입에 맞게 사용하려면 형변환 연산이 필요하다. 복제 가능 클래스와 불가능 클래스가 있는데 <code>Cloneable</code> 인터페이스로 구현한 클래스는 바로 복제할 수 있다.</p>
<pre><code>package pack01;
import java.util.GregorianCalendar;

public class ObjectCloneEx {
    public static void main(String[] args) {
        GregorianCalendar cal1 = new GregorianCalendar(2024, 07,07);
        GregorianCalendar cal2 = (GregorianCalendar)cal1.clone();
        System.out.printf(&quot;%tF %n&quot;, cal1);
        System.out.printf(&quot;%tF %n&quot;, cal2);
        }
    }</code></pre><h3 id="2boolean-equalsobject-obj-메소드"><strong>2)boolean equals(Object obj) 메소드</strong></h3>
<p>비교하는 메소드로 두 객체가 같으면 <code>true</code> 다르면 <code>false</code>를 반환한다.</p>
<pre><code>package pack01;

class School {
    private String name;
    public School(String name) {
        this.name = name;
}
@Override
public boolean equals(Object obj) {
    if (obj instanceof School) {
        School school = (School) obj;
        return this.name == school.name;
    } else {
        return false;
        }
    }
}
public class EqualsEx1 {
    public static void main(String[] args) {
        School sch1 = new School(&quot;해피마이스터고&quot;);
        School sch2 = new School(&quot;해피마이스터고&quot;);
        System.out.println(&quot;sch1==sch2 : &quot;+(sch1==sch2));
        System.out.println(&quot;sch1.equals(sch2): &quot;+sch1.
        equals(sch2));
    }
}</code></pre><h3 id="3getclass-메소드"><strong>3)getClass() 메소드</strong></h3>
<p>참조하고 있는 클래스 정보를 얻기 위해 사용되는 메소드이다.</p>
<pre><code>package pack01;

import java.lang.reflect.Field;
import java.lang.reflect.Method;

class Rectangle {
    private int width, height;

    public Rectangle(int width, int height) {
        this.width = width;
        this.height = height;
    }

    public String toString() {
        return &quot;Rectangle [width=&quot; + width + &quot;, height=&quot; + height + &quot;]&quot;;
    }

    public int getArea() {
        return width * height;
    }
}

public class getClassEx {
    public static void main(String[] args) {
        Rectangle p = new Rectangle(2, 3);

        Class clss = p.getClass();

        System.out.println(clss.getName());
        System.out.println(clss.getSuperclass());

        Field field[] = clss.getDeclaredFields();

        System.out.println(
            &quot;field[0] : &quot; + field[0] + &quot;\n&quot; +
            &quot;field[1] : &quot; + field[1]
        );

        Method method[] = clss.getDeclaredMethods();

        System.out.println(
            &quot;method[0] : &quot; + method[0] + &quot;\n&quot; +
            &quot;method[1] : &quot; + method[1]
        );

        System.out.println(p.hashCode());
        System.out.println(p.toString());
        System.out.println(p);
    }
}</code></pre>]]></description>
        </item>
        <item>
            <title><![CDATA[[JAVA] 패키지]]></title>
            <link>https://velog.io/@gy_uri03/JAVA-%ED%8C%A8%ED%82%A4%EC%A7%80</link>
            <guid>https://velog.io/@gy_uri03/JAVA-%ED%8C%A8%ED%82%A4%EC%A7%80</guid>
            <pubDate>Mon, 07 Sep 2026 13:56:51 GMT</pubDate>
            <description><![CDATA[<h1 id="java-패키지란">Java 패키지란?</h1>
<p>Java에서 <strong>패키지(Package)</strong>는 관련 있는 클래스와 인터페이스를 하나로 묶어 관리하는 공간이다.</p>
<p>쉽게 생각하면 <strong>패키지 = 폴더</strong>라고 생각하면 이해하기 쉽다.</p>
<p>프로젝트가 커지면 클래스 파일이 많아지기 때문에 패키지를 이용하면 파일을 목적에 따라 나누어 관리할 수 있다.</p>
<blockquote>
<p>참고: <a href="https://docs.oracle.com/javase/8/docs/api/">Java API Documentation</a></p>
</blockquote>
<hr>
<h2 id="1-패키지의-기본-구조">1. 패키지의 기본 구조</h2>
<p>패키지에 속한 클래스나 인터페이스는 <strong>패키지 이름과 동일한 디렉터리</strong>에 저장된다.</p>
<p>예를 들어 다음과 같은 패키지가 있다고 하자.</p>
<pre><code class="language-java">package com.example.student;</code></pre>
<p>그러면 일반적으로 디렉터리 구조는 다음과 같이 구성된다.</p>
<pre><code class="language-text">src
└── com
    └── example
        └── student
            ├── Student.java
            └── Score.java</code></pre>
<p>즉</p>
<pre><code class="language-text">com.example.student</code></pre>
<p>이라는 패키지는 실제 디렉터리에서는</p>
<pre><code class="language-text">com/example/student</code></pre>
<p>형태로 표현된다.</p>
<hr>
<h1 id="2-디렉터리-계층-구조">2. 디렉터리 계층 구조</h1>
<p>Java 패키지는 <strong>다른 패키지를 포함하는 계층적인 구조</strong>로 만들 수 있다.</p>
<p>이때 패키지의 계층은 <strong>점(.)</strong>으로 구분한다.</p>
<p>예를 들어,</p>
<pre><code class="language-java">com.example
com.example.student
com.example.teacher</code></pre>
<p>와 같이 사용할 수 있다.</p>
<p>이를 디렉터리 구조로 표현하면 다음과 같다.</p>
<pre><code class="language-text">com
└── example
    ├── student
    └── teacher</code></pre>
<p>따라서 패키지 이름의 <code>.</code>은 디렉터리의 <code>/</code>와 대응된다고 생각하면 된다.</p>
<pre><code class="language-text">com.example.student
        ↓
com/example/student</code></pre>
<hr>
<h1 id="3-package-문">3. package 문</h1>
<p>클래스를 특정 패키지에 포함시키려면 클래스 파일의 가장 위쪽에 <code>package</code>를 작성한다.</p>
<pre><code class="language-java">package com.example.student;

public class Student {

}</code></pre>
<p>이렇게 작성하면 <code>Student</code> 클래스는</p>
<pre><code class="language-text">com.example.student</code></pre>
<p>패키지에 속하게 된다.</p>
<blockquote>
<p><code>package</code> 선언은 일반적으로 Java 파일의 가장 위쪽에 작성한다.</p>
</blockquote>
<hr>
<h1 id="4-import란">4. import란?</h1>
<p>다른 패키지에 있는 클래스를 사용하려면 <strong>import 문</strong>을 사용할 수 있다.</p>
<p><code>import</code>를 사용하면 클래스의 전체 패키지 경로를 매번 작성하지 않고 <strong>클래스 이름만으로 사용할 수 있다.</strong></p>
<p>예를 들어 Java에서 자주 사용하는 <code>Scanner</code> 클래스는</p>
<pre><code class="language-java">java.util.Scanner</code></pre>
<p>패키지에 포함되어 있다.</p>
<p>import를 사용하면 다음과 같이 작성할 수 있다.</p>
<pre><code class="language-java">import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
    }
}</code></pre>
<p><code>import</code>가 없다면 다음처럼 전체 이름을 작성해야 한다.</p>
<pre><code class="language-java">java.util.Scanner scanner =
    new java.util.Scanner(System.in);</code></pre>
<p>따라서 <code>import</code>를 사용하면 코드가 훨씬 간결해진다.</p>
<hr>
<h1 id="5-import-사용-방법">5. import 사용 방법</h1>
<p><code>import</code> 문은 <strong>클래스 선언보다 먼저</strong> 작성한다.</p>
<p>기본적인 형태는 다음과 같다.</p>
<pre><code class="language-java">import 패키지이름.클래스이름;</code></pre>
<p>또는</p>
<pre><code class="language-java">import 패키지이름.*;</code></pre>
<p>두 가지 방법이 있다.</p>
<hr>
<h2 id="①-특정-클래스만-import">① 특정 클래스만 import</h2>
<p>특정 패키지에서 <strong>하나의 클래스만 사용</strong>하고 싶다면 클래스 이름까지 작성한다.</p>
<pre><code class="language-java">import java.util.Scanner;</code></pre>
<p>이제 <code>Scanner</code>를 사용할 때</p>
<pre><code class="language-java">Scanner scanner = new Scanner(System.in);</code></pre>
<p>처럼 클래스 이름만 작성할 수 있다.</p>
<h3 id="형식">형식</h3>
<pre><code class="language-java">import 패키지이름.클래스이름;</code></pre>
<h3 id="예시">예시</h3>
<pre><code class="language-java">import java.util.ArrayList;</code></pre>
<p><code>java.util</code> 패키지의 <code>ArrayList</code>만 가져오는 것이다.</p>
<hr>
<h2 id="②-패키지의-모든-클래스를-import">② 패키지의 모든 클래스를 import</h2>
<p>특정 패키지에 있는 <strong>모든 클래스를 클래스 이름만으로 사용하고 싶다면</strong> <code>*</code>을 사용할 수 있다.</p>
<pre><code class="language-java">import java.util.*;</code></pre>
<p>이렇게 하면 <code>java.util</code> 패키지에 있는 여러 클래스를 사용할 수 있다.</p>
<p>예를 들어,</p>
<pre><code class="language-java">import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        ArrayList&lt;Integer&gt; list = new ArrayList&lt;&gt;();
    }
}</code></pre>
<p>위 코드에서는 <code>Scanner</code>와 <code>ArrayList</code>를 모두 클래스 이름만으로 사용할 수 있다.</p>
<h3 id="형식-1">형식</h3>
<pre><code class="language-java">import 패키지이름.*;</code></pre>
<hr>
<h1 id="6-import-정리">6. import 정리</h1>
<table>
<thead>
<tr>
<th>형태</th>
<th>설명</th>
</tr>
</thead>
<tbody><tr>
<td><code>import 패키지이름.클래스이름;</code></td>
<td>특정 클래스만 import</td>
</tr>
<tr>
<td><code>import 패키지이름.*;</code></td>
<td>해당 패키지의 모든 클래스를 import</td>
</tr>
</tbody></table>
<p>예를 들어,</p>
<pre><code class="language-java">import java.util.Scanner;</code></pre>
<p>→ <code>Scanner</code>만 사용</p>
<pre><code class="language-java">import java.util.*;</code></pre>
<p>→ <code>java.util</code> 패키지의 여러 클래스를 사용할 수 있음</p>
<hr>
<h1 id="💡-핵심-정리">💡 핵심 정리</h1>
<p>패키지는 Java에서 <strong>클래스와 인터페이스를 묶어서 관리하는 공간</strong>이다.</p>
<p>쉽게 말하면,</p>
<blockquote>
<p><strong>패키지 = 클래스들을 정리해 놓은 폴더</strong></p>
</blockquote>
<p>라고 생각하면 된다.</p>
<p>그리고 다른 패키지의 클래스를 사용할 때는 <code>import</code>를 사용한다.</p>
<pre><code class="language-text">package
  ↓
클래스들을 그룹으로 관리

import
  ↓
다른 패키지의 클래스를 간편하게 사용</code></pre>
<h3 id="한-줄-정리">한 줄 정리</h3>
<blockquote>
<p><strong>package는 클래스를 묶어 관리하기 위한 공간이고, import는 다른 패키지의 클래스를 쉽게 사용하기 위한 문법이다.</strong></p>
</blockquote>
]]></description>
        </item>
        <item>
            <title><![CDATA[[JAVA] final 필드와 상수]]></title>
            <link>https://velog.io/@gy_uri03/JAVA-final-%ED%95%84%EB%93%9C%EC%99%80-%EC%83%81%EC%88%98</link>
            <guid>https://velog.io/@gy_uri03/JAVA-final-%ED%95%84%EB%93%9C%EC%99%80-%EC%83%81%EC%88%98</guid>
            <pubDate>Tue, 11 Aug 2026 12:16:55 GMT</pubDate>
            <description><![CDATA[<h1 id="final이란">final이란?</h1>
<p><code>final</code>은 <strong>한 번 정해진 값을 변경할 수 없도록 만드는 키워드</strong>이다.</p>
<p>필드에 <code>final</code>을 붙이면 한 번 값이 할당된 이후에는 <strong>다시 값을 변경할 수 없는 상수 필드</strong>가 된다.</p>
<h3 id="final-선언">final 선언</h3>
<p><code>final</code> 필드는 다음과 같은 방법으로 초기화할 수 있다.</p>
<ul>
<li>선언과 동시에 초기화</li>
<li>생성자에서 초기화</li>
</ul>
<pre><code class="language-java">final int number = 10;</code></pre>
<p>또는 생성자에서 값을 지정할 수도 있다.</p>
<pre><code class="language-java">class Person {
    final String name;

    Person(String name) {
        this.name = name;
    }
}</code></pre>
<p><code>final</code> 필드는 <strong>한 번 초기화한 후에는 다른 값으로 변경할 수 없다.</strong></p>
<pre><code class="language-java">number = 20;  // ❌ 컴파일 오류</code></pre>
<p>즉, <code>final</code>은 <strong>값이 변경되지 않도록 제한할 때 사용하는 키워드</strong>이다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[JAVA] 가변인자]]></title>
            <link>https://velog.io/@gy_uri03/JAVA-%EA%B0%80%EB%B3%80%EC%9D%B8%EC%9E%90</link>
            <guid>https://velog.io/@gy_uri03/JAVA-%EA%B0%80%EB%B3%80%EC%9D%B8%EC%9E%90</guid>
            <pubDate>Tue, 11 Aug 2026 12:12:58 GMT</pubDate>
            <description><![CDATA[<h1 id="가변인자란">가변인자란?</h1>
<p>메소드에 전달되는 <strong>인자의 개수가 정해져 있지 않을 때</strong> 사용하는 기능이다.</p>
<p>가변인자를 사용하면 <strong>같은 타입의 여러 인자를 개수에 상관없이 전달</strong>할 수 있다.
선언할 때는 자료형 뒤에 <strong>점 세 개(<code>...</code>)</strong>를 붙여 사용한다.</p>
<pre><code class="language-java">void print(int... numbers) {
    // ...
}</code></pre>
<p>가변인자는 메소드 내부에서 <strong>배열처럼 사용할 수 있다.</strong></p>
<pre><code class="language-java">void print(int... numbers) {
    for (int number : numbers) {
        System.out.println(number);
    }
}</code></pre>
<p>따라서 다음과 같이 인자의 개수를 다르게 전달할 수 있다.</p>
<pre><code class="language-java">print(1);
print(1, 2, 3);
print(1, 2, 3, 4, 5);</code></pre>
<p>단, <strong>하나의 메소드에서는 가변인자를 하나만 사용할 수 있으며, 가변인자는 반드시 매개변수의 가장 마지막에 위치해야 한다.</strong></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[JAVA] 접근제어자]]></title>
            <link>https://velog.io/@gy_uri03/JAVA-%EC%A0%91%EA%B7%BC%EC%A0%9C%EC%96%B4%EC%9E%90</link>
            <guid>https://velog.io/@gy_uri03/JAVA-%EC%A0%91%EA%B7%BC%EC%A0%9C%EC%96%B4%EC%9E%90</guid>
            <pubDate>Sat, 01 Aug 2026 15:14:05 GMT</pubDate>
            <description><![CDATA[<h1 id="접근제어자란">접근제어자란?</h1>
<p>접근 제어자는 클래스, 변수, 메서드 등에 접근할 수 있는 범위를 제한하는 기능이다. 누가 사용할 수 있는지 권한을 정하는 역할이라고 생각하면 된다. 예를 들어, 게시글을 모든 사람이 볼 수 있게 할지, 작성자만 볼 수 있게 할지 설정하는 것과 비슷한 개념이다.</p>
<h2 id="자바의-접근제어자">자바의 접근제어자</h2>
<table>
<thead>
<tr>
<th align="center">접근 제어자</th>
<th>특징</th>
</tr>
</thead>
<tbody><tr>
<td align="center">public</td>
<td>어디에서나 접근 가능</td>
</tr>
<tr>
<td align="center">private</td>
<td>동일 클래스 내에서만 접근 가능</td>
</tr>
<tr>
<td align="center">protected</td>
<td>동일 패키지 혹은 하위 클래스에서 접근 가능</td>
</tr>
<tr>
<td align="center">default</td>
<td>동일 패키지에서만 접근 가능</td>
</tr>
</tbody></table>
<h3 id="접근-범위">접근 범위</h3>
<pre><code>public
   ↓
protected
   ↓
default
   ↓
private</code></pre><p>위로 갈수록 접근 범위가 넓고, 아래로 갈수록 접근 범위가 좁아진다.</p>
<h2 id="접근-제어자를-사용하는-이유">접근 제어자를 사용하는 이유</h2>
<p>접근 제어자를 사용하면 외부에서 중요한 데이터를 함부로 수정하는 것을 막을 수 있다. 예를 들어 학생의 점수는 0~100 사이만 저장되어야 한다고 가정해 보자. 접근 제어자가 없다면 외부에서 다음과 같이 잘못된 값을 넣을 수도 있다.</p>
<pre><code>student.score = -10;
student.score = 1000;</code></pre><p>이렇게 되면 프로그램의 데이터가 잘못될 수 있다.</p>
<p>반면 <code>private</code>으로 변수를 숨기고 <code>setter</code> 메서드를 통해 값을 변경하면 조건을 검사할 수 있다.</p>
<p>public class Student {</p>
<pre><code>    private int score;   // 외부에서 직접 접근 불가능

    public void setScore(int score) {
        if (score &gt;= 0 &amp;&amp; score &lt;= 100) {
            this.score = score;
        }
    }

    public int getScore() {
        return score;
    }
}</code></pre><p>이처럼 잘못된 값이 저장되는 것을 방지할 수 있다.</p>
<h2 id="접근-제어자를-사용하지-않았을-때의-문제점">접근 제어자를 사용하지 않았을 때의 문제점</h2>
<ul>
<li>외부에서 변수 값을 마음대로 변경할 수 있다.</li>
<li>잘못된 데이터가 저장될 수 있다.</li>
<li>프로그램의 안정성이 떨어진다.</li>
<li>변수에 직접 접근하여 검증(방어) 로직이 무력화된다.</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[JAVA] 클래스 전반]]></title>
            <link>https://velog.io/@gy_uri03/JAVA-%ED%81%B4%EB%9E%98%EC%8A%A4-%EC%A0%84%EB%B0%98-sdnertew</link>
            <guid>https://velog.io/@gy_uri03/JAVA-%ED%81%B4%EB%9E%98%EC%8A%A4-%EC%A0%84%EB%B0%98-sdnertew</guid>
            <pubDate>Fri, 31 Jul 2026 15:41:02 GMT</pubDate>
            <description><![CDATA[<h1 id="클래스class란">클래스(Class)란?</h1>
<p>클래스(Class)는 <strong>객체를 만들기 위한 설계도(틀)</strong>이다.<br>하나의 클래스로 여러 개의 객체를 생성하여 효율적으로 관리할 수 있다.</p>
<hr>
<h2 id="클래스-이름-작성-규칙">클래스 이름 작성 규칙</h2>
<ul>
<li>클래스 이름의 첫 글자는 <strong>대문자</strong>로 작성한다.</li>
<li>여러 단어로 이루어진 경우 <strong>파스칼 표기법(PascalCase)</strong>을 사용한다.</li>
</ul>
<pre><code class="language-java">Student
MemberInfo
BankAccount</code></pre>
<hr>
<h2 id="객체object-생성">객체(Object) 생성</h2>
<p>객체는 <code>new</code> 키워드를 사용하여 생성한다.</p>
<pre><code class="language-java">클래스명 객체명 = new 클래스명();</code></pre>
<h3 id="예시">예시</h3>
<pre><code class="language-java">Student st = new Student();</code></pre>
<blockquote>
<p>같은 클래스로 여러 개의 객체를 만들 수 있으며, 객체 이름만 다르게 작성하면 된다.</p>
</blockquote>
<hr>
<h2 id="인스턴스-변수필드">인스턴스 변수(필드)</h2>
<p>인스턴스 변수(필드)는 <strong>객체가 가지는 고유한 데이터를 저장하는 변수</strong>이다.</p>
<pre><code class="language-java">class Student {
    String name;
    int age;
}</code></pre>
<p><code>name</code>과 <code>age</code>가 인스턴스 변수(필드)이다.</p>
<hr>
<h2 id="main-메서드">main 메서드</h2>
<p><code>main()</code> 메서드는 <strong>프로그램이 처음 실행되는 시작 메서드</strong>이다.</p>
<pre><code class="language-java">public static void main(String[] args) {

}</code></pre>
<p><code>main()</code> 메서드 안에서 객체를 생성하고 프로그램을 실행한다. </p>
<h2 id="this-키워드">this 키워드</h2>
<p>메서드 안에서 인스턴스 변수를 명확하게 지정할 때 사용</p>
<pre><code>    public class BlackBox{
    String name;
    int price;
    String color;
    void appendname(String name){
        this.name = this.name + name;

    }
}</code></pre><blockquote>
<p><code>this.name</code> : 객체가 가지고 있는 인스턴스 변수 (ex.까망이)
<code>name</code> : 메서드를 호출할 때 전달받은 매개변수(ex.최신형)</p>
</blockquote>
<h2 id="기본-생성자">기본 생성자</h2>
<p>생성자는 new 키워드를 사용해 객체를 생성할 때 단 한 번 자동으로 실행되는 메서드 초기화 작업을 담당</p>
<h4 id="생성자-생성-규칙">생성자 생성 규칙</h4>
<ul>
<li>생성자의 이름은 클래스 이름과 같아야한다.</li>
<li>반환형을 적지 않으며, void도 쓰지 않는다.</li>
</ul>
<h2 id="사용자-정의-생성자">사용자 정의 생성자</h2>
<p>객체를 생성할 때 값을 함께 넣는다.</p>
<h2 id="생성자간-역할-분리-this">생성자간 역할 분리: this()</h2>
<p>같은 클래스에 만들어둔 다른 생성자를 호출하는 코드</p>
<p><strong>반드시 생성자의 첫 번째 줄에 위치해야함.</strong></p>
<h2 id="게터와-세터">게터와 세터</h2>
<h3 id="게터">게터</h3>
<p>인스턴스 변수의 값을 가져올 때 사용하는 메서드이다.</p>
<h3 id="세터">세터</h3>
<p>인스턴스 변수의 값을 설정할 때 사용하는 메서드이다.</p>
<pre><code>    void setPrice(int price){
        if(price &lt; 100000){
            this.price = 100000;
        }else {
            this.price = price;
        }
}</code></pre><p><strong>this</strong>
객체의 price에 전달받은 price를 저장해라.</p>
<pre><code>b2.setPrice (-5000)</code></pre><p>작성해도 세터가 감지해 최소 가격인 10,000으로 자동 보정</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[JAVA] 메서드]]></title>
            <link>https://velog.io/@gy_uri03/JAVA-%EB%A9%94%EC%84%9C%EB%93%9C</link>
            <guid>https://velog.io/@gy_uri03/JAVA-%EB%A9%94%EC%84%9C%EB%93%9C</guid>
            <pubDate>Wed, 29 Jul 2026 15:12:22 GMT</pubDate>
            <description><![CDATA[<h1 id="java-메서드method">Java 메서드(Method)</h1>
<h2 id="메서드란">메서드란?</h2>
<p>메서드(Method)는 <strong>특정 작업을 수행하는 코드의 묶음</strong>이다.</p>
<p>프로그램을 기능별로 나누어 작성할 수 있으며, <strong>필요할 때마다 호출하여 재사용</strong>할 수 있다.</p>
<h3 id="메서드의-장점">메서드의 장점</h3>
<ul>
<li>코드의 <strong>재사용</strong>이 가능하다.</li>
<li>중복 코드를 줄일 수 있다.</li>
<li>프로그램을 더 <strong>간결하고 체계적</strong>으로 작성할 수 있다.</li>
<li>유지보수가 쉬워진다.</li>
</ul>
<hr>
<h1 id="메서드-정의하기">메서드 정의하기</h1>
<p>메서드는 다음과 같은 형태로 정의한다.</p>
<pre><code class="language-java">접근제한자 반환형 메서드명() {
    실행할 코드
}</code></pre>
<p>예시</p>
<pre><code class="language-java">public class Method {

    public static void say() {
        System.out.println(&quot;안녕하세요&quot;);
    }

    public static void main(String[] args) {

    }
}</code></pre>
<h3 id="코드-설명">코드 설명</h3>
<ul>
<li><code>public</code> : 어디서든 접근 가능</li>
<li><code>static</code> : 객체를 생성하지 않고 사용할 수 있음</li>
<li><code>void</code> : 반환값이 없음</li>
<li><code>say()</code> : 메서드 이름</li>
</ul>
<hr>
<h1 id="메서드-이름-짓기-규칙">메서드 이름 짓기 규칙</h1>
<ul>
<li>소문자로 시작한다.</li>
<li><strong>카멜 표기법(Camel Case)</strong>을 사용한다.</li>
<li>메서드의 기능을 알 수 있는 이름을 사용한다.</li>
</ul>
<p>예시</p>
<pre><code class="language-java">printName()
sumNumber()
getScore()</code></pre>
<hr>
<h1 id="메서드-호출하기">메서드 호출하기</h1>
<p>정의한 메서드는 <strong>메서드 이름</strong>을 이용하여 호출할 수 있다.</p>
<pre><code class="language-java">public class Method {

    public static void say() {
        System.out.println(&quot;안녕하세요&quot;);
    }

    public static void main(String[] args) {

        System.out.println(&quot;메서드 호출 전&quot;);

        say();

        System.out.println(&quot;메서드 호출 후&quot;);
    }
}</code></pre>
<h3 id="실행-결과">실행 결과</h3>
<pre><code class="language-text">메서드 호출 전
안녕하세요
메서드 호출 후</code></pre>
<h3 id="실행-순서">실행 순서</h3>
<ol>
<li><code>&quot;메서드 호출 전&quot;</code> 출력</li>
<li><code>say()</code> 호출</li>
<li><code>&quot;안녕하세요&quot;</code> 출력</li>
<li><code>main()</code>으로 돌아옴</li>
<li><code>&quot;메서드 호출 후&quot;</code> 출력</li>
</ol>
<hr>
<h1 id="메서드의-가장-큰-장점">메서드의 가장 큰 장점</h1>
<p>메서드는 <strong>재사용</strong>할 수 있다는 것이 가장 큰 장점이다.</p>
<p>예를 들어 같은 문장을 여러 번 출력해야 한다면,</p>
<pre><code class="language-java">say();
say();
say();</code></pre>
<p>처럼 메서드를 여러 번 호출하면 된다.</p>
<p>같은 코드를 반복해서 작성하지 않아도 되므로 코드가 훨씬 깔끔해진다.</p>
<hr>
<h1 id="반환값return-value이-있는-메서드">반환값(Return Value)이 있는 메서드</h1>
<p>메서드는 작업을 수행한 후 <strong>결과를 호출한 곳으로 돌려줄 수 있다.</strong></p>
<p>이때 사용하는 키워드가 <code>return</code>이다.</p>
<h2 id="문법">문법</h2>
<pre><code class="language-java">접근제한자 반환형 메서드명() {
    return 반환값;
}</code></pre>
<hr>
<h1 id="void와-return"><code>void</code>와 <code>return</code></h1>
<h3 id="void"><code>void</code></h3>
<p><code>void</code>는 <strong>반환할 값이 없다</strong>는 의미이다.</p>
<pre><code class="language-java">public static void say() {
    System.out.println(&quot;안녕하세요&quot;);
}</code></pre>
<p>위 메서드는 화면에 출력만 하고 아무 값도 돌려주지 않는다.</p>
<hr>
<h3 id="return"><code>return</code></h3>
<p><code>return</code>은 <strong>메서드의 실행 결과를 호출한 곳으로 반환</strong>하는 키워드이다.</p>
<pre><code class="language-java">public static int add() {
    return 10 + 20;
}</code></pre>
<p><code>return</code>을 만나면 메서드가 종료되고, 결과값이 호출한 곳으로 전달된다.</p>
<hr>
<h1 id="반환값이-있는-메서드-예제">반환값이 있는 메서드 예제</h1>
<pre><code class="language-java">public class Method {

    public static int add() {
        return 10 + 20;
    }

    public static void main(String[] args) {

        int result = add();

        System.out.println(result);
    }
}</code></pre>
<h3 id="실행-결과-1">실행 결과</h3>
<pre><code class="language-text">30</code></pre>
<p><code>add()</code>가 반환한 값 <code>30</code>이 <code>result</code>에 저장된다.</p>
<hr>
<h1 id="반환값-활용하기">반환값 활용하기</h1>
<p>반환된 값은 변수에 저장하거나 계산에 사용할 수 있다.</p>
<pre><code class="language-java">int result = add();

System.out.println(result);

System.out.println(add() + 10);</code></pre>
<p>출력 결과</p>
<pre><code class="language-text">30
40</code></pre>
<p>즉, 반환된 값은 다른 계산에 자유롭게 사용할 수 있다.</p>
<hr>
<h1 id="java-메서드-오버로딩overloading">Java 메서드 오버로딩(Overloading)</h1>
<h3 id="메서드-오버로딩이란">메서드 오버로딩이란?</h3>
<blockquote>
<p>메서드 이름은 같지만, 매개변수(전달값)의 자료형이나 개수가 다른 메서드를 여러 개 만드는 것을 말한다.</p>
</blockquote>
<blockquote>
<p>즉, 같은 기능을 수행하지만 전달받는 값이 다를 때 하나의 이름으로 여러 메서드를 정의할 수 있다.</p>
</blockquote>
<h2 id="오버로딩-규칙">오버로딩 규칙</h2>
<table>
<thead>
<tr>
<th align="left">구분</th>
<th align="left">메서드 이름</th>
<th align="left">매개변수(전달값)</th>
<th align="center">반환형</th>
<th align="center">오버로딩</th>
<th align="left">이유</th>
</tr>
</thead>
<tbody><tr>
<td align="left">기존 메서드</td>
<td align="left"><code>getPower</code></td>
<td align="left"><code>int number</code></td>
<td align="center"><code>int</code></td>
<td align="center">-</td>
<td align="left">기준 메서드</td>
</tr>
<tr>
<td align="left">사례 1</td>
<td align="left"><code>getPower</code></td>
<td align="left"><code>String strNumber</code></td>
<td align="center"><code>int</code></td>
<td align="center">✅ 가능</td>
<td align="left">매개변수의 <strong>자료형</strong>이 다르다.</td>
</tr>
<tr>
<td align="left">사례 2</td>
<td align="left"><code>getPower</code></td>
<td align="left"><code>int number, int exponent</code></td>
<td align="center"><code>int</code></td>
<td align="center">✅ 가능</td>
<td align="left">매개변수의 <strong>개수</strong>가 다르다.</td>
</tr>
<tr>
<td align="left">사례 3</td>
<td align="left"><code>getPower</code></td>
<td align="left"><code>int number</code></td>
<td align="center"><code>double</code></td>
<td align="center">❌ 불가능</td>
<td align="left"><strong>반환형만</strong> 다르고 매개변수가 같다.</td>
</tr>
</tbody></table>
]]></description>
        </item>
        <item>
            <title><![CDATA[[JAVA] 랜덤값 생성]]></title>
            <link>https://velog.io/@gy_uri03/JAVA-%EB%9E%9C%EB%8D%A4%EA%B0%92-%EC%83%9D%EC%84%B1</link>
            <guid>https://velog.io/@gy_uri03/JAVA-%EB%9E%9C%EB%8D%A4%EA%B0%92-%EC%83%9D%EC%84%B1</guid>
            <pubDate>Wed, 29 Jul 2026 14:22:06 GMT</pubDate>
            <description><![CDATA[<h1 id="mathrandom"><code>Math.random()</code></h1>
<p><code>Math.random()</code>은 <strong>0.0 이상 1.0 미만</strong>의 실수(<code>double</code>)를 반환한다.</p>
<pre><code class="language-java">double rand = Math.random();</code></pre>
<p>반환 범위</p>
<pre><code>0.0 &lt;= Math.random() &lt; 1.0</code></pre><hr>
<h2 id="16까지의-랜덤-값-만들기">1~6까지의 랜덤 값 만들기</h2>
<pre><code class="language-java">int dice = (int)(Math.random() * 6) + 1;</code></pre>
<h3 id="동작-과정">동작 과정</h3>
<p>예를 들어 <code>Math.random()</code>이 <code>0.73</code>을 반환했다고 가정하면,</p>
<ol>
<li><code>0.73 × 6 = 4.38</code></li>
<li><code>(int)</code>로 형변환하면 소수점이 버려져 <code>4</code></li>
<li><code>+1</code>을 하면 <code>5</code></li>
</ol>
<p>즉, 결과는 <strong>1~6</strong> 사이의 정수가 된다.</p>
<h3 id="범위-변화">범위 변화</h3>
<table>
<thead>
<tr>
<th>계산식</th>
<th>범위</th>
</tr>
</thead>
<tbody><tr>
<td><code>Math.random()</code></td>
<td><code>0.0 ~ 0.999...</code></td>
</tr>
<tr>
<td><code>Math.random() * 6</code></td>
<td><code>0.0 ~ 5.999...</code></td>
</tr>
<tr>
<td><code>(int)(...)</code></td>
<td><code>0 ~ 5</code></td>
</tr>
<tr>
<td><code>+1</code></td>
<td><code>1 ~ 6</code></td>
</tr>
</tbody></table>
<hr>
<h2 id="1020까지의-랜덤-값-만들기">10~20까지의 랜덤 값 만들기</h2>
<p>공식은 다음과 같다.</p>
<pre><code class="language-java">int num = (int)(Math.random() * (20 - 10 + 1)) + 10;</code></pre>
<p>일반 공식</p>
<pre><code class="language-java">(int)(Math.random() * (최대값 - 최소값 + 1)) + 최소값</code></pre>
<h3 id="동작-과정-1">동작 과정</h3>
<p>예를 들어 <code>Math.random()</code>이 <code>0.81</code>을 반환했다고 가정하면,</p>
<ol>
<li><code>20 - 10 + 1 = 11</code></li>
<li><code>0.81 × 11 = 8.91</code></li>
<li><code>(int)</code> 형변환 → <code>8</code></li>
<li><code>8 + 10 = 18</code></li>
</ol>
<p>따라서 <strong>10~20</strong> 사이의 정수가 반환된다.</p>
<h3 id="범위-변화-1">범위 변화</h3>
<table>
<thead>
<tr>
<th>계산식</th>
<th>범위</th>
</tr>
</thead>
<tbody><tr>
<td><code>Math.random()</code></td>
<td><code>0.0 ~ 0.999...</code></td>
</tr>
<tr>
<td><code>Math.random() * 11</code></td>
<td><code>0.0 ~ 10.999...</code></td>
</tr>
<tr>
<td><code>(int)(...)</code></td>
<td><code>0 ~ 10</code></td>
</tr>
<tr>
<td><code>+10</code></td>
<td><code>10 ~ 20</code></td>
</tr>
</tbody></table>
<hr>
<h2 id="랜덤-범위-공식">랜덤 범위 공식</h2>
<pre><code class="language-java">(int)(Math.random() * (최대값 - 최소값 + 1)) + 최소값</code></pre>
<h3 id="예시">예시</h3>
<pre><code class="language-java">// 1~100
int num = (int)(Math.random() * 100) + 1;

// 50~100
int num = (int)(Math.random() * (100 - 50 + 1)) + 50;

// 10~20
int num = (int)(Math.random() * (20 - 10 + 1)) + 10;</code></pre>
<blockquote>
<p><strong>핵심 포인트</strong></p>
<ul>
<li><code>Math.random()</code>은 <strong>0.0 이상 1.0 미만</strong>의 실수를 반환한다.</li>
<li><code>* (최대값 - 최소값 + 1)</code>로 원하는 범위의 개수를 만든다.</li>
<li><code>(int)</code>를 사용하면 소수점이 버려져 정수가 된다.</li>
<li>마지막에 <code>+ 최소값</code>을 해 원하는 시작 값으로 이동시킨다.</li>
</ul>
</blockquote>
<h1 id="random-클래스"><code>Random</code> 클래스</h1>
<p><code>Random</code> 클래스는 <code>java.util</code> 패키지에 포함되어 있으며, 객체를 생성한 후 랜덤 값을 생성하는 방식이다.</p>
<p><code>Math.random()</code>과 달리 <strong>형변환(casting)이 필요 없고</strong>, 원하는 자료형의 값을 바로 얻을 수 있다는 장점이 있다.</p>
<pre><code class="language-java">import java.util.Random;

Random random = new Random();</code></pre>
<hr>
<h1 id="16까지의-랜덤-값-만들기-1">1~6까지의 랜덤 값 만들기</h1>
<pre><code class="language-java">int dice = random.nextInt(6) + 1;</code></pre>
<h3 id="동작-과정-2">동작 과정</h3>
<p><code>nextInt(6)</code>은 <strong>0 이상 6 미만</strong>의 정수를 반환한다.</p>
<p>즉,</p>
<pre><code class="language-text">0, 1, 2, 3, 4, 5</code></pre>
<p>여기에 <code>+1</code>을 하면</p>
<pre><code class="language-text">1, 2, 3, 4, 5, 6</code></pre>
<p>즉, <strong>1~6</strong> 사이의 정수가 생성된다.</p>
<h3 id="범위-변화-2">범위 변화</h3>
<table>
<thead>
<tr>
<th>계산식</th>
<th>범위</th>
</tr>
</thead>
<tbody><tr>
<td><code>random.nextInt(6)</code></td>
<td><code>0 ~ 5</code></td>
</tr>
<tr>
<td><code>+1</code></td>
<td><code>1 ~ 6</code></td>
</tr>
</tbody></table>
<hr>
<h1 id="1020까지의-랜덤-값-만들기-1">10~20까지의 랜덤 값 만들기</h1>
<pre><code class="language-java">int num = random.nextInt(11) + 10;</code></pre>
<h3 id="동작-과정-3">동작 과정</h3>
<ol>
<li><code>20 - 10 + 1 = 11</code></li>
<li><code>nextInt(11)</code> → <code>0 ~ 10</code></li>
<li><code>+10</code> → <code>10 ~ 20</code></li>
</ol>
<h3 id="범위-변화-3">범위 변화</h3>
<table>
<thead>
<tr>
<th>계산식</th>
<th>범위</th>
</tr>
</thead>
<tbody><tr>
<td><code>random.nextInt(11)</code></td>
<td><code>0 ~ 10</code></td>
</tr>
<tr>
<td><code>+10</code></td>
<td><code>10 ~ 20</code></td>
</tr>
</tbody></table>
<hr>
<h1 id="일반-공식">일반 공식</h1>
<pre><code class="language-java">random.nextInt(최대값 - 최소값 + 1) + 최소값</code></pre>
<h3 id="예시-1">예시</h3>
<pre><code class="language-java">// 1~100
int num = random.nextInt(100) + 1;

// 50~100
int num = random.nextInt(100 - 50 + 1) + 50;

// 10~20
int num = random.nextInt(20 - 10 + 1) + 10;</code></pre>
<hr>
<h1 id="threadlocalrandom"><code>ThreadLocalRandom</code></h1>
<p><code>ThreadLocalRandom</code>은 <code>java.util.concurrent</code> 패키지에 포함된 클래스로, <strong>멀티스레드 환경에서 성능이 좋은 랜덤 클래스</strong>이다.</p>
<p>객체를 직접 생성하지 않고 <code>current()</code> 메서드를 통해 사용할 수 있다.</p>
<pre><code class="language-java">import java.util.concurrent.ThreadLocalRandom;</code></pre>
<hr>
<h1 id="16까지의-랜덤-값-만들기-2">1~6까지의 랜덤 값 만들기</h1>
<pre><code class="language-java">int dice = ThreadLocalRandom.current().nextInt(1, 7);</code></pre>
<p><code>nextInt(시작값, 끝값)</code>에서 <strong>끝값은 포함되지 않는다.</strong></p>
<p>따라서</p>
<pre><code class="language-text">nextInt(1, 7)</code></pre>
<p>은 <strong>1 이상 7 미만</strong>, 즉 <strong>1~6</strong>의 정수를 반환한다.</p>
<h3 id="범위">범위</h3>
<table>
<thead>
<tr>
<th>계산식</th>
<th>범위</th>
</tr>
</thead>
<tbody><tr>
<td><code>nextInt(1, 7)</code></td>
<td><code>1 ~ 6</code></td>
</tr>
</tbody></table>
<hr>
<h1 id="실수-랜덤-값-만들기">실수 랜덤 값 만들기</h1>
<pre><code class="language-java">double randDouble = ThreadLocalRandom.current().nextDouble();</code></pre>
<p>반환 범위</p>
<pre><code class="language-text">0.0 &lt;= 값 &lt; 1.0</code></pre>
<p>즉, <code>Math.random()</code>과 동일하게 <strong>0.0 이상 1.0 미만</strong>의 실수를 반환한다.</p>
<hr>
<h1 id="원하는-범위의-정수-만들기">원하는 범위의 정수 만들기</h1>
<pre><code class="language-java">// 10~20
int num = ThreadLocalRandom.current().nextInt(10, 21);</code></pre>
<p><code>nextInt(10, 21)</code>은</p>
<ul>
<li>시작값(10)은 포함</li>
<li>끝값(21)은 포함하지 않으므로</li>
</ul>
<p>결과는 <strong>10~20</strong>이 된다.</p>
<hr>
<h1 id="정리">정리</h1>
<table>
<thead>
<tr>
<th>방식</th>
<th>특징</th>
</tr>
</thead>
<tbody><tr>
<td><code>Math.random()</code></td>
<td>가장 간단하지만 <code>double</code>을 반환하므로 형변환이 필요하다.</td>
</tr>
<tr>
<td><code>Random</code></td>
<td>객체를 생성해야 하지만 원하는 자료형을 바로 얻을 수 있다.</td>
</tr>
<tr>
<td><code>ThreadLocalRandom</code></td>
<td>객체 생성이 필요 없고, 멀티스레드 환경에서 성능이 뛰어나며 범위를 지정하기 쉽다.</td>
</tr>
</tbody></table>
<blockquote>
<p><strong>핵심 포인트</strong></p>
<ul>
<li><code>Random</code>은 <code>nextInt(범위) + 최소값</code> 형태를 사용한다.</li>
<li><code>ThreadLocalRandom</code>은 <code>nextInt(최소값, 최대값 + 1)</code> 형태를 사용한다.</li>
<li><code>ThreadLocalRandom</code>의 <strong>끝값은 포함되지 않는다.</strong></li>
</ul>
</blockquote>
]]></description>
        </item>
        <item>
            <title><![CDATA[[JAVA]연산자 우선순위]]></title>
            <link>https://velog.io/@gy_uri03/JAVA%EC%97%B0%EC%82%B0%EC%9E%90-%EC%9A%B0%EC%84%A0%EC%88%9C%EC%9C%84</link>
            <guid>https://velog.io/@gy_uri03/JAVA%EC%97%B0%EC%82%B0%EC%9E%90-%EC%9A%B0%EC%84%A0%EC%88%9C%EC%9C%84</guid>
            <pubDate>Mon, 27 Jul 2026 11:03:05 GMT</pubDate>
            <description><![CDATA[<h1 id="java-연산자operator">Java 연산자(Operator)</h1>
<p>연산자는 <strong>데이터를 계산하거나 비교, 논리 판단 등을 수행하기 위해 사용하는 기호</strong>이다.</p>
<hr>
<h1 id="산술-연산자">산술 연산자</h1>
<p>산술 연산자는 숫자 값을 계산할 때 사용한다.</p>
<table>
<thead>
<tr>
<th>연산자</th>
<th>설명</th>
<th>예시</th>
</tr>
</thead>
<tbody><tr>
<td><code>+</code></td>
<td>덧셈</td>
<td><code>10 + 5</code> → <code>15</code></td>
</tr>
<tr>
<td><code>-</code></td>
<td>뺄셈</td>
<td><code>10 - 5</code> → <code>5</code></td>
</tr>
<tr>
<td><code>*</code></td>
<td>곱셈</td>
<td><code>10 * 5</code> → <code>50</code></td>
</tr>
<tr>
<td><code>/</code></td>
<td>나눗셈</td>
<td><code>10 / 5</code> → <code>2</code></td>
</tr>
<tr>
<td><code>%</code></td>
<td>나머지</td>
<td><code>10 % 3</code> → <code>1</code></td>
</tr>
</tbody></table>
<pre><code class="language-java">int a = 10;
int b = 3;

System.out.println(a + b); // 13
System.out.println(a - b); // 7
System.out.println(a * b); // 30
System.out.println(a / b); // 3
System.out.println(a % b); // 1</code></pre>
<hr>
<h1 id="관계비교-연산자">관계(비교) 연산자</h1>
<p>두 값을 비교하여 <strong>true 또는 false</strong>를 반환한다.</p>
<table>
<thead>
<tr>
<th>연산자</th>
<th>설명</th>
</tr>
</thead>
<tbody><tr>
<td><code>&lt;</code></td>
<td>작다</td>
</tr>
<tr>
<td><code>&gt;</code></td>
<td>크다</td>
</tr>
<tr>
<td><code>&lt;=</code></td>
<td>작거나 같다</td>
</tr>
<tr>
<td><code>&gt;=</code></td>
<td>크거나 같다</td>
</tr>
<tr>
<td><code>==</code></td>
<td>같다</td>
</tr>
<tr>
<td><code>!=</code></td>
<td>같지 않다</td>
</tr>
</tbody></table>
<pre><code class="language-java">int a = 10;
int b = 20;

System.out.println(a &lt; b);   // true
System.out.println(a == b);  // false
System.out.println(a != b);  // true</code></pre>
<hr>
<h1 id="논리-연산자">논리 연산자</h1>
<p>여러 조건을 함께 비교할 때 사용한다.</p>
<h2 id="and-">AND (<code>&amp;&amp;</code>)</h2>
<p><strong>두 조건이 모두 true일 때만 true</strong></p>
<table>
<thead>
<tr>
<th>A</th>
<th>B</th>
<th>결과</th>
</tr>
</thead>
<tbody><tr>
<td>true</td>
<td>true</td>
<td>true</td>
</tr>
<tr>
<td>true</td>
<td>false</td>
<td>false</td>
</tr>
<tr>
<td>false</td>
<td>true</td>
<td>false</td>
</tr>
<tr>
<td>false</td>
<td>false</td>
<td>false</td>
</tr>
</tbody></table>
<pre><code class="language-java">System.out.println(10 &gt; 5 &amp;&amp; 5 &gt; 3); // true</code></pre>
<hr>
<h2 id="or-">OR (<code>||</code>)</h2>
<p><strong>둘 중 하나만 true여도 true</strong></p>
<table>
<thead>
<tr>
<th>A</th>
<th>B</th>
<th>결과</th>
</tr>
</thead>
<tbody><tr>
<td>true</td>
<td>true</td>
<td>true</td>
</tr>
<tr>
<td>true</td>
<td>false</td>
<td>true</td>
</tr>
<tr>
<td>false</td>
<td>true</td>
<td>true</td>
</tr>
<tr>
<td>false</td>
<td>false</td>
<td>false</td>
</tr>
</tbody></table>
<pre><code class="language-java">System.out.println(10 &gt; 5 || 5 &lt; 3); // true</code></pre>
<hr>
<h2 id="not-">NOT (<code>!</code>)</h2>
<p>논리값을 반대로 바꾼다.</p>
<pre><code class="language-java">boolean check = true;

System.out.println(!check); // false</code></pre>
<blockquote>
<p><strong>참고</strong></p>
<ul>
<li><code>&amp;&amp;</code>, <code>||</code> : 논리 연산자(주로 사용)</li>
<li><code>&amp;</code>, <code>|</code> : 비트 연산자이면서 boolean에서도 사용 가능하지만, <strong>모든 조건을 끝까지 검사</strong>한다.</li>
</ul>
</blockquote>
<hr>
<h1 id="증감-연산자">증감 연산자</h1>
<p>변수의 값을 <strong>1 증가 또는 감소</strong>시킨다.</p>
<table>
<thead>
<tr>
<th>연산자</th>
<th>설명</th>
</tr>
</thead>
<tbody><tr>
<td><code>++</code></td>
<td>1 증가</td>
</tr>
<tr>
<td><code>--</code></td>
<td>1 감소</td>
</tr>
</tbody></table>
<pre><code class="language-java">int num = 10;

num++;
System.out.println(num); // 11

num--;
System.out.println(num); // 10</code></pre>
<h3 id="전위형과-후위형">전위형과 후위형</h3>
<pre><code class="language-java">int a = 10;

System.out.println(++a); // 11 (먼저 증가)
System.out.println(a++); // 11 (출력 후 증가)
System.out.println(a);   // 12</code></pre>
<hr>
<h1 id="비트-연산자">비트 연산자</h1>
<p>비트를 기준으로 계산하는 연산자이다.</p>
<table>
<thead>
<tr>
<th>연산자</th>
<th>설명</th>
</tr>
</thead>
<tbody><tr>
<td><code>&amp;</code></td>
<td>비트 AND</td>
</tr>
<tr>
<td><code>|</code></td>
<td>비트 OR</td>
</tr>
<tr>
<td><code>^</code></td>
<td>비트 XOR</td>
</tr>
<tr>
<td><code>~</code></td>
<td>비트 NOT</td>
</tr>
<tr>
<td><code>&lt;&lt;</code></td>
<td>왼쪽 시프트</td>
</tr>
<tr>
<td><code>&gt;&gt;</code></td>
<td>오른쪽 시프트</td>
</tr>
<tr>
<td><code>&gt;&gt;&gt;</code></td>
<td>부호 없는 오른쪽 시프트</td>
</tr>
</tbody></table>
<p>예시</p>
<pre><code class="language-java">System.out.println(5 &amp; 3); // 1
System.out.println(5 | 3); // 7</code></pre>
<hr>
<h1 id="대입-연산자">대입 연산자</h1>
<p>변수에 값을 저장하거나 계산한 결과를 다시 저장한다.</p>
<table>
<thead>
<tr>
<th>연산자</th>
<th>의미</th>
</tr>
</thead>
<tbody><tr>
<td><code>=</code></td>
<td>대입</td>
</tr>
<tr>
<td><code>+=</code></td>
<td>더한 후 저장</td>
</tr>
<tr>
<td><code>-=</code></td>
<td>뺀 후 저장</td>
</tr>
<tr>
<td><code>*=</code></td>
<td>곱한 후 저장</td>
</tr>
<tr>
<td><code>/=</code></td>
<td>나눈 후 저장</td>
</tr>
<tr>
<td><code>%=</code></td>
<td>나머지 저장</td>
</tr>
</tbody></table>
<pre><code class="language-java">int num = 10;

num += 5; // 15
num -= 3; // 12
num *= 2; // 24</code></pre>
<hr>
<h1 id="조건삼항-연산자">조건(삼항) 연산자</h1>
<p>조건에 따라 두 가지 결과 중 하나를 선택한다.</p>
<h3 id="문법">문법</h3>
<pre><code class="language-java">조건 ? 처리1 : 처리2</code></pre>
<ul>
<li>조건이 <strong>참(true)</strong>이면 <code>처리1</code></li>
<li>조건이 <strong>거짓(false)</strong>이면 <code>처리2</code></li>
</ul>
<pre><code class="language-java">int score = 80;

String result = score &gt;= 60 ? &quot;합격&quot; : &quot;불합격&quot;;

System.out.println(result); // 합격</code></pre>
<hr>
<h1 id="연산자-우선순위">연산자 우선순위</h1>
<table>
<thead>
<tr>
<th align="right">순위</th>
<th>연산자</th>
<th>설명</th>
<th>결합 방향</th>
<th></th>
<th></th>
</tr>
</thead>
<tbody><tr>
<td align="right">1</td>
<td><code>()</code>, <code>[]</code>, <code>.</code></td>
<td>괄호, 배열 접근, 멤버 접근</td>
<td>왼쪽 → 오른쪽</td>
<td></td>
<td></td>
</tr>
<tr>
<td align="right">2</td>
<td><code>++</code>, <code>--</code>, <code>+</code>, <code>-</code>, <code>!</code>, <code>~</code></td>
<td>단항 연산자</td>
<td>오른쪽 → 왼쪽</td>
<td></td>
<td></td>
</tr>
<tr>
<td align="right">3</td>
<td><code>*</code>, <code>/</code>, <code>%</code></td>
<td>곱셈, 나눗셈, 나머지</td>
<td>왼쪽 → 오른쪽</td>
<td></td>
<td></td>
</tr>
<tr>
<td align="right">4</td>
<td><code>+</code>, <code>-</code></td>
<td>덧셈, 뺄셈</td>
<td>왼쪽 → 오른쪽</td>
<td></td>
<td></td>
</tr>
<tr>
<td align="right">5</td>
<td><code>&lt;&lt;</code>, <code>&gt;&gt;</code>, <code>&gt;&gt;&gt;</code></td>
<td>시프트 연산자</td>
<td>왼쪽 → 오른쪽</td>
<td></td>
<td></td>
</tr>
<tr>
<td align="right">6</td>
<td><code>&lt;</code>, <code>&lt;=</code>, <code>&gt;</code>, <code>&gt;=</code>, <code>instanceof</code></td>
<td>비교 연산자</td>
<td>왼쪽 → 오른쪽</td>
<td></td>
<td></td>
</tr>
<tr>
<td align="right">7</td>
<td><code>==</code>, <code>!=</code></td>
<td>등가 연산자</td>
<td>왼쪽 → 오른쪽</td>
<td></td>
<td></td>
</tr>
<tr>
<td align="right">8</td>
<td><code>&amp;</code></td>
<td>비트 AND</td>
<td>왼쪽 → 오른쪽</td>
<td></td>
<td></td>
</tr>
<tr>
<td align="right">9</td>
<td><code>^</code></td>
<td>비트 XOR</td>
<td>왼쪽 → 오른쪽</td>
<td></td>
<td></td>
</tr>
<tr>
<td align="right">10</td>
<td>`</td>
<td>`</td>
<td>비트 OR</td>
<td>왼쪽 → 오른쪽</td>
<td></td>
</tr>
<tr>
<td align="right">11</td>
<td><code>&amp;&amp;</code></td>
<td>논리 AND</td>
<td>왼쪽 → 오른쪽</td>
<td></td>
<td></td>
</tr>
<tr>
<td align="right">12</td>
<td>`</td>
<td></td>
<td>`</td>
<td>논리 OR</td>
<td>왼쪽 → 오른쪽</td>
</tr>
<tr>
<td align="right">13</td>
<td><code>?:</code></td>
<td>삼항 연산자</td>
<td>오른쪽 → 왼쪽</td>
<td></td>
<td></td>
</tr>
<tr>
<td align="right">14</td>
<td><code>=</code>, <code>+=</code>, <code>-=</code>, <code>*=</code>, <code>/=</code>, <code>%=</code></td>
<td>대입 연산자</td>
<td>오른쪽 → 왼쪽</td>
<td></td>
<td></td>
</tr>
</tbody></table>
<hr>
<h1 id="시험에서-꼭-기억할-핵심">시험에서 꼭 기억할 핵심</h1>
<ul>
<li>산술 연산자는 <strong>계산</strong>에 사용한다.</li>
<li>비교 연산자의 결과는 <strong>true 또는 false</strong>이다.</li>
<li><code>&amp;&amp;</code>는 <strong>둘 다 참</strong>, <code>||</code>는 <strong>하나만 참</strong>이면 참이다.</li>
<li><code>!</code>는 논리값을 반대로 바꾼다.</li>
<li><code>++</code>와 <code>--</code>는 값을 1씩 증가·감소시킨다.</li>
<li>삼항 연산자는 <code>조건 ? 참 : 거짓</code> 형태이다.</li>
<li>연산자 우선순위가 헷갈리면 <strong>괄호 <code>()</code>를 사용</strong>하는 것이 가장 안전하다.</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[JAVA] 2차원 배열]]></title>
            <link>https://velog.io/@gy_uri03/JAVA-2%EC%B0%A8%EC%9B%90-%EB%B0%B0%EC%97%B4</link>
            <guid>https://velog.io/@gy_uri03/JAVA-2%EC%B0%A8%EC%9B%90-%EB%B0%B0%EC%97%B4</guid>
            <pubDate>Mon, 27 Jul 2026 10:47:59 GMT</pubDate>
            <description><![CDATA[<h1 id="java-2차원-배열">Java 2차원 배열</h1>
<h2 id="2차원-배열이란">2차원 배열이란?</h2>
<p>2차원 배열은 <strong>행(Row)과 열(Column)</strong>로 이루어진 데이터를 저장하는 배열이다.</p>
<p>엑셀의 표나 행렬(Matrix)처럼 데이터를 <strong>테이블 형식</strong>으로 저장할 수 있는 구조이다.</p>
<p>예를 들어 다음과 같은 표를 2차원 배열로 표현할 수 있다.</p>
<table>
<thead>
<tr>
<th>열 0</th>
<th>열 1</th>
<th>열 2</th>
</tr>
</thead>
<tbody><tr>
<td>1</td>
<td>2</td>
<td>3</td>
</tr>
<tr>
<td>4</td>
<td>5</td>
<td>6</td>
</tr>
<tr>
<td>7</td>
<td>8</td>
<td>9</td>
</tr>
</tbody></table>
<hr>
<h1 id="배열-선언">배열 선언</h1>
<p>2차원 배열은 다음과 같이 선언할 수 있다.</p>
<pre><code class="language-java">데이터형[][] 배열명;</code></pre>
<p>또는</p>
<pre><code class="language-java">데이터형 배열명[][];</code></pre>
<p>또는</p>
<pre><code class="language-java">데이터형[] 배열명[];</code></pre>
<p>세 가지 모두 같은 의미이며, 가장 많이 사용하는 형태는 다음과 같다.</p>
<pre><code class="language-java">int[][] arr;</code></pre>
<hr>
<h1 id="배열-생성">배열 생성</h1>
<p>배열의 크기를 지정하여 생성한다.</p>
<pre><code class="language-java">데이터형[][] 배열명 = new 데이터형[행의 개수][열의 개수];</code></pre>
<p>예시</p>
<pre><code class="language-java">int[][] arr = new int[3][4];</code></pre>
<p>위 코드는</p>
<ul>
<li>행(Row) : 3개</li>
<li>열(Column) : 4개</li>
</ul>
<p>인 2차원 배열을 생성한다.</p>
<hr>
<h1 id="배열-초기화">배열 초기화</h1>
<p>배열을 생성하면서 값을 바로 저장할 수도 있다.</p>
<pre><code class="language-java">int[][] numbers = {
    {1, 2, 3, 4},
    {5, 6, 7, 8},
    {9, 10, 11, 12}
};</code></pre>
<p>배열의 모습</p>
<table>
<thead>
<tr>
<th>행/열</th>
<th align="right">0</th>
<th align="right">1</th>
<th align="right">2</th>
<th align="right">3</th>
</tr>
</thead>
<tbody><tr>
<td><strong>0</strong></td>
<td align="right">1</td>
<td align="right">2</td>
<td align="right">3</td>
<td align="right">4</td>
</tr>
<tr>
<td><strong>1</strong></td>
<td align="right">5</td>
<td align="right">6</td>
<td align="right">7</td>
<td align="right">8</td>
</tr>
<tr>
<td><strong>2</strong></td>
<td align="right">9</td>
<td align="right">10</td>
<td align="right">11</td>
<td align="right">12</td>
</tr>
</tbody></table>
<hr>
<h1 id="배열-요소-접근">배열 요소 접근</h1>
<p>2차원 배열은</p>
<pre><code class="language-java">배열명[행][열]</code></pre>
<p>형태로 접근한다.</p>
<p>예시</p>
<pre><code class="language-java">int num1 = numbers[0][1];</code></pre>
<ul>
<li>첫 번째 행</li>
<li>두 번째 열</li>
</ul>
<p>값은 <strong>2</strong>이다.</p>
<pre><code class="language-java">int num2 = numbers[2][3];</code></pre>
<ul>
<li>세 번째 행</li>
<li>네 번째 열</li>
</ul>
<p>값은 <strong>12</strong>이다.</p>
<hr>
<h1 id="배열-요소-변경">배열 요소 변경</h1>
<p>배열의 특정 값을 다른 값으로 변경할 수 있다.</p>
<pre><code class="language-java">numbers[1][2] = 10;</code></pre>
<p>변경 전</p>
<pre><code class="language-text">5  6  7  8</code></pre>
<p>변경 후</p>
<pre><code class="language-text">5  6 10  8</code></pre>
<hr>
<p>또 다른 예시</p>
<pre><code class="language-java">numbers[2][3] = 200;</code></pre>
<p>변경 전</p>
<pre><code class="language-text">9 10 11 12</code></pre>
<p>변경 후</p>
<pre><code class="language-text">9 10 11 200</code></pre>
<hr>
<h1 id="배열의-길이">배열의 길이</h1>
<h2 id="1-행row의-개수">1. 행(Row)의 개수</h2>
<pre><code class="language-java">int rows = array.length;</code></pre>
<p>예시</p>
<pre><code class="language-java">int[][] arr = new int[3][4];

System.out.println(arr.length);</code></pre>
<p>출력</p>
<pre><code class="language-text">3</code></pre>
<p>즉, <strong>행의 개수</strong>를 반환한다.</p>
<hr>
<h2 id="2-열column의-개수">2. 열(Column)의 개수</h2>
<pre><code class="language-java">int cols = array[0].length;</code></pre>
<p>예시</p>
<pre><code class="language-java">int[][] arr = new int[3][4];

System.out.println(arr[0].length);</code></pre>
<p>출력</p>
<pre><code class="language-text">4</code></pre>
<p>즉, <strong>첫 번째 행의 열 개수</strong>를 반환한다.</p>
<hr>
<h1 id="2차원-배열-전체-출력">2차원 배열 전체 출력</h1>
<p>2차원 배열은 보통 <strong>중첩 for문</strong>을 사용하여 출력한다.</p>
<pre><code class="language-java">int[][] numbers = {
    {1, 2, 3},
    {4, 5, 6},
    {7, 8, 9}
};

for (int i = 0; i &lt; numbers.length; i++) {
    for (int j = 0; j &lt; numbers[i].length; j++) {
        System.out.print(numbers[i][j] + &quot; &quot;);
    }
    System.out.println();
}</code></pre>
<p>출력 결과</p>
<pre><code class="language-text">1 2 3
4 5 6
7 8 9</code></pre>
<hr>
]]></description>
        </item>
        <item>
            <title><![CDATA[[JAVA] static 필드]]></title>
            <link>https://velog.io/@gy_uri03/JAVA-static-%ED%95%84%EB%93%9C</link>
            <guid>https://velog.io/@gy_uri03/JAVA-static-%ED%95%84%EB%93%9C</guid>
            <pubDate>Tue, 14 Jul 2026 14:28:35 GMT</pubDate>
            <description><![CDATA[<h1 id="java-static">Java <code>static</code></h1>
<h2 id="static이란"><code>static</code>이란?</h2>
<p><code>static</code>은 <strong>클래스(Class)에 속하는 변수나 메서드</strong>를 의미한다.</p>
<p>일반 변수(인스턴스 변수)는 객체마다 각각 생성되지만, <strong><code>static</code> 변수는 클래스에 하나만 생성되어 모든 객체가 함께 공유</strong>한다.</p>
<h3 id="특징">특징</h3>
<ul>
<li>클래스가 메모리에 로딩될 때 <strong>한 번만 생성</strong>된다.</li>
<li>모든 객체(인스턴스)가 <strong>하나의 값을 공유</strong>한다.</li>
<li>객체를 생성하지 않아도 <strong>클래스 이름으로 접근</strong>할 수 있다.</li>
<li>공통으로 사용하는 값을 저장할 때 사용한다.</li>
</ul>
<hr>
<h1 id="static-필드-정의">static 필드 정의</h1>
<p>예를 들어 사람(Person) 객체가 생성될 때마다 생성된 사람 수를 세고 싶다면 <code>static</code> 변수를 사용할 수 있다.</p>
<pre><code class="language-java">public class PersonWithStatic {

    public static int count = 0;
    private String name;

    public PersonWithStatic(String name) {
        this.name = name;
        count++;
    }
}</code></pre>
<h3 id="코드-설명">코드 설명</h3>
<ul>
<li><code>count</code>는 <code>static</code> 변수이므로 객체가 아닌 <strong>클래스에 하나만 존재</strong>한다.</li>
<li>객체가 생성될 때마다 생성자에서 <code>count++</code>가 실행된다.</li>
<li>따라서 생성된 객체의 개수를 쉽게 확인할 수 있다.</li>
</ul>
<hr>
<h1 id="static-필드-접근">static 필드 접근</h1>
<pre><code class="language-java">public class PersonWithStaticDemo {

    public static void main(String[] args) {

        System.out.println(&quot;객체 생성 이전 : &quot; + PersonWithStatic.count);

        PersonWithStatic p1 = new PersonWithStatic(&quot;철수&quot;);
        PersonWithStatic p2 = new PersonWithStatic(&quot;영희&quot;);

        System.out.println(&quot;객체 생성 이후 : &quot; + PersonWithStatic.count);

        System.out.println(PersonWithStatic.count);
    }
}</code></pre>
<h3 id="실행-결과">실행 결과</h3>
<pre><code class="language-text">객체 생성 이전 : 0
객체 생성 이후 : 2
2</code></pre>
<hr>
<h1 id="객체로-접근할-수도-있을까">객체로 접근할 수도 있을까?</h1>
<p>가능은 하지만 <strong>권장되지 않는다.</strong></p>
<pre><code class="language-java">System.out.println(p1.count);</code></pre>
<p>위 코드는 실행은 되지만 다음과 같은 경고가 발생한다.</p>
<blockquote>
<p><strong>&quot;static 필드는 클래스 이름으로 접근하세요.&quot;</strong></p>
</blockquote>
<p>권장하는 방법은 다음과 같다.</p>
<pre><code class="language-java">System.out.println(PersonWithStatic.count);</code></pre>
<p>즉, <code>static</code>은 <strong>객체가 아니라 클래스의 변수</strong>이므로 클래스 이름으로 접근하는 것이 올바른 방법이다.</p>
<hr>
<h1 id="static을-사용하는-이유">static을 사용하는 이유</h1>
<p>예를 들어 학생 객체를 100개 생성했다고 가정해 보자.</p>
<pre><code class="language-java">Student s1 = new Student();
Student s2 = new Student();
Student s3 = new Student();</code></pre>
<p>학생 수를 세는 변수(<code>count</code>)가 일반 변수라면 객체마다 따로 생성된다.</p>
<pre><code class="language-text">s1.count = 1
s2.count = 1
s3.count = 1</code></pre>
<p>이렇게 되면 전체 학생 수를 알 수 없다.</p>
<p>하지만 <code>static</code>을 사용하면 하나의 변수를 모든 객체가 공유하므로,</p>
<pre><code class="language-text">Student.count = 3</code></pre>
<p>처럼 전체 객체의 개수를 쉽게 관리할 수 있다.</p>
<hr>
<h1 id="일반-변수와-static-변수-비교">일반 변수와 static 변수 비교</h1>
<table>
<thead>
<tr>
<th>일반 변수(인스턴스 변수)</th>
<th>static 변수(클래스 변수)</th>
</tr>
</thead>
<tbody><tr>
<td>객체마다 생성된다.</td>
<td>클래스에 하나만 생성된다.</td>
</tr>
<tr>
<td>객체마다 다른 값을 가진다.</td>
<td>모든 객체가 같은 값을 공유한다.</td>
</tr>
<tr>
<td>객체를 생성해야 사용할 수 있다.</td>
<td>객체 생성 없이 사용할 수 있다.</td>
</tr>
<tr>
<td>객체명으로 접근한다.</td>
<td>클래스명으로 접근한다.</td>
</tr>
</tbody></table>
<hr>
<h1 id="한-줄-정리">한 줄 정리</h1>
<blockquote>
<p><strong><code>static</code> 필드는 클래스에 하나만 생성되어 모든 객체가 공유하는 변수이다. 객체를 생성하지 않아도 클래스 이름으로 접근할 수 있으며, 공통으로 사용하는 데이터를 저장할 때 사용한다.</strong></p>
</blockquote>
]]></description>
        </item>
        <item>
            <title><![CDATA[[바이브 코딩 2차시] 수업 기록]]></title>
            <link>https://velog.io/@gy_uri03/%EB%B0%94%EC%9D%B4%EB%B8%8C-%EC%BD%94%EB%94%A9-2%EC%B0%A8%EC%8B%9C-%EC%88%98%EC%97%85-%EA%B8%B0%EB%A1%9D</link>
            <guid>https://velog.io/@gy_uri03/%EB%B0%94%EC%9D%B4%EB%B8%8C-%EC%BD%94%EB%94%A9-2%EC%B0%A8%EC%8B%9C-%EC%88%98%EC%97%85-%EA%B8%B0%EB%A1%9D</guid>
            <pubDate>Tue, 14 Jul 2026 11:30:26 GMT</pubDate>
            <description><![CDATA[<h2 id="기능-요구사항">기능 요구사항</h2>
<ul>
<li>화면</li>
<li>기능</li>
<li>데이터</li>
</ul>
<h2 id="필수-페이지-기능">필수 페이지 기능</h2>
<ul>
<li>메인 화면</li>
<li>입력 화면</li>
<li>결과 화면</li>
<li>관리자 화면</li>
</ul>
<hr>
<ul>
<li>사용자 정보</li>
<li>게시글 / 내용</li>
<li>점수 / 결과</li>
<li>시간 정보</li>
<li>이미지</li>
</ul>
<h2 id="실습-기록">실습 기록</h2>
<p><a href="https://preview--teamup-link-07.lovable.app/">교내 공모전 팀 찾기 프로젝트</a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[바이브 코딩 1차시] 수업 기록]]></title>
            <link>https://velog.io/@gy_uri03/%EB%B0%94%EC%9D%B4%EB%B8%8C-%EC%BD%94%EB%94%A9-1%EC%B0%A8%EC%8B%9C%EC%88%98%EC%97%85-%EA%B8%B0%EB%A1%9D</link>
            <guid>https://velog.io/@gy_uri03/%EB%B0%94%EC%9D%B4%EB%B8%8C-%EC%BD%94%EB%94%A9-1%EC%B0%A8%EC%8B%9C%EC%88%98%EC%97%85-%EA%B8%B0%EB%A1%9D</guid>
            <pubDate>Mon, 13 Jul 2026 11:47:18 GMT</pubDate>
            <description><![CDATA[<h3 id="바이브코딩">바이브코딩</h3>
<p>클라이언트 단일 파일 / 클라우드 연동 / AI통합 플랫폼</p>
<h2 id="🔬-실습-기록">🔬 실습 기록</h2>
<p>아스트랄 타로 앱 : <a href="https://gemini.google.com/share/79c5d150a2d9?skid=0e595ae4-2f01-4f16-b8f3-5511488ca4d8">https://gemini.google.com/share/79c5d150a2d9?skid=0e595ae4-2f01-4f16-b8f3-5511488ca4d8</a></p>
<p>깃허브 개발 일지 작성 앱 : <a href="https://share.gemini.google/3FDJ4V4sOpw2">https://share.gemini.google/3FDJ4V4sOpw2</a></p>
<p>공공 데이터를 활용한 자료 시각화 수업 :
<img src="https://velog.velcdn.com/images/gy_uri03/post/daa81e51-91d9-41f3-bc1b-f5e2bcdbec50/image.png" alt=""></p>
<h2 id="💡-입력한-프롬프트">💡 입력한 프롬프트</h2>
<p><strong>⭐️ 기능 우선 순위 정하기</strong></p>
<pre><code>너는 웹앱 기획을 도와주는 AI야.

나는 HTML 하나의 파일만 사용해서 간단한 웹앱을 만들려고 해.

다음 순서대로 진행해줘.

1. 내 생활이나 관심사에 대해 질문하기

2. 해결하고 싶은 불편함을 함께 찾기

3. 만들 수 있는 웹앱 아이디어를 3개 제안하기

4. 각 아이디어의 장단점을 설명하기

5. 내가 하나를 선택하면 필요한 기능을 우선순위대로 정리하기


아직 코드는 작성하지 말고, 기획 단계까지만 도와줘.
</code></pre><h4 id="통계-자료-데이터-모음">통계 자료 데이터 모음</h4>
<p>통계 놀이터: <a href="https://padlet.com/2022141037/0713-15-ai-bit-ly-7-bbondytidsazmaf7/wish/pRxDZ4MyxeB3W183">https://padlet.com/2022141037/0713-15-ai-bit-ly-7-bbondytidsazmaf7/wish/pRxDZ4MyxeB3W183</a></p>
<p>공공데이터포털: <a href="https://www.data.go.kr/">https://www.data.go.kr/</a></p>
<p>국가통계포털: <a href="https://kosis.kr/index/index.do">https://kosis.kr/index/index.do</a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[JAVA] 오버로딩]]></title>
            <link>https://velog.io/@gy_uri03/JAVA-%EC%98%A4%EB%B2%84%EB%A1%9C%EB%94%A9</link>
            <guid>https://velog.io/@gy_uri03/JAVA-%EC%98%A4%EB%B2%84%EB%A1%9C%EB%94%A9</guid>
            <pubDate>Mon, 22 Jun 2026 00:47:41 GMT</pubDate>
            <description><![CDATA[<h3 id="메소드-오버로딩이란">메소드 오버로딩이란?</h3>
<p>동일한 매소드를 여러 개 선언하는 것</p>
<pre><code>int add(int a, int b){
}

double add(double a, double b){
}</code></pre><p>특징</p>
<ul>
<li>메소드 이름은 같음</li>
<li>매개변수의 개수 또는 자료형이 달라야 함</li>
<li>반환 타입만 다르게 하는 것은 불가능</li>
</ul>
<h3 id="생성자와-생성자-오버로딩">생성자와 생성자 오버로딩</h3>
<p>객체가 생성될 때 호출되는 특별한 메소드</p>
<pre><code>Scanner sc = new Scanner(System.in);</code></pre><p>new 클래스이름() 을 사용할 때 생성자가 호출된다.</p>
<p>() &lt;= 매개변수 . (초기화작업)</p>
<p>-
반환 타입 없음
-
단 한 번만 호출
-
메소드 이름은 클래스 이름과 동일</p>
<pre><code>class Person{

    Person(){
        System.out.println(&quot;생성자 호출&quot;);
    }

}

public class Main{
    public static void main(String[] args){

        Person p = new Person();

    }
}</code></pre><h3 id="사용하는-이유">사용하는 이유</h3>
<p>객체를 다양한 방법으로 생성하기 위해 사용한다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[JAVA]게터, 세터 메소드]]></title>
            <link>https://velog.io/@gy_uri03/JAVA%EA%B2%8C%ED%84%B0-%EC%84%B8%ED%84%B0-%EB%A9%94%EC%86%8C%EB%93%9C</link>
            <guid>https://velog.io/@gy_uri03/JAVA%EA%B2%8C%ED%84%B0-%EC%84%B8%ED%84%B0-%EB%A9%94%EC%86%8C%EB%93%9C</guid>
            <pubDate>Tue, 16 Jun 2026 05:15:42 GMT</pubDate>
            <description><![CDATA[<h2 id="게터getter와-세터setter">게터(Getter)와 세터(Setter)</h2>
<p>객체 지향 프로그래밍 언어에서 클래스의 필드(Field)에 접근하거나 값을 설정하는 데 사용하는 메서드이다.</p>
<h3 id="메서드-이름-규칙">메서드 이름 규칙</h3>
<p>게터(Getter) : get + 파스칼 케이스(PascalCase)로 변환한 필드 이름
세터(Setter) : set + 파스칼 케이스(PascalCase)로 변환한 필드 이름</p>
<h3 id="파스칼-케이스pascalcase란">파스칼 케이스(PascalCase)란?</h3>
<p>여러 단어를 이어 붙여 이름을 만들 때 모든 단어의 첫 글자를 대문자로 표기하는 명명 규칙이다.</p>
<p>예시</p>
<pre><code>UserName
PhoneNumber
StudentScore</code></pre><h3 id="게터-세터-이름-짓기-예시">게터, 세터 이름 짓기 예시</h3>
<pre><code>hello

//게터 메서드
getHello()

//세터 메서드
setHello()</code></pre><h3 id="예제-코드">예제 코드</h3>
<pre><code>package chap2;

class Car {

    String brand;
    String model;
    int year;

    // 게터 메서드 (값을 반환)
    String getBrand() {
        return brand;
    }

    // 세터 메서드 (값을 설정)
    void setBrand(String value) {
        brand = value;
    }
}</code></pre><p><strong>설명</strong>
getBrand()</p>
<p>brand의 값을 가져온다.
return을 사용해 값을 반환한다.</p>
<p>setBrand(String value)</p>
<p>매개변수 value로 전달받은 값을 brand에 저장한다.</p>
<p>예시</p>
<pre><code>Car car = new Car();

car.setBrand(&quot;Hyundai&quot;);

System.out.println(car.getBrand());</code></pre><h3 id="패키지package">패키지(Package)</h3>
<p>패키지는 관련된 클래스들을 묶어서 관리하는 폴더 같은 개념이다.</p>
<p><strong>장점</strong>
같은 이름의 클래스 충돌을 방지할 수 있다.</p>
<p>예시</p>
<pre><code>package animal;
class Cat {}

package robot;
class Cat {}</code></pre><h3 id="한줄-정리">한줄 정리</h3>
<p>패키지는 클래스들을 그룹으로 묶어 관리하고, 이름 충돌을 방지하기 위해 사용한다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[ [JAVA]1차원 배열]]></title>
            <link>https://velog.io/@gy_uri03/%EC%9E%90%EB%B0%94%EA%B8%B0%EB%A1%9D1%EC%B0%A8%EC%9B%90-%EB%B0%B0%EC%97%B4</link>
            <guid>https://velog.io/@gy_uri03/%EC%9E%90%EB%B0%94%EA%B8%B0%EB%A1%9D1%EC%B0%A8%EC%9B%90-%EB%B0%B0%EC%97%B4</guid>
            <pubDate>Thu, 28 May 2026 06:32:25 GMT</pubDate>
            <description><![CDATA[<h2 id="1차원-배열array이란">1차원 배열(Array)이란?</h2>
<p>동일한 데이터형의 여러 데이터를 하나의 변수에 순서대로 저장하는 선형 데이터 구조이다.
여러 개의 변수를 따로 만들지 않고 하나의 배열 변수로 관리할 수 있다.</p>
<h3 id="1-배열-선언">1. 배열 선언</h3>
<p>배열을 사용하겠다고 미리 선언하는 단계이다.</p>
<p>형식</p>
<pre><code>데이터형[] 배열변수명;
데이터형 배열변수명[];</code></pre><p>예시</p>
<pre><code>int[] numbers;

String[] names;

double scores[];</code></pre><h3 id="2-배열-생성">2. 배열 생성</h3>
<p>배열이 실제로 저장될 공간(메모리)을 생성하는 단계이다.</p>
<p>new 연산자를 사용한다.
new 연산자 : 객체가 저장될 공간을 생성한다.</p>
<p>형식</p>
<pre><code>배열변수명 = new 데이터형[배열의 길이];</code></pre><p>예시</p>
<pre><code>int[] numbers;

numbers = new int[5];</code></pre><p>→ 정수 5개를 저장할 공간이 생성된다.</p>
<p>초기상태</p>
<pre><code>[0, 0, 0, 0, 0]</code></pre><h3 id="3-배열-초기화">3. 배열 초기화</h3>
<p>배열을 생성하면서 원하는 값을 바로 넣는 방법이다.</p>
<p>형식</p>
<pre><code>데이터형[] 배열변수명 = {초기값 나열};</code></pre><p>예시</p>
<pre><code>int[] numbers = {1, 2, 3, 4, 5};

String[] fruits = {&quot;사과&quot;, &quot;바나나&quot;, &quot;딸기&quot;};</code></pre><h3 id="4-배열-요소-접근-및-변경">4. 배열 요소 접근 및 변경</h3>
<p>배열은 인덱스(Index) 를 사용하여 각 요소에 접근한다.
배열의 인덱스는 0부터 시작한다.</p>
<p>예시</p>
<pre><code>int[] num = {1, 2, 3, 4, 5};

// 첫 번째 요소 접근
int firstNum = num[0];

// 두 번째 요소 값 변경
num[1] = 100;</code></pre><p>결과</p>
<pre><code>{1, 100, 3, 4, 5}</code></pre><h3 id="5-배열의-길이length">5. 배열의 길이(length)</h3>
<p>배열의 길이는 배열 객체의 멤버 변수인 length를 사용한다.</p>
<p>형식</p>
<pre><code>배열변수명.length</code></pre><p>예시</p>
<pre><code>int[] numbers = {1, 2, 3, 4, 5};

int length = numbers.length;</code></pre><p>결과</p>
<pre><code>length = 5</code></pre><h3 id="배열-전체-예제">배열 전체 예제</h3>
<pre><code>public class ArrayExample {

    public static void main(String[] args) {

        // 배열 초기화
        int[] numbers = {1, 2, 3, 4, 5};

        // 요소 접근
        int firstNum = numbers[0];

        // 값 변경
        numbers[1] = 100;

        // 배열 길이
        int length = numbers.length;

        System.out.println(firstNum); // 1
        System.out.println(numbers[1]); // 100
        System.out.println(length); // 5
    }
}</code></pre><h3 id="한줄정리">한줄정리</h3>
<p>배열(Array)은 같은 자료형의 여러 데이터를 하나의 변수에 순서대로 저장하고, 인덱스를 이용해 접근하는 데이터 구조이다.</p>
]]></description>
        </item>
    </channel>
</rss>