<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>코린이 탈출기</title>
    <link>https://sohee0428.tistory.com/</link>
    <description></description>
    <language>ko</language>
    <pubDate>Sun, 7 Jun 2026 15:43:20 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>50HEE</managingEditor>
    <item>
      <title>앱을 Play 스토어에 검색해도 나오지 않는 경우</title>
      <link>https://sohee0428.tistory.com/118</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;개발한 앱을 Play 스토어에 배포하여 설치하려고 검색해보니 나오지 않는 경우가 있었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;구글링한 결과 개발자가 배포한 앱 자체(Play 스토어 설정)의 문제가 있는 경우도 있었지만, Play 스토어에 캐시의 문제로 앱이 검색이 되지 않는 경우도 있다고합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;저의 경우에는 2개의 폰 중 1개만 검색이 안되기 때문에, Play 스토어 설정의 문제는 아니라고 생각하여 캐시를 삭제하는 방법을 사용하니 앱이 잘 검색되는 것을 확인하였습니다.&lt;/p&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&gt;&lt;figure class=&quot;imageblock floatRight&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;264&quot; data-origin-height=&quot;366&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/brAbNz/btsLOXcWUV5/EsWiX1E3abRkSFvEjmyHsk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/brAbNz/btsLOXcWUV5/EsWiX1E3abRkSFvEjmyHsk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/brAbNz/btsLOXcWUV5/EsWiX1E3abRkSFvEjmyHsk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbrAbNz%2FbtsLOXcWUV5%2FEsWiX1E3abRkSFvEjmyHsk%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;206&quot; height=&quot;286&quot; data-origin-width=&quot;264&quot; data-origin-height=&quot;366&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;캐시 및 데이터 삭제 방법&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;해당 앱 길게 누르기 -&amp;gt; i 아이콘 클릭 -&amp;gt; 저장공간&lt;/li&gt;
&lt;li&gt;설정 -&amp;gt; 애플리케이션 -&amp;gt; 해당 앱 클릭 -&amp;gt; 저장공간&lt;/li&gt;
&lt;/ol&gt;</description>
      <category>안드로이드</category>
      <author>50HEE</author>
      <guid isPermaLink="true">https://sohee0428.tistory.com/118</guid>
      <comments>https://sohee0428.tistory.com/118#entry118comment</comments>
      <pubDate>Thu, 16 Jan 2025 16:54:13 +0900</pubDate>
    </item>
    <item>
      <title>[Android] 모듈화 vs 라이브러리</title>
      <link>https://sohee0428.tistory.com/117</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;코드의 재활용과 유지보수를 쉽게 하기 위해 다양한 기법들이 있습니다. 그중 하나가 코드를 여러 개의 파일로 분리하는 것입니다. 즉, 관심사의 분리를 할 수 있는 여러 방법 중 하나입니다.&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #172b4d; text-align: start;&quot; data-renderer-start-pos=&quot;110&quot; data-ke-size=&quot;size16&quot;&gt;코드를 재활용하면서 더 빠른 속도로 안정적으로 개발하게 되고, 앱의 무결성 및 유지보수성이 향상됩니다.&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #172b4d; text-align: start;&quot; data-renderer-start-pos=&quot;169&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #172b4d; text-align: start;&quot; data-renderer-start-pos=&quot;169&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;결론을 먼저 말하면 안드로이드에서의 라이브러리와 모듈 모두 동일한 개념으로 재사용이 가능한 코드의 집합이라고 볼 수 있습니다.&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #172b4d; text-align: start;&quot; data-renderer-start-pos=&quot;230&quot; data-ke-size=&quot;size16&quot;&gt;라이브러리와 모듈 모두 소스 코드, 리소스파일, Android 매니페스트 등 앱을 빌드하는데 필요한 모든 것이 포함될 수 있습니다.&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #172b4d; text-align: start;&quot; data-renderer-start-pos=&quot;305&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #172b4d; text-align: start;&quot; data-renderer-start-pos=&quot;305&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #172b4d; text-align: start;&quot; data-renderer-start-pos=&quot;307&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h1 id=&quot;모듈&quot; style=&quot;background-color: #ffffff; color: #172b4d; text-align: start;&quot; data-renderer-start-pos=&quot;309&quot;&gt;모듈&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h1&gt;
&lt;p style=&quot;background-color: #ffffff; color: #172b4d; text-align: start;&quot; data-renderer-start-pos=&quot;313&quot; data-ke-size=&quot;size16&quot;&gt;소스 및 리소스 디렉터리와 같은 모듈 디렉터리와 기기 유형에 적합한 기본 파일을 자동으로 생성합니다.&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #172b4d; text-align: start;&quot; data-renderer-start-pos=&quot;372&quot; data-ke-size=&quot;size16&quot;&gt;기존에 코드를 개발할 때, 하나의 모듈로 많은 코드가 추가되면서 빌드 시간이 계속 증가합니다. 그러므로 모듈을 따로 만들어 사용하게 된다면, 프로젝트를 빌드할 때 변경된 모듈만 빌드하기 때문에 빌드 속도가 빠릅니다.&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #172b4d; text-align: start;&quot; data-renderer-start-pos=&quot;494&quot; data-ke-size=&quot;size16&quot;&gt;각 모듈은 개별적으로 빌드, 테스트 및 디버그할 수 있습니다.&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #172b4d; text-align: start;&quot; data-renderer-start-pos=&quot;530&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h1 id=&quot;라이브러리&quot; style=&quot;background-color: #ffffff; color: #172b4d; text-align: start;&quot; data-renderer-start-pos=&quot;532&quot;&gt;라이브러리&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h1&gt;
&lt;p style=&quot;background-color: #ffffff; color: #172b4d; text-align: start;&quot; data-renderer-start-pos=&quot;539&quot; data-ke-size=&quot;size16&quot;&gt;Android 라이브러리는 모듈의 일종으로 구조적으로 앱 모듈과 동일합니다. 라이브러리도 결국 라이브러리 모듈이라고 부릅니다.&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #172b4d; text-align: start;&quot; data-renderer-start-pos=&quot;611&quot; data-ke-size=&quot;size16&quot;&gt;애플리케이션의 기능 확장을 위해 이전에 컴파일된 소스 코드들의 집합입니다.&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #172b4d; text-align: start;&quot; data-renderer-start-pos=&quot;655&quot; data-ke-size=&quot;size16&quot;&gt;기기에서 실행되는 APK로 컴파일되는 대신 Android 앱 모듈의 종속 항목으로 사용할 수 있는 Android 보관 파일(AAR)로 컴파일됩니다.&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #172b4d; text-align: start;&quot; data-renderer-start-pos=&quot;740&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #172b4d; text-align: start;&quot; data-renderer-start-pos=&quot;742&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #172b4d; text-align: start;&quot; data-renderer-start-pos=&quot;744&quot; data-ke-size=&quot;size16&quot;&gt;모듈이 프로그램을 구성하는 작은 부품의 느낌이라면, 라이브러리는 자주 사용되는 로직을 잘 정리한 집합 느낌입니다.&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #172b4d; text-align: start;&quot; data-renderer-start-pos=&quot;809&quot; data-ke-size=&quot;size16&quot;&gt;이 둘의 차이는 어떤 파일로 컴파일되는지의 차이입니다. 앱 모듈은 apk를 빌드해 주고, 라이브러리 모듈은 aar 파일로 빌드해 줍니다.&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #172b4d; text-align: start;&quot; data-renderer-start-pos=&quot;886&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #172b4d; text-align: start;&quot; data-renderer-start-pos=&quot;888&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #172b4d; text-align: start;&quot; data-renderer-start-pos=&quot;890&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;결론!! Android에서는 모듈이 라이브러리(모듈)를 포함한 큰 집합입니다.&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #172b4d; text-align: start;&quot; data-renderer-start-pos=&quot;972&quot; data-ke-size=&quot;size16&quot;&gt;모듈은 앱 모듈과 라이브러리 모듈로 구분할 수 있습니다. 모듈의 종류 중에는 Android library module, Java / Kotlin library module 등이 있습니다. 앱 모듈을 제외한 다른 라이브러리 모듈을 통해 관심사를 분리하여 코드를 작성할 수 있습니다.&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #172b4d; text-align: start;&quot; data-renderer-start-pos=&quot;1131&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #172b4d; text-align: start;&quot; data-renderer-start-pos=&quot;1131&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #172b4d; text-align: start;&quot; data-renderer-start-pos=&quot;1131&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;background-color: #ffffff; color: #172b4d; text-align: start;&quot; data-renderer-start-pos=&quot;1131&quot; data-ke-size=&quot;size23&quot;&gt;&amp;lt;만드는 방법&amp;gt;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;589&quot; data-origin-height=&quot;781&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/RXEFg/btsIlFZKtt0/e7gglRd7Kux2MmKFSSUFgK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/RXEFg/btsIlFZKtt0/e7gglRd7Kux2MmKFSSUFgK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/RXEFg/btsIlFZKtt0/e7gglRd7Kux2MmKFSSUFgK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FRXEFg%2FbtsIlFZKtt0%2Fe7gglRd7Kux2MmKFSSUFgK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;589&quot; height=&quot;781&quot; data-origin-width=&quot;589&quot; data-origin-height=&quot;781&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;808&quot; data-origin-height=&quot;570&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bLmxOr/btsIk1CcBy5/kGbZtVMPo0rIRBnJhbruVK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bLmxOr/btsIk1CcBy5/kGbZtVMPo0rIRBnJhbruVK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bLmxOr/btsIk1CcBy5/kGbZtVMPo0rIRBnJhbruVK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbLmxOr%2FbtsIk1CcBy5%2FkGbZtVMPo0rIRBnJhbruVK%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;808&quot; height=&quot;570&quot; data-origin-width=&quot;808&quot; data-origin-height=&quot;570&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #172b4d; text-align: start;&quot; data-renderer-start-pos=&quot;1131&quot; data-ke-size=&quot;size16&quot;&gt;위와 같이 &lt;span style=&quot;background-color: #ffffff; color: #172b4d; text-align: start;&quot;&gt;New Module을 통해&lt;/span&gt; &lt;span style=&quot;background-color: #ffffff; color: #172b4d; text-align: start;&quot;&gt;Android library module, Java / Kotlin library module 등을 만들 수 있는 것을 확인할 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #172b4d; text-align: start;&quot; data-renderer-start-pos=&quot;1131&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #172b4d; text-align: start;&quot; data-renderer-start-pos=&quot;1131&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #172b4d; text-align: start;&quot; data-renderer-start-pos=&quot;1131&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 id=&quot;참고&quot; style=&quot;background-color: #ffffff; color: #172b4d; text-align: start;&quot; data-renderer-start-pos=&quot;1133&quot; data-ke-size=&quot;size23&quot;&gt;참고&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span data-card-url=&quot;https://developer.android.com/studio/projects/android-library?hl=ko&quot; data-inline-card=&quot;true&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span data-testid=&quot;hover-card-trigger-wrapper&quot;&gt;&lt;span data-testid=&quot;inline-card-icon-and-title&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://developer.android.com/studio/projects/add-app-module&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://developer.android.com/studio/projects/add-app-module&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1717741988984&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;Add a module for a new device &amp;nbsp;|&amp;nbsp; Android Studio &amp;nbsp;|&amp;nbsp; Android Developers&quot; data-og-description=&quot;Find out how Android Studio uses modules to make it easy to add new devices to your project.&quot; data-og-host=&quot;developer.android.com&quot; data-og-source-url=&quot;https://developer.android.com/studio/projects/add-app-module&quot; data-og-url=&quot;https://developer.android.com/studio/projects/add-app-module&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/SILNi/hyWgWAfBGm/oVjM6UulYzCoRBN46bqVjK/img.png?width=1201&amp;amp;height=676&amp;amp;face=0_0_1201_676&quot;&gt;&lt;a href=&quot;https://developer.android.com/studio/projects/add-app-module&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://developer.android.com/studio/projects/add-app-module&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/SILNi/hyWgWAfBGm/oVjM6UulYzCoRBN46bqVjK/img.png?width=1201&amp;amp;height=676&amp;amp;face=0_0_1201_676');&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;Add a module for a new device &amp;nbsp;|&amp;nbsp; Android Studio &amp;nbsp;|&amp;nbsp; Android Developers&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Find out how Android Studio uses modules to make it easy to add new devices to your project.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;developer.android.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://developer.android.com/studio/projects/android-library?hl=ko&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://developer.android.com/studio/projects/android-library?hl=ko&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1717741996030&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;Android 라이브러리 만들기 &amp;nbsp;|&amp;nbsp; Android Studio &amp;nbsp;|&amp;nbsp; Android Developers&quot; data-og-description=&quot;Android 라이브러리를 생성하는 방법을 알아보세요.&quot; data-og-host=&quot;developer.android.com&quot; data-og-source-url=&quot;https://developer.android.com/studio/projects/android-library?hl=ko&quot; data-og-url=&quot;https://developer.android.com/studio/projects/android-library?hl=ko&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/gvDTR/hyWg457tDB/COm1O5H7mHqVTBKQfMxRNK/img.png?width=1201&amp;amp;height=676&amp;amp;face=0_0_1201_676,https://scrap.kakaocdn.net/dn/gAIQO/hyWg6pgCC5/eOyNpRpT1CeqIQV36NljVK/img.png?width=946&amp;amp;height=522&amp;amp;face=0_0_946_522,https://scrap.kakaocdn.net/dn/I0AbO/hyWhbc8knR/9N4QxxRehKIW9VBlaWHbd1/img.png?width=947&amp;amp;height=521&amp;amp;face=0_0_947_521&quot;&gt;&lt;a href=&quot;https://developer.android.com/studio/projects/android-library?hl=ko&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://developer.android.com/studio/projects/android-library?hl=ko&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/gvDTR/hyWg457tDB/COm1O5H7mHqVTBKQfMxRNK/img.png?width=1201&amp;amp;height=676&amp;amp;face=0_0_1201_676,https://scrap.kakaocdn.net/dn/gAIQO/hyWg6pgCC5/eOyNpRpT1CeqIQV36NljVK/img.png?width=946&amp;amp;height=522&amp;amp;face=0_0_946_522,https://scrap.kakaocdn.net/dn/I0AbO/hyWhbc8knR/9N4QxxRehKIW9VBlaWHbd1/img.png?width=947&amp;amp;height=521&amp;amp;face=0_0_947_521');&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;Android 라이브러리 만들기 &amp;nbsp;|&amp;nbsp; Android Studio &amp;nbsp;|&amp;nbsp; Android Developers&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Android 라이브러리를 생성하는 방법을 알아보세요.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;developer.android.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>Android</category>
      <category>Library</category>
      <category>module</category>
      <category>라이브러리</category>
      <category>라이브러리화</category>
      <category>모듈</category>
      <category>모듈화</category>
      <author>50HEE</author>
      <guid isPermaLink="true">https://sohee0428.tistory.com/117</guid>
      <comments>https://sohee0428.tistory.com/117#entry117comment</comments>
      <pubDate>Wed, 3 Jul 2024 10:11:53 +0900</pubDate>
    </item>
    <item>
      <title>kotlin - Enum class의 메모리</title>
      <link>https://sohee0428.tistory.com/116</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;메모리... 참 비전공자인 저에게는 코딩을 할 때 생각하기 제일 어려운 부분이더라구요.. ㅠㅠ 기본의 중요성을 매번 느낍니다...&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;코드를 작성하다 보니 enum class 이것이 저에게는 매우 골칫덩어리였습니다!! 가시성을 좋게 하려고 아무 생각 없이 막 사용하고 있더라구요!!!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 enum 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;많은 블로그 글을 읽어보면 안드로이드 개발이 오랫동안 enum class를 권장하고 있지 않다는 글을 접할 수 있었습니다. 하지만 현재에는 열거형을 사용하지 말라는 공식 지침은 더 이상 존재하지 않습니다!!!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;과거의 enum class를 지양하던 이유에 대해 자세하게 알고 싶으시다면 해당 &lt;a href=&quot;https://www.youtube.com/watch?v=Hzs6OBcvNQE&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;동영상(4:48)&lt;/a&gt;을 시청해 보세요!! 아주 친절하고 재밌게 보았습니다!!! 요약하자면 상수에 비하여 enum class는 dex를 약 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;영상을 보고 그럼 enum class는 메모리가 언제 할당되며, 어떻게 사용하여야 할지 고민하게 되었습니다. 저의 경우 enum class를 사용하는 화면의 class 안에다가 작성을 하여 당연하게 해당 class를 객체화할 때 생성된다고 생각하였습니다. 하지만 구글링을 통해 알아본 결과 싱글통의 생성 방법 중 하나가 enum class라는 사실을 알게 되었습니다!!! 충격...&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;결론적으로 enum class는 사용할 때마다 생성하여 메모리를 사용하는 것이 아닌, 시작부터 종료까지 1번만 생성하여 고정된 메모리 영역을 가진다는 것입니다!!!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;글을 정리하자면 이전에는 메모리적 문제로 인해 enum class 사용을 지양하였으나, 현재 기술의 발전과 핸드폰의 메모리(RAM) 증가로 인해 크게 메모리를 신경 써도 되지 않는다고 하였습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당 내용을 정리하여 몇몇 분과 대화를 한 결과!!! 위와 같이 현재는 '핸드폰 메모리가 증가하였으니 이런 걸 굳이 신경 쓰지 않아도 된다 vs 사용자가 앱을 하나만 사용하는 것이 아니니 그래도 신경 쓰면 좋다'로 나뉘었습니다!! 여러분의 생각은 어떠하신가요?!!?&lt;/p&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;혹시 틀린 부분이 있거나 다른 의견이 있으시면 글 달아주세요!!!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;코린이에게 아주 큰 도움이 됩니다 &amp;gt;&amp;lt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;참고&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://techblog.woowahan.com/2527/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://techblog.woowahan.com/2527/&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://medium.com/trade-me/android-then-and-now-intro-intdef-enums-bca22d5cca56&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://medium.com/trade-me/android-then-and-now-intro-intdef-enums-bca22d5cca56&lt;/a&gt;&lt;/p&gt;</description>
      <category>코틀린</category>
      <category>enum</category>
      <category>enum class</category>
      <category>singleton</category>
      <category>메모리</category>
      <category>싱글톤</category>
      <author>50HEE</author>
      <guid isPermaLink="true">https://sohee0428.tistory.com/116</guid>
      <comments>https://sohee0428.tistory.com/116#entry116comment</comments>
      <pubDate>Thu, 8 Feb 2024 14:39:47 +0900</pubDate>
    </item>
    <item>
      <title>[에러 해결] net.sqlcipher.database.SQLiteException: file is not a database: , while compiling: select count(*) from sqlite_master;</title>
      <link>https://sohee0428.tistory.com/115</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;net.sqlcipher.database.SQLiteException: file is not a database: , while compiling: select count(*) from sqlite_master;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위와 같은 에러가 발생하는 이유는 &lt;b&gt;데이터베이스를 변경했을 때 마이그레이션을 하지 않아&lt;/b&gt;서 생기는 문제입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&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;저는 기존의 앱에 Room을 새롭게&amp;nbsp; 추가하는 작업을 진행 중이었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Room에 관한 코드를 작성 후 테스트 시에는 문제가 없었습니다. 그 후 Room에 암호화를 추가하였습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 암호화가 잘 되었는지 테스트를 위해 암호화한 부분을 지웠다가(이때가지는 에러 발생하지 않음) 다시 추가하니 위와 같은 에러가 발생하였습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;알고 보니 데이터베이스의 경우 변경 사항이 생길 때마다 마이그레이션을 적용해주어야 한다고 하더라고요!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;저의 경우에는 기존에 Room이 없는 상태에서 추가할 예정이라 굳이 마이그레이션 코드를 추가할 필요는 없다고 생각하였습니다. 그래서 이런 경우에는 &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;해당 앱의&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;저장공간에 있는 데이터를 날려주면 해당 에러가 해결됩니다!!&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock floatLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;546&quot; data-origin-height=&quot;1081&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cxJeOE/btsqILqcpWg/87sh4N1mcZXR8eZGGqXz5k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cxJeOE/btsqILqcpWg/87sh4N1mcZXR8eZGGqXz5k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cxJeOE/btsqILqcpWg/87sh4N1mcZXR8eZGGqXz5k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcxJeOE%2FbtsqILqcpWg%2F87sh4N1mcZXR8eZGGqXz5k%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;310&quot; height=&quot;1081&quot; data-origin-width=&quot;546&quot; data-origin-height=&quot;1081&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 data-ke-size=&quot;size16&quot;&gt;해당 앱의 저장공간으로 이동하여 노란색으로 표시된 '데이터 삭제'를 누르시면 됩니다!!!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우선 간단하게 해결하는 방법을 보셨습니다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음에 마이그레이션을 하는 방법을 알아보겠습니다!!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고... 매번 느끼지만 에러는 참... 같은 에러지만 해결 방법이 다 달라서 코딩... 어렵네요... &amp;gt;&amp;lt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;lt;참고 사이트&amp;gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://github.com/sqlcipher/android-database-sqlcipher/issues/520&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://github.com/sqlcipher/android-database-sqlcipher/issues/520&lt;/a&gt;&lt;/p&gt;</description>
      <category>안드로이드/에러</category>
      <category>Database</category>
      <category>SQLiteException</category>
      <category>데이터베이스</category>
      <author>50HEE</author>
      <guid isPermaLink="true">https://sohee0428.tistory.com/115</guid>
      <comments>https://sohee0428.tistory.com/115#entry115comment</comments>
      <pubDate>Wed, 9 Aug 2023 20:45:22 +0900</pubDate>
    </item>
    <item>
      <title>02 변수와 자료형, 연산자 (02-3 자료형 검사하고 변환하기)</title>
      <link>https://sohee0428.tistory.com/114</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;02-3 자료형 검사하고 변환하기&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;코틀린은 변수를 사용할 때 반드시 값이 할당되어 있어야 한다는 원칙이 있지만, 만약 변수에 값이 없는 상태를 만들고 싶을 경우에는 어떻게 해야 할까요??&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;lsquo;값이 없는 상태&amp;rsquo;를 null이라는 용어를 사용합니다. null을 할당하여 변수에 값이 없는 상태를 만들 수 있습니다. 코틀린에서는 null 상태인 변수를 허용하려면 물음표(?) 기호를 사용해 선언해야 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;null을 허용하는 변수를 사용하려면 null을 검사하고 처리하는 방법까지 고려해야 하고, 필요한 자료형을 변환할 수도 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;null을 허용한 변수 검사하기&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;프로그램이 실행되는 도중에 값이 null인 변수에 접근하려 하면 NullPointException(NPE) 예외 오류가 발생합니다. 코틀린은 변수에 null을 허용하지 않아 이 문제를 미리 방지할 수 있습니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;변수에 null 할당하기&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;674&quot; data-origin-height=&quot;232&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bPkxdu/btrXwhYBJGs/KyjSKkzynLN1CpnA8x2hd0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bPkxdu/btrXwhYBJGs/KyjSKkzynLN1CpnA8x2hd0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bPkxdu/btrXwhYBJGs/KyjSKkzynLN1CpnA8x2hd0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbPkxdu%2FbtrXwhYBJGs%2FKyjSKkzynLN1CpnA8x2hd0%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;674&quot; height=&quot;232&quot; data-origin-width=&quot;674&quot; data-origin-height=&quot;232&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위와 같이 타입에 물음표(?) 기호를 사용하지 않을 경우에는 null을 허용하지 않는다는 뜻입니다. 그렇게 때문에 만약 null을 할당하게 된다면 위와 같이 null에 빨간 줄로 표기사 되면서 NPE 예외 오류가 발생하게 됩니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;375&quot; data-origin-height=&quot;181&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/NLczJ/btrXBllC6Xt/1JHePqdPVY73CkJYrZ2TD0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/NLczJ/btrXBllC6Xt/1JHePqdPVY73CkJYrZ2TD0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/NLczJ/btrXBllC6Xt/1JHePqdPVY73CkJYrZ2TD0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FNLczJ%2FbtrXBllC6Xt%2F1JHePqdPVY73CkJYrZ2TD0%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;375&quot; height=&quot;181&quot; data-origin-width=&quot;375&quot; data-origin-height=&quot;181&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;변수에 null 할당을 허용하려면 자료형 뒤에 물음표(?) 기호를 명시해야 합니다. null 허용 여부에 따라 String과 String? 서로 다른 자료형입니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;세이프 콜과 non-null 단정 기호를 활용하여 null을 허용한 변수 사용하기&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;674&quot; data-origin-height=&quot;185&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Smqy9/btrXyknkR21/Iax2accjr5FlDzizzaOv7K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Smqy9/btrXyknkR21/Iax2accjr5FlDzizzaOv7K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Smqy9/btrXyknkR21/Iax2accjr5FlDzizzaOv7K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FSmqy9%2FbtrXyknkR21%2FIax2accjr5FlDzizzaOv7K%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;674&quot; height=&quot;185&quot; data-origin-width=&quot;674&quot; data-origin-height=&quot;185&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위와 같이 문자열의 길이를 구하기 위해 str1.length를 사용할 경우, 변수에 문자열이 할당되어 있는 상태라면 길이를 구할 수 있겠지만 null이 할당되어 있는 상태라면 문자열의 길이를 구할 때 NPE가 발생할 것입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이럴 경우 세이프 콜(.?)이나 non-null 단정 기호(!!)만 허용한다는 팁을 볼 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;세이프 콜이란 null이 할당되어 있을 가능성이 있는 변수를 검사하여 안전하게 호출하도록 도와주는 기법을 말합니다. 검사를 하고 값이 있으면 그 값을 읽고, 아무것도 들어 있지 않을 경우 null을 출력합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;non-null 단정 기호는 변수에 할당된 값이 null이 아님을 단정하므로 컴파일러가 null 검사 없이 무시합니다. 따라서 변수에 null이 할당되어 있어도 컴파일은 잘 진행됩니다. 하지만 null 상태라면, 실행 중에 NPE를 발생시킵니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;조건문을 활용해 null을 허용한 변수 검사하기&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;조건문으로 null을 허용한 변수를 검사해도 됩니다. 즉, null을 허용한 변수의 null 상태 가능성을 검사하기만 하면 코틀린 컴파일러는 오류를 발생시키지 않습니다.&lt;/p&gt;
&lt;pre class=&quot;livecodeserver&quot;&gt;&lt;code&gt;val length = if (str1 == null) -1 else str1.length
&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;세이프 콜과 엘비스 연산자를 활용해 null을 허용한 변수 더 안전하게 사용하기&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;null을 허용한 변수를 조금 더 안전하게 사용하려면 세이프 콜(?.)과 엘비스 연산자 (?:)를 함께 사용하면 됩니다. 엘비스 연산자는 변수가 null인지 아닌지 검사하여 null이 아니라면 왼쪽식을 실행하고, null이면 오른쪽 식을 실행합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 조건문을 기호를 표현하는 방식이라고 생각하시면 됩니다.&lt;/p&gt;
&lt;pre class=&quot;applescript&quot;&gt;&lt;code&gt;val length = str1?.length ?: -1
&lt;/code&gt;&lt;/pre&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;null에 대해 위와 같이 세이프콜이나 단정기호를 사용하는 이유는 컴파일러에게 알려주어 속도를 높여주기 위해서입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;자료형 비교하고 검사하고 변환하기&lt;/b&gt;&lt;/h3&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;자료형 변환&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;코틀린에서는 자료형이 다르면 변환 함수를 사용해야 하지만 자바에서는 자료형이 서로 다르면 자동으로 변환됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;코틀린에서는 자료형이 다른 변수에 재할당하면 자동 형 변환이 되지 않고 자료형 불일치 오류(Type Mismatch)가 발생합니다. 의도하지 않게 자료형이 변하는 것을 방지하기 위한 것입니다. 원하는 자료형으로 변환하는 방법은 .to자료형() 메서드를 사용하면 됩니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;780&quot; data-origin-height=&quot;299&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cnZVSv/btrXrTRF5aD/xKTW2AqkBOuEvra1USATyk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cnZVSv/btrXrTRF5aD/xKTW2AqkBOuEvra1USATyk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cnZVSv/btrXrTRF5aD/xKTW2AqkBOuEvra1USATyk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcnZVSv%2FbtrXrTRF5aD%2FxKTW2AqkBOuEvra1USATyk%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;780&quot; height=&quot;299&quot; data-origin-width=&quot;780&quot; data-origin-height=&quot;299&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&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;기본형과 참조형 자료형의 비교 원리&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;단순히 값만 비교할 때는 이중 등호(==)를 사용하고 참조 주소를 비교하려면 삼중 등호(===)를 사용합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1675058625646&quot; class=&quot;kotlin&quot; data-ke-language=&quot;kotlin&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;val a: Int = 123
val b: Int = 123
val c: Int? = 123

println(a==b)       //true
println(a===b)      //true
println(a==c)       //true
println(a===c)      //false&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;a, b는 123이라는 값이 기본형으로 변환되어 스택에 값 자체를 저장하기 때문에 값과 참조 주소가 같지만, c는 Int?형인 참조형으로 저장되므로 123이 저장된 힙의 참조 주소가 저장되어 있습니다. 그래서 값은 같지만 참조 주소는 다릅니다.&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;/ul&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;자료형 검사하기&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;is는 왼쪽 항의 변수가 오른쪽 항의 자료형과 같으면 true, 아니면 false를 반환합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1675059396319&quot; class=&quot;kotlin&quot; data-ke-language=&quot;kotlin&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;val x: Any
x = &quot;Hello&quot;

if (x is String) {
	print(x.length)
}&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;as에 의한 스마트 캐스트&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;as로 스마트 캐스트할 수 있습니다. as는 형 변환이 가능하지 않으면 예외를 발생시킵니다.&lt;/p&gt;
&lt;pre id=&quot;code_1675059468591&quot; class=&quot;kotlin&quot; data-ke-language=&quot;kotlin&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;val x: String = y as String&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위의 경우 y가 null이 아니면 String으로 형 변환이 되지만, null이면 형 변환을 할 수 없으므로 예외가 발생합니다.&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;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Any형은 자료형이 특별히 정해지지 않은 경우에 사용합니다. 코틀린의 Any형은 모든 클래스의 뿌리입니다. 즉, 코틀린의 모든 클래스는 바로 이 Any형이라는 슈퍼 클래스를 가집니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Any형은 무엇이든지 될 수 있기 때문에 언제든 필요한 자료형으로 자동 변환할 수 있습니다. 이것을 묵시적 변환이라고도 합니다. 즉, 함수와 판단문을 사용해 언제든지 필요한 자료형에 따른 역할을 지정하여 처리할 수 있습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1675060029488&quot; class=&quot;kotlin&quot; data-ke-language=&quot;kotlin&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;fun main() {
	checkArg(&quot;Hello&quot;)
    checkArg(12)
}

fun checkArg(x: Any) {
	if (x is String) {
    	println(&quot;x is String&quot;)
    }
    if (x is Int) {
    	println(&quot;x is Int&quot;)
    }
}

결과
x is String
x is Int&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위와 같이 Any를 통해 여러 자료형의 인자가 들어올 수 있고, is로 자료형을 확인하여 자료형에 따른 원하는 동작을 작성할 수 있습니다.&lt;/p&gt;</description>
      <category>책/Do it! 코틀린 프로그래밍</category>
      <category>!!.</category>
      <category>.to</category>
      <category>?.</category>
      <category>?:</category>
      <category>ANY</category>
      <category>AS</category>
      <category>IS</category>
      <category>NULL</category>
      <category>nullpointexception</category>
      <category>엘비스 연산자</category>
      <author>50HEE</author>
      <guid isPermaLink="true">https://sohee0428.tistory.com/114</guid>
      <comments>https://sohee0428.tistory.com/114#entry114comment</comments>
      <pubDate>Mon, 30 Jan 2023 15:32:04 +0900</pubDate>
    </item>
    <item>
      <title>kotlin - shuffle() vs shuffled()</title>
      <link>https://sohee0428.tistory.com/112</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;shuffle()과 shuffled()는 리스트의 값들을 섞고 싶은 경우 사용하는 것입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;밑의 사진과 코드는 shuffle()과 shuffled()의 코드입니다.&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-origin-width=&quot;1066&quot; data-origin-height=&quot;209&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bIPZQG/btrGmoM6wRg/B5KkBSbJ88P80t7aDZ4qQ1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bIPZQG/btrGmoM6wRg/B5KkBSbJ88P80t7aDZ4qQ1/img.png&quot; data-alt=&quot;shuffle()&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bIPZQG/btrGmoM6wRg/B5KkBSbJ88P80t7aDZ4qQ1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbIPZQG%2FbtrGmoM6wRg%2FB5KkBSbJ88P80t7aDZ4qQ1%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;1066&quot; height=&quot;209&quot; data-origin-width=&quot;1066&quot; data-origin-height=&quot;209&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;shuffle()&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1077&quot; data-origin-height=&quot;137&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/20rg1/btrGksoVFCC/yBhpjuemkIe1R8kyIuJPq1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/20rg1/btrGksoVFCC/yBhpjuemkIe1R8kyIuJPq1/img.png&quot; data-alt=&quot;shuffled()&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/20rg1/btrGksoVFCC/yBhpjuemkIe1R8kyIuJPq1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F20rg1%2FbtrGksoVFCC%2FyBhpjuemkIe1R8kyIuJPq1%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;1077&quot; height=&quot;137&quot; data-origin-width=&quot;1077&quot; data-origin-height=&quot;137&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;shuffled()&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;pre class=&quot;kotlin&quot; data-ke-language=&quot;kotlin&quot;&gt;&lt;code&gt;/**
 * Randomly shuffles elements in this mutable list.
 */
@kotlin.internal.InlineOnly
@SinceKotlin(&quot;1.2&quot;)
public actual inline fun &amp;lt;T&amp;gt; MutableList&amp;lt;T&amp;gt;.shuffle() {
    java.util.Collections.shuffle(this)
}


/**
 * Returns a new list with the elements of this list randomly shuffled.
 */
@SinceKotlin(&quot;1.2&quot;)
public actual fun &amp;lt;T&amp;gt; Iterable&amp;lt;T&amp;gt;.shuffled(): List&amp;lt;T&amp;gt; = toMutableList().apply { shuffle() }&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;shuffle()&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;shuffle()의 경우에는 MutableList에서만 가능합니다. 그 이유는 리스트의 순서를 바꾸는 것이 결국 리스트의 값들을 바꾸는 것과 같기 때문에 MutableList를 사용하는 것입니다.&lt;/li&gt;
&lt;li&gt;shuffle()은 단지 리스트를 섞는 것이기 때문에 List를 반환하지는 않습니다. 다르게 표현하자면 섞는다는 행위를 하는 것입니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;shuffled()&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;shuffled()의 경우에는 MutableList의 상위 클래스인 Iterable에서 사용이 가능합니다. 즉, shuffled()를 사용할 경우 MutableList 외에서도 사용이 가능한 것입니다.&amp;nbsp;shuffled() 자체가 toMutableList()를 통해 스스로 바꾸기 때문입니다.&lt;/li&gt;
&lt;li&gt;shuffled()는 shuffle()과 달리 List를 반환합니다. 이는 list를 shuffle()란 결과를 새로운 리스트로 반환한다는 것과 같습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;사용법&lt;/b&gt;&lt;/h3&gt;
&lt;pre id=&quot;code_1656851339139&quot; class=&quot;kotlin&quot; data-ke-language=&quot;kotlin&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// shuffle() 예시
val defaultMutabletList = mutableListOfp(1,2,3)

defaultMutabletList.shuffle()
print(defaultMutabletList)

// shuffled() 예시
val defaultList = listOf(1,2,3)

print(defaultList.shuffled())&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;shuffle()을 사용하기 위해 mutableList 타입인 defaultMutableList를 생성했습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;shuffle()의 경우에는 위에서 말한 것처럼 섞는 행위만 하는 것이어서 섞인 리스트를 부르고 싶을 경우에는 기존 리스트를 호출하면 됩니다. 이 말은 기존 리스트의 값들을 섞기 때문에 기존 리스트는 처음 가지도 있는 순서가 더 이상 아니라는 것입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;반면 shuffled()의 경우에는 List 타입의 defaultList를 생성했습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;shuffled()는 list를 반환하기 때문에 shuffled()를 바로 사용할 수 있습니다. 그리고 이는 위에서 설명한 것과 같이 새로운 리스트를 만드는 것과 같기 때문에&amp;nbsp; 기존 리스트의 값은 유지됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위와 같은 특징을 잘 생각하고 각 상황에 맞게 사용하시면 됩니다!&lt;/p&gt;</description>
      <category>코틀린</category>
      <category>shffled</category>
      <category>shuffle</category>
      <author>50HEE</author>
      <guid isPermaLink="true">https://sohee0428.tistory.com/112</guid>
      <comments>https://sohee0428.tistory.com/112#entry112comment</comments>
      <pubDate>Mon, 4 Jul 2022 00:57:13 +0900</pubDate>
    </item>
    <item>
      <title>[에러 해결] java.net.UnknownHostException: Unable to resolve host : No address associated with hostname</title>
      <link>https://sohee0428.tistory.com/111</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;java.net.UnknownHostException: Unable to resolve host : No address associated with hostname&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위와 같은 에러가 발생하는 이유는 &lt;b&gt;테스트 기기의 인터넷 연결이 되어있지 않을 경우&lt;/b&gt; 발생합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;테스트 시 테스트 기기의 설정을 잘 확인합시다!!!&lt;/p&gt;</description>
      <category>안드로이드/에러</category>
      <author>50HEE</author>
      <guid isPermaLink="true">https://sohee0428.tistory.com/111</guid>
      <comments>https://sohee0428.tistory.com/111#entry111comment</comments>
      <pubDate>Wed, 22 Jun 2022 22:44:32 +0900</pubDate>
    </item>
    <item>
      <title>메모리 구조</title>
      <link>https://sohee0428.tistory.com/110</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;메모리는 흔히 RAM을 지칭합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;프로그램이 운영체제로부터 할당받는 대표적인&lt;span&gt; 메모리 공간은 코드, 데이터, 힙, 스택이 있습니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&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;메모리 구조를 보기 전 메모리 공간에 대해 PC를 사용할 때 동작하는 것을 예시로 설명하겠습니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;사용자가 프로그램을 실행하기 위해 클릭하는 동작은 운영체제에 실행파일을 실행하도록 요청하는 것입니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;운영체제는 프로그램의 정보를 읽고 메모리 공간을 할당해주면 코드를 메모리에 등록하고 실행하며 동작하게 됩니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;329&quot; data-origin-height=&quot;449&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bkXcK7/btrCZRRIV1f/1kti18wOMqS28tHs3HkhSK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bkXcK7/btrCZRRIV1f/1kti18wOMqS28tHs3HkhSK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bkXcK7/btrCZRRIV1f/1kti18wOMqS28tHs3HkhSK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbkXcK7%2FbtrCZRRIV1f%2F1kti18wOMqS28tHs3HkhSK%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;329&quot; height=&quot;449&quot; data-origin-width=&quot;329&quot; data-origin-height=&quot;449&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;&lt;span&gt;코드(Code) / 텍스트(Text)&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;프로그램의 코드가 실행하기 위해 저장되어 있는 영역으로 &lt;b&gt;'텍스트(Text) 영역'&lt;/b&gt;이라고도 부릅니다.&lt;/li&gt;
&lt;li&gt;저장되는 코드는 기계어 형태(0, 1)로 저장됩니다.&lt;/li&gt;
&lt;li&gt;실행 파일을 구성하는 명령어들이 올라가는 메모리 영역으로 함수, 제어문, 상수 등이 여기에 해당합니다.&lt;/li&gt;
&lt;li&gt;프로그램이 시작과 종료될 때까지 메모리에 남아있습니다.&lt;/li&gt;
&lt;li&gt;CPU는 코드 영역에 저장된 명령어들을 하나씩 가져가서 실행합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;&lt;span&gt;데이터(Data)&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;전역 변수와 정적 변수가 저장되는 영역입니다.&lt;/li&gt;
&lt;li&gt;메인(main) 함수가 실행되기 전(프로그램 실행 전)에 선언되어 프로그램이 끝날 때까지 남아있는 변수들이라는 특징이 있습니다.&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;b&gt;&lt;span&gt;&lt;span&gt;힙(Heap)&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;프로그래머가 직접 공간을 할당, 제어하는 영역입니다. 즉, 사용자에 의해 관리되는 영역입니다. 프로그래머가 원하는 시점에서 변수를 할당하고 소멸하는 영역입니다.&lt;/li&gt;
&lt;li&gt;동적으로 할당되는 변수들이 여기에 저장되어 동적 할당 영역이라고도 부릅니다.&lt;/li&gt;
&lt;li&gt;메모리 영역 중 유일하게 런타임 시 크기가 결정됩니다.&lt;/li&gt;
&lt;li&gt;메모리가 낮은 주소에서 높은 주소로 할당됩니다.&lt;/li&gt;
&lt;li&gt;선입선출 형태입니다.&lt;/li&gt;
&lt;li&gt;java로 보면 클래스나, 참조 변수가 해당합니다.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;사용 후 반드시 메모리를 해제해주어야 하는데, 그렇지 않으면 메모리 누수(Memory Leak)가 발생합니다. 메모리가 응용 프로그램이 종료될 때까지 유지되기 때문입니다. java의 경우에는 가비지 컬렉터가 자동으로 해제합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;&lt;span&gt;스택(Stack)&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;프로그램이 자동으로 사용하는 임시 메모리 영역입니다.&lt;/li&gt;
&lt;li&gt;함수 호출 시 함수 내에 생성된 지역 변수와 매개변수가 저장되는 영역입니다. 메인(main) 함수 안에서의 변수들도 포함됩니다.&lt;/li&gt;
&lt;li&gt;함수 호출 완료 시 메모리는 삭제됩니다. 즉, 함수가 종료되면 해당 함수에 할당된 변수들을 해제시킵니다. 이는 스택 자료구조의 pop과 기능이 같습니다.&lt;/li&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;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;521&quot; data-origin-height=&quot;704&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/l3ij8/btrC18futDQ/nIRRfH7wVD9T5UulU1kfr0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/l3ij8/btrC18futDQ/nIRRfH7wVD9T5UulU1kfr0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/l3ij8/btrC18futDQ/nIRRfH7wVD9T5UulU1kfr0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fl3ij8%2FbtrC18futDQ%2FnIRRfH7wVD9T5UulU1kfr0%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;521&quot; height=&quot;704&quot; data-origin-width=&quot;521&quot; data-origin-height=&quot;704&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;힙(Heap) vs 스택(Stack)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사실 힙과 스택은 같은 공간을 공유하고 있습니다. 그 공간 안에서 힙과 스택은 각각 할당된 영역이 있습니다. 이 영역을 상대가 침범하게 되면 Overflow가 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;HeapOverFlow&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;힙 영역에 할당된 영역의 경계선 밖으로 넘어갈 때 발생합니다. 예시로는 매우 큰 데이터를 생성하려고 할 때 발생합니다. 즉, 메모리 부족(OutOfMemory)이 있습니다.&lt;/span&gt;&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;b&gt;StackOverFlow&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;호출된 스택이 할당된 스택 영역 경계선 밖으로 넘어갈 때 발생합니다. 예시로는 재귀 호출에서 발생합니다. 재귀 함수를 간단하게 소개하자면 '재귀' 말 그대로 자기 자신을 호출합니다. 이를 무한하게 할 경우 StackOverFlow가 발생하는 것입니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;</description>
      <category>안드로이드 면접 질문/CS 예상 질문</category>
      <author>50HEE</author>
      <guid isPermaLink="true">https://sohee0428.tistory.com/110</guid>
      <comments>https://sohee0428.tistory.com/110#entry110comment</comments>
      <pubDate>Tue, 24 May 2022 14:52:42 +0900</pubDate>
    </item>
    <item>
      <title>프로세스(Process) vs 스레드(Thread)</title>
      <link>https://sohee0428.tistory.com/109</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;우선 프로세스와 스레드를 설명하기 전에 프로그램에 대해 알아보면 좀 더 쉽게 이해할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(저는 처음에 접했을 때 아래 설명을 보면 '~작업의 단위' 이런 식으로 설명이 되어있는데, 이해가 안 가면 그냥 무시하고 실행해주는 아이구나 이런 식으로 공부했습니다.)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;프로그램&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;프로그램은 파일이 저장 장치에 저장되어 있지만 메모리에 올라가 있지 않은 정적인 상태를 의미합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;쉽게 풀면 아직 운영체제가 프로그램에게 독립적인 메모리 공간을 할당해 주지 않아 실행되기 전의 상태를 의미합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그냥 코드 덩어리라고 생각하시면 됩니다. 그저 코드가 있을 뿐 이것을 실행하지 않은 것입니다.&lt;/p&gt;
&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;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;프로세스&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;프로세스는 운영체제로부터 자원을 할당받는 작업의 단위를 의미합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;프로세스는 정적인 프로그램을 동적으로 만들어 주는 것입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다시 말해, 메모리가 할당되지 않아 실행할 수 없는 프로그램을 메모리를 할당하여 실행하게 하는 것입니다.&lt;/p&gt;
&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;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;스레드&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;스레드는 프로세스에서 할당받은 자원을 이용하여 실행하는 단위를 의미합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;스레드를 설명하기 전 만약 복잡해진 프로그램에 하나의 프로세스로 동작을 한다면 어떻게 될까요?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그러면 여러 개의 프로세스를 만들면 된다고 생각을 할 수 있는데, 이는 운영체제의 안정성을 위해 자신에게 할당된 메모리 내의 정보만 접근할 수 있게 제약이 있습니다. 그래서 다른 프로세스에서 정보를 접근하려 하면 오류가 발생합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이러한 한계를 해결하기 위해 사용하는 것이 스레드입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다시 스레드의 설명으로 넘어가면 스레드는 프로세스 내에 존재하며 실행하는 단위입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;복잡해지는 프로그램 안에서 같은 메모리를 공유해야 하는 상황이 생기면 프로세스와 달리 여러 개의 스레드를 사용하여 동작할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이는 프로세스 내에는 여러 개의 스레드를 생성할 수 있다는 것입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;811&quot; data-origin-height=&quot;350&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/FrLSd/btrCBCgsUl9/WbQZfLNnmqmtS9K02BvOq1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/FrLSd/btrCBCgsUl9/WbQZfLNnmqmtS9K02BvOq1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/FrLSd/btrCBCgsUl9/WbQZfLNnmqmtS9K02BvOq1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FFrLSd%2FbtrCBCgsUl9%2FWbQZfLNnmqmtS9K02BvOq1%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;811&quot; height=&quot;350&quot; data-origin-width=&quot;811&quot; data-origin-height=&quot;350&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;프로세스와 스레드의 메모리 공유&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위에서 언급했듯이 프로세스는 메모리를 공유할 수 없지만, 스레드는 가능합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;메모리의 종류는 다음 파트에서 참고하세요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://sohee0428.tistory.com/110&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;2022.05.24 - [안드로이드 면접 질문/CS 예상 질문] - 메모리 구조&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;코드, 데이터, 힙, 스택 중 스택을 제외한 메모리를 공유할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;프로세스는 그럼 불가능한가?&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이를 해결하기 위해 프로세스 간의 의사소통을 위한 IPC(Inter Process Communication)이 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이는 참고를 위해 작성하였고 자세한 부분은 나중에 다루겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;요약&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;애플리케이션은 하나의 프로세스이고, 그 안에서 분기 처리를 하는 것이 스레드가 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;프로세스는 메모리를 공유할 수 없으나, 스레드는 스택을 제외한 메모리는 공유가 가능합니다.&lt;/p&gt;</description>
      <category>안드로이드 면접 질문/CS 예상 질문</category>
      <category>Process</category>
      <category>thread</category>
      <category>스레드</category>
      <category>프로세스</category>
      <author>50HEE</author>
      <guid isPermaLink="true">https://sohee0428.tistory.com/109</guid>
      <comments>https://sohee0428.tistory.com/109#entry109comment</comments>
      <pubDate>Thu, 19 May 2022 11:08:53 +0900</pubDate>
    </item>
    <item>
      <title>A회사 면접 (2022.01.05)</title>
      <link>https://sohee0428.tistory.com/108</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;4년 된 중소기업 회사입니다. 자사 앱이 있는 회사입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이력서 -&amp;gt; 과제 -&amp;gt; 1차 면접(기술 면접) -&amp;gt; 2차 면접(인성 면접?) -&amp;gt; 최종 발표&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1차 면접은 3:1, 2차 면접은 1:1로 진행하였습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;s&gt;저의 스펙은 비전공자, 개발 경험 8개월, 블로그 및 Github 관리, 개인 어플 출시, 이력서는 노션으로 지원하였습니다.&lt;/s&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;lt;1차 면접 질문&amp;gt;&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;자기소개&lt;/li&gt;
&lt;li&gt;장점&lt;/li&gt;
&lt;li&gt;공부를 하게 된 이유&lt;/li&gt;
&lt;li&gt;어떤 개발자가 되고 싶은지&lt;/li&gt;
&lt;li&gt;공부 방법&lt;/li&gt;
&lt;li&gt;스터디 경험&lt;/li&gt;
&lt;li&gt;협동 프로젝트 경험&lt;/li&gt;
&lt;li&gt;앱 출시 경험&lt;/li&gt;
&lt;li&gt;액티비티 생명주기&lt;/li&gt;
&lt;li&gt;Firebase 사용 경험&lt;/li&gt;
&lt;li&gt;customView를 사용해 보았는지&lt;/li&gt;
&lt;li&gt;bindingAdapter&lt;/li&gt;
&lt;li&gt;ScopeFunction의 장점&lt;/li&gt;
&lt;li&gt;postValue VS setValue&lt;/li&gt;
&lt;li&gt;Lateinit var과 val by lazy&lt;/li&gt;
&lt;li&gt;새로운 기술을 사용해 보았는지(ex - compose)&lt;/li&gt;
&lt;li&gt;xml 아닌 코틀린으로 화면을 구성한 적이 있는지&lt;/li&gt;
&lt;li&gt;양방향 코드 경험&lt;/li&gt;
&lt;li&gt;jetpack 아는 것&lt;/li&gt;
&lt;li&gt;테스트 코드 사용하는 이유 및 경험&lt;/li&gt;
&lt;li&gt;어려움이 생겼을 시 대처 방안&lt;/li&gt;
&lt;li&gt;성격 및 스트레스를 푸는 방법&lt;/li&gt;
&lt;li&gt;다른 회사 면접 경험&lt;/li&gt;
&lt;li&gt;코드 영역이 겹쳤을 경우 대처 방안&lt;/li&gt;
&lt;li&gt;개발자 내의 다툼 (ex - 독불장군)&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;그 외에도 과제 관련하여 몇 가지 질문을 더 하였습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;저의 이력서에 관해&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;MVVM의 장점 (리팩토링을 통해 사용하여)&lt;/li&gt;
&lt;li&gt;Room 사용 시 SQLite를 알고 사용하였는지&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;lt;2차 면접 질문&amp;gt;&lt;/b&gt;&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;장점&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;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;면접 총평&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1차 면접 시간은 총 1시간 30분 정도 되었고, 2차 면접 시간은 총 20분 정도 되었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1차 면접의 경우 안드로이드 기본 면접 질문과 과제 관련한 질문을 하여 이전 회사에 비해 기술 질문이 많았습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;또한 팀원과의 충돌이나 소통과 관련한 질문도 적지는 않았습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2차 면접은 성격을 위주로 질문하였습니다. 약간 부사장님과 인사하는 정도로 매우 간단하였습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>안드로이드 면접 질문/면접 후기</category>
      <category>면접 후기</category>
      <author>50HEE</author>
      <guid isPermaLink="true">https://sohee0428.tistory.com/108</guid>
      <comments>https://sohee0428.tistory.com/108#entry108comment</comments>
      <pubDate>Sun, 10 Apr 2022 22:49:20 +0900</pubDate>
    </item>
  </channel>
</rss>