<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>개발자의 리뷰 공간</title>
    <link>https://dev-cho.tistory.com/</link>
    <description>전자기기, 앱 등을 리뷰합니다. </description>
    <language>ko</language>
    <pubDate>Sat, 22 Aug 2026 17:05:03 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>DevReview</managingEditor>
    <image>
      <title>개발자의 리뷰 공간</title>
      <url>https://tistory1.daumcdn.net/tistory/4296818/attach/55676edf08814fc191f107db71a4d0c1</url>
      <link>https://dev-cho.tistory.com</link>
    </image>
    <item>
      <title>[사용 용도별 맥북 추천] m2 air 부터 m2 max까지 어떤걸 사야할까? 2023년 업데이트</title>
      <link>https://dev-cho.tistory.com/59</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;목차&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;맥북을 자신에 맞는 사양으로 구매하는 것이 중요한 이유&lt;/li&gt;
&lt;li&gt;개발자의 맥북 구매기&lt;/li&gt;
&lt;li&gt;나에게 알맞은 맥북 고르기&lt;/li&gt;
&lt;/ul&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;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;맥북은 보통 한 번 사면 3~4년은 쓰게 된다. 만약 자신이 필요한 사양보다 낮은 사양으로 사게 되면 컴퓨터가 멈추거나 느려지는 경험을 하게 될 것이고 너무 높은 사양으로 사게 되면 리소스를 모두 활용 못해서 100만원 싼 맥북보다 비슷하거나 조금 더 빠를 것이다. 특히 최근 나오는 맥북들은 램이 온보드로 장착되어 있어서 개인이 ram을 바꾸기는 불가능하다. 따라서 맥북은 한 번 사면 끝까지 똑같은 사양으로 가야하기 때문에 한 번에 제대로 된 사양의 맥북을 구매하는 것이 중요하다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;text-align: center;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;이 글은 2021년에 처음 작성되었으며 2023년에 업데이트 되었습니다.&lt;/b&gt;&lt;/span&gt;&lt;/h4&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;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;나는 개발자다. 이번에 개발을 위해 새로운 맥북이 필요해져 사려고 검색을 하다보니 모든 맥북을 종류별로 분류한 후 사용 용도를 나누는 작업을 하게 되었다(&lt;s&gt;이놈의 직업병&lt;/s&gt;). 특히 &lt;b&gt;프로그램 별로 어느 정도 Ram을 잡아먹는지와 어느 cpu가 프로그램을 돌리는데 더 효율적인지를 분석&lt;/b&gt;했다. 며칠동안 분석을 했다보니 아까워서 분석한 내용을 쿠팡 파트너스 링크와 함께 글로 쓰게 되었다. 이 글이 많은 사람들에게 도움이 되길 바란다.&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;내가 산 맥북 : 맥북프로 16인치 M1 Pro cpu 10core gpu 16core ram 32gb&amp;nbsp;&amp;nbsp;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;나는 안드로이드, iOS, Spring 세가지를 개발하는 개발자이다. 나 같은 클라이언트 개발자에게 중요한 세가지 기준을 이용해 맥북을 골랐다.&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;화면 크기&lt;/li&gt;
&lt;li&gt;빌드시간&lt;/li&gt;
&lt;li&gt;IDE를 위한 충분한 ram&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;나는 클라이언트 개발을 하기 때문에 모바일 화면을 맥북에서 보기 위해서 충분히 큰 화면이 필요해 16 inch 화면의 맥북프로를 골랐다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;두 번째로 고려한 사항은 빌드 시간이다. 특히 최근에 수시로 빌드를 돌려야 하는 특별한 상황이 생겨서 빌드 시간을 중요한 사항으로 놓고 모델을 골랐다. 빌드 시간은 cpu와 ram 두가지에 의해 결정된다. cpu 성능은 m1 max와 m1 pro(10core)가 차이가 없기 때문에 m1 pro로 골랐다. 안드로이드와 Spring은 멀티코어 빌드를 지원하기 때문에 코어가 많을 수록 좋다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;*물론 14인치에서 있는 8core 옵션은 10core에 비해 20%정도 성능이 떨어진다고 한다. 16인치는 기본이 10core 모델이다.&lt;/p&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;개발을 위해서는 gpu 성능이 중요하지 않기 때문에 굳이 m1 max를 사지 않았다. 다만 m1 max는 m1 pro와 gpu core뿐 아니라 ram 대역폭도 차이가 나는데, ram이 충분하다면 대역폭이 2배 넓더라도 큰 차이를 못내기 때문에 미련없이 m1 pro로 결정했다. 그래픽 작업이나 동영상 작업 등을 하지 않는 이상 m1 pro와 m1 max는 cpu 성능이 같기 때문에 굳이 m1 max로 갈 필요가 없었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;마지막으로 IDE를 돌리기 위한 충분한 램이 중요했다. Android Studio, Xcode, Intellij를 각각 돌리기 위해서는 2~4gb의 ram이 필요했다. 시스템에서 기본으로 사용하는 램이 꽤 되기 때문에 때문에 16gb 모델은 나한테 부족했고 향후 다른 프로그램들이 추가될 것을 생각했을 때 넉넉히 32gb ram 모델로 구매했다.&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 alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1039&quot; data-origin-height=&quot;404&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/624QA/btroM7Vf07S/ml039VSc0DI63TF7TmSDd1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/624QA/btroM7Vf07S/ml039VSc0DI63TF7TmSDd1/img.png&quot; data-alt=&quot;그림1. 맥북 주문 완료 화면&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/624QA/btroM7Vf07S/ml039VSc0DI63TF7TmSDd1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F624QA%2FbtroM7Vf07S%2Fml039VSc0DI63TF7TmSDd1%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;1039&quot; height=&quot;404&quot; data-origin-width=&quot;1039&quot; data-origin-height=&quot;404&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;그림1. 맥북 주문 완료 화면&lt;/figcaption&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;12월 22일에 주문했는데 23일 새벽에 도착해서 퇴근 후 저녁에 뜯어봤는데 결과는 대만족 성능도 너무 좋고 내가 기대한 그 성능이었다.!&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 alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;KakaoTalk_20211224_005309190_03.jpg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bntOmD/btroJARTVy7/h7fLYhnAZYFyqmIrkAWiBk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bntOmD/btroJARTVy7/h7fLYhnAZYFyqmIrkAWiBk/img.jpg&quot; data-alt=&quot;그림2. 맥북 실구매 사진&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bntOmD/btroJARTVy7/h7fLYhnAZYFyqmIrkAWiBk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbntOmD%2FbtroJARTVy7%2Fh7fLYhnAZYFyqmIrkAWiBk%2Fimg.jpg&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;680&quot; height=&quot;510&quot; data-filename=&quot;KakaoTalk_20211224_005309190_03.jpg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;그림2. 맥북 실구매 사진&lt;/figcaption&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;&amp;nbsp;&lt;/p&gt;
&lt;figure id=&quot;og_1640278710286&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;Apple 2021 맥북프로 16&quot; data-og-description=&quot;COUPANG&quot; data-og-host=&quot;www.coupang.com&quot; data-og-source-url=&quot;https://coupa.ng/cbdou6&quot; data-og-url=&quot;https://www.coupang.com/vp/products/6148872544&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bX7e5F/hyMO6xPH3b/RiamTbDOyUmiRqUZkXmCR1/img.jpg?width=230&amp;amp;height=230&amp;amp;face=0_0_230_230&quot;&gt;&lt;a href=&quot;https://coupa.ng/cbdou6&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://coupa.ng/cbdou6&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bX7e5F/hyMO6xPH3b/RiamTbDOyUmiRqUZkXmCR1/img.jpg?width=230&amp;amp;height=230&amp;amp;face=0_0_230_230');&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;Apple 2021 맥북프로 16&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;COUPANG&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.coupang.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;&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;/h2&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;간단한 문서 작성 및 사무용 모델 : 맥북에어 m2 ram 8gb 저장소 256gb 기본 모델&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;간단한 문서 작성과 사무용으로 사용하기 위해서는 m1 air 8gb 모델이 적합하다. m2 air 8gb 기본 모델이 110~120만원 정도하는데 맥은 추가적인 사양을 붙이기 위해서 많은 돈을 지불해야 한다. 특히 m2 13인치 모델과 m2 pro 14인치모델은 기본 모델의 가격 차이가 150만원 정도 나므로, 만약 큰 화면이 필요하다면 모니터를 추가로 구매해서 외장 모니터로 사용하는 것이 좋다.&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://one.google.com/about/plans?hl=ko&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;구글 드라이브&lt;/a&gt;같은 외부 저장 공간을 사용하는 편이 효율적이다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;사양: 맥북 에어 13인치 m2 ram 8gb gpu 8core ssd 256gb&lt;br /&gt;가격: 140~150만원&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;구매 링크는 다음에 있다. 옵션에서 ram 8gb gpu 8core를 고르도록 하자&lt;/p&gt;
&lt;figure id=&quot;og_1683809998353&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;Apple 2022 맥북 에어&quot; data-og-description=&quot;COUPANG&quot; data-og-host=&quot;www.coupang.com&quot; data-og-source-url=&quot;https://link.coupang.com/a/XYAyN&quot; data-og-url=&quot;https://www.coupang.com/vp/products/6645530847&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bfB3eV/hySAbahObv/XhlsLlykuNlMAmzaLqbmKk/img.jpg?width=230&amp;amp;height=230&amp;amp;face=0_0_230_230&quot;&gt;&lt;a href=&quot;https://link.coupang.com/a/XYAyN&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://link.coupang.com/a/XYAyN&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bfB3eV/hySAbahObv/XhlsLlykuNlMAmzaLqbmKk/img.jpg?width=230&amp;amp;height=230&amp;amp;face=0_0_230_230');&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;Apple 2022 맥북 에어&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;COUPANG&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.coupang.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;h3 data-ke-size=&quot;size23&quot;&gt;디자인, 프로그래밍을 위한 모델 : 맥북에어 m2 ram 16gb 저장소 256gb 모델&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;디자인과 프로그래밍을 위해서는 앞서 본 기본모델에서 ram만 16gb로 업그레이드한 모델을 사용하는 것이 좋다. 이유는 디자인, 프로그래밍을 위해서 사용하는 tool 들이 보통 ram을 많이 사용하고, ram이 부족해지면 끊김 현상이 일어날 수 있기 때문이다. 때문에 ram은 16gb로 올리는 것이 좋다. 디자인과 프로그래밍의 어느 정도 전문적인 작업까지 이 모델로 커버가 가능하다. 특히 만약 개발을 이제 막 시간하는 단계이거나, 디자인을 배워보는 단계라면 이 모델로도 충분하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;추가적인 저장소가 필요하다면 개발자라면 github을 디자이너라면 adobe creative cloud나 구글 드라이브 같은 외장 저장소를 제공해주는 툴을 사용하는 것이 좋다.&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;사양: 맥북 에어 13인치 m2 ram 16gb gpu 8(10)core ssd 256gb&lt;br /&gt;가격: 190~200만원&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;구매 링크는 다음에 있다. 옵션에서 ram 16gb gpu 10core를 고르도록 하자. gpu는 8core로도 충분한데, 8core 모델이 없는 경우가 많다.&lt;span style=&quot;background-color: #f7f7f7; color: #3c3d3f; text-align: start;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1683810118573&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;Apple 2022 맥북 에어&quot; data-og-description=&quot;COUPANG&quot; data-og-host=&quot;www.coupang.com&quot; data-og-source-url=&quot;https://link.coupang.com/a/XYBo4&quot; data-og-url=&quot;https://www.coupang.com/vp/products/6645530847&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/mgVPx/hySz9XPBxf/wByrAxtkhZ9w57iFFvtOG1/img.jpg?width=230&amp;amp;height=230&amp;amp;face=0_0_230_230&quot;&gt;&lt;a href=&quot;https://link.coupang.com/a/XYBo4&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://link.coupang.com/a/XYBo4&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/mgVPx/hySz9XPBxf/wByrAxtkhZ9w57iFFvtOG1/img.jpg?width=230&amp;amp;height=230&amp;amp;face=0_0_230_230');&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;Apple 2022 맥북 에어&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;COUPANG&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.coupang.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;h3 data-ke-size=&quot;size23&quot;&gt;전문적인 프로그래밍을 위한 모델 : 맥북프로&lt;span&gt; &lt;/span&gt;M2 Pro cpu 10core ram 32gb 모델&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;전문적인 프로그래밍을 위해서는 gpu 코어는 중요하지 않고 cpu코어만이 중요하다. 따라서 m1 pro든 max든 10core 모델이면 상관없다. 따라서 가장 가성비가 좋은 것은 14인치 모델의 cpu 10core gpu 16core 모델이다.&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;아래 링크에서 확인할 수 있듯이 사실상 개발을 위한 성능차이는 약간의 cpu 성능 향상(2core)과 화면이 2인치 증가한거 밖에 없는데 가격 차이가 80만원 정도 생긴다.&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;가성비가 좋은 모델 : 맥북프로 14인치 M2 Pro cpu 10core gpu 16core ram 32gb 모델 - 저장소 무관&lt;br /&gt;가격: 280~350만원&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #f7f7f7; color: #3c3d3f; text-align: start;&quot;&gt;&lt;a href=&quot;https://link.coupang.com/a/XYFET&quot;&gt;https://link.coupang.com/a/XYFET&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1683810730929&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;Apple 2023 맥북 프로 14 M2&quot; data-og-description=&quot;COUPANG&quot; data-og-host=&quot;www.coupang.com&quot; data-og-source-url=&quot;https://link.coupang.com/a/XYFET&quot; data-og-url=&quot;https://www.coupang.com/vp/products/7122228810&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/b2EvyF/hySAhuNoLJ/ShBgHV4H9jO9ZIoEc9Mm2K/img.jpg?width=230&amp;amp;height=230&amp;amp;face=0_0_230_230,https://scrap.kakaocdn.net/dn/cv22kp/hySAhO7dzb/fpZqKD7M4xoMlGUOH8Hauk/img.jpg?width=230&amp;amp;height=230&amp;amp;face=0_0_230_230&quot;&gt;&lt;a href=&quot;https://link.coupang.com/a/XYFET&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://link.coupang.com/a/XYFET&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/b2EvyF/hySAhuNoLJ/ShBgHV4H9jO9ZIoEc9Mm2K/img.jpg?width=230&amp;amp;height=230&amp;amp;face=0_0_230_230,https://scrap.kakaocdn.net/dn/cv22kp/hySAhO7dzb/fpZqKD7M4xoMlGUOH8Hauk/img.jpg?width=230&amp;amp;height=230&amp;amp;face=0_0_230_230');&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;Apple 2023 맥북 프로 14 M2&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;COUPANG&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.coupang.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;blockquote data-ke-style=&quot;style3&quot;&gt;화면이 큰 모델 : 맥북프로 16인치 M2 Pro cpu 12core gpu 19core ram 32gb 모델&lt;br /&gt;가격: 360~420만원&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure id=&quot;og_1683810997406&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;Apple 2023 맥북 프로 16 M2&quot; data-og-description=&quot;COUPANG&quot; data-og-host=&quot;www.coupang.com&quot; data-og-source-url=&quot;https://link.coupang.com/a/XYHvx&quot; data-og-url=&quot;https://www.coupang.com/vp/products/7122228405&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/b7vXZg/hySBwDRD5K/JWs1SWGBwcwEsAmquZhEPk/img.jpg?width=230&amp;amp;height=230&amp;amp;face=0_0_230_230,https://scrap.kakaocdn.net/dn/b3rOnI/hySz8dzfzI/QNz7YUTyjr4ASuTEVIc2l0/img.jpg?width=230&amp;amp;height=230&amp;amp;face=0_0_230_230&quot;&gt;&lt;a href=&quot;https://link.coupang.com/a/XYHvx&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://link.coupang.com/a/XYHvx&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/b7vXZg/hySBwDRD5K/JWs1SWGBwcwEsAmquZhEPk/img.jpg?width=230&amp;amp;height=230&amp;amp;face=0_0_230_230,https://scrap.kakaocdn.net/dn/b3rOnI/hySz8dzfzI/QNz7YUTyjr4ASuTEVIc2l0/img.jpg?width=230&amp;amp;height=230&amp;amp;face=0_0_230_230');&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;Apple 2023 맥북 프로 16 M2&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;COUPANG&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.coupang.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사실상 위 두 모델의 개발을 위한 성능차이는 거의 나지 않는다. 이유는 gpu 코어를 앱에서 쓰지 않기 때문이다. m1 pro의 발열 제어 또한 최고여서 크기 차이가 성능에 영향이 거의 없다.&lt;/p&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;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;M2 Max cpu 12core gpu 38core ram 64gb or 96gb모델&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;전문적인 영상 작업을 하는 사람이라면, 좋지 않은 컴퓨터를 사서 시간을 낭비하는 것보다. 최대한 빠르게 되는 것이 좋다. 따라서 M2 Max 모델에서 gpu core을 최대치로 올린 38core gpu를 사용하는 모델을 사용해야 한다. 이 모델을 고른 이상 추가적인 선택지는 64gb 혹은 96gb 둘중 어떤 것을 선택하느냐이다. 정말 많은 작업이 필요하다면 96gb를 추천하지만 64gb로도 대부분 충분하다. 이 부분에 대해서는 자신이 프로그램을 쓸 때 리소스 사용량이 어떤지 잘 보고 사는 것을 추천한다.&lt;/p&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;blockquote data-ke-style=&quot;style3&quot;&gt;모델명 맥북프로 M2 Max cpu 12core gpu 38core ram 64gb or 96gb 모델&lt;br /&gt;가격: 520~580만원&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.apple.com/kr/shop/buy-mac/macbook-pro/16%ED%98%95&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://www.apple.com/kr/shop/buy-mac/macbook-pro/16%ED%98%95&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1683811355891&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;product&quot; data-og-title=&quot;MacBook Pro 구입하기&quot; data-og-description=&quot;막강한 성능의 M2 Pro 또는 M2 Max 칩을 탑재한 MacBook Pro. 여기에 온종일 가는 배터리 사용 시간, 눈부신 Liquid Retina XDR 디스플레이까지 갖추었습니다. 지금 구입하기.&quot; data-og-host=&quot;www.apple.com&quot; data-og-source-url=&quot;https://www.apple.com/kr/shop/buy-mac/macbook-pro/16%ED%98%95&quot; data-og-url=&quot;https://www.apple.com/kr/shop/buy-mac/macbook-pro&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/ov3Tw/hySz67SLbb/SEWMPfkRnZZ4GvOfJTqbBk/img.jpg?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/cHSsGt/hySBCD5m5r/KxLSNks5JjYxVAD6HEHEKK/img.png?width=2140&amp;amp;height=752&amp;amp;face=1270_107_1708_457&quot;&gt;&lt;a href=&quot;https://www.apple.com/kr/shop/buy-mac/macbook-pro/16%ED%98%95&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.apple.com/kr/shop/buy-mac/macbook-pro/16%ED%98%95&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/ov3Tw/hySz67SLbb/SEWMPfkRnZZ4GvOfJTqbBk/img.jpg?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/cHSsGt/hySBCD5m5r/KxLSNks5JjYxVAD6HEHEKK/img.png?width=2140&amp;amp;height=752&amp;amp;face=1270_107_1708_457');&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;MacBook Pro 구입하기&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;막강한 성능의 M2 Pro 또는 M2 Max 칩을 탑재한 MacBook Pro. 여기에 온종일 가는 배터리 사용 시간, 눈부신 Liquid Retina XDR 디스플레이까지 갖추었습니다. 지금 구입하기.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.apple.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;blockquote data-ke-style=&quot;style3&quot;&gt;이 글은 추천일 뿐, 구매에 대한 선택은 본인에게 있습니다.&lt;/blockquote&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #e56a2c;&quot;&gt;&quot;이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.&quot;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>개발자의 아이템</category>
      <category>M1</category>
      <category>m1 max</category>
      <category>m1 pro</category>
      <category>맥북</category>
      <category>맥북 프로</category>
      <category>애플</category>
      <author>DevReview</author>
      <guid isPermaLink="true">https://dev-cho.tistory.com/59</guid>
      <comments>https://dev-cho.tistory.com/59#entry59comment</comments>
      <pubDate>Thu, 11 May 2023 22:22:59 +0900</pubDate>
    </item>
    <item>
      <title>HTTP 응답 코드 한 번에 정리하기: 100~599 까지 한 번에 정리하기</title>
      <link>https://dev-cho.tistory.com/78</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;HTTP와 응답 코드&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;HTTP(HyperText Transfer Protocol)는 웹 브라우저와 웹 서버 간의 통신을 위한 프로토콜입니다. HTTP 응답 코드는 웹 서버가 클라이언트에게 응답할 때, 상태 코드로 사용하는 3자리 숫자입니다. 이 코드는 클라이언트에게 서버의 처리 상태를 알려주는 역할을 합니다. 이번 글에서는, HTTP 응답 코드의 종류와 의미에 대해 알아보겠습니다.&lt;/p&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 응답 코드는 100부터 599까지의 범위를 가지며, 5가지의 범주로 나눌 수 있습니다.&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;1xx (Informational)&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1xx 범주의 코드는 클라이언트 요청을 받아들였으며, 요청 처리를 계속하고 있음을 나타냅니다. 예를 들어, 100 코드는 클라이언트 요청이 처리되고 있음을 나타내며, 101 코드는 클라이언트 요청이 승인되었음을 나타냅니다.&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;100 Continue&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;100 Continue 응답 코드는 클라이언트 요청의 일부가 서버에 도달하였으며, 서버가 요청을 계속 처리할 것임을 나타냅니다. 일반적으로, 클라이언트가 서버로 큰 데이터를 전송할 때, 서버는 이 데이터를 미리 처리하지 않고, 100 Continue 응답 코드를 보내어, 클라이언트에게 나머지 데이터를 전송할 것임을 알려줍니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들어, 클라이언트가 웹 서버로 파일을 업로드하는 요청을 보낸 경우, 서버는 100 Continue 응답 코드를 보내어, 클라이언트에게 이 파일의 업로드를 계속할 수 있음을 알려줍니다.&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;101&amp;nbsp;Switching&amp;nbsp;Protocols&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;101 Switching Protocols 응답 코드는 서버가 클라이언트의 요청에 대해 프로토콜을 변경할 것임을 알려줍니다. 이 코드는 일반적으로, 클라이언트가 HTTP 프로토콜에서 WebSocket 프로토콜로 전환하는 경우에 사용됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들어, 클라이언트가 웹 서버로 WebSocket 연결을 요청한 경우, 서버는 101 Switching Protocols 응답 코드를 보내어, 클라이언트와 WebSocket 연결을 맺을 것임을 알려줍니다. 이후, 클라이언트와 서버는 WebSocket 프로토콜을 사용하여 실시간 데이터를 주고받을 수 있습니다.&lt;/p&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;2xx&amp;nbsp;(Successful)&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2xx&amp;nbsp;범주의&amp;nbsp;코드는&amp;nbsp;클라이언트&amp;nbsp;요청이&amp;nbsp;성공적으로&amp;nbsp;처리되었음을&amp;nbsp;나타냅니다.&amp;nbsp;예를&amp;nbsp;들어,&amp;nbsp;200&amp;nbsp;코드는&amp;nbsp;서버가&amp;nbsp;클라이언트&amp;nbsp;요청을&amp;nbsp;성공적으로&amp;nbsp;처리했음을&amp;nbsp;나타내며,&amp;nbsp;204&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;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;200 OK&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;00 OK 응답 코드는 클라이언트 요청이 성공적으로 처리되었음을 나타냅니다. 이 코드는 일반적으로, 서버가 클라이언트의 요청을 올바르게 받아들였고, 요청에 대한 적절한 응답을 반환했음을 나타냅니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들어, 클라이언트가 웹 서버로 특정 페이지에 대한 요청을 보낸 경우, 서버는 200 OK 응답 코드와 함께 요청한 페이지의 HTML 코드를 반환할 것입니다.&lt;/p&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;201 Created&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;201 Created 응답 코드는 클라이언트 요청으로 새로운 리소스가 생성되었음을 나타냅니다. 이 코드는 일반적으로, POST 요청을 통해 새로운 리소스를 생성할 때 사용됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들어, 클라이언트가 웹 서버로 새로운 사용자를 생성하는 POST 요청을 보낸 경우, 서버는 201 Created 응답 코드와 함께 새로운 사용자의 정보를 포함하는 응답을 반환할 것입니다.&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;204&amp;nbsp;No&amp;nbsp;Content&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;204 No Content 응답 코드는 클라이언트 요청이 성공적으로 처리되었지만, 반환할 데이터가 없음을 나타냅니다. 이 코드는 일반적으로, 클라이언트가 서버에 대한 데이터를 업데이트하거나 삭제하는 요청을 보낸 경우에 사용됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들어, 클라이언트가 웹 서버로 데이터 삭제 요청을 보낸 경우, 서버는 204 No Content 응답 코드와 함께 삭제된 데이터가 없음을 알려줄 것입니다.&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;3xx&amp;nbsp;(Redirection)&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3xx&amp;nbsp;범주의&amp;nbsp;코드는&amp;nbsp;클라이언트가&amp;nbsp;추가&amp;nbsp;동작을&amp;nbsp;수행해야&amp;nbsp;함을&amp;nbsp;나타냅니다.&amp;nbsp;예를&amp;nbsp;들어,&amp;nbsp;301&amp;nbsp;코드는&amp;nbsp;클라이언트가&amp;nbsp;요청한&amp;nbsp;리소스가&amp;nbsp;영구적으로&amp;nbsp;다른&amp;nbsp;URI로&amp;nbsp;이동되었음을&amp;nbsp;나타내며,&amp;nbsp;302&amp;nbsp;코드는&amp;nbsp;클라이언트가&amp;nbsp;요청한&amp;nbsp;리소스가&amp;nbsp;일시적으로&amp;nbsp;다른&amp;nbsp;URI로&amp;nbsp;이동되었음을&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;301 Moved Permanently&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;301&amp;nbsp;Moved&amp;nbsp;Permanently&amp;nbsp;응답&amp;nbsp;코드는&amp;nbsp;클라이언트가&amp;nbsp;요청한&amp;nbsp;리소스가&amp;nbsp;영구적으로&amp;nbsp;다른&amp;nbsp;URI로&amp;nbsp;이동되었음을&amp;nbsp;나타냅니다.&amp;nbsp;이&amp;nbsp;코드는&amp;nbsp;일반적으로,&amp;nbsp;서버가&amp;nbsp;웹&amp;nbsp;페이지를&amp;nbsp;새로운&amp;nbsp;URL로&amp;nbsp;옮겼을&amp;nbsp;때&amp;nbsp;사용됩니다.&lt;br /&gt;&lt;br /&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;301&amp;nbsp;Moved&amp;nbsp;Permanently&amp;nbsp;응답&amp;nbsp;코드와&amp;nbsp;함께&amp;nbsp;새로운&amp;nbsp;URL을&amp;nbsp;포함하는&amp;nbsp;응답을&amp;nbsp;반환할&amp;nbsp;것입니다.&amp;nbsp;클라이언트는&amp;nbsp;이후부터&amp;nbsp;새로운&amp;nbsp;URL을&amp;nbsp;사용하여&amp;nbsp;해당&amp;nbsp;페이지에&amp;nbsp;접근해야&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;302 Found&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;302 Found 응답 코드는 클라이언트가 요청한 리소스가 일시적으로 다른 URI로 이동되었음을 나타냅니다. 이 코드는 일반적으로, 서버가 일시적으로 웹 페이지를 다른 URL로 이동시켰을 때 사용됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들어, 클라이언트가 웹 서버로 특정 페이지에 대한 요청을 보낸 경우, 서버는 302 Found 응답 코드와 함께 새로운 URL을 포함하는 응답을 반환할 것입니다. 클라이언트는 이후에도 기존 URL을 계속 사용하여 해당 페이지에 접근할 수 있습니다.&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;304&amp;nbsp;Not&amp;nbsp;Modified&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;304 Not Modified 응답 코드는 클라이언트가 요청한 리소스가 이전에 이미 다운로드되었으며, 수정되지 않았음을 나타냅니다. 이 코드는 일반적으로, 클라이언트가 웹 서버로 캐시된 리소스를 요청할 때 사용됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들어, 클라이언트가 웹 서버로 이미지 파일을 요청한 후, 이후에 다시 같은 이미지 파일을 요청하는 경우, 서버는 304 Not Modified 응답 코드와 함께, 클라이언트가 이전에 다운로드한 이미지 파일을 그대로 사용할 것임을 알려줍니다. 이를 통해 클라이언트는 이미지 파일을 다시 다운로드하지 않아도 되므로, 대역폭과 시간을 절약할 수 있습니다.&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;4xx&amp;nbsp;(Client&amp;nbsp;Error)&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4xx&amp;nbsp;범주의&amp;nbsp;코드는&amp;nbsp;클라이언트&amp;nbsp;오류를&amp;nbsp;나타냅니다.&amp;nbsp;예를&amp;nbsp;들어,&amp;nbsp;400&amp;nbsp;코드는&amp;nbsp;클라이언트&amp;nbsp;요청이&amp;nbsp;잘못되었음을&amp;nbsp;나타내며,&amp;nbsp;404&amp;nbsp;코드는&amp;nbsp;클라이언트가&amp;nbsp;요청한&amp;nbsp;리소스가&amp;nbsp;서버에&amp;nbsp;없음을&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;400 Bad Request&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;400&amp;nbsp;Bad&amp;nbsp;Request&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;사용됩니다.&lt;br /&gt;&lt;br /&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;400&amp;nbsp;Bad&amp;nbsp;Request&amp;nbsp;응답&amp;nbsp;코드를&amp;nbsp;반환할&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;401 Unauthorized&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;401 Unauthorized 응답 코드는 클라이언트가 요청한 리소스에 대한 권한이 없음을 나타냅니다. 이 코드는 일반적으로, 클라이언트가 인증되지 않았거나, 인증 정보가 잘못된 경우에 사용됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들어, 클라이언트가 웹 서버로 보호된 페이지에 대한 요청을 보내지만, 로그인하지 않았거나, 로그인 정보가 잘못된 경우, 서버는 401 Unauthorized 응답 코드를 반환할 것입니다.&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;404&amp;nbsp;Not&amp;nbsp;Found&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;404 Not Found 응답 코드는 클라이언트가 요청한 리소스를 찾을 수 없음을 나타냅니다. 이 코드는 일반적으로, 클라이언트가 잘못된 URL을 요청한 경우에 사용됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들어, 클라이언트가 웹 서버로 존재하지 않는 페이지에 대한 요청을 보낸 경우, 서버는 404 Not Found 응답 코드를 반환할 것입니다.&lt;/p&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;5xx&amp;nbsp;(Server&amp;nbsp;Error)&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;5xx 범주의 코드는 서버 오류를 나타냅니다. 예를 들어, 500 코드는 서버에 오류가 발생했음을 나타내며, 503 코드는 서버가 요청을 처리할 수 없음을 나타냅니다.&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;500 Internal Server Error&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;500 Internal Server Error 응답 코드는 서버에서 요청을 처리하는 도중에 오류가 발생했음을 나타냅니다. 이 코드는 일반적으로, 서버에서 처리할 수 없는 요청이나, 서버 자체의 오류로 인해 발생합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들어, 클라이언트가 웹 서버로 특정 페이지에 대한 요청을 보내지만, 서버에서 해당 페이지를 처리하는 중에 오류가 발생한 경우, 서버는 500 Internal Server Error 응답 코드를 반환할 것입니다.&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;503&amp;nbsp;Service&amp;nbsp;Unavailable&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;503 Service Unavailable 응답 코드는 클라이언트가 요청한 서비스를 현재 사용할 수 없음을 나타냅니다. 이 코드는 일반적으로, 서버가 과부하 상태거나, 유지보수를 위해 일시적으로 서비스를 중단한 경우에 사용됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들어, 클라이언트가 웹 서버로 특정 페이지에 대한 요청을 보내지만, 서버가 유지보수 중이거나, 과부하 상태인 경우, 서버는 503 Service Unavailable 응답 코드를 반환할 것입니다.&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;HTTP응답 코드 정리&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;HTTP&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;HTTP&amp;nbsp;응답&amp;nbsp;코드는&amp;nbsp;100부터&amp;nbsp;599까지의&amp;nbsp;범위를&amp;nbsp;가지며,&amp;nbsp;5가지의&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;됩니다.&lt;/p&gt;</description>
      <category>Web</category>
      <category>500 Internal Server Error</category>
      <category>HTTP 100 Continue</category>
      <category>http 200</category>
      <category>HTTP 201</category>
      <category>HTTP 204</category>
      <category>HTTP 301 Moved Permanently</category>
      <category>HTTP 400</category>
      <category>HTTP 401 Unauthorized</category>
      <category>HTTP 404 Not Found</category>
      <category>HTTP response</category>
      <author>DevReview</author>
      <guid isPermaLink="true">https://dev-cho.tistory.com/78</guid>
      <comments>https://dev-cho.tistory.com/78#entry78comment</comments>
      <pubDate>Tue, 21 Feb 2023 21:44:09 +0900</pubDate>
    </item>
    <item>
      <title>REST API란 무엇인가?</title>
      <link>https://dev-cho.tistory.com/67</link>
      <description>&lt;h2 style=&quot;text-align: left;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;REST API란 무엇인가?&lt;/span&gt;&lt;/h2&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;REST API란 Representational State Transfer Application Programming Interface의 약자로, 웹 서비스 간에 데이터를 주고받기 위한 표준 인터페이스입니다. REST API는 HTTP 프로토콜을 기반으로 하며, 클라이언트와 서버 간의 통신에 필요한 데이터를 제공합니다.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;h2 style=&quot;text-align: left;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;REST API의 특징&lt;/span&gt;&lt;/h2&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;REST API는 다양한 클라이언트와 서버 간에 통신을 가능하게 합니다. 이를 위해 REST API는 클라이언트-서버 아키텍처, 상태없는(stateless) 통신, 캐시 가능성, 계층화된 시스템 등을 지원합니다.&lt;/span&gt;&lt;br /&gt;&lt;br /&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;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;클라이언트-서버 아키텍처&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt; REST API는 클라이언트와 서버 간의 역할을 분리하여, 서로간의 독립성을 보장합니다. 클라이언트는 서버에서 데이터를 요청하고, 서버는 해당 데이터를 응답합니다. 이를 통해 클라이언트와 서버 간의 확장성이 높아지며, 각각의 시스템이 독립적으로 변경될 수 있습니다.&lt;/span&gt;&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;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;상태없는(stateless) 통신 &lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;REST API는 요청과 응답 사이에 클라이언트나 서버의 상태를 저장하지 않습니다. 각 요청은 독립적으로 처리되며, 클라이언트나 서버는 이전 요청에 대한 정보를 기억하지 않습니다. 이를 통해 시스템의 확장성이 높아지며, 클라이언트와 서버 간의 의존성이 줄어듭니다.&lt;/span&gt;&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;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;캐시 가능성 &lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;REST API는 캐시를 이용하여 성능을 향상시킬 수 있습니다. 서버는 응답에 캐시 가능성을 표시하여, 클라이언트는 이전에 받은 응답을 재사용할 수 있습니다. 이를 통해 서버의 부하를 줄이고, 클라이언트와 서버 간의 응답 시간을 단축시킬 수 있습니다.&lt;/span&gt;&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;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;계층화된 시스템 &lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;REST API는 다중 계층으로 구성될 수 있습니다. 클라이언트는 중간 서버를 거쳐서 원하는 리소스에 접근할 수 있으며, 서버는 중간 서버를 통해 다른 서버와 통신할 수 있습니다. 이를 통해 시스템의 확장성이 높아지며, 보안성이 강화됩니다.&lt;/span&gt;&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;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;자원 지향적 (resource-oriented) 인터페이스 &lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;REST API는 자원을 중심으로 설계됩니다. 자원은 URI(Uniform Resource Identifier)로 표현되며, HTTP 메서드(GET, POST, PUT, DELETE)를 이용하여 자원을 처리합니다. 이를 통해 REST API는 간결하면서도 확장성이 높은 인터페이스를 제공합니다.&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;h2 style=&quot;text-align: left;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;REST API의 메서드 종류&lt;/span&gt;&lt;/h2&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;REST&amp;nbsp;API의&amp;nbsp;메서드는&amp;nbsp;HTTP&amp;nbsp;메서드를&amp;nbsp;기반으로&amp;nbsp;합니다.&amp;nbsp;HTTP&amp;nbsp;메서드는&amp;nbsp;클라이언트와&amp;nbsp;서버&amp;nbsp;간의&amp;nbsp;요청&amp;nbsp;및&amp;nbsp;응답에&amp;nbsp;사용되는&amp;nbsp;메서드로,&amp;nbsp;REST&amp;nbsp;API에서는&amp;nbsp;다음과&amp;nbsp;같은&amp;nbsp;네&amp;nbsp;가지&amp;nbsp;메서드를&amp;nbsp;이용합니다.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;GET &lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;GET 메서드는 URI에 지정된 리소스의 표시를 요청합니다. 클라이언트는 서버에 요청을 보내면, 서버는 해당 리소스의 내용을 반환합니다. 이 메서드는 주로 데이터를 조회할 때 사용됩니다. 예를&amp;nbsp;들어,&amp;nbsp;게시글을&amp;nbsp;조회하기&amp;nbsp;위해서는&amp;nbsp;GET&amp;nbsp;메서드와&amp;nbsp;게시글의&amp;nbsp;URL을&amp;nbsp;이용하면&amp;nbsp;됩니다.&amp;nbsp;게시글을&amp;nbsp;수정하기&amp;nbsp;위해서는&amp;nbsp;PUT&amp;nbsp;메서드와&amp;nbsp;게시글의&amp;nbsp;URL을&amp;nbsp;이용하면&amp;nbsp;됩니다.&lt;/span&gt;&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;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;POST &lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;POST 메서드는 새로운 리소스를 생성할 때 사용됩니다. 클라이언트는 서버에 요청을 보내면, 서버는 해당 리소스를 생성하고 그 결과를 반환합니다. 이 메서드는 데이터를 추가하거나 업데이트할 때 사용됩니다.&lt;/span&gt;&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;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;PUT &lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;PUT 메서드는 URI에 지정된 리소스를 수정할 때 사용됩니다. 클라이언트는 서버에 요청을 보내면, 서버는 해당 리소스를 수정하고 그 결과를 반환합니다. 이 메서드는 데이터를 수정할 때 사용됩니다.&lt;/span&gt;&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;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;DELETE &lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;DELETE 메서드는 URI에 지정된 리소스를 삭제할 때 사용됩니다. 클라이언트는 서버에 요청을 보내면, 서버는 해당 리소스를 삭제하고 그 결과를 반환합니다. 이 메서드는 데이터를 삭제할 때 사용됩니다.&lt;/span&gt;&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;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;GET, POST, PUT, DELETE 가 나눠진 이유&lt;/span&gt;&lt;/h3&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;HTTP 메서드는 다양한 종류의 요청과 응답에 사용될 수 있으며, REST API에서는 위의 4가지 메서드를 이용하여 다양한 작업을 수행합니다. 각 메서드의 용도를 정해 특정한 메서드에 대한 작업을 할 수 있도록 만들며, 이를 통해 클라이언트와 서버 간의 효율적인 통신이 가능하며, REST API의 기본 구조를 이해하는 데 있어서 중요한 역할을 합니다.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;h2 style=&quot;text-align: left;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;REST API에서 지원하는 데이터 형식&lt;/span&gt;&lt;/h2&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;REST&amp;nbsp;API는&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;REST&amp;nbsp;API에서는&amp;nbsp;다음과&amp;nbsp;같은&amp;nbsp;형식을&amp;nbsp;지원합니다.&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;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;JSON (JavaScript Object Notation) &lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;JSON은 JavaScript에서 사용하는 데이터 형식으로, 가벼우면서도 데이터를 간단하게 표현할 수 있습니다. JSON은 데이터를 Key-Value 형식으로 표현하며, 배열과 객체를 이용하여 다양한 데이터를 표현할 수 있습니다. JSON은 브라우저나 서버 모두에서 쉽게 사용할 수 있으며, REST API에서 가장 많이 사용되는 데이터 형식 중 하나입니다.&lt;/span&gt;&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;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;XML (eXtensible Markup Language) &lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;XML은 태그 형식으로 데이터를 표현하는 데이터 형식입니다. XML은 데이터의 구조를 명확하게 표현할 수 있으며, 다양한 언어에서 지원됩니다. REST API에서는 JSON과 함께 가장 많이 사용되는 데이터 형식 중 하나입니다.&lt;/span&gt;&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;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;Plain Text &lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;Plain Text는 문자열 형태로 데이터를 전송하는 방식입니다. 이 방식은 가장 단순한 형태의 데이터 전송 방식으로, 다른 형식보다는 사용빈도가 적지만, 특정한 경우에 사용될 수 있습니다.&lt;/span&gt;&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;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;HTML &lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;HTML은 웹 페이지를 표시하는 데 사용되는 마크업 언어로, REST API에서도 HTML을 이용하여 데이터를 전송할 수 있습니다. 이 방식은 일반적으로는 사용되지 않지만, 특정한 경우에는 사용될 수 있습니다.&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;h3 style=&quot;text-align: left;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;REST API에서의 다양한 데이터 형식을 지원하는 이유&lt;/span&gt;&lt;/h3&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;REST API에서는 이러한 다양한 데이터 형식을 지원하여, 클라이언트와 서버 간의 데이터 전송을 유연하게 처리할 수 있습니다. 다양한 데이터 형식을 지원하는 이유는 위에 말했듯이 데이터 전송을 유연하게 처리하기 위함이며, 이를 통해 클라이언트와 서버 간의 효율적인 통신이 가능합니다.&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;h2 style=&quot;text-align: left;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;정리&lt;/span&gt;&lt;/h2&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;마지막으로, REST API는 널리 사용되는 표준 인터페이스입니다. 이를 이용하여 다양한 시스템 간의 통신이 가능하며, 다양한 기업에서 이용되고 있습니다.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;</description>
      <category>Web</category>
      <category>rest api</category>
      <category>REST API GET</category>
      <category>REST API HTML</category>
      <category>REST API Plain Text</category>
      <category>REST API POST</category>
      <category>REST API PUT</category>
      <category>REST API 특징</category>
      <category>REST API란 무엇인가?</category>
      <category>REST JSON</category>
      <category>REST xml</category>
      <author>DevReview</author>
      <guid isPermaLink="true">https://dev-cho.tistory.com/67</guid>
      <comments>https://dev-cho.tistory.com/67#entry67comment</comments>
      <pubDate>Mon, 20 Feb 2023 22:35:06 +0900</pubDate>
    </item>
    <item>
      <title>HTTP란 무엇인가? HTTP의 변천사 알아보기</title>
      <link>https://dev-cho.tistory.com/66</link>
      <description>&lt;h2 style=&quot;text-align: left;&quot; data-ke-size=&quot;size26&quot;&gt;HTTP란 무엇인가?&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;HTTP (Hypertext Transfer Protocol)는 인터넷에서 데이터를 주고받는 데 가장 널리 사용되는 프로토콜 중 하나입니다. HTTP는 웹 브라우저와 웹 서버 간의 통신을 지원하며, HTML 문서 및 다른 리소스를 요청하고 응답하는 데 사용됩니다.&lt;br&gt;&lt;br&gt;&lt;/p&gt;
&lt;h2 style=&quot;text-align: left;&quot; data-ke-size=&quot;size26&quot;&gt;HTTP의 역사&lt;/h2&gt;
&lt;h3 style=&quot;text-align: left;&quot; data-ke-size=&quot;size23&quot;&gt;HTTP의 시작&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;HTTP의 역사는 인터넷의 초기에 거슬러 올라갑니다. 1989년, 팀 버너스리(Tim Berners-Lee)는 CERN(유럽입자물리 연구소)에서 작업 중인 프로젝트를 위해 HTTP를 개발했습니다. 그 당시, HTTP는 웹 서버와 클라이언트 간의 간단한 요청-응답 프로토콜이었습니다. 1991년, HTTP의 최초 버전인 HTTP/0.9가 발표되었습니다.&lt;br&gt;&lt;br&gt;HTTP/0.9는 매우 단순한 형식을 가지고 있었습니다. 요청 메시지는 한 줄의 텍스트이며, 응답은 요청한 리소스의 전체 내용이었습니다. 이 버전에서는 HTTP 헤더 및 다른 현대적인 기능이 없었습니다. 이후 HTTP/1.0 버전에서 처음으로 헤더, MIME 타입 등의 현대적인 기능들이 도입되었습니다.&lt;br&gt;&lt;br&gt;&lt;/p&gt;
&lt;h3 style=&quot;text-align: left;&quot; data-ke-size=&quot;size23&quot;&gt;HTTP/1.1의 등장&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;1996년에는 HTTP/1.1이 발표되었습니다. 이 버전은 여러 가지 개선 사항을 포함하고 있습니다. Keep-Alive 커넥션을 사용하여 여러 개의 요청을 단일 TCP 연결에서 처리하고, 캐시 제어 및 범위 요청을 지원하는 등의 기능이 추가되었습니다. 이 버전은 오늘날까지 많이 사용되고 있습니다.&lt;br&gt;&lt;br&gt;&lt;/p&gt;
&lt;h3 style=&quot;text-align: left;&quot; data-ke-size=&quot;size23&quot;&gt;최적화된 HTTP/2&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;2015년, HTTP/2가 발표되었습니다. HTTP/2는 이전 버전과는 달리 바이너리 프로토콜로 구현되어 있으며, 다양한 최적화 기술이 도입되었습니다. 예를 들어, 하나의 TCP 연결에서 여러 개의 요청-응답을 병렬로 처리하는 멀티플렉싱 기능, 데이터 압축 및 서버 푸시 등이 추가되었습니다.&lt;br&gt;&lt;br&gt;&lt;/p&gt;
&lt;h3 style=&quot;text-align: left;&quot; data-ke-size=&quot;size23&quot;&gt;더 나은 성능과 보안을 가진 HTTP3&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;2015년 이후, HTTP/2는 지속적으로 개발되어 왔고, 최근에는 HTTP/3가 발표되어 QUIC(Quick UDP Internet Connections) 프로토콜을 기반으로 하고 있습니다. HTTP/3은 TCP 대신 UDP를 사용하여 더 나은 성능과 보안성을 제공합니다.&lt;br&gt;&lt;br&gt;&lt;/p&gt;
&lt;h2 style=&quot;text-align: left;&quot; data-ke-size=&quot;size26&quot;&gt;HTTP와 웹 기술 발전의 상관관계&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;HTTP의 역사는 웹 기술과 인터넷의 발전과 함께 지속적으로 발전해왔습니다. HTTP는 현재까지도 가장 널리 사용되는 웹 프로토콜 중 하나이며, 웹 기술과 관련된 기술들과 함께 발전해왔습니다.&lt;br&gt;&lt;br&gt;웹 기술이 발전하면서 HTTP도 그에 맞추어 발전해왔습니다. 웹 애플리케이션과 동적인 콘텐츠가 등장하면서 HTTP/1.1에서는 Keep-Alive 커넥션, 파이프라인, Chunked Transfer Encoding 등의 기능이 추가되었습니다. 이러한 기능들은 웹 서버와 클라이언트 간의 통신을 더욱 효율적으로 만들어주었습니다.&lt;br&gt;&lt;br&gt;또한, HTTPS(보안 HTTP)가 등장하면서 HTTP 통신의 보안성이 높아졌습니다. HTTPS는 SSL(보안 소켓 레이어) 또는 TLS(전송 계층 보안)을 사용하여 통신 내용을 암호화하고 인증서를 통해 서버의 신원을 확인합니다.&lt;br&gt;&lt;br&gt;최근에는 HTTP/2와 HTTP/3가 등장하면서 HTTP 통신의 속도와 효율성이 대폭 향상되었습니다. HTTP/2는 멀티플렉싱, 헤더 압축, 서버 푸시 등의 기술을 도입하여 여러 개의 요청-응답을 동시에 처리하고 데이터를 압축하여 빠른 통신을 지원합니다. HTTP/3는 UDP 프로토콜을 사용하여 더 빠르고 안전한 통신을 제공합니다.&lt;br&gt;&lt;br&gt;또한, 최근에는 REST(Representational State Transfer) 아키텍처 스타일을 따르는 API(Application Programming Interface)를 제공하는 서비스가 많아지면서 HTTP의 역할이 더욱 중요해졌습니다. RESTful API는 HTTP 메서드를 이용하여 데이터를 요청하고 응답받는 방식으로 동작하며, 웹 기술의 발전과 함께 HTTP 기술도 계속해서 발전해나가고 있습니다.&lt;br&gt;&lt;br&gt;HTTP는 현재까지도 웹 기술에서 핵심적인 역할을 담당하고 있습니다. 웹 기술의 발전과 함께 HTTP의 기능과 성능이 더욱 발전해나가면서, 더욱 빠르고 안전한 웹 서비스를 제공할 수 있게 되었습니다.&lt;br&gt;&lt;br&gt;&lt;/p&gt;</description>
      <category>Web</category>
      <author>DevReview</author>
      <guid isPermaLink="true">https://dev-cho.tistory.com/66</guid>
      <comments>https://dev-cho.tistory.com/66#entry66comment</comments>
      <pubDate>Sun, 19 Feb 2023 21:48:44 +0900</pubDate>
    </item>
    <item>
      <title>Kotlin sealed class의 사용 방법과 특징 대해 알아보기 : Kotlin 1.5.0에서의 변경 사항</title>
      <link>https://dev-cho.tistory.com/65</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;Kotlin의 sealed class&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;Kotlin에서&amp;nbsp;Sealed&amp;nbsp;class는&amp;nbsp;enum&amp;nbsp;class와&amp;nbsp;비슷한&amp;nbsp;특징을&amp;nbsp;가지고&amp;nbsp;있지만,&amp;nbsp;더&amp;nbsp;많은&amp;nbsp;기능을&amp;nbsp;제공합니다.&amp;nbsp;Sealed&amp;nbsp;class를&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;sealed class는 다음과 같이 선언할 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1676724177722&quot; class=&quot;kotlin&quot; data-ke-language=&quot;kotlin&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sealed class Color {
    object Red : Color()
    object Green : Color()
    object Blue : Color()
}&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;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;위 예제에서 Color는 sealed class로 선언되어 있습니다. sealed class는 자신의 하위 클래스를 가질 수 있으며, 하위 클래스는 sealed class 내부 혹은 외부에 중첩 클래스, 데이터 클래스, 열거형, object 등의 형태로 선언할 수 있습니다. Kotlin 1.5.0 이전까지는 sealed class의 하위 클래스는 모두 같은 파일 내부에서 선언되어야 했지만, 1.5.0에서 해당 파일 외부에서도 상속 받을 수 있도록 변경되었습니다.&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;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;이에 대한 것은 아래 두개 페이지에서 확인이 가능합니다.&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1676724271044&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;Sealed interfaces and more sealed classes freedom : KT-42433&quot; data-og-description=&quot;May 2021 1.5.0 includes support for [sealed interfaces](https://kotlinlang.org/docs/whatsnew15.html#sealed-interfaces) and [wider sealed class hierarchies](https://kotlinlang.org/docs/whatsnew15.html#package-wide-sealed-class-hierarchies) October 2020 Kotl&quot; data-og-host=&quot;youtrack.jetbrains.com&quot; data-og-source-url=&quot;https://youtrack.jetbrains.com/issue/KT-42433&quot; data-og-url=&quot;https://youtrack.jetbrains.com/issue/KT-42433&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://youtrack.jetbrains.com/issue/KT-42433&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://youtrack.jetbrains.com/issue/KT-42433&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Sealed interfaces and more sealed classes freedom : KT-42433&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;May 2021 1.5.0 includes support for [sealed interfaces](https://kotlinlang.org/docs/whatsnew15.html#sealed-interfaces) and [wider sealed class hierarchies](https://kotlinlang.org/docs/whatsnew15.html#package-wide-sealed-class-hierarchies) October 2020 Kotl&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;youtrack.jetbrains.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;figure id=&quot;og_1676724296844&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;What's new in Kotlin 1.5.0 | Kotlin&quot; data-og-description=&quot; &quot; data-og-host=&quot;kotlinlang.org&quot; data-og-source-url=&quot;https://kotlinlang.org/docs/whatsnew15.html#package-wide-sealed-class-hierarchies&quot; data-og-url=&quot;https://kotlinlang.org/docs/whatsnew15.html&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/MvFsx/hyREKd9Bvq/NTQeVKbjVNZZ8kkGoO6oZk/img.png?width=800&amp;amp;height=400&amp;amp;face=0_0_800_400&quot;&gt;&lt;a href=&quot;https://kotlinlang.org/docs/whatsnew15.html#package-wide-sealed-class-hierarchies&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://kotlinlang.org/docs/whatsnew15.html#package-wide-sealed-class-hierarchies&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/MvFsx/hyREKd9Bvq/NTQeVKbjVNZZ8kkGoO6oZk/img.png?width=800&amp;amp;height=400&amp;amp;face=0_0_800_400');&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;What's new in Kotlin 1.5.0 | Kotlin&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;kotlinlang.org&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;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;Android에서 sealed class 사용 예제&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;안드로이드에서 Sealed class를 사용한 예제로는 네트워크 API 통신 결과 처리가 있습니다. 아래는 API 요청 결과를 처리하는 sealed class 예시 코드입니다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1676724667733&quot; class=&quot;kotlin&quot; data-ke-language=&quot;kotlin&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sealed class NetworkResult&amp;lt;out T&amp;gt; {
    data class Success&amp;lt;out T&amp;gt;(val data: T) : NetworkResult&amp;lt;T&amp;gt;()
    data class Error(val exception: Exception) : NetworkResult&amp;lt;Nothing&amp;gt;()
    object Loading : NetworkResult&amp;lt;Nothing&amp;gt;()
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;위 코드는 NetworkResult 라는 sealed class를 선언하고, Success, Error, Loading 클래스를 내부 클래스로 선언하고 있습니다. Success 클래스는 NetworkResult 클래스를 상속하며, data 필드를 가지고 있습니다. Error 클래스는 NetworkResult 클래스를 상속하지만, data 필드는 없으며, exception 필드를 가지고 있습니다. Loading 클래스는 NetworkResult 클래스를 상속하지 않고, 데이터 필드를 가지지 않습니다.&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;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;위 코드를 사용하여 API 결과를 처리하는 함수를 아래와 같이 만들 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1676724763206&quot; class=&quot;kotlin&quot; data-ke-language=&quot;kotlin&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;fun &amp;lt;T&amp;gt; handleNetworkResult(result: NetworkResult&amp;lt;T&amp;gt;): T? {
    return when (result) {
        is NetworkResult.Success -&amp;gt; result.data
        is NetworkResult.Error -&amp;gt; null
        NetworkResult.Loading -&amp;gt; null
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;이 함수는 handleNetworkResult라는 이름을 가진 제네릭 함수입니다. 이 함수는 인자로 NetworkResult를 받아들이며, 이는 sealed class의 세 가지 서브클래스(Success, Error, Loading) 중 하나일 수 있습니다.&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;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;when 식을 사용하여 서브클래스 타입별로 처리를 하며, Success 타입이면 데이터를 반환하고, Error 타입이면 null을 반환하게 됩니다. 마지막으로 Loading 타입이면 null을 반환하게 됩니다. 만약 Error나 Loading에 처리가 필요하다면 해당 블록에 별도 처리를 넣으면 됩니다.&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;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;이렇게 handleNetworkResult 함수를 사용하면, API 결과를 쉽게 처리할 수 있습니다. 예를 들어, 다음과 같이 사용할 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1676724787139&quot; class=&quot;kotlin&quot; data-ke-language=&quot;kotlin&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;val result: NetworkResult&amp;lt;User&amp;gt; = apiService.getUser(userId)
val user = handleNetworkResult(result)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;getUser&amp;nbsp;함수가&amp;nbsp;NetworkResult&amp;lt;User&amp;gt;&amp;nbsp;타입으로&amp;nbsp;결과를&amp;nbsp;반환하므로,&amp;nbsp;handleNetworkResult&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;/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;자 이제 사용 예제를 알아보았으니 sealed class의 특징에 대해 알아보겠습니다.&lt;/p&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;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;sealed class의 특징&lt;/span&gt;&lt;/h3&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;sealed class는 다음과 같은 특징을 가지고 있습니다.&lt;/span&gt;&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;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;1. 상속 가능&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;sealed class는 상속이 가능합니다. 하위 클래스를 추가하는 경우, sealed class의 내부 혹은 외부에 선언된 클래스에서 모두 가능합니다. 컴파일러는 어느 곳에서 sealed class가 상속 받던 하위 타입을 모두 인식합니다.&lt;/span&gt;&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;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;2. 클래스 객체 생성 불가&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;sealed class는 객체를 생성할 수 없습니다. 따라서, sealed class는 추상 클래스와 같은 역할을 합니다. 하위 클래스는 object 형태로만 선언할 수 있으며, 생성된 하위 클래스의 인스턴스를 사용합니다.&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;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;sealed class의 특징&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;Kotlin에서 sealed class를 사용하면 다양한 장점을 누릴 수 있습니다.&lt;/span&gt;&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;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;안정성 보장&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;sealed class는 클래스 계층 구조를 정의할 때 사용됩니다. 이를 사용하면 상속 가능한 클래스의 종류를 제한할 수 있기 때문에, 안정적인 코드를 작성할 수 있습니다. sealed class는 자신이 포함된 파일 안에서만 상속이 가능하므로, 다른 클래스가 sealed class를 상속하더라도 파일 내부에서 정의된 클래스만을 상속할 수 있습니다. 이를 통해 안정적인 코드를 유지할 수 있습니다.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;코드 중복 방지&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;sealed class를 사용하면 상속 가능한 클래스의 종류를 제한할 수 있습니다. 이를 통해 상속 가능한 클래스의 종류를 사전에 정의하고 관리할 수 있으며, 이를 통해 코드 중복을 방지할 수 있습니다.&lt;/span&gt;&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;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;패턴 매칭(Pattern Matching)을 강화&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;sealed class는 패턴 매칭을 강화하는 데에도 사용됩니다. 패턴 매칭은 코드를 작성할 때 런타임 오류를 방지할 수 있는 강력한 도구입니다. sealed class는 자신의 하위 클래스에 대한 패턴 매칭을 제공하기 때문에, 코드의 안정성을 높일 수 있습니다.&lt;/span&gt;&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;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;다형성 활용&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;sealed class는 추상 클래스와 비슷한 역할을 합니다. 하지만 sealed class는 상속 가능한 클래스의 종류를 제한할 수 있기 때문에, 다형성을 활용하는 데에 더욱 적합합니다. 이를 통해 유연하면서도 안정적인 코드를 작성할 수 있습니다.&lt;/span&gt;&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;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;코드의 가독성 향상&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;sealed class를 사용하면 상속 가능한 클래스의 종류를 사전에 정의하고 관리할 수 있기 때문에, 코드의 가독성을 높일 수 있습니다. sealed class는 여러 하위 클래스를 포함할 수 있기 때문에, 하위 클래스가 어떤 종류의 객체를 나타내는지 쉽게 파악할 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;Kotlin에서 sealed class는 다양한 장점을 가지고 있습니다. 이를 통해 안정적이고 유연하며 가독성이 높은 코드를 작성할 수 있습니다.&lt;/span&gt;&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;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;정리하며&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;sealed class는 Kotlin의 가장 강력한 기능중 하나입니다. sealed class의 장점을 잘 이해해서 쓰면 매우 안정성 높은 코드를 작성할 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Kotlin/Kotlin 기초</category>
      <category>Kotlin sealed class</category>
      <category>Kotlin sealed class 상속</category>
      <category>Sealed Class</category>
      <category>sealed class 1.5.0</category>
      <category>sealed class enum</category>
      <category>sealed class 사용 방법</category>
      <category>sealed class 상속</category>
      <category>sealed class 안정성</category>
      <category>sealed class 특징</category>
      <category>코틀린 Sealed Class</category>
      <author>DevReview</author>
      <guid isPermaLink="true">https://dev-cho.tistory.com/65</guid>
      <comments>https://dev-cho.tistory.com/65#entry65comment</comments>
      <pubDate>Sat, 18 Feb 2023 21:57:52 +0900</pubDate>
    </item>
    <item>
      <title>Kotlin apply, with, let, also, run의 차이 구현체를 중심으로 알아보기</title>
      <link>https://dev-cho.tistory.com/64</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;apply, with, let, also, run의 차이는 무엇일까?&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;Kotlin에서는&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;apply,&amp;nbsp;with,&amp;nbsp;let,&amp;nbsp;also,&amp;nbsp;run&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;하겠습니다.&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;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;*구현체에서 contract { ... } 부분은 범위를 넘어서기 때문에 생략합니다.&lt;/b&gt;&lt;/span&gt;&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;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;apply 함수&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;apply 함수는 수신 객체를 인자로 받아 람다식을 실행하고, 수신 객체 자체를 반환합니다. 주로 객체를 생성하고 그 객체의 프로퍼티를 초기화하는 데 사용됩니다.&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;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;apply 함수의 구현체는 다음과 같습니다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1676615213350&quot; class=&quot;kotlin&quot; data-ke-language=&quot;kotlin&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;public inline fun &amp;lt;T&amp;gt; T.apply(block: T.() -&amp;gt; Unit): T {
    block()
    return this
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;apply 함수는 확장 함수로 정의되어 있으며, 제네릭 타입 T를 인자로 받습니다. 람다식인 block은 T 타입을 수신 객체로 받으며, 반환값이 없습니다. 또한 apply 함수는 block 람다식을 수신 객체로 실행한 뒤, 해당 수신 객체를 반환합니다. 이를 통해, 수신 객체의 초기화와 반환을 한번에 처리할 수 있습니다.&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;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;예제는 다음과 같습니다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1676614865890&quot; class=&quot;kotlin&quot; data-ke-language=&quot;kotlin&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;val person = Person().apply {
    name = &quot;John&quot;
    age = 30
    address = &quot;Seoul, Korea&quot;
}&lt;/code&gt;&lt;/pre&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;위 예제에서 Person 객체를 생성하고, apply 함수를 사용하여 초기화합니다. 이때 apply 함수는 Person 객체를 반환하므로, person 변수에는 초기화된 Person 객체가 할당됩니다.&lt;/span&gt;&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;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;with 함수&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;with 함수는 수신 객체와 람다식을 인자로 받아 람다식을 실행하고, 람다식의 결과를 반환합니다. with 함수는 객체의 메서드를 호출할 때 자주 사용됩니다.&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;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;with 함수의 구현체는 다음과 같습니다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1676615254035&quot; class=&quot;kotlin&quot; data-ke-language=&quot;kotlin&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;public inline fun &amp;lt;T, R&amp;gt; with(receiver: T, block: T.() -&amp;gt; R): R {
    return receiver.block()
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;with 함수는 확장 함수로 정의되어 있으며, 제네릭 타입 T와 R을 인자로 받습니다. block 람다식은 T 타입을 수신 객체로 받고, R 타입을 반환하며, with 함수는 receiver 인자로 전달된 수신 객체에 대해 block 람다식을 실행한 뒤, 해당 결과를 반환합니다. 이를 통해, 수신 객체의 메서드를 호출하면서도 반환값을 처리할 수 있습니다.&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;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;이에 대한 예제는 아래와 같습니다.&lt;/span&gt;&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;pre id=&quot;code_1676614889949&quot; class=&quot;kotlin&quot; data-ke-language=&quot;kotlin&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;val person = Person()
with(person) {
    name = &quot;John&quot;
    age = 30
    address = &quot;Seoul, Korea&quot;
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;위 예제에서 Person 객체를 생성한 뒤, with 함수를 사용하여 Person 객체의 프로퍼티를 초기화합니다. 이때 with 함수는 람다식의 결과를 반환하므로, 이 경우에는 반환값이 없습니다.&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;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;let 함수&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;let 함수는 수신 객체를 인자로 받아 람다식을 실행하고, 람다식의 결과를 반환합니다. let 함수는 널 값을 체크하고, 널 값이 아닐 때만 람다식을 실행합니다.&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;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;let 함수의 구현체는 다음과 같습니다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1676615343572&quot; class=&quot;kotlin&quot; data-ke-language=&quot;kotlin&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;public inline fun &amp;lt;T, R&amp;gt; T.let(block: (T) -&amp;gt; R): R {
    return block(this)
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;let 함수는 확장 함수로 정의되어 있으며, 제네릭 타입 T와 R을 인자로 받습니다. block 람다식은 T 타입을 인자로 받고, R 타입을 반환합니다.&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;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;이에 대한 예제는 다음과 같습니다. 아래 예제에서 name 변수는 널이 아닌 값인 &quot;John&quot;을 가지고 있습니다. 따라서 let 함수는 람다식을 실행하고, &quot;John&quot; 값을 출력합니다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1676614913298&quot; class=&quot;kotlin&quot; data-ke-language=&quot;kotlin&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;val name: String? = &quot;John&quot;
name?.let {
    println(it) // &quot;John&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;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;아래 예제의 name 변수는 널 값을 가지고 있습니다. 따라서 let 함수는 람다식을 실행하지 않습니다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1676614932785&quot; class=&quot;kotlin&quot; data-ke-language=&quot;kotlin&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;val name: String? = null
name?.let {
    println(it) // 실행되지 않음
}&lt;/code&gt;&lt;/pre&gt;
&lt;div&gt;&amp;nbsp;&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;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;also&amp;nbsp;함수&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;also 함수는 apply 함수와 비슷하지만, also 함수는 객체의 상태를 변경하지 않고 객체 자체를 반환합니다. also 함수는 객체를 중간에 거쳐가는 값으로 사용할 때 유용합니다.&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;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;also 함수의 구현체는 다음과 같습니다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1676615423391&quot; class=&quot;kotlin&quot; data-ke-language=&quot;kotlin&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;public inline fun &amp;lt;T&amp;gt; T.also(block: (T) -&amp;gt; Unit): T {
    block(this)
    return this
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;also 함수는 확장 함수로 정의되어 있으며, 제네릭 타입 T를 인자로 받습니다. block 람다식은 T 타입을 인자로 받고, 반환값이 없습니다. 또한 also 함수는 block 람다식을 수신 객체로 실행한 뒤, 해당 수신 객체를 반환합니다. 이를 통해, 수신 객체를 중간에 거쳐가는 값으로 사용할 수 있습니다.&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;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;이에 대한 예제는 다음과 같습니다. 아래 예제에서는 Person 객체를 생성한 뒤, also 함수를 사용하여 Person 객체의 프로퍼티를 초기화합니다. 이때 also 함수는 Person 객체를 반환하므로, personWithDetails 변수에는 초기화된 Person 객체가 할당됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1676615054012&quot; class=&quot;kotlin&quot; data-ke-language=&quot;kotlin&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;val person = Person()
val personWithDetails = person.also {
    it.name = &quot;John&quot;
    it.age = 30
    it.address = &quot;Seoul, Korea&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;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;run 함수&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;run 함수는 수신 객체와 람다식을 인자로 받아 람다식을 실행하고, 람다식의 결과를 반환합니다. run 함수는 with 함수와 비슷하지만, run 함수는 람다식 내에서 수신 객체를 this 키워드로 참조할 수 있습니다.&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;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;run 함수의 구현체는 다음과 같습니다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1676615533132&quot; class=&quot;kotlin&quot; data-ke-language=&quot;kotlin&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;public inline fun &amp;lt;T, R&amp;gt; T.run(block: T.() -&amp;gt; R): R {
    return block()
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;run 함수는 확장 함수로 정의되어 있으며, 제네릭 타입 T와 R을 인자로 받습니다. block 람다식은 T 타입을 수신 객체로 받고, R 타입을 반환합니다. 그리고 run 함수는 block 람다식을 수신 객체로 실행한 뒤, 해당 결과를 반환합니다. 이를 통해, 람다식 내에서 수신 객체를 this 키워드로 참조할 수 있습니다.&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;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;이에 대한 예제는 다음과 같습니다. 다음 예제에서는 Person 객체를 생성하고, run 함수를 사용하여 Person 객체의 프로퍼티를 초기화합니다. 이때 run 함수는 람다식의 결과인 this를 반환하므로, person 변수에는 초기화된 Person 객체가 할당됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1676615066992&quot; class=&quot;kotlin&quot; data-ke-language=&quot;kotlin&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;val person = Person().run {
    name = &quot;John&quot;
    age = 30
    address = &quot;Seoul, Korea&quot;
    this
}&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 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;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;Kotlin의 apply, with, run, let, also 에 대한 의의와 단점&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&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;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;하지만 너무 다양하고 내부 기능이 비슷해서 너무 남발할 경우 오히려 유지 보수성이 나빠질 수 있다는 단점이 있습니다. 다른 팀원들과 함께 어떤걸 쓰고 안쓸지를 명확히 결정하고 쓰는 것이 좋을 것으로 보입니다.&lt;/span&gt;&lt;/p&gt;</description>
      <category>Kotlin/Kotlin 기초</category>
      <category>kotlin</category>
      <category>Kotlin also</category>
      <category>kotlin apply</category>
      <category>Kotlin apply with</category>
      <category>Kotlin apply with let also run</category>
      <category>kotlin run</category>
      <category>kotlin with</category>
      <category>코틀린 also</category>
      <category>코틀린 apply</category>
      <category>코틀린 with</category>
      <author>DevReview</author>
      <guid isPermaLink="true">https://dev-cho.tistory.com/64</guid>
      <comments>https://dev-cho.tistory.com/64#entry64comment</comments>
      <pubDate>Fri, 17 Feb 2023 22:25:07 +0900</pubDate>
    </item>
    <item>
      <title>Kotlin object 사용해 싱글톤 패턴 구현하기 : object, companion object는 언제 초기화 되는가?</title>
      <link>https://dev-cho.tistory.com/63</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;Kotlin의 object는 싱글톤 패턴을 구현하는 방법이다.&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Kotlin에서 object는 객체 지향 프로그래밍에서 싱글톤 패턴을 구현하는 방법 중 하나입니다. 이를 통해 오직 하나의 객체만 생성되어 사용될 수 있도록 보장할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;object를 사용하면 클래스 정의와 동시에 객체를 생성할 수 있습니다. 이 객체는 해당 클래스의 인스턴스이며, 클래스의 인스턴스 메서드와 프로퍼티에 접근할 수 있습니다. 예를 들어, 다음과 같은 코드를 작성할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1676547442857&quot; class=&quot;kotlin&quot; data-ke-language=&quot;kotlin&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;object MySingleton {
    fun doSomething() {
        // ...
    }
}

fun main() {
    MySingleton.doSomething()
}&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;위 코드에서 MySingleton이라는 이름의 싱글톤 객체를 정의하고 있습니다. doSomething 메서드를 호출할 때에는 MySingleton.doSomething() 형태로 호출하면 됩니다.&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;companion object 사용해 Java의 static 변수, 함수 만들기&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Kotlin의 object는 자바에서의 static과 비슷한 역할을 수행할 수도 있습니다. 예를 들어, companion object를 사용하여 클래스 수준의 정적 메서드와 프로퍼티를 정의할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1676547477739&quot; class=&quot;kotlin&quot; data-ke-language=&quot;kotlin&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;class MyClass {
    companion object {
        const val SOME_CONSTANT = &quot;some value&quot;
        fun doSomething() {
            // ...
        }
    }
}

fun main() {
    println(MyClass.SOME_CONSTANT)
    MyClass.doSomething()
}&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;코드에서&amp;nbsp;companion&amp;nbsp;object를&amp;nbsp;사용하여&amp;nbsp;SOME_CONSTANT와&amp;nbsp;doSomething을&amp;nbsp;MyClass의&amp;nbsp;정적&amp;nbsp;멤버로&amp;nbsp;만들어줍니다.&amp;nbsp;companion&amp;nbsp;object는&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;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;object는 그 자체로 싱글톤 객체를 가리키는 변수이기 때문에 인자로 전달할 수 있다&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Kotlin의 object는 다른 객체와 마찬가지로 함수 인자로 전달하거나 반환할 수 있습니다. 이를 통해 함수나 메서드에서 싱글톤 객체를 사용할 수 있습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1676547501426&quot; class=&quot;kotlin&quot; data-ke-language=&quot;kotlin&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;fun doSomethingWithSingleton(singleton: MySingleton) {
    singleton.doSomething()
}

fun main() {
    val mySingleton = MySingleton
    doSomethingWithSingleton(mySingleton)
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위&amp;nbsp;코드에서&amp;nbsp;doSomethingWithSingleton&amp;nbsp;함수는&amp;nbsp;MySingleton&amp;nbsp;객체를&amp;nbsp;인자로&amp;nbsp;받아&amp;nbsp;doSomething&amp;nbsp;메서드를&amp;nbsp;호출합니다.&amp;nbsp;main&amp;nbsp;함수에서&amp;nbsp;MySingleton을&amp;nbsp;생성하여&amp;nbsp;이를&amp;nbsp;doSomethingWithSingleton&amp;nbsp;함수에&amp;nbsp;전달하고&amp;nbsp;있습니다.&lt;br /&gt;&lt;br /&gt;Kotlin의&amp;nbsp;object를&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;합니다.&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;object의 초기화 시점&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Kotlin의&amp;nbsp;object를&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;않습니다.&lt;br /&gt;&lt;br /&gt;Kotlin에서는 object가 클래스의 정적 멤버와 함께 초기화됩니다. 즉, 클래스가 로드될 때 object가 생성되고 초기화됩니다. 이때 object는 companion object일 수도 있고, 단순히 object일 수도 있습니다. 이에 대한 글은 아래 페이지의 가장 아래쪽에서 다음과 같이 적힌 것에서 확인됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;A companion object is initialized when the corresponding class is loaded that matches the semantics of a Java static initializer.&lt;/span&gt;&lt;/blockquote&gt;
&lt;figure id=&quot;og_1676548230415&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;Object expressions and declarations | Kotlin&quot; data-og-description=&quot; &quot; data-og-host=&quot;kotlinlang.org&quot; data-og-source-url=&quot;https://kotlinlang.org/docs/object-declarations.html#semantic-difference-between-object-expressions-and-declarations&quot; data-og-url=&quot;https://kotlinlang.org/docs/object-declarations.html&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/qMjWz/hyRDZB03u1/opUlW9KjEeXiNUKVqkCz8K/img.png?width=800&amp;amp;height=400&amp;amp;face=0_0_800_400&quot;&gt;&lt;a href=&quot;https://kotlinlang.org/docs/object-declarations.html#semantic-difference-between-object-expressions-and-declarations&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://kotlinlang.org/docs/object-declarations.html#semantic-difference-between-object-expressions-and-declarations&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/qMjWz/hyRDZB03u1/opUlW9KjEeXiNUKVqkCz8K/img.png?width=800&amp;amp;height=400&amp;amp;face=0_0_800_400');&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;Object expressions and declarations | Kotlin&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;kotlinlang.org&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;들어,&amp;nbsp;다음과&amp;nbsp;같은&amp;nbsp;코드를&amp;nbsp;작성해보겠습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1676547808848&quot; class=&quot;kotlin&quot; data-ke-language=&quot;kotlin&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;class MyClass {
    companion object {
        val message = &quot;Hello, world!&quot;

        init {
            println(&quot;Initializing companion object&quot;)
        }
    }
}

fun main() {
    println(&quot;Before accessing companion object&quot;)
    println(MyClass.message)
    println(&quot;After accessing companion object&quot;)
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위&amp;nbsp;코드에서&amp;nbsp;MyClass는&amp;nbsp;companion&amp;nbsp;object를&amp;nbsp;가지고&amp;nbsp;있습니다.&amp;nbsp;message는&amp;nbsp;companion&amp;nbsp;object의&amp;nbsp;프로퍼티이며,&amp;nbsp;init&amp;nbsp;블록에서&amp;nbsp;초기화됩니다.&lt;br /&gt;&lt;br /&gt;main&amp;nbsp;함수에서&amp;nbsp;MyClass.message를&amp;nbsp;호출하면&amp;nbsp;companion&amp;nbsp;object가&amp;nbsp;초기화됩니다.&amp;nbsp;이때&amp;nbsp;init&amp;nbsp;블록이&amp;nbsp;실행되며,&amp;nbsp;&quot;Initializing&amp;nbsp;companion&amp;nbsp;object&quot;&amp;nbsp;메시지가&amp;nbsp;출력됩니다.&amp;nbsp;이후&amp;nbsp;message&amp;nbsp;프로퍼티에&amp;nbsp;접근하여&amp;nbsp;&quot;Hello,&amp;nbsp;world!&quot;&amp;nbsp;문자열이&amp;nbsp;출력됩니다.&lt;br /&gt;&lt;br /&gt;따라서&amp;nbsp;Kotlin의&amp;nbsp;object는&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;&lt;/p&gt;</description>
      <category>Kotlin/Kotlin 기초</category>
      <category>companion object</category>
      <category>Java Static Kotlin</category>
      <category>kotlin</category>
      <category>kotlin companion object</category>
      <category>kotlin object</category>
      <category>Kotlin object init</category>
      <category>Kotlin 싱글톤</category>
      <category>Singleton</category>
      <category>싱글톤</category>
      <category>코틀린 Object</category>
      <author>DevReview</author>
      <guid isPermaLink="true">https://dev-cho.tistory.com/63</guid>
      <comments>https://dev-cho.tistory.com/63#entry63comment</comments>
      <pubDate>Thu, 16 Feb 2023 20:52:11 +0900</pubDate>
    </item>
    <item>
      <title>Kotlin var, val, const 의 의미와 차이 한 번에 정리하기 : 불변 변수와 메모리에 올라가는 시점을 기준으로 정리하기</title>
      <link>https://dev-cho.tistory.com/62</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span&gt;var, val, const 각각은 언제 사용되는가&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;Kotlin&lt;/span&gt;&lt;span&gt;을&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;사용하고&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;있다면&lt;/span&gt;&lt;span&gt;, var, val&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;및&lt;/span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;const&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;키워드가&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;익숙할&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;것입니다&lt;/span&gt;&lt;span&gt;.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;이&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;세&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;가지&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;키워드는&lt;/span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;Kotlin&lt;/span&gt;&lt;span&gt;에서&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;변수를&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;선언하는&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;방법을&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;제어하는&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;데&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;사용됩니다&lt;/span&gt;&lt;span&gt;.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;이번&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;글에서는&lt;/span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;Kotlin&lt;/span&gt;&lt;span&gt;에서&lt;/span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;var, val&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;및&lt;/span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;const&lt;/span&gt;&lt;span&gt;를&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;사용하는&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;방법과&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;각각의&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;차이점에&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;대해&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;알아보겠습니다&lt;/span&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;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span&gt;var&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;var&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;키워드는&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;변수를&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;선언하는&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;데&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;사용됩니다&lt;/span&gt;&lt;span&gt;.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;변수는&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;값을&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;변경할&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;수&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;있는&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;데이터를&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;저장하는&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;데&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;사용됩니다&lt;/span&gt;&lt;span&gt;.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;변수는&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;선언과&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;동시에&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;초기화될&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;필요는&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;없지만&lt;/span&gt;&lt;span&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;초기화되지&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;않은&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;변수는&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;사용하기&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;전에&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;반드시&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;초기화해야&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;합니다&lt;/span&gt;&lt;span&gt;.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;다음은&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;var&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;키워드를&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;사용하여&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;변수를&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;선언하는&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;방법의&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;예입니다&lt;/span&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;pre id=&quot;code_1676470375614&quot; class=&quot;gml&quot; data-ke-language=&quot;kotlin&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;var x = 10 x = 20&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 data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;이&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;예제에서&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;var&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;키워드를&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;사용하여&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;x&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;변수를&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;선언하고&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;초기값으로&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;10&lt;/span&gt;&lt;span&gt;을&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;할당합니다&lt;/span&gt;&lt;span&gt;.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;그런&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;다음&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;x&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;변수의&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;값을&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;20&lt;/span&gt;&lt;span&gt;으로&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;변경합니다&lt;/span&gt;&lt;span&gt;. var&lt;/span&gt;&lt;span&gt;로&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;선언된&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;변수는&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;언제든지&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;값을&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;변경할&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;수&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;있습니다&lt;/span&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;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span&gt;val&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;val&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;키워드는&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;불변&lt;/span&gt;&lt;span&gt;(immutable)&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;변수를&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;선언하는&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;데&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;사용됩니다&lt;/span&gt;&lt;span&gt;. val&lt;/span&gt;&lt;span&gt;로&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;선언된&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;변수는&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;값을&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;변경할&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;수&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;없으며&lt;/span&gt;&lt;span&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;선언과&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;동시에&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;초기화되어야&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;합니다&lt;/span&gt;&lt;span&gt;.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;다음은&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;val&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;키워드를&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;사용하여&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;변수를&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;선언하는&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;방법의&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;예입니다&lt;/span&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;pre id=&quot;code_1676470375616&quot; class=&quot;angelscript&quot; data-ke-language=&quot;kotlin&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;val x = 10&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;&lt;span&gt;이&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;예제에서&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;val&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;키워드를&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;사용하여&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;x&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;변수를&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;선언하고&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;초기값으로&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;10&lt;/span&gt;&lt;span&gt;을&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;할당합니다&lt;/span&gt;&lt;span&gt;. val&lt;/span&gt;&lt;span&gt;로&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;선언된&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;변수는&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;값을&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;변경할&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;수&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;없으므로&lt;/span&gt;&lt;span&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;이후에&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;x&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;변수의&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;값을&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;변경하려고&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;하면&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;컴파일&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;오류가&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;발생합니다&lt;/span&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;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span&gt;const&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;const&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;키워드는&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;val&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;키워드와&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;유사하지만&lt;/span&gt;&lt;span&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;차이점이&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;있습니다&lt;/span&gt;&lt;span&gt;. const&lt;/span&gt;&lt;span&gt;로&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;선언된&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;변수는&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;값을&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;변경할&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;수&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;없으며&lt;/span&gt;&lt;span&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;선언과&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;동시에&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;초기화되어야&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;합니다&lt;/span&gt;&lt;span&gt;.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;그러나&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt;로&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;선언된&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;변수는&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;컴파일&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;타임&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;상수&lt;/span&gt;&lt;span&gt;(constant)&lt;/span&gt;&lt;span&gt;로&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;간주되므로&lt;/span&gt;&lt;span&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;런타임&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;시&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;값이&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;변경되지&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;않습니다&lt;/span&gt;&lt;span&gt;. const&lt;/span&gt;&lt;span&gt;는&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;전역&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;상수&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;또는&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;클래스&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;수준&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;상수로만&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;선언할&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;수&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;있습니다&lt;/span&gt;&lt;span&gt;.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;다음은&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;const&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;키워드를&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;사용하여&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;상수를&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;선언하는&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;방법의&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;예입니다&lt;/span&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;pre id=&quot;code_1676470375619&quot; class=&quot;angelscript&quot; data-ke-language=&quot;kotlin&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;const val PI = 3.14&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 data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;이&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;예제에서&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;const&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;키워드를&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;사용하여&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;PI&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;상수를&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;선언하고&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;초기값으로&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;3.14&lt;/span&gt;&lt;span&gt;를&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;할당합니다&lt;/span&gt;&lt;span&gt;. const&lt;/span&gt;&lt;span&gt;로&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;선언된&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;상수는&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;값을&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;변경할&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&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;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span&gt;var, val, const의 차이 알아보기&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;앞서&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;설명한&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;var, val, const&lt;/span&gt;&lt;span&gt;는&lt;/span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;Kotlin&lt;/span&gt;&lt;span&gt;에서&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;변수를&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;선언하는&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;세&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;가지&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;방법입니다&lt;/span&gt;&lt;span&gt;.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;다음으로&lt;/span&gt;&lt;span&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;각각의&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;차이점을&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;살펴보겠습니다&lt;/span&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;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span&gt;var vs val&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;var&lt;/span&gt;&lt;span&gt;와&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;val&lt;/span&gt;&lt;span&gt;의&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;가장&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;큰&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;차이점은&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;변경&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;가능성입니다&lt;/span&gt;&lt;span&gt;. var&lt;/span&gt;&lt;span&gt;로&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;선언된&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;변수는&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;값을&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;변경할&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;수&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;있지만&lt;/span&gt;&lt;span&gt;, val&lt;/span&gt;&lt;span&gt;로&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;선언된&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;변수는&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;값을&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;변경할&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;수&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;없습니다&lt;/span&gt;&lt;span&gt;.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;즉&lt;/span&gt;&lt;span&gt;, val&lt;/span&gt;&lt;span&gt;로&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;선언된&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;변수는&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;불변&lt;/span&gt;&lt;span&gt;(immutable)&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;변수입니다&lt;/span&gt;&lt;span&gt;.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;이러한&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;불변&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;변수는&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;코드의&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;가독성을&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;높이고&lt;/span&gt;&lt;span&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;디버깅을&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;쉽게&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;만들어&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;줍니다&lt;/span&gt;&lt;span&gt;.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;따라서&lt;/span&gt;&lt;span&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;값이&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;변경되지&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;않는&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;변수를&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;선언할&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;때는&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;val&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;키워드를&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;사용하는&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;것이&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;좋습니다&lt;/span&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;pre id=&quot;code_1676470375621&quot; class=&quot;gml&quot; data-ke-language=&quot;kotlin&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;var x = 10 x = 20 // OK
val y = 10 y = 20 // 컴파일 오류&lt;/code&gt;&lt;/pre&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;span&gt;val vs const&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;val&lt;/span&gt;&lt;span&gt;과&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt;의&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;차이점은&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;변수가&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;컴파일&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;타임&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;상수&lt;/span&gt;&lt;span&gt;(constant)&lt;/span&gt;&lt;span&gt;인지&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;아닌지입니다&lt;/span&gt;&lt;span&gt;. val&lt;/span&gt;&lt;span&gt;은&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;런타임&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;상수&lt;/span&gt;&lt;span&gt;(runtime constant)&lt;/span&gt;&lt;span&gt;입니다&lt;/span&gt;&lt;span&gt;.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;이는&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;변수가&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;선언과&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;동시에&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;초기화되고&lt;/span&gt;&lt;span&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;이후에&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;값을&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;변경할&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;수&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;없다는&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;것을&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;의미합니다&lt;/span&gt;&lt;span&gt;.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;하지만&lt;/span&gt;&lt;span&gt;, val&lt;/span&gt;&lt;span&gt;은&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;런타임&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;상수이므로&lt;/span&gt;&lt;span&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;변수의&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;초기화&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;값이&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;런타임에&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;결정됩니다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt;는&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;컴파일&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;타임&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;상수입니다&lt;/span&gt;&lt;span&gt;.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;즉&lt;/span&gt;&lt;span&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;변수가&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;선언될&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;때&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;이미&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;초기화되고&lt;/span&gt;&lt;span&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;이후에&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;값을&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;변경할&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;수&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;없습니다&lt;/span&gt;&lt;span&gt;. const&lt;/span&gt;&lt;span&gt;는&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;전역&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;상수&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;또는&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;클래스&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;수준&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;상수로만&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;선언할&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;수&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;있습니다&lt;/span&gt;&lt;span&gt;. const&lt;/span&gt;&lt;span&gt;로&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;선언된&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;변수는&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;컴파일&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;시점에&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;값을&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;결정하므로&lt;/span&gt;&lt;span&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;런타임에는&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;값이&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;변경되지&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;않습니다&lt;/span&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;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1676470375624&quot; class=&quot;angelscript&quot; data-ke-language=&quot;kotlin&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;const val PI = 3.14
val x = PI * 2 // OK
PI = 3.14159 // 컴파일 오류&lt;/code&gt;&lt;/pre&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;span&gt;정리&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;Kotlin&lt;/span&gt;&lt;span&gt;에서는&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;var, val, const&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;키워드를&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;사용하여&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;변수를&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;선언할&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;수&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;있습니다&lt;/span&gt;&lt;span&gt;. var&lt;/span&gt;&lt;span&gt;는&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;변경&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;가능한&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;변수&lt;/span&gt;&lt;span&gt;, val&lt;/span&gt;&lt;span&gt;은&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;불변&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;변수&lt;/span&gt;&lt;span&gt;, const&lt;/span&gt;&lt;span&gt;는&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;컴파일&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;타임&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;상수입니다&lt;/span&gt;&lt;span&gt;.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;이러한&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;키워드를&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;올바르게&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;사용하여&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;변수를&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;선언하면&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;코드의&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;가독성과&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;안정성을&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;높일&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;수&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;있습니다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;</description>
      <category>Kotlin/Kotlin 기초</category>
      <category>kotlin</category>
      <category>Kotlin const</category>
      <category>Kotlin Immutable</category>
      <category>kotlin mutable</category>
      <category>kotlin val</category>
      <category>Kotlin val const</category>
      <category>kotlin val var</category>
      <category>kotlin var</category>
      <category>Kotlin variable</category>
      <category>Kotlin 변수</category>
      <author>DevReview</author>
      <guid isPermaLink="true">https://dev-cho.tistory.com/62</guid>
      <comments>https://dev-cho.tistory.com/62#entry62comment</comments>
      <pubDate>Wed, 15 Feb 2023 23:14:33 +0900</pubDate>
    </item>
    <item>
      <title>갤럭시북3 프로 구매 후기 : Galaxy Book3 Pro 사양 보는 방법 정리</title>
      <link>https://dev-cho.tistory.com/61</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;목차&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;가성비 좋은 갤럭시북3 어떤 사양으로 구매해야 하나?&lt;/li&gt;
&lt;li&gt;내가 산 갤럭시북3 프로 : NT940XFG-K71A&lt;/li&gt;
&lt;/ul&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 어떤 사양으로 구매해야 하나?&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이번에 새로 출시된 갤럭시북3 프로는 가성비가 좋기로 유명하다. 이유는 높은 사양 대비 가격이 꽤 괜찮게 나왔기 때문인데, 이 때문에 나도 갤럭시북3 프로를 사전 예약으로 G마켓에서 사게 되어 글을 쓰게 됐다.&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 alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;20230211_201220.jpg&quot; data-origin-width=&quot;4000&quot; data-origin-height=&quot;3000&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bJRiSq/btrYYqk1ECe/Hg5e6qDK7X2O0NKK6lqHb0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bJRiSq/btrYYqk1ECe/Hg5e6qDK7X2O0NKK6lqHb0/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bJRiSq/btrYYqk1ECe/Hg5e6qDK7X2O0NKK6lqHb0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbJRiSq%2FbtrYYqk1ECe%2FHg5e6qDK7X2O0NKK6lqHb0%2Fimg.jpg&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;600&quot; height=&quot;450&quot; data-filename=&quot;20230211_201220.jpg&quot; data-origin-width=&quot;4000&quot; data-origin-height=&quot;3000&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 프로 : NT940XFG-K71A&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;먼저 내가 산 모델은 NT940XFG-K71A이다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;20230211_201056.jpg&quot; data-origin-width=&quot;4000&quot; data-origin-height=&quot;3000&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bjr5MX/btrYRScKPzG/ZXr1A4wVHPHloMcdOSthPK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bjr5MX/btrYRScKPzG/ZXr1A4wVHPHloMcdOSthPK/img.jpg&quot; data-alt=&quot;내가 산 갤럭시북3 프로&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bjr5MX/btrYRScKPzG/ZXr1A4wVHPHloMcdOSthPK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbjr5MX%2FbtrYRScKPzG%2FZXr1A4wVHPHloMcdOSthPK%2Fimg.jpg&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;680&quot; height=&quot;510&quot; data-filename=&quot;20230211_201056.jpg&quot; data-origin-width=&quot;4000&quot; data-origin-height=&quot;3000&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;내가 산 갤럭시북3 프로&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;상품 정보는 아래 링크에서 확인 가능하다.&amp;nbsp;&lt;/p&gt;
&lt;figure id=&quot;og_1676115977529&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;삼성전자 갤럭시북3 프로 NT940XFG-K71A 14인치 13세대 CPU-i7&quot; data-og-description=&quot;COUPANG&quot; data-og-host=&quot;www.coupang.com&quot; data-og-source-url=&quot;https://link.coupang.com/a/OVcNx&quot; data-og-url=&quot;https://www.coupang.com/vp/products/7090146370&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/hfG9Q/hyRzB2G7m1/ZImItmC1WuHGMvi7wZ3P71/img.jpg?width=230&amp;amp;height=230&amp;amp;face=0_0_230_230,https://scrap.kakaocdn.net/dn/q1k2I/hyRAkrwGEe/J3lukDKgfIN6xYDiwBNk20/img.jpg?width=230&amp;amp;height=230&amp;amp;face=0_0_230_230&quot;&gt;&lt;a href=&quot;https://link.coupang.com/a/OVcNx&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://link.coupang.com/a/OVcNx&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/hfG9Q/hyRzB2G7m1/ZImItmC1WuHGMvi7wZ3P71/img.jpg?width=230&amp;amp;height=230&amp;amp;face=0_0_230_230,https://scrap.kakaocdn.net/dn/q1k2I/hyRAkrwGEe/J3lukDKgfIN6xYDiwBNk20/img.jpg?width=230&amp;amp;height=230&amp;amp;face=0_0_230_230');&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;삼성전자 갤럭시북3 프로 NT940XFG-K71A 14인치 13세대 CPU-i7&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;COUPANG&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.coupang.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사양은 다음과 같다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;14인치 무게 1.17kg&lt;/li&gt;
&lt;li&gt;13세대 i7 프로세서&lt;/li&gt;
&lt;li&gt;윈도우 포함&lt;/li&gt;
&lt;li&gt;Ram 16gb&lt;/li&gt;
&lt;li&gt;SSD: 512GB(256GB 기본 모델에서 256 추가 업그레이드)&lt;/li&gt;
&lt;/ul&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;b&gt;14인치 크기의 디스플레이&lt;/b&gt;로 선택해 무게가 &lt;b&gt;1.17kg&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;모델명 중 940인 것이 14인치이고 960인 것이 16인치이다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&amp;nbsp;NT&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;940&lt;/b&gt;&lt;/span&gt;XFG-K71A&lt;br /&gt;&lt;span&gt;&amp;nbsp;NT&lt;/span&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;960&lt;/b&gt;&lt;/span&gt;&lt;span&gt;XFG-K71A&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;16인치는 1.56kg이니 잘 고려해서 선택하도록 하자. 아래 링크를 넣어놨으니 둘을 비교하면 인치만 다르고 다른 사양은 같은 것을 볼 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;14인치&lt;/b&gt;&lt;/h4&gt;
&lt;figure id=&quot;og_1676116313153&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;삼성전자 갤럭시북3 프로 NT940XFG-K71A 14인치 13세대 CPU-i7&quot; data-og-description=&quot;COUPANG&quot; data-og-host=&quot;www.coupang.com&quot; data-og-source-url=&quot;https://link.coupang.com/a/OVcNx&quot; data-og-url=&quot;https://www.coupang.com/vp/products/7090146370&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/hfG9Q/hyRzB2G7m1/ZImItmC1WuHGMvi7wZ3P71/img.jpg?width=230&amp;amp;height=230&amp;amp;face=0_0_230_230,https://scrap.kakaocdn.net/dn/q1k2I/hyRAkrwGEe/J3lukDKgfIN6xYDiwBNk20/img.jpg?width=230&amp;amp;height=230&amp;amp;face=0_0_230_230&quot;&gt;&lt;a href=&quot;https://link.coupang.com/a/OVcNx&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://link.coupang.com/a/OVcNx&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/hfG9Q/hyRzB2G7m1/ZImItmC1WuHGMvi7wZ3P71/img.jpg?width=230&amp;amp;height=230&amp;amp;face=0_0_230_230,https://scrap.kakaocdn.net/dn/q1k2I/hyRAkrwGEe/J3lukDKgfIN6xYDiwBNk20/img.jpg?width=230&amp;amp;height=230&amp;amp;face=0_0_230_230');&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;삼성전자 갤럭시북3 프로 NT940XFG-K71A 14인치 13세대 CPU-i7&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;COUPANG&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.coupang.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;16인치&lt;/b&gt;&lt;/h4&gt;
&lt;figure id=&quot;og_1676116339272&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;삼성 갤럭시북3 프로 NT960XFG-K71A 16인치 3K WQXGA+ 120hz 16:10 디스플레이 인텔13세대 2023 신제품 입학선&quot; data-og-description=&quot;COUPANG&quot; data-og-host=&quot;www.coupang.com&quot; data-og-source-url=&quot;https://link.coupang.com/a/OVfn6&quot; data-og-url=&quot;https://www.coupang.com/vp/products/7105285041&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/xbF5M/hyRAitHaZf/huzO8DVBQayhxNexDlFno1/img.jpg?width=230&amp;amp;height=230&amp;amp;face=0_0_230_230&quot;&gt;&lt;a href=&quot;https://link.coupang.com/a/OVfn6&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://link.coupang.com/a/OVfn6&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/xbF5M/hyRAitHaZf/huzO8DVBQayhxNexDlFno1/img.jpg?width=230&amp;amp;height=230&amp;amp;face=0_0_230_230');&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;삼성 갤럭시북3 프로 NT960XFG-K71A 16인치 3K WQXGA+ 120hz 16:10 디스플레이 인텔13세대 2023 신제품 입학선&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;COUPANG&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.coupang.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;얇기도 정말 얇다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;20230211_201249.jpg&quot; data-origin-width=&quot;4000&quot; data-origin-height=&quot;3000&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dAVs8x/btrYUSWEYmh/ZD1dBICF6uiIB5NkJhPpq0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dAVs8x/btrYUSWEYmh/ZD1dBICF6uiIB5NkJhPpq0/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dAVs8x/btrYUSWEYmh/ZD1dBICF6uiIB5NkJhPpq0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdAVs8x%2FbtrYUSWEYmh%2FZD1dBICF6uiIB5NkJhPpq0%2Fimg.jpg&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;650&quot; height=&quot;488&quot; data-filename=&quot;20230211_201249.jpg&quot; data-origin-width=&quot;4000&quot; data-origin-height=&quot;3000&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-ke-size=&quot;size23&quot;&gt;CPU 종류&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;cpu 종류는 13세대 i7 프로세서이다. 12세대에 비해 13세대 프로세서는 많은 성능 향상을 이루었다. 이번 세대로 구매하는 것은 좋은 것 같다.&lt;/p&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;blockquote data-ke-size=&quot;size23&quot; data-ke-style=&quot;style1&quot;&gt;NT940XFG-K&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;7&lt;/b&gt;&lt;/span&gt;1A &lt;br /&gt;NT960XFG-K&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;7&lt;/b&gt;&lt;/span&gt;1A&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서 K 뒤의 숫자가 7이면 i7이고 5면 i5 프로세서이다. i5 프로세서가 있는 것 같기는 한데 나는 코딩을 하고 이미지 편집을 하려면 그래도 i7은 되어야 충분하다고 생각해서 i7으로 선택했다.&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;Ram 크기&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;안타깝게도 내가 살 때 Ram 선택이 없길래 그냥 16gb로 선택했다 하지만 만약 이후에 선택할 수 있다면 16gb를 추가해서 32gb로 하는게 좋지 않을까 싶다. &lt;s&gt;그래도 바깥에서 코드를 짜면 프로그램을 하나만 돌리니까 괜찮지 않을까?&lt;/s&gt;&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;SSD&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;요즘 저장용량은 256GB면 조금 부족하다. 조금만 쓰면 용량이 거의 찼다는 오류가 뜨고는 해서, 이걸 512GB로 업그레이드 했다.&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;사전예약으로 구매했기 때문에 다양한 사은품을 받았다. MS Office를 증정 받았고 스타벅스 파우치, 스타벅스 키링, 추가 심슨 파우치(3000원 구매) 했다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;20230211_154735.jpg&quot; data-origin-width=&quot;4000&quot; data-origin-height=&quot;3000&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bWUY35/btrYVhPBzLt/2KHfr4S1C1gMCu3zc6lIKK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bWUY35/btrYVhPBzLt/2KHfr4S1C1gMCu3zc6lIKK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bWUY35/btrYVhPBzLt/2KHfr4S1C1gMCu3zc6lIKK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbWUY35%2FbtrYVhPBzLt%2F2KHfr4S1C1gMCu3zc6lIKK%2Fimg.jpg&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;4000&quot; height=&quot;3000&quot; data-filename=&quot;20230211_154735.jpg&quot; data-origin-width=&quot;4000&quot; data-origin-height=&quot;3000&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;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;20230211_154743.jpg&quot; data-origin-width=&quot;4000&quot; data-origin-height=&quot;3000&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/daHGfN/btrYVhhLWBt/EcxyFELKVbqiO0zaRDTkYK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/daHGfN/btrYVhhLWBt/EcxyFELKVbqiO0zaRDTkYK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/daHGfN/btrYVhhLWBt/EcxyFELKVbqiO0zaRDTkYK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdaHGfN%2FbtrYVhhLWBt%2FEcxyFELKVbqiO0zaRDTkYK%2Fimg.jpg&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;4000&quot; height=&quot;3000&quot; data-filename=&quot;20230211_154743.jpg&quot; data-origin-width=&quot;4000&quot; data-origin-height=&quot;3000&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;blockquote data-ke-style=&quot;style3&quot;&gt;이 글은 추천일 뿐, 구매에 대한 선택은 본인에게 있습니다.&lt;/blockquote&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #e56a2c;&quot;&gt;&quot;이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.&quot;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>개발자의 아이템</category>
      <category>Galaxy Book3 Pro</category>
      <category>i7</category>
      <category>갤럭시북3</category>
      <category>갤럭시북3 프로</category>
      <category>구매</category>
      <author>DevReview</author>
      <guid isPermaLink="true">https://dev-cho.tistory.com/61</guid>
      <comments>https://dev-cho.tistory.com/61#entry61comment</comments>
      <pubDate>Sat, 11 Feb 2023 21:13:49 +0900</pubDate>
    </item>
    <item>
      <title>[2023년 디데이 앱] 안드로이드 디데이 어플리케이션 추천 : 앱으로 디데이, 기념일 설정하기</title>
      <link>https://dev-cho.tistory.com/60</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&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;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;심플데이는 깔끔한 UI를 가지고 있습니다.&lt;/li&gt;
&lt;li&gt;다크모드가 100% 지원됩니다.&lt;/li&gt;
&lt;li&gt;사용법도 매우 간단해서 누구나 손쉽게 디데이를 만들 수 있습니다.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;위젯도 100% 지원되고 상단바 고정도 지원됩니다. 위젯의 커스터 마이징도 너무 잘 지원됩니다.&lt;/li&gt;
&lt;li&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;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 41.0465%; height: 74px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignCenter&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;평가 항목&lt;/td&gt;
&lt;td&gt;별점(5개 최고)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;UI&lt;/td&gt;
&lt;td&gt;★★★★★&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;다크 모드 지원&lt;/td&gt;
&lt;td&gt;★★★★★&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;사용법&lt;/td&gt;
&lt;td&gt;★★★★★&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;위젯, 상단바 고정&lt;/td&gt;
&lt;td&gt;★★★★★&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&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;/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;a href=&quot;https://play.google.com/store/apps/details?id=com.devcho.simpleday&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;앱 다운로드 하러가기&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1674905987349&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;심플데이(디데이, 기념일 위젯 알림) - Google Play 앱&quot; data-og-description=&quot;디데이, 기념일을 기록하는 심플한 어플리케이션&quot; data-og-host=&quot;play.google.com&quot; data-og-source-url=&quot;https://play.google.com/store/apps/details?id=com.devcho.simpleday&quot; data-og-url=&quot;https://play.google.com/store/apps/details?id=com.devcho.simpleday&amp;amp;hl=ko&amp;amp;gl=KR&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/blTa5W/hyRpJ0EMIS/aEupzrbCZtBEuY0GX3hRKK/img.png?width=512&amp;amp;height=512&amp;amp;face=0_0_512_512,https://scrap.kakaocdn.net/dn/fVxDw/hyRpPzOCO0/Lc1XTkXC7ImKyKkrRzJrg0/img.png?width=600&amp;amp;height=300&amp;amp;face=0_0_600_300,https://scrap.kakaocdn.net/dn/OhIQu/hyRpGJCqD2/jwKn9q8pQk6hkFQ8kRqo51/img.png?width=526&amp;amp;height=296&amp;amp;face=0_0_526_296&quot;&gt;&lt;a href=&quot;https://play.google.com/store/apps/details?id=com.devcho.simpleday&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://play.google.com/store/apps/details?id=com.devcho.simpleday&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/blTa5W/hyRpJ0EMIS/aEupzrbCZtBEuY0GX3hRKK/img.png?width=512&amp;amp;height=512&amp;amp;face=0_0_512_512,https://scrap.kakaocdn.net/dn/fVxDw/hyRpPzOCO0/Lc1XTkXC7ImKyKkrRzJrg0/img.png?width=600&amp;amp;height=300&amp;amp;face=0_0_600_300,https://scrap.kakaocdn.net/dn/OhIQu/hyRpGJCqD2/jwKn9q8pQk6hkFQ8kRqo51/img.png?width=526&amp;amp;height=296&amp;amp;face=0_0_526_296');&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;심플데이(디데이, 기념일 위젯 알림) - Google Play 앱&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;디데이, 기념일을 기록하는 심플한 어플리케이션&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;play.google.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;h2 data-ke-size=&quot;size26&quot;&gt;심플데이 살펴보기&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;메인 화면&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;심플데이 내부를 살펴보면 깔끔한 UI와 다양한 스티커 제공 및 디데이 알림까지 제공하는 것을 볼 수 있습니다.&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 alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2023-01-28 오후 8.18.12.png&quot; data-origin-width=&quot;862&quot; data-origin-height=&quot;1060&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dQtEwt/btrXo5iRFtH/9LkLm4KXiBIcIJZGl5JZwK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dQtEwt/btrXo5iRFtH/9LkLm4KXiBIcIJZGl5JZwK/img.png&quot; data-alt=&quot;심플데이 내부 화면&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dQtEwt/btrXo5iRFtH/9LkLm4KXiBIcIJZGl5JZwK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdQtEwt%2FbtrXo5iRFtH%2F9LkLm4KXiBIcIJZGl5JZwK%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;300&quot; height=&quot;369&quot; data-filename=&quot;스크린샷 2023-01-28 오후 8.18.12.png&quot; data-origin-width=&quot;862&quot; data-origin-height=&quot;1060&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;심플데이 내부 화면&lt;/figcaption&gt;
&lt;/figure&gt;
&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;제공하는 종류는 2가지고, 디데이는 디데이는 오늘이 D-0이 되는 모양이고 기념일은 오늘이 1일째가 되는 모양이네요. 디데이는 당일이 목표 일자이고 기념일은 해당 날짜부터 카운트를 시작해서 이렇게 만든 것 같습니다.&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 alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;edited_KakaoTalk_Photo_2023-01-28-20-33-36.jpeg&quot; data-origin-width=&quot;720&quot; data-origin-height=&quot;568&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dUtoVW/btrXnjoRrpK/2WAD3UK6sLFzXzEAsmwih1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dUtoVW/btrXnjoRrpK/2WAD3UK6sLFzXzEAsmwih1/img.png&quot; data-alt=&quot;디데이 종류&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dUtoVW/btrXnjoRrpK/2WAD3UK6sLFzXzEAsmwih1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdUtoVW%2FbtrXnjoRrpK%2F2WAD3UK6sLFzXzEAsmwih1%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;350&quot; height=&quot;276&quot; data-filename=&quot;edited_KakaoTalk_Photo_2023-01-28-20-33-36.jpeg&quot; data-origin-width=&quot;720&quot; data-origin-height=&quot;568&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;디데이 종류&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;디데이 추가 시에는 스티커를 손쉽게 붙일 수 있게 해주고 상단바 고정, 당일 알림 까지 제공하고 있습니다. 이런 식의 깔끔한 UI가 매우 이쁘네요!&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 alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;edited_KakaoTalk_Photo_2023-01-28-20-31-47.jpeg&quot; data-origin-width=&quot;718&quot; data-origin-height=&quot;681&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/tsmw8/btrXqC1N3RA/yZWkw7W6T4mnUM8L2wxDCk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/tsmw8/btrXqC1N3RA/yZWkw7W6T4mnUM8L2wxDCk/img.png&quot; data-alt=&quot;디데이 추가&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/tsmw8/btrXqC1N3RA/yZWkw7W6T4mnUM8L2wxDCk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Ftsmw8%2FbtrXqC1N3RA%2FyZWkw7W6T4mnUM8L2wxDCk%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;350&quot; height=&quot;332&quot; data-filename=&quot;edited_KakaoTalk_Photo_2023-01-28-20-31-47.jpeg&quot; data-origin-width=&quot;718&quot; data-origin-height=&quot;681&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;디데이 추가&lt;/figcaption&gt;
&lt;/figure&gt;
&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;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2023-01-28 오후 8.28.26.png&quot; data-origin-width=&quot;852&quot; data-origin-height=&quot;452&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bgtUkZ/btrXpcChTHD/9La4aDT41kGkvTjAYP80k0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bgtUkZ/btrXpcChTHD/9La4aDT41kGkvTjAYP80k0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bgtUkZ/btrXpcChTHD/9La4aDT41kGkvTjAYP80k0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbgtUkZ%2FbtrXpcChTHD%2F9La4aDT41kGkvTjAYP80k0%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;600&quot; height=&quot;318&quot; data-filename=&quot;스크린샷 2023-01-28 오후 8.28.26.png&quot; data-origin-width=&quot;852&quot; data-origin-height=&quot;452&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;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&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2023-01-28 오후 8.29.14.png&quot; data-origin-width=&quot;864&quot; data-origin-height=&quot;1366&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mEdNB/btrXomLWfCZ/R5Abv1EkLOEv57eD6HntMk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mEdNB/btrXomLWfCZ/R5Abv1EkLOEv57eD6HntMk/img.png&quot; data-alt=&quot;심플데이 위젯 설정&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mEdNB/btrXomLWfCZ/R5Abv1EkLOEv57eD6HntMk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmEdNB%2FbtrXomLWfCZ%2FR5Abv1EkLOEv57eD6HntMk%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;350&quot; height=&quot;553&quot; data-filename=&quot;스크린샷 2023-01-28 오후 8.29.14.png&quot; data-origin-width=&quot;864&quot; data-origin-height=&quot;1366&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;심플데이 위젯 설정&lt;/figcaption&gt;
&lt;/figure&gt;
&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;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;전체적으로 봤을 때 필요한 기능들이 모두 있고 UI도 매우 아름답습니다. 꼭 다운받아서 디데이를 설정해보아요!&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://play.google.com/store/apps/details?id=com.devcho.simpleday&quot;&gt;앱 다운로드 하러가기&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1674905991925&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;심플데이(디데이, 기념일 위젯 알림) - Google Play 앱&quot; data-og-description=&quot;디데이, 기념일을 기록하는 심플한 어플리케이션&quot; data-og-host=&quot;play.google.com&quot; data-og-source-url=&quot;https://play.google.com/store/apps/details?id=com.devcho.simpleday&quot; data-og-url=&quot;https://play.google.com/store/apps/details?id=com.devcho.simpleday&amp;amp;hl=ko&amp;amp;gl=KR&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/blTa5W/hyRpJ0EMIS/aEupzrbCZtBEuY0GX3hRKK/img.png?width=512&amp;amp;height=512&amp;amp;face=0_0_512_512,https://scrap.kakaocdn.net/dn/fVxDw/hyRpPzOCO0/Lc1XTkXC7ImKyKkrRzJrg0/img.png?width=600&amp;amp;height=300&amp;amp;face=0_0_600_300,https://scrap.kakaocdn.net/dn/OhIQu/hyRpGJCqD2/jwKn9q8pQk6hkFQ8kRqo51/img.png?width=526&amp;amp;height=296&amp;amp;face=0_0_526_296&quot;&gt;&lt;a href=&quot;https://play.google.com/store/apps/details?id=com.devcho.simpleday&quot; data-source-url=&quot;https://play.google.com/store/apps/details?id=com.devcho.simpleday&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/blTa5W/hyRpJ0EMIS/aEupzrbCZtBEuY0GX3hRKK/img.png?width=512&amp;amp;height=512&amp;amp;face=0_0_512_512,https://scrap.kakaocdn.net/dn/fVxDw/hyRpPzOCO0/Lc1XTkXC7ImKyKkrRzJrg0/img.png?width=600&amp;amp;height=300&amp;amp;face=0_0_600_300,https://scrap.kakaocdn.net/dn/OhIQu/hyRpGJCqD2/jwKn9q8pQk6hkFQ8kRqo51/img.png?width=526&amp;amp;height=296&amp;amp;face=0_0_526_296');&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;심플데이(디데이, 기념일 위젯 알림) - Google Play 앱&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;디데이, 기념일을 기록하는 심플한 어플리케이션&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;play.google.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>개발자의 앱</category>
      <category>2023년</category>
      <category>기념일</category>
      <category>디데이</category>
      <category>상단바 고정</category>
      <category>앱</category>
      <category>어플리케이션</category>
      <category>위젯</category>
      <author>DevReview</author>
      <guid isPermaLink="true">https://dev-cho.tistory.com/60</guid>
      <comments>https://dev-cho.tistory.com/60#entry60comment</comments>
      <pubDate>Sat, 28 Jan 2023 20:37:56 +0900</pubDate>
    </item>
  </channel>
</rss>