<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>Codingworld</title>
    <link>https://coding-goyoungjung.tistory.com/</link>
    <description></description>
    <language>ko</language>
    <pubDate>Mon, 6 Apr 2026 04:10:30 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>Goyoungjung</managingEditor>
    <item>
      <title>JSP oracle DB 연결 방법</title>
      <link>https://coding-goyoungjung.tistory.com/24</link>
      <description>&lt;pre id=&quot;code_1693272958567&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;package com.shopping.model.dao;

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class MemberDao {
	private DataSource dataSource;

	public MemberDao() {
		try {
			Context context = new InitialContext();
			dataSource = (DataSource) context.lookup(&quot;java:comp/env/jdbc/Oracle&quot;);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	public String printMemberIDs() {
		Connection connection = null;
		PreparedStatement preparedStatement = null;
		ResultSet resultSet = null;

		try {
			String memberId = &quot;&quot;;
			connection = dataSource.getConnection();

			// SQL 쿼리
			String sql = &quot;SELECT id FROM members&quot;;
			preparedStatement = connection.prepareStatement(sql);

			System.out.println(preparedStatement.getConnection());

			resultSet = preparedStatement.executeQuery();

			while (resultSet.next()) {

				memberId = resultSet.getString(&quot;id&quot;);

			}

			if (memberId.isEmpty()) {
				System.out.println(&quot;No member ID found.&quot;);
			}

			return memberId;
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			// 리소스 해제
			try {
				resultSet.close();
			} catch (Exception e) {
				e.printStackTrace();
			}
			try {
				preparedStatement.close();
			} catch (Exception e) {
				e.printStackTrace();
			}
			try {
				connection.close();
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
		return &quot;false&quot;;
	}
}&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;Context 클래스&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;프로그램이 실행되는 환경이나 상황에 대한 정보를 제공하고 관리하는 클래스&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다양한 맥락에서 프로그램의 동작을 조정하거나 필요한 데이터를 제공하기 위해 사용&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Context는 일종의 컨테이너로서 프로그램이 동작하는 동악 필요한 리소스를 저장하고 접근할 수 있도록 도와줌&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;InitialContext&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Java Naming Directory Interface를 사용하여 context를 초기화하는 부분&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;JNDI는 Java 애플리케이션에서 네임스페이스를 사용하여 서버 리소스나 서비스에 접근하고 관리하는 방법을 제공하는 API&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;JNDI는 주로 데이터베이스 연결, 메시지 큐, 웹 서비스 등과 같은 서버 리소스를 관리하거나, 환경 변수나 설정 값 등을 접근하는데 사용&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;DataSource&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;데이터베이스 커넥션 풀을 관리하기 위한 java 인터페이스&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;커넥션 풀은 데이터베이스 연결을 관리하고 재사용하는데 사용되며, 애플리케이션이 데이터베이스를 효율적으로 상호 작용할 수 있도록 도와줌&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;데이터베이스 커넥션 풀을 사용하면 연결 생셩과 해제에 드는 오버헤드를 줄이고, 애플리케이션의 성능을 개선할 수 있음.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;PreparedStatement&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;java의 JDBC(Java Database Connectivity) API에서 제공하는 인터페이스&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;SQL 쿼리문을 미리 준비하고 실행하는데 사용되는 객체&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. SQL 인젝션 방지 : 파라미터 값을 자동으로 이스케이프하고 따옴표를 처리하여 SQL 인젝션과 같은 보안 취약점을 방지&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 파라미터 사용 : SQL문에 변수처럼 파라미터 사용 가능&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. 캐시 활용 : 데이터베이스 시스템은 동일한 SQL문이 여러 번 실행될 경우 실행 계획을 캐시에 저장. SQL문이 여러번 실행될 때 실행 계획을 재사용하여 성능 향상&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4. 타입 매칭 : 파라미터 값의 데이터 타입에 따라 자동으로 적절한 데이터타입으로 변환하여 SQL문에 적용&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;executeUpdate() 메서드를 통해 SQL 구문 실행&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;ResultSet&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;JDBC API에서 제공하는 인터페이스로, 데이터베이스에서 쿼리를 실행한 결과로 얻어진 결과 집합을 나타내는 객체&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;데이터베이스로부터 검색한 데이터를 가져오고 처리할 수 있음&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;executeQuery() 메서드로 쿼리를 실행&lt;/p&gt;</description>
      <author>Goyoungjung</author>
      <guid isPermaLink="true">https://coding-goyoungjung.tistory.com/24</guid>
      <comments>https://coding-goyoungjung.tistory.com/24#entry24comment</comments>
      <pubDate>Tue, 29 Aug 2023 11:49:03 +0900</pubDate>
    </item>
    <item>
      <title>정규화</title>
      <link>https://coding-goyoungjung.tistory.com/23</link>
      <description>&lt;h4 data-ke-size=&quot;size20&quot;&gt;데이터 이상 현상&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;데이터 집합에서 예상하지 못한 비정상적인 패턴이나 동작을 나타내는 현상&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;정규화를 하는 이유&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;데이터를 입력/수정/삭제 등의 작업이 발생하는 이상 현상 방지&lt;/li&gt;
&lt;li&gt;독립된 Entity로 정의함으로써 높은 응집역과 낮은 결합도를 유지&lt;/li&gt;
&lt;li&gt;중독된 데이터를 최소함으로써 저장 공간을 최소화&lt;/li&gt;
&lt;li&gt;좀더 작은 단위의 Entity로 분해함으로써 재활용성 증가&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;정규화 정의&lt;/h4&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;중복 되는 데이터를 나누어 여러 개의 테이블에 분산 저장하는 기법&lt;/li&gt;
&lt;li&gt;실세계의 데이터를 구조화/체계적으로 재배치/분해하는 방법&lt;/li&gt;
&lt;/ol&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;정규화 목적&lt;/h4&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;데이터의 일관성을 보장받고, 중복된 데이터를 최소화로 안전성과 확보하기 위함이다.&lt;/li&gt;
&lt;/ol&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;함수의 종속성&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;특정 속성의 모든 값에 대하여 다른 속성의 값이 유일하게 결정되게 하는 함수의 속성을 의미한다.&lt;/li&gt;
&lt;li&gt;X -&amp;gt; Y&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>질문 정리</category>
      <author>Goyoungjung</author>
      <guid isPermaLink="true">https://coding-goyoungjung.tistory.com/23</guid>
      <comments>https://coding-goyoungjung.tistory.com/23#entry23comment</comments>
      <pubDate>Mon, 14 Aug 2023 09:46:30 +0900</pubDate>
    </item>
    <item>
      <title>백준 1764</title>
      <link>https://coding-goyoungjung.tistory.com/21</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/1764&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://www.acmicpc.net/problem/1764&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1691118266397&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;1764번: 듣보잡&quot; data-og-description=&quot;첫째 줄에 듣도 못한 사람의 수 N, 보도 못한 사람의 수 M이 주어진다. 이어서 둘째 줄부터 N개의 줄에 걸쳐 듣도 못한 사람의 이름과, N+2째 줄부터 보도 못한 사람의 이름이 순서대로 주어진다. &quot; data-og-host=&quot;www.acmicpc.net&quot; data-og-source-url=&quot;https://www.acmicpc.net/problem/1764&quot; data-og-url=&quot;https://www.acmicpc.net/problem/1764&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/1764&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.acmicpc.net/problem/1764&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&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;1764번: 듣보잡&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;첫째 줄에 듣도 못한 사람의 수 N, 보도 못한 사람의 수 M이 주어진다. 이어서 둘째 줄부터 N개의 줄에 걸쳐 듣도 못한 사람의 이름과, N+2째 줄부터 보도 못한 사람의 이름이 순서대로 주어진다.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.acmicpc.net&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;pre id=&quot;code_1691118465221&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        String str = br.readLine();

        StringTokenizer stk = new StringTokenizer(str);

        int n = Integer.parseInt(stk.nextToken());
        int m = Integer.parseInt(stk.nextToken());

        Set&amp;lt;String&amp;gt; unheardList = new HashSet&amp;lt;&amp;gt;();

        for (int i = 0; i &amp;lt; n; i++) {
            unheardList.add(br.readLine());
        }

        Set&amp;lt;String&amp;gt; unseenList = new HashSet&amp;lt;&amp;gt;();

        for (int i = 0; i &amp;lt; m; i++) {
            unseenList.add(br.readLine());
        }

        List&amp;lt;String&amp;gt; list = new ArrayList();

        for (String s : unheardList) {
            if (unseenList.contains(s)) {
                list.add(s);
            }
        }

        list.sort(null);
        System.out.println(list.size());
        for (String s : list) {
            System.out.println(s);
        }

    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Set의 기능만 알고 있으면 너무나도 쉬운 문제이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;듣지도 못한 사람 리스트와 보지도 못한 사람 리스트를 담을 수 있는 Set을 만들고 contains를 통해서 두 Set에 포함된다면 결과 리스트에 추가한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;문제는 정렬해서 보여주는 것을 원하므로 list.sort를 통해 정렬 시킨 다음에 출력한다.&lt;/p&gt;</description>
      <category>알고리즘</category>
      <author>Goyoungjung</author>
      <guid isPermaLink="true">https://coding-goyoungjung.tistory.com/21</guid>
      <comments>https://coding-goyoungjung.tistory.com/21#entry21comment</comments>
      <pubDate>Fri, 4 Aug 2023 12:11:13 +0900</pubDate>
    </item>
    <item>
      <title>백준 1620</title>
      <link>https://coding-goyoungjung.tistory.com/20</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/1620&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://www.acmicpc.net/problem/1620&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1691113985569&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;1620번: 나는야 포켓몬 마스터 이다솜&quot; data-og-description=&quot;첫째 줄에는 도감에 수록되어 있는 포켓몬의 개수 N이랑 내가 맞춰야 하는 문제의 개수 M이 주어져. N과 M은 1보다 크거나 같고, 100,000보다 작거나 같은 자연수인데, 자연수가 뭔지는 알지? 모르면&quot; data-og-host=&quot;www.acmicpc.net&quot; data-og-source-url=&quot;https://www.acmicpc.net/problem/1620&quot; data-og-url=&quot;https://www.acmicpc.net/problem/1620&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/z0mh8/hyTwmPTbWX/EeYHbLgYWemf7tlDoV4Ga0/img.png?width=2834&amp;amp;height=1480&amp;amp;face=0_0_2834_1480&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/1620&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.acmicpc.net/problem/1620&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/z0mh8/hyTwmPTbWX/EeYHbLgYWemf7tlDoV4Ga0/img.png?width=2834&amp;amp;height=1480&amp;amp;face=0_0_2834_1480');&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;1620번: 나는야 포켓몬 마스터 이다솜&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;첫째 줄에는 도감에 수록되어 있는 포켓몬의 개수 N이랑 내가 맞춰야 하는 문제의 개수 M이 주어져. N과 M은 1보다 크거나 같고, 100,000보다 작거나 같은 자연수인데, 자연수가 뭔지는 알지? 모르면&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.acmicpc.net&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;pre id=&quot;code_1691114102143&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        String input = br.readLine();

        StringTokenizer st = new StringTokenizer(input, &quot; &quot;);

        int n = Integer.parseInt(st.nextToken());
        int m = Integer.parseInt(st.nextToken());

        Map map = new HashMap();

        for (int i = 1; i &amp;lt;= n; i++) {
            int key = i;
            String value = br.readLine();

            map.put(key, value);
        }

        List&amp;lt;Object&amp;gt; list = new ArrayList&amp;lt;&amp;gt;();

        for (int i = 0; i &amp;lt; m; i++) {
            list.add(br.readLine());
        }

        List&amp;lt;Object&amp;gt; result = new ArrayList&amp;lt;&amp;gt;();
        List&amp;lt;Map.Entry&amp;lt;Integer, String&amp;gt;&amp;gt; entries = new LinkedList&amp;lt;&amp;gt;(map.entrySet());
        entries.sort(Map.Entry.comparingByValue());


        for (int i = 0; i &amp;lt; list.size(); i++) {
            char ch = ((String) list.get(i)).charAt(0);
            if (Character.isDigit(ch)) {
                result.add(map.get(Integer.parseInt((String) list.get(i))));
            } else {

                int start = 0;
                int mid = 0;
                int end = entries.size() - 1;

                while (start &amp;lt;= end) {
                    mid = (start + end) / 2;
                    if (entries.get(mid).getValue().compareTo((String) list.get(i)) == 0) {
                        result.add(entries.get(mid).getKey());
                        break;
                    } else if (entries.get(mid).getValue().compareTo((String) list.get(i)) &amp;lt; 0) {
                        start = mid + 1;
                    } else {
                        end = mid - 1;
                    }
                }
                

            }
        }

        for (Object i : result) {
            System.out.println(i);
        }

    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 코드는 Map 한 개로 문제를 풀려고 했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Key에는 포켓몬의 번호를 value에는 포켓몬의 이름을 넣었다.&lt;/p&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;/p&gt;
&lt;pre id=&quot;code_1691114338704&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;char ch = ((String) list.get(i)).charAt(0);
            if (Character.isDigit(ch))&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;번호를 주어졌을 때 Map get 메소드를 통해 포켓몬의 이름을 가져온다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;포켓몬의 이름이 주어졌을 때 이름을 기준으로 사전순으로 저장된 List를 통해서 이진검색으로 포켓몬 번호를 찾는다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만 1문제마다 이진 검색을 하기 때문에 시간이 오래 걸린다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;958&quot; data-origin-height=&quot;67&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Nkp4Z/btspUoCy9JI/HTDwNzDFpq93hw9hZEq6QK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Nkp4Z/btspUoCy9JI/HTDwNzDFpq93hw9hZEq6QK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Nkp4Z/btspUoCy9JI/HTDwNzDFpq93hw9hZEq6QK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FNkp4Z%2FbtspUoCy9JI%2FHTDwNzDFpq93hw9hZEq6QK%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;958&quot; height=&quot;67&quot; data-origin-width=&quot;958&quot; data-origin-height=&quot;67&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 단순하게 생각해서 Map를 2개 만들었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;포켓몬 번호가 Key인 Map,. 포켓몬 이름이 Key인 Map&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;오박사의 문제가 주어졌을 때 포켓몬 번호인지 포켓몬 이름인지 판단하고 적절한 Map에 적용시켜 get 메소드를 통해 답을 찾았다.&lt;/p&gt;
&lt;pre id=&quot;code_1691113960990&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        String input = br.readLine();

        StringTokenizer st = new StringTokenizer(input, &quot; &quot;);

        int n = Integer.parseInt(st.nextToken());
        int m = Integer.parseInt(st.nextToken());

        Map numberIndexMap = new HashMap();
        Map nameIndexMap = new HashMap();

        for (int i = 1; i &amp;lt;= n; i++) {
            int key = i;
            String value = br.readLine();

            numberIndexMap.put(key, value);
            nameIndexMap.put(value, key);
        }

        List&amp;lt;Object&amp;gt; list = new ArrayList&amp;lt;&amp;gt;();

        for (int i = 0; i &amp;lt; m; i++) {
            list.add(br.readLine());
        }

        List&amp;lt;Object&amp;gt; result = new ArrayList&amp;lt;&amp;gt;();

        for (Object o : list) {
            char ch = o.toString().charAt(0);
            if (Character.isDigit(ch)) {
                result.add(numberIndexMap.get(Integer.parseInt(o.toString())));
            } else {
                result.add(nameIndexMap.get(o.toString()));
            }
        }

        for (Object o : result) {
            System.out.println(o);
        }
    }
}&lt;/code&gt;&lt;/pre&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;943&quot; data-origin-height=&quot;40&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ciICWv/btsp3mceS0x/p6T79jKTeQZYxsmRIBO4Jk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ciICWv/btsp3mceS0x/p6T79jKTeQZYxsmRIBO4Jk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ciICWv/btsp3mceS0x/p6T79jKTeQZYxsmRIBO4Jk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FciICWv%2Fbtsp3mceS0x%2Fp6T79jKTeQZYxsmRIBO4Jk%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;943&quot; height=&quot;40&quot; data-origin-width=&quot;943&quot; data-origin-height=&quot;40&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>알고리즘</category>
      <author>Goyoungjung</author>
      <guid isPermaLink="true">https://coding-goyoungjung.tistory.com/20</guid>
      <comments>https://coding-goyoungjung.tistory.com/20#entry20comment</comments>
      <pubDate>Fri, 4 Aug 2023 11:07:11 +0900</pubDate>
    </item>
    <item>
      <title>백준 7785</title>
      <link>https://coding-goyoungjung.tistory.com/19</link>
      <description>&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://www.acmicpc.net/problem/7785&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://www.acmicpc.net/problem/7785&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1691052173075&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;7785번: 회사에 있는 사람&quot; data-og-description=&quot;첫째 줄에 로그에 기록된 출입 기록의 수 n이 주어진다. (2 &amp;le; n &amp;le; 106) 다음 n개의 줄에는 출입 기록이 순서대로 주어지며, 각 사람의 이름이 주어지고 &amp;quot;enter&amp;quot;나 &amp;quot;leave&amp;quot;가 주어진다. &amp;quot;enter&amp;quot;인 경우는 &quot; data-og-host=&quot;www.acmicpc.net&quot; data-og-source-url=&quot;https://www.acmicpc.net/problem/7785&quot; data-og-url=&quot;https://www.acmicpc.net/problem/7785&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/pRHFT/hyTxW9xY4I/nmJZk3dBhRrbQh4jwDvd01/img.png?width=2834&amp;amp;height=1480&amp;amp;face=0_0_2834_1480&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/7785&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.acmicpc.net/problem/7785&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/pRHFT/hyTxW9xY4I/nmJZk3dBhRrbQh4jwDvd01/img.png?width=2834&amp;amp;height=1480&amp;amp;face=0_0_2834_1480');&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;7785번: 회사에 있는 사람&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;첫째 줄에 로그에 기록된 출입 기록의 수 n이 주어진다. (2 &amp;le; n &amp;le; 106) 다음 n개의 줄에는 출입 기록이 순서대로 주어지며, 각 사람의 이름이 주어지고 &quot;enter&quot;나 &quot;leave&quot;가 주어진다. &quot;enter&quot;인 경우는&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.acmicpc.net&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;pre id=&quot;code_1691052205970&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        int n = Integer.parseInt(br.readLine());

        Map map = new HashMap();

        for (int i = 0; i &amp;lt; n; i++) {
            String[] input = br.readLine().split(&quot; &quot;);
            map.put(input[0], input[1]);
        }

        Iterator&amp;lt;Map.Entry&amp;lt;String, String&amp;gt;&amp;gt; itr = map.entrySet().iterator();

        List&amp;lt;String&amp;gt; list = new ArrayList&amp;lt;&amp;gt;();

        while (itr.hasNext()) {
            Map.Entry&amp;lt;String, String&amp;gt; entry = itr.next();
            if(entry.getValue().equals(&quot;enter&quot;)) {
                list.add(entry.getKey());
            }
        }

        Collections.sort(list, Collections.reverseOrder());

        for (String s : list) {
            System.out.println(s);
        }


    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Map을 사용하여 문제를 풀었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이유는 key에는 사람 이름을 넣고, value에는 출퇴근 여부를 넣기 위해서이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;물론 배열로 작성하여 문제를 풀 수 있지만 그러기에는 손이 너무 많이 간다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1691052341386&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt; Iterator&amp;lt;Map.Entry&amp;lt;String, String&amp;gt;&amp;gt; itr = map.entrySet().iterator();&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Map을 사용하면 순차적으로 요소에 있는 key와 value에 접근하지 못한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서 Iterator를 사용하여 Map 요소들을 순회하였다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;entrySet() 은 Map 객체에 있는 모든 키-값 쌍들을 Set 형태로 반환시켜 준다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;interator()은 Set이 가지고 있는 인터페이스이고, Set에 있는 요소들을 순회할 수 있는 Iterator 객체를 반환시켜준다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1691052830865&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Collections.sort(list, Collections.reverseOrder());&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Collections 는 컬렉션(리스트, 세트, 맵 등)을 다루는 유틸리티 클래스이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;sort를 사용해서 정렬을 할 수 있고, Collections.reverseOrder()를 통해 역순으로 정렬 가능하다.&lt;/p&gt;</description>
      <category>알고리즘</category>
      <author>Goyoungjung</author>
      <guid isPermaLink="true">https://coding-goyoungjung.tistory.com/19</guid>
      <comments>https://coding-goyoungjung.tistory.com/19#entry19comment</comments>
      <pubDate>Thu, 3 Aug 2023 17:55:11 +0900</pubDate>
    </item>
    <item>
      <title>setInterval 함수</title>
      <link>https://coding-goyoungjung.tistory.com/18</link>
      <description>&lt;pre id=&quot;code_1690249967554&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;setInterval(callback, delay[, arg1, arg2, ...]);&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;JavaScript에서 주어진 시간 간격마다 지정된 함수를 반복적으로 실행하는 타이머 메소드&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;일정한 시간 간격으로 작업이 반복되어야 할 때 유용하게 사용&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;callback : 지정된 시간 간격마다 호출될 함수로, 일종의 콜백 함수. 즉, 이 함수가 반복적으로 실행&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;delay : 콜백 함수를 실행하기 전에 기다릴 시간 간격&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;arg1, arg2, ... : 선택적 매개변수로, 콜백 함수에 전달될 인수&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;setInterval()&lt;/b&gt;&lt;/span&gt;로 시작한 반복 작업은 &lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;clearInterval()&lt;/b&gt;&lt;/span&gt; 함수를 사용하여 중지할 수 있다.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1690251082721&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;template&amp;gt;
  &amp;lt;input v-model=&quot;inputText&quot; @input=&quot;handleInput&quot; /&amp;gt;
  {{ inputText }}
  &amp;lt;div&amp;gt;
    &amp;lt;span&amp;gt;timer&amp;lt;/span&amp;gt;
    &amp;lt;p v-if=&quot;timer &amp;gt; 0&quot;&amp;gt;카운트 다운: {{ timer }}&amp;lt;/p&amp;gt;
    &amp;lt;p v-else&amp;gt;타이머 종료&amp;lt;/p&amp;gt;
  &amp;lt;/div&amp;gt;
&amp;lt;/template&amp;gt;

&amp;lt;script&amp;gt;
export default {
  name: &quot;App&quot;,
  components: {},
  data() {
    return {
      inputText: &quot;&quot;,
      timer: 60,
      interval: null,
    };
  },
  methods: {
    handleInput() {
      // 키 입력 시마다 기존 타이머를 중지하고 새로운 타이머를 시작합니다.
      if (this.interval) {
        return;
      }

      // 타이머가 종료될 때까지 1초마다 countdown 값을 감소시킵니다.
      this.interval = setInterval(() =&amp;gt; {
        if (this.timer &amp;gt; 0) {
          this.timer--;
        } else {
          clearInterval(this.interval);
        }
      }, 1000);
    },
  },
};
&amp;lt;/script&amp;gt;&lt;/code&gt;&lt;/pre&gt;</description>
      <category>vue</category>
      <author>Goyoungjung</author>
      <guid isPermaLink="true">https://coding-goyoungjung.tistory.com/18</guid>
      <comments>https://coding-goyoungjung.tistory.com/18#entry18comment</comments>
      <pubDate>Tue, 25 Jul 2023 11:14:05 +0900</pubDate>
    </item>
    <item>
      <title>JAVA int vs Integer</title>
      <link>https://coding-goyoungjung.tistory.com/16</link>
      <description>&lt;h4 data-ke-size=&quot;size20&quot;&gt;int와 Integer&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;공통점 : 둘 다 정수를 표현하는 데이터 타입&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;차이점 : int는 기본 타입, Integer는 래퍼 클래스&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;int&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;java의 기본 데이터 타입 중 하나로, 32비트 크기를 가지며 정수 값을 나타냄&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;int는 메모리에서 직접 값을 저장하는데 사용되기 때문에 메모리 사용 측면에서 효율적&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;Integer&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;int의 래퍼 클래스&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;래퍼 클래스는 기본 데이터 타입을 객체로 래핑하여 추가 기능을 제공하도록 돕는 역할&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;래프 클래스는 주로 제네릭과 같은 상황에서 필요하거나, 객체를 요구하는 자바 라이브러리와 함께 사용&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Integer 클래스는 int에 비해 메모리 오버헤드가 있으며, 불변객체이므로 값을 변경할 수 없음&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 기본적으로 int를 사용하여 정수 값을 다루고, 특별한 경우에만 Integer 래퍼 클래스를 사용하는 것을 권장&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;제네릭(Generic)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;클래스 내부에서 지정하는 것이 아닌 외부에서 사용자에 의해 지정되는 것&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;특정 타입을 미리 지정해두는 것이 아닌 필요에 의해 지정할 수 있도록 일반 타입이라는 것&lt;/p&gt;</description>
      <category>질문 정리</category>
      <author>Goyoungjung</author>
      <guid isPermaLink="true">https://coding-goyoungjung.tistory.com/16</guid>
      <comments>https://coding-goyoungjung.tistory.com/16#entry16comment</comments>
      <pubDate>Mon, 24 Jul 2023 11:06:03 +0900</pubDate>
    </item>
    <item>
      <title>this.$nextTick()</title>
      <link>https://coding-goyoungjung.tistory.com/15</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;vue.js에서 제공하는 메소드&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;vue의 반응성 시스템을 이해하고 활용하는데 유용&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;vue 컴포넌트는 데이터가 변경되면 자동으로 리렌더링되지만, 때로는 변경된 데이터가 DOM에 적용되기 전에 코드를 실행해야 하는 경우가 있음 -&amp;gt; 이때 this.$nextTick()를 사용해야 함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;DOM 업데이트 사이클에서 코드 실행 함. 즉 데이터 변경 후 DOM 업데이트가 완료된 시점에서 콜백 함수를 실행&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-&amp;gt; 변경된 데이터가 반영된 화면을 기반으로 추가적인 작업을 수행할 수 있음&lt;/p&gt;
&lt;pre id=&quot;code_1689731964243&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;template&amp;gt;
  &amp;lt;Title name=&quot;TO-DO&quot; /&amp;gt;
  &amp;lt;ToDoInput /&amp;gt;

  &amp;lt;div v-for=&quot;data in dataJson&quot; :key=&quot;data.id&quot;&amp;gt;
    &amp;lt;div&amp;gt;
      &amp;lt;input type=&quot;checkbox&quot; :id=&quot;data.id&quot; @click=&quot;check&quot; /&amp;gt;{{ data.todo }}
    &amp;lt;/div&amp;gt;
  &amp;lt;/div&amp;gt;
  &amp;lt;ToDoList /&amp;gt;
&amp;lt;/template&amp;gt;

&amp;lt;script&amp;gt;
import axios from &quot;axios&quot;;
import Title from &quot;./components/Title.vue&quot;;
import ToDoInput from &quot;./components/ToDoInput.vue&quot;;
import ToDoList from &quot;./components/ToDoList.vue&quot;;

export default {
  name: &quot;App&quot;,
  components: {
    Title,
    ToDoInput,
    ToDoList,
  },
  data() {
    return {
      dataJson: null, // json 파일에 저장되어있는 데이터를 dataJson으로 저장
      checkedCategories: [],
    };
  },
  created() {
    this.getData();
  },
  methods: {
    // 서버 측에게 ToDoList data를 요청하고 받아와 화면에 출력
    getData() {
      axios
        .get(&quot;http://localhost:3000/getData&quot;)
        .then((response) =&amp;gt; {
          this.dataJson = response.data;
        })

        .catch((error) =&amp;gt; {
          console.error(error);
        });
    },
    check(e) {
      this.$nextTick(() =&amp;gt; {
        console.log(e.target.id);
      });
    },
  },
};
&amp;lt;/script&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>vue</category>
      <author>Goyoungjung</author>
      <guid isPermaLink="true">https://coding-goyoungjung.tistory.com/15</guid>
      <comments>https://coding-goyoungjung.tistory.com/15#entry15comment</comments>
      <pubDate>Wed, 19 Jul 2023 10:59:48 +0900</pubDate>
    </item>
    <item>
      <title>git commit</title>
      <link>https://coding-goyoungjung.tistory.com/14</link>
      <description>&lt;ul style=&quot;list-style-type: disc; background-color: #f7f7f8; color: #374151; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;feat: 새로운 기능 추가&lt;/li&gt;
&lt;li&gt;fix: 버그 수정&lt;/li&gt;
&lt;li&gt;docs: 문서 업데이트&lt;/li&gt;
&lt;li&gt;style: 코드 스타일 변경 (예: 들여쓰기, 공백 등)&lt;/li&gt;
&lt;li&gt;refactor: 코드 리팩토링 (기능 변경 없음)&lt;/li&gt;
&lt;li&gt;test: 테스트 코드 추가 또는 수정&lt;/li&gt;
&lt;li&gt;chore: 빌드 설정, 패키지 매니저 등의 변경사항&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>git</category>
      <author>Goyoungjung</author>
      <guid isPermaLink="true">https://coding-goyoungjung.tistory.com/14</guid>
      <comments>https://coding-goyoungjung.tistory.com/14#entry14comment</comments>
      <pubDate>Tue, 18 Jul 2023 16:05:43 +0900</pubDate>
    </item>
    <item>
      <title>Vue.js ref와 reactive 차이점</title>
      <link>https://coding-goyoungjung.tistory.com/13</link>
      <description>&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;ref&lt;/h2&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;ref&lt;span style=&quot;background-color: #f7f7f8; color: #374151; text-align: left;&quot;&gt;로 래핑된 변수를 변경하면 Vue는 해당 변수에 대한 반응성을 추적하고 변경 사항을 감지하여 자동으로 컴포넌트를 업데이트&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1689638950555&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import { ref } from 'vue';

const count = ref(0);
console.log(count.value); // 0

count.value++; // 변수 변경
console.log(count.value); // 1&lt;/code&gt;&lt;/pre&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;reactive&lt;/h2&gt;
&lt;pre id=&quot;code_1689639021801&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import { reactive } from 'vue';

const state = reactive({
  count: 0,
  message: 'Hello'
});

console.log(state.count); // 0
console.log(state.message); // 'Hello'

state.count++; // 프로퍼티 변경
state.message = 'Updated message';
console.log(state.count); // 1
console.log(state.message); // 'Updated message'&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;reactive&lt;span style=&quot;background-color: #f7f7f8; color: #374151; text-align: left;&quot;&gt;로 감싼 객체의 프로퍼티에 접근하면 Vue는 해당 프로퍼티의 의존성을 추적하고 변경 사항을 감지하여 자동으로 컴포넌트를 업데이트&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #f7f7f8; color: #374151; text-align: left;&quot;&gt; &lt;/span&gt;reactive&lt;span style=&quot;background-color: #f7f7f8; color: #374151; text-align: left;&quot;&gt;는 객체 단위로 동작하며, 객체의 모든 프로퍼티가 반응성 가짐&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #f7f7f8; color: #374151; text-align: left; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;ref&lt;span style=&quot;background-color: #f7f7f8; color: #374151; text-align: start;&quot;&gt;는 &lt;span style=&quot;color: #ee2323;&quot;&gt;단일 변수&lt;/span&gt;에 사용되고 &lt;/span&gt;reactive&lt;span style=&quot;background-color: #f7f7f8; color: #374151; text-align: start;&quot;&gt;는 &lt;span style=&quot;color: #ee2323;&quot;&gt;객체&lt;/span&gt;에 사용&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #f7f7f8; color: #374151; text-align: left; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;ref&lt;span style=&quot;background-color: #f7f7f8; color: #374151; text-align: start;&quot;&gt;로 래핑된 변수에는 &lt;/span&gt;.value&lt;span style=&quot;background-color: #f7f7f8; color: #374151; text-align: start;&quot;&gt;를 사용하여 접근하고 변경&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #f7f7f8; color: #374151; text-align: left; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span style=&quot;background-color: #f7f7f8; color: #374151; text-align: start;&quot;&gt; &lt;/span&gt;reactive&lt;span style=&quot;background-color: #f7f7f8; color: #374151; text-align: start;&quot;&gt;로 만들어진 객체의 프로퍼티에는 직접 접근하거나 할당 가능&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;</description>
      <category>vue</category>
      <author>Goyoungjung</author>
      <guid isPermaLink="true">https://coding-goyoungjung.tistory.com/13</guid>
      <comments>https://coding-goyoungjung.tistory.com/13#entry13comment</comments>
      <pubDate>Tue, 18 Jul 2023 09:12:29 +0900</pubDate>
    </item>
  </channel>
</rss>