<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>코띵</title>
    <link>https://opidea.tistory.com/</link>
    <description></description>
    <language>ko</language>
    <pubDate>Wed, 8 Apr 2026 01:49:06 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>Isaac01</managingEditor>
    <item>
      <title>[spring] 스프링 컨테이너 ApplicationContext와  @Configuration, @Bean 어노테이션</title>
      <link>https://opidea.tistory.com/entry/spring-Configuration-%ED%81%B4%EB%9E%98%EC%8A%A4%EC%99%80-Bean</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;@Configuration이란?&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 스프링 설정 클래스임을나타내는 어노테이션&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 이 클래스 안에는 하나 이상의 @Bean 메서드가 있으며,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; 스프링 컨테이너가 이들을 읽어 빈(Bean)을생성하고 관리함&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;@Bean 어노테이션이란?&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 스프링 컨테이너가 관리할 Bean을 생성하는 메서드에 붙이는 어노테이션&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 보통 @Bean은 @Configuration 클래스 안에서 사용됨&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;&amp;nbsp;&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;@Bean이 붙은 메서드의 반환 객체가 컨테이너에 빈으로 등록된다.&lt;/p&gt;
&lt;div style=&quot;background-color: #1e1f22; color: #bcbec4;&quot;&gt;
&lt;pre class=&quot;java&quot;&gt;&lt;code&gt;@Configuration
public class AppConfig {

    @Bean
    public MemberService memberService() {
        return new MemberServiceImpl(memberRepository());
    }

    @Bean
    public MemberRepository memberRepository() {
        return new MemoryMemberRepository();
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;스프링은 @Configuration 클래스를 그대로 사용하지 않고, CGLIB이라는 라이브러리로 프록시(Proxy)만들어 감싼다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;ldquo;Proxy&amp;rdquo;는 영어로 대리인이라는 뜻이다. 즉 &amp;ldquo;원래 객체 대신 일을 처리하는 가짜 객체&amp;rdquo;라고 생각하면 된다.&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;&amp;nbsp;&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;코드로 보면 다음과 같다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;631&quot; data-origin-height=&quot;62&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ev3jZa/dJMcacH9CRs/UVY2KTWJ0yMp9XNmeipch1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ev3jZa/dJMcacH9CRs/UVY2KTWJ0yMp9XNmeipch1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ev3jZa/dJMcacH9CRs/UVY2KTWJ0yMp9XNmeipch1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fev3jZa%2FdJMcacH9CRs%2FUVY2KTWJ0yMp9XNmeipch1%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;631&quot; height=&quot;62&quot; data-origin-width=&quot;631&quot; data-origin-height=&quot;62&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이런 경우, 한 @Bean 메서드가 다른 @Bean 메서드를 직접 호출해도 스프링이 CGLIB 프록시를 통해 관리하므로 싱글톤이 보장된다. 즉, &lt;span style=&quot;background-color: #dddddd;&quot;&gt;return new MemberServiceImpl(memberRepository());&lt;/span&gt; 는 단순히 새 객체를 만드는 게 아니라, 컨테이너에 이미 등록된 동일한 Bean을 가져오는 것처럼 동작한다.&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;&amp;nbsp;&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;이 동작을 위해 @Configuration 클래스는 final 또는 private이면 안 된다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&amp;nbsp;final &amp;rarr; 상속 자체가 금지라서 CGLIB이 프록시 클래스를 만들 수 없음&lt;/li&gt;
&lt;li&gt;private &amp;rarr; 클래스 접근이 불가능해서 역시 프록시 생성 불가능&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;이제 빈에 등록된 객체를&lt;/b&gt;&lt;b&gt; 사용할 땐&amp;nbsp;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ApplicationContext 사용하면 된다.&lt;/p&gt;
&lt;h3 data-end=&quot;191&quot; data-start=&quot;159&quot; data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-end=&quot;191&quot; data-start=&quot;159&quot; data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;ApplicationContext란?&lt;/h3&gt;
&lt;p data-end=&quot;304&quot; data-start=&quot;192&quot; data-ke-size=&quot;size16&quot;&gt;ApplicationContext는 &lt;b&gt;스프링 컨테이너(Spring Container)&lt;/b&gt; 이다.&lt;br /&gt;스프링 컨테이너는 &lt;b&gt;@Configuration&lt;/b&gt; 이 붙은 &lt;b&gt;AppConfig&lt;/b&gt; 를 설정(구성) 정보로 사용한다. 여기서 &lt;b&gt;@Bean&lt;/b&gt;이라 적힌 메서드를 모두 호출해서 변환된 객체를 스프링 컨테이너에 등록한다. 이렇게 스프링 컨테이넝 등록된 객체를 스프링&amp;nbsp;스프링 빈이라 한다.&amp;nbsp;&lt;/p&gt;
&lt;div style=&quot;background-color: #1e1f22; color: #bcbec4;&quot;&gt;
&lt;pre class=&quot;bash&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;public class MemberApp {

    public static void main(String[] args) {

        ApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfig.class);
        MemberService memberService = applicationContext.getBean(&quot;memberService&quot;, MemberService.class);

        Member member = new Member(1L, &quot;memberA&quot;, Grade.VIP);
        memberService.join(member);
        
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;h3 data-end=&quot;523&quot; data-start=&quot;463&quot; data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-end=&quot;523&quot; data-start=&quot;463&quot; data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-end=&quot;523&quot; data-start=&quot;463&quot; data-ke-size=&quot;size23&quot;&gt;getBean(&quot;memberService&quot;, MemberService.class) 의미&lt;/h3&gt;
&lt;p data-end=&quot;566&quot; data-start=&quot;524&quot; data-ke-size=&quot;size16&quot;&gt;이 메서드는 스프링 컨테이너 안에 등록된 &lt;b&gt;스프링 빈을 꺼내는 코드&lt;/b&gt;다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;884&quot; data-start=&quot;568&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;750&quot; data-start=&quot;568&quot;&gt;&quot;memberService&quot;&lt;br /&gt;&amp;rarr; @Bean 메서드의 이름이다.&lt;br /&gt;이름을 따로 지정하지 않으면 빈 이름은 &quot;memberService&quot;가 된다.
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/li&gt;
&lt;li data-end=&quot;884&quot; data-start=&quot;752&quot;&gt;MemberService.class&lt;br /&gt;&amp;rarr; 반환 타입을 명시한다.&lt;br /&gt;즉, 스프링 컨테이너 안에서 memberService라는 이름으로 등록된 객체 중&lt;br /&gt;MemberService 타입의 빈을 가져온다는 뜻이다.&lt;/li&gt;
&lt;/ul&gt;</description>
      <author>Isaac01</author>
      <guid isPermaLink="true">https://opidea.tistory.com/55</guid>
      <comments>https://opidea.tistory.com/entry/spring-Configuration-%ED%81%B4%EB%9E%98%EC%8A%A4%EC%99%80-Bean#entry55comment</comments>
      <pubDate>Thu, 30 Oct 2025 16:48:04 +0900</pubDate>
    </item>
    <item>
      <title>[Github] 한개의 repository에 여러 프로젝트 올리기</title>
      <link>https://opidea.tistory.com/entry/Github-%ED%95%9C%EA%B0%9C%EC%9D%98-repository%EC%97%90-%EC%97%AC%EB%9F%AC-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-%EC%98%AC%EB%A6%AC%EA%B8%B0</link>
      <description>&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1. git 설치는 필수적&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;사용자 정보 설정 (최초 1회)&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;git config --global user.name &quot;유저이름&quot; &lt;br /&gt;git config --global user.email &quot;유저메일&quot;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;사용자 등록됐는지 확인할 땐&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;git config --global user.name&lt;br /&gt;git config --global user.email&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2. 올리고 싶은 프로젝트들이 존재하는 폴더로 이동&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;testFile 파일 내부에 3가지 파일이 존재한다.&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;3. 우클릭 &amp;gt; Git Bash Here 클릭&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;628&quot; data-origin-height=&quot;661&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/6bObP/dJMcadtv6Ox/AZcfRf9g921csEDfWCISu0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/6bObP/dJMcadtv6Ox/AZcfRf9g921csEDfWCISu0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/6bObP/dJMcadtv6Ox/AZcfRf9g921csEDfWCISu0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F6bObP%2FdJMcadtv6Ox%2FAZcfRf9g921csEDfWCISu0%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;628&quot; height=&quot;661&quot; data-origin-width=&quot;628&quot; data-origin-height=&quot;661&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&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;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;4. git init&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;636&quot; data-origin-height=&quot;162&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/B5ijg/dJMcagRjoRk/0Hhk2Cju5Yp7QOQkqEKg11/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/B5ijg/dJMcagRjoRk/0Hhk2Cju5Yp7QOQkqEKg11/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/B5ijg/dJMcagRjoRk/0Hhk2Cju5Yp7QOQkqEKg11/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FB5ijg%2FdJMcagRjoRk%2F0Hhk2Cju5Yp7QOQkqEKg11%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;636&quot; height=&quot;162&quot; data-origin-width=&quot;636&quot; data-origin-height=&quot;162&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;- 기본 브런치가 master로 돼있는데 main으로 수정하려면&amp;nbsp; &quot;git branch -M main&quot; 입&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;5. git add ./폴더이름&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;6. git commit -m &quot;first commit&quot;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;7. git remote add origin&lt;span&gt;&amp;nbsp;&lt;/span&gt;레파지토리주소&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt;8. git push -u origin main&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;568&quot; data-origin-height=&quot;541&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/MG30q/dJMcajAvasO/C5Xvj9jG9h3c6O2ZVfWT9k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/MG30q/dJMcajAvasO/C5Xvj9jG9h3c6O2ZVfWT9k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/MG30q/dJMcajAvasO/C5Xvj9jG9h3c6O2ZVfWT9k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FMG30q%2FdJMcajAvasO%2FC5Xvj9jG9h3c6O2ZVfWT9k%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;568&quot; height=&quot;541&quot; data-origin-width=&quot;568&quot; data-origin-height=&quot;541&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정상적으로 올바온 파일 3개를 확인 할 수 있다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;895&quot; data-origin-height=&quot;217&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/FDI7c/dJMcajAvau8/iesFKPbeWHkP5ukWWLhxtk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/FDI7c/dJMcajAvau8/iesFKPbeWHkP5ukWWLhxtk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/FDI7c/dJMcajAvau8/iesFKPbeWHkP5ukWWLhxtk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FFDI7c%2FdJMcajAvau8%2FiesFKPbeWHkP5ukWWLhxtk%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;895&quot; height=&quot;217&quot; data-origin-width=&quot;895&quot; data-origin-height=&quot;217&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&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;&amp;nbsp;&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;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;간혹 한번에 파일이 안올라 간다고 하시는 분들이 계시는데 그러면 &quot;git add ./파일이름&quot;를 하나씩 해주면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1. git add ./one&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2. git commit -m &quot;first&quot;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;3. git remote add origin&lt;span&gt;&amp;nbsp;&lt;/span&gt;레파지토리주소&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;(주소는 처음 파일 올릴때 한번만&amp;nbsp; 등록함)&lt;b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt;4. git push -u origin main&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;그리고 다시 1, 2, 4번을 반복해 주면 다음과 같이 정상적으로 파일이 올라가는 것을 확인 가능!&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;900&quot; data-origin-height=&quot;222&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/F91zJ/dJMcaeeTf3x/jImi9zke5c4aWqYKt9MDf1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/F91zJ/dJMcaeeTf3x/jImi9zke5c4aWqYKt9MDf1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/F91zJ/dJMcaeeTf3x/jImi9zke5c4aWqYKt9MDf1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FF91zJ%2FdJMcaeeTf3x%2FjImi9zke5c4aWqYKt9MDf1%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;900&quot; height=&quot;222&quot; data-origin-width=&quot;900&quot; data-origin-height=&quot;222&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>Git &amp;amp; GitHub</category>
      <author>Isaac01</author>
      <guid isPermaLink="true">https://opidea.tistory.com/54</guid>
      <comments>https://opidea.tistory.com/entry/Github-%ED%95%9C%EA%B0%9C%EC%9D%98-repository%EC%97%90-%EC%97%AC%EB%9F%AC-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-%EC%98%AC%EB%A6%AC%EA%B8%B0#entry54comment</comments>
      <pubDate>Fri, 17 Oct 2025 14:00:06 +0900</pubDate>
    </item>
    <item>
      <title>객체지향 5원칙 SOLID</title>
      <link>https://opidea.tistory.com/entry/%EA%B0%9D%EC%B2%B4%EC%A7%80%ED%96%A5-5%EC%9B%90%EC%B9%99-SOLID</link>
      <description>&lt;div class=&quot;container&quot;&gt;&lt;header&gt;
&lt;h1&gt;SOLID 원칙 완전 정리 (Java/Spring 예시)&lt;/h1&gt;
&lt;p class=&quot;subtitle&quot; data-ke-size=&quot;size16&quot;&gt;객체지향 설계를 유연하고 확장 가능하게 만드는 5대 원칙: SRP &amp;middot; OCP &amp;middot; LSP &amp;middot; ISP &amp;middot; DIP&lt;/p&gt;
&lt;/header&gt;
&lt;div class=&quot;toc&quot;&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;목차&lt;/h2&gt;
&lt;a href=&quot;#srp&quot;&gt;1) SRP &amp;mdash; 단일 책임 원칙&lt;/a&gt; &lt;a href=&quot;#ocp&quot;&gt;2) OCP &amp;mdash; 개방-폐쇄 원칙&lt;/a&gt; &lt;a href=&quot;#lsp&quot;&gt;3) LSP &amp;mdash; 리스코프 치환 원칙&lt;/a&gt; &lt;a href=&quot;#isp&quot;&gt;4) ISP &amp;mdash; 인터페이스 분리 원칙&lt;/a&gt; &lt;a href=&quot;#dip&quot;&gt;5) DIP &amp;mdash; 의존 역전 원칙&lt;/a&gt; &lt;a href=&quot;#summary&quot;&gt;요약표 &amp;amp; 마무리&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;callout&quot;&gt;&lt;b&gt;요약:&lt;/b&gt; SOLID는 언어에 독립적인 객체지향 원칙입니다. 본문 예시는 이해를 돕기 위해 &lt;b&gt;Java/Spring&lt;/b&gt;으로 작성했지만, 개념은 Kotlin, Python, TypeScript 등 어디에나 적용됩니다.&lt;/div&gt;
&lt;!-- SRP --&gt;
&lt;section id=&quot;srp&quot;&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;1) SRP(Single Responsibility Principle) &amp;mdash; 단일 책임 원칙&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;클래스(모듈)는 &lt;b&gt;단 하나의 책임&lt;/b&gt;만 가져야 합니다. 즉, &lt;i&gt;변경 사유는 하나&lt;/i&gt;여야 유지보수성이 높아집니다.&lt;/p&gt;
&lt;div class=&quot;grid&quot;&gt;
&lt;div class=&quot;card&quot;&gt;&lt;span class=&quot;chip&quot;&gt;문제 예시&lt;/span&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;하나의 클래스에 모든 책임이 몰린 경우&lt;/h3&gt;
&lt;pre class=&quot;cpp&quot;&gt;&lt;code&gt;// ❌ 나쁜 예
class Report {
    void calculate() {}
    void saveToDB() {}
    void printReport() {}
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p class=&quot;tip&quot; data-ke-size=&quot;size16&quot;&gt;계산&amp;middot;영속화&amp;middot;출력 책임이 섞여있어 변경 여파가 커집니다.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;card&quot;&gt;&lt;span class=&quot;chip&quot;&gt;개선&lt;/span&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;역할 분리&lt;/h3&gt;
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;// ✅ 좋은 예
class ReportCalculator { void calculate() {} }
class ReportRepository { void saveToDB() {} }
class ReportPrinter { void printReport() {} }
&lt;/code&gt;&lt;/pre&gt;
&lt;p class=&quot;tip&quot; data-ke-size=&quot;size16&quot;&gt;각 책임을 분리하면 테스트와 교체가 쉬워집니다.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/section&gt;
&lt;div class=&quot;hr&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;!-- OCP --&gt;
&lt;section id=&quot;ocp&quot;&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;2) OCP(Open/Closed Principle) &amp;mdash; 개방-폐쇄 원칙&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;소프트웨어 요소는 &lt;b&gt;확장에는 열려&lt;/b&gt; 있고, &lt;b&gt;변경에는 닫혀&lt;/b&gt; 있어야 합니다. 즉, 새로운 기능을 추가할 때 기존 코드를 뜯어고치지 않고 &lt;i&gt;확장&lt;/i&gt;으로 해결합니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;인터페이스 기반 확장&lt;/h3&gt;
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;// 추상화
public interface DiscountPolicy {
    int discount(Member member, int price);
}

// 구현체 확장
public class RateDiscountPolicy implements DiscountPolicy {
    public int discount(Member m, int price){ return price * 10 / 100; }
}

public class FixDiscountPolicy implements DiscountPolicy {
    public int discount(Member m, int price){ return 1000; }
}

// 클라이언트: 추상화에만 의존
public class OrderService {
    private final DiscountPolicy discountPolicy;
    public OrderService(DiscountPolicy discountPolicy){
        this.discountPolicy = discountPolicy;
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Spring에서 구현체 선택(빈 충돌 해결)&lt;/h3&gt;
&lt;pre class=&quot;java&quot;&gt;&lt;code&gt;// 방법 1) @Primary 또는 @Qualifier
@Primary
@Component
class RateDiscountPolicy implements DiscountPolicy { ... }

@Component(&quot;fix&quot;)
class FixDiscountPolicy implements DiscountPolicy { ... }

@Service
class OrderService {
    private final DiscountPolicy discountPolicy;
    OrderService(@Qualifier(&quot;fix&quot;) DiscountPolicy discountPolicy) {
        this.discountPolicy = discountPolicy; // 설정만 바꿔 교체
    }
}

// 방법 2) 자바 설정으로 선택
@Configuration
class AppConfig {
    @Bean DiscountPolicy discountPolicy() { return new RateDiscountPolicy(); }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p class=&quot;tip&quot; data-ke-size=&quot;size16&quot;&gt;설정만 바꿔 구현을 교체하면 &lt;i&gt;코드 수정 없이 확장&lt;/i&gt;이 가능해 OCP를 충족합니다.&lt;/p&gt;
&lt;/section&gt;
&lt;div class=&quot;hr&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;!-- LSP --&gt;
&lt;section id=&quot;lsp&quot;&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;3) LSP(Liskov Substitution Principle) &amp;mdash; 리스코프 치환 원칙&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하위 타입은 상위 타입으로 &lt;b&gt;대체 가능&lt;/b&gt;해야 합니다. 상위 타입의 &lt;i&gt;계약(규약)&lt;/i&gt;을 하위 타입이 깨면 안 됩니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;교과서적 반례&lt;/h3&gt;
&lt;pre class=&quot;arduino&quot;&gt;&lt;code&gt;class Rectangle {
    int width, height;
    void setWidth(int w){ this.width = w; }
    void setHeight(int h){ this.height = h; }
    int area(){ return width * height; }
}

class Square extends Rectangle {
    @Override void setWidth(int w){ this.width = this.height = w; }
    @Override void setHeight(int h){ this.width = this.height = h; }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p class=&quot;tip&quot; data-ke-size=&quot;size16&quot;&gt;사각형의 &amp;ldquo;가로&amp;middot;세로 독립 설정&amp;rdquo; 계약을 정사각형이 깨뜨려 LSP 위반. 해결은 &lt;b&gt;상속 대신 구성&lt;/b&gt; 또는 별도 타입 모델링.&lt;/p&gt;
&lt;/section&gt;
&lt;div class=&quot;hr&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;!-- ISP --&gt;
&lt;section id=&quot;isp&quot;&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;4) ISP(Interface Segregation Principle) &amp;mdash; 인터페이스 분리 원칙&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;클라이언트는 사용하지 않는 메서드에 &lt;b&gt;의존하면 안 됩니다&lt;/b&gt;. 큰 인터페이스 하나보다 &lt;b&gt;작은 인터페이스&lt;/b&gt; 여러 개가 낫습니다.&lt;/p&gt;
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;// ❌ 나쁜 예: 거대한 인터페이스
interface Machine { void print(); void scan(); void fax(); }

// ✅ 좋은 예: 역할별 인터페이스
interface Printer { void print(); }
interface Scanner { void scan(); }
interface Fax { void fax(); }

class MultiFunctionPrinter implements Printer, Scanner, Fax { ... }
class SimplePrinter implements Printer { ... }
&lt;/code&gt;&lt;/pre&gt;
&lt;p class=&quot;tip&quot; data-ke-size=&quot;size16&quot;&gt;클라이언트별로 필요한 최소 인터페이스만 의존하게 설계하면 변경 여파가 줄고 테스트가 쉬워집니다.&lt;/p&gt;
&lt;/section&gt;
&lt;div class=&quot;hr&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;!-- DIP --&gt;
&lt;section id=&quot;dip&quot;&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;5) DIP(Dependency Inversion Principle) &amp;mdash; 의존 역전 원칙&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;고수준 모듈&lt;/b&gt;이 저수준 모듈에 직접 의존하지 말고, &lt;b&gt;추상화(인터페이스)&lt;/b&gt;에 의존해야 합니다. 스프링 DI가 이를 쉽게 실천하게 해 줍니다.&lt;/p&gt;
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;public interface DiscountPolicy { int discount(Member m, int price); }

public class RateDiscountPolicy implements DiscountPolicy { ... }

// 고수준 모듈: 추상화에만 의존
public class OrderService {
    private final DiscountPolicy discountPolicy;
    public OrderService(DiscountPolicy discountPolicy){
        this.discountPolicy = discountPolicy;
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p class=&quot;tip&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span class=&quot;kbd&quot;&gt;new 구현체()&lt;/span&gt;를 서비스에서 직접 만들지 말고 &lt;b&gt;생성자 주입&lt;/b&gt;을 사용하세요. 테스트에서 목 주입이 쉬워집니다.&lt;/p&gt;
&lt;/section&gt;
&lt;div class=&quot;hr&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;!-- Summary --&gt;
&lt;section id=&quot;summary&quot;&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;요약표&lt;/h2&gt;
&lt;table data-ke-align=&quot;alignLeft&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;원칙&lt;/th&gt;
&lt;th&gt;이름&lt;/th&gt;
&lt;th&gt;핵심&lt;/th&gt;
&lt;th&gt;키워드&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;S (SRP)&lt;/td&gt;
&lt;td&gt;단일 책임 원칙&lt;/td&gt;
&lt;td&gt;클래스는 하나의 책임(변경 사유 하나)&lt;/td&gt;
&lt;td&gt;역할 분리, 테스트 용이&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;O (OCP)&lt;/td&gt;
&lt;td&gt;개방-폐쇄 원칙&lt;/td&gt;
&lt;td&gt;확장에는 열려, 변경에는 닫혀&lt;/td&gt;
&lt;td&gt;인터페이스, 다형성, 설정으로 교체&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;L (LSP)&lt;/td&gt;
&lt;td&gt;리스코프 치환 원칙&lt;/td&gt;
&lt;td&gt;하위 타입은 상위 타입을 대체 가능&lt;/td&gt;
&lt;td&gt;계약 유지, 상속 남용 주의&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;I (ISP)&lt;/td&gt;
&lt;td&gt;인터페이스 분리 원칙&lt;/td&gt;
&lt;td&gt;불필요한 메서드 의존 금지&lt;/td&gt;
&lt;td&gt;작은 인터페이스, 역할별 분리&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;D (DIP)&lt;/td&gt;
&lt;td&gt;의존 역전 원칙&lt;/td&gt;
&lt;td&gt;구현체 X, 추상화에 의존&lt;/td&gt;
&lt;td&gt;DI/IoC, 생성자 주입&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;br /&gt;
&lt;p class=&quot;foot&quot; data-ke-size=&quot;size16&quot;&gt;참고: 본문 예시는 이해를 돕기 위해 Java/Spring 중심으로 구성했지만, 원칙 자체는 언어에 독립적입니다.&lt;/p&gt;
&lt;/section&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;style&gt;
  /* ===== Light Theme (Dark mode disabled) ===== */
  :root{
    --bg:#ffffff; --text:#111827; --muted:#4b5563; --card:#f8fafc; --accent:#1d4ed8; --accent-2:#7c3aed; --border:#e5e7eb; --code-bg:#0b1020; --code-text:#f1f5f9;
  }
  *{box-sizing:border-box}
  body{margin:0; font-family:-apple-system,BlinkMacSystemFont,&quot;Segoe UI&quot;,Roboto,Inter,Apple SD Gothic Neo,Noto Sans KR,Helvetica,Arial,sans-serif; background:var(--bg); color:var(--text); line-height:1.65}
  .container{max-width:900px; margin:0 auto; padding:28px 20px 80px}
  header{margin-bottom:22px}
  h1{font-size:clamp(26px,4vw,36px); line-height:1.2; margin:0 0 8px; letter-spacing:-.2px}
  .subtitle{color:var(--muted); margin:0 0 18px}
  .badges{display:flex; gap:8px; flex-wrap:wrap; margin:8px 0 18px}
  .badge{font-size:12px; padding:6px 10px; background:linear-gradient(135deg,var(--accent),var(--accent-2)); color:#ffffff; border-radius:999px; font-weight:600}
  .toc{background:var(--card); border:1px solid var(--border); border-radius:14px; padding:16px; margin:18px 0 28px}
  .toc h2{font-size:16px; margin:0 0 8px}
  .toc a{display:block; padding:6px 0; color:var(--accent); text-decoration:none}
  .toc a:hover{text-decoration:underline}
  .callout{
    background:linear-gradient(180deg, rgba(29,78,216,.06), rgba(124,58,237,.06));
    border:1px dashed var(--border); border-radius:16px; padding:14px 16px; margin:16px 0 26px; color:var(--text)
  }
  .grid{display:grid; grid-template-columns:1fr; gap:16px; margin:10px 0 26px}
  @media(min-width:780px){ .grid{grid-template-columns:1fr 1fr} }
  .card{background:var(--card); border:1px solid var(--border); border-radius:16px; padding:18px}
  .card h3{margin:0 0 8px; font-size:20px}
  .chip{display:inline-block; font-size:12px; padding:4px 8px; border-radius:999px; background:rgba(29,78,216,.10); color:var(--accent); margin-bottom:10px; border:1px solid rgba(29,78,216,.18)}
  h2{font-size:22px; margin:24px 0 10px}
  h3{font-size:18px; margin:16px 0 8px}
  ul,ol{padding-left:20px}
  code.inline{background:#eef2ff; padding:2px 6px; border-radius:6px; font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace}
  pre{background:var(--code-bg); color:var(--code-text); padding:16px; border-radius:14px; overflow:auto; line-height:1.5; border:1px solid #0f172a; margin:12px 0 18px}
  pre code{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace; font-size:13px}
  table{width:100%; border-collapse:collapse; margin:12px 0 26px; font-size:15px}
  th,td{border:1px solid var(--border); padding:10px; text-align:left}
  th{background:var(--card)}
  .foot{margin-top:34px; color:var(--muted); font-size:14px}
  .tip{font-size:14px; color:var(--muted)}
  .kbd{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace; font-size:12px; padding:2px 6px; border:1px solid var(--border); border-bottom-width:2px; border-radius:6px; background:var(--bg)}
  .hr{height:1px; background:var(--border); margin:26px 0}
  a.btn{display:inline-block; padding:10px 14px; border-radius:12px; border:1px solid var(--border); text-decoration:none; color:var(--text); background:var(--card)}
  .align-c{text-align:center}
&lt;/style&gt;
&lt;/div&gt;</description>
      <author>Isaac01</author>
      <guid isPermaLink="true">https://opidea.tistory.com/53</guid>
      <comments>https://opidea.tistory.com/entry/%EA%B0%9D%EC%B2%B4%EC%A7%80%ED%96%A5-5%EC%9B%90%EC%B9%99-SOLID#entry53comment</comments>
      <pubDate>Fri, 17 Oct 2025 13:52:39 +0900</pubDate>
    </item>
    <item>
      <title>&amp;lt;Spring&amp;gt; @RequestMapping의 개념 및 동작 방식</title>
      <link>https://opidea.tistory.com/entry/Spring-%EA%B0%9C%EB%B0%9C-%EC%8B%9C-%EC%9E%90%EC%A3%BC-%EC%82%AC%EC%9A%A9%ED%95%98%EB%8A%94-RequestMapping%EC%9D%98-%EA%B0%9C%EB%85%90-%EB%B0%8F-%EB%8F%99%EC%9E%91-%EB%B0%A9%EC%8B%9D</link>
      <description>&lt;div&gt;
&lt;style&gt;
/* 본문 전체 스타일 */
body {
  font-family: &quot;Noto Sans KR&quot;, Arial, sans-serif;
  line-height: 1.7;
  color: #333;
}

/* 제목 스타일 */
h1 {
  color: #2c3e50;
  /* border-bottom 제거: 상단의 파란 줄 제거 */
  padding-bottom: 8px;
}
h2 {
  color: #34495e;
  margin-top: 35px;
  border-left: 6px solid #3498db;
  padding-left: 10px;
}
h3 {
  color: #16a085;
  margin-top: 25px;
}

/* 강조 텍스트 */
b, strong {
  color: #e74c3c;
}

/* 코드 블록 */
pre {
  background: #f8f9fa;
  border: 1px solid #ddd;
  border-radius: 8px;
  padding: 12px;
  overflow-x: auto;
  margin: 15px 0;
}
code {
  font-family: &quot;Consolas&quot;, monospace;
  color: #2c3e50;
}

/* 설명 박스 */
.note {
  background: #ecf9ff;
  border-left: 6px solid #3498db;
  padding: 12px 15px;
  margin: 20px 0;
  border-radius: 6px;
}
&lt;/style&gt;
&lt;/div&gt;
&lt;h1&gt;&amp;nbsp;&lt;/h1&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;1. @RequestMapping이란?&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Spring 개발 시 특정 &lt;b&gt;URL&lt;/b&gt;로 요청(Request)을 보내면 &lt;b&gt;Controller&lt;/b&gt;에서 어떤 방식으로 처리할지 정의합니다.&lt;br /&gt;이때 들어온 요청을 특정 method와 매핑하기 위해 사용하는 어노테이션이 바로 &lt;b&gt;@RequestMapping&lt;/b&gt;입니다.&lt;/p&gt;
&lt;div class=&quot;note&quot;&gt;✔ &lt;b&gt;@RequestMapping&lt;/b&gt;은 &lt;code&gt;@Controller&lt;/code&gt;와 함께 사용되며,&lt;br /&gt;URL과 Controller의 메서드를 매핑하는 역할을 합니다.&lt;/div&gt;
&lt;pre class=&quot;java&quot;&gt;&lt;code&gt;@RestController
public class MainController {
    
    @RequestMapping(value = &quot;/main&quot;, method = RequestMethod.GET)
    public String Main(...) {
        ...
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;value&lt;/b&gt; : 요청받을 &lt;span style=&quot;color: #2980b9;&quot;&gt;URL&lt;/span&gt; 설정&lt;/li&gt;
&lt;li&gt;&lt;b&gt;method&lt;/b&gt; : &lt;span style=&quot;color: #27ae60;&quot;&gt;GET, POST, PUT, DELETE&lt;/span&gt; 등 요청 방식 지정&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;(1) HTTP 요청 메서드&lt;/h3&gt;
&lt;div class=&quot;note&quot;&gt;HTTP는 요청 메서드를 정의하여 서버가 어떤 동작을 수행해야 하는지 지정합니다.&lt;/div&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #27ae60;&quot;&gt;&lt;b&gt;GET&lt;/b&gt;&lt;/span&gt; : 리소스 조회 (Read)&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #3498db;&quot;&gt;&lt;b&gt;POST&lt;/b&gt;&lt;/span&gt; : 리소스 생성 (Create)&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #f39c12;&quot;&gt;&lt;b&gt;PUT&lt;/b&gt;&lt;/span&gt; : 리소스 수정 (Update)&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #d35400;&quot;&gt;&lt;b&gt;PATCH&lt;/b&gt;&lt;/span&gt; : 리소스 일부 수정 (Update)&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #e74c3c;&quot;&gt;&lt;b&gt;DELETE&lt;/b&gt;&lt;/span&gt; : 리소스 삭제 (Delete)&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;2. @RequestMapping 작성 예시&lt;/h2&gt;
&lt;pre class=&quot;less&quot;&gt;&lt;code&gt;@RestController
public class MainController {

    @RequestMapping(value = &quot;/main&quot;, method = RequestMethod.GET)
    public String mainGet(...) { ... }

    @RequestMapping(value = &quot;/main&quot;, method = RequestMethod.POST)
    public String mainPost(...) { ... }

    @RequestMapping(value = &quot;/main&quot;, method = RequestMethod.PUT)
    public String mainPut(...) { ... }

    @RequestMapping(value = &quot;/main&quot;, method = RequestMethod.DELETE)
    public String mainDelete(...) { ... }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;div class=&quot;note&quot;&gt;Spring 4.3 이후에는 &lt;code&gt;@GetMapping&lt;/code&gt;, &lt;code&gt;@PostMapping&lt;/code&gt;, &lt;code&gt;@PutMapping&lt;/code&gt;, &lt;code&gt;@DeleteMapping&lt;/code&gt; 같은 단축 어노테이션을 제공하여 더 간결하게 작성할 수 있습니다.&lt;/div&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;(1) 단축 어노테이션 예시&lt;/h3&gt;
&lt;pre class=&quot;less&quot;&gt;&lt;code&gt;@GetMapping(&quot;/main&quot;)
public String mainGet(...) { ... }

@PostMapping(&quot;/main&quot;)
public String mainPost(...) { ... }

@PutMapping(&quot;/main&quot;)
public String mainPut(...) { ... }

@DeleteMapping(&quot;/main&quot;)
public String mainDelete(...) { ... }
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;(2) 클래스 레벨에서 사용&lt;/h3&gt;
&lt;!-- [추가 1-1] 설명란 추가 --&gt;
&lt;div class=&quot;note&quot;&gt;공통되는 URL이 있을 경우에는 Class 레벨에 @RequestMappringd을 작성할 수 있습니다.&lt;/div&gt;
&lt;pre class=&quot;less&quot;&gt;&lt;code&gt;@RestController
@RequestMapping(&quot;/api&quot;)
public class MainController {

    @GetMapping(&quot;/main1&quot;)
    public String mainGet(...) { ... }

    @PostMapping(&quot;/main2&quot;)
    public String helloPost(...) { ... }

    @PutMapping(&quot;/main3&quot;)
    public String helloPut(...) { ... }

    @DeleteMapping(&quot;/main4&quot;)
    public String helloDelete(...) { ... }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;!-- 병합된 하나의 파란 설명 박스 (원문 텍스트 그대로 유지) --&gt;
&lt;div class=&quot;note&quot; data-ke-size=&quot;size16&quot;&gt;위 코드에서 &quot;/api&quot;가 공통되는 URL이므로 @RequestMappringd(&quot;/api&quot;)을 해준 것을 확인할 수 있습니다.&lt;br /&gt;예: &lt;code&gt;localhost:8080/api/main1&lt;/code&gt; &amp;rarr; &lt;code&gt;mainGet()&lt;/code&gt; 호출&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;3. @RequestMapping의 동작 방식&lt;/h2&gt;
&lt;!-- [수정 2] 두 개 항목으로 교체 (괄호 제거) --&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;SpringBoot 애플리케이션이 실행되면 애플리케이션에서 사용할 Bean들을 담을 ApplicationContext를 생성하고 초기화한다.&lt;/li&gt;
&lt;li&gt;@RequestMapping이 붙은 Method들이 Handler에 등록되는 것을 ApplicationContext가 refresh 되는 과정에서 일어난다.&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class=&quot;java&quot;&gt;&lt;code&gt;@SpringBootApplication
public class CoreApplication {
    public static void main(String[] args) {
        SpringApplication.run(CoreApplication.class, args);
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;!-- [추가 3] SpringApplication 클래스 설명 추가 --&gt;
&lt;div class=&quot;note&quot;&gt;main 메서드인 애플리케이션 실행 메서드에 들어가면 ApplicationContext.refresh() 메서드가 존재하는 것을 알 수 있다.&lt;/div&gt;
&lt;div class=&quot;note&quot;&gt;이때 생성되는 Spring Application 구동을 위한 수많은 Bean들이 존재합니다.&lt;br /&gt;이렇게 등록되는 Bean들 중에 하나가 [ RequestMappingHandlerMapping ]이고, 이 Bean이 우리가 @RequestMapping으로 등록한 method들을 가지고 있다가 요청(Request)이 들어오면 매핑을 해주는 역할을 수행합니다.&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4. 그 이후에 Bean으로 등록된 HandlerMapping이 변수들을 찾아서 Adapter를 거쳐 실행하게 됩니다.&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;  참조: &lt;a style=&quot;color: #2980b9; font-weight: bold;&quot; href=&quot;https://backendcode.tistory.com/227&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;무작정 개발: 티스토리&lt;/a&gt;&lt;/p&gt;</description>
      <author>Isaac01</author>
      <guid isPermaLink="true">https://opidea.tistory.com/51</guid>
      <comments>https://opidea.tistory.com/entry/Spring-%EA%B0%9C%EB%B0%9C-%EC%8B%9C-%EC%9E%90%EC%A3%BC-%EC%82%AC%EC%9A%A9%ED%95%98%EB%8A%94-RequestMapping%EC%9D%98-%EA%B0%9C%EB%85%90-%EB%B0%8F-%EB%8F%99%EC%9E%91-%EB%B0%A9%EC%8B%9D#entry51comment</comments>
      <pubDate>Sat, 13 Sep 2025 14:43:00 +0900</pubDate>
    </item>
    <item>
      <title>URI, URL, URN의 차이</title>
      <link>https://opidea.tistory.com/entry/URI-URL-URN%EC%9D%98-%EC%B0%A8%EC%9D%B4-1</link>
      <description>&lt;div&gt;
&lt;style&gt;
    :root{
      --accent:#0078D4; /* 강조 색상 (파란 계열) */
      --muted:#6b6b6b;
      --code-bg:#f5f7fa;
      --code-border:#e1e6ee;
      --line-height:1.75;
      --max-width:900px;
      --page-padding:28px;
    }
    html,body{
      height:100%;
      margin:0;
      font-family: &quot;Noto Sans KR&quot;, &quot;Apple SD Gothic Neo&quot;, system-ui, -apple-system, &quot;Segoe UI&quot;, Roboto, &quot;Helvetica Neue&quot;, Arial;
      background:white; /* 요청: 흰색 배경 */
      color:#111;
      -webkit-font-smoothing:antialiased;
      -moz-osx-font-smoothing:grayscale;
    }

    .container{
      max-width:var(--max-width);
      margin:28px auto;
      padding:var(--page-padding);
      box-sizing:border-box;
    }

    /* 카드 느낌의 박스(읽기 편함) */
    .card{
      border:1px solid #eee;
      border-radius:10px;
      padding:22px;
      box-shadow: 0 6px 18px rgba(18, 24, 33, 0.04);
      background: #fff;
    }

    /* 제목 스타일 (원문 행은 그대로) */
    .section-title{
      margin:0 0 8px 0;
      font-size:1.05rem;
      color:var(--accent);
      font-weight:700;
    }

    /* 원문 텍스트 블록: 문장 자체는 변경하지 않음.
       각 문단은 &lt;p&gt;로 감싸 가독성 향상(들여쓰기, 줄높이) 적용 */
    .orig p{
      margin:0 0 12px 0;
      text-indent:1.2em; /* 들여쓰기 적용 */
      line-height:var(--line-height);
      white-space:pre-wrap; /* 원문 줄바꿈 보존 */
      font-size:15px;
    }

    /* 강조 (키워드) — 감싸도 텍스트는 변경하지 않음 */
    .highlight { color:var(--accent); font-weight:700; }

    /* 코드 / URL 스타일링 — 예시 URL을 &lt;code&gt;로 감싸 시각 강조 */
    pre, code {
      font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, &quot;Roboto Mono&quot;, &quot;Noto Sans Mono&quot;, monospace;
      font-size:13px;
    }
    .code-block{
      background:var(--code-bg);
      border:1px solid var(--code-border);
      padding:12px 14px;
      border-radius:8px;
      display:block;
      overflow:auto;
      margin:12px 0;
      white-space:pre-wrap;
    }

    /* 작은 설명(회색) */
    .muted { color:var(--muted); font-size:13px; }

    /* 번호별 섹션 간격 */
    .section { margin-bottom:18px; padding-bottom:6px; border-bottom:1px dashed #f0f0f0; }

    /* 마지막 정리 섹션은 구분을 위해 약간 강조 */
    .final { background:linear-gradient(180deg, rgba(0,0,0,0.01), rgba(0,0,0,0.00)); padding:12px; border-radius:6px; }

    /* 반응형: 모바일에서 패딩 줄임 */
    @media (max-width:520px){
      .container{ padding:16px; }
      .orig p{ text-indent:0.8em; font-size:14px; }
    }
  &lt;/style&gt;
&lt;/div&gt;
&lt;div class=&quot;container&quot;&gt;
&lt;div class=&quot;card&quot;&gt;&lt;!-- 섹션 1 --&gt;
&lt;div class=&quot;section&quot;&gt;
&lt;h2 class=&quot;section-title&quot; data-ke-size=&quot;size26&quot;&gt;1. URI란? (Uniform Resource Identifier)&lt;/h2&gt;
&lt;div class=&quot;orig&quot;&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;URI에는 두 가지 주요한 형태가 있습니다:&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span class=&quot;highlight&quot;&gt;URL (Locator) : 위치 기반 식별&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span class=&quot;highlight&quot;&gt;URN (Name) : 이름 기반 식별&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;!-- 섹션 2 --&gt;
&lt;div class=&quot;section&quot;&gt;
&lt;h2 class=&quot;section-title&quot; data-ke-size=&quot;size26&quot;&gt;2. URL이란? (Uniform Resource Locator)&lt;/h2&gt;
&lt;div class=&quot;orig&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;URI의 한 종류&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;단순히 &amp;ldquo;식별&amp;rdquo;만 하는 것이 아니라 어디(위치) 있는지 + 어떻게 접근(프로토콜) 하는지 알려줍니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;구조 (RFC 3986 기준):&lt;/p&gt;
&lt;div class=&quot;code-block&quot;&gt;&lt;code&gt;scheme://authority/path?query#fragment&lt;/code&gt;&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예시: &lt;span style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt;이 전체가 URL입니다. (쿼리도 URL에 포함!)&lt;/span&gt;&lt;/p&gt;
&lt;div class=&quot;code-block&quot;&gt;&lt;code&gt;http://endic.naver.com/endic.nhn?docid=1232950&lt;/code&gt;&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&lt;code&gt;http&lt;/code&gt;&lt;/b&gt;&lt;/span&gt; &amp;rarr; 프로토콜&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;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;code&gt;&lt;b&gt;endic.naver.com&lt;/b&gt;&lt;/code&gt;&lt;/span&gt; &amp;rarr; 도메인(호스트)&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;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;code&gt;/endic.nhn&lt;/code&gt;&lt;/b&gt; &amp;rarr; 경로&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;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;code&gt;?docid=1232950&lt;/code&gt;&lt;/b&gt; &amp;rarr; 쿼리 파라미터&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;/div&gt;
&lt;/div&gt;
&lt;!-- 섹션 3 --&gt;
&lt;div class=&quot;section&quot;&gt;
&lt;h2 class=&quot;section-title&quot; data-ke-size=&quot;size26&quot;&gt;3. URN이란? (Uniform Resource Name)&lt;/h2&gt;
&lt;div class=&quot;orig&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;URI의 또 다른 종류&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;div class=&quot;code-block&quot;&gt;&lt;code&gt;urn:isbn:0451450523&lt;/code&gt;&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;특정 책의 ISBN 번호로 자원을 식별하지만, 어디에 있는지는 모름.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;!-- 섹션 4 --&gt;
&lt;div class=&quot;section&quot;&gt;
&lt;h2 class=&quot;section-title&quot; data-ke-size=&quot;size26&quot;&gt;4. 자주 하는 오해&lt;/h2&gt;
&lt;div class=&quot;orig&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;많은 글에서 이런 식으로 설명하기도 합니다:&lt;/p&gt;
&lt;div class=&quot;code-block&quot;&gt;&lt;code&gt;&amp;ldquo;http://endic.naver.com/endic.nhn 까지만 URL이고, ?docid=1232950는 URI다.&amp;rdquo;&lt;/code&gt;&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만 이는 비표준적 해석입니다..&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;RFC 3986에 따르면:&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;쿼리 문자열까지 포함한 전체가 URL입니다.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;!-- 섹션 5 --&gt;
&lt;div class=&quot;section&quot;&gt;
&lt;h2 class=&quot;section-title&quot; data-ke-size=&quot;size26&quot;&gt;5. 예시로 구분해 보기&lt;/h2&gt;
&lt;div class=&quot;orig&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;URI (전체 개념)&lt;/p&gt;
&lt;div class=&quot;code-block&quot;&gt;&lt;code&gt;http://endic.naver.com/endic.nhn?docid=1232950
urn:isbn:0451450523&lt;/code&gt;&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;URL (위치 정보)(쿼리까지 포함!)&lt;/p&gt;
&lt;div class=&quot;code-block&quot;&gt;&lt;code&gt;http://endic.naver.com/endic.nhn?docid=1232950&lt;/code&gt;&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;URN (이름만)&lt;/p&gt;
&lt;div class=&quot;code-block&quot;&gt;&lt;code&gt;urn:isbn:0451450523&lt;/code&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;!-- 섹션 6 (최종 정리) --&gt;
&lt;div class=&quot;section final&quot;&gt;
&lt;h2 class=&quot;section-title&quot; data-ke-size=&quot;size26&quot;&gt;6. 최종 정리&lt;/h2&gt;
&lt;div class=&quot;orig&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;URI: 인터넷 자원을 식별할 수 있는 문자열 전체&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;URL: URI 중 자원의 위치(어디 있는지, 어떻게 접근하는지)를 알려주는 것&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;URN: URI 중 자원의 이름만으로 식별하는 것&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모든 URL은 URI다. 모든 URI가 URL은 아니다.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;</description>
      <author>Isaac01</author>
      <guid isPermaLink="true">https://opidea.tistory.com/49</guid>
      <comments>https://opidea.tistory.com/entry/URI-URL-URN%EC%9D%98-%EC%B0%A8%EC%9D%B4-1#entry49comment</comments>
      <pubDate>Fri, 12 Sep 2025 13:28:48 +0900</pubDate>
    </item>
    <item>
      <title>&amp;lt;Spring 입문&amp;gt; 3.3 스프링 웹 개발 기초_API</title>
      <link>https://opidea.tistory.com/entry/Spring-33-%EC%8A%A4%ED%94%84%EB%A7%81-%EC%9B%B9-%EA%B0%9C%EB%B0%9C-%EA%B8%B0%EC%B4%88API</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;경로: src &amp;gt; main &amp;gt; java &amp;gt; ... &amp;gt; controller &amp;gt; HelloController&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div style=&quot;background-color: #1e1f22; color: #bcbec4;&quot;&gt;
&lt;pre class=&quot;kotlin&quot;&gt;&lt;code&gt;@Controller
public class HelloController {
    // 문자가 반환 될 경우
    @GetMapping(&quot;hello-string&quot;)
    @ResponseBody
    public String helloString(@RequestParam(&quot;name&quot;) String name) {
        return &quot;hello&quot; + name;
    }
    // 객체가 반환 될 경우
    @GetMapping(&quot;hello-api&quot;)
    @ResponseBody
    public Hello helloApi(@RequestParam(&quot;name&quot;) String name) {
        Hello hello = new Hello();
        hello.setName(name);
        return hello;
    }

    static class Hello {
        private String name;

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }
    }&lt;/code&gt;&lt;/pre&gt;
&lt;/div&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;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;경로: src &amp;gt; main &amp;gt; resources &amp;gt; templates &amp;gt; hello.html&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div style=&quot;background-color: #1e1f22; color: #bcbec4;&quot;&gt;
&lt;pre class=&quot;dust&quot;&gt;&lt;code&gt;&amp;lt;!DOCTYPE HTML&amp;gt;
&amp;lt;html xmlns:th=&quot;http://www.thymeleaf.org&quot;&amp;gt;
&amp;lt;head&amp;gt;
    &amp;lt;title&amp;gt;Hello&amp;lt;/title&amp;gt;
    &amp;lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=UTF-8&quot; /&amp;gt;
&amp;lt;/head&amp;gt;
&amp;lt;body&amp;gt;
&amp;lt;p th:text=&quot;'안녕하세요. ' + ${data}&quot; &amp;gt;안녕하세요. 손님&amp;lt;/p&amp;gt;
&amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-start=&quot;294&quot; data-end=&quot;321&quot; data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-start=&quot;294&quot; data-end=&quot;321&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;@ResponseBody를 사용&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;@ResponseBody는 &lt;b&gt;컨트롤러 메서드의 반환값을 &quot;화면(html)&quot;이 아닌 &quot;데이터 자체로&quot; 클라이언트에게 전달하라&lt;/b&gt;는 뜻&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-end=&quot;321&quot; data-start=&quot;294&quot; data-ke-size=&quot;size23&quot;&gt;예시 1: 일반 컨트롤러 (뷰 반환)&lt;/h3&gt;
&lt;div&gt;
&lt;pre class=&quot;kotlin&quot;&gt;&lt;code&gt;@Controller
public class HelloController {
    @GetMapping(&quot;/hello&quot;)
    public String hello() {
        return &quot;hello&quot;;  // hello.html이라는 뷰 템플릿을 찾아서 응답
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-end=&quot;531&quot; data-start=&quot;502&quot; data-ke-size=&quot;size23&quot;&gt;예시 2: @ResponseBody 사용, 문자 반환&lt;/h3&gt;
&lt;div&gt;
&lt;pre class=&quot;kotlin&quot;&gt;&lt;code&gt;@Controller
public class HelloController {
    @ResponseBody
    @GetMapping(&quot;/hello-string&quot;)
    public String helloString() {
        return &quot;hello world&quot;;  // &quot;hello world&quot;라는 텍스트 자체가 브라우저에 응답됨
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-end=&quot;787&quot; data-start=&quot;759&quot; data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;예시 3: @ResponseBody 사용, 객체 반환 &amp;rarr; JSON 응답&lt;/h3&gt;
&lt;pre class=&quot;arduino&quot;&gt;&lt;code&gt;@Controller
public class HelloController {
    @ResponseBody
    @GetMapping(&quot;/hello-api&quot;)
    public Hello helloApi() {
        Hello hello = new Hello();
        hello.setName(&quot;자바&quot;);
        return hello;  // {&quot;name&quot;:&quot;자바&quot;} 라는 JSON 데이터로 응답됨
    }

    static class Hello {
        private String name;
        public String getName() { return name; }
        public void setName(String name) { this.name = name; }
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;@ResposeBody를 사용함으로써 ViewResolver 대신에 HttpMessageConverter가 동작&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; color: #333333; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;2825&quot; data-start=&quot;2791&quot;&gt;HttpMessageConverter는 기본 문자를 처리하는 StringConverter과 기본 객체를 처리하는 JsonConverter가 있다.
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-start=&quot;2791&quot; data-end=&quot;2825&quot;&gt;StringConverter가 사용되면&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;color: #f89009;&quot;&gt;문자&lt;/span&gt;&lt;/b&gt;를&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;HTTP 응답 본문에 포함&lt;/b&gt;&lt;/li&gt;
&lt;li data-start=&quot;2791&quot; data-end=&quot;2825&quot;&gt;JsonConverter 가 사용되면&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;color: #f89009;&quot;&gt;객체&lt;/span&gt;&lt;/b&gt;를&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;HTTP 응답 본문에 포함&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;</description>
      <category>Spring 입문</category>
      <category>Spring</category>
      <category>spring api</category>
      <author>Isaac01</author>
      <guid isPermaLink="true">https://opidea.tistory.com/46</guid>
      <comments>https://opidea.tistory.com/entry/Spring-33-%EC%8A%A4%ED%94%84%EB%A7%81-%EC%9B%B9-%EA%B0%9C%EB%B0%9C-%EA%B8%B0%EC%B4%88API#entry46comment</comments>
      <pubDate>Thu, 17 Apr 2025 12:32:04 +0900</pubDate>
    </item>
    <item>
      <title>&amp;lt;Spring 입문&amp;gt; 3.2 스프링 웹 개발 기초_MVC</title>
      <link>https://opidea.tistory.com/entry/Spring-32-%EC%8A%A4%ED%94%84%EB%A7%81-%EC%9B%B9-%EA%B0%9C%EB%B0%9C-%EA%B8%B0%EC%B4%88MVC</link>
      <description>&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot; data-start=&quot;118&quot; data-end=&quot;169&quot;&gt;&lt;b&gt;Spring MVC&lt;/b&gt;&lt;/h2&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #f89009;&quot;&gt;Model-View-Controller&lt;/span&gt; 패턴을 기반으로 한 웹 프레임워크&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;아래 코드는 다음과 같은 구조로 작동한다&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;159&quot; data-start=&quot;110&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;요청 &amp;rarr; 컨트롤러(Controller) &amp;rarr; 모델에 데이터 담기(Model) &amp;rarr; 뷰(template)로 전달 &amp;rarr; 응답&lt;/b&gt;&lt;/p&gt;
&lt;p data-end=&quot;159&quot; data-start=&quot;110&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;경로: src &amp;gt; main &amp;gt; java &amp;gt; ... &amp;gt; controller &amp;gt; HelloController&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div style=&quot;background-color: #1e1f22; color: #bcbec4;&quot;&gt;
&lt;pre class=&quot;kotlin&quot;&gt;&lt;code&gt;@Controller
public class HelloController {

    @GetMapping(&quot;hello-mvc&quot;)
    public String helloMvc(@RequestParam(&quot;key&quot;) String value, Model model) {
        model.addAttribute(&quot;key&quot;, value);
        return &quot;hello-template&quot;;
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt; &lt;b&gt;경로: src &amp;gt; main &amp;gt; resources &amp;gt; templates &amp;gt; hello.html&lt;/b&gt; &lt;/span&gt;&lt;/p&gt;
&lt;div style=&quot;background-color: #1e1f22; color: #bcbec4;&quot;&gt;
&lt;pre class=&quot;dust&quot;&gt;&lt;code&gt;&amp;lt;html xmlns:th=&quot;http://www.thymeleaf.org&quot;&amp;gt;
&amp;lt;body&amp;gt;
&amp;lt;p th:text=&quot;'hello ' + ${key}&quot;&amp;gt;값이 안 보이면 여기가 출력&amp;lt;/p&amp;gt;
&amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-start=&quot;534&quot; data-end=&quot;576&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;컨트롤러 (Controller)&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;- 요청을 처리하는 부분&lt;/h3&gt;
&lt;div style=&quot;background-color: #1e1f22; color: #bcbec4;&quot;&gt;
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;@Controller
public class HelloController {&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;348&quot; data-start=&quot;292&quot;&gt;@Controller는 Spring 프레임워크에서 &lt;b&gt;웹 요청을 처리하는 클래스&lt;/b&gt;임을 나타내는 애너테이션&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div style=&quot;background-color: #1e1f22; color: #bcbec4;&quot;&gt;
&lt;pre class=&quot;less&quot;&gt;&lt;code&gt;@GetMapping(&quot;hello-mvc&quot;)
public String helloMvc(@RequestParam(&quot;key&quot;) String value, Model model)&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;536&quot; data-start=&quot;499&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt; @GetMapping은 &lt;b&gt;Spring MVC&lt;/b&gt;에서 제공하는 어노테이션 &lt;/span&gt;&lt;/li&gt;
&lt;li data-end=&quot;536&quot; data-start=&quot;499&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;@GetMapping()은 클라이언트에서 GET 방식으로 &quot;&lt;b&gt;&lt;span style=&quot;color: #1b711d;&quot;&gt;/hello-mvc&lt;/span&gt;&lt;/b&gt;&quot; 주소로 요청이 들어올 때 &quot;helloMvc&quot;메서드를 실행&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;536&quot; data-start=&quot;499&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;GET 방식은 URL(주소창)을 통해 &lt;span style=&quot;color: #f89009;&quot;&gt;&lt;b&gt;데이터&lt;/b&gt;&lt;/span&gt;(ex: spring)를 보내서 서버에 요청하는 방식&lt;/span&gt;&lt;/li&gt;
&lt;li data-end=&quot;536&quot; data-start=&quot;499&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;http://localhost:8080/hello-mvc?key= &lt;b&gt;spring&lt;/b&gt; &lt;/span&gt;&lt;/li&gt;
&lt;li data-end=&quot;258&quot; data-start=&quot;233&quot;&gt;&lt;b&gt;요청 주소&lt;/b&gt;: /hello-mvc&lt;/li&gt;
&lt;li data-end=&quot;275&quot; data-start=&quot;259&quot;&gt;&lt;b&gt;요청 방식&lt;/b&gt;: GET&lt;/li&gt;
&lt;li data-end=&quot;299&quot; data-start=&quot;276&quot;&gt;&lt;b&gt;전달한 데이터&lt;/b&gt;: key=&lt;b&gt;spring&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li data-end=&quot;656&quot; data-start=&quot;626&quot;&gt;Model은 뷰에 전달할 데이터를 담는 객체이다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-start=&quot;1210&quot; data-end=&quot;1245&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;모델 (Model)&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;- 데이터 전달하는 부분&lt;/h3&gt;
&lt;div style=&quot;background-color: #1e1f22; color: #bcbec4;&quot;&gt;
&lt;pre class=&quot;reasonml&quot;&gt;&lt;code&gt;model.addAttribute(&quot;key&quot;, value);&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;787&quot; data-start=&quot;754&quot;&gt;model에 &quot;key&quot;라는 이름으로 값(value)을 저장&lt;/li&gt;
&lt;li data-end=&quot;836&quot; data-start=&quot;788&quot;&gt;이 데이터는 나중에 뷰(HTML 템플릿)에서 ${key}로 꺼내서 쓸 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div style=&quot;background-color: #1e1f22; color: #bcbec4;&quot;&gt;
&lt;pre class=&quot;kotlin&quot;&gt;&lt;code&gt;return &quot;hello-template&quot;;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;ul style=&quot;list-style-type: disc; color: #333333; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-start=&quot;754&quot; data-end=&quot;787&quot;&gt;&lt;b&gt;ViewResolver&lt;/b&gt;는 hello-template이라는 뷰 이름을 받아서 실제 템플릿 파일을 찾아 렌더링합니다.&lt;/li&gt;
&lt;li data-start=&quot;754&quot; data-end=&quot;787&quot;&gt;만약 &lt;b&gt;Thymeleaf&lt;/b&gt;를 사용하고 있다면, hello-template.html 파일을 찾아서 해당 파일을 처리하고 데이터를 렌더링합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-start=&quot;1483&quot; data-end=&quot;1516&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;뷰 (View)&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;- 화면에 출력하는 부분&lt;/h3&gt;
&lt;div style=&quot;background-color: #1e1f22; color: #bcbec4;&quot;&gt;
&lt;pre class=&quot;dust&quot;&gt;&lt;code&gt;&amp;lt;p th:text=&quot;'hello ' + ${key}&quot;&amp;gt;값이 안 보이면 여기가 출력&amp;lt;/p&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1210&quot; data-start=&quot;1152&quot;&gt;${key} &amp;rarr; model.addAttribute(&quot;key&quot;, value)로 넣은 값이 들어감&lt;/li&gt;
&lt;li data-end=&quot;1291&quot; data-start=&quot;1211&quot;&gt;예를 들어 /hello-mvc?key=spring 요청이 오면, &amp;nbsp;&lt;span style=&quot;background-color: #666666; color: #ffffff;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;hello spring &lt;/span&gt;출력됨&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-end=&quot;1834&quot; data-start=&quot;1821&quot; data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-end=&quot;1834&quot; data-start=&quot;1821&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;전체 흐름 요약&lt;/b&gt;&lt;/h3&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-end=&quot;2188&quot; data-start=&quot;1836&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li data-end=&quot;1917&quot; data-start=&quot;1836&quot;&gt;&lt;b&gt;사용자 요청&lt;/b&gt;: 클라이언트가 http://localhost:8080/hello-mvc?key=spring URL로 요청을 보냅&lt;/li&gt;
&lt;li data-end=&quot;2004&quot; data-start=&quot;1918&quot;&gt;&lt;b&gt;컨트롤러&lt;/b&gt;: HelloController에서 helloMvc 메서드가 실행되고, key라는 쿼리 파라미터 값을 받아 모델에 담음&lt;/li&gt;
&lt;li data-end=&quot;2080&quot; data-start=&quot;2005&quot;&gt;&lt;b&gt;모델&lt;/b&gt;: model.addAttribute(&quot;key&quot;, value) 코드로 key라는 이름의 값을 모델에 저장&lt;/li&gt;
&lt;li data-end=&quot;2184&quot; data-start=&quot;2081&quot;&gt;&lt;b&gt;뷰&lt;/b&gt;: hello-template.html 템플릿에서 key 값을 화면에 출력합니다. 이때 Thymeleaf는 ${key}를 찾아 그 값을 화면에 렌더링함&lt;/li&gt;
&lt;/ol&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 data-end=&quot;2223&quot; data-start=&quot;2194&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;MVC 패턴이 이 코드에서 어떻게 적용되는지&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;2461&quot; data-start=&quot;2225&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;2304&quot; data-start=&quot;2225&quot;&gt;&lt;b&gt;모델 (Model)&lt;/b&gt;: 데이터를 저장하고 전달하는 역할을 합니다. 여기서는 key와 그 값을 담은 모델 객체가 그 역할을 합니다.&lt;/li&gt;
&lt;li data-end=&quot;2384&quot; data-start=&quot;2305&quot;&gt;&lt;b&gt;뷰 (View)&lt;/b&gt;: 데이터를 실제로 사용자에게 보여주는 역할을 합니다. Thymeleaf 템플릿은 key 값을 화면에 출력합니다.&lt;/li&gt;
&lt;li data-end=&quot;2461&quot; data-start=&quot;2385&quot;&gt;&lt;b&gt;컨트롤러 (Controller)&lt;/b&gt;: 클라이언트의 요청을 받아 데이터를 처리하고, 뷰에 전달할 데이터를 모델에 담아서 반환합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;2592&quot; data-start=&quot;2463&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;2592&quot; data-start=&quot;2463&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;2592&quot; data-start=&quot;2463&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;페이지 소스 보기&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;568&quot; data-origin-height=&quot;199&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/eixtNO/btsNknOZvvW/8NRtzmmltZFRru8T4KsemK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/eixtNO/btsNknOZvvW/8NRtzmmltZFRru8T4KsemK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/eixtNO/btsNknOZvvW/8NRtzmmltZFRru8T4KsemK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FeixtNO%2FbtsNknOZvvW%2F8NRtzmmltZFRru8T4KsemK%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;568&quot; height=&quot;199&quot; data-origin-width=&quot;568&quot; data-origin-height=&quot;199&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;MVC에서 뷰(View)는 일반적으로 &lt;b&gt;동적 콘텐츠&lt;/b&gt;를 렌더링하는데 사용된다. &lt;b&gt;정적 콘텐츠&lt;/b&gt;는 파일을 그대로 클라이언트에게 전달하는 반면, &lt;b&gt;동적 콘텐츠&lt;/b&gt;는 서버에서 데이터를 처리하고 이를 템플릿 파일을 통해 동적으로 렌더링하여 화면에 표시한다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-start=&quot;292&quot; data-end=&quot;348&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;템플릿 파일이란: ${key}는 &quot;데이터가 들어갈 자리&quot; 이걸 포함한 전체 .html 파일이&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;템플릿 파일&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;정적 콘텐츠와 동적 콘첸츠의 차이점&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1553&quot; data-start=&quot;1445&quot;&gt;정적 콘텐츠는 &lt;span style=&quot;color: #f89009;&quot;&gt;&lt;b&gt;파일 자체&lt;/b&gt;&lt;/span&gt;를 그대로 반환한다. 서버는 파일을 변형하지 않고 그대로 클라이언트에 전달하는 방식이다. 예를 들어, CSS 파일이나 이미지 파일이 이에 해당한다.&lt;/li&gt;
&lt;li data-end=&quot;1748&quot; data-start=&quot;1557&quot;&gt;동적 콘텐츠는 &lt;span style=&quot;color: #f89009;&quot;&gt;&lt;b&gt;서버에서 처리된 데이터&lt;/b&gt;&lt;/span&gt;를 기반으로(/hello-mvc?key=spring) &lt;b&gt;&lt;span style=&quot;color: #f89009;&quot;&gt;뷰 템플릿&lt;/span&gt;&lt;/b&gt;(.html)을 &lt;b&gt;&lt;span style=&quot;color: #f89009;&quot;&gt;동적으로&lt;/span&gt;&lt;/b&gt; &lt;span style=&quot;color: #f89009;&quot;&gt;&lt;b&gt;렌더링&lt;/b&gt;&lt;/span&gt;하여 클라이언트에 전달하는 방식이다. 이때 서버는 데이터를 변경하고, 이를 템플릿 엔진을 통해 HTML로 변환하여 응답한다. 예를 들어, key 값이 포함된 텍스트(hello spring)를 동적으로 만들어서 클라이언트에 보낸다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Spring 입문</category>
      <category>MVC</category>
      <category>spring mvc</category>
      <author>Isaac01</author>
      <guid isPermaLink="true">https://opidea.tistory.com/45</guid>
      <comments>https://opidea.tistory.com/entry/Spring-32-%EC%8A%A4%ED%94%84%EB%A7%81-%EC%9B%B9-%EA%B0%9C%EB%B0%9C-%EA%B8%B0%EC%B4%88MVC#entry45comment</comments>
      <pubDate>Wed, 16 Apr 2025 20:40:18 +0900</pubDate>
    </item>
    <item>
      <title>&amp;lt;Spring 입문&amp;gt; 3.1 스프링 웹 개발 기초_정적 콘텐츠</title>
      <link>https://opidea.tistory.com/entry/Spring-31-%EC%8A%A4%ED%94%84%EB%A7%81-%EC%9B%B9-%EA%B0%9C%EB%B0%9C-%EA%B8%B0%EC%B4%88%EC%A0%95%EC%A0%81-%EC%BD%98%ED%85%90%EC%B8%A0-1</link>
      <description>&lt;h3 data-end=&quot;232&quot; data-start=&quot;196&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;정적 콘텐츠 (Static Content)&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;359&quot; data-start=&quot;234&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;277&quot; data-start=&quot;234&quot;&gt;src/main/resources/static/ 폴더 안에 있는 파일들&lt;/li&gt;
&lt;li data-end=&quot;322&quot; data-start=&quot;278&quot;&gt;예: hello.html, style.css, logo.png 등&lt;/li&gt;
&lt;li data-end=&quot;359&quot; data-start=&quot;323&quot;&gt;브라우저가 /hello.html 요청 &amp;rarr; 가공하지 않은 파일 그대로 응답&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-start=&quot;196&quot; data-end=&quot;232&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;정적 콘텐츠&amp;nbsp; 확인해 보기&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;src &amp;gt; main &amp;gt; resources &amp;gt; static &amp;gt; hello.html 파일을 만들고 다음 코드를 입력했다.&lt;/p&gt;
&lt;div style=&quot;background-color: #1e1f22; color: #bcbec4;&quot;&gt;
&lt;pre class=&quot;xml&quot;&gt;&lt;code&gt;&amp;lt;!DOCTYPE HTML&amp;gt;
&amp;lt;html&amp;gt;
&amp;lt;head&amp;gt;
    &amp;lt;title&amp;gt;static content&amp;lt;/title&amp;gt;
    &amp;lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=UTF-8&quot; /&amp;gt;
&amp;lt;/head&amp;gt;
&amp;lt;body&amp;gt;
정적 컨텐츠 입니다.
&amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;URL에 localhost:8080/hello.html 를 입력하고 페이스 소스보기를 클릭해 보면&amp;nbsp; hello.html 파일 그대로가 View에 전달되었음을 확인 할 수 있다.&lt;/p&gt;
&lt;h2 data-end=&quot;759&quot; data-start=&quot;747&quot; data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 data-end=&quot;759&quot; data-start=&quot;747&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;정적 콘텐츠랑 Welcome Page는 같은 것일까?&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;결론 부터 말하면 아니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Welcome Page는 정적 콘텐츠 wnddptj&amp;nbsp;&lt;b&gt;&lt;span style=&quot;color: #ffffff; background-color: #666666;&quot;&gt; /&amp;nbsp;&lt;/span&gt;&lt;/b&gt; 요청을 처리하는 특별한 파일(index.html)을 말한다.&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;&lt;span data-state=&quot;closed&quot;&gt;&lt;/span&gt;항목&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;정적 콘텐츠&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Welcome Page
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-end=&quot;1059&quot; data-start=&quot;761&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody data-end=&quot;1059&quot; data-start=&quot;833&quot;&gt;
&lt;tr data-end=&quot;869&quot; data-start=&quot;833&quot;&gt;
&lt;td data-end=&quot;838&quot; data-start=&quot;833&quot;&gt;위치&lt;/td&gt;
&lt;td data-end=&quot;857&quot; data-start=&quot;838&quot;&gt;static, public 등&lt;/td&gt;
&lt;td data-end=&quot;869&quot; data-start=&quot;857&quot;&gt;static 등&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;930&quot; data-start=&quot;870&quot;&gt;
&lt;td data-end=&quot;878&quot; data-start=&quot;870&quot;&gt;파일 이름&lt;/td&gt;
&lt;td data-end=&quot;912&quot; data-start=&quot;878&quot;&gt;제한 없음 (hello.html, about.css 등)&lt;/td&gt;
&lt;td data-end=&quot;930&quot; data-start=&quot;912&quot;&gt;&lt;b&gt;index.html&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;976&quot; data-start=&quot;931&quot;&gt;
&lt;td data-end=&quot;936&quot; data-start=&quot;931&quot;&gt;동작&lt;/td&gt;
&lt;td data-end=&quot;952&quot; data-start=&quot;936&quot;&gt;요청한 경로 그대로 응답&lt;/td&gt;
&lt;td data-end=&quot;976&quot; data-start=&quot;952&quot;&gt;루트 경로 / 요청 시 자동 응답&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;1006&quot; data-start=&quot;977&quot;&gt;
&lt;td data-end=&quot;987&quot; data-start=&quot;977&quot;&gt;뷰 처리 방식&lt;/td&gt;
&lt;td data-end=&quot;996&quot; data-start=&quot;987&quot;&gt;그대로 응답&lt;/td&gt;
&lt;td data-end=&quot;1006&quot; data-start=&quot;996&quot;&gt;그대로 응답&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;1059&quot; data-start=&quot;1007&quot;&gt;
&lt;td data-end=&quot;1019&quot; data-start=&quot;1007&quot;&gt;템플릿 엔진 사용&lt;/td&gt;
&lt;td data-end=&quot;1044&quot; data-start=&quot;1019&quot;&gt;❌ (Thymeleaf 등 사용 안 함)&lt;/td&gt;
&lt;td data-end=&quot;1059&quot; data-start=&quot;1044&quot;&gt;❌ (단순 HTML)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Spring 입문</category>
      <category>Spring</category>
      <category>스프링 정적 콘텐츠</category>
      <category>정적 콘텐츠</category>
      <author>Isaac01</author>
      <guid isPermaLink="true">https://opidea.tistory.com/44</guid>
      <comments>https://opidea.tistory.com/entry/Spring-31-%EC%8A%A4%ED%94%84%EB%A7%81-%EC%9B%B9-%EA%B0%9C%EB%B0%9C-%EA%B8%B0%EC%B4%88%EC%A0%95%EC%A0%81-%EC%BD%98%ED%85%90%EC%B8%A0-1#entry44comment</comments>
      <pubDate>Wed, 16 Apr 2025 14:51:39 +0900</pubDate>
    </item>
    <item>
      <title>&amp;lt;Spring 입문&amp;gt; 1. View 환경 설정</title>
      <link>https://opidea.tistory.com/entry/Spring-%EC%9E%85%EB%AC%B8</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;스프링 프로젝트를 만들면 기본적으로 HelloSpringApplication 파일이 다음과 같이 구성되어 있을 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래 코드는 Spring Boot 애플리케이션을 시작하는 가장 기본적인 형태의 코드이다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;556&quot; data-origin-height=&quot;221&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b5ymkD/btsNlkJ355p/Bw1b01zIYsI7yKB8GZQu0k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b5ymkD/btsNlkJ355p/Bw1b01zIYsI7yKB8GZQu0k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b5ymkD/btsNlkJ355p/Bw1b01zIYsI7yKB8GZQu0k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb5ymkD%2FbtsNlkJ355p%2FBw1b01zIYsI7yKB8GZQu0k%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;556&quot; height=&quot;221&quot; data-origin-width=&quot;556&quot; data-origin-height=&quot;221&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;import 는 다른 클래스나 기능을 불러오는 문장이다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자바에서 Scanner 라는 기능을 사용하기 위해 import java.util.Scanner; 임폴트를 추가하는 것처럼 다음 문장도 같다.&lt;/p&gt;
&lt;div style=&quot;background-color: #1e1f22; color: #bcbec4;&quot;&gt;
&lt;pre class=&quot;css&quot;&gt;&lt;code&gt;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;@SpringBootApplication 과 SpringApplication.run() 메소드를 사용하기 위해 import를 추가한 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-end=&quot;206&quot; data-start=&quot;122&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div style=&quot;background-color: #1e1f22; color: #bcbec4;&quot;&gt;
&lt;pre class=&quot;aspectj&quot;&gt;&lt;code&gt;@SpringBootApplication&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p data-end=&quot;206&quot; data-start=&quot;122&quot; data-ke-size=&quot;size16&quot;&gt;이 어노테이션은 &lt;b&gt;스프링 부트 애플리케이션의 시작점&lt;/b&gt;임을 나타냅니다.&lt;br /&gt;또한, 다음의 &lt;b&gt;3가지 핵심 어노테이션의 조합&lt;/b&gt;으로 구성되어 있습니다:&lt;/p&gt;
&lt;h4 data-end=&quot;237&quot; data-start=&quot;213&quot; data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 data-end=&quot;237&quot; data-start=&quot;213&quot; data-ke-size=&quot;size20&quot;&gt;1. @Configuration&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;311&quot; data-start=&quot;239&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;271&quot; data-start=&quot;239&quot;&gt;해당 클래스를 &lt;b&gt;스프링 설정 클래스&lt;/b&gt;로 지정합니다.&lt;/li&gt;
&lt;li data-end=&quot;311&quot; data-start=&quot;272&quot;&gt;개발자가 직접 @Bean 등을 사용해 빈을 등록할 수 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-end=&quot;352&quot; data-start=&quot;318&quot; data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 data-end=&quot;352&quot; data-start=&quot;318&quot; data-ke-size=&quot;size20&quot;&gt;2. @EnableAutoConfiguration&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;487&quot; data-start=&quot;354&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;385&quot; data-start=&quot;354&quot;&gt;&lt;b&gt;스프링 부트의 자동 설정 기능&lt;/b&gt;을 활성화합니다.&lt;/li&gt;
&lt;li data-end=&quot;487&quot; data-start=&quot;386&quot;&gt;클래스패스에 존재하는 라이브러리 정보를 바탕으로,&lt;br /&gt;예를 들어 웹 관련 라이브러리가 존재하면&lt;br /&gt;&lt;b&gt;Tomcat 서버, Spring MVC&lt;/b&gt; 등이 자동으로 설정됩니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-end=&quot;518&quot; data-start=&quot;494&quot; data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 data-end=&quot;518&quot; data-start=&quot;494&quot; data-ke-size=&quot;size20&quot;&gt;3. @ComponentScan&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;659&quot; data-start=&quot;520&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;568&quot; data-start=&quot;520&quot;&gt;현재 클래스가 위치한 패키지를 기준으로&lt;br /&gt;그 &lt;b&gt;하위 패키지를 스캔&lt;/b&gt;합니다.&lt;/li&gt;
&lt;li data-end=&quot;659&quot; data-start=&quot;569&quot;&gt;@Component, @Service, @Repository, @Controller 등이&lt;br /&gt;선언된 클래스를 찾아 &lt;b&gt;빈으로 등록&lt;/b&gt;합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;666&quot; data-start=&quot;616&quot; data-ke-size=&quot;size16&quot;&gt;즉, 이 한 줄 덕분에 개발자가 따로 설정하지 않아도 대부분의 기능이 자동으로 설정된다!&lt;/p&gt;
&lt;p data-end=&quot;666&quot; data-start=&quot;616&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;666&quot; data-start=&quot;616&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-end=&quot;666&quot; data-start=&quot;616&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div style=&quot;background-color: #1e1f22; color: #bcbec4;&quot;&gt;
&lt;pre class=&quot;reasonml&quot;&gt;&lt;code&gt;SpringApplication.run(HelloSpringApplication.class, args);&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1381&quot; data-start=&quot;1251&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1283&quot; data-start=&quot;1251&quot;&gt;스프링 부트 애플리케이션을 &lt;b&gt;실행시키는 코드이다&lt;/b&gt;.&lt;/li&gt;
&lt;li data-end=&quot;1349&quot; data-start=&quot;1284&quot;&gt;HelloSpringApplication.class: 이 클래스가 애플리케이션의 설정 정보라는 걸 알려준다.&lt;/li&gt;
&lt;li data-end=&quot;1381&quot; data-start=&quot;1350&quot;&gt;args: 커맨드라인 인자를 그대로 전달해 준다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;1442&quot; data-start=&quot;1383&quot; data-ke-size=&quot;size16&quot;&gt;이 한 줄로 &lt;b&gt;내장 톰캣 서버&lt;/b&gt;도 실행되고, 스프링이 모든 준비를 마치고 웹 애플리케이션이 실행된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;1442&quot; data-start=&quot;1383&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-end=&quot;36&quot; data-start=&quot;24&quot; data-ke-size=&quot;size23&quot;&gt;  실행 순서&lt;/h3&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-end=&quot;215&quot; data-start=&quot;37&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li data-end=&quot;99&quot; data-start=&quot;37&quot;&gt;&lt;b&gt;@SpringBootApplication에 있는 main() 메서드가 가장 먼저 실행됩니다.&lt;/b&gt;&lt;/li&gt;
&lt;li data-end=&quot;144&quot; data-start=&quot;100&quot;&gt;그 안에서 SpringApplication.run(...)이 호출되면서&lt;/li&gt;
&lt;li data-end=&quot;215&quot; data-start=&quot;145&quot;&gt;스프링 부트가 &lt;b&gt;자동 설정&lt;/b&gt;, &lt;b&gt;빈 등록&lt;/b&gt;, &lt;b&gt;컨트롤러 탐색 (@Controller)&lt;/b&gt; 등의 작업을 진행해요.&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style2&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot; data-start=&quot;133&quot; data-end=&quot;148&quot;&gt;1. Welcome Page와 thymeleaf 템플릿 엔진 동작 이해하기&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;src &amp;gt; main &amp;gt; resources 경로로 들어가면 static, templates 폴더가 존재한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;327&quot; data-origin-height=&quot;212&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bVay7E/btsNkL1WUrY/8LWukJcLU1LYLQpph4glXk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bVay7E/btsNkL1WUrY/8LWukJcLU1LYLQpph4glXk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bVay7E/btsNkL1WUrY/8LWukJcLU1LYLQpph4glXk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbVay7E%2FbtsNkL1WUrY%2F8LWukJcLU1LYLQpph4glXk%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;327&quot; height=&quot;212&quot; data-origin-width=&quot;327&quot; data-origin-height=&quot;212&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&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;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot; data-start=&quot;133&quot; data-end=&quot;148&quot;&gt;2. Welcome Page&amp;nbsp;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;static 경로에 위치한 파일 중 &lt;span style=&quot;background-color: #9d9d9d; color: #ffffff;&quot;&gt;&amp;nbsp;index.html &lt;/span&gt;만 특별히 &quot;Welcome Page&quot;로 취급된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Welcome Page는 정적콘텐츠의 특별한 경우는 말하는데, 정적콘텐츠와 차이점은 다음장에서 설명할 것이다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;335&quot; data-origin-height=&quot;242&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/SxCNz/btsNivy5Dbe/fVpP4l3i7rdDdWklS4tkK1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/SxCNz/btsNivy5Dbe/fVpP4l3i7rdDdWklS4tkK1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/SxCNz/btsNivy5Dbe/fVpP4l3i7rdDdWklS4tkK1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FSxCNz%2FbtsNivy5Dbe%2FfVpP4l3i7rdDdWklS4tkK1%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;335&quot; height=&quot;242&quot; data-origin-width=&quot;335&quot; data-origin-height=&quot;242&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;510&quot; data-start=&quot;488&quot;&gt;특별한 이름: index.html&lt;/li&gt;
&lt;li data-end=&quot;565&quot; data-start=&quot;511&quot;&gt;특별한 위치: static/index.html 또는 public/index.html 등&lt;/li&gt;
&lt;li data-end=&quot;609&quot; data-start=&quot;566&quot;&gt;사용자가 **루트 URL(/)**로 접속할 경우 자동으로 응답되는 파일&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;562&quot; data-origin-height=&quot;67&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/GxaNc/btsNnokVgzc/Tl0xYDTDcKkiKJy8R72360/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/GxaNc/btsNnokVgzc/Tl0xYDTDcKkiKJy8R72360/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/GxaNc/btsNnokVgzc/Tl0xYDTDcKkiKJy8R72360/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FGxaNc%2FbtsNnokVgzc%2FTl0xYDTDcKkiKJy8R72360%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;562&quot; height=&quot;67&quot; data-origin-width=&quot;562&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;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;h3 data-end=&quot;275&quot; data-start=&quot;258&quot; data-ke-size=&quot;size23&quot;&gt;어떻게 동작할까?&lt;/h3&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-end=&quot;440&quot; data-start=&quot;277&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li data-end=&quot;317&quot; data-start=&quot;277&quot;&gt;브라우저가 http://localhost:8080/로 접속함&lt;/li&gt;
&lt;li data-end=&quot;440&quot; data-start=&quot;318&quot;&gt;스프링 부트는 다음 순서로 확인함:
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;440&quot; data-start=&quot;345&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;371&quot; data-start=&quot;345&quot;&gt;static/index.html 있는지?&lt;/li&gt;
&lt;li data-end=&quot;407&quot; data-start=&quot;375&quot;&gt;있으면 &amp;rarr; 그걸 &lt;b&gt;Welcome Page로 서빙함&lt;/b&gt;&lt;/li&gt;
&lt;li data-end=&quot;440&quot; data-start=&quot;411&quot;&gt;없으면 &amp;rarr; 컨트롤러 매핑을 찾거나, 404 페이지&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot; data-start=&quot;133&quot; data-end=&quot;148&quot;&gt;3. templates&amp;nbsp; 템플릿 엔진&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: left;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;SpringApplication.run(...)이 실행되면서 스프링 부트가 시작되고 자동 설정(AutoConfiguration)으로 &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: left;&quot;&gt;웹 서버 내장 톰켓(Tomcat)도 함께 실행된다. 그리고 컴포넌트 스캔을 통해 @Controller 작업을 찾아 실행한다.&lt;/span&gt;&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;span style=&quot;color: #333333; text-align: left;&quot;&gt;&lt;b&gt;@Controller, @RestController&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: left;&quot;&gt;이 클래스가 HTTP 요청을 처리하는 웹 컨트롤러임을 명시.&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: left;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 클래스 안에 있는 요청 처리 메서드를 (@GetMapping, @PostMapping, @RequestMapping)을&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;DispatcherServlet이 자동으로 탐지해서 연결해 준다.&amp;nbsp;&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;b&gt; DispatcherServlet&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;DispatcherServlet은 Spring MVC에서 모든 웹 요청을 받아서 처리 흐름을 조정하는 중앙 컨트롤러이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Spring Boot에서는 자동 등록돼 있다. 순수 Spring MVC에서는 web.xml같은 설정 파일에서 직접 등록해야 한다.&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;b&gt;@Controller, @RestController 차이점&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;@Controller는 HTML 등의 뷰를 반환하고, @RestController는 JSON, XML등의 데이터를 반환한다.&amp;nbsp;&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;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;698&quot; data-origin-height=&quot;272&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/x4Viv/btsOluzv39c/qFb4vj6jfAz233MsX29tJK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/x4Viv/btsOluzv39c/qFb4vj6jfAz233MsX29tJK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/x4Viv/btsOluzv39c/qFb4vj6jfAz233MsX29tJK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fx4Viv%2FbtsOluzv39c%2FqFb4vj6jfAz233MsX29tJK%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;500&quot; height=&quot;195&quot; data-origin-width=&quot;698&quot; data-origin-height=&quot;272&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&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;클라이언트가 보낸 HTTP GET 요청을 보내면 스프링의 &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;DispatcherServlet이&lt;span&gt; 그 요청을 받아서&lt;br /&gt;@GetMapping(&quot;/hello&quot;)와 매핑된 메서드를 실행한다.&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div style=&quot;background-color: #1e1f22; color: #bcbec4;&quot;&gt;
&lt;pre class=&quot;kotlin&quot;&gt;&lt;code&gt;@Controller
public class HelloController {
    @GetMapping(&quot;hello&quot;)
    public String hello(Model model) {
        model.addAttribute(&quot;data&quot;, &quot;hello!!&quot;);
        return &quot;hello&quot;;
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;return &quot;hello&quot; 는 resources &amp;gt; templates &amp;gt; hello.html 경로의 뷰 파일을 의미하고 스프링 부트는&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;내부적으로 Thymeleaf 뷰 리졸버(view resolver)를 통해 이 파일을 찾아 렌더링 한다.&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;&amp;nbsp;&lt;/p&gt;
&lt;div style=&quot;background-color: #1e1f22; color: #bcbec4;&quot;&gt;
&lt;pre class=&quot;dust&quot;&gt;&lt;code&gt;&amp;lt;!DOCTYPE HTML&amp;gt;
&amp;lt;html xmlns:th=&quot;http://www.thymeleaf.org&quot;&amp;gt;
&amp;lt;head&amp;gt;
    &amp;lt;title&amp;gt;Hello&amp;lt;/title&amp;gt;
    &amp;lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=UTF-8&quot; /&amp;gt;
&amp;lt;/head&amp;gt;
&amp;lt;body&amp;gt;
&amp;lt;p th:text=&quot;'안녕하세요. ' + ${data}&quot; &amp;gt;안녕하세요. 손님&amp;lt;/p&amp;gt;
&amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;${data}는 키값이고 ${data}는 model.addAttribute(&quot;data&quot;, &quot;hello!!&quot;)에서 넣은 &quot;hello!!&quot;로 치환된다.&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;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-end=&quot;148&quot; data-start=&quot;133&quot; data-ke-size=&quot;size26&quot;&gt;Model이란?&lt;/h2&gt;
&lt;p data-end=&quot;219&quot; data-start=&quot;150&quot; data-ke-size=&quot;size16&quot;&gt;Model은 &lt;b&gt;스프링이 제공하는 인터페이스&lt;/b&gt;로,&lt;br /&gt;컨트롤러 메서드에서 뷰로 데이터를 전달하는 매개체(객체)이다.&lt;/p&gt;
&lt;p data-end=&quot;219&quot; data-start=&quot;150&quot; data-ke-size=&quot;size16&quot;&gt;return되면 ViewResolver를 통해 hello.html파일을 찾고&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;219&quot; data-start=&quot;150&quot; data-ke-size=&quot;size16&quot;&gt;Template Engine(예: Thymeleaf)이 실행돼서 ${data} 자리에 &quot;hello!!&quot; 넣은 HTML 생성한다.&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;pre class=&quot;kotlin&quot;&gt;&lt;code&gt;@GetMapping(&quot;hello&quot;)
public String hello(Model model) {
    model.addAttribute(&quot;data&quot;, &quot;hello!!&quot;);
    return &quot;hello&quot;;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2 data-end=&quot;464&quot; data-start=&quot;453&quot; data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 data-end=&quot;464&quot; data-start=&quot;453&quot; data-ke-size=&quot;size26&quot;&gt;  흐름 요약&lt;/h2&gt;
&lt;div&gt;
&lt;div&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;587&quot; data-origin-height=&quot;323&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/nneMm/btsNlgPkhA4/wgbPPjcQebHCgxJjckNkL1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nneMm/btsNlgPkhA4/wgbPPjcQebHCgxJjckNkL1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nneMm/btsNlgPkhA4/wgbPPjcQebHCgxJjckNkL1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FnneMm%2FbtsNlgPkhA4%2FwgbPPjcQebHCgxJjckNkL1%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;587&quot; height=&quot;323&quot; data-origin-width=&quot;587&quot; data-origin-height=&quot;323&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;/div&gt;</description>
      <category>Spring 입문</category>
      <category>Spring</category>
      <category>Spring 입문</category>
      <author>Isaac01</author>
      <guid isPermaLink="true">https://opidea.tistory.com/42</guid>
      <comments>https://opidea.tistory.com/entry/Spring-%EC%9E%85%EB%AC%B8#entry42comment</comments>
      <pubDate>Tue, 15 Apr 2025 11:43:05 +0900</pubDate>
    </item>
    <item>
      <title>&amp;lt;Java&amp;gt; Thread 상속과   Runnable 구현의 차이점 및 동기화 메소드 선언</title>
      <link>https://opidea.tistory.com/entry/Java-Thread%EC%99%80-Runnable%EC%9D%98-%EC%B0%A8%EC%9D%B4</link>
      <description>&lt;h2 data-end=&quot;1200&quot; data-start=&quot;1170&quot; data-ke-size=&quot;size26&quot;&gt;  Thread와 Runnable의 차이&lt;/h2&gt;
&lt;h3 data-end=&quot;1226&quot; data-start=&quot;1201&quot; data-ke-size=&quot;size23&quot;&gt;1️⃣ Thread를 상속하는 경우&lt;/h3&gt;
&lt;div&gt;
&lt;div&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;755&quot; data-origin-height=&quot;397&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/l4PZ0/btsMBAmEMCI/MDF4dkaDYYH0jSa0BWF1yk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/l4PZ0/btsMBAmEMCI/MDF4dkaDYYH0jSa0BWF1yk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/l4PZ0/btsMBAmEMCI/MDF4dkaDYYH0jSa0BWF1yk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fl4PZ0%2FbtsMBAmEMCI%2FMDF4dkaDYYH0jSa0BWF1yk%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;755&quot; height=&quot;397&quot; data-origin-width=&quot;755&quot; data-origin-height=&quot;397&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;p data-end=&quot;380&quot; data-start=&quot;372&quot; data-ke-size=&quot;size16&quot;&gt;✅ &lt;b&gt;특징&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;475&quot; data-start=&quot;381&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;405&quot; data-start=&quot;381&quot;&gt;Thread 클래스를 직접 상속받음.&lt;/li&gt;
&lt;li data-end=&quot;439&quot; data-start=&quot;406&quot;&gt;run() 메서드를 오버라이드하여 실행할 코드 작성.&lt;/li&gt;
&lt;li data-end=&quot;475&quot; data-start=&quot;440&quot;&gt;start() 메서드를 호출하면 run()이 실행됨.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;485&quot; data-start=&quot;477&quot; data-ke-size=&quot;size16&quot;&gt;❌ &lt;b&gt;단점&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;612&quot; data-start=&quot;486&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;547&quot; data-start=&quot;486&quot;&gt;자바는 다중 상속을 지원하지 않아서 이미 다른 클래스를 상속받고 있다면 Thread를 상속할 수 없음.&lt;/li&gt;
&lt;li data-end=&quot;612&quot; data-start=&quot;548&quot;&gt;객체를 생성할 때마다 새로운 Thread 인스턴스를 만들어야 하므로 재사용이 어렵고 성능이 떨어질 수 있음.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-end=&quot;1604&quot; data-start=&quot;1577&quot; data-ke-size=&quot;size23&quot;&gt;2️⃣ Runnable을 구현하는 경우&lt;/h3&gt;
&lt;div&gt;
&lt;div&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;812&quot; data-origin-height=&quot;427&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/rxrLu/btsMALCjC5O/34Ih6baMzLSrPwDDCNyEXk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/rxrLu/btsMALCjC5O/34Ih6baMzLSrPwDDCNyEXk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/rxrLu/btsMALCjC5O/34Ih6baMzLSrPwDDCNyEXk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FrxrLu%2FbtsMALCjC5O%2F34Ih6baMzLSrPwDDCNyEXk%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;812&quot; height=&quot;427&quot; data-origin-width=&quot;812&quot; data-origin-height=&quot;427&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;p data-end=&quot;942&quot; data-start=&quot;934&quot; data-ke-size=&quot;size16&quot;&gt;✅ &lt;b&gt;특징&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1036&quot; data-start=&quot;943&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;987&quot; data-start=&quot;943&quot;&gt;Runnable 인터페이스를 구현하고 run() 메서드를 오버라이드.&lt;/li&gt;
&lt;li data-end=&quot;1036&quot; data-start=&quot;988&quot;&gt;Thread 객체를 생성할 때 Runnable 구현체를 인자로 넘겨줘야 함.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;1047&quot; data-start=&quot;1038&quot; data-ke-size=&quot;size16&quot;&gt;❇️ &lt;b&gt;장점&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1105&quot; data-start=&quot;1048&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1076&quot; data-start=&quot;1048&quot;&gt;다른 클래스를 상속받을 수 있음(유연성 높음).&lt;/li&gt;
&lt;li data-end=&quot;1105&quot; data-start=&quot;1077&quot;&gt;쓰레드 객체를 재사용할 수 있어 관리가 용이함.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-end=&quot;41&quot; data-start=&quot;0&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt; 3️⃣ 동기화 메소드(Synchronized Method)란?&lt;/b&gt;&lt;/h3&gt;
&lt;p data-end=&quot;190&quot; data-start=&quot;42&quot; data-ke-size=&quot;size16&quot;&gt;멀티스레드 환경에서 여러 개의 스레드가 &lt;b&gt;동시에 같은 자원에 접근하면&lt;/b&gt; 예상치 못한 결과가 발생할 수 있다.&lt;br /&gt;이런 문제를 해결하기 위해 &lt;b&gt;한 번에 하나의 스레드만 해당 메서드에 접근하도록 보장하는&lt;/b&gt; 방법이 &lt;b&gt;동기화(Synchronization) 이다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-end=&quot;190&quot; data-start=&quot;42&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;190&quot; data-start=&quot;42&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;190&quot; data-start=&quot;42&quot; data-ke-size=&quot;size16&quot;&gt;  &lt;b&gt;동기화 메소드 선언 방법&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;1-min.png&quot; data-origin-width=&quot;727&quot; data-origin-height=&quot;319&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/EqxtX/btsM2bmf3dX/pzVW753DY1d0dxv80jpBRk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/EqxtX/btsM2bmf3dX/pzVW753DY1d0dxv80jpBRk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/EqxtX/btsM2bmf3dX/pzVW753DY1d0dxv80jpBRk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FEqxtX%2FbtsM2bmf3dX%2FpzVW753DY1d0dxv80jpBRk%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;727&quot; height=&quot;319&quot; data-filename=&quot;1-min.png&quot; data-origin-width=&quot;727&quot; data-origin-height=&quot;319&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;✅ synchronized 키워드를 메서드에 붙이면, 해당 메서드를 실행 중인 &lt;b&gt;스레드가 끝날 때까지&lt;/b&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;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;  &lt;b&gt;동기화 메소드 예제&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;2-min.png&quot; data-origin-width=&quot;635&quot; data-origin-height=&quot;697&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/7KFDc/btsM1ngplEe/DRqvS839bMhLspkj44TY01/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/7KFDc/btsM1ngplEe/DRqvS839bMhLspkj44TY01/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/7KFDc/btsM1ngplEe/DRqvS839bMhLspkj44TY01/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F7KFDc%2FbtsM1ngplEe%2FDRqvS839bMhLspkj44TY01%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;635&quot; height=&quot;697&quot; data-filename=&quot;2-min.png&quot; data-origin-width=&quot;635&quot; data-origin-height=&quot;697&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;화면 캡처 2025-03-30 173816-min.png&quot; data-origin-width=&quot;568&quot; data-origin-height=&quot;320&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/sdba5/btsM0OyQisl/RgKznsKEALjNCsuo5eNvK0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/sdba5/btsM0OyQisl/RgKznsKEALjNCsuo5eNvK0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/sdba5/btsM0OyQisl/RgKznsKEALjNCsuo5eNvK0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fsdba5%2FbtsM0OyQisl%2FRgKznsKEALjNCsuo5eNvK0%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;568&quot; height=&quot;320&quot; data-filename=&quot;화면 캡처 2025-03-30 173816-min.png&quot; data-origin-width=&quot;568&quot; data-origin-height=&quot;320&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;  &lt;b&gt;스레드 간 충돌 없이 순차적으로 실행됨.&lt;/b&gt;&lt;br /&gt;synchronized를 적용하지 않으면 &lt;b&gt;여러 스레드가 동시에 count를 수정&lt;/b&gt;하여 1, 2, 3, ... 순서가 꼬일 수도 있다.&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;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-end=&quot;1778&quot; data-start=&quot;1740&quot; data-ke-size=&quot;size23&quot;&gt;  &lt;b&gt;동기화 블록 (Synchronized Block)&lt;/b&gt;&lt;/h3&gt;
&lt;p data-end=&quot;1861&quot; data-start=&quot;1779&quot; data-ke-size=&quot;size16&quot;&gt;만약 전체 메서드를 동기화하면 성능 저하가 발생할 수 있다.&lt;br /&gt;이럴 때는 &lt;b&gt;동기화 블록&lt;/b&gt;을 사용해서 &lt;b&gt;필요한 부분만 보호&lt;/b&gt;할 수 있다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;화면 캡처 2025-03-30 174038-min.png&quot; data-origin-width=&quot;652&quot; data-origin-height=&quot;322&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/uByn3/btsM22oRriD/38nY4TEuUyMTU0XoeL0kFK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/uByn3/btsM22oRriD/38nY4TEuUyMTU0XoeL0kFK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/uByn3/btsM22oRriD/38nY4TEuUyMTU0XoeL0kFK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FuByn3%2FbtsM22oRriD%2F38nY4TEuUyMTU0XoeL0kFK%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;652&quot; height=&quot;322&quot; data-filename=&quot;화면 캡처 2025-03-30 174038-min.png&quot; data-origin-width=&quot;652&quot; data-origin-height=&quot;322&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>JAVA</category>
      <category>Runnable</category>
      <category>Thread</category>
      <category>동기화 메소드</category>
      <category>동기화 블록</category>
      <category>자바</category>
      <author>Isaac01</author>
      <guid isPermaLink="true">https://opidea.tistory.com/40</guid>
      <comments>https://opidea.tistory.com/entry/Java-Thread%EC%99%80-Runnable%EC%9D%98-%EC%B0%A8%EC%9D%B4#entry40comment</comments>
      <pubDate>Tue, 4 Mar 2025 20:28:12 +0900</pubDate>
    </item>
    <item>
      <title>&amp;lt;Java&amp;gt; 로컬 클래스와 지역 변수의 생명 주기</title>
      <link>https://opidea.tistory.com/entry/Java-%EB%A1%9C%EC%BB%AC-%ED%81%B4%EB%9E%98%EC%8A%A4%EC%99%80-%EC%A7%80%EC%97%AD-%EB%B3%80%EC%88%98%EC%9D%98-%EC%83%9D%EB%AA%85-%EC%A3%BC%EA%B8%B0</link>
      <description>&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot; data-start=&quot;336&quot; data-end=&quot;370&quot;&gt;&lt;b&gt;1. 클래스 선언부에서 실행 코드는 허용되지 않음&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;596&quot; data-origin-height=&quot;322&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/qKH81/btsMxJi5OgP/jiSzaXhnJWFlHcwODjbdak/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/qKH81/btsMxJi5OgP/jiSzaXhnJWFlHcwODjbdak/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/qKH81/btsMxJi5OgP/jiSzaXhnJWFlHcwODjbdak/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FqKH81%2FbtsMxJi5OgP%2FjiSzaXhnJWFlHcwODjbdak%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;596&quot; height=&quot;322&quot; data-origin-width=&quot;596&quot; data-origin-height=&quot;322&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;클래스 선언부에서 변수 값 재할당할 수 없는 이유에 대해서는 선언부에 &lt;span style=&quot;color: #f89009;&quot;&gt;&lt;b&gt;실행 코드&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000; text-align: left;&quot;&gt;를 &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; 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;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot; data-start=&quot;336&quot; data-end=&quot;370&quot;&gt;&lt;b&gt;2. 클래스 선언부에서 실행 코드는 허용되지 않음&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;586&quot; data-origin-height=&quot;311&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bjoZ6U/btsMw5mGlhQ/K8gWWfW0pDfwkITSiDlAIk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bjoZ6U/btsMw5mGlhQ/K8gWWfW0pDfwkITSiDlAIk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bjoZ6U/btsMw5mGlhQ/K8gWWfW0pDfwkITSiDlAIk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbjoZ6U%2FbtsMw5mGlhQ%2FK8gWWfW0pDfwkITSiDlAIk%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;586&quot; height=&quot;311&quot; data-origin-width=&quot;586&quot; data-origin-height=&quot;311&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt; &lt;b&gt;&amp;nbsp;참고로 JDK 8부터는 final이 생략된다.&amp;nbsp;&lt;/b&gt; &lt;/span&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;로컬&amp;nbsp; 클래스의 객체는 메소드 실행이 종료되면 없어지는 것이 일반적이지만, 메소드가 종료되어도 계속 실행 상태로 존재할 수 있다. 예로 들어 로컬 스레드 객체를 사용하는 것이다. 메소드를 실행하는 스레드와 다르므로 메소드가 종료된 후에도 로컬 스레드 객체는 실행 상태로 존재할 수 있다.&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;하지만, 로컬 클래스에서 지역변수 var를 참조하고 있다면 var가 사라진 후에도 접근해야&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;하는 문제가 생긴다. J&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;AVA 이를 해결하지 위해 &lt;span style=&quot;color: #f89009;&quot;&gt;&lt;b&gt;로컬 클래스에서 지역 변수를 참조한다면&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #f89009;&quot;&gt;&lt;b&gt; &lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #f89009;&quot;&gt;&lt;b&gt;지역변수는 &lt;b&gt;&lt;span style=&quot;color: #ffffff; background-color: #666666;&quot;&gt;&amp;nbsp;final&amp;nbsp;&lt;/span&gt;&lt;/b&gt; 특성을 가지는 변수로&lt;/b&gt;&lt;/span&gt; 만들어야 한다는 규칙을 만들었다.&amp;nbsp;&lt;/span&gt;&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;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #ffffff; background-color: #666666;&quot;&gt;&amp;nbsp;final&amp;nbsp;&lt;/span&gt;&lt;/b&gt; 변수는 JVM이 내부적으로 그 변수를 복사해서 사용하기 때문에,&amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;값을 변경하면 &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;원본 변수와 복사된 값이 달라질 수 있어서 변경을 허용하지 않는다.&lt;/span&gt;&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>JAVA</category>
      <category>java</category>
      <category>로컬 클래스 지역변수 참조</category>
      <author>Isaac01</author>
      <guid isPermaLink="true">https://opidea.tistory.com/39</guid>
      <comments>https://opidea.tistory.com/entry/Java-%EB%A1%9C%EC%BB%AC-%ED%81%B4%EB%9E%98%EC%8A%A4%EC%99%80-%EC%A7%80%EC%97%AD-%EB%B3%80%EC%88%98%EC%9D%98-%EC%83%9D%EB%AA%85-%EC%A3%BC%EA%B8%B0#entry39comment</comments>
      <pubDate>Tue, 25 Feb 2025 23:10:48 +0900</pubDate>
    </item>
    <item>
      <title>&amp;lt;Java&amp;gt; 클래스 선언부에서 변수 값 재할당할 수 없는 이유</title>
      <link>https://opidea.tistory.com/entry/Java-%ED%81%B4%EB%9E%98%EC%8A%A4-%EB%82%B4%EB%B6%80%EC%97%90%EC%84%9C-%EB%B3%80%EC%88%98-%EA%B0%92-%EC%9E%AC%ED%95%A0%EB%8B%B9%ED%95%A0-%EC%88%98-%EC%97%86%EB%8A%94-%EC%9D%B4%EC%9C%A0</link>
      <description>&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-start=&quot;336&quot; data-end=&quot;370&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;클래스 단순한 설계도일 뿐 실제 실행되는 코드가 아니다.&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;588&quot; data-origin-height=&quot;121&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/G42WN/btsMuSV0neH/jcs2M2JQLLxBWb5SVCA3oK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/G42WN/btsMuSV0neH/jcs2M2JQLLxBWb5SVCA3oK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/G42WN/btsMuSV0neH/jcs2M2JQLLxBWb5SVCA3oK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FG42WN%2FbtsMuSV0neH%2Fjcs2M2JQLLxBWb5SVCA3oK%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;588&quot; height=&quot;121&quot; data-origin-width=&quot;588&quot; data-origin-height=&quot;121&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&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;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-end=&quot;370&quot; data-start=&quot;336&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;클래스 선언부에서 실행 코드는 허용되지 않음&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;506&quot; data-start=&quot;371&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;432&quot; data-start=&quot;371&quot;&gt;클래스는 단순한 &lt;b&gt;설계도&lt;/b&gt;이므로, 클래스 선언부에서 &lt;b&gt;변수를 변경하는 실행 코드&lt;/b&gt;를 작성할 수 없다.&lt;/li&gt;
&lt;li data-end=&quot;506&quot; data-start=&quot;433&quot;&gt;변수 선언 시 int num = 10;처럼 &lt;b&gt;초기화는 가능&lt;/b&gt;하지만, num = 20; 같은 재할당은 허용되지 않는다.&lt;/li&gt;
&lt;li data-end=&quot;506&quot; data-start=&quot;433&quot;&gt;자바의 클래스 내부에는 &lt;b&gt;&quot;실행 코드&quot;가 올 수 없고&lt;/b&gt;, &lt;b&gt;&quot;멤버 변수 선언&quot;만 가능하기 때문&lt;/b&gt;이다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그렇다면 &lt;b&gt;&lt;span style=&quot;color: #f89009;&quot;&gt;&quot;클래스에서 선언된 변수는 final 특성을 가지는게 아닌가?&quot;&lt;/span&gt; &lt;/b&gt;라는 생각을 해보았다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-start=&quot;336&quot; data-end=&quot;370&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #9d9d9d; color: #ffffff;&quot;&gt;final&lt;/span&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt; &lt;/span&gt;과 &quot;클래스 선언부에서 값 재할당 불가&quot;의 차이점&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자바에서 &lt;b&gt;멤버 변수는 자동으로 final이 되지 않는다.&lt;/b&gt;&lt;br /&gt;즉, &lt;b&gt;클래스 선언부에서 값을 바로 재할당할 수 없다고 해서, 해당 변수가 final처럼 동작하는 것은 아니다.&lt;/b&gt;&lt;br /&gt;왜냐하면 &lt;b&gt;객체가 생성된 후에는 값 변경이 가능하기 때문&lt;/b&gt;이다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-end=&quot;347&quot; data-start=&quot;318&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;final과 일반 변수의 차이점&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;특징일반 변수 (int num)final 변수 (final int num)&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-end=&quot;611&quot; data-start=&quot;348&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody data-end=&quot;611&quot; data-start=&quot;449&quot;&gt;
&lt;tr data-end=&quot;489&quot; data-start=&quot;449&quot;&gt;
&lt;td&gt;선언과 동시에 초기화 필요?&lt;/td&gt;
&lt;td&gt;❌ (필요 없음)&lt;/td&gt;
&lt;td&gt;✅ (필수)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;536&quot; data-start=&quot;490&quot;&gt;
&lt;td&gt;생성자에서 값 변경 가능?&lt;/td&gt;
&lt;td&gt;✅ (가능)&lt;/td&gt;
&lt;td&gt;✅ (가능, 하지만 한 번만)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;574&quot; data-start=&quot;537&quot;&gt;
&lt;td&gt;메서드에서 값 변경 가능?&lt;/td&gt;
&lt;td&gt;✅ (가능)&lt;/td&gt;
&lt;td&gt;❌ (불가능)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;611&quot; data-start=&quot;575&quot;&gt;
&lt;td&gt;실행 중 값 변경 가능?&lt;/td&gt;
&lt;td&gt;✅ (가능)&lt;/td&gt;
&lt;td&gt;❌ (불가능)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;즉, &lt;b&gt;&quot;클래스 내부에서 재할당할 수 없다&quot;는 이유로 final과 동일하게 취급할 수 없다.&lt;/b&gt;&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;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot; data-start=&quot;318&quot; data-end=&quot;347&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #9d9d9d; color: #ffffff;&quot;&gt;&amp;nbsp;but &lt;/span&gt;&amp;nbsp;메소드와 생성자를 이용해 값을 재할당 할 수 있다.&lt;/b&gt;&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;594&quot; data-origin-height=&quot;187&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/OIllR/btsMu8LI8pT/JyTr5mah4mgbtLZSEDsk2K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/OIllR/btsMu8LI8pT/JyTr5mah4mgbtLZSEDsk2K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/OIllR/btsMu8LI8pT/JyTr5mah4mgbtLZSEDsk2K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FOIllR%2FbtsMu8LI8pT%2FJyTr5mah4mgbtLZSEDsk2K%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;594&quot; height=&quot;187&quot; data-origin-width=&quot;594&quot; data-origin-height=&quot;187&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;587&quot; data-origin-height=&quot;192&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/qZSOa/btsMx2phkQo/Wkky8ZksFBo8vvKGcLaNwk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/qZSOa/btsMx2phkQo/Wkky8ZksFBo8vvKGcLaNwk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/qZSOa/btsMx2phkQo/Wkky8ZksFBo8vvKGcLaNwk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FqZSOa%2FbtsMx2phkQo%2FWkky8ZksFBo8vvKGcLaNwk%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;587&quot; height=&quot;192&quot; data-origin-width=&quot;587&quot; data-origin-height=&quot;192&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>JAVA</category>
      <author>Isaac01</author>
      <guid isPermaLink="true">https://opidea.tistory.com/38</guid>
      <comments>https://opidea.tistory.com/entry/Java-%ED%81%B4%EB%9E%98%EC%8A%A4-%EB%82%B4%EB%B6%80%EC%97%90%EC%84%9C-%EB%B3%80%EC%88%98-%EA%B0%92-%EC%9E%AC%ED%95%A0%EB%8B%B9%ED%95%A0-%EC%88%98-%EC%97%86%EB%8A%94-%EC%9D%B4%EC%9C%A0#entry38comment</comments>
      <pubDate>Tue, 25 Feb 2025 14:09:53 +0900</pubDate>
    </item>
    <item>
      <title>&amp;lt;Spring&amp;gt; 스프링 의존관계란?</title>
      <link>https://opidea.tistory.com/entry/Spring-%EC%8A%A4%ED%94%84%EB%A7%81-%EC%9D%98%EC%A1%B4%EA%B4%80%EA%B3%84%EB%9E%80</link>
      <description>&lt;h2 data-end=&quot;28&quot; data-start=&quot;0&quot; data-ke-size=&quot;size26&quot;&gt;스프링에서 의존관계(Dependency)란?&lt;/h2&gt;
&lt;p data-end=&quot;155&quot; data-start=&quot;29&quot; data-ke-size=&quot;size16&quot;&gt;스프링 프레임워크에서 &lt;b&gt;의존관계(Dependency)&lt;/b&gt; 란, 하나의 객체가 다른 객체를 필요로 하는 관계를 의미한다. 예를 들어, A 클래스가 B 클래스를 사용해야 한다면, A는 B에 의존한다고 말할 수 있다.&lt;/p&gt;
&lt;h3 data-end=&quot;181&quot; data-start=&quot;162&quot; data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-end=&quot;181&quot; data-start=&quot;162&quot; data-ke-size=&quot;size23&quot;&gt;1. &lt;b&gt;의존관계의 종류&lt;/b&gt;&lt;/h3&gt;
&lt;h4 data-end=&quot;218&quot; data-start=&quot;182&quot; data-ke-size=&quot;size20&quot;&gt;(1) &lt;b&gt;강한 결합 (Tightly Coupled)&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;389&quot; data-start=&quot;219&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;251&quot; data-start=&quot;219&quot;&gt;A가 B를 직접 생성하고, 직접 관리하는 경우.&lt;/li&gt;
&lt;li data-end=&quot;331&quot; data-start=&quot;252&quot;&gt;예제:
&lt;div&gt;
&lt;div&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;1-min.png&quot; data-origin-width=&quot;365&quot; data-origin-height=&quot;80&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Dpv9z/btsMo7zfggC/VO4UGDnZyKfoySZPPdRZo0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Dpv9z/btsMo7zfggC/VO4UGDnZyKfoySZPPdRZo0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Dpv9z/btsMo7zfggC/VO4UGDnZyKfoySZPPdRZo0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FDpv9z%2FbtsMo7zfggC%2FVO4UGDnZyKfoySZPPdRZo0%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;365&quot; height=&quot;80&quot; data-filename=&quot;1-min.png&quot; data-origin-width=&quot;365&quot; data-origin-height=&quot;80&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li data-end=&quot;389&quot; data-start=&quot;332&quot;&gt;문제점: A 클래스가 B 클래스에 강하게 의존하여, B가 변경되면 A도 수정해야 함.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-end=&quot;428&quot; data-start=&quot;391&quot; data-ke-size=&quot;size20&quot;&gt;(2) &lt;b&gt;느슨한 결합 (Loosely Coupled)&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;525&quot; data-start=&quot;429&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;466&quot; data-start=&quot;429&quot;&gt;A가 B를 직접 생성하지 않고, 외부에서 주입받는 방식.&lt;/li&gt;
&lt;li data-end=&quot;525&quot; data-start=&quot;467&quot;&gt;스프링에서는 &lt;b&gt;의존성 주입(Dependency Injection, DI)&lt;/b&gt; 을 사용해 구현 가능.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-end=&quot;575&quot; data-start=&quot;532&quot; data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-end=&quot;575&quot; data-start=&quot;532&quot; data-ke-size=&quot;size23&quot;&gt;2. &lt;b&gt;의존성 주입(Dependency Injection, DI)&lt;/b&gt;&lt;/h3&gt;
&lt;p data-end=&quot;650&quot; data-start=&quot;576&quot; data-ke-size=&quot;size16&quot;&gt;스프링은 객체 간의 의존성을 직접 연결하지 않고, &lt;b&gt;Spring Container&lt;/b&gt; 가 객체를 생성하고 주입하는 방식으로 관리해.&lt;/p&gt;
&lt;h4 data-end=&quot;694&quot; data-start=&quot;652&quot; data-ke-size=&quot;size20&quot;&gt;(1) &lt;b&gt;생성자 주입(Constructor Injection)&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;968&quot; data-start=&quot;695&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;720&quot; data-start=&quot;695&quot;&gt;생성자를 통해 의존 객체를 주입하는 방식.&lt;/li&gt;
&lt;li data-end=&quot;943&quot; data-start=&quot;721&quot;&gt;예제:
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;562&quot; data-origin-height=&quot;339&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bW53UM/btsMqumH4fN/34maK61tQDeLYGh34OKVKK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bW53UM/btsMqumH4fN/34maK61tQDeLYGh34OKVKK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bW53UM/btsMqumH4fN/34maK61tQDeLYGh34OKVKK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbW53UM%2FbtsMqumH4fN%2F34maK61tQDeLYGh34OKVKK%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;562&quot; height=&quot;339&quot; data-origin-width=&quot;562&quot; data-origin-height=&quot;339&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li data-end=&quot;968&quot; data-start=&quot;944&quot;&gt;장점: &lt;b&gt;불변성 유지&lt;/b&gt;, 테스트 용이&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-end=&quot;1005&quot; data-start=&quot;970&quot; data-ke-size=&quot;size20&quot;&gt;(2) &lt;b&gt;필드 주입(Field Injection)&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1283&quot; data-start=&quot;1006&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1041&quot; data-start=&quot;1006&quot;&gt;필드에 직접 @Autowired를 붙여서 주입하는 방식.&lt;/li&gt;
&lt;li data-end=&quot;1245&quot; data-start=&quot;1042&quot;&gt;예제:
&lt;div&gt;
&lt;div&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;561&quot; data-origin-height=&quot;221&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bkimMx/btsMo2Y9Od4/BVs4VY19DlElLkwm6K7ot0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bkimMx/btsMo2Y9Od4/BVs4VY19DlElLkwm6K7ot0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bkimMx/btsMo2Y9Od4/BVs4VY19DlElLkwm6K7ot0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbkimMx%2FbtsMo2Y9Od4%2FBVs4VY19DlElLkwm6K7ot0%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;561&quot; height=&quot;221&quot; data-origin-width=&quot;561&quot; data-origin-height=&quot;221&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;span&gt; &lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li data-end=&quot;1283&quot; data-start=&quot;1246&quot;&gt;단점: &lt;b&gt;테스트 어려움&lt;/b&gt;, &lt;b&gt;순환 참조 문제 발생 가능&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-end=&quot;1325&quot; data-start=&quot;1285&quot; data-ke-size=&quot;size20&quot;&gt;(3) &lt;b&gt;Setter 주입(Setter Injection)&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1652&quot; data-start=&quot;1326&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1358&quot; data-start=&quot;1326&quot;&gt;Setter 메서드를 이용하여 의존성을 주입하는 방식.&lt;/li&gt;
&lt;li data-end=&quot;1623&quot; data-start=&quot;1359&quot;&gt;예제:
&lt;div&gt;
&lt;div&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;558&quot; data-origin-height=&quot;316&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cxklzQ/btsMqhOxCpk/gKeLwsTLa1xrrIaYVaLxK1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cxklzQ/btsMqhOxCpk/gKeLwsTLa1xrrIaYVaLxK1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cxklzQ/btsMqhOxCpk/gKeLwsTLa1xrrIaYVaLxK1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcxklzQ%2FbtsMqhOxCpk%2FgKeLwsTLa1xrrIaYVaLxK1%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;558&quot; height=&quot;316&quot; data-origin-width=&quot;558&quot; data-origin-height=&quot;316&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li data-end=&quot;1652&quot; data-start=&quot;1624&quot;&gt;장점: 필요할 때만 주입 가능 (선택적 의존성)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-end=&quot;1688&quot; data-start=&quot;1659&quot; data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-end=&quot;1688&quot; data-start=&quot;1659&quot; data-ke-size=&quot;size23&quot;&gt;3. &lt;b&gt;스프링이 의존관계를 관리하는 방법&lt;/b&gt;&lt;/h3&gt;
&lt;p data-end=&quot;1734&quot; data-start=&quot;1689&quot; data-ke-size=&quot;size16&quot;&gt;스프링 컨테이너는 &lt;b&gt;Bean&lt;/b&gt; 객체를 생성하고, 의존성을 자동으로 주입해 줘.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1876&quot; data-start=&quot;1735&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1825&quot; data-start=&quot;1735&quot;&gt;@Component, @Service, @Repository, @Controller 등의 애너테이션을 사용하면 자동으로 객체를 스프링이 관리함.&lt;/li&gt;
&lt;li data-end=&quot;1876&quot; data-start=&quot;1826&quot;&gt;@Autowired를 사용하면 스프링이 알아서 적절한 빈(Bean)을 찾아 주입함.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-end=&quot;1904&quot; data-start=&quot;1883&quot; data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-end=&quot;1904&quot; data-start=&quot;1883&quot; data-ke-size=&quot;size23&quot;&gt;4. &lt;b&gt;의존성 관리의 장점&lt;/b&gt;&lt;/h3&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-end=&quot;2060&quot; data-start=&quot;1905&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li data-end=&quot;1965&quot; data-start=&quot;1905&quot;&gt;&lt;b&gt;코드 재사용성 증가&lt;/b&gt; &amp;rarr; 객체의 생성과 관리가 스프링 컨테이너에서 이루어져, 코드 중복이 줄어듦.&lt;/li&gt;
&lt;li data-end=&quot;2013&quot; data-start=&quot;1966&quot;&gt;&lt;b&gt;유지보수 용이&lt;/b&gt; &amp;rarr; 객체 간 결합도를 낮출 수 있어, 코드 수정이 쉬워짐.&lt;/li&gt;
&lt;li data-end=&quot;2060&quot; data-start=&quot;2014&quot;&gt;&lt;b&gt;테스트 용이&lt;/b&gt; &amp;rarr; 가짜 객체(Mock)를 주입하여 단위 테스트가 쉬워짐.&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Spring 입문</category>
      <category>Spring</category>
      <category>의존관계</category>
      <author>Isaac01</author>
      <guid isPermaLink="true">https://opidea.tistory.com/34</guid>
      <comments>https://opidea.tistory.com/entry/Spring-%EC%8A%A4%ED%94%84%EB%A7%81-%EC%9D%98%EC%A1%B4%EA%B4%80%EA%B3%84%EB%9E%80#entry34comment</comments>
      <pubDate>Thu, 20 Feb 2025 19:32:59 +0900</pubDate>
    </item>
    <item>
      <title>[Java] 인터페이스란?</title>
      <link>https://opidea.tistory.com/entry/Java-%EC%9D%B8%ED%84%B0%ED%8E%98%EC%9D%B4%EC%8A%A4%EB%9E%80</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;인터페이스란?&lt;/h3&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;p data-ke-size=&quot;size16&quot;&gt;인터페이스의 메소드만 알고 있으면 된다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;개발 코드가 직접 객체의 메소드를 호출하면 간단한데왜 중간에 인터페이스를 두는지 의문점이 생긴다. 그 이유는 개발 코드를 수정하지 않고 사용하는 개체를 변경할 수 있도록 하기 위해서 이다. 인터페이스는 하나의 객체가 아니라 여러 객체가 아니라 여러 객체들과 사용이 가능하므로 어떤 객체를 사용하느냐에 따라서 실행 내용과 리턴값이 다를 수 있다. 따라서 개발 코드 측면에서는 코드변경 없이 실행 내용과 리턴값을 다양화할 수 있다는 장점을 가지게 된다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;인터페이스&amp;nbsp; 선언&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;클래스는 필드, 생성자, 메소드를 구성 멤버로 가지는데 비해, &lt;b&gt;&lt;span style=&quot;color: #f89009;&quot;&gt;인터페이스는 상수 필드와 추상 메소드만을 구성 멤버로 가진다.&lt;/span&gt;&lt;/b&gt; 인터페이스는 객체로 생성할 수 없기 때문에 생성자를 가질 수 없습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;tip 자바 8부터는 인터페이스에더 추가적인 멤버가 생겼지만 일반적으로는 상수와 추상메소드만 선언해서 사용한다.&lt;/b&gt;&lt;/span&gt;&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;&amp;nbsp;&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;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;추상 메소드 선언&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;인터페이스를 통해 호출된 메소드는 최종적으로 객체에서 실행된다. 그렇기 때문에 인터페이스의 메소드는 실행 블록이 필요 없는 &lt;span style=&quot;color: #f89009;&quot;&gt;&lt;b&gt;추상 메소드&lt;/b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;로 선언&lt;/span&gt;&lt;/span&gt;한다. &lt;span style=&quot;color: #f89009;&quot;&gt;&lt;b&gt;추상 메소드는 리턴 타입, 메소드 이름, 매개 변수만 기술되고 중관호 {}를 붙이지 않는 메소드를 말한다.&lt;/b&gt;&lt;/span&gt; 인터페이스에 선언된 추상 메소드는 모두 public abstract 의 특성을갖기 때문에 public abstract 를 생략하더라도 컴파일 과정에서 자동으로 붙게 된다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;397&quot; data-origin-height=&quot;195&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/NHhqf/btsMfbvjMWb/JA6jVizSa2qHfBjqhkaOj1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/NHhqf/btsMfbvjMWb/JA6jVizSa2qHfBjqhkaOj1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/NHhqf/btsMfbvjMWb/JA6jVizSa2qHfBjqhkaOj1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FNHhqf%2FbtsMfbvjMWb%2FJA6jVizSa2qHfBjqhkaOj1%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;397&quot; height=&quot;195&quot; data-origin-width=&quot;397&quot; data-origin-height=&quot;195&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;br /&gt;&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;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;구현 객체 구현&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;개발 코드가 인터페이스 메소드를 호출하면 인터페이스는 객체의 메소드를 호출한다. &lt;span style=&quot;color: #f89009;&quot;&gt;&lt;b&gt;객체&lt;/b&gt;&lt;/span&gt;는 인터페이스에서 정의된 추상 메소드와 동일한 메소드 이름, 매개 타입, 리턴 타입을 가진 실체 메소드를 가지고 있어야 한다. 이러한 객체를 인터페이스의 &lt;b&gt;&lt;span style=&quot;color: #f89009;&quot;&gt;구현(implement)객체&lt;/span&gt;&lt;/b&gt;라고 하고, 구현 객체를 생성하는 클래스를 &lt;b&gt;&lt;span style=&quot;color: #f89009;&quot;&gt;구현 클래스&lt;/span&gt;&lt;/b&gt;라고 한다.&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;b&gt;&lt;span style=&quot;color: #f89009;&quot;&gt;implements&lt;/span&gt;&lt;/b&gt; 키워드를 추가하고 인터페이스 이름을 명시해야 한다 그리고 인터페이스에 선언된 추상 메소드의 &lt;span style=&quot;color: #f89009;&quot;&gt;&lt;b&gt;실체 메소드&lt;/b&gt;&lt;/span&gt;를 선언해야 한다.&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;510&quot; data-origin-height=&quot;79&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/k7N16/btsMhS756qn/L8RGROzikUxOfkpPeZvxdK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/k7N16/btsMhS756qn/L8RGROzikUxOfkpPeZvxdK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/k7N16/btsMhS756qn/L8RGROzikUxOfkpPeZvxdK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fk7N16%2FbtsMhS756qn%2FL8RGROzikUxOfkpPeZvxdK%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;510&quot; height=&quot;79&quot; data-origin-width=&quot;510&quot; data-origin-height=&quot;79&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt; &lt;b&gt;tip 구현 클래스에서 인터페이스의 추상 메소드에 대한 실체 메소드를 작성할 때 주의할 점은 인터페이스의 모든 메소드는 기본적으로 public 접근 제한을 갖기 때문에 public 보다 더 낮은 접근 제한으로 작성할 수 없다. public 을 생략하면 &quot;Cannot reduce the Visibilly of the inherited method&quot;라는 컴파일 에러가 뜬다.&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&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;&amp;nbsp;&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;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;인터페이스 사용&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;인터페이스를 선언하고 인터페이스의 실체 메소드를 가지고 있는 구현 클래스를 작성하고 구현객체를 생성했다면&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;인터페이스를 사용해야 할 것이다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사용 방법은 간단하다. &lt;span style=&quot;color: #f89009;&quot;&gt;&lt;b&gt;구현객체를 인터페이스 변수에 대입해서 사용&lt;/b&gt;&lt;/span&gt;한다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 인터페이스가 필드 타입으로 사용될 경우, 필드에 구현 객체를 대입할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 인터페이스가 생성자의 매개 변수 타입으로 사용될 경우, new 연산자로 객체를 생성할 때 구현 객체를 생성자의 매개값으로 대입할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. 인터페이스가 로컬 변수 타입으로 사용될 경우, 변수에 구현 객체를 대입할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4. 인터페이스가 메소드의 매개 변수 타입으로 사용될 경우, 메소드 호출 시 구현 객체를 매개값으로 대입할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>JAVA</category>
      <category>구현객체</category>
      <category>자바</category>
      <category>자바 인터페이스</category>
      <author>Isaac01</author>
      <guid isPermaLink="true">https://opidea.tistory.com/33</guid>
      <comments>https://opidea.tistory.com/entry/Java-%EC%9D%B8%ED%84%B0%ED%8E%98%EC%9D%B4%EC%8A%A4%EB%9E%80#entry33comment</comments>
      <pubDate>Thu, 13 Feb 2025 00:12:00 +0900</pubDate>
    </item>
    <item>
      <title>[Java]  추상 클래스란?</title>
      <link>https://opidea.tistory.com/entry/Java-%EC%B6%94%EC%83%81-%ED%81%B4%EB%9E%98%EC%8A%A4%EB%9E%80</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;추상클래스란?&lt;/h3&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;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;추상 클래스 선언&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;추상 클래스를 선언할 때에는 클래스 선언에 abstract 키워드를 붙여야 한다. &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #f89009;&quot;&gt;abstract&lt;/span&gt;&lt;/b&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #f89009;&quot;&gt; 를 붙이면 new 연산자를 이용해서 객체를 만들지 못하고, &lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;상속을 통해 자식 클래스만 만들 수 있다.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;348&quot; data-origin-height=&quot;149&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ctJNf0/btsMfc1Z8YD/9bXGC4VBO04mlKYkhCHMVK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ctJNf0/btsMfc1Z8YD/9bXGC4VBO04mlKYkhCHMVK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ctJNf0/btsMfc1Z8YD/9bXGC4VBO04mlKYkhCHMVK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FctJNf0%2FbtsMfc1Z8YD%2F9bXGC4VBO04mlKYkhCHMVK%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;348&quot; height=&quot;149&quot; data-origin-width=&quot;348&quot; data-origin-height=&quot;149&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&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;&amp;nbsp;추상 클래스도 일반 클래스와 마찬가지로 필드, 생성자, 메소드 선언을 할 수 있다. &lt;span style=&quot;color: #f89009;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;new 연산자로 직접 생성자를 호출할 수는 없지만&lt;/span&gt;&lt;b&gt; 자식 객체가 생성될 때 super(. . .)를 호출해서 추상 클래스 객체를 생성하므로 추상 클래스도 생성자가 반드시 있어야 한다.&lt;/b&gt;&amp;nbsp;&lt;/span&gt;&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;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;추상 메소드 재정의&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;추상 글래스는 실체&amp;nbsp; 글래스가 공통적으로 가져야 할 필드와 메소드들을 정의해 놓은 추상적인 클래스로, 실체 클래스의 멤버(필드, 메소드)를 통일한느 데 목적이있다. 하지만 &lt;span style=&quot;color: #f89009;&quot;&gt;&lt;b&gt;메소드의 선언만 통일하고, 실행 내용은 클래스마다 달라야 하는 경우&lt;/b&gt;&lt;/span&gt;가 있다. 이런 경우를 위해서 추상 클래스는 추상 메소드를 선언할 수 있다. 추상 메소드는 abstract 키워드와 함께메소드의 선언부만 있고 메소드 실행 내용인 중괄호 {}가 없는 메소드를 말한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;화면 캡처 2025-02-24 171201-min.png&quot; data-origin-width=&quot;450&quot; data-origin-height=&quot;21&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/yM8NU/btsMtav7TOG/SmWks4N2kp8tGn2IvTk69k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/yM8NU/btsMtav7TOG/SmWks4N2kp8tGn2IvTk69k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/yM8NU/btsMtav7TOG/SmWks4N2kp8tGn2IvTk69k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FyM8NU%2FbtsMtav7TOG%2FSmWks4N2kp8tGn2IvTk69k%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;450&quot; height=&quot;21&quot; data-filename=&quot;화면 캡처 2025-02-24 171201-min.png&quot; data-origin-width=&quot;450&quot; data-origin-height=&quot;21&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&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;b&gt;&lt;span style=&quot;color: #f89009;&quot;&gt;자식 클래스는 반드시 추상 메소드를 재정의&lt;/span&gt;&lt;/b&gt;해서 실행 내용을 작성해야 하는데, 그렇지 않으면 컴파일 에러가 발생한다. 이것이 추상 메소드의 위력이다.&amp;nbsp;&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;핵심키워드&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 추상클래스란 클래스들의 공통적인 특성을 추출한 클래스&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 추상 클래스 선언에 &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;abstract&lt;span&gt; 키워드 작성&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;3. new 연산자를 이용한 객체 생성은 불가능&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;4. 자식 클래스 super()를 호출해서 객체 생성하므로 추상 클래스도 반드시 생성자가 있어야 함&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;5. 추상 메소드는 자식 클래스에서 반드시 재정의 해야함&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;</description>
      <category>JAVA</category>
      <category>자바 추상 클래스</category>
      <category>추상 클래스</category>
      <author>Isaac01</author>
      <guid isPermaLink="true">https://opidea.tistory.com/32</guid>
      <comments>https://opidea.tistory.com/entry/Java-%EC%B6%94%EC%83%81-%ED%81%B4%EB%9E%98%EC%8A%A4%EB%9E%80#entry32comment</comments>
      <pubDate>Wed, 12 Feb 2025 22:11:08 +0900</pubDate>
    </item>
    <item>
      <title>[Java] 싱글톤이란?</title>
      <link>https://opidea.tistory.com/entry/Java-%EC%8B%B1%EA%B8%80%ED%86%A4%EC%9D%B4%EB%9E%80</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;실글톤이란?&lt;/h3&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;p data-ke-size=&quot;size16&quot;&gt;싱클톤을 만들려면 클래스 외부에서&amp;nbsp; new 연산자로 생성자를 호출할 수 없도록 막아야한다.&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;외부에서 생성자를호출할 수 없도록 하려면 생성자 앞에 private 접근 제한자를 붙여주면 된다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 자신의 타입인 정적 필드를 하나 선언하고 자신의 객체를 생성해 초기화 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;참고로 클래스 내부에서는new 연산자로 생성자 호출이 가능하다.&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;정적 필드도 private&amp;nbsp; 접근 제한자를 붙여 외부에서 필드값을 변경하지 못하도록 막아야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;대신 외부에서 호출할 수 있는 정적 메소드를 선언하고정적 필드에서 참조하고 있는 자신의 객체를 리턴해준다.&amp;nbsp; &amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정적 메소드의 리턴 값은 클래스의 참조 값임으로 &quot;static 클래스 메소드명() {}&quot; 식으로 작성하면 된다.&amp;nbsp;&amp;nbsp;&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;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;511&quot; data-origin-height=&quot;338&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Xkhvs/btsMfcnuHa2/Oga1W7gNkoO0TaZAJ72qM1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Xkhvs/btsMfcnuHa2/Oga1W7gNkoO0TaZAJ72qM1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Xkhvs/btsMfcnuHa2/Oga1W7gNkoO0TaZAJ72qM1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FXkhvs%2FbtsMfcnuHa2%2FOga1W7gNkoO0TaZAJ72qM1%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;511&quot; height=&quot;338&quot; data-origin-width=&quot;511&quot; data-origin-height=&quot;338&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;핵심키워드&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 단 하나의 객체만 만들어야 할때(단 하나의 객체는 본인 클래스 내부에서)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 외부에서 객체를 생성할 수 없도록 생성자 접근 제한자를 private&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. 외부에서&amp;nbsp; 호출할 수 있는 정적 메소드 선언, 정적 메소드는 필드에서 참조하고 있는자신의 객체를&amp;nbsp; 리턴&amp;nbsp;&amp;nbsp;&lt;/p&gt;</description>
      <category>JAVA</category>
      <category>java</category>
      <category>싱글톤</category>
      <category>자바 싱글톤</category>
      <author>Isaac01</author>
      <guid isPermaLink="true">https://opidea.tistory.com/31</guid>
      <comments>https://opidea.tistory.com/entry/Java-%EC%8B%B1%EA%B8%80%ED%86%A4%EC%9D%B4%EB%9E%80#entry31comment</comments>
      <pubDate>Wed, 12 Feb 2025 21:55:35 +0900</pubDate>
    </item>
    <item>
      <title>백준 13909번: 창문 닫기</title>
      <link>https://opidea.tistory.com/entry/%EB%B0%B1%EC%A4%80-13909%EB%B2%88-%EC%B0%BD%EB%AC%B8-%EB%8B%AB%EA%B8%B0</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;1-min.png&quot; data-origin-width=&quot;727&quot; data-origin-height=&quot;687&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cuJS7x/btsLYtoCe7G/dSWYyDTnuuOCuiS8HcHhzk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cuJS7x/btsLYtoCe7G/dSWYyDTnuuOCuiS8HcHhzk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cuJS7x/btsLYtoCe7G/dSWYyDTnuuOCuiS8HcHhzk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcuJS7x%2FbtsLYtoCe7G%2FdSWYyDTnuuOCuiS8HcHhzk%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;727&quot; height=&quot;687&quot; data-filename=&quot;1-min.png&quot; data-origin-width=&quot;727&quot; data-origin-height=&quot;687&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&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;&amp;nbsp;&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사람이 1명이면&amp;nbsp; 창문도 1개, 사람이 2명이면 창문도 2개, 즉 사람이 N명이면 창문도 N 개 이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;N번째 사람은 N 의 배수 번째 창문을 열려있음 닫고 닫혀 있으면 연다. 이해하기 쉽게 그림으로&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1번째 사람 (5개 창문이 열려 있음)&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;1-min.png&quot; data-origin-width=&quot;583&quot; data-origin-height=&quot;81&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/yi8v6/btsLYDR4eD0/VBoUnB6Czt8o5wtsCbHp0K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/yi8v6/btsLYDR4eD0/VBoUnB6Czt8o5wtsCbHp0K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/yi8v6/btsLYDR4eD0/VBoUnB6Czt8o5wtsCbHp0K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fyi8v6%2FbtsLYDR4eD0%2FVBoUnB6Czt8o5wtsCbHp0K%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;570&quot; height=&quot;79&quot; data-filename=&quot;1-min.png&quot; data-origin-width=&quot;583&quot; data-origin-height=&quot;81&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&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;2번째 사람 (3개 창문이 열려 있음)&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;2-min.png&quot; data-origin-width=&quot;579&quot; data-origin-height=&quot;82&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/exAVGk/btsLYPEGXSd/2dBqY5Lyk0YjYeLOLxwMuK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/exAVGk/btsLYPEGXSd/2dBqY5Lyk0YjYeLOLxwMuK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/exAVGk/btsLYPEGXSd/2dBqY5Lyk0YjYeLOLxwMuK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FexAVGk%2FbtsLYPEGXSd%2F2dBqY5Lyk0YjYeLOLxwMuK%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;570&quot; height=&quot;81&quot; data-filename=&quot;2-min.png&quot; data-origin-width=&quot;579&quot; data-origin-height=&quot;82&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&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;3번째 사람 (2개 창문이 열려 있음)&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;3-min.png&quot; data-origin-width=&quot;547&quot; data-origin-height=&quot;75&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/sh2ma/btsLXuu0zyz/aCBVSnzksmTvOvhAKeA181/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/sh2ma/btsLXuu0zyz/aCBVSnzksmTvOvhAKeA181/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/sh2ma/btsLXuu0zyz/aCBVSnzksmTvOvhAKeA181/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fsh2ma%2FbtsLXuu0zyz%2FaCBVSnzksmTvOvhAKeA181%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;570&quot; height=&quot;78&quot; data-filename=&quot;3-min.png&quot; data-origin-width=&quot;547&quot; data-origin-height=&quot;75&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&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;4번째 사람 (3개 창문이 열려 있음)&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;4-min.png&quot; data-origin-width=&quot;547&quot; data-origin-height=&quot;76&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bDEv6N/btsLZvZ0x4J/JJnqhX7YetTOHxgETCZK91/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bDEv6N/btsLZvZ0x4J/JJnqhX7YetTOHxgETCZK91/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bDEv6N/btsLZvZ0x4J/JJnqhX7YetTOHxgETCZK91/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbDEv6N%2FbtsLZvZ0x4J%2FJJnqhX7YetTOHxgETCZK91%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;570&quot; height=&quot;79&quot; data-filename=&quot;4-min.png&quot; data-origin-width=&quot;547&quot; data-origin-height=&quot;76&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&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;5번째 사람 (2개 창문이 열려 있음)&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;5-min.png&quot; data-origin-width=&quot;543&quot; data-origin-height=&quot;82&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b4GuLq/btsLZuNAkB2/BtwYYyceLzrYVsqT6ftJ9K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b4GuLq/btsLZuNAkB2/BtwYYyceLzrYVsqT6ftJ9K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b4GuLq/btsLZuNAkB2/BtwYYyceLzrYVsqT6ftJ9K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb4GuLq%2FbtsLZuNAkB2%2FBtwYYyceLzrYVsqT6ftJ9K%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;570&quot; height=&quot;86&quot; data-filename=&quot;5-min.png&quot; data-origin-width=&quot;543&quot; data-origin-height=&quot;82&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&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;&amp;nbsp;&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;&amp;nbsp;&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;규칙이 보이지 않는다면 다음 힌트를 보고 다시 풀어보는 방법을 추천한다.&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 52.907%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 26.8605%; text-align: center;&quot;&gt;&lt;span&gt;&lt;span&gt;입력&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 25.9302%; text-align: center;&quot;&gt;&lt;span&gt;&lt;span&gt;열려있는 창문의 개수&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 26.8605%; text-align: center;&quot;&gt;&lt;span&gt;&lt;span&gt;2~3&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 25.9302%; text-align: center;&quot;&gt;&lt;span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;개&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 26.8605%; text-align: center;&quot;&gt;&lt;span&gt;&lt;span&gt;4~8&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 25.9302%; text-align: center;&quot;&gt;&lt;span&gt;&lt;span&gt;2&lt;/span&gt;&lt;span&gt;개&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 26.8605%; text-align: center;&quot;&gt;&lt;span&gt;&lt;span&gt;9~15&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 25.9302%; text-align: center;&quot;&gt;&lt;span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;개&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 26.8605%; text-align: center;&quot;&gt;&lt;span&gt;&lt;span&gt;16~24&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 25.9302%; text-align: center;&quot;&gt;&lt;span&gt;&lt;span&gt;4&lt;/span&gt;&lt;span&gt;개&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 26.8605%; text-align: center;&quot;&gt;&lt;span&gt;&lt;span&gt;25~35&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 25.9302%; text-align: center;&quot;&gt;&lt;span&gt;&lt;span&gt;5&lt;/span&gt;&lt;span&gt;개&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 26.8605%; text-align: center;&quot;&gt;&lt;span&gt;&lt;span&gt;36~48&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 25.9302%; text-align: center;&quot;&gt;&lt;span&gt;&lt;span&gt;6&lt;/span&gt;&lt;span&gt;개&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 26.8605%; text-align: center;&quot;&gt;&lt;span&gt;&lt;span&gt;49~63&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 25.9302%; text-align: center;&quot;&gt;&lt;span&gt;&lt;span&gt;7&lt;/span&gt;&lt;span&gt;개&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 26.8605%; text-align: center;&quot;&gt;&lt;span&gt;&lt;span&gt;64~80&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 25.9302%; text-align: center;&quot;&gt;&lt;span&gt;&lt;span&gt;8&lt;/span&gt;&lt;span&gt;개&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;N이 4, 9, 16, 25일 때마다 마지막에 열린 창문의 개수가 1씩 증가하는 것을 알 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;즉, N이 완전제곱수이면&amp;nbsp; 다음 완전제곱수 전까진 N개의 창문이 열리는 규칙을 찾아 볼 수 있다.&amp;nbsp;&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;span style=&quot;color: #404040; text-align: justify;&quot;&gt; &amp;radic;4 &amp;nbsp;근사값 : 2&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #404040; text-align: justify;&quot;&gt; &lt;span style=&quot;color: #404040; text-align: justify;&quot;&gt;&amp;radic;&lt;/span&gt; 5 근사값 : 2.23606797749979&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #404040; text-align: justify;&quot;&gt; &lt;span style=&quot;color: #404040; text-align: justify;&quot;&gt;&amp;radic;&lt;/span&gt; 6 근사값 : 2.44948974278318&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #404040; text-align: justify;&quot;&gt; &lt;span style=&quot;color: #404040; text-align: justify;&quot;&gt;&amp;radic;&lt;/span&gt; 7 근사값 : 2.64575131106459&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #404040; text-align: justify;&quot;&gt; &lt;span style=&quot;color: #404040; text-align: justify;&quot;&gt;&amp;radic;&lt;/span&gt; 8 근사값 : 2.82842712474619&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #404040; text-align: justify;&quot;&gt; &lt;span style=&quot;color: #404040; text-align: justify;&quot;&gt;&amp;radic;&lt;/span&gt; 9 근사값 : 3&lt;/span&gt;&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;&amp;nbsp;&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;&lt;span style=&quot;text-align: justify;&quot;&gt;정답코드&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;0-1-min.png&quot; data-origin-width=&quot;836&quot; data-origin-height=&quot;264&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cmd2wP/btsLYFCnpfd/z1q2Zs1Z8ZVd46Y0JrJYy0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cmd2wP/btsLYFCnpfd/z1q2Zs1Z8ZVd46Y0JrJYy0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cmd2wP/btsLYFCnpfd/z1q2Zs1Z8ZVd46Y0JrJYy0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcmd2wP%2FbtsLYFCnpfd%2Fz1q2Zs1Z8ZVd46Y0JrJYy0%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;836&quot; height=&quot;264&quot; data-filename=&quot;0-1-min.png&quot; data-origin-width=&quot;836&quot; data-origin-height=&quot;264&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>Baekjoon</category>
      <category>13909</category>
      <category>백준</category>
      <category>자바</category>
      <category>창문닫기</category>
      <author>Isaac01</author>
      <guid isPermaLink="true">https://opidea.tistory.com/30</guid>
      <comments>https://opidea.tistory.com/entry/%EB%B0%B1%EC%A4%80-13909%EB%B2%88-%EC%B0%BD%EB%AC%B8-%EB%8B%AB%EA%B8%B0#entry30comment</comments>
      <pubDate>Thu, 23 Jan 2025 22:08:31 +0900</pubDate>
    </item>
    <item>
      <title>윈도우  정품인증 하는 방법</title>
      <link>https://opidea.tistory.com/entry/%EC%9C%88%EB%8F%84%EC%9A%B0-%EC%A0%95%ED%92%88%EC%9D%B8%EC%A6%9D-%ED%95%98%EB%8A%94-%EB%B0%A9%EB%B2%95</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;KMS(키 관리 서비스)란 무엇인가요?&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;마이크로소프트에서 제공하는 정품 인증 방법으로 KMS, 즉 키 관리 서비스라는 제품 인증 방법을 말합니다. 관공서나 학교 등에서 특수한 목적으로 임시적으로 사용할 수 있는 제품키를 제공하고 있으며, 짧게는 한 달 길게는 6개월 이상 정품인증이 되는 임시적인 방법입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;KMS로 정품인증을 받기 위해서는 CMD 명령어를 이용해야 하며, 사용방법은 매우 간단한 몇 가지 명령어에 제공되는 시리얼 키를 등록해주면 간단하게 정품인증을 할 수 있습니다.&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;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;CMD를 이용하여 정품인증받기&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;설치된 윈도우 11 버전을 확인해야 합니다. 대부분의 사용자는 윈도우 11 홈 또는 윈도우 11 프로를 사용하는데요, 종류가 천차만별이고 윈도우 10 등 다른 버전을 쓰시는 분들도 있으니 좀 더 자세한 정보는 마이크로소프트 홈페이지를 방문하여 확인해 보시길 바랍니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;581&quot; data-origin-height=&quot;752&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ygLGf/btsLz26ukHd/6mMNfLyN10SBOYmAXXeMYk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ygLGf/btsLz26ukHd/6mMNfLyN10SBOYmAXXeMYk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ygLGf/btsLz26ukHd/6mMNfLyN10SBOYmAXXeMYk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FygLGf%2FbtsLz26ukHd%2F6mMNfLyN10SBOYmAXXeMYk%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;581&quot; height=&quot;752&quot; data-origin-width=&quot;581&quot; data-origin-height=&quot;752&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&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;&amp;nbsp;&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;&amp;nbsp;&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;CMD를 활용한 윈도우 제품 정품인증 방법&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;- 정품인증 순서&lt;/b&gt;&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;시작 메뉴 검색에서 CMD 검색하여 &lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;관리자 권한으로 실행&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;명령어 &lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;slmgr/ipk&lt;/span&gt;&lt;/b&gt; 제품키 입력&lt;br /&gt;ex) 제품키가 W269N-WFGWX-YVC9B-4J6C9-T83GX일 때 아래와 같이 입력&lt;br /&gt;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;slmgr/ipk W269N-WFGWX-YVC9B-4J6C9-T83GX&lt;/span&gt;&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;KMS 인증을 위해 아래와 같이 명령어를 입력해 줍니다.&lt;br /&gt;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;slmgr/skms kms8.msguides.com&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;혹시 오류가 날 경우 kms8 부분을 kms9, kms7 등 숫자를 바꿔 다시 진행해 봅니다.&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;마지막으로 아래 명령어를 입력하여 마무리합니다.&lt;br /&gt;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;slmgr/ato&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;/span&gt;&lt;/b&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;454&quot; data-origin-height=&quot;825&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bpz1rl/btsLA43jase/hFjzDsC1qlcNFRt2UrdaYK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bpz1rl/btsLA43jase/hFjzDsC1qlcNFRt2UrdaYK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bpz1rl/btsLA43jase/hFjzDsC1qlcNFRt2UrdaYK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbpz1rl%2FbtsLA43jase%2FhFjzDsC1qlcNFRt2UrdaYK%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;454&quot; height=&quot;825&quot; data-origin-width=&quot;454&quot; data-origin-height=&quot;825&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&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;&amp;nbsp;&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;a href=&quot;https://youareniceman.tistory.com/entry/%EC%9C%88%EB%8F%84%EC%9A%B0-11-%EC%A0%95%ED%92%88%EC%9D%B8%EC%A6%9D-%ED%95%A9%EB%B2%95%EC%A0%81%EC%9C%BC%EB%A1%9C-%EB%B0%9B%EB%8A%94-%EB%B0%A9%EB%B2%95KMS-%ED%99%9C%EC%9A%A9&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://youareniceman.tistory.com/entry/%EC%9C%88%EB%8F%84%EC%9A%B0-11-%EC%A0%95%ED%92%88%EC%9D%B8%EC%A6%9D-%ED%95%A9%EB%B2%95%EC%A0%81%EC%9C%BC%EB%A1%9C-%EB%B0%9B%EB%8A%94-%EB%B0%A9%EB%B2%95KMS-%ED%99%9C%EC%9A%A9&lt;/a&gt;&lt;/p&gt;</description>
      <category>윈도우 정품인증</category>
      <category>윈도우10 정품인증</category>
      <category>윈도우11 정품인증</category>
      <author>Isaac01</author>
      <guid isPermaLink="true">https://opidea.tistory.com/28</guid>
      <comments>https://opidea.tistory.com/entry/%EC%9C%88%EB%8F%84%EC%9A%B0-%EC%A0%95%ED%92%88%EC%9D%B8%EC%A6%9D-%ED%95%98%EB%8A%94-%EB%B0%A9%EB%B2%95#entry28comment</comments>
      <pubDate>Sat, 28 Dec 2024 20:46:59 +0900</pubDate>
    </item>
    <item>
      <title>[Java] StringTokenizer 사용 방법 / readLine(), nextToken() 차이점 &amp;lt;적용문제&amp;gt;</title>
      <link>https://opidea.tistory.com/entry/Java-readLine-nextToken-%EC%B0%A8%EC%9D%B4%EC%A0%90-%EB%B0%8F-%EC%82%AC%EC%9A%A9%EB%B0%A9%EB%B2%95</link>
      <description>&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;StringTokenizer &lt;/b&gt;&lt;b&gt;사용방법&amp;nbsp;&lt;/b&gt;&lt;/h2&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;b&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot;&gt;StringTokenizer st = new StringTokenizer(&quot;변수&quot;,&amp;nbsp; &quot;구분자&quot;,&amp;nbsp; &quot;참&quot;);&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt; StringTokenizer를 사용하는 방식은 4가지가 있다.&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;① 변수만 지정할 경우 공백기준으로 문자열을 분리한다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;② 구분자를 지정해 구분자 기준으로 문자열을 분리한다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;③ 둘 이상의 구분자는 이어서 작성한다.&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;④ 구분자를 포함해 토근에 넣어 문자열을 분리한다.&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&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;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;*주의사항*&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;StringTokenizer은&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;&amp;nbsp; &lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;import java.util.*;&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;을 추가해줘야 한다. 또한, String타입으로만&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;리턴하기 때문에 &lt;b&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;String타입을 제외하곤 형변환&lt;/span&gt;&lt;/b&gt;을&amp;nbsp;해줘야 한다.&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;&amp;nbsp;&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;1. 띄어쓰기 기준으로 분리하기.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt; &lt;span style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot;&gt;StringTokenizer st = new StringTokenizer(&quot;변수&quot;)&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;- 변수만 지정할 경우 공백기준으로 문자열을 분리한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;1-min.png&quot; data-origin-width=&quot;982&quot; data-origin-height=&quot;302&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Niv7i/btsKTmiq5Ny/TlVCyOS95GuBa6Q8XZdIt1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Niv7i/btsKTmiq5Ny/TlVCyOS95GuBa6Q8XZdIt1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Niv7i/btsKTmiq5Ny/TlVCyOS95GuBa6Q8XZdIt1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FNiv7i%2FbtsKTmiq5Ny%2FTlVCyOS95GuBa6Q8XZdIt1%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;982&quot; height=&quot;302&quot; data-filename=&quot;1-min.png&quot; data-origin-width=&quot;982&quot; data-origin-height=&quot;302&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;lt;console&amp;gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;안녕하세요&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;코띵&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;&amp;nbsp;&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;2. 구분자 기준으로 분리하기.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot;&gt;StringTokenizer st = new StringTokenizer(&quot;변수&quot;, &quot;구분자&quot;)&lt;/span&gt; &lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;- 구분자를 지정해 구분자 기준으로 문자열을 분리한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;2-min.png&quot; data-origin-width=&quot;1001&quot; data-origin-height=&quot;297&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dZrAc1/btsKR8Z3Oll/cIDXtTqD8s6c8r6d7fTBh0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dZrAc1/btsKR8Z3Oll/cIDXtTqD8s6c8r6d7fTBh0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dZrAc1/btsKR8Z3Oll/cIDXtTqD8s6c8r6d7fTBh0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdZrAc1%2FbtsKR8Z3Oll%2FcIDXtTqD8s6c8r6d7fTBh0%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;1001&quot; height=&quot;297&quot; data-filename=&quot;2-min.png&quot; data-origin-width=&quot;1001&quot; data-origin-height=&quot;297&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;lt;console&amp;gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;안녕하세요&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;코띵&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;&amp;nbsp;&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;3. 둘 이상의 구분자 기준으로 분리하기.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot;&gt;StringTokenizer st = new StringTokenizer(&quot;변수&quot;, &quot;구분자구분자&quot;)&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;- 둘 이상의 구분자는 이어서 작성한다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;3-min.png&quot; data-origin-width=&quot;977&quot; data-origin-height=&quot;302&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/FHXvz/btsKRlyNjan/KVKqQW0UPGgFDy1OhDVZ10/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/FHXvz/btsKRlyNjan/KVKqQW0UPGgFDy1OhDVZ10/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/FHXvz/btsKRlyNjan/KVKqQW0UPGgFDy1OhDVZ10/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FFHXvz%2FbtsKRlyNjan%2FKVKqQW0UPGgFDy1OhDVZ10%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;977&quot; height=&quot;302&quot; data-filename=&quot;3-min.png&quot; data-origin-width=&quot;977&quot; data-origin-height=&quot;302&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;lt;console&amp;gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;안녕하세요&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;코띵&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;&amp;nbsp;&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;4. 구분자로 지정된 구분자도 토큰에 넣어 분리하기.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot;&gt;StringTokenizer st = new StringTokenizer(&quot;변수&quot;, &quot;구분자구분자&quot;, &quot;참&quot;)&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;- 구분자도 토근에 넣어 문자열을 분리한다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;4-min.png&quot; data-origin-width=&quot;978&quot; data-origin-height=&quot;297&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cZ7GlR/btsKS4I4gDb/ElEIGKPkNghEMs7fWZmUuK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cZ7GlR/btsKS4I4gDb/ElEIGKPkNghEMs7fWZmUuK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cZ7GlR/btsKS4I4gDb/ElEIGKPkNghEMs7fWZmUuK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcZ7GlR%2FbtsKS4I4gDb%2FElEIGKPkNghEMs7fWZmUuK%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;978&quot; height=&quot;297&quot; data-filename=&quot;4-min.png&quot; data-origin-width=&quot;978&quot; data-origin-height=&quot;297&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;lt;console&amp;gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;안녕하세요&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;!&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;gt;&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-size: 1.12em; letter-spacing: 0px;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;readLine(), nextToken() 차이점&lt;/b&gt;&lt;/h2&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;BufferedReader 함수의&lt;b&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;readLine() 메서드&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;두 줄에 수가 하나씩 주어졌을 때 입력을 받는 방법.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;1-min.png&quot; data-origin-width=&quot;987&quot; data-origin-height=&quot;235&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cUUXd2/btsKRGinRMa/pmeOwKs7LHD2vKV33r2u60/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cUUXd2/btsKRGinRMa/pmeOwKs7LHD2vKV33r2u60/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cUUXd2/btsKRGinRMa/pmeOwKs7LHD2vKV33r2u60/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcUUXd2%2FbtsKRGinRMa%2FpmeOwKs7LHD2vKV33r2u60%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;987&quot; height=&quot;235&quot; data-filename=&quot;1-min.png&quot; data-origin-width=&quot;987&quot; data-origin-height=&quot;235&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;lt;console&amp;gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;1&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;2&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;StringTokenizer 함수의&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;nextToken() 메서드&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;한 줄에 두 개의 수가 공백으로 구분되어 주어졌을 때 입력 받는 방법.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;2-min.png&quot; data-origin-width=&quot;975&quot; data-origin-height=&quot;252&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dvj2Vk/btsKS9p5mE8/CcEvSKTKiKKdPqbSDzbfTk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dvj2Vk/btsKS9p5mE8/CcEvSKTKiKKdPqbSDzbfTk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dvj2Vk/btsKS9p5mE8/CcEvSKTKiKKdPqbSDzbfTk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdvj2Vk%2FbtsKS9p5mE8%2FCcEvSKTKiKKdPqbSDzbfTk%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;975&quot; height=&quot;252&quot; data-filename=&quot;2-min.png&quot; data-origin-width=&quot;975&quot; data-origin-height=&quot;252&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;lt;console&amp;gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;1 2&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&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;공백 단위로 입력을 받다가 라인 단위로 입력을 받으려면 readLine()메소드를 다시 사용하면 된다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;3-min.png&quot; data-origin-width=&quot;980&quot; data-origin-height=&quot;322&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/oDg41/btsKReGF4Wr/D2vSBW9B0WX6MNOXcp9dKk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/oDg41/btsKReGF4Wr/D2vSBW9B0WX6MNOXcp9dKk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/oDg41/btsKReGF4Wr/D2vSBW9B0WX6MNOXcp9dKk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FoDg41%2FbtsKReGF4Wr%2FD2vSBW9B0WX6MNOXcp9dKk%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;980&quot; height=&quot;322&quot; data-filename=&quot;3-min.png&quot; data-origin-width=&quot;980&quot; data-origin-height=&quot;322&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;lt;console&amp;gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;1 2&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;3&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;4&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;&amp;nbsp;&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;다시 공백 단위로 입력받으려면 st.nextToken() 메소드를 사용하면 될까?&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;4-min.png&quot; data-origin-width=&quot;972&quot; data-origin-height=&quot;397&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/wboPC/btsKRP7uTnv/M0gkhkKaX3M2RvgkMYv5vk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/wboPC/btsKRP7uTnv/M0gkhkKaX3M2RvgkMYv5vk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/wboPC/btsKRP7uTnv/M0gkhkKaX3M2RvgkMYv5vk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FwboPC%2FbtsKRP7uTnv%2FM0gkhkKaX3M2RvgkMYv5vk%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;972&quot; height=&quot;397&quot; data-filename=&quot;4-min.png&quot; data-origin-width=&quot;972&quot; data-origin-height=&quot;397&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;lt;console&amp;gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;1 2&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;3&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;4&amp;lt;엔터&amp;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;&amp;nbsp;&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;&amp;lt;엔터&amp;gt;를 입력하는 순간 에러 메세지가 뜰 것이다.&amp;nbsp; 아래와 같이 객체를 다시 호출해야 한다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;5-min.png&quot; data-origin-width=&quot;975&quot; data-origin-height=&quot;420&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cWqDNt/btsKQ69J9iP/KLRipAeQeTaNQIcbJqWgp0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cWqDNt/btsKQ69J9iP/KLRipAeQeTaNQIcbJqWgp0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cWqDNt/btsKQ69J9iP/KLRipAeQeTaNQIcbJqWgp0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcWqDNt%2FbtsKQ69J9iP%2FKLRipAeQeTaNQIcbJqWgp0%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;975&quot; height=&quot;420&quot; data-filename=&quot;5-min.png&quot; data-origin-width=&quot;975&quot; data-origin-height=&quot;420&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;StringTokenizer를 사용해 간단한 문제를 풀어보자!&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;과목명, 학점, 등급을 공백으로 구분하여 입력하고 과목명, 등급만 출력해 보자.&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;sample-input-1&quot; class=&quot;bash&quot; style=&quot;background-color: #f7f7f9; color: #333333; text-align: start;&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;ObjectOrientedProgramming1 3.0 A+
IntroductiontoComputerEngineering 3.0 A+
ObjectOrientedProgramming2 3.0 A0&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;sample-input-1&quot; class=&quot;bash&quot; style=&quot;background-color: #f7f7f9; color: #333333; text-align: start;&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;ObjectOrientedProgramming1 A+
IntroductiontoComputerEngineering A+
ObjectOrientedProgramming2 A0&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;lt;정답코드&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;화면 캡처 2024-12-02 152433-min.png&quot; data-origin-width=&quot;1022&quot; data-origin-height=&quot;571&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dSglee/btsK3fLXwTm/HZk2EfB8FedkNq1GEBQIU0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dSglee/btsK3fLXwTm/HZk2EfB8FedkNq1GEBQIU0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dSglee/btsK3fLXwTm/HZk2EfB8FedkNq1GEBQIU0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdSglee%2FbtsK3fLXwTm%2FHZk2EfB8FedkNq1GEBQIU0%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;1022&quot; height=&quot;571&quot; data-filename=&quot;화면 캡처 2024-12-02 152433-min.png&quot; data-origin-width=&quot;1022&quot; data-origin-height=&quot;571&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;위 문제는 풀었다면 아래 적용문제를 풀어보자.&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;lt;적용문제&amp;gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;다음 문제를 BufferedReader, StringTokenizer 를 사용해서 풀어보면 이해가 됐는지 도움이 될 것이다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/10811&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.acmicpc.net/problem/10811&lt;/a&gt;&lt;/p&gt;</description>
      <category>JAVA</category>
      <author>Isaac01</author>
      <guid isPermaLink="true">https://opidea.tistory.com/22</guid>
      <comments>https://opidea.tistory.com/entry/Java-readLine-nextToken-%EC%B0%A8%EC%9D%B4%EC%A0%90-%EB%B0%8F-%EC%82%AC%EC%9A%A9%EB%B0%A9%EB%B2%95#entry22comment</comments>
      <pubDate>Fri, 22 Nov 2024 11:17:57 +0900</pubDate>
    </item>
    <item>
      <title>[Java] StringBuffer, StringBuilder, String 문자열 비교 &amp;lt;적용문제&amp;gt;</title>
      <link>https://opidea.tistory.com/entry/Java-StringBuffer-StringBuilder-String-%EB%AC%B8%EC%9E%90%EC%97%B4-%EB%B9%84%EA%B5%90-%EC%A0%81%EC%9A%A9%EB%AC%B8%EC%A0%9C</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;참조 타입의 비교 방법을 예전에 살펴보았다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;String&amp;nbsp; 변수 값을 비교할 땐 equals() 메소드를 사용해야 한다고 공부했었다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자세한 내용은 아래 링크를 클릭하면 된다.&amp;nbsp;&lt;/p&gt;
&lt;figure id=&quot;og_1731413567798&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;참조 타입과 참조 변수&quot; data-og-description=&quot;자바의 타입은 크게 기본 타입과 참고 타입으로 분류된다. 기본 타입은 정수 타입(byte, char, short, int, long), 실수 타입(float, double), 논리 타입(boolean)을 말하고 참고 타입으론 배열 타입, 열거 타입, &quot; data-og-host=&quot;opidea.tistory.com&quot; data-og-source-url=&quot;https://opidea.tistory.com/entry/%EC%B0%B8%EC%A1%B0-%ED%83%80%EC%9E%85%EA%B3%BC-%EC%B0%B8%EC%A1%B0-%EB%B3%80%EC%88%98&quot; data-og-url=&quot;https://opidea.tistory.com/entry/%EC%B0%B8%EC%A1%B0-%ED%83%80%EC%9E%85%EA%B3%BC-%EC%B0%B8%EC%A1%B0-%EB%B3%80%EC%88%98&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/lma6J/hyXwn4t5To/ut6JLseJcBVAVeu3TXGWCK/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/IPX50/hyXwl6G4Ce/y5R47j60YlAzhvn7YEPeW0/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800&quot;&gt;&lt;a href=&quot;https://opidea.tistory.com/entry/%EC%B0%B8%EC%A1%B0-%ED%83%80%EC%9E%85%EA%B3%BC-%EC%B0%B8%EC%A1%B0-%EB%B3%80%EC%88%98&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://opidea.tistory.com/entry/%EC%B0%B8%EC%A1%B0-%ED%83%80%EC%9E%85%EA%B3%BC-%EC%B0%B8%EC%A1%B0-%EB%B3%80%EC%88%98&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/lma6J/hyXwn4t5To/ut6JLseJcBVAVeu3TXGWCK/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/IPX50/hyXwl6G4Ce/y5R47j60YlAzhvn7YEPeW0/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;참조 타입과 참조 변수&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;자바의 타입은 크게 기본 타입과 참고 타입으로 분류된다. 기본 타입은 정수 타입(byte, char, short, int, long), 실수 타입(float, double), 논리 타입(boolean)을 말하고 참고 타입으론 배열 타입, 열거 타입,&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;opidea.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;StringBuffer 문자열도 equals()로 비교하면 되는 줄 알았으나 아니였다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;1-min.png&quot; data-origin-width=&quot;641&quot; data-origin-height=&quot;176&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ZILSO/btsKGWkvmnA/eyLviLuiQ0MZyZ7aOhSm2k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ZILSO/btsKGWkvmnA/eyLviLuiQ0MZyZ7aOhSm2k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ZILSO/btsKGWkvmnA/eyLviLuiQ0MZyZ7aOhSm2k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FZILSO%2FbtsKGWkvmnA%2FeyLviLuiQ0MZyZ7aOhSm2k%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;641&quot; height=&quot;176&quot; data-filename=&quot;1-min.png&quot; data-origin-width=&quot;641&quot; data-origin-height=&quot;176&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;결과: false&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;&amp;nbsp;&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;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;StringBuffer클래스의 equals 메서드를 사용해도 등가비교연산자(==)로 비교한 것과 같다.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;toString()을 이용해서 해결 할 수 있는데, StringBuffer클래스의 toString()을 호출하면 담고있는 문자열을&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;String으로 반환한다. 그래서 toString()을 호출해서 String인스턴스를 얻은 다음, 여기에 equals 메서드를&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;2-min.png&quot; data-origin-width=&quot;671&quot; data-origin-height=&quot;176&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lo4EG/btsKGELbraz/0Zm4wEXTwlGKRkPOXkkoDk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lo4EG/btsKGELbraz/0Zm4wEXTwlGKRkPOXkkoDk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lo4EG/btsKGELbraz/0Zm4wEXTwlGKRkPOXkkoDk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Flo4EG%2FbtsKGELbraz%2F0Zm4wEXTwlGKRkPOXkkoDk%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;671&quot; height=&quot;176&quot; data-filename=&quot;2-min.png&quot; data-origin-width=&quot;671&quot; data-origin-height=&quot;176&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;결과: true&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;적용문제: 백준10988번&lt;/p&gt;</description>
      <category>JAVA</category>
      <author>Isaac01</author>
      <guid isPermaLink="true">https://opidea.tistory.com/27</guid>
      <comments>https://opidea.tistory.com/entry/Java-StringBuffer-StringBuilder-String-%EB%AC%B8%EC%9E%90%EC%97%B4-%EB%B9%84%EA%B5%90-%EC%A0%81%EC%9A%A9%EB%AC%B8%EC%A0%9C#entry27comment</comments>
      <pubDate>Tue, 12 Nov 2024 21:11:18 +0900</pubDate>
    </item>
    <item>
      <title>재귀함수 동작원리 &amp;lt;적용문제&amp;gt;</title>
      <link>https://opidea.tistory.com/entry/%EC%9E%AC%EA%B7%80%ED%95%A8%EC%88%98-%EB%8F%99%EC%9E%91%EC%9B%90%EB%A6%AC-%EC%A0%81%EC%9A%A9%EB%AC%B8%EC%A0%9C</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;재귀함수란?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;쉽게 말해 N라는 함수에서 자기자신(N)을 다시 호출하는 함수를 의미한다.&amp;nbsp;&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;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;p data-ke-size=&quot;size16&quot;&gt;3을 입력하면&amp;nbsp; 3*2*1 = 6&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4을 입력하면&amp;nbsp; 4*3*2*1 = 24 가 출력되는 것을 팩토리얼이라고 하고 이를 3!, 4! 라고 표기한다.&amp;nbsp;&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;&amp;nbsp;&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;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. Main메소드에서 fact(4)가 호출된다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;873&quot; data-origin-height=&quot;397&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/d1JgJo/btsKwNvbBrm/7XJqBHcKt0fLg5ZFNT4WnK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/d1JgJo/btsKwNvbBrm/7XJqBHcKt0fLg5ZFNT4WnK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/d1JgJo/btsKwNvbBrm/7XJqBHcKt0fLg5ZFNT4WnK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fd1JgJo%2FbtsKwNvbBrm%2F7XJqBHcKt0fLg5ZFNT4WnK%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;673&quot; height=&quot;397&quot; data-origin-width=&quot;873&quot; data-origin-height=&quot;397&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;if문 조건이 false임으로 fact(3)이 호출되고 fact(4)는 Stack에서 대기하고 있게 된다.&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 50.1163%; height: 25px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;fact(4) * 4&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;대기&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. fact(3) 호출이 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;if문 조건이 false임으로 fact(2)이 호출되고 fact(3)는 Stack에서 대기하고 있게 된다.&lt;/p&gt;
&lt;table style=&quot;letter-spacing: 0px; border-collapse: collapse; width: 50.1163%; height: 25px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;fact(4) * 4&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;대기&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;fact(3) * 3&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;대기&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. fact(2) 호출이 된다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;if문 조건이 false임으로 fact(1)이 호출되고 fact(2)는 Stack에서 대기하고 있게 된다.&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 50.1163%; height: 25px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;fact(4) * 4&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;대기&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;fact(3) * 3&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;대기&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;fact(2) * 2&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;대기&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4. fact(1) 호출이 된다.&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 50.1163%; height: 80px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;fact(4) * 4&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;대기&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;fact(3) * 3&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;대기&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;fact(2) * 2&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;대기&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;fact(1) * 1&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;실행&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;if문 조건이 true임으로 fact(1)에 1을 리턴한다.&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 50.1163%; height: 80px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50.116%;&quot;&gt;fact(4) * 4&lt;/td&gt;
&lt;td style=&quot;width: 49.652%;&quot;&gt;대기&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50.116%;&quot;&gt;fact(3) * 3&lt;/td&gt;
&lt;td style=&quot;width: 49.652%;&quot;&gt;대기&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50.116%;&quot;&gt;fact(2) * 2&lt;/td&gt;
&lt;td style=&quot;width: 49.652%;&quot;&gt;대기&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50.116%;&quot;&gt;1 * 1&lt;/td&gt;
&lt;td style=&quot;width: 49.652%;&quot;&gt;실행&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;5. fact(1)은 &amp;nbsp;fact(2)에&amp;nbsp; 1 * 1 값(1)을 리턴하고 종료된다.&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 50.1163%; height: 80px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;fact(4) * 4&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;대기&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;fact(3) * 3&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;대기&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;1 * 2&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;대기&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;1 * 1&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;종료&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;6. fact(2)은 fact(3)에 1 * 2값(2)을 리턴하고 종료된다.&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 50%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 25.2326%;&quot;&gt;fact(4) * 4&lt;/td&gt;
&lt;td style=&quot;width: 24.6512%;&quot;&gt;대기&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 25.2326%;&quot;&gt;2 * 3&lt;/td&gt;
&lt;td style=&quot;width: 24.6512%;&quot;&gt;대기&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 25.2326%;&quot;&gt;1 * 2&lt;/td&gt;
&lt;td style=&quot;width: 24.6512%;&quot;&gt;종료&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;7.&lt;span&gt;&amp;nbsp;&lt;/span&gt;fact(3)은 fact(4)에 2 * 3값(6)을 리턴하고 종료된다.&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 50%; height: 32px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;6 * 4&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;대기&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 12px;&quot;&gt;
&lt;td style=&quot;height: 12px;&quot;&gt;2 * 3&lt;/td&gt;
&lt;td style=&quot;height: 12px;&quot;&gt;종료&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;8.&lt;span&gt; 마지막으로&amp;nbsp;&lt;/span&gt;fact(4)은 Main메소드에 6 * 4값(24)을 리턴하고 종료된다.&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 50%; height: 17px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;height: 17px;&quot;&gt;6 * 4&lt;/td&gt;
&lt;td style=&quot;height: 17px;&quot;&gt;종료&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;lt;적용문제&amp;gt;_피보나치 수&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;a style=&quot;color: #006dd7;&quot; href=&quot;https://www.acmicpc.net/problem/10870&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.acmicpc.net/problem/10870&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <author>Isaac01</author>
      <guid isPermaLink="true">https://opidea.tistory.com/26</guid>
      <comments>https://opidea.tistory.com/entry/%EC%9E%AC%EA%B7%80%ED%95%A8%EC%88%98-%EB%8F%99%EC%9E%91%EC%9B%90%EB%A6%AC-%EC%A0%81%EC%9A%A9%EB%AC%B8%EC%A0%9C#entry26comment</comments>
      <pubDate>Tue, 5 Nov 2024 22:31:02 +0900</pubDate>
    </item>
    <item>
      <title>백준 1213번: 팰린드롬 만들기</title>
      <link>https://opidea.tistory.com/entry/%EB%B0%B1%EC%A4%80-1213%EB%B2%88-%ED%8C%B0%EB%A6%B0%EB%93%9C%EB%A1%AC-%EB%A7%8C%EB%93%A4%EA%B8%B0</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;화면 캡처 2024-11-05 223542-min.png&quot; data-origin-width=&quot;730&quot; data-origin-height=&quot;604&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b63rB7/btsKwPmzab7/eAKQOhSZctKmYYFeOAKSpK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b63rB7/btsKwPmzab7/eAKQOhSZctKmYYFeOAKSpK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b63rB7/btsKwPmzab7/eAKQOhSZctKmYYFeOAKSpK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb63rB7%2FbtsKwPmzab7%2FeAKQOhSZctKmYYFeOAKSpK%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;730&quot; height=&quot;604&quot; data-filename=&quot;화면 캡처 2024-11-05 223542-min.png&quot; data-origin-width=&quot;730&quot; data-origin-height=&quot;604&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;1-min.png&quot; data-origin-width=&quot;732&quot; data-origin-height=&quot;547&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bVYpXi/btsKybPJHzu/4pXSFdMRVRKt6inXG11DZK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bVYpXi/btsKybPJHzu/4pXSFdMRVRKt6inXG11DZK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bVYpXi/btsKybPJHzu/4pXSFdMRVRKt6inXG11DZK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbVYpXi%2FbtsKybPJHzu%2F4pXSFdMRVRKt6inXG11DZK%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;732&quot; height=&quot;547&quot; data-filename=&quot;1-min.png&quot; data-origin-width=&quot;732&quot; data-origin-height=&quot;547&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;2-min.png&quot; data-origin-width=&quot;729&quot; data-origin-height=&quot;544&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/9HQk6/btsKyXwK0OZ/Rp287khBpswbiImxV4oUM1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/9HQk6/btsKyXwK0OZ/Rp287khBpswbiImxV4oUM1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/9HQk6/btsKyXwK0OZ/Rp287khBpswbiImxV4oUM1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F9HQk6%2FbtsKyXwK0OZ%2FRp287khBpswbiImxV4oUM1%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;729&quot; height=&quot;544&quot; data-filename=&quot;2-min.png&quot; data-origin-width=&quot;729&quot; data-origin-height=&quot;544&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&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;&amp;nbsp;&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #1a5490;&quot;&gt;&lt;b&gt;문제의 핵심&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 입력한 순서와 상관없이 A~Z순으로 정렬된다.&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;p data-ke-size=&quot;size16&quot;&gt;'CCBBA'을 입력했을 때, 출력 값은 'BCACB'이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;'CACCC'을 입력했을 때, 출력 값은 'CCACC'이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;'ABACABA'을 입력했을 때, 출력 값은 'AABCBAA'이다.&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;팰린드롬 특징을 보면, 홀수개인 알파벳은 A~Z순서 상관없이 가운대로 오고&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;나머지 알파벳은 절반은 오름차순으로, 다른 절반은 내림차순으로 정렬된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;알파벳을 개수를 파악해 홀수개인 알파벳이 2개 이상이면 &quot;I'm Sorry Hansoo&quot;를 출력한다.&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;&amp;nbsp;&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;&amp;nbsp;&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;1. 기초작업&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정렬한 값을 넣어줄 StringBuffer함수 생성&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;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;2. check라는 함수를 통해 입력된 값이 팰린드롬을 만들 수 있는지 확인&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;알파벳 개수를 2로 나웠을 때 그 값이 0이 아니면(짝수가 아니면),&amp;nbsp; check의 값은 +1 증가하고&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;check값이 2이상이면&amp;nbsp; check에는 false값이 들어간다.&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;3. 만약 입력한 값이 팰린더롬을 만들 수 있는 값이면, if문을 실행.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;3-1. 알파벳이 짝수개 일 때&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;alpha[i] / 2를 해줘서 입력한 알파벳의 절반만큼 fir함수에 넣어준다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;i + 65를 해주는 이유는 0 = A, B = 1, C = 2, D = 3... 임으로&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt; i + 65를 해주고 이를 (char)로 형변환을 한다음에 fir함수에 문자를 삽입한다.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;3-2. 알파벳이 홀수개 일 때&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;알파벳이 홀수개 여도 알파벳 개수의 절반은 fir함수에 삽입해야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #1a5490;&quot;&gt;&lt;b&gt;예를 들어 'AAAAABB'가 입력됐을 때, (AAAAA = 5개) 5 / 2 = 2임으로 'A'를 반복문을 통해 2번 삽입하고&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #1a5490;&quot;&gt;&lt;b&gt;남은 'A'를 mid에 저장해야 한다.&lt;/b&gt;&lt;/span&gt;&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;4. fir값을 end에 삽입 후 reverse() 함수를 통해 문자열을 뒤집어 준다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;풀어서 설명하면 'AAAAABB'가 입력됐다고 가정하면, fir에는 'AAB'가 삽입되어 있고,&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;mid에는 'A', end에는&amp;nbsp; fir값을 대입해 reverse() 함수를 통해 뒤집어 주면 end에는 'BAA'가 삽입된다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;마지막으로 fir, mid, end순으로 값을 출력하면 'AABABAA'라는 값이 나오게 된다.&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;&amp;nbsp;&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;&amp;nbsp;&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;정답코드&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;1-1-min.png&quot; data-origin-width=&quot;832&quot; data-origin-height=&quot;772&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c19C0O/btsLZbASUi4/XQNg7dBybhgsFpHbKwT1Qk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c19C0O/btsLZbASUi4/XQNg7dBybhgsFpHbKwT1Qk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c19C0O/btsLZbASUi4/XQNg7dBybhgsFpHbKwT1Qk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc19C0O%2FbtsLZbASUi4%2FXQNg7dBybhgsFpHbKwT1Qk%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;832&quot; height=&quot;772&quot; data-filename=&quot;1-1-min.png&quot; data-origin-width=&quot;832&quot; data-origin-height=&quot;772&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;1-2-min.png&quot; data-origin-width=&quot;907&quot; data-origin-height=&quot;936&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/t1hZe/btsLYapfR92/OU04dSHsFNSfhKqFiTOAz0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/t1hZe/btsLYapfR92/OU04dSHsFNSfhKqFiTOAz0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/t1hZe/btsLYapfR92/OU04dSHsFNSfhKqFiTOAz0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Ft1hZe%2FbtsLYapfR92%2FOU04dSHsFNSfhKqFiTOAz0%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;907&quot; height=&quot;936&quot; data-filename=&quot;1-2-min.png&quot; data-origin-width=&quot;907&quot; data-origin-height=&quot;936&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>Baekjoon</category>
      <category>1213</category>
      <category>1213 자바</category>
      <category>1213백준</category>
      <category>1213번 자바</category>
      <category>백준</category>
      <category>백준 1213</category>
      <category>백준 1213번</category>
      <category>자바 1213</category>
      <author>Isaac01</author>
      <guid isPermaLink="true">https://opidea.tistory.com/24</guid>
      <comments>https://opidea.tistory.com/entry/%EB%B0%B1%EC%A4%80-1213%EB%B2%88-%ED%8C%B0%EB%A6%B0%EB%93%9C%EB%A1%AC-%EB%A7%8C%EB%93%A4%EA%B8%B0#entry24comment</comments>
      <pubDate>Sat, 19 Oct 2024 15:08:43 +0900</pubDate>
    </item>
    <item>
      <title>[Java] 동적 계획법 (DP: Dynamic programmig) 이해하기 &amp;lt;적용문제&amp;gt;</title>
      <link>https://opidea.tistory.com/entry/Java-%EB%8F%99%EC%A0%81-%EA%B3%84%ED%9A%8D%EB%B2%95-DP-Dynamic-programmig-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0-%EC%A0%81%EC%9A%A9%EB%AC%B8%EC%A0%9C</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;1. 동적 계획법이란?&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;동적 계획법(Dynamic programming)은 &lt;span style=&quot;color: #000000;&quot;&gt;중복 계산을 줄이기 위해 작은 문제들을 풀면서 &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;그 결과를 저장해 나아가면서 전체 문제를 해결하는 알고리즘을 말한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;해당 알고리즘의 특징은 &lt;b&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;메모이제이션(Memoization)&lt;/span&gt;&lt;/b&gt; 기법을 사용하여 중복 계산을 피하고,&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;경우의 수가 많은 경우에도 효율적으로 계산할 수 있다. 일반적으로 &lt;b&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;재귀적&lt;/span&gt;&lt;/b&gt;으로 구현된다.&amp;nbsp;&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;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;메모이제이션(Memoization)&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;이란?&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;이전에 계산한 값을 저장하여 다시 계산하지 않도록 하여 속도를 빠르게 하는 방법이다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;577&quot; data-origin-height=&quot;356&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Gog6a/btsGf9pTM5E/n6AiyQ84tXYmH960kBjiT1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Gog6a/btsGf9pTM5E/n6AiyQ84tXYmH960kBjiT1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Gog6a/btsGf9pTM5E/n6AiyQ84tXYmH960kBjiT1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FGog6a%2FbtsGf9pTM5E%2Fn6AiyQ84tXYmH960kBjiT1%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;577&quot; height=&quot;356&quot; data-origin-width=&quot;577&quot; data-origin-height=&quot;356&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;동적 계획법 알고리즘을 구현할때 다음과 같은 단계를 따른다.&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;1. 문제를 하위 문제로 쪼갠다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;2. 하위 문제를 재귀적으로 해결한다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;3. 결과를 저장한다. &lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;(메모이제이션)&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;4. 저장된 결과를 이용하여 큰 문제를 해결한다. (해당 단계를 통해서 중복 계산을 피한다.)&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;2. DP 문제가 성립할 조건&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;최적 부분 구조(Optimal Substructure)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;- 작은 문제의 최적해를 구한 후 그것을 이용하여 큰 문제의 최적해를 구할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;중복 부분 문제(Overlapping Subproblem)&lt;/b&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;3. 동적 계획법의 종류 (탑다운, 바텀업)&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;Top-down&lt;/b&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;문제를 저장해 놓기 위해 메모이제이션(Memoization)이 사용된다. 이는 중복 계산을 방지&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;하고 작은 문제들을 한 번만 푸는 것이 특징이다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;532&quot; data-origin-height=&quot;442&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/NxzVg/btsGidsf25k/WspscFdbhtdK3QkDrOtYv1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/NxzVg/btsGidsf25k/WspscFdbhtdK3QkDrOtYv1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/NxzVg/btsGidsf25k/WspscFdbhtdK3QkDrOtYv1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FNxzVg%2FbtsGidsf25k%2FWspscFdbhtdK3QkDrOtYv1%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;532&quot; height=&quot;442&quot; data-origin-width=&quot;532&quot; data-origin-height=&quot;442&quot;/&gt;&lt;/span&gt;&lt;/figure&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;&lt;b&gt;Bottom-up&lt;/b&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;이 알고리즘의 핵심은 이전에 '계산한 부분 문제'의 결과를 저장해두고 나중에 같은 부분&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;문제가 나타날 때 다시 계산하지 않고 저장된 값을 사용하여 시간을 절약한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;535&quot; data-origin-height=&quot;490&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/MXnCo/btsGiRClv3C/Oy7ObFSQqbSiUvZtYcGYek/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/MXnCo/btsGiRClv3C/Oy7ObFSQqbSiUvZtYcGYek/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/MXnCo/btsGiRClv3C/Oy7ObFSQqbSiUvZtYcGYek/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FMXnCo%2FbtsGiRClv3C%2FOy7ObFSQqbSiUvZtYcGYek%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;535&quot; height=&quot;490&quot; data-origin-width=&quot;535&quot; data-origin-height=&quot;490&quot;/&gt;&lt;/span&gt;&lt;/figure&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;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;탑다운 방식과 바텀업 방식은 동일한게 아닌가?&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;아니다. 둘다 동일한 계획적 탐색의 종류 중에 하나지만 각각 해결방식이 다르다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #8a3db6;&quot;&gt;탑다운 방식&lt;/span&gt;&lt;/b&gt;은 작은 부분 문제를&lt;b&gt;&lt;span style=&quot;color: #8a3db6;&quot;&gt; '재귀적인 호출'&lt;/span&gt;&lt;/b&gt;을 이용하여서 해결하는 방식이고,&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;바텀업 방식&lt;/b&gt;&lt;/span&gt;은 작은 부분 문제부터 시작하여 &lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;'반복문'&lt;/b&gt;&lt;/span&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;&amp;nbsp;&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;&amp;lt;적용문제&amp;gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;Top-down 방식으로 풀면 된다.&lt;/p&gt;
&lt;figure id=&quot;og_1712120653937&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;1003번: 피보나치 함수&quot; data-og-description=&quot;각 테스트 케이스마다 0이 출력되는 횟수와 1이 출력되는 횟수를 공백으로 구분해서 출력한다.&quot; data-og-host=&quot;www.acmicpc.net&quot; data-og-source-url=&quot;https://www.acmicpc.net/problem/1003&quot; data-og-url=&quot;https://www.acmicpc.net/problem/1003&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/b5eitJ/hyVGKHYgyF/I221xXJmz6rVuYD1hUkavK/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/1003&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.acmicpc.net/problem/1003&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/b5eitJ/hyVGKHYgyF/I221xXJmz6rVuYD1hUkavK/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;1003번: 피보나치 함수&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;각 테스트 케이스마다 0이 출력되는 횟수와 1이 출력되는 횟수를 공백으로 구분해서 출력한다.&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;size18&quot;&gt;&amp;nbsp;&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;&amp;lt;참조&amp;gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;a href=&quot;https://adjh54.tistory.com/201#google_vignette&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://adjh54.tistory.com/201#google_vignette&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;a href=&quot;https://loosie.tistory.com/150&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://loosie.tistory.com/150&lt;/a&gt;&lt;/p&gt;</description>
      <category>JAVA</category>
      <category>DP</category>
      <category>Dynamic programmig</category>
      <category>memoization</category>
      <category>동적계획법</category>
      <category>메모이제이션</category>
      <author>Isaac01</author>
      <guid isPermaLink="true">https://opidea.tistory.com/23</guid>
      <comments>https://opidea.tistory.com/entry/Java-%EB%8F%99%EC%A0%81-%EA%B3%84%ED%9A%8D%EB%B2%95-DP-Dynamic-programmig-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0-%EC%A0%81%EC%9A%A9%EB%AC%B8%EC%A0%9C#entry23comment</comments>
      <pubDate>Wed, 3 Apr 2024 14:06:57 +0900</pubDate>
    </item>
    <item>
      <title>[Java] StringBuffer / StringBuilder 주요 메서드</title>
      <link>https://opidea.tistory.com/entry/Java-StringBuffer-StringBuilder-%EC%A3%BC%EC%9A%94-%EB%A9%94%EC%84%9C%EB%93%9C</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;코드로 보는 StringBuffer / StringBuilder 주요 메서드&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;826&quot; data-origin-height=&quot;583&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ljghY/btsF4yCgx2U/MrXnX9QlFME0KkKk7WdLck/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ljghY/btsF4yCgx2U/MrXnX9QlFME0KkKk7WdLck/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ljghY/btsF4yCgx2U/MrXnX9QlFME0KkKk7WdLck/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FljghY%2FbtsF4yCgx2U%2FMrXnX9QlFME0KkKk7WdLck%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;826&quot; height=&quot;583&quot; data-origin-width=&quot;826&quot; data-origin-height=&quot;583&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;825&quot; data-origin-height=&quot;367&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/GT5uD/btsF54UMMEZ/3kTpJNen5KL8jFX5bi2ttk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/GT5uD/btsF54UMMEZ/3kTpJNen5KL8jFX5bi2ttk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/GT5uD/btsF54UMMEZ/3kTpJNen5KL8jFX5bi2ttk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FGT5uD%2FbtsF54UMMEZ%2F3kTpJNen5KL8jFX5bi2ttk%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;825&quot; height=&quot;367&quot; data-origin-width=&quot;825&quot; data-origin-height=&quot;367&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>JAVA</category>
      <author>Isaac01</author>
      <guid isPermaLink="true">https://opidea.tistory.com/21</guid>
      <comments>https://opidea.tistory.com/entry/Java-StringBuffer-StringBuilder-%EC%A3%BC%EC%9A%94-%EB%A9%94%EC%84%9C%EB%93%9C#entry21comment</comments>
      <pubDate>Tue, 26 Mar 2024 09:28:14 +0900</pubDate>
    </item>
    <item>
      <title>[Java] String, StringBuffer, StringBuilder 차이점</title>
      <link>https://opidea.tistory.com/entry/Java-String-StringBuffer-StringBuilder-%EC%B0%A8%EC%9D%B4%EC%A0%90</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;1. String&amp;nbsp;&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;String 객체는 한번 할당된 공간이 변하지 않는다고 해서 &lt;b&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;'&lt;span style=&quot;text-align: start;&quot;&gt;immutable(불변)&lt;/span&gt;'&lt;/span&gt;&lt;/b&gt;자료형 이라고 불린다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;또한 String 객체는 + 연산자 또는 concat 메서드를 통해 기존에 생성된 String 객체에 문자열을 &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;붙이는게 &lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;아니라 &lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;기존 문자열을 삭제한 후 새 String 객체에 연결된 문자열을 저장하고 그 &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;객체를 참조하는 것이다.&lt;/span&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;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;- String 클래스 객체는 Heap 메모리 영역(가비지 컬렉션이 동작하는 영역)에 생성. &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;한번 생성된 객체의 내부 내용을 변화시킬 수 없다. 기존 객체가 제거되면 Java 의 가지비 &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;컬렉션이 회수한다.&amp;nbsp;&lt;/span&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;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;Immutable 한 객체는 간단하게 사용가능하고, 동기화에 대해 신경쓰지 않아도 &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;되기 때문에(Thread - safe),&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;내부 데이터를 자유롭게 공유 가능하지만&lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt; 추가 / 삭제 연산이 &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;많으면 성능이 좋지 않다.&lt;/span&gt;&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;2. StringBuffer / StringBuilder&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;StringBuffer / StringBuilder 는 문자열 연산 등으로 기존 객체의 공간이 부족하게 되는 경우,&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;기존의 버퍼 크기를 늘리며 유연하게 동작&lt;/span&gt;&lt;/b&gt;한다.&amp;nbsp; 또한 StringBuffer / StringBuilder 는 제공하는&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;&lt;b&gt;1) StringBuffer / StringBuilder 차이점&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;둘의 차이점은 딱 한가지로 멀티 쓰레드(Thread)에서 안전(safe)한지 아닌지의 차이 뿐이다.&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;StringBuffer 클래스는 쓰레드에서 &lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;안전하다.&lt;/b&gt;&lt;/span&gt; (thread safe)&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;StringBuilder 클래스는 쓰레드에서 &lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;안전하지 않다.&lt;/b&gt;&lt;/span&gt; (thread unsafe)&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;두 클래스는 문법이나 배열구성도 모두 같지만, 동기화(Synchronization) 에서의 지원 유무가&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;다르다. StringBuilder 는 동기화를 지원하지 않는 반면, StringBuffer 는 동기화를 지원하여&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;멀티 스레드 환경에서도 안전하게 동작할 수 있다.&amp;nbsp; 그 이유는 StringBuffer 는 메서드에서&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;synchronized 키워드를 사용하기 때문이다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;783&quot; data-origin-height=&quot;131&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/yvllw/btsF1TAvIyW/sCdgX3IoC7PqYCZWycD4C0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/yvllw/btsF1TAvIyW/sCdgX3IoC7PqYCZWycD4C0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/yvllw/btsF1TAvIyW/sCdgX3IoC7PqYCZWycD4C0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fyvllw%2FbtsF1TAvIyW%2FsCdgX3IoC7PqYCZWycD4C0%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;783&quot; height=&quot;131&quot; data-origin-width=&quot;783&quot; data-origin-height=&quot;131&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;더 자세한 내용은 &amp;lt;참조&amp;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;&lt;b&gt;&lt;b&gt;2) StringBuffer / StringBuilder&lt;/b&gt; 성능 비교&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;성능은 StringBuilder 클래스가 더 좋다. StringBuffer / StringBuilder 의 차이는 쓰레드 안정성에&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;있다고 했는데 아무래도 쓰레드 안정성을 버린 StringBuilder 가 좀더 떨 따지고 연산 하니 당연히&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;좀 더 빠를 수&amp;nbsp;밖에 없다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;3. 문자열 자료형 정리&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;String 을 사용해야 할 때&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;● String 은 불변성&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;● 문자열 연산이 적고 변하지 않는 문자열을 자주 사용할 경우&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;● 멀티쓰레드 환경일 경우&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;StringBuilder 를 사용해야 할 때&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;● StringBuilder 는 가변성&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;● 문자열의 추가, 수정, 삭제 등이 빈번히 발생하는 경우&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;● 동기화를 지원하지 않아, 단일 쓰레드이거나 동기화를 고려하지 않아도 되는 경우&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;● 속도면에선 StringBuffer 보다 뛰어남&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;StringBuffer 를 사용해야 할 때&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span&gt;● StringBuffer 는 가변성&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span&gt;● 문자열의 추가, 수정, 삭제 등이 빈번히 발행하는 경우&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span&gt;● 동기화를 지원하여, 밀티 스레드 환경에서도 안전하게 동작&lt;/span&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;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;4. 주요 메서드&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;a style=&quot;color: #006dd7;&quot; href=&quot;https://opidea.tistory.com/entry/Java-StringBuffer-StringBuilder-%EC%A3%BC%EC%9A%94-%EB%A9%94%EC%84%9C%EB%93%9C&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://opidea.tistory.com/entry/Java-StringBuffer-StringBuilder-%EC%A3%BC%EC%9A%94-%EB%A9%94%EC%84%9C%EB%93%9C&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1711412961382&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;[Java] StringBuffer / StringBuilder 주요 메서드&quot; data-og-description=&quot;코드로 보는 StringBuffer / StringBuilder 주요 메서드&quot; data-og-host=&quot;opidea.tistory.com&quot; data-og-source-url=&quot;https://opidea.tistory.com/entry/Java-StringBuffer-StringBuilder-%EC%A3%BC%EC%9A%94-%EB%A9%94%EC%84%9C%EB%93%9C&quot; data-og-url=&quot;https://opidea.tistory.com/entry/Java-StringBuffer-StringBuilder-%EC%A3%BC%EC%9A%94-%EB%A9%94%EC%84%9C%EB%93%9C&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/cpynDR/hyVGSYhpkd/1Sv9MzDf4LShgFWV0hfXPK/img.png?width=800&amp;amp;height=564&amp;amp;face=0_0_800_564,https://scrap.kakaocdn.net/dn/kFPKs/hyVGEMuGRr/mnyjDsrJOjZ1Iwq5o9Y3sk/img.png?width=800&amp;amp;height=564&amp;amp;face=0_0_800_564,https://scrap.kakaocdn.net/dn/boquOq/hyVGRE4yOI/1ElQvogXkfZF7mEwfsQEK0/img.png?width=826&amp;amp;height=583&amp;amp;face=0_0_826_583&quot;&gt;&lt;a href=&quot;https://opidea.tistory.com/entry/Java-StringBuffer-StringBuilder-%EC%A3%BC%EC%9A%94-%EB%A9%94%EC%84%9C%EB%93%9C&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://opidea.tistory.com/entry/Java-StringBuffer-StringBuilder-%EC%A3%BC%EC%9A%94-%EB%A9%94%EC%84%9C%EB%93%9C&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/cpynDR/hyVGSYhpkd/1Sv9MzDf4LShgFWV0hfXPK/img.png?width=800&amp;amp;height=564&amp;amp;face=0_0_800_564,https://scrap.kakaocdn.net/dn/kFPKs/hyVGEMuGRr/mnyjDsrJOjZ1Iwq5o9Y3sk/img.png?width=800&amp;amp;height=564&amp;amp;face=0_0_800_564,https://scrap.kakaocdn.net/dn/boquOq/hyVGRE4yOI/1ElQvogXkfZF7mEwfsQEK0/img.png?width=826&amp;amp;height=583&amp;amp;face=0_0_826_583');&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;[Java] StringBuffer / StringBuilder 주요 메서드&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;코드로 보는 StringBuffer / StringBuilder 주요 메서드&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;opidea.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>JAVA</category>
      <category>string</category>
      <category>StringBuffer</category>
      <category>StringBuilder</category>
      <author>Isaac01</author>
      <guid isPermaLink="true">https://opidea.tistory.com/20</guid>
      <comments>https://opidea.tistory.com/entry/Java-String-StringBuffer-StringBuilder-%EC%B0%A8%EC%9D%B4%EC%A0%90#entry20comment</comments>
      <pubDate>Mon, 25 Mar 2024 14:04:45 +0900</pubDate>
    </item>
    <item>
      <title>[Java] nextInt() 사용 후 nextLine() 사용시 문제점 해결</title>
      <link>https://opidea.tistory.com/entry/Java-nextInt-%EC%82%AC%EC%9A%A9-%ED%9B%84-nextLine-%EC%82%AC%EC%9A%A9%EC%8B%9C-%EB%AC%B8%EC%A0%9C%EC%A0%90-%ED%95%B4%EA%B2%B0</link>
      <description>&lt;p data-ke-size=&quot;size18&quot;&gt;Scanner.nextInt() 메서드는 사용자가 입력한 가장 마지막 개행문자(공백) 전까지만 입력받는다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;nextInt() 로 숫자 100를 입력했다고 가정하면&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;입력: 100엔터(&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;공백&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ) 에서 개행전까지만 입력받는 것이다.&amp;nbsp;&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;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;이어서 nextLIne() 메서드를 사용하게 되면 개행문자를 &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;nextLIne() 에서 입력처리로 받기 때문에&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;문제가 발생한다.&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;428&quot; data-origin-height=&quot;217&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/nHDHM/btsFZBMHSHh/MYDd4WWYRXH3tk7Eosxe9k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nHDHM/btsFZBMHSHh/MYDd4WWYRXH3tk7Eosxe9k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nHDHM/btsFZBMHSHh/MYDd4WWYRXH3tk7Eosxe9k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FnHDHM%2FbtsFZBMHSHh%2FMYDd4WWYRXH3tk7Eosxe9k%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;428&quot; height=&quot;217&quot; data-origin-width=&quot;428&quot; data-origin-height=&quot;217&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;해결방법1&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;448&quot; data-origin-height=&quot;262&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/DMjBM/btsF1lQL96g/ZYsxEMMKxi9Vvl4SgskEGk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/DMjBM/btsF1lQL96g/ZYsxEMMKxi9Vvl4SgskEGk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/DMjBM/btsF1lQL96g/ZYsxEMMKxi9Vvl4SgskEGk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FDMjBM%2FbtsF1lQL96g%2FZYsxEMMKxi9Vvl4SgskEGk%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;448&quot; height=&quot;262&quot; data-origin-width=&quot;448&quot; data-origin-height=&quot;262&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;sc.nextLine() 메서드를 사용해 개행문자를 제거해 준다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;해결방법2&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;507&quot; data-origin-height=&quot;241&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bQtygT/btsF1qK7Ajd/jNAoYkKJlD47sBf6kHkZh0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bQtygT/btsF1qK7Ajd/jNAoYkKJlD47sBf6kHkZh0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bQtygT/btsF1qK7Ajd/jNAoYkKJlD47sBf6kHkZh0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbQtygT%2FbtsF1qK7Ajd%2FjNAoYkKJlD47sBf6kHkZh0%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;507&quot; height=&quot;241&quot; data-origin-width=&quot;507&quot; data-origin-height=&quot;241&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;nextLine() 으로 입력받은 후 Integer.parseInt() 로 변화해 준다.&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>JAVA</category>
      <author>Isaac01</author>
      <guid isPermaLink="true">https://opidea.tistory.com/19</guid>
      <comments>https://opidea.tistory.com/entry/Java-nextInt-%EC%82%AC%EC%9A%A9-%ED%9B%84-nextLine-%EC%82%AC%EC%9A%A9%EC%8B%9C-%EB%AC%B8%EC%A0%9C%EC%A0%90-%ED%95%B4%EA%B2%B0#entry19comment</comments>
      <pubDate>Fri, 22 Mar 2024 20:29:08 +0900</pubDate>
    </item>
    <item>
      <title>[Java] 자바 ArrayList 사용 방법 &amp;lt;적용문제&amp;gt;</title>
      <link>https://opidea.tistory.com/entry/Java-%EC%9E%90%EB%B0%94-ArrayList-%EC%82%AC%EC%9A%A9-%EB%B0%A9%EB%B2%95</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;ArrayList란?&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ArrayList는 배열을 기반으로 한 컬렉션의 하나이며, 데이터를 추가 삭제시 내부에서 동적으로 배열의 길이를 조절해 줍니다. ArrayList를 생성하게 되면 내부에서는 데이터를 저장하기 위한 배열(용량)을 저장하기 위한 저장공간이 할당되며, 사용중 데이터의 크기가 이 Capacity의 크기를 넘어서게 되면 저장공간이 새롭게 할당됩니다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;273&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cx57wq/btsFQZsJORh/EuaovyyT1RMsixkCPhOki1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cx57wq/btsFQZsJORh/EuaovyyT1RMsixkCPhOki1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cx57wq/btsFQZsJORh/EuaovyyT1RMsixkCPhOki1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcx57wq%2FbtsFQZsJORh%2FEuaovyyT1RMsixkCPhOki1%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;1280&quot; height=&quot;273&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;273&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;ArrayList vs 배열&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;배열의 길이는 고정된 반면 ArrayList는 배열의 길이를 자동으로 조절해주는 기능을 가지고 있어 가변적입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1. ArrayList생성&amp;nbsp;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자바에서 ArrayList를 사용하려면 아래 구문을 추가해야 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #dddddd;&quot;&gt;import java.util.ArrayList;&lt;/span&gt;&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;ArrayList생성 방법은 다음과 같습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;928&quot; data-origin-height=&quot;140&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bIJRxh/btsFOFCllQP/0EnKIK1DxrvjJdSSN99Ytk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bIJRxh/btsFOFCllQP/0EnKIK1DxrvjJdSSN99Ytk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bIJRxh/btsFOFCllQP/0EnKIK1DxrvjJdSSN99Ytk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbIJRxh%2FbtsFOFCllQP%2F0EnKIK1DxrvjJdSSN99Ytk%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;928&quot; height=&quot;140&quot; data-origin-width=&quot;928&quot; data-origin-height=&quot;140&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&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;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;2. ArrayList 추가 변경&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;add() 메서드로 ArrayList를 추가할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;또한 set() 메서드로 값을 변경하는 것도 가능합니다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;502&quot; data-origin-height=&quot;443&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/vfUTS/btsFRz8cG3Y/AmkIbKACewxCaF5oiSqaiK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/vfUTS/btsFRz8cG3Y/AmkIbKACewxCaF5oiSqaiK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/vfUTS/btsFRz8cG3Y/AmkIbKACewxCaF5oiSqaiK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FvfUTS%2FbtsFRz8cG3Y%2FAmkIbKACewxCaF5oiSqaiK%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;502&quot; height=&quot;443&quot; data-origin-width=&quot;502&quot; data-origin-height=&quot;443&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&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;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;3. ArrayList 삭제&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;삭제할 땐 remove() 메서드를 호출합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;505&quot; data-origin-height=&quot;450&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bzCKCz/btsFOiHouzh/fmfO4lXMyfA9wrU6PLEpd0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bzCKCz/btsFOiHouzh/fmfO4lXMyfA9wrU6PLEpd0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bzCKCz/btsFOiHouzh/fmfO4lXMyfA9wrU6PLEpd0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbzCKCz%2FbtsFOiHouzh%2FfmfO4lXMyfA9wrU6PLEpd0%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;505&quot; height=&quot;450&quot; data-origin-width=&quot;505&quot; data-origin-height=&quot;450&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&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;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;4. 값 존재 유무 확인&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;값이 존재하는지 알고 싶을 경우 contains()를 사용합니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;값의 위치를 알고 싶은 경우 indexOf()를 사용합니다. 만약 값이 존재하지 않을 경우&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 alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;515&quot; data-origin-height=&quot;557&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/d05QIi/btsFQO54PaC/up9jSKjULVojjXrPxoxCc0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/d05QIi/btsFQO54PaC/up9jSKjULVojjXrPxoxCc0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/d05QIi/btsFQO54PaC/up9jSKjULVojjXrPxoxCc0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fd05QIi%2FbtsFQO54PaC%2Fup9jSKjULVojjXrPxoxCc0%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;515&quot; height=&quot;557&quot; data-origin-width=&quot;515&quot; data-origin-height=&quot;557&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;lt;적용문제&amp;gt;&lt;/p&gt;
&lt;figure id=&quot;og_1710588981100&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;2751번: 수 정렬하기 2&quot; data-og-description=&quot;첫째 줄에 수의 개수 N(1 &amp;le; N &amp;le; 1,000,000)이 주어진다. 둘째 줄부터 N개의 줄에는 수가 주어진다. 이 수는 절댓값이 1,000,000보다 작거나 같은 정수이다. 수는 중복되지 않는다.&quot; data-og-host=&quot;www.acmicpc.net&quot; data-og-source-url=&quot;https://www.acmicpc.net/problem/2751&quot; data-og-url=&quot;https://www.acmicpc.net/problem/2751&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bZjTID/hyVyebduhF/PUvVordEwzzced7so72H7k/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/2751&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.acmicpc.net/problem/2751&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bZjTID/hyVyebduhF/PUvVordEwzzced7so72H7k/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;2751번: 수 정렬하기 2&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;첫째 줄에 수의 개수 N(1 &amp;le; N &amp;le; 1,000,000)이 주어진다. 둘째 줄부터 N개의 줄에는 수가 주어진다. 이 수는 절댓값이 1,000,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;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>JAVA</category>
      <category>arrayList</category>
      <category>자바</category>
      <author>Isaac01</author>
      <guid isPermaLink="true">https://opidea.tistory.com/16</guid>
      <comments>https://opidea.tistory.com/entry/Java-%EC%9E%90%EB%B0%94-ArrayList-%EC%82%AC%EC%9A%A9-%EB%B0%A9%EB%B2%95#entry16comment</comments>
      <pubDate>Fri, 15 Mar 2024 21:30:25 +0900</pubDate>
    </item>
    <item>
      <title>백준 2903번: 중앙 이동 알고리즘</title>
      <link>https://opidea.tistory.com/entry/%EB%B0%B1%EC%A4%80-2903%EB%B2%88-%EC%A4%91%EC%95%99-%EC%9D%B4%EB%8F%99-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;2903번-min.png&quot; data-origin-width=&quot;892&quot; data-origin-height=&quot;623&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kBvZk/btsFKMuvHSS/Z2kXNjKlW2PCbBkCLdB6Y1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kBvZk/btsFKMuvHSS/Z2kXNjKlW2PCbBkCLdB6Y1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kBvZk/btsFKMuvHSS/Z2kXNjKlW2PCbBkCLdB6Y1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkBvZk%2FbtsFKMuvHSS%2FZ2kXNjKlW2PCbBkCLdB6Y1%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;892&quot; height=&quot;623&quot; data-filename=&quot;2903번-min.png&quot; data-origin-width=&quot;892&quot; data-origin-height=&quot;623&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;2903번_2-min.png&quot; data-origin-width=&quot;893&quot; data-origin-height=&quot;467&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/btxAAW/btsFNagkf6o/TSAnBhSesODJ7FWg2k1hjK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/btxAAW/btsFNagkf6o/TSAnBhSesODJ7FWg2k1hjK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/btxAAW/btsFNagkf6o/TSAnBhSesODJ7FWg2k1hjK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbtxAAW%2FbtsFNagkf6o%2FTSAnBhSesODJ7FWg2k1hjK%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;893&quot; height=&quot;467&quot; data-filename=&quot;2903번_2-min.png&quot; data-origin-width=&quot;893&quot; data-origin-height=&quot;467&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&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;&amp;nbsp;&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;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;602&quot; data-origin-height=&quot;267&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/eUCcDw/btsGmg1jYcq/Ii703cc3XkhlKiNltzRe71/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/eUCcDw/btsGmg1jYcq/Ii703cc3XkhlKiNltzRe71/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/eUCcDw/btsGmg1jYcq/Ii703cc3XkhlKiNltzRe71/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FeUCcDw%2FbtsGmg1jYcq%2FIi703cc3XkhlKiNltzRe71%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;602&quot; height=&quot;267&quot; data-origin-width=&quot;602&quot; data-origin-height=&quot;267&quot;/&gt;&lt;/span&gt;&lt;/figure&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;0번 정사각형은 점(●)&amp;nbsp; 4개로 2^2을 한 결과,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1번 정사각형은 점(●) 9개로 3^2을 한 결과,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2번 정사각형은 점(●) 25개로 5^2을 한 결과이다.&amp;nbsp;&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서 하나 더 살펴봐야 할 것은 사각형 가로, 세로 &lt;span&gt;&lt;span&gt;●&lt;/span&gt;&lt;/span&gt;&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;점이 2^N+1식 증가( &lt;b&gt;N = 사용자 입력값)&lt;/b&gt;&lt;/b&gt;&lt;/span&gt;하고 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1번 정사각형은 2^1+1 = 3&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;198&quot; data-origin-height=&quot;192&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cc6ThR/btsGkEu9kVv/f74pJhFjWLZUAZJJARTHX0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cc6ThR/btsGkEu9kVv/f74pJhFjWLZUAZJJARTHX0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cc6ThR/btsGkEu9kVv/f74pJhFjWLZUAZJJARTHX0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcc6ThR%2FbtsGkEu9kVv%2Ff74pJhFjWLZUAZJJARTHX0%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;198&quot; height=&quot;192&quot; data-origin-width=&quot;198&quot; data-origin-height=&quot;192&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&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;2번 정사각형은 2^2+1 = 5&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;202&quot; data-origin-height=&quot;191&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lQOsH/btsGiqSGTZH/K2Aii3uatpGwV7FXP4fsWk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lQOsH/btsGiqSGTZH/K2Aii3uatpGwV7FXP4fsWk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lQOsH/btsGiqSGTZH/K2Aii3uatpGwV7FXP4fsWk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlQOsH%2FbtsGiqSGTZH%2FK2Aii3uatpGwV7FXP4fsWk%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;202&quot; height=&quot;191&quot; data-origin-width=&quot;202&quot; data-origin-height=&quot;191&quot;/&gt;&lt;/span&gt;&lt;/figure&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;.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;5번 정사각형은 2^5+1 = 33 으로 입력값 'n'에 따라 2의 지수만 변경된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ex. Math.pow(2, 입력값)&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;정답코드&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;2903번 정답코드-min.png&quot; data-origin-width=&quot;542&quot; data-origin-height=&quot;352&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/O5dcZ/btsFMBlbRHa/JBcWAke7cMdebUbSqbNKa1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/O5dcZ/btsFMBlbRHa/JBcWAke7cMdebUbSqbNKa1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/O5dcZ/btsFMBlbRHa/JBcWAke7cMdebUbSqbNKa1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FO5dcZ%2FbtsFMBlbRHa%2FJBcWAke7cMdebUbSqbNKa1%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;542&quot; height=&quot;352&quot; data-filename=&quot;2903번 정답코드-min.png&quot; data-origin-width=&quot;542&quot; data-origin-height=&quot;352&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;참고&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Math.pow() 메서드는 입력값과 출력값이 모두 double형 이다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Math.pow(숫자, 지수)넣어주면 된다.&lt;/span&gt;&lt;/p&gt;</description>
      <category>Baekjoon</category>
      <category>2903</category>
      <category>Math.pow</category>
      <category>백준2903</category>
      <category>중앙 이동 알고리즘</category>
      <author>Isaac01</author>
      <guid isPermaLink="true">https://opidea.tistory.com/15</guid>
      <comments>https://opidea.tistory.com/entry/%EB%B0%B1%EC%A4%80-2903%EB%B2%88-%EC%A4%91%EC%95%99-%EC%9D%B4%EB%8F%99-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98#entry15comment</comments>
      <pubDate>Wed, 13 Mar 2024 17:34:44 +0900</pubDate>
    </item>
    <item>
      <title>백준 2869번: 달팽이는 올라가고 싶다</title>
      <link>https://opidea.tistory.com/entry/%EB%B0%B1%EC%A4%80-2869%EB%B2%88-%EB%8B%AC%ED%8C%BD%EC%9D%B4%EB%8A%94-%EC%98%AC%EB%9D%BC%EA%B0%80%EA%B3%A0-%EC%8B%B6%EB%8B%A4</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;2869번-min.png&quot; data-origin-width=&quot;897&quot; data-origin-height=&quot;676&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dboBAr/btsFKL9l6qX/7H3gKKijVLUvDaKAtpxjLk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dboBAr/btsFKL9l6qX/7H3gKKijVLUvDaKAtpxjLk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dboBAr/btsFKL9l6qX/7H3gKKijVLUvDaKAtpxjLk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdboBAr%2FbtsFKL9l6qX%2F7H3gKKijVLUvDaKAtpxjLk%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;700&quot; height=&quot;528&quot; data-filename=&quot;2869번-min.png&quot; data-origin-width=&quot;897&quot; data-origin-height=&quot;676&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;다음문제는 시간복잡도 O(1)를 요구하는 문제이다. for문으로 간단하게 풀 수 있는 문제이지만, &lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;시간 초과가 뜰 것이다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;예제 입력: &lt;/b&gt;&amp;nbsp;2 1 5&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;달팽이가 올라가는데&amp;nbsp; 며칠이 걸리는지 그림으로 표현하면 다음과 같다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;edited_2869번 설명1.png&quot; data-origin-width=&quot;1071&quot; data-origin-height=&quot;522&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/R7K0o/btsFKRBQWeM/tcYPrmFFgKA0fEvKkKPhsk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/R7K0o/btsFKRBQWeM/tcYPrmFFgKA0fEvKkKPhsk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/R7K0o/btsFKRBQWeM/tcYPrmFFgKA0fEvKkKPhsk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FR7K0o%2FbtsFKRBQWeM%2FtcYPrmFFgKA0fEvKkKPhsk%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;737&quot; height=&quot;359&quot; data-filename=&quot;edited_2869번 설명1.png&quot; data-origin-width=&quot;1071&quot; data-origin-height=&quot;522&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2칸(1,2번)을 올라갔지만 잠을 자는 밤에 1칸을 내려가서 달팽이가 1에 위치한 것을 확인할 수 있다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;edited_2869번 설명2.png&quot; data-origin-width=&quot;1142&quot; data-origin-height=&quot;552&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dkRA7K/btsFLTeB9FO/K6o6lrmlZXmDYJwPOCfBPk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dkRA7K/btsFLTeB9FO/K6o6lrmlZXmDYJwPOCfBPk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dkRA7K/btsFLTeB9FO/K6o6lrmlZXmDYJwPOCfBPk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdkRA7K%2FbtsFLTeB9FO%2FK6o6lrmlZXmDYJwPOCfBPk%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;730&quot; height=&quot;353&quot; data-filename=&quot;edited_2869번 설명2.png&quot; data-origin-width=&quot;1142&quot; data-origin-height=&quot;552&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2칸 (2, 3번)을 올라갔지만 잠을 자는 밤에 1칸 내려가서&amp;nbsp; 달팽이가 2에 위치한것을 확인할 수 있다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;edited_2869번 설명3.png&quot; data-origin-width=&quot;1143&quot; data-origin-height=&quot;562&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/tf6xY/btsFLVjc0ky/qG5f7XNH3pBIQVfD34I8P0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/tf6xY/btsFLVjc0ky/qG5f7XNH3pBIQVfD34I8P0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/tf6xY/btsFLVjc0ky/qG5f7XNH3pBIQVfD34I8P0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Ftf6xY%2FbtsFLVjc0ky%2FqG5f7XNH3pBIQVfD34I8P0%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;734&quot; height=&quot;361&quot; data-filename=&quot;edited_2869번 설명3.png&quot; data-origin-width=&quot;1143&quot; data-origin-height=&quot;562&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2칸&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;(3, 4번)을 올라갔지만 잠을 자는 밤에 1칸 내려가서&amp;nbsp; 달팽이가 3에 위치한것을 확인할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;edited_2869번 설명4.png&quot; data-origin-width=&quot;1133&quot; data-origin-height=&quot;561&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/csuMPr/btsFK8XCQ8B/Y2eWB3twMBwlvphsoaLS0K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/csuMPr/btsFK8XCQ8B/Y2eWB3twMBwlvphsoaLS0K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/csuMPr/btsFK8XCQ8B/Y2eWB3twMBwlvphsoaLS0K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcsuMPr%2FbtsFK8XCQ8B%2FY2eWB3twMBwlvphsoaLS0K%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;719&quot; height=&quot;356&quot; data-filename=&quot;edited_2869번 설명4.png&quot; data-origin-width=&quot;1133&quot; data-origin-height=&quot;561&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2칸&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;(4, 5번)을 올라갔지만&lt;/span&gt; 정점에 도착하면 미끄러지지 않음으로 나무 막대를 올라가는데 총 4일이 걸렸음을 알 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;즉 마지막으로 나무 막대를 올라가는 날을 제외하곤 하루에 (a-b)만큼 나무 막대를 올라간다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 하루동안 올라가는 거리(a)에서 (b)를 뺏음으로 (v) 전체거리에서도 (b)만큼 뺴줘야 한다.&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;&amp;nbsp;&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;나머지가 있을 경우엔 어떻게 할까?&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;나머지가 있음은 잔여블록이 있다는 말이다. 그렇다면 다시 한번 미끄러진 다음에 올라가야 하므로 나머지가 있을 경우엔&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Day에 +1을 해주면 된다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;576&quot; data-origin-height=&quot;126&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mWKYj/btsFLntzdUD/EPsVJufQBIaCZWFnJllyG0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mWKYj/btsFLntzdUD/EPsVJufQBIaCZWFnJllyG0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mWKYj/btsFLntzdUD/EPsVJufQBIaCZWFnJllyG0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmWKYj%2FbtsFLntzdUD%2FEPsVJufQBIaCZWFnJllyG0%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;576&quot; height=&quot;126&quot; data-origin-width=&quot;576&quot; data-origin-height=&quot;126&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&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;&amp;nbsp;&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;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;정답 코드&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;667&quot; data-origin-height=&quot;466&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cuN2Is/btsFHnowgCW/Xq9hUbftKE8iG5wreAh640/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cuN2Is/btsFHnowgCW/Xq9hUbftKE8iG5wreAh640/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cuN2Is/btsFHnowgCW/Xq9hUbftKE8iG5wreAh640/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcuN2Is%2FbtsFHnowgCW%2FXq9hUbftKE8iG5wreAh640%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;667&quot; height=&quot;466&quot; data-origin-width=&quot;667&quot; data-origin-height=&quot;466&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;이 문제에서 중요한 포인트는 2가지는 달팽이는 잠을 자는 동안 b만큼 미끄러진다는 것과&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;정점에 도착하면 더 이상 미끄러지지 않는다는 것이다.&lt;/p&gt;</description>
      <category>Baekjoon</category>
      <category>2869</category>
      <category>2869백준</category>
      <category>달팽이는 올라가고 싶다</category>
      <author>Isaac01</author>
      <guid isPermaLink="true">https://opidea.tistory.com/14</guid>
      <comments>https://opidea.tistory.com/entry/%EB%B0%B1%EC%A4%80-2869%EB%B2%88-%EB%8B%AC%ED%8C%BD%EC%9D%B4%EB%8A%94-%EC%98%AC%EB%9D%BC%EA%B0%80%EA%B3%A0-%EC%8B%B6%EB%8B%A4#entry14comment</comments>
      <pubDate>Wed, 13 Mar 2024 11:02:25 +0900</pubDate>
    </item>
    <item>
      <title>[Java] 참조 타입과 참조 변수</title>
      <link>https://opidea.tistory.com/entry/%EC%B0%B8%EC%A1%B0-%ED%83%80%EC%9E%85%EA%B3%BC-%EC%B0%B8%EC%A1%B0-%EB%B3%80%EC%88%98</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;자바의 타입은 크게 기본 타입과 참고 타입으로 분류된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기본 타입은 정수 타입(byte, char, short, int, long), 실수 타입(float, double), 논리 타입(boolean)을 말하고&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;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;1-min.png&quot; data-origin-width=&quot;640&quot; data-origin-height=&quot;194&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/blN0Vn/btsKHsiXu0X/dgFOhV2lWIaupiRUk8UrG0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/blN0Vn/btsKHsiXu0X/dgFOhV2lWIaupiRUk8UrG0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/blN0Vn/btsKHsiXu0X/dgFOhV2lWIaupiRUk8UrG0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FblN0Vn%2FbtsKHsiXu0X%2FdgFOhV2lWIaupiRUk8UrG0%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;640&quot; height=&quot;194&quot; data-filename=&quot;1-min.png&quot; data-origin-width=&quot;640&quot; data-origin-height=&quot;194&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;결과: true&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우리가 기본적으로 알고 있는 if문 int num1= 10, int num2 = 10일때 if(num1 == num2)은 변수안에 있는&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;데이터 값을 비교하므로 true를 반환하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;문자열 또한 리터럴(입력 값)이 동일하면 String 객체를 공유하도록 되어 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서 String str1 = &quot;10&quot;, String str2 = &quot;10&quot;이면 &lt;b&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;동일한 객체를 참조하게 되므로 true&lt;/span&gt;&lt;/b&gt;를 반환하게 된다.&amp;nbsp;&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;2-min.png&quot; data-origin-width=&quot;639&quot; data-origin-height=&quot;177&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bMdFme/btsKGT9aSs4/lFiZwlOhIXJ05GyaDb10K0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bMdFme/btsKGT9aSs4/lFiZwlOhIXJ05GyaDb10K0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bMdFme/btsKGT9aSs4/lFiZwlOhIXJ05GyaDb10K0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbMdFme%2FbtsKGT9aSs4%2FlFiZwlOhIXJ05GyaDb10K0%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;639&quot; height=&quot;177&quot; data-filename=&quot;2-min.png&quot; data-origin-width=&quot;639&quot; data-origin-height=&quot;177&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;결과: false&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;하지만&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;&amp;nbsp;new 연산자로 객체를 생성했을 경우, String str1 = new String(&quot;10&quot;), String str2 = new String(&quot;10&quot;)은&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;각 변수에 다른 주소값을 저장하게&lt;/b&gt;&lt;/span&gt;&amp;nbsp;된다. str1/str2는 데이터 값이 들어간게 아닌 데이터를 가르키고 있는&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;주소값을 가지고 있기 때문에 if문으로 비교시 false를 반환하게 되는 것이다.&amp;nbsp;&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;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;3-min.png&quot; data-origin-width=&quot;641&quot; data-origin-height=&quot;177&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/vKxT6/btsKFeUuDic/hpUbYDVkr8YYM2OKYoWgk0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/vKxT6/btsKFeUuDic/hpUbYDVkr8YYM2OKYoWgk0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/vKxT6/btsKFeUuDic/hpUbYDVkr8YYM2OKYoWgk0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FvKxT6%2FbtsKFeUuDic%2FhpUbYDVkr8YYM2OKYoWgk0%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;641&quot; height=&quot;177&quot; data-filename=&quot;3-min.png&quot; data-origin-width=&quot;641&quot; data-origin-height=&quot;177&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;결과: true&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서 &lt;b&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;내부 문자열을 비교할 땐 &lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;/span&gt;String 객체의&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt; equals() 메소드&lt;/span&gt;&lt;/b&gt;를 사용해야 한다. str1.equals(str2) 식으로 사용된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>JAVA</category>
      <author>Isaac01</author>
      <guid isPermaLink="true">https://opidea.tistory.com/13</guid>
      <comments>https://opidea.tistory.com/entry/%EC%B0%B8%EC%A1%B0-%ED%83%80%EC%9E%85%EA%B3%BC-%EC%B0%B8%EC%A1%B0-%EB%B3%80%EC%88%98#entry13comment</comments>
      <pubDate>Thu, 1 Feb 2024 16:53:46 +0900</pubDate>
    </item>
    <item>
      <title>카운팅 정렬(Counting Sort,  계수 정렬)이란?</title>
      <link>https://opidea.tistory.com/entry/%EC%B9%B4%EC%9A%B4%ED%8C%85-%EC%A0%95%EB%A0%ACCounting-Sort-%EA%B3%84%EC%88%98-%EC%A0%95%EB%A0%AC%EC%9D%B4%EB%9E%80</link>
      <description>&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;p data-ke-size=&quot;size16&quot;&gt;방법&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. array를 순회하면서 x(임의의 값)값이 나올 때 마다 counting 배열 index에 값을 1 증가 시킨다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. counting 배열의 각 값을 누적합으로 변환시킨다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. counting 배열의 값을 새로운 인섹스 배열에 위치시킨다.&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;다음 설명을 그림으로 살펴보겠다.&amp;nbsp;&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;방법 1.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;array&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 10%;&quot;&gt;&lt;span style=&quot;background-color: #9b9b9b; color: #ffffff; text-align: start;&quot;&gt;index&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 10%;&quot;&gt;0&lt;/td&gt;
&lt;td style=&quot;width: 10%;&quot;&gt;1&lt;/td&gt;
&lt;td style=&quot;width: 10%;&quot;&gt;2&lt;/td&gt;
&lt;td style=&quot;width: 10%;&quot;&gt;3&lt;/td&gt;
&lt;td style=&quot;width: 10%;&quot;&gt;4&lt;/td&gt;
&lt;td style=&quot;width: 10%;&quot;&gt;5&lt;/td&gt;
&lt;td style=&quot;width: 10%;&quot;&gt;6&lt;/td&gt;
&lt;td style=&quot;width: 10%;&quot;&gt;7&lt;/td&gt;
&lt;td style=&quot;width: 10%;&quot;&gt;8&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 10%;&quot;&gt;&lt;span style=&quot;background-color: #efefef; color: #333333; text-align: start;&quot;&gt;value&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 10%;&quot;&gt;4&lt;/td&gt;
&lt;td style=&quot;width: 10%;&quot;&gt;1&lt;/td&gt;
&lt;td style=&quot;width: 10%;&quot;&gt;6&lt;/td&gt;
&lt;td style=&quot;width: 10%;&quot;&gt;4&lt;/td&gt;
&lt;td style=&quot;width: 10%;&quot;&gt;3&lt;/td&gt;
&lt;td style=&quot;width: 10%;&quot;&gt;4&lt;/td&gt;
&lt;td style=&quot;width: 10%;&quot;&gt;2&lt;/td&gt;
&lt;td style=&quot;width: 10%;&quot;&gt;5&lt;/td&gt;
&lt;td style=&quot;width: 10%;&quot;&gt;6&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;counting&lt;/p&gt;
&lt;table style=&quot;color: #333333; text-align: start; border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-style=&quot;style12&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: ;&quot;&gt;
&lt;td style=&quot;width: 12.5%;height: ;&quot;&gt;&lt;span style=&quot;background-color: #9b9b9b; color: #ffffff; text-align: start;&quot;&gt;index&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 12.5%;height: ;&quot;&gt;0&lt;/td&gt;
&lt;td style=&quot;width: 12.5%;height: ;&quot;&gt;1&lt;/td&gt;
&lt;td style=&quot;width: 12.5%;height: ;&quot;&gt;2&lt;/td&gt;
&lt;td style=&quot;width: 12.5%;height: ;&quot;&gt;3&lt;/td&gt;
&lt;td style=&quot;width: 12.5%;height: ;&quot;&gt;4&lt;/td&gt;
&lt;td style=&quot;width: 12.5%;height: ;&quot;&gt;5&lt;/td&gt;
&lt;td style=&quot;width: 12.5%;height: ;&quot;&gt;6&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: ;&quot;&gt;
&lt;td style=&quot;width: 12.5%;height: ;&quot;&gt;&lt;span style=&quot;background-color: #efefef; color: #333333; text-align: start;&quot;&gt;value&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 12.5%;height: ;&quot;&gt;0&lt;/td&gt;
&lt;td style=&quot;width: 12.5%;height: ;&quot;&gt;1&lt;/td&gt;
&lt;td style=&quot;width: 12.5%;height: ;&quot;&gt;1&lt;/td&gt;
&lt;td style=&quot;width: 12.5%;height: ;&quot;&gt;1&lt;/td&gt;
&lt;td style=&quot;width: 12.5%;height: ;&quot;&gt;3&lt;/td&gt;
&lt;td style=&quot;width: 12.5%;height: ;&quot;&gt;1&lt;/td&gt;
&lt;td style=&quot;width: 12.5%;height: ;&quot;&gt;2&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;각 값이 몇번 나왔는지 확인 할 수 있다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;방법 2.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;array&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-style=&quot;style12&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 10%;&quot;&gt;&lt;span style=&quot;background-color: #9b9b9b; color: #ffffff; text-align: start;&quot;&gt;index&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 10%;&quot;&gt;0&lt;/td&gt;
&lt;td style=&quot;width: 10%;&quot;&gt;1&lt;/td&gt;
&lt;td style=&quot;width: 10%;&quot;&gt;2&lt;/td&gt;
&lt;td style=&quot;width: 10%;&quot;&gt;3&lt;/td&gt;
&lt;td style=&quot;width: 10%;&quot;&gt;4&lt;/td&gt;
&lt;td style=&quot;width: 10%;&quot;&gt;5&lt;/td&gt;
&lt;td style=&quot;width: 10%;&quot;&gt;6&lt;/td&gt;
&lt;td style=&quot;width: 10%;&quot;&gt;7&lt;/td&gt;
&lt;td style=&quot;width: 10%;&quot;&gt;8&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 10%;&quot;&gt;&lt;span style=&quot;background-color: #efefef; color: #333333; text-align: start;&quot;&gt;value&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 10%;&quot;&gt;4&lt;/td&gt;
&lt;td style=&quot;width: 10%;&quot;&gt;1&lt;/td&gt;
&lt;td style=&quot;width: 10%;&quot;&gt;6&lt;/td&gt;
&lt;td style=&quot;width: 10%;&quot;&gt;4&lt;/td&gt;
&lt;td style=&quot;width: 10%;&quot;&gt;3&lt;/td&gt;
&lt;td style=&quot;width: 10%;&quot;&gt;4&lt;/td&gt;
&lt;td style=&quot;width: 10%;&quot;&gt;2&lt;/td&gt;
&lt;td style=&quot;width: 10%;&quot;&gt;5&lt;/td&gt;
&lt;td style=&quot;width: 10%;&quot;&gt;6&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;counting&lt;/p&gt;
&lt;table style=&quot;color: #333333; text-align: start; border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: ;&quot;&gt;
&lt;td style=&quot;width: 12.5%;height: ;&quot;&gt;&lt;span style=&quot;background-color: #9b9b9b; color: #ffffff; text-align: start;&quot;&gt;index&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 12.5%;height: ;&quot;&gt;0&lt;/td&gt;
&lt;td style=&quot;width: 12.5%;height: ;&quot;&gt;1&lt;/td&gt;
&lt;td style=&quot;width: 12.5%;height: ;&quot;&gt;2&lt;/td&gt;
&lt;td style=&quot;width: 12.5%;height: ;&quot;&gt;3&lt;/td&gt;
&lt;td style=&quot;width: 12.5%;height: ;&quot;&gt;4&lt;/td&gt;
&lt;td style=&quot;width: 12.5%;height: ;&quot;&gt;5&lt;/td&gt;
&lt;td style=&quot;width: 12.5%;height: ;&quot;&gt;6&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: ;&quot;&gt;
&lt;td style=&quot;width: 12.5%;height: ;&quot;&gt;&lt;span style=&quot;background-color: #efefef; color: #333333; text-align: start;&quot;&gt;value&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 12.5%;height: ;&quot;&gt;0&lt;/td&gt;
&lt;td style=&quot;width: 12.5%;height: ;&quot;&gt;1&lt;/td&gt;
&lt;td style=&quot;width: 12.5%;height: ;&quot;&gt;1&lt;/td&gt;
&lt;td style=&quot;width: 12.5%;height: ;&quot;&gt;1&lt;/td&gt;
&lt;td style=&quot;width: 12.5%;height: ;&quot;&gt;3&lt;/td&gt;
&lt;td style=&quot;width: 12.5%;height: ;&quot;&gt;1&lt;/td&gt;
&lt;td style=&quot;width: 12.5%;height: ;&quot;&gt;2&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;counting[i - 1] += counting[i] == &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;counting 배열의 각 값을 누적합으로 변환&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;color: #333333; text-align: start; border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: ;&quot;&gt;
&lt;td style=&quot;width: 12.5%;height: ;&quot;&gt;&lt;span style=&quot;background-color: #9b9b9b; color: #ffffff; text-align: start;&quot;&gt;index&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 12.5%;height: ;&quot;&gt;0&lt;/td&gt;
&lt;td style=&quot;width: 12.5%;height: ;&quot;&gt;1&lt;/td&gt;
&lt;td style=&quot;width: 12.5%;height: ;&quot;&gt;2&lt;/td&gt;
&lt;td style=&quot;width: 12.5%;height: ;&quot;&gt;3&lt;/td&gt;
&lt;td style=&quot;width: 12.5%;height: ;&quot;&gt;4&lt;/td&gt;
&lt;td style=&quot;width: 12.5%;height: ;&quot;&gt;5&lt;/td&gt;
&lt;td style=&quot;width: 12.5%;height: ;&quot;&gt;6&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: ;&quot;&gt;
&lt;td style=&quot;width: 12.5%;height: ;&quot;&gt;&lt;span style=&quot;background-color: #efefef; color: #333333; text-align: start;&quot;&gt;value&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 12.5%;height: ;&quot;&gt;0&lt;/td&gt;
&lt;td style=&quot;width: 12.5%;height: ;&quot;&gt;1&lt;/td&gt;
&lt;td style=&quot;width: 12.5%;height: ;&quot;&gt;2&lt;/td&gt;
&lt;td style=&quot;width: 12.5%;height: ;&quot;&gt;3&lt;/td&gt;
&lt;td style=&quot;width: 12.5%;height: ;&quot;&gt;6&lt;/td&gt;
&lt;td style=&quot;width: 12.5%;height: ;&quot;&gt;7&lt;/td&gt;
&lt;td style=&quot;width: 12.5%;height: ;&quot;&gt;9&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;방법 3.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;array&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 10%;&quot;&gt;&lt;span style=&quot;background-color: #9b9b9b; color: #ffffff; text-align: start;&quot;&gt;index&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 10%;&quot;&gt;0&lt;/td&gt;
&lt;td style=&quot;width: 10%;&quot;&gt;1&lt;/td&gt;
&lt;td style=&quot;width: 10%;&quot;&gt;2&lt;/td&gt;
&lt;td style=&quot;width: 10%;&quot;&gt;3&lt;/td&gt;
&lt;td style=&quot;width: 10%;&quot;&gt;4&lt;/td&gt;
&lt;td style=&quot;width: 10%;&quot;&gt;5&lt;/td&gt;
&lt;td style=&quot;width: 10%;&quot;&gt;6&lt;/td&gt;
&lt;td style=&quot;width: 10%;&quot;&gt;7&lt;/td&gt;
&lt;td style=&quot;width: 10%;&quot;&gt;8&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 10%;&quot;&gt;&lt;span style=&quot;background-color: #efefef; color: #333333; text-align: start;&quot;&gt;value&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 10%;&quot;&gt;4&lt;/td&gt;
&lt;td style=&quot;width: 10%;&quot;&gt;1&lt;/td&gt;
&lt;td style=&quot;width: 10%;&quot;&gt;6&lt;/td&gt;
&lt;td style=&quot;width: 10%;&quot;&gt;4&lt;/td&gt;
&lt;td style=&quot;width: 10%;&quot;&gt;3&lt;/td&gt;
&lt;td style=&quot;width: 10%;&quot;&gt;4&lt;/td&gt;
&lt;td style=&quot;width: 10%;&quot;&gt;2&lt;/td&gt;
&lt;td style=&quot;width: 10%;&quot;&gt;5&lt;/td&gt;
&lt;td style=&quot;width: 10%;&quot;&gt;6&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;counting&lt;/p&gt;
&lt;table style=&quot;color: #333333; text-align: start; border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: ;&quot;&gt;
&lt;td style=&quot;width: 12.5%;height: ;&quot;&gt;&lt;span style=&quot;background-color: #9b9b9b; color: #ffffff; text-align: start;&quot;&gt;index&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 12.5%;height: ;&quot;&gt;0&lt;/td&gt;
&lt;td style=&quot;width: 12.5%;height: ;&quot;&gt;1&lt;/td&gt;
&lt;td style=&quot;width: 12.5%;height: ;&quot;&gt;2&lt;/td&gt;
&lt;td style=&quot;width: 12.5%;height: ;&quot;&gt;3&lt;/td&gt;
&lt;td style=&quot;width: 12.5%;height: ;&quot;&gt;4&lt;/td&gt;
&lt;td style=&quot;width: 12.5%;height: ;&quot;&gt;5&lt;/td&gt;
&lt;td style=&quot;width: 12.5%;height: ;&quot;&gt;6&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: ;&quot;&gt;
&lt;td style=&quot;width: 12.5%;height: ;&quot;&gt;&lt;span style=&quot;background-color: #efefef; color: #333333; text-align: start;&quot;&gt;value&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 12.5%;height: ;&quot;&gt;0&lt;/td&gt;
&lt;td style=&quot;width: 12.5%;height: ;&quot;&gt;1&lt;/td&gt;
&lt;td style=&quot;width: 12.5%;height: ;&quot;&gt;2&lt;/td&gt;
&lt;td style=&quot;width: 12.5%;height: ;&quot;&gt;3&lt;/td&gt;
&lt;td style=&quot;width: 12.5%;height: ;&quot;&gt;6&lt;/td&gt;
&lt;td style=&quot;width: 12.5%;height: ;&quot;&gt;7&lt;/td&gt;
&lt;td style=&quot;width: 12.5%;height: ;&quot;&gt;9 - 1&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;result&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 34px;&quot; border=&quot;1&quot; data-ke-style=&quot;style12&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;background-color: #9b9b9b; color: #ffffff;&quot;&gt;&lt;span style=&quot;background-color: #9b9b9b; color: #ffffff; text-align: start;&quot;&gt;index&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #9b9b9b; color: #ffffff;&quot;&gt;0&lt;/td&gt;
&lt;td style=&quot;background-color: #9b9b9b; color: #ffffff;&quot;&gt;1&lt;/td&gt;
&lt;td style=&quot;background-color: #9b9b9b; color: #ffffff;&quot;&gt;2&lt;/td&gt;
&lt;td style=&quot;background-color: #9b9b9b; color: #ffffff;&quot;&gt;3&lt;/td&gt;
&lt;td style=&quot;background-color: #9b9b9b; color: #ffffff;&quot;&gt;4&lt;/td&gt;
&lt;td style=&quot;background-color: #9b9b9b; color: #ffffff;&quot;&gt;5&lt;/td&gt;
&lt;td style=&quot;background-color: #9b9b9b; color: #ffffff;&quot;&gt;6&lt;/td&gt;
&lt;td style=&quot;background-color: #9b9b9b; color: #ffffff;&quot;&gt;7&lt;/td&gt;
&lt;td style=&quot;background-color: #9b9b9b; color: #ffffff;&quot;&gt;8&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;background-color: #efefef;&quot;&gt;&lt;span style=&quot;background-color: #efefef; color: #333333; text-align: start;&quot;&gt;value&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;array[8] = 6&amp;nbsp; &amp;nbsp;,&amp;nbsp; &amp;nbsp;counting[6] = 9 - 1(카운트 한번 마다 -1)&amp;nbsp; &amp;nbsp;,&amp;nbsp; &amp;nbsp;result[8] = array[8] = 6&lt;/p&gt;
&lt;hr data-ke-style=&quot;style5&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;이를 반복하면...&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;array&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 10%;&quot;&gt;&lt;span style=&quot;background-color: #9b9b9b; color: #ffffff; text-align: start;&quot;&gt;index&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 10%;&quot;&gt;0&lt;/td&gt;
&lt;td style=&quot;width: 10%;&quot;&gt;1&lt;/td&gt;
&lt;td style=&quot;width: 10%;&quot;&gt;2&lt;/td&gt;
&lt;td style=&quot;width: 10%;&quot;&gt;3&lt;/td&gt;
&lt;td style=&quot;width: 10%;&quot;&gt;4&lt;/td&gt;
&lt;td style=&quot;width: 10%;&quot;&gt;5&lt;/td&gt;
&lt;td style=&quot;width: 10%;&quot;&gt;6&lt;/td&gt;
&lt;td style=&quot;width: 10%;&quot;&gt;7&lt;/td&gt;
&lt;td style=&quot;width: 10%;&quot;&gt;8&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 10%;&quot;&gt;&lt;span style=&quot;background-color: #efefef; color: #333333; text-align: start;&quot;&gt;value&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 10%;&quot;&gt;4&lt;/td&gt;
&lt;td style=&quot;width: 10%;&quot;&gt;1&lt;/td&gt;
&lt;td style=&quot;width: 10%;&quot;&gt;6&lt;/td&gt;
&lt;td style=&quot;width: 10%;&quot;&gt;4&lt;/td&gt;
&lt;td style=&quot;width: 10%;&quot;&gt;3&lt;/td&gt;
&lt;td style=&quot;width: 10%;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;4&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 10%;&quot;&gt;2&lt;/td&gt;
&lt;td style=&quot;width: 10%;&quot;&gt;5&lt;/td&gt;
&lt;td style=&quot;width: 10%;&quot;&gt;6&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;counting&lt;/p&gt;
&lt;table style=&quot;color: #333333; text-align: start; border-collapse: collapse; width: 100%; height: 34px;&quot; border=&quot;1&quot; data-ke-style=&quot;style12&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 12.5%; height: 17px;&quot;&gt;&lt;span style=&quot;background-color: #9b9b9b; color: #ffffff; text-align: start;&quot;&gt;index&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 12.5%; height: 17px;&quot;&gt;0&lt;/td&gt;
&lt;td style=&quot;width: 12.5%; height: 17px;&quot;&gt;1&lt;/td&gt;
&lt;td style=&quot;width: 12.5%; height: 17px;&quot;&gt;2&lt;/td&gt;
&lt;td style=&quot;width: 12.5%; height: 17px;&quot;&gt;3&lt;/td&gt;
&lt;td style=&quot;width: 12.5%; height: 17px;&quot;&gt;4&lt;/td&gt;
&lt;td style=&quot;width: 12.5%; height: 17px;&quot;&gt;5&lt;/td&gt;
&lt;td style=&quot;width: 12.5%; height: 17px;&quot;&gt;6&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 12.5%; height: 17px;&quot;&gt;&lt;span style=&quot;background-color: #efefef; color: #333333; text-align: start;&quot;&gt;value&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 12.5%; height: 17px;&quot;&gt;0&lt;/td&gt;
&lt;td style=&quot;width: 12.5%; height: 17px;&quot;&gt;0&lt;/td&gt;
&lt;td style=&quot;width: 12.5%; height: 17px;&quot;&gt;1&lt;/td&gt;
&lt;td style=&quot;width: 12.5%; height: 17px;&quot;&gt;2&lt;/td&gt;
&lt;td style=&quot;width: 12.5%; height: 17px;&quot;&gt;4&lt;/td&gt;
&lt;td style=&quot;width: 12.5%; height: 17px;&quot;&gt;6&lt;/td&gt;
&lt;td style=&quot;width: 12.5%; height: 17px;&quot;&gt;7&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;result&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 34px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 10%; height: 17px;&quot;&gt;&lt;span style=&quot;background-color: #9b9b9b; color: #ffffff; text-align: start;&quot;&gt;index&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 10%; height: 17px;&quot;&gt;0&lt;/td&gt;
&lt;td style=&quot;width: 10%; height: 17px;&quot;&gt;1&lt;/td&gt;
&lt;td style=&quot;width: 10%; height: 17px;&quot;&gt;2&lt;/td&gt;
&lt;td style=&quot;width: 10%; height: 17px;&quot;&gt;3&lt;/td&gt;
&lt;td style=&quot;width: 10%; height: 17px;&quot;&gt;4&lt;/td&gt;
&lt;td style=&quot;width: 10%; height: 17px;&quot;&gt;5&lt;/td&gt;
&lt;td style=&quot;width: 10%; height: 17px;&quot;&gt;6&lt;/td&gt;
&lt;td style=&quot;width: 10%; height: 17px;&quot;&gt;7&lt;/td&gt;
&lt;td style=&quot;width: 10%; height: 17px;&quot;&gt;8&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 10%; height: 17px;&quot;&gt;&lt;span style=&quot;background-color: #efefef; color: #333333; text-align: start;&quot;&gt;value&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 10%; height: 17px;&quot;&gt;1&lt;/td&gt;
&lt;td style=&quot;width: 10%; height: 17px;&quot;&gt;2&lt;/td&gt;
&lt;td style=&quot;width: 10%; height: 17px;&quot;&gt;3&lt;/td&gt;
&lt;td style=&quot;width: 10%; height: 17px;&quot;&gt;4&lt;/td&gt;
&lt;td style=&quot;width: 10%; height: 17px;&quot;&gt;4&lt;/td&gt;
&lt;td style=&quot;width: 10%; height: 17px;&quot;&gt;4&lt;/td&gt;
&lt;td style=&quot;width: 10%; height: 17px;&quot;&gt;5&lt;/td&gt;
&lt;td style=&quot;width: 10%; height: 17px;&quot;&gt;6&lt;/td&gt;
&lt;td style=&quot;width: 10%; height: 17px;&quot;&gt;6&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;result가 오름차순으로 정렬되있는 것을 확인 할 수 있다.&amp;nbsp;&lt;/p&gt;</description>
      <author>Isaac01</author>
      <guid isPermaLink="true">https://opidea.tistory.com/11</guid>
      <comments>https://opidea.tistory.com/entry/%EC%B9%B4%EC%9A%B4%ED%8C%85-%EC%A0%95%EB%A0%ACCounting-Sort-%EA%B3%84%EC%88%98-%EC%A0%95%EB%A0%AC%EC%9D%B4%EB%9E%80#entry11comment</comments>
      <pubDate>Wed, 31 Jan 2024 14:18:17 +0900</pubDate>
    </item>
    <item>
      <title>홈페이지로 확인하는 CSS코드</title>
      <link>https://opidea.tistory.com/entry/%ED%99%88%ED%8E%98%EC%9D%B4%EC%A7%80%EB%A1%9C-%ED%99%95%EC%9D%B8%ED%95%98%EB%8A%94-CSS%EC%BD%94%EB%93%9C</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;홈페이지로 확인하는 CSS코드&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1922&quot; data-origin-height=&quot;1030&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bGh56f/btsplO2gWTR/jiWdMQRDVw5HGnnCFwUkuK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bGh56f/btsplO2gWTR/jiWdMQRDVw5HGnnCFwUkuK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bGh56f/btsplO2gWTR/jiWdMQRDVw5HGnnCFwUkuK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbGh56f%2FbtsplO2gWTR%2FjiWdMQRDVw5HGnnCFwUkuK%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;1922&quot; height=&quot;1030&quot; data-origin-width=&quot;1922&quot; data-origin-height=&quot;1030&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;html 코트&lt;/span&gt;&lt;/p&gt;
&lt;div style=&quot;background-color: #282c34; color: #abb2bf;&quot;&gt;
&lt;div&gt;
&lt;div&gt;&lt;span style=&quot;color: #abb2bf;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #e06c75;&quot;&gt;body&lt;/span&gt;&lt;span style=&quot;color: #abb2bf;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #abb2bf;&quot;&gt;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #e06c75;&quot;&gt;div&lt;/span&gt;&lt;span style=&quot;color: #abb2bf;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #d19a66;&quot;&gt;class&lt;/span&gt;&lt;span style=&quot;color: #abb2bf;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #98c379;&quot;&gt;&quot;container&quot;&lt;/span&gt;&lt;span style=&quot;color: #abb2bf;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #abb2bf;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #e06c75;&quot;&gt;div&lt;/span&gt;&lt;span style=&quot;color: #abb2bf;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #d19a66;&quot;&gt;class&lt;/span&gt;&lt;span style=&quot;color: #abb2bf;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #98c379;&quot;&gt;&quot;header&quot;&lt;/span&gt;&lt;span style=&quot;color: #abb2bf;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #abb2bf;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #e06c75;&quot;&gt;h1&lt;/span&gt;&lt;span style=&quot;color: #abb2bf;&quot;&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #e06c75;&quot;&gt;a&lt;/span&gt;&lt;span style=&quot;color: #abb2bf;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #d19a66;&quot;&gt;href&lt;/span&gt;&lt;span style=&quot;color: #abb2bf;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #98c379;&quot;&gt;&quot;#&quot;&lt;/span&gt;&lt;span style=&quot;color: #abb2bf;&quot;&gt;&amp;gt;DESIGN&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color: #e06c75;&quot;&gt;a&lt;/span&gt;&lt;span style=&quot;color: #abb2bf;&quot;&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color: #e06c75;&quot;&gt;h1&lt;/span&gt;&lt;span style=&quot;color: #abb2bf;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #abb2bf;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #e06c75;&quot;&gt;div&lt;/span&gt;&lt;span style=&quot;color: #abb2bf;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #d19a66;&quot;&gt;class&lt;/span&gt;&lt;span style=&quot;color: #abb2bf;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #98c379;&quot;&gt;&quot;nav&quot;&lt;/span&gt;&lt;span style=&quot;color: #abb2bf;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #abb2bf;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #e06c75;&quot;&gt;ul&lt;/span&gt;&lt;span style=&quot;color: #abb2bf;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #abb2bf;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #e06c75;&quot;&gt;li&lt;/span&gt;&lt;span style=&quot;color: #abb2bf;&quot;&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #e06c75;&quot;&gt;a&lt;/span&gt;&lt;span style=&quot;color: #abb2bf;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #d19a66;&quot;&gt;href&lt;/span&gt;&lt;span style=&quot;color: #abb2bf;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #98c379;&quot;&gt;&quot;&quot;&lt;/span&gt;&lt;span style=&quot;color: #abb2bf;&quot;&gt;&amp;gt;HOME&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color: #e06c75;&quot;&gt;a&lt;/span&gt;&lt;span style=&quot;color: #abb2bf;&quot;&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color: #e06c75;&quot;&gt;li&lt;/span&gt;&lt;span style=&quot;color: #abb2bf;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #abb2bf;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #e06c75;&quot;&gt;li&lt;/span&gt;&lt;span style=&quot;color: #abb2bf;&quot;&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #e06c75;&quot;&gt;a&lt;/span&gt;&lt;span style=&quot;color: #abb2bf;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #d19a66;&quot;&gt;href&lt;/span&gt;&lt;span style=&quot;color: #abb2bf;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #98c379;&quot;&gt;&quot;&quot;&lt;/span&gt;&lt;span style=&quot;color: #abb2bf;&quot;&gt;&amp;gt;BEDROOM&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color: #e06c75;&quot;&gt;a&lt;/span&gt;&lt;span style=&quot;color: #abb2bf;&quot;&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color: #e06c75;&quot;&gt;li&lt;/span&gt;&lt;span style=&quot;color: #abb2bf;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #abb2bf;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #e06c75;&quot;&gt;li&lt;/span&gt;&lt;span style=&quot;color: #abb2bf;&quot;&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #e06c75;&quot;&gt;a&lt;/span&gt;&lt;span style=&quot;color: #abb2bf;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #d19a66;&quot;&gt;href&lt;/span&gt;&lt;span style=&quot;color: #abb2bf;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #98c379;&quot;&gt;&quot;&quot;&lt;/span&gt;&lt;span style=&quot;color: #abb2bf;&quot;&gt;&amp;gt;DINING&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color: #e06c75;&quot;&gt;a&lt;/span&gt;&lt;span style=&quot;color: #abb2bf;&quot;&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color: #e06c75;&quot;&gt;li&lt;/span&gt;&lt;span style=&quot;color: #abb2bf;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #abb2bf;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #e06c75;&quot;&gt;li&lt;/span&gt;&lt;span style=&quot;color: #abb2bf;&quot;&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #e06c75;&quot;&gt;a&lt;/span&gt;&lt;span style=&quot;color: #abb2bf;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #d19a66;&quot;&gt;href&lt;/span&gt;&lt;span style=&quot;color: #abb2bf;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #98c379;&quot;&gt;&quot;&quot;&lt;/span&gt;&lt;span style=&quot;color: #abb2bf;&quot;&gt;&amp;gt;KITCHEN&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color: #e06c75;&quot;&gt;a&lt;/span&gt;&lt;span style=&quot;color: #abb2bf;&quot;&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color: #e06c75;&quot;&gt;li&lt;/span&gt;&lt;span style=&quot;color: #abb2bf;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #abb2bf;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #e06c75;&quot;&gt;li&lt;/span&gt;&lt;span style=&quot;color: #abb2bf;&quot;&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #e06c75;&quot;&gt;a&lt;/span&gt;&lt;span style=&quot;color: #abb2bf;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #d19a66;&quot;&gt;href&lt;/span&gt;&lt;span style=&quot;color: #abb2bf;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #98c379;&quot;&gt;&quot;&quot;&lt;/span&gt;&lt;span style=&quot;color: #abb2bf;&quot;&gt;&amp;gt;BACKYARD&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color: #e06c75;&quot;&gt;a&lt;/span&gt;&lt;span style=&quot;color: #abb2bf;&quot;&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color: #e06c75;&quot;&gt;li&lt;/span&gt;&lt;span style=&quot;color: #abb2bf;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #abb2bf;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;/&lt;/span&gt;&lt;span style=&quot;color: #e06c75;&quot;&gt;ul&lt;/span&gt;&lt;span style=&quot;color: #abb2bf;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #abb2bf;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;/&lt;/span&gt;&lt;span style=&quot;color: #e06c75;&quot;&gt;div&lt;/span&gt;&lt;span style=&quot;color: #abb2bf;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #abb2bf;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;lt;/&lt;/span&gt;&lt;span style=&quot;color: #e06c75;&quot;&gt;div&lt;/span&gt;&lt;span style=&quot;color: #abb2bf;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #abb2bf;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #e06c75;&quot;&gt;div&lt;/span&gt;&lt;span style=&quot;color: #abb2bf;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #d19a66;&quot;&gt;class&lt;/span&gt;&lt;span style=&quot;color: #abb2bf;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #98c379;&quot;&gt;&quot;hero&quot;&lt;/span&gt;&lt;span style=&quot;color: #abb2bf;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #abb2bf;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #e06c75;&quot;&gt;h2&lt;/span&gt;&lt;span style=&quot;color: #abb2bf;&quot;&gt;&amp;gt;DECIGN YOUT HOUSE&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color: #e06c75;&quot;&gt;h2&lt;/span&gt;&lt;span style=&quot;color: #abb2bf;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #abb2bf;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #e06c75;&quot;&gt;p&lt;/span&gt;&lt;span style=&quot;color: #abb2bf;&quot;&gt;&amp;gt;Subscribe Easy Youtube Channel watch more videos,&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #e06c75;&quot;&gt;br&lt;/span&gt;&lt;span style=&quot;color: #abb2bf;&quot;&gt;&amp;gt;press t he bell icon t&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color: #e06c75;&quot;&gt;p&lt;/span&gt;&lt;span style=&quot;color: #abb2bf;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #abb2bf;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #e06c75;&quot;&gt;button&lt;/span&gt;&lt;span style=&quot;color: #abb2bf;&quot;&gt;&amp;gt;WATCH VIDEOS&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color: #e06c75;&quot;&gt;button&lt;/span&gt;&lt;span style=&quot;color: #abb2bf;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #abb2bf;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;lt;/&lt;/span&gt;&lt;span style=&quot;color: #e06c75;&quot;&gt;div&lt;/span&gt;&lt;span style=&quot;color: #abb2bf;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #abb2bf;&quot;&gt;&amp;nbsp; &amp;lt;/&lt;/span&gt;&lt;span style=&quot;color: #e06c75;&quot;&gt;div&lt;/span&gt;&lt;span style=&quot;color: #abb2bf;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #abb2bf;&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color: #e06c75;&quot;&gt;body&lt;/span&gt;&lt;span style=&quot;color: #abb2bf;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;css코드&lt;/span&gt;&lt;/p&gt;
&lt;div style=&quot;background-color: #282c34; color: #abb2bf;&quot;&gt;
&lt;div&gt;&lt;span style=&quot;color: #e06c75;&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color: #abb2bf;&quot;&gt; {&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #abb2bf;&quot;&gt;&amp;nbsp; margin:&lt;/span&gt;&lt;span style=&quot;color: #d19a66;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #abb2bf;&quot;&gt;;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #abb2bf;&quot;&gt;&amp;nbsp; padding:&lt;/span&gt;&lt;span style=&quot;color: #d19a66;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #abb2bf;&quot;&gt;;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #abb2bf;&quot;&gt;&amp;nbsp; list-style: &lt;/span&gt;&lt;span style=&quot;color: #d19a66;&quot;&gt;none&lt;/span&gt;&lt;span style=&quot;color: #abb2bf;&quot;&gt;; &amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #7f848e;&quot;&gt;/*list 기본 속석 ● 제거*/&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #abb2bf;&quot;&gt;&amp;nbsp; text-decoration: &lt;/span&gt;&lt;span style=&quot;color: #d19a66;&quot;&gt;none&lt;/span&gt;&lt;span style=&quot;color: #abb2bf;&quot;&gt;;&amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #7f848e;&quot;&gt;/*a태그 밑줄제거*/&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #abb2bf;&quot;&gt;&amp;nbsp; color:&lt;/span&gt;&lt;span style=&quot;color: #d19a66;&quot;&gt;black&lt;/span&gt;&lt;span style=&quot;color: #abb2bf;&quot;&gt;;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #abb2bf;&quot;&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style=&quot;color: #d19a66;&quot;&gt;.cantainer&lt;/span&gt;&lt;span style=&quot;color: #abb2bf;&quot;&gt; { &lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #abb2bf;&quot;&gt;&amp;nbsp; width: &lt;/span&gt;&lt;span style=&quot;color: #d19a66;&quot;&gt;100&lt;/span&gt;&lt;span style=&quot;color: #e06c75;&quot;&gt;%&lt;/span&gt;&lt;span style=&quot;color: #abb2bf;&quot;&gt;;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #abb2bf;&quot;&gt;&amp;nbsp; height: &lt;/span&gt;&lt;span style=&quot;color: #d19a66;&quot;&gt;100&lt;/span&gt;&lt;span style=&quot;color: #e06c75;&quot;&gt;vh&lt;/span&gt;&lt;span style=&quot;color: #abb2bf;&quot;&gt;;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #abb2bf;&quot;&gt;&amp;nbsp; &lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #abb2bf;&quot;&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style=&quot;color: #d19a66;&quot;&gt;.header&lt;/span&gt;&lt;span style=&quot;color: #abb2bf;&quot;&gt; {&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #abb2bf;&quot;&gt;&amp;nbsp; width: &lt;/span&gt;&lt;span style=&quot;color: #d19a66;&quot;&gt;80&lt;/span&gt;&lt;span style=&quot;color: #e06c75;&quot;&gt;%&lt;/span&gt;&lt;span style=&quot;color: #abb2bf;&quot;&gt;;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #abb2bf;&quot;&gt;&amp;nbsp; height: &lt;/span&gt;&lt;span style=&quot;color: #d19a66;&quot;&gt;100&lt;/span&gt;&lt;span style=&quot;color: #e06c75;&quot;&gt;px&lt;/span&gt;&lt;span style=&quot;color: #abb2bf;&quot;&gt;;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #abb2bf;&quot;&gt;&amp;nbsp; display: &lt;/span&gt;&lt;span style=&quot;color: #d19a66;&quot;&gt;flex&lt;/span&gt;&lt;span style=&quot;color: #abb2bf;&quot;&gt;;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #abb2bf;&quot;&gt;&amp;nbsp; margin: &lt;/span&gt;&lt;span style=&quot;color: #d19a66;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #abb2bf;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #d19a66;&quot;&gt;auto&lt;/span&gt;&lt;span style=&quot;color: #abb2bf;&quot;&gt;;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #abb2bf;&quot;&gt;&amp;nbsp; align-items: &lt;/span&gt;&lt;span style=&quot;color: #d19a66;&quot;&gt;center&lt;/span&gt;&lt;span style=&quot;color: #abb2bf;&quot;&gt;; &amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #7f848e;&quot;&gt;/*header안에 있는 텍스트가 header높이 기준으로 정중앙에 온다*/&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #abb2bf;&quot;&gt;&amp;nbsp; justify-content: &lt;/span&gt;&lt;span style=&quot;color: #d19a66;&quot;&gt;space-between&lt;/span&gt;&lt;span style=&quot;color: #abb2bf;&quot;&gt;; &amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #7f848e;&quot;&gt;/*header안에 있는 h1태그, div태그를 왼쪽 오른쪽 끝으로 보냄*/&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #abb2bf;&quot;&gt;&amp;nbsp; border-radius: &lt;/span&gt;&lt;span style=&quot;color: #d19a66;&quot;&gt;20&lt;/span&gt;&lt;span style=&quot;color: #e06c75;&quot;&gt;px&lt;/span&gt;&lt;span style=&quot;color: #abb2bf;&quot;&gt;;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #abb2bf;&quot;&gt;&amp;nbsp; border: &lt;/span&gt;&lt;span style=&quot;color: #d19a66;&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color: #e06c75;&quot;&gt;px&lt;/span&gt;&lt;span style=&quot;color: #abb2bf;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #d19a66;&quot;&gt;solid&lt;/span&gt;&lt;span style=&quot;color: #abb2bf;&quot;&gt; skyblue;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #abb2bf;&quot;&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style=&quot;color: #d19a66;&quot;&gt;.nav&lt;/span&gt;&lt;span style=&quot;color: #c678dd;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #e06c75;&quot;&gt;ul&lt;/span&gt;&lt;span style=&quot;color: #c678dd;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #e06c75;&quot;&gt;li&lt;/span&gt;&lt;span style=&quot;color: #abb2bf;&quot;&gt; {&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #abb2bf;&quot;&gt;&amp;nbsp; display: &lt;/span&gt;&lt;span style=&quot;color: #d19a66;&quot;&gt;inline&lt;/span&gt;&lt;span style=&quot;color: #abb2bf;&quot;&gt;;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #abb2bf;&quot;&gt;&amp;nbsp; margin: &lt;/span&gt;&lt;span style=&quot;color: #d19a66;&quot;&gt;10&lt;/span&gt;&lt;span style=&quot;color: #e06c75;&quot;&gt;px&lt;/span&gt;&lt;span style=&quot;color: #abb2bf;&quot;&gt;;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #abb2bf;&quot;&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style=&quot;color: #d19a66;&quot;&gt;.nav&lt;/span&gt;&lt;span style=&quot;color: #c678dd;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #e06c75;&quot;&gt;ul&lt;/span&gt;&lt;span style=&quot;color: #c678dd;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #e06c75;&quot;&gt;li&lt;/span&gt;&lt;span style=&quot;color: #c678dd;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #e06c75;&quot;&gt;a&lt;/span&gt;&lt;span style=&quot;color: #56b6c2;&quot;&gt;:hover&lt;/span&gt;&lt;span style=&quot;color: #abb2bf;&quot;&gt; {&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #abb2bf;&quot;&gt;&amp;nbsp; color:aquamarine;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #abb2bf;&quot;&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style=&quot;color: #d19a66;&quot;&gt;.hero&lt;/span&gt;&lt;span style=&quot;color: #abb2bf;&quot;&gt; {&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #abb2bf;&quot;&gt;&amp;nbsp; position: &lt;/span&gt;&lt;span style=&quot;color: #d19a66;&quot;&gt;absolute&lt;/span&gt;&lt;span style=&quot;color: #abb2bf;&quot;&gt;; &amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #7f848e;&quot;&gt;/*다음가 같이 설정하면 .hero안에 있는 텍스트는 정중앙으로 온다*/&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #abb2bf;&quot;&gt;&amp;nbsp; left: &lt;/span&gt;&lt;span style=&quot;color: #d19a66;&quot;&gt;50&lt;/span&gt;&lt;span style=&quot;color: #e06c75;&quot;&gt;%&lt;/span&gt;&lt;span style=&quot;color: #abb2bf;&quot;&gt;;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #abb2bf;&quot;&gt;&amp;nbsp; top: &lt;/span&gt;&lt;span style=&quot;color: #d19a66;&quot;&gt;50&lt;/span&gt;&lt;span style=&quot;color: #e06c75;&quot;&gt;%&lt;/span&gt;&lt;span style=&quot;color: #abb2bf;&quot;&gt;;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #abb2bf;&quot;&gt;&amp;nbsp; transform:&lt;/span&gt;&lt;span style=&quot;color: #56b6c2;&quot;&gt;translate&lt;/span&gt;&lt;span style=&quot;color: #abb2bf;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #d19a66;&quot;&gt;-50&lt;/span&gt;&lt;span style=&quot;color: #e06c75;&quot;&gt;%&lt;/span&gt;&lt;span style=&quot;color: #abb2bf;&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color: #d19a66;&quot;&gt;-50&lt;/span&gt;&lt;span style=&quot;color: #e06c75;&quot;&gt;%&lt;/span&gt;&lt;span style=&quot;color: #abb2bf;&quot;&gt;);&lt;/span&gt;&lt;span style=&quot;color: #abb2bf;&quot;&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #abb2bf;&quot;&gt;&amp;nbsp; text-align: &lt;/span&gt;&lt;span style=&quot;color: #d19a66;&quot;&gt;center&lt;/span&gt;&lt;span style=&quot;color: #abb2bf;&quot;&gt;;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #abb2bf;&quot;&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style=&quot;color: #d19a66;&quot;&gt;.hero&lt;/span&gt;&lt;span style=&quot;color: #c678dd;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #e06c75;&quot;&gt;h2&lt;/span&gt;&lt;span style=&quot;color: #abb2bf;&quot;&gt; {&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #abb2bf;&quot;&gt;&amp;nbsp; font-size: &lt;/span&gt;&lt;span style=&quot;color: #d19a66;&quot;&gt;60&lt;/span&gt;&lt;span style=&quot;color: #e06c75;&quot;&gt;px&lt;/span&gt;&lt;span style=&quot;color: #abb2bf;&quot;&gt;;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #abb2bf;&quot;&gt;&amp;nbsp; margin-bottom: &lt;/span&gt;&lt;span style=&quot;color: #d19a66;&quot;&gt;10&lt;/span&gt;&lt;span style=&quot;color: #e06c75;&quot;&gt;px&lt;/span&gt;&lt;span style=&quot;color: #abb2bf;&quot;&gt;;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #abb2bf;&quot;&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style=&quot;color: #d19a66;&quot;&gt;.hero&lt;/span&gt;&lt;span style=&quot;color: #c678dd;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #e06c75;&quot;&gt;p&lt;/span&gt;&lt;span style=&quot;color: #abb2bf;&quot;&gt; {&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #abb2bf;&quot;&gt;&amp;nbsp; font-size: &lt;/span&gt;&lt;span style=&quot;color: #d19a66;&quot;&gt;22&lt;/span&gt;&lt;span style=&quot;color: #e06c75;&quot;&gt;px&lt;/span&gt;&lt;span style=&quot;color: #abb2bf;&quot;&gt;;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #abb2bf;&quot;&gt;&amp;nbsp; margin-bottom: &lt;/span&gt;&lt;span style=&quot;color: #d19a66;&quot;&gt;20&lt;/span&gt;&lt;span style=&quot;color: #e06c75;&quot;&gt;px&lt;/span&gt;&lt;span style=&quot;color: #abb2bf;&quot;&gt;;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #abb2bf;&quot;&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style=&quot;color: #d19a66;&quot;&gt;.hero&lt;/span&gt;&lt;span style=&quot;color: #c678dd;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #e06c75;&quot;&gt;button&lt;/span&gt;&lt;span style=&quot;color: #abb2bf;&quot;&gt; {&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #abb2bf;&quot;&gt;&amp;nbsp; border: &lt;/span&gt;&lt;span style=&quot;color: #d19a66;&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color: #e06c75;&quot;&gt;px&lt;/span&gt;&lt;span style=&quot;color: #abb2bf;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #d19a66;&quot;&gt;solid&lt;/span&gt;&lt;span style=&quot;color: #abb2bf;&quot;&gt; skyblue;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #abb2bf;&quot;&gt;&amp;nbsp; border-radius: &lt;/span&gt;&lt;span style=&quot;color: #d19a66;&quot;&gt;22&lt;/span&gt;&lt;span style=&quot;color: #e06c75;&quot;&gt;px&lt;/span&gt;&lt;span style=&quot;color: #abb2bf;&quot;&gt;;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #abb2bf;&quot;&gt;&amp;nbsp; background: &lt;/span&gt;&lt;span style=&quot;color: #d19a66;&quot;&gt;none&lt;/span&gt;&lt;span style=&quot;color: #abb2bf;&quot;&gt;;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #abb2bf;&quot;&gt;&amp;nbsp; padding: &lt;/span&gt;&lt;span style=&quot;color: #d19a66;&quot;&gt;20&lt;/span&gt;&lt;span style=&quot;color: #e06c75;&quot;&gt;px&lt;/span&gt;&lt;span style=&quot;color: #abb2bf;&quot;&gt;;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #abb2bf;&quot;&gt;&amp;nbsp; cursor: &lt;/span&gt;&lt;span style=&quot;color: #d19a66;&quot;&gt;pointer&lt;/span&gt;&lt;span style=&quot;color: #abb2bf;&quot;&gt;;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #abb2bf;&quot;&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style=&quot;color: #d19a66;&quot;&gt;.hero&lt;/span&gt;&lt;span style=&quot;color: #c678dd;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #e06c75;&quot;&gt;button&lt;/span&gt;&lt;span style=&quot;color: #56b6c2;&quot;&gt;:hover&lt;/span&gt;&lt;span style=&quot;color: #abb2bf;&quot;&gt; { &amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #7f848e;&quot;&gt;/*hover속성 마우스 이동시 나타나는 효과*/&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #abb2bf;&quot;&gt;&amp;nbsp; background-color: aquamarine;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #abb2bf;&quot;&gt;&amp;nbsp; transition: &lt;/span&gt;&lt;span style=&quot;color: #d19a66;&quot;&gt;all&lt;/span&gt;&lt;span style=&quot;color: #abb2bf;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #d19a66;&quot;&gt;.4&lt;/span&gt;&lt;span style=&quot;color: #e06c75;&quot;&gt;s&lt;/span&gt;&lt;span style=&quot;color: #abb2bf;&quot;&gt;;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #abb2bf;&quot;&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;// left, top의 기준으로만 움직인다. &lt;span style=&quot;text-align: start;&quot;&gt;transform: translate(-50%, -50%)를 사용하면 페이지 정중앙에 텍스트가 온다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;position: absolute;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; left: 50%;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; top: 50%;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; transform: translate(-50%, -50%);&lt;/span&gt;&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;span style=&quot;color: #000000;&quot;&gt;//&amp;nbsp; &lt;span style=&quot;background-color: #dddddd;&quot;&gt;&amp;nbsp;justify-content&amp;nbsp;&lt;/span&gt; 속성은 브라우저가 콘텐츠 항목 사이와 주변 공간을 어떻게 정렬할 것인지를 정의한다.&lt;/span&gt;&lt;/p&gt;
&lt;div id=&quot;hwpEditorBoardContent&quot; data-hjsonver=&quot;1.0&quot; data-jsonlen=&quot;6963&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <author>Isaac01</author>
      <guid isPermaLink="true">https://opidea.tistory.com/8</guid>
      <comments>https://opidea.tistory.com/entry/%ED%99%88%ED%8E%98%EC%9D%B4%EC%A7%80%EB%A1%9C-%ED%99%95%EC%9D%B8%ED%95%98%EB%8A%94-CSS%EC%BD%94%EB%93%9C#entry8comment</comments>
      <pubDate>Sat, 29 Jul 2023 18:08:41 +0900</pubDate>
    </item>
    <item>
      <title>컴퓨터에 깃허브 토큰저장</title>
      <link>https://opidea.tistory.com/entry/%EC%BB%B4%ED%93%A8%ED%84%B0%EC%97%90-%EA%B9%83%ED%97%88%EB%B8%8C-%ED%86%A0%ED%81%B0%EC%A0%80%EC%9E%A5</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;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;800&quot; data-origin-height=&quot;798&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dr93J2/btsoo72sO7M/xjsSRusriKZJQlv3rX1MDK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dr93J2/btsoo72sO7M/xjsSRusriKZJQlv3rX1MDK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dr93J2/btsoo72sO7M/xjsSRusriKZJQlv3rX1MDK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdr93J2%2Fbtsoo72sO7M%2FxjsSRusriKZJQlv3rX1MDK%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;800&quot; height=&quot;798&quot; data-origin-width=&quot;800&quot; data-origin-height=&quot;798&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&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;&amp;nbsp;&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;Windows 자격 증명에 들어가서 github홈페이지를 주소를 클릭해 줍니다.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;만약 주소가 보이지 않는다면 [일반 자격 증명 추가]에 들어가서 인터넷 또는 네트워크 주소를 입력하시면 됩니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;811&quot; data-origin-height=&quot;749&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bjXLWH/btson7os7jF/WTDlTMVGzPD43KthTsHis0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bjXLWH/btson7os7jF/WTDlTMVGzPD43KthTsHis0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bjXLWH/btson7os7jF/WTDlTMVGzPD43KthTsHis0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbjXLWH%2Fbtson7os7jF%2FWTDlTMVGzPD43KthTsHis0%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;800&quot; height=&quot;739&quot; data-origin-width=&quot;811&quot; data-origin-height=&quot;749&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;편집을 클릭해 줍니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;811&quot; data-origin-height=&quot;749&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Kgqik/btsopWM1NQa/IkWviI7R17LBkytyIYi91K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Kgqik/btsopWM1NQa/IkWviI7R17LBkytyIYi91K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Kgqik/btsopWM1NQa/IkWviI7R17LBkytyIYi91K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FKgqik%2FbtsopWM1NQa%2FIkWviI7R17LBkytyIYi91K%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;800&quot; height=&quot;739&quot; data-origin-width=&quot;811&quot; data-origin-height=&quot;749&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&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;&amp;nbsp;&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;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;sinisack&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #333333; text-align: left;&quot;&gt;'과&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;복사한 토큰&lt;/span&gt;&lt;/b&gt;을 암호란에 입력한 후 저장을 눌러주시면 됩니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;920&quot; data-origin-height=&quot;404&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/NbiJy/btsoo6vICcc/ZfKiTLXKAtzjja4IAlpisk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/NbiJy/btsoo6vICcc/ZfKiTLXKAtzjja4IAlpisk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/NbiJy/btsoo6vICcc/ZfKiTLXKAtzjja4IAlpisk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FNbiJy%2Fbtsoo6vICcc%2FZfKiTLXKAtzjja4IAlpisk%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;800&quot; height=&quot;351&quot; data-origin-width=&quot;920&quot; data-origin-height=&quot;404&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;644&quot; data-origin-height=&quot;293&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cqX72u/btsooGYlj3C/mHjelbj9nINcQUkD4aTFp0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cqX72u/btsooGYlj3C/mHjelbj9nINcQUkD4aTFp0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cqX72u/btsooGYlj3C/mHjelbj9nINcQUkD4aTFp0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcqX72u%2FbtsooGYlj3C%2FmHjelbj9nINcQUkD4aTFp0%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;800&quot; height=&quot;859&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;644&quot; data-origin-height=&quot;293&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;811&quot; data-origin-height=&quot;749&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b5V5et/btsonbE9znf/yubWvi7nJGsz1DIkwbkTGK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b5V5et/btsonbE9znf/yubWvi7nJGsz1DIkwbkTGK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b5V5et/btsonbE9znf/yubWvi7nJGsz1DIkwbkTGK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb5V5et%2FbtsonbE9znf%2FyubWvi7nJGsz1DIkwbkTGK%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;800&quot; height=&quot;739&quot; data-origin-width=&quot;811&quot; data-origin-height=&quot;749&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;*이제 컴퓨터 내장에 토큰이 저장되어 깃에 프로젝트를 올릴 때마다 토큰을 입력하지 않아도 됨*&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Git &amp;amp; GitHub</category>
      <author>Isaac01</author>
      <guid isPermaLink="true">https://opidea.tistory.com/7</guid>
      <comments>https://opidea.tistory.com/entry/%EC%BB%B4%ED%93%A8%ED%84%B0%EC%97%90-%EA%B9%83%ED%97%88%EB%B8%8C-%ED%86%A0%ED%81%B0%EC%A0%80%EC%9E%A5#entry7comment</comments>
      <pubDate>Thu, 20 Jul 2023 22:09:38 +0900</pubDate>
    </item>
    <item>
      <title>숨김파일 보기</title>
      <link>https://opidea.tistory.com/entry/%EC%88%A8%EA%B9%80%ED%8C%8C%EC%9D%BC-%EB%B3%B4%EA%B8%B0</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1.&lt;span style=&quot;color: #ee2323;&quot;&gt;빨간 박스를&lt;/span&gt; 클릭해 주세요!&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;788&quot; data-origin-height=&quot;630&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/IFgZV/btsogdH5Ien/sJOj9LOh4HLXblYRPxUYRK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/IFgZV/btsogdH5Ien/sJOj9LOh4HLXblYRPxUYRK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/IFgZV/btsogdH5Ien/sJOj9LOh4HLXblYRPxUYRK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FIFgZV%2FbtsogdH5Ien%2FsJOj9LOh4HLXblYRPxUYRK%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;788&quot; height=&quot;630&quot; data-origin-width=&quot;788&quot; data-origin-height=&quot;630&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&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;&amp;nbsp;&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;b&gt;2. 옵션을 클릭해 주세요.&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;789&quot; data-origin-height=&quot;633&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cWTd2v/btsoeJH1XiP/u5dhkjZjg7XzqJpNTFktg1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cWTd2v/btsoeJH1XiP/u5dhkjZjg7XzqJpNTFktg1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cWTd2v/btsoeJH1XiP/u5dhkjZjg7XzqJpNTFktg1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcWTd2v%2FbtsoeJH1XiP%2Fu5dhkjZjg7XzqJpNTFktg1%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;789&quot; height=&quot;633&quot; data-origin-width=&quot;789&quot; data-origin-height=&quot;633&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&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;&amp;nbsp;&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;b&gt;3. 보기 &lt;span style=&quot;background-color: #fafafa; color: #24292e; text-align: left;&quot;&gt;▶&lt;/span&gt;&amp;nbsp;숨김&lt;span style=&quot;background-color: #fafafa; color: #24292e; text-align: left;&quot;&gt;&amp;nbsp;&lt;/span&gt;파일 및 폴더 목록 &lt;span style=&quot;background-color: #fafafa; color: #24292e; text-align: left;&quot;&gt;▶ 숨김 파일, 폴더 및 드라이브 표시 &lt;span style=&quot;color: #006dd7;&quot;&gt;[클릭] &lt;span style=&quot;background-color: #fafafa; color: #24292e; text-align: left;&quot;&gt;▶ 확인&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;442&quot; data-origin-height=&quot;537&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b0ydpE/btsn9aNeFaa/2iVQdrREfKgvTRmHBLyKS1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b0ydpE/btsn9aNeFaa/2iVQdrREfKgvTRmHBLyKS1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b0ydpE/btsn9aNeFaa/2iVQdrREfKgvTRmHBLyKS1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb0ydpE%2Fbtsn9aNeFaa%2F2iVQdrREfKgvTRmHBLyKS1%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;442&quot; height=&quot;537&quot; data-origin-width=&quot;442&quot; data-origin-height=&quot;537&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&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;&amp;nbsp;&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;b&gt;4. 숨김 파일 표시 확인&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;789&quot; data-origin-height=&quot;630&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/msirU/btsofrz8AD2/KTfhjxy06MHnRrpmqpZKT0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/msirU/btsofrz8AD2/KTfhjxy06MHnRrpmqpZKT0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/msirU/btsofrz8AD2/KTfhjxy06MHnRrpmqpZKT0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmsirU%2Fbtsofrz8AD2%2FKTfhjxy06MHnRrpmqpZKT0%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;789&quot; height=&quot;630&quot; data-origin-width=&quot;789&quot; data-origin-height=&quot;630&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>숨김파일</category>
      <category>숨김파일 보기</category>
      <author>Isaac01</author>
      <guid isPermaLink="true">https://opidea.tistory.com/6</guid>
      <comments>https://opidea.tistory.com/entry/%EC%88%A8%EA%B9%80%ED%8C%8C%EC%9D%BC-%EB%B3%B4%EA%B8%B0#entry6comment</comments>
      <pubDate>Wed, 19 Jul 2023 16:35:05 +0900</pubDate>
    </item>
    <item>
      <title>[GitHub]깃허브에 파일 올리기</title>
      <link>https://opidea.tistory.com/entry/Git-GitHub-%ED%8C%8C%EC%9D%BC-%EC%98%AC%EB%A6%AC%EB%8A%94-%EB%B0%A9%EB%B2%95</link>
      <description>&lt;h2 style=&quot;text-align: left;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;1. Git Bath, visualstudio 초기 설정&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;1-1. Git Bath 초기설정&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;윈도우 검색창에 Git Bash 검색.&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;338&quot; data-origin-height=&quot;73&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/4qqEX/btsn138GEIB/KuWfzZ33i6sbbC2fmrUi61/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/4qqEX/btsn138GEIB/KuWfzZ33i6sbbC2fmrUi61/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/4qqEX/btsn138GEIB/KuWfzZ33i6sbbC2fmrUi61/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F4qqEX%2Fbtsn138GEIB%2FKuWfzZ33i6sbbC2fmrUi61%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;338&quot; height=&quot;73&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;338&quot; data-origin-height=&quot;73&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;lt;입력&amp;gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #dddddd;&quot;&gt;git config --global user.name &quot;(본인 이름)&quot;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #dddddd;&quot;&gt;git config --global user.email &quot;(본인 이메일)&quot;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;581&quot; data-origin-height=&quot;370&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/0BIsE/btsn7PhbBpS/KlQXw5Jg42OEXXymzhbFkK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/0BIsE/btsn7PhbBpS/KlQXw5Jg42OEXXymzhbFkK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/0BIsE/btsn7PhbBpS/KlQXw5Jg42OEXXymzhbFkK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F0BIsE%2Fbtsn7PhbBpS%2FKlQXw5Jg42OEXXymzhbFkK%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;581&quot; height=&quot;370&quot; data-origin-width=&quot;581&quot; data-origin-height=&quot;370&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;다음과 같이 입력해 본인의 이름과 이메일이 잘 입력되었는지 확인합니다.&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #dddddd;&quot;&gt;git config --global user.name&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #dddddd;&quot;&gt;git config --global user.email&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;581&quot; data-origin-height=&quot;370&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bBatn0/btsoa9Z3jZq/VMVE8Nz7I6I8nJEeDdxfM1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bBatn0/btsoa9Z3jZq/VMVE8Nz7I6I8nJEeDdxfM1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bBatn0/btsoa9Z3jZq/VMVE8Nz7I6I8nJEeDdxfM1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbBatn0%2Fbtsoa9Z3jZq%2FVMVE8Nz7I6I8nJEeDdxfM1%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;581&quot; height=&quot;370&quot; data-origin-width=&quot;581&quot; data-origin-height=&quot;370&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #dddddd;&quot;&gt;git config --global init.defaultBranch main&lt;/span&gt;입력해 브랜치 명을 변경해 줍니다.&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;581&quot; data-origin-height=&quot;370&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/2ok3b/btsn7q242rR/PwR3UkJkkYYRbKkGcwjbAK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/2ok3b/btsn7q242rR/PwR3UkJkkYYRbKkGcwjbAK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/2ok3b/btsn7q242rR/PwR3UkJkkYYRbKkGcwjbAK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F2ok3b%2Fbtsn7q242rR%2FPwR3UkJkkYYRbKkGcwjbAK%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;581&quot; height=&quot;370&quot; data-origin-width=&quot;581&quot; data-origin-height=&quot;370&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;1-2. Visualstudio 초기설정&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;visualstudio를 열어&lt;span style=&quot;color: #ee2323;&quot;&gt; Ctrl&lt;span style=&quot;background-color: #fafafa; text-align: left;&quot;&gt;&amp;nbsp;+&amp;nbsp;&lt;/span&gt;Shift&lt;span style=&quot;background-color: #fafafa; text-align: left;&quot;&gt;&amp;nbsp;+&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;`&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: #fafafa; color: #24292e; text-align: left;&quot;&gt;로 터미널 열어보기&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1022&quot; data-origin-height=&quot;768&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dNWWJ0/btsn7Kz95wY/KIzQKDK0m5iA7VkOlyhwkk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dNWWJ0/btsn7Kz95wY/KIzQKDK0m5iA7VkOlyhwkk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dNWWJ0/btsn7Kz95wY/KIzQKDK0m5iA7VkOlyhwkk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdNWWJ0%2Fbtsn7Kz95wY%2FKIzQKDK0m5iA7VkOlyhwkk%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;800&quot; height=&quot;601&quot; data-origin-width=&quot;1022&quot; data-origin-height=&quot;768&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #fafafa; color: #24292e; text-align: left;&quot;&gt;&lt;span style=&quot;background-color: #fafafa; color: #24292e; text-align: left;&quot;&gt;powershell로 되어있으면 &lt;span style=&quot;color: #ee2323;&quot;&gt;Ctrl&lt;span style=&quot;background-color: #fafafa; text-align: left;&quot;&gt;&amp;nbsp;+&amp;nbsp;&lt;/span&gt;Shift&lt;/span&gt;&lt;span style=&quot;background-color: #fafafa; color: #24292e; text-align: left;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&amp;nbsp;+&lt;/span&gt;&lt;span&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;p&lt;/span&gt;를 눌러서&lt;span style=&quot;background-color: #fafafa; color: #24292e; text-align: left;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #fafafa; color: #24292e; text-align: left;&quot;&gt;&lt;span style=&quot;background-color: #fafafa; color: #24292e; text-align: left;&quot;&gt;&lt;span style=&quot;background-color: #dddddd;&quot;&gt;select default profile&lt;/span&gt;&lt;span style=&quot;background-color: #fafafa; color: #24292e; text-align: left;&quot;&gt;입력&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;background-color: #fafafa; color: #24292e; text-align: left;&quot;&gt;▶ &lt;/span&gt;엔터 &lt;span&gt; &lt;span style=&quot;background-color: #fafafa; color: #24292e; text-align: left;&quot;&gt;▶ &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #fafafa; color: #24292e; text-align: left;&quot;&gt;Git Bath선택&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;769&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dWMJtY/btsn9L6dZgA/9FIKk85rsP3Qnv6zSy0pL1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dWMJtY/btsn9L6dZgA/9FIKk85rsP3Qnv6zSy0pL1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dWMJtY/btsn9L6dZgA/9FIKk85rsP3Qnv6zSy0pL1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdWMJtY%2Fbtsn9L6dZgA%2F9FIKk85rsP3Qnv6zSy0pL1%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;800&quot; height=&quot;601&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;769&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;그리고 다시 &lt;span style=&quot;color: #ee2323;&quot;&gt;Ctrl&lt;span style=&quot;background-color: #fafafa; text-align: left;&quot;&gt;&amp;nbsp;+&amp;nbsp;&lt;/span&gt;Shift&lt;span style=&quot;background-color: #fafafa; text-align: left;&quot;&gt;&amp;nbsp;+&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;`&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: #fafafa; color: #24292e; text-align: left;&quot;&gt;로 터미널 열어주고 기존에 있던 &lt;span style=&quot;background-color: #fafafa; color: #24292e; text-align: left;&quot;&gt;powershell은 삭제&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1026&quot; data-origin-height=&quot;767&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/KEP6S/btsn26RCOhc/TwAnYFGL5L3CfSOj0M1grk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/KEP6S/btsn26RCOhc/TwAnYFGL5L3CfSOj0M1grk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/KEP6S/btsn26RCOhc/TwAnYFGL5L3CfSOj0M1grk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FKEP6S%2Fbtsn26RCOhc%2FTwAnYFGL5L3CfSOj0M1grk%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;800&quot; height=&quot;767&quot; data-origin-width=&quot;1026&quot; data-origin-height=&quot;767&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;text-align: left;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #fafafa; color: #24292e; text-align: left;&quot;&gt;2. GitHub 시작하기&lt;/span&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #fafafa; color: #24292e; text-align: left;&quot;&gt;GitHub 사이트 접속 ▶ &lt;/span&gt;&lt;/b&gt;&lt;b&gt;우측 상단에 있는 프로필을 클릭&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;914&quot; data-origin-height=&quot;54&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/btb1z0/btsn89MZYhm/LK90z4SJEerUrXmPLDLrh1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/btb1z0/btsn89MZYhm/LK90z4SJEerUrXmPLDLrh1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/btb1z0/btsn89MZYhm/LK90z4SJEerUrXmPLDLrh1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbtb1z0%2Fbtsn89MZYhm%2FLK90z4SJEerUrXmPLDLrh1%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;800&quot; height=&quot;47&quot; data-origin-width=&quot;914&quot; data-origin-height=&quot;54&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;그다음 Settings를 클릭&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;960&quot; data-origin-height=&quot;1032&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/zhlfE/btsn7P9j9P2/OwRNxLNfQGdsN7oKXiFDrk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/zhlfE/btsn7P9j9P2/OwRNxLNfQGdsN7oKXiFDrk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/zhlfE/btsn7P9j9P2/OwRNxLNfQGdsN7oKXiFDrk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FzhlfE%2Fbtsn7P9j9P2%2FOwRNxLNfQGdsN7oKXiFDrk%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;800&quot; height=&quot;1032&quot; data-origin-width=&quot;960&quot; data-origin-height=&quot;1032&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Developer settings 클릭&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;960&quot; data-origin-height=&quot;1032&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bc5v82/btsn7MEM3Yg/CERgCCokiJPRQVCvMxops0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bc5v82/btsn7MEM3Yg/CERgCCokiJPRQVCvMxops0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bc5v82/btsn7MEM3Yg/CERgCCokiJPRQVCvMxops0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbc5v82%2Fbtsn7MEM3Yg%2FCERgCCokiJPRQVCvMxops0%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;800&quot; height=&quot;1032&quot; data-origin-width=&quot;960&quot; data-origin-height=&quot;1032&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #fafafa; color: #24292e; text-align: left;&quot;&gt;아래 순서대로 클릭해 줍니다.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #fafafa; color: #24292e; text-align: left;&quot;&gt;personal access tokens ▶ Tokens(classic) &lt;span style=&quot;background-color: #fafafa; color: #24292e; text-align: left;&quot;&gt;▶ Generate new token &lt;span style=&quot;background-color: #fafafa; color: #24292e; text-align: left;&quot;&gt;▶ &lt;span style=&quot;background-color: #fafafa; color: #24292e; text-align: left;&quot;&gt;Generate new token(classic)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #fafafa; color: #24292e; text-align: left;&quot;&gt;&lt;span style=&quot;background-color: #fafafa; color: #24292e; text-align: left;&quot;&gt;&lt;span style=&quot;background-color: #fafafa; color: #24292e; text-align: left;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;960&quot; data-origin-height=&quot;1032&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/QuSCz/btsn26YpABr/5N1zPsSW1gSjZHmPC1osC0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/QuSCz/btsn26YpABr/5N1zPsSW1gSjZHmPC1osC0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/QuSCz/btsn26YpABr/5N1zPsSW1gSjZHmPC1osC0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FQuSCz%2Fbtsn26YpABr%2F5N1zPsSW1gSjZHmPC1osC0%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;800&quot; height=&quot;860&quot; data-origin-width=&quot;960&quot; data-origin-height=&quot;1032&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 99.5353%; height: 60px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 0.145348%; height: 20px;&quot;&gt;&lt;b&gt;Note&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 1.16279%; height: 20px;&quot; colspan=&quot;7&quot;&gt;&lt;b&gt;토큰 이름을 설정.&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 0.145348%; height: 20px;&quot;&gt;&lt;b&gt;Expiration&amp;nbsp;&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 1.16279%; height: 20px;&quot; colspan=&quot;7&quot;&gt;&lt;b&gt;토큰의 만료기간을 설정.&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 0.145348%; height: 20px;&quot;&gt;&lt;b&gt;Select scopes&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 1.16279%; height: 20px;&quot; colspan=&quot;7&quot;&gt;&lt;b&gt;토큰의 비밀번호로 어떤 권한까지 허용할건지 설정.&amp;nbsp; ex)수정가능&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;그리고 Generate token를 눌러 토큰을 생성해 줍니다.&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;960&quot; data-origin-height=&quot;1032&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cZFUjZ/btsn7udizmD/Jgr0HTS7DtTnkPxph58SI0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cZFUjZ/btsn7udizmD/Jgr0HTS7DtTnkPxph58SI0/img.png&quot; data-alt=&quot;80&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cZFUjZ/btsn7udizmD/Jgr0HTS7DtTnkPxph58SI0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcZFUjZ%2Fbtsn7udizmD%2FJgr0HTS7DtTnkPxph58SI0%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;800&quot; height=&quot;860&quot; data-origin-width=&quot;960&quot; data-origin-height=&quot;1032&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;80&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;224&quot; data-origin-height=&quot;52&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/M8qUz/btsn9McYSgD/YKGnpJgMWoVk5qxxx8VAAK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/M8qUz/btsn9McYSgD/YKGnpJgMWoVk5qxxx8VAAK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/M8qUz/btsn9McYSgD/YKGnpJgMWoVk5qxxx8VAAK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FM8qUz%2Fbtsn9McYSgD%2FYKGnpJgMWoVk5qxxx8VAAK%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;224&quot; height=&quot;52&quot; data-origin-width=&quot;224&quot; data-origin-height=&quot;52&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;현제 페이지를 나가면 다시는 토큰을 볼 수 없기 때문에 따로 복사해 줍니다.&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;957&quot; data-origin-height=&quot;1028&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ol4en/btsobIuARPb/LQtwYyyPy7uxUGQbvp1Y00/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ol4en/btsobIuARPb/LQtwYyyPy7uxUGQbvp1Y00/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ol4en/btsobIuARPb/LQtwYyyPy7uxUGQbvp1Y00/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fol4en%2FbtsobIuARPb%2FLQtwYyyPy7uxUGQbvp1Y00%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;800&quot; height=&quot;859&quot; data-origin-width=&quot;957&quot; data-origin-height=&quot;1028&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;* 생략 가능 *&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;이제 컴퓨터에서 깃에 뭐를 올릴 때마다 토큰을 입력해 줘야 합니다. 하지만&amp;nbsp; 토큰을 컴퓨터 내에 저장한다면&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;이런 번거러움을 줄일 수&amp;nbsp; 있습니다. ▶&amp;nbsp;&lt;a href=&quot;https://opidea.tistory.com/7&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://opidea.tistory.com/7&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;text-align: left;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;3. 깃허브 사이트에 저장소 만들기.&lt;/b&gt;&lt;/h2&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Create repository를 클릭합니다.&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;position: absolute; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;960&quot; data-origin-height=&quot;1032&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dLaJha/btsn26xkFWI/rWiJVwYsP2myYXjVYShCP0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dLaJha/btsn26xkFWI/rWiJVwYsP2myYXjVYShCP0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dLaJha/btsn26xkFWI/rWiJVwYsP2myYXjVYShCP0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdLaJha%2Fbtsn26xkFWI%2FrWiJVwYsP2myYXjVYShCP0%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;800&quot; height=&quot;860&quot; data-origin-width=&quot;960&quot; data-origin-height=&quot;1032&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;저장소 이름을 작성하고&amp;nbsp; Public, Private 중 하나를 선택합니다.&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;position: absolute; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;960&quot; data-origin-height=&quot;1032&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/eriW0K/btsn6OwrIrM/55Lo7MqvVMhT7kXEpTKTSk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/eriW0K/btsn6OwrIrM/55Lo7MqvVMhT7kXEpTKTSk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/eriW0K/btsn6OwrIrM/55Lo7MqvVMhT7kXEpTKTSk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FeriW0K%2Fbtsn6OwrIrM%2F55Lo7MqvVMhT7kXEpTKTSk%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;800&quot; height=&quot;860&quot; data-origin-width=&quot;960&quot; data-origin-height=&quot;1032&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;마지막으로 Create repository를 누르면 저장소가 생성됩니다.&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;959&quot; data-origin-height=&quot;1031&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b92KCA/btsn7tzd9FG/AJHqysEEeXyl1yrHvM7JMK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b92KCA/btsn7tzd9FG/AJHqysEEeXyl1yrHvM7JMK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b92KCA/btsn7tzd9FG/AJHqysEEeXyl1yrHvM7JMK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb92KCA%2Fbtsn7tzd9FG%2FAJHqysEEeXyl1yrHvM7JMK%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;800&quot; height=&quot;860&quot; data-origin-width=&quot;959&quot; data-origin-height=&quot;1031&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;저장소의 주소&lt;/span&gt;를 따로 복사해 둡니다.&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;928&quot; data-origin-height=&quot;188&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bpU4bU/btsn6KgF51g/H80kaKsg002jPKNSQrBalK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bpU4bU/btsn6KgF51g/H80kaKsg002jPKNSQrBalK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bpU4bU/btsn6KgF51g/H80kaKsg002jPKNSQrBalK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbpU4bU%2Fbtsn6KgF51g%2FH80kaKsg002jPKNSQrBalK%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;800&quot; height=&quot;188&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;928&quot; data-origin-height=&quot;188&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&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;&amp;nbsp;&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;b&gt;&lt;span style=&quot;color: #f89009;&quot;&gt;주황색 박스&lt;/span&gt;는 깃을 다를 수 있는 툴(visualstudio)을 이용해 깃허브에 소스파일을 올리는 방법입니다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;다음 파트에서 자세히 살펴보도록 하겠습니다.&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;959&quot; data-origin-height=&quot;1031&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/2sA4c/btsn9UWPsEs/zreORiNeDt9XNPtb8XwI9K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/2sA4c/btsn9UWPsEs/zreORiNeDt9XNPtb8XwI9K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/2sA4c/btsn9UWPsEs/zreORiNeDt9XNPtb8XwI9K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F2sA4c%2Fbtsn9UWPsEs%2FzreORiNeDt9XNPtb8XwI9K%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;800&quot; height=&quot;860&quot; data-origin-width=&quot;959&quot; data-origin-height=&quot;1031&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&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;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;4. 파일 준비&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;파일 준비과정 하나씩 살펴보기&lt;/b&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 100px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 49.8837%; height: 20px;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #333333; text-align: left; background-color: #dddddd;&quot;&gt;git init&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 50.1163%; height: 20px;&quot;&gt;&lt;b&gt;. git 파일 생성 ex) 맨 처음 파일을 올릴때만 사용&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 40px;&quot;&gt;
&lt;td style=&quot;width: 49.8837%; height: 40px;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #dddddd;&quot;&gt;git add .&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 50.1163%; height: 40px;&quot;&gt;&lt;b&gt;모든 파일 관리, 만약 특정파일만 하고 싶다면&lt;/b&gt;&lt;br /&gt;&lt;b&gt;git add 파일이름.파일형식 ▶&lt;span style=&quot;background-color: #dddddd; color: #333333; text-align: start;&quot;&gt;git add index.html&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 49.8837%; height: 20px;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #333333; text-align: left; background-color: #dddddd;&quot;&gt;git status&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 50.1163%; height: 20px;&quot;&gt;&lt;b&gt;상태확인&amp;nbsp;&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 49.8837%; height: 20px;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #dddddd;&quot;&gt;git commit -m &quot;커밋할 이름&quot;&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 50.1163%; height: 20px;&quot;&gt;&lt;b&gt;커밋할 이름을 작성 ▶&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: #dddddd; color: #333333; text-align: start;&quot;&gt;git commit -m &quot;first commit&quot;&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;visualstudio에 들어가 폴더 열기를 클릭합니다.&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1023&quot; data-origin-height=&quot;767&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ehNeMt/btsofaefUDk/zKXsk9Xtpe55PgkyTnlTnk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ehNeMt/btsofaefUDk/zKXsk9Xtpe55PgkyTnlTnk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ehNeMt/btsofaefUDk/zKXsk9Xtpe55PgkyTnlTnk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FehNeMt%2FbtsofaefUDk%2FzKXsk9Xtpe55PgkyTnlTnk%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;800&quot; height=&quot;600&quot; data-origin-width=&quot;1023&quot; data-origin-height=&quot;767&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&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;&amp;nbsp;&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;b&gt;기존에 만들었던 파일을 선택하고 폴더 선택하기를 클릭합니다.&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;944&quot; data-origin-height=&quot;532&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/AN7rb/btsofP8wcjp/aLAJTxlbAhlnPdXkkXqmp0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/AN7rb/btsofP8wcjp/aLAJTxlbAhlnPdXkkXqmp0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/AN7rb/btsofP8wcjp/aLAJTxlbAhlnPdXkkXqmp0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FAN7rb%2FbtsofP8wcjp%2FaLAJTxlbAhlnPdXkkXqmp0%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;800&quot; height=&quot;451&quot; data-origin-width=&quot;944&quot; data-origin-height=&quot;532&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&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;&amp;nbsp;&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;b&gt;&lt;span style=&quot;background-color: #fafafa; color: #24292e; text-align: left;&quot;&gt;그리고&lt;/span&gt;&lt;span style=&quot;color: #24292e; text-align: left;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: #dddddd;&quot;&gt;git init&lt;/span&gt;&lt;span style=&quot;background-color: #fafafa; color: #24292e; text-align: left;&quot;&gt;를 입력해 이 파일을 관리하라고 명령합니다.&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;768&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/eJLxnb/btsoe88Ehyh/NW9NHKATmSKUyHd6gZM9tk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/eJLxnb/btsoe88Ehyh/NW9NHKATmSKUyHd6gZM9tk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/eJLxnb/btsoe88Ehyh/NW9NHKATmSKUyHd6gZM9tk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FeJLxnb%2Fbtsoe88Ehyh%2FNW9NHKATmSKUyHd6gZM9tk%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;800&quot; height=&quot;768&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;768&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&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;&amp;nbsp;&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;b&gt;그러면 선택한 폴더에 .git 이라는 파일이 생성되는 것을 확인할 수 있습니다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;파일이 보이지 않는다면 클릭 &lt;span style=&quot;background-color: #fafafa; color: #24292e; text-align: left;&quot;&gt;▶&lt;/span&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt; &lt;a style=&quot;color: #006dd7; text-align: start;&quot; href=&quot;https://opidea.tistory.com/6&quot;&gt;숨김파일 보기 :: 코띵 (tistory.com)&lt;/a&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;787&quot; data-origin-height=&quot;630&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/4J4tt/btsogXSxvcH/qWktBkrwVVsYWm6qk0MVU1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/4J4tt/btsogXSxvcH/qWktBkrwVVsYWm6qk0MVU1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/4J4tt/btsogXSxvcH/qWktBkrwVVsYWm6qk0MVU1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F4J4tt%2FbtsogXSxvcH%2FqWktBkrwVVsYWm6qk0MVU1%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;787&quot; height=&quot;630&quot; data-origin-width=&quot;787&quot; data-origin-height=&quot;630&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&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;&amp;nbsp;&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;b&gt;&lt;span style=&quot;background-color: #dddddd;&quot;&gt;git add .&lt;/span&gt;&lt;span style=&quot;background-color: #fafafa; color: #24292e; text-align: left;&quot;&gt;를 입력합니다.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;768&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/OjncC/btsoe12J1HN/tKttKDSMcZrBVKnPpS4ox0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/OjncC/btsoe12J1HN/tKttKDSMcZrBVKnPpS4ox0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/OjncC/btsoe12J1HN/tKttKDSMcZrBVKnPpS4ox0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FOjncC%2Fbtsoe12J1HN%2FtKttKDSMcZrBVKnPpS4ox0%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;800&quot; height=&quot;600&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;768&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #dddddd;&quot;&gt;git status&lt;/span&gt;&lt;span style=&quot;background-color: #fafafa; color: #24292e; text-align: left;&quot;&gt;를 입력해 커밋이 정상적으로 되었는지 확인합니다.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;766&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/degoil/btsogfTxvBD/RzvyP03RtTZOboKhfggal1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/degoil/btsogfTxvBD/RzvyP03RtTZOboKhfggal1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/degoil/btsogfTxvBD/RzvyP03RtTZOboKhfggal1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdegoil%2FbtsogfTxvBD%2FRzvyP03RtTZOboKhfggal1%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;800&quot; height=&quot;598&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;766&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #dddddd;&quot;&gt;git commit -m &quot;first commit&quot;&lt;/span&gt;&lt;span style=&quot;background-color: #fafafa; color: #24292e; text-align: left;&quot;&gt;를 입력합니다. ex) 커밋이름은 상관없음&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;768&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bN948f/btsoeAYHZFB/fhVheKJHlsfFJVlMi7M0eK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bN948f/btsoeAYHZFB/fhVheKJHlsfFJVlMi7M0eK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bN948f/btsoeAYHZFB/fhVheKJHlsfFJVlMi7M0eK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbN948f%2FbtsoeAYHZFB%2FfhVheKJHlsfFJVlMi7M0eK%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;800&quot; height=&quot;768&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;768&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;5. 파일 업로드&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;파일 업로드 하나씩 살펴보기&lt;/b&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;&lt;b&gt;git remote add origin {위에서 복사한 &lt;span style=&quot;color: #ee2323;&quot;&gt;저장소 주소&lt;/span&gt;}&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;&lt;b&gt;로컬저장소(Git)와 원격저장소(remote) 연동&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;&lt;b&gt;git push -u origin main&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;&lt;b&gt;orgin이라는 remote(원격)으로 현재 로컬브랜치중 main라는 것을 push하겠다는 의미&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span style=&quot;background-color: #dddddd;&quot;&gt;git remote add origin&lt;/span&gt; {&lt;/span&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;저장소 주소&lt;/span&gt;} &lt;b&gt;&lt;span style=&quot;background-color: #fafafa; color: #24292e; text-align: left;&quot;&gt;&lt;span style=&quot;background-color: #fafafa; color: #24292e; text-align: left;&quot;&gt;&lt;span style=&quot;background-color: #fafafa; color: #24292e; text-align: left;&quot;&gt;▶ 위에서 복사한 깃허브 저장소의 주소를 입려해 줍니다. '{ }'은 생략&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;768&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/czXKGi/btsoeJOV6iO/Fr50Kg6EKj47eLsPQUsXZk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/czXKGi/btsoeJOV6iO/Fr50Kg6EKj47eLsPQUsXZk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/czXKGi/btsoeJOV6iO/Fr50Kg6EKj47eLsPQUsXZk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FczXKGi%2FbtsoeJOV6iO%2FFr50Kg6EKj47eLsPQUsXZk%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;800&quot; height=&quot;600&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;768&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&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;&amp;nbsp;&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;b&gt;그리고 &lt;span style=&quot;background-color: #dddddd; color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;git push -u origin main&lt;/span&gt;을 입력하면 VScode에서 깃허브에 로그인할 것이냐는 확인창이 뜹니다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;로그인 화면에서 토큰을 통한 로그인을 눌러 위에서 따로 복사한 토큰을 입력합니다.&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;412&quot; data-origin-height=&quot;362&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/be6Jr1/btsomWUXo4f/iGouRhuhML1IVM0sr8GuV1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/be6Jr1/btsomWUXo4f/iGouRhuhML1IVM0sr8GuV1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/be6Jr1/btsomWUXo4f/iGouRhuhML1IVM0sr8GuV1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbe6Jr1%2FbtsomWUXo4f%2FiGouRhuhML1IVM0sr8GuV1%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;412&quot; height=&quot;362&quot; data-origin-width=&quot;412&quot; data-origin-height=&quot;362&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&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;&amp;nbsp;&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;b&gt;프로젝트 업로드 된 것을 확인할 수 있습니다.&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;960&quot; data-origin-height=&quot;808&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lTxdC/btsooHvp5ss/YwLHmDcYamxSG5KoDi8TC1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lTxdC/btsooHvp5ss/YwLHmDcYamxSG5KoDi8TC1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lTxdC/btsooHvp5ss/YwLHmDcYamxSG5KoDi8TC1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlTxdC%2FbtsooHvp5ss%2FYwLHmDcYamxSG5KoDi8TC1%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;800&quot; height=&quot;808&quot; data-origin-width=&quot;960&quot; data-origin-height=&quot;808&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #f3c000;&quot;&gt;*틀렸거나 보안했으면 하는 부분은 알려주시면&amp;nbsp; 수정하겠습니다^^.*&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;</description>
      <category>Git &amp;amp; GitHub</category>
      <category>깃허브 저장소 생성</category>
      <category>깃허브 파일 업로드 #깃허브</category>
      <category>깃허브 파일 올리기</category>
      <category>토큰 내컴퓨터에 저장</category>
      <author>Isaac01</author>
      <guid isPermaLink="true">https://opidea.tistory.com/3</guid>
      <comments>https://opidea.tistory.com/entry/Git-GitHub-%ED%8C%8C%EC%9D%BC-%EC%98%AC%EB%A6%AC%EB%8A%94-%EB%B0%A9%EB%B2%95#entry3comment</comments>
      <pubDate>Tue, 18 Jul 2023 15:43:25 +0900</pubDate>
    </item>
  </channel>
</rss>