<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>do Developer</title>
    <link>https://moonsu.tistory.com/</link>
    <description>안드로이드스튜디오, 유니티 개발 팁</description>
    <language>ko</language>
    <pubDate>Wed, 24 Jun 2026 12:32:43 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>moonsu</managingEditor>
    <item>
      <title>Foreground Service 실행하기</title>
      <link>https://moonsu.tistory.com/68</link>
      <description>&lt;p data-ke-size=&quot;size14&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;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;Service는 백그라운드에서 오래 실행되는 작업을 수행할 수 있는 어플리케이션 구성 요소이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;음악을 재생하거나 파일 I/O를 수행하는 등 콘텐츠 제공자와의 상호작용을 백그라운드에서 수행할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;Foreground service 권한 요청&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;Android 9 (API level 28) 이상을 타깃으로 하는 앱은 반드시 &lt;span style=&quot;color: #1a5490; background-color: #f7fafd;&quot;&gt;&lt;b&gt;FOREGROUND_SERVICE&lt;/b&gt;&lt;/span&gt; 권한을 요청해야한다. 이 권한은 중요도가 낮기 때문에 따로 사용자에게 요구할 필요 없이 자동으로 부여된다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1642642395336&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;manifest xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot; ...&amp;gt;

    &amp;lt;uses-permission android:name=&quot;android.permission.FOREGROUND_SERVICE&quot;/&amp;gt;

    &amp;lt;application ...&amp;gt;
        ...
    &amp;lt;/application&amp;gt;
&amp;lt;/manifest&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;Foreground service 시작&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&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;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;Kotlin Code&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;Kotlin Code&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;Kotlin Code&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;pre id=&quot;code_1642642753372&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;val intent = Intent(...) // 서비스 인텐트
startForegroundService(intent)&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;Java Code&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;Java Code&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;Java Code&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;pre id=&quot;code_1642642962233&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Intent intent = new Intent(...); // 서비스 인텐트
startForegroundService(intent);&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;startForegroundService를 통해 서비스가 실행되면 바로 &lt;b&gt;&lt;span style=&quot;color: #1a5490; background-color: #f7fafd;&quot;&gt;startForeground()&lt;/span&gt;&lt;/b&gt; 메소드를 호출해야한다. 이 메소드는 &lt;b&gt;&lt;span style=&quot;color: #1a5490; background-color: #f7fafd;&quot;&gt;Notification&lt;/span&gt;&lt;/b&gt; 을 띄움으로써 사용자에게 서비스가 실행되고 있음을 알려준다.&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;Kotlin Code&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;Kotlin Code&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;Kotlin Code&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;pre id=&quot;code_1642643664942&quot; class=&quot;kotlin&quot; data-ke-language=&quot;kotlin&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;val notification: Notification = Notification.Builder(this, CHANNEL_DEFAULT_IMPORTANCE)
        .setContentTitle(getText(R.string.notification_title)) //알림 제목
        .setContentText(getText(R.string.notification_message)) //알림 내용
        .setSmallIcon(R.drawable.icon) //알림 아이콘
        .build()

// Notification ID는 0이 될 수 없다. 
startForeground(ONGOING_NOTIFICATION_ID, notification)&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;Java Code&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;Java Code&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;Java Code&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;pre id=&quot;code_1642643721110&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Notification notification =
          new Notification.Builder(this, CHANNEL_DEFAULT_IMPORTANCE)
    .setContentTitle(getText(R.string.notification_title)) // 알림 제목
    .setContentText(getText(R.string.notification_message)) // 알림 내용
    .setSmallIcon(R.drawable.icon) // 알림 아이콘
    .build();

// Notification ID는 0이 될 수 없다.
startForeground(ONGOING_NOTIFICATION_ID, notification);&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;이 때 Android 8 (API26) 이상을 타겟하는 경우라면 &lt;b&gt;&lt;span style=&quot;background-color: #f7fafd; color: #1a5490;&quot;&gt;Notification을 띄우기 전&lt;/span&gt;&lt;/b&gt;에 Notification을 채널에 할당해야 한다.&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;Kotlin Code&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;Kotlin Code&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;pre id=&quot;code_1642644396511&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;    if (Build.VERSION.SDK_INT &amp;gt;= Build.VERSION_CODES.O) {
        // 채널 이름, 설명, 중요도 설정
        val name = getString(R.string.channel_name)
        val descriptionText = getString(R.string.channel_description)
        val importance = NotificationManager.IMPORTANCE_DEFAULT
        
        // 채널 생성
        val mChannel = NotificationChannel(CHANNEL_ID, name, importance)
        mChannel.description = descriptionText // 사용자에게 표시되는 설명글
        
        val notificationManager = getSystemService(NOTIFICATION_SERVICE) as NotificationManager
        notificationManager.createNotificationChannel(mChannel)
    }&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;Java Code&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;Java Code&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;pre id=&quot;code_1642644479025&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;        if (Build.VERSION.SDK_INT &amp;gt;= Build.VERSION_CODES.O) {
            //채널 이름, 설명, 중요도 설정
            CharSequence name = getString(R.string.channel_name);
            String description = getString(R.string.channel_description);
            int importance = NotificationManager.IMPORTANCE_DEFAULT;
            
            // 채널 생성
            NotificationChannel channel = new NotificationChannel(CHANNEL_ID, name, importance);
            channel.setDescription(description);
            
            NotificationManager notificationManager = getSystemService(NotificationManager.class);
            notificationManager.createNotificationChannel(channel);
        }&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&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;size14&quot;&gt;채널 중요도는 아래 표시된 대로 사용자가 볼 수 있는 종요도 옵션을 설정한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 166px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 18px;&quot;&gt;
&lt;td style=&quot;width: 33.3333%; height: 18px;&quot;&gt;&lt;b&gt;사용자가 볼 수 있는 중요도 수준&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 18px;&quot;&gt;&lt;b&gt;Android 8 이상&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 18px;&quot;&gt;&lt;b&gt;Android 7.1 이하&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 37px;&quot;&gt;
&lt;td style=&quot;width: 33.3333%; height: 37px;&quot;&gt;&lt;b&gt;긴급&lt;br /&gt;&lt;/b&gt;알림음이 울리며 헤드업 알림으로 표시&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 37px;&quot;&gt;&lt;span style=&quot;color: #1a5490;&quot;&gt;&lt;b&gt;IMPORTANCE_HIGH&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 37px;&quot;&gt;&lt;span style=&quot;color: #1a5490;&quot;&gt;&lt;b&gt;PRIORITY_HIGH&amp;nbsp;&lt;/b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;또는&lt;/span&gt;&amp;nbsp;&lt;b&gt;PRIORITY_MAX&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 37px;&quot;&gt;
&lt;td style=&quot;width: 33.3333%; height: 37px;&quot;&gt;&lt;b&gt;높음&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;br /&gt;알림음이 울림&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 37px;&quot;&gt;&lt;span style=&quot;color: #1a5490;&quot;&gt;&lt;b&gt;IMPORTANCE_DEFAULT&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 37px;&quot;&gt;&lt;span style=&quot;color: #1a5490;&quot;&gt;&lt;b&gt;PRIORITY_DEFAULT&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 37px;&quot;&gt;
&lt;td style=&quot;width: 33.3333%; height: 37px;&quot;&gt;&lt;b&gt;중간&lt;br /&gt;&lt;/b&gt;알림음이 없음&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 37px;&quot;&gt;&lt;span style=&quot;color: #1a5490;&quot;&gt;&lt;b&gt;&lt;b&gt;IMPORTANCE_LOW&lt;/b&gt;&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 37px;&quot;&gt;&lt;span style=&quot;color: #1a5490;&quot;&gt;&lt;b&gt;PRIORITY_LOW&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 37px;&quot;&gt;
&lt;td style=&quot;width: 33.3333%; height: 37px;&quot;&gt;&lt;b&gt;낮음&lt;/b&gt;&lt;br /&gt;알림음이 없고 상태 표시줄에 표시 안됨&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 37px;&quot;&gt;&lt;span style=&quot;color: #1a5490;&quot;&gt;&lt;b&gt;IMPORTANCE_MIN&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 37px;&quot;&gt;&lt;span style=&quot;color: #1a5490;&quot;&gt;&lt;b&gt;PRIORITY_MIN&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;</description>
      <category>Android</category>
      <category>android</category>
      <category>androidStudio</category>
      <category>java</category>
      <category>Kotlin</category>
      <category>안드로이드스튜디오</category>
      <category>앱</category>
      <category>자바</category>
      <category>코틀린</category>
      <author>moonsu</author>
      <guid isPermaLink="true">https://moonsu.tistory.com/68</guid>
      <comments>https://moonsu.tistory.com/68#entry68comment</comments>
      <pubDate>Thu, 20 Jan 2022 11:21:42 +0900</pubDate>
    </item>
    <item>
      <title>Kotlin :: try~catch, throw</title>
      <link>https://moonsu.tistory.com/67</link>
      <description>&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;프로그램 코드를 작성하다 보면 해당 코드가 제대로 작동하지 못하고 중단되는 현상이 발생한다. 이것이 예외(Exception)이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;따라서 프로그램을 실행할 때 발생할 수 있는 예외에 대비 즉, 예외 처리를 해야하는데 try 블록에서 발생한 예외를 catch 블록에서 잡아 처리한다.&lt;/p&gt;
&lt;pre id=&quot;code_1636339149840&quot; class=&quot;kotlin&quot; data-ke-language=&quot;kotlin&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;try{
   // 예외 발생 가능성이 있는 문장
} catch (e: 예외 처리 클래스) {
   // 예외 처리
} finally {
   // 반드시 실행되어야 하는 문장
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;finally 블록은 try 블록의 예외 발생 여부에 상관 없이 반드시 처리해야할 문장을 작성한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;예를 들어 try블록에서 '파일 열기' 작업을 했다면 finally 블록에서는 반드시 '파일 닫기' 작업을 한다. 반드시 해야할 작업이 없다면 생략도 가능하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;아래는 0으로 나누었을 때 발생하는 예외 상황을 처리하는 문장이다.&lt;/p&gt;
&lt;pre id=&quot;code_1636339433404&quot; class=&quot;kotlin&quot; data-ke-language=&quot;kotlin&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;fun main(){
    val a = 10
    val b = 0
    val c : Int
    
    try{
        c = a / b  // 0으로 나눔
    } catch (e : Exception) {
        // 예외 처리
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;throw&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;앞서 try~catch 블록으로 예외를 처리했다면 throw 키워드는 의도적으로 예외를 발생시킬 수 있다.&lt;/p&gt;
&lt;pre id=&quot;code_1636339564310&quot; class=&quot;kotlin&quot; data-ke-language=&quot;kotlin&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;throw Exception(message: String)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;변수 a, b중 하나라도 0이라면 예외를 발생시키는 문장을 작성해보자&lt;/p&gt;
&lt;pre id=&quot;code_1636339637956&quot; class=&quot;kotlin&quot; data-ke-language=&quot;kotlin&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;fun main() {
    var a = 10
    var b = 0

    try {
        Divide(a, b)
    } catch (e: Exception) {
        println(e.message)
    }
}

fun Divide (a: Int, b: Int): Int {
    if (a == 0 || b == 0)
        throw Exception(&quot;0으로는 나눌 수 없습니다.&quot;)
    else
        return a / b
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;결과&lt;/p&gt;
&lt;pre id=&quot;code_1636339883542&quot; class=&quot;kotlin&quot; data-ke-language=&quot;kotlin&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// 0으로는 나눌 수 없습니다.&lt;/code&gt;&lt;/pre&gt;</description>
      <category>Android/Kotlin</category>
      <category>android</category>
      <category>androidStudio</category>
      <category>Coding</category>
      <category>Kotlin</category>
      <category>안드로이드</category>
      <category>안드로이드스튜디오</category>
      <category>코딩</category>
      <category>코틀린</category>
      <author>moonsu</author>
      <guid isPermaLink="true">https://moonsu.tistory.com/67</guid>
      <comments>https://moonsu.tistory.com/67#entry67comment</comments>
      <pubDate>Mon, 8 Nov 2021 11:51:55 +0900</pubDate>
    </item>
    <item>
      <title>MS Word 브라우저에서 빨간줄 없애기</title>
      <link>https://moonsu.tistory.com/66</link>
      <description>&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;MS365 Word를 앱이 아닌 브라우저에서 열면 옵션 버튼이 안보인다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ciLmjI/btq1jlRwb9M/qvME2Cp6WVrKVYmnIZJMOK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ciLmjI/btq1jlRwb9M/qvME2Cp6WVrKVYmnIZJMOK/img.png&quot; data-alt=&quot;맞춤법은 어렵다.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ciLmjI/btq1jlRwb9M/qvME2Cp6WVrKVYmnIZJMOK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FciLmjI%2Fbtq1jlRwb9M%2FqvME2Cp6WVrKVYmnIZJMOK%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;figcaption&gt;맞춤법은 어렵다.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;이 때 워드에서 빨간줄이 생기지 않게 하려면 빨간줄이 있는 곳 클릭 후 (전체 해제 하고 싶다면 Ctrl+A로 전체선택)&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;검토 &amp;gt; 맞춤법 및 문법 검사 &amp;gt; 교정 언어 설정 &amp;gt; 맞춤법 또는 문법 검사 안 함 &amp;gt; 체크, 확인&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-filename=&quot;스크린샷 2021-03-30 오후 3.15.25.png&quot; data-origin-width=&quot;355&quot; data-origin-height=&quot;245&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cMhQMl/btq1la90JV5/kOjrBkNWoCSThms8eRcRBK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cMhQMl/btq1la90JV5/kOjrBkNWoCSThms8eRcRBK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cMhQMl/btq1la90JV5/kOjrBkNWoCSThms8eRcRBK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcMhQMl%2Fbtq1la90JV5%2FkOjrBkNWoCSThms8eRcRBK%2Fimg.png&quot; data-filename=&quot;스크린샷 2021-03-30 오후 3.15.25.png&quot; data-origin-width=&quot;355&quot; data-origin-height=&quot;245&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bvQvXU/btq1s32nWHw/rlHE1htNYZ94FUrLi5JIQ1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bvQvXU/btq1s32nWHw/rlHE1htNYZ94FUrLi5JIQ1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bvQvXU/btq1s32nWHw/rlHE1htNYZ94FUrLi5JIQ1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbvQvXU%2Fbtq1s32nWHw%2FrlHE1htNYZ94FUrLi5JIQ1%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size14&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 style=&quot;text-align: left;&quot; data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>기타</category>
      <category>MS365</category>
      <category>Word</category>
      <category>워드</category>
      <author>moonsu</author>
      <guid isPermaLink="true">https://moonsu.tistory.com/66</guid>
      <comments>https://moonsu.tistory.com/66#entry66comment</comments>
      <pubDate>Tue, 30 Mar 2021 15:19:44 +0900</pubDate>
    </item>
    <item>
      <title>Unity Project #1 수박게임(3) - 마우스 따라 오브젝트 움직이기</title>
      <link>https://moonsu.tistory.com/65</link>
      <description>&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #99cefa;&quot;&gt;&lt;b&gt;&lt;a style=&quot;color: #99cefa;&quot; href=&quot;https://moonsu.tistory.com/64&quot;&gt;Unity Project #1 수박게임(2) - Prefab 만들고 생성하기.&lt;/a&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;지난번 포스팅에서 오브젝트가 생성, 떨어지는 것을 구현해봤다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;수박게임에서 오브젝트 루틴은 다음과 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;&lt;b&gt;생성(정지) &amp;gt; 터치다운 &amp;gt; 손가락을 따라 좌우로만 움직임 &amp;gt; 터치업 &amp;gt; 떨어짐&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;위 루틴을 구현하되 테스트를 위해 터치 대신 마우스 클릭으로 대신한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;1. Rigidbody2D - Gravity Scale&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;시작하면 오브젝트가 바로 아래로 떨어지기 때문에 만들어둔 프리팹의 &lt;span style=&quot;background-color: #f6e199;&quot;&gt;&lt;b&gt;Gravity Scale 속성값을 0으로&lt;/b&gt; &lt;/span&gt;변경해준다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-filename=&quot;스크린샷 2021-03-24 오후 4.34.32.png&quot; data-origin-width=&quot;436&quot; data-origin-height=&quot;191&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/tXJHR/btq0SGOMPJf/VY0hRcrYazIQh0zokhzyuk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/tXJHR/btq0SGOMPJf/VY0hRcrYazIQh0zokhzyuk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/tXJHR/btq0SGOMPJf/VY0hRcrYazIQh0zokhzyuk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FtXJHR%2Fbtq0SGOMPJf%2FVY0hRcrYazIQh0zokhzyuk%2Fimg.png&quot; data-filename=&quot;스크린샷 2021-03-24 오후 4.34.32.png&quot; data-origin-width=&quot;436&quot; data-origin-height=&quot;191&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;2. GetMouseButton()&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;마우스로 오브젝트를 움직일 수 있도록 기반을 마련한다. &lt;i&gt;( mainObject &amp;gt; prefabObject 로 이름 변경)&lt;/i&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1616570984061&quot; class=&quot;cs&quot; data-ke-language=&quot;cs&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;public GameObject prefabObject;

private GameObject spwanObject;

private void Start() {
	//오브젝트 생성
	spwanObejct =
    	Instantiate(prefabObject, new Vector3(0, INIT_Y_POS, 0), Quaternion.identity);
}

private void Update() {
	if (Input.GetMouseButtonDown(0)) {
			// Mouse Down - 오브젝트 x값을 마우스 x값으로
	} else if ( Input.GetMouseButton(0)) {
			// Mouse Move - 오브젝트 x값을 마우스 x값으로
	} else if (Input.GetMouseButtonUp(0)) {
			// Mouse Up - 오브젝트 떨어짐
	}
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;- spwanObject 라는 빈 그릇을 만들어 생성된 오브젝트를 담는다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;- Update() 에 마우스 up, move, down 조건을 만들어준다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;3. 마우스 따라 움직이기&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;유니티에는 여러 위치값(좌표계)이 존재한다. 깊게 들어가면 힘드니 간단하게 말해보자면&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;- Screen Point : 카메라로 보는 위치&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;- World Point : 실제 게임 내 위치&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;물 밖에서 물고기를 손가락으로 찍는다고 물고기가 실제 그 위치에 있을까? 아니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;물 밖에서 내가 보는 물고기의 위치가 바로 Screen Point.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;실제 물 속에 있는 물고기의 위치가 World Point.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;마우스의 위치는 카메라로 보는 위치 즉, 물 밖에서 보는 위치이고 실제 움직여야 할 오브젝트의 위치값과는 다르다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;따라서 오브젝트의 위치를 마우스 위치 좌표계로 바꾸거나(World to ScreenPoint) 반대로 해서 (Screen to WorldPoint) 마우스의 좌표값과 오브젝트의 좌표값을 맞춰줘야 한다.&lt;/p&gt;
&lt;pre id=&quot;code_1616594332285&quot; class=&quot;cs&quot; data-ke-language=&quot;cs&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;private static readonly int GRAVITY_SCALE = 2;

public GameObject prefabObject;

private GameObject spwanObject;

private void Start() {
	//오브젝트 생성
	spwanObejct = Instantiate(prefabObject, new Vector3(0, INIT_Y_POS, 0), Quaternion.identity);
}

private void Update() {
	if (Input.GetMouseButtonDown(0) || Input.GetMouseButton(0)) {
		ObjectMove();
	}
	else if (Input.GetMouseButtonUp(0)) {
		ObjectDrop();
	}
}

private void ObjectMove() {
	// Screen 좌표계인 mousePosition을 World 좌표계로 바꾼다
	Vector3 mousePos = Camera.main.ScreenToWorldPoint(Input.mousePosition);

	// 오브젝트는 x로만 움직여야 하기 때문에 y는 고정
	mousePos.y = spwanObject.transform.position.y;

	spwanObject.transform.position = mousePos;
}

private void ObjectDrop() {
	//마우스버튼을 떼면 gravity scale에 값을 넣어 아래로 떨어지게 한다.
	spwanObject.GetComponent&amp;lt;Rigidbody2D&amp;gt;().gravityScale = GRAVITY_SCALE;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;4. 오브젝트 떨어지기 (위 코드 참조)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;마우스 버튼을 손에서 떼면 오브젝트가 떨어져야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;Input.GetMouseButtonUp(0)이면 오브젝트의 Rigidbody2D 컴포넌트를 찾아 gravity Scale에 값을 넣어준다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;만약 오브젝트에 Rigidbody2D가 없다면 에러가 나기 때문에 Rigidbody2D가 있는지 검사를 해주거나 오브젝트에 Rigidbody2D를 반드시 포함시키도록 코드를 짤 수도 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;a href=&quot;https://play.google.com/store/apps/details?id=com.bognstudio.mergegame&quot;&gt;play.google.com/store/apps/details?id=com.bognstudio.mergegame&lt;/a&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bhX2J2/btq0PdkHKJ0/wgIGuPOfidUBwN3bCIyw20/img.png&quot; data-lightbox=&quot;lightbox&quot; data-alt=&quot;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbhX2J2%2Fbtq0PdkHKJ0%2FwgIGuPOfidUBwN3bCIyw20%2Fimg.png&quot; width=&quot;444&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/odIqD/btq0SGuY319/942Fl5pgK0Q5n7KA8Uj6d0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/odIqD/btq0SGuY319/942Fl5pgK0Q5n7KA8Uj6d0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/odIqD/btq0SGuY319/942Fl5pgK0Q5n7KA8Uj6d0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbhX2J2%2Fbtq0PdkHKJ0%2FwgIGuPOfidUBwN3bCIyw20%2Fimg.png&quot; width=&quot;444&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Unity</category>
      <category>unity</category>
      <category>게임</category>
      <category>구글스토어</category>
      <category>모바일</category>
      <category>모바일게임</category>
      <category>유니티</category>
      <category>퍼즐</category>
      <category>플레이스토어</category>
      <author>moonsu</author>
      <guid isPermaLink="true">https://moonsu.tistory.com/65</guid>
      <comments>https://moonsu.tistory.com/65#entry65comment</comments>
      <pubDate>Wed, 24 Mar 2021 23:15:15 +0900</pubDate>
    </item>
    <item>
      <title>Unity Project #1 수박게임(2) - Prefab 만들고 생성하기.</title>
      <link>https://moonsu.tistory.com/64</link>
      <description>&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;1. 과일 오브젝트 만들기&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;제일 먼저, 떨어질 과일을 생성하는 일을 하려고 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;히아라키(Hierarchy) 창에서 &lt;span style=&quot;background-color: #f6e199;&quot;&gt;&lt;b&gt;마우스 우클릭 &amp;gt; 2D Object &amp;gt; Sprites &amp;gt; Circle&lt;/b&gt;&lt;/span&gt; 을 눌러 오브젝트를 생성한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;오브젝트가 생성되면 바닥으로 떨어져야 하기 때문에 생성된 오브젝트에 &lt;span style=&quot;background-color: #f6e199;&quot;&gt;&lt;b&gt;Add Component &amp;gt; Rigidbody2D&lt;/b&gt;&lt;/span&gt; 를 추가시켜준다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;유니티에서 기본적으로 물리엔진을 지원하기 때문에 컴포넌트 추가만으로도 충분히 자연스럽게 떨어지지만&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;&lt;b&gt;Gravity Scale&lt;/b&gt;&lt;/span&gt;이나 &lt;span style=&quot;background-color: #f6e199;&quot;&gt;&lt;b&gt;Mass&lt;/b&gt;&lt;/span&gt;를 조절해서 원하는 방식으로 게임을 조절할 수 있다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/4yeWc/btq0MT73hnO/t8V7wyOR0LXnRqAUC6kgpK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/4yeWc/btq0MT73hnO/t8V7wyOR0LXnRqAUC6kgpK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/4yeWc/btq0MT73hnO/t8V7wyOR0LXnRqAUC6kgpK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F4yeWc%2Fbtq0MT73hnO%2Ft8V7wyOR0LXnRqAUC6kgpK%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;2. 프리팹 만들기&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;여기까지 만든 오브젝트를 프리팹(Prefab)으로 만들어준다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;프리팹을 만드는 방법은 간단하다. 히아라키 창에 만들어준 오브젝트를 프로젝트(Project) 창으로 드래그&amp;amp;드롭 해주면 끝.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;깔끔한 정리를 위해 &lt;span style=&quot;background-color: #f6e199;&quot;&gt;&lt;b&gt;프로젝트 창 우클릭 &amp;gt; Create &amp;gt; Folder&lt;/b&gt;&lt;/span&gt; 로 폴더를 생성해 프리팹을 넣어준다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bYEMeT/btq0ECTPSJn/7tqM0fZkjdRT2IMK8ewLE1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bYEMeT/btq0ECTPSJn/7tqM0fZkjdRT2IMK8ewLE1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bYEMeT/btq0ECTPSJn/7tqM0fZkjdRT2IMK8ewLE1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbYEMeT%2Fbtq0ECTPSJn%2F7tqM0fZkjdRT2IMK8ewLE1%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;3. 스크립트 생성&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;오브젝트 생성, 삭제 등 전반적인 상태를 관리해줄 스크립트를 작성한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;프리팹과 마찬가지로 관리를 위해 &lt;b&gt;&lt;/b&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;&lt;b&gt;Scripts 폴더를 생성&lt;/b&gt;&lt;/span&gt;, 임의의 이름을 가진 스크립트를 만들어준다. &lt;span style=&quot;background-color: #f6e199;&quot;&gt;&lt;b&gt;(Project &amp;gt; Create &amp;gt; C# Script)&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;여기선&amp;nbsp;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;&lt;b&gt;ObjectManager.cs&lt;/b&gt;&lt;/span&gt; 란 이름으로 스크립트를 만들었으며 ObjectManager 라는 이름을 가진 빈 오브젝트를 만든 후 해당 스크립트를 넣어준다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/q8CSM/btq0Sk4ya50/2StcFRx5uVroVmM6tKjfk1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/q8CSM/btq0Sk4ya50/2StcFRx5uVroVmM6tKjfk1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/q8CSM/btq0Sk4ya50/2StcFRx5uVroVmM6tKjfk1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fq8CSM%2Fbtq0Sk4ya50%2F2StcFRx5uVroVmM6tKjfk1%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b2voda/btq0Nv0jILH/Impnnia88nx9hk3ps4dvVk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b2voda/btq0Nv0jILH/Impnnia88nx9hk3ps4dvVk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b2voda/btq0Nv0jILH/Impnnia88nx9hk3ps4dvVk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb2voda%2Fbtq0Nv0jILH%2FImpnnia88nx9hk3ps4dvVk%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;4. 스크립트 작성&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;실제 게임에선 여러가지 조건이 있지만, 첫 번째 단계로 게임을 실행하면 바로 오브젝트가 생성되도록 해보자.&lt;/p&gt;
&lt;pre id=&quot;code_1616474684300&quot; class=&quot;cs&quot; data-ke-language=&quot;cs&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// 오브젝트가 생성될 Y위치
private static readonly float INIT_T_POS = 4;

// 만들어준 프리팹 오브젝트를 담을 공간
public GameObject mainObject;

private void Start() {
	//오브젝트 생성
	Instantiate(mainObject, new Vector3(0, INIT_Y_POS, 0), Quaternion.identity);
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;- Instantiate ( 생성될 오브젝트, 위치값, 회전값)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;저장 후 유니티창을 보면 Main Object 이름의 오브젝트를 담을 공간이 생긴다. 앞서 만들어준 프리팹 오브젝트를 넣어준다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bqASc9/btq0Q9oI5iv/bbkVVAAjUsbGv2rM6C84Kk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bqASc9/btq0Q9oI5iv/bbkVVAAjUsbGv2rM6C84Kk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bqASc9/btq0Q9oI5iv/bbkVVAAjUsbGv2rM6C84Kk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbqASc9%2Fbtq0Q9oI5iv%2FbbkVVAAjUsbGv2rM6C84Kk%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-filename=&quot;스크린샷 2021-03-23 오후 1.52.34.png&quot; data-origin-width=&quot;111&quot; data-origin-height=&quot;34&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dLHyAw/btq0Nw59fPl/G5O2l4Cewk2la6SOWqWQq1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dLHyAw/btq0Nw59fPl/G5O2l4Cewk2la6SOWqWQq1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dLHyAw/btq0Nw59fPl/G5O2l4Cewk2la6SOWqWQq1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdLHyAw%2Fbtq0Nw59fPl%2FG5O2l4Cewk2la6SOWqWQq1%2Fimg.png&quot; data-filename=&quot;스크린샷 2021-03-23 오후 1.52.34.png&quot; data-origin-width=&quot;111&quot; data-origin-height=&quot;34&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;게임 시작을 누르면 지정한 위치에 오브젝트가 생성되고 Rigidbody2D 컴포넌트를 추가했기 때문에 자동으로 떨어진다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;게임의 다양항 조건들을 차차 파악하여 수박게임을 완성시켜 보도록 하자.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;a href=&quot;https://play.google.com/store/apps/details?id=com.bognstudio.mergegame&quot;&gt;play.google.com/store/apps/details?id=com.bognstudio.mergegame&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdxvX7E%2Fbtq0DqMO7f8%2FsKjSj5gXBw3OvwL44vUb5K%2Fimg.png&quot; width=&quot;444&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bhX2J2/btq0PdkHKJ0/wgIGuPOfidUBwN3bCIyw20/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bhX2J2/btq0PdkHKJ0/wgIGuPOfidUBwN3bCIyw20/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bhX2J2/btq0PdkHKJ0/wgIGuPOfidUBwN3bCIyw20/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdxvX7E%2Fbtq0DqMO7f8%2FsKjSj5gXBw3OvwL44vUb5K%2Fimg.png&quot; width=&quot;444&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Unity</category>
      <category>2D</category>
      <category>c#</category>
      <category>unity</category>
      <category>개발</category>
      <category>게임</category>
      <category>모바일게임</category>
      <category>수박게임</category>
      <category>유니티</category>
      <author>moonsu</author>
      <guid isPermaLink="true">https://moonsu.tistory.com/64</guid>
      <comments>https://moonsu.tistory.com/64#entry64comment</comments>
      <pubDate>Tue, 23 Mar 2021 14:07:53 +0900</pubDate>
    </item>
    <item>
      <title>Unity Project #1 수박게임(1) - Intro.</title>
      <link>https://moonsu.tistory.com/63</link>
      <description>&lt;p data-ke-size=&quot;size14&quot;&gt;21년 초, 반짝 이슈가 되었던 &quot;수박게임&quot;.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;같은 과일을 합쳐 더 큰 과일을 만드는 굉장히 간단한 게임이다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;296&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cQl90V/btq0HbO6bTB/rFOVjszXDWfOXGYFGYPPr1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cQl90V/btq0HbO6bTB/rFOVjszXDWfOXGYFGYPPr1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cQl90V/btq0HbO6bTB/rFOVjszXDWfOXGYFGYPPr1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcQl90V%2Fbtq0HbO6bTB%2FrFOVjszXDWfOXGYFGYPPr1%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;296&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;위 게임을 오마주 한 작품을 유니티로 만들고, 출시하는 과정을 글로 작성해보려 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;이미 관련해서 많은 게임들이 출시했고...&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 71.1293%; height: 145px;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 18.9394%; height: 19px;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;121&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bmN5tq/btq0DqTAOtm/G3jzgDHd8l7K3owgMEfLJk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bmN5tq/btq0DqTAOtm/G3jzgDHd8l7K3owgMEfLJk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bmN5tq/btq0DqTAOtm/G3jzgDHd8l7K3owgMEfLJk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbmN5tq%2Fbtq0DqTAOtm%2FG3jzgDHd8l7K3owgMEfLJk%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;121&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/td&gt;
&lt;td style=&quot;width: 18.9394%; height: 19px;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;122&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bKtWSM/btq0Nv6Q2fq/TGzTAybOKIvWzzI3GwxUj1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bKtWSM/btq0Nv6Q2fq/TGzTAybOKIvWzzI3GwxUj1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bKtWSM/btq0Nv6Q2fq/TGzTAybOKIvWzzI3GwxUj1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbKtWSM%2Fbtq0Nv6Q2fq%2FTGzTAybOKIvWzzI3GwxUj1%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;122&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/td&gt;
&lt;td style=&quot;width: 16.6083%; height: 19px;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;119&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/7OTLJ/btq0MT1fuqq/ZKKCY6776MsDaUf2OrMDpk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/7OTLJ/btq0MT1fuqq/ZKKCY6776MsDaUf2OrMDpk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/7OTLJ/btq0MT1fuqq/ZKKCY6776MsDaUf2OrMDpk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F7OTLJ%2Fbtq0MT1fuqq%2FZKKCY6776MsDaUf2OrMDpk%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;119&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/td&gt;
&lt;td style=&quot;width: 16.725%; height: 19px;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;119&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/PsYpl/btq0NwraVVF/t50NO6uokC2MBKnxzoJib0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/PsYpl/btq0NwraVVF/t50NO6uokC2MBKnxzoJib0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/PsYpl/btq0NwraVVF/t50NO6uokC2MBKnxzoJib0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FPsYpl%2Fbtq0NwraVVF%2Ft50NO6uokC2MBKnxzoJib0%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;119&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;사실 저도 이미 출시는 했습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;a href=&quot;https://play.google.com/store/apps/details?id=com.bognstudio.mergegame&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;play.google.com/store/apps/details?id=com.bognstudio.mergegame&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;444&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;a href=&quot;http://play.google.com/store/apps/details?id=com.bognstudio.mergegame&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dxvX7E/btq0DqMO7f8/sKjSj5gXBw3OvwL44vUb5K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdxvX7E%2Fbtq0DqMO7f8%2FsKjSj5gXBw3OvwL44vUb5K%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;444&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/a&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>Unity</category>
      <category>c#</category>
      <category>unity</category>
      <category>개발</category>
      <category>구글</category>
      <category>수박게임</category>
      <category>유니티</category>
      <author>moonsu</author>
      <guid isPermaLink="true">https://moonsu.tistory.com/63</guid>
      <comments>https://moonsu.tistory.com/63#entry63comment</comments>
      <pubDate>Tue, 23 Mar 2021 12:39:35 +0900</pubDate>
    </item>
    <item>
      <title>THE MESSAGE Co., Ltd. 개인정보 처리방침</title>
      <link>https://moonsu.tistory.com/61</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;안드로이드, iOS 앱 개인정보 처리 방침&lt;/b&gt;&lt;/h2&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;1. 개인정보의 처리 목적&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;주식회사 더메시지(이하 더메시지) 은(는) 다음의 목적을 위하여 개인정보를 처리하고 있으며, 다음의 목적 이외의 용도로는 이용하지 않습니다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #333333;&quot;&gt;- &lt;span style=&quot;color: #333333;&quot;&gt;네트워크 연결 (&lt;/span&gt;android.permission.ACCESS_NETWORK_STATE)&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #333333;&quot;&gt;- &lt;span style=&quot;color: #333333;&quot;&gt;인앱 결제 (&lt;/span&gt;com.android.vending.BILLING)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2. 개인정보의 처리 및 보유 기간&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;① 더메시지&amp;nbsp;은(는) 정보 주체로부터 동의 받은 개인정보 보유, 이용기간 또는 법령에 따른 개인정보 보유, 이용기간 내에서 개인정보를 처리, 보유합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;② 구체적인 개인정보 처리 및 보유 기간&lt;br /&gt;- 없음.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;3. 개인정보의 제3자 제공에 관한 사항&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;① 더메시지&amp;nbsp;은(는) 정보주체의 동의, 법률의 특별한 규정 등 개인정보 보호법 제17조 및 제18조에 해당하는 경우에만 개인정보를 제3자에게 제공합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;② 더메시지&amp;nbsp;은(는) 개인정보를 제3자에게 제공하고 있지 않습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;4. 개인정보처리 위탁&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;① 더메시지&lt;span style=&quot;color: #333333;&quot;&gt;&amp;nbsp;&lt;/span&gt;은(는) 개인정보 처리업무를 위탁하고 있지 않습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. &amp;lt;위탁없음.&amp;gt;&lt;br /&gt;- 위탁받는 자 (수탁자) : 없음.&lt;br /&gt;- 위탁하는 업무의 내용 : 없음.&lt;br /&gt;- 위탁기간 : 없음.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;② &lt;span style=&quot;color: #333333;&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;b&gt;5. 정보주체와 법정대리인의 권리&amp;middot;의무 및 그 행사방법 이용자는 개인정보주체로써 다음과 같은 권리를 행사할 수 있습니다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;① 정보주체는 더메시지에 대해 언제든지 다음 각 호의 개인정보 보호 관련 권리를 행사할 수 있습니다.&lt;br /&gt;1. 개인정보 열람요구&lt;br /&gt;2. 오류 등이 있을 경우 정정 요구&lt;br /&gt;3. 삭제요구&lt;br /&gt;4. 처리정지 요구&lt;/p&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;6. 처리하는 개인정보의 항목 작성&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;① 더메시지&lt;span style=&quot;color: #333333;&quot;&gt;&amp;nbsp;&lt;/span&gt;은(는) 다음의 개인정보 항목을 처리하고 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 필수항목 : Google Play Games ID, GameCenter ID.&lt;br /&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;7. 개인정보의 파기&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;①&lt;span&gt; 더메시지&lt;/span&gt;&lt;/span&gt;&amp;nbsp;&lt;/span&gt;은(는) 원칙적으로 개인정보 처리목적이 달성된 경우에는 지체없이 해당 개인정보를 파기합니다. 파기의 절차, 기한 및 방법은 다음과 같습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-파기절차&lt;br /&gt;이용자가 입력한 정보는 목적 달성 후 별도의 DB에 옮겨져(종이의 경우 별도의 서류) 내부 방침 및 기타 관련 법령에 따라 일정기간 저장된 후 혹은 즉시 파기됩니다. 이 때, DB로 옮겨진 개인정보는 법률에 의한 경우가 아니고서는 다른 목적으로 이용되지 않습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-파기기한&lt;br /&gt;이용자의 개인정보는 개인정보의 보유기간이 경과된 경우에는 보유기간의 종료일로부터 5일 이내에, 개인정보의 처리 목적 달성, 해당 서비스의 폐지, 사업의 종료 등 그 개인정보가 불필요하게 되었을 때에는 개인정보의 처리가 불필요한 것으로 인정되는 날로부터 5일 이내에 그 개인정보를 파기합니다.&lt;/p&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;8. 개인정보 처리방침 변경&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;①이 개인정보처리방침은 시행일로부터 적용되며, 법령 및 방침에 따른 변경내용의 추가, 삭제 및 정정이 있는 경우에는 변경사항의 시행 7일 전부터 공지사항을 통하여 고지할 것입니다.&lt;/p&gt;</description>
      <category>기타/IT</category>
      <author>moonsu</author>
      <guid isPermaLink="true">https://moonsu.tistory.com/61</guid>
      <comments>https://moonsu.tistory.com/61#entry61comment</comments>
      <pubDate>Wed, 3 Mar 2021 20:22:40 +0900</pubDate>
    </item>
    <item>
      <title>코딩 테스트 :: 기출문제와 풀이 (2)</title>
      <link>https://moonsu.tistory.com/60</link>
      <description>&lt;p data-ke-size=&quot;size14&quot;&gt;코딩 테스트를 대비한 기출문제와 풀이&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;문제&lt;/b&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;한 숫자가 다른 숫자의 '접두어'인 경우 있는지 확인하기&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;1. String[] book는 번호를 담은 배열이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;0번, 1번, ..., n번 째 값이 다른 값의 '접두어'인 경우&amp;nbsp; false를, 그렇지 않다면 true를 return 한다.&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;ex)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;book&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;[&quot;11&quot;, &quot;74543&quot;, &quot;11253432&quot;]&amp;nbsp; &amp;nbsp;false;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;[&quot;34&quot;, &quot;67345&quot;, &quot;2543&quot;]&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;true&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;[&quot;43&quot;, &quot;432&quot;, &quot;43216634&quot;]&amp;nbsp; &amp;nbsp; &amp;nbsp; false&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div style=&quot;margin: 20px 0px; caret-color: auto; background-color: #fafafa; padding: 20px 20px 22px; border: 1px dashed #c5c5c5; color: #333333;&quot; data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;pre id=&quot;code_1612073427675&quot; class=&quot;java&quot; style=&quot;display: block; overflow: auto; padding: 15px; color: #383a42; background: #f6f7f8; font-size: 14px; border-radius: 3px; font-family: Menlo, Consolas, Monaco, monospace; border: 1px solid #dddddd; margin: 0px auto; cursor: default; z-index: 1;&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import java.util.Arrays;

class Solution {
    public boolean solution(String[] book) {
        boolean answer = true;

        Arrays.sort(book);

        for(int i = 0; i &amp;lt; book.length - 2; ++i){
            int j = i + 1;

            if(book[j].startsWith(book[i])){
                answer = false;
                break;
            }
        }

        return answer;
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #99cefa; background-color: #000000;&quot;&gt;&lt;i&gt;&lt;b&gt;&lt;a style=&quot;color: #99cefa; background-color: #000000;&quot; href=&quot;https://github.com/ssunine21/PrepareCodingTest.git&quot;&gt;Github에서도 확인할 수 있습니다.&lt;/a&gt;&lt;/b&gt;&lt;/i&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>알고리즘, 자료구조/Coding Test</category>
      <category>Coding</category>
      <category>Coding Test</category>
      <category>java</category>
      <category>TEST</category>
      <category>자바</category>
      <category>코딩</category>
      <category>코딩테스트</category>
      <category>테스트</category>
      <author>moonsu</author>
      <guid isPermaLink="true">https://moonsu.tistory.com/60</guid>
      <comments>https://moonsu.tistory.com/60#entry60comment</comments>
      <pubDate>Sun, 31 Jan 2021 15:23:04 +0900</pubDate>
    </item>
    <item>
      <title>안드로이드 스튜디오 :: 사용자 데이터 백업</title>
      <link>https://moonsu.tistory.com/59</link>
      <description>&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #99cefa;&quot;&gt;&lt;b&gt;&lt;i&gt;&lt;a style=&quot;color: #99cefa;&quot; href=&quot;https://developer.android.com/guide/topics/data/autobackup?hl=ko#Files&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Android 개발자 페이지를 참고 했습니다.&lt;/a&gt;&lt;/i&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;안드로이드는 앱의 데이터를 클라우드에 백업할 수 있도록 &lt;span style=&quot;background-color: #f6e199;&quot;&gt;자동 백업과 키/값 백업,&lt;/span&gt; 두 가지 방법을 제공한다. 자동 백업은 &lt;span style=&quot;background-color: #f6e199;&quot;&gt;Android 6.0(API 23) 이상&lt;/span&gt;에서 데이터를 사용자의 Google 드라이브 계정에 업로드하여 보존한다. 앱의 할당한 대부분의 디렉터리에 있는 파일을 포함하며, 원하는 파일을 빼거나 더할 수 있다. 최대 25MB까지.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;키/값 백업 기능은 Android 2.2(API 8) 이상에서 작동하며 키/값 쌍 형태의 설정 데이터를 Android Packup Service에 업로드하여 보존한다. &lt;span style=&quot;background-color: #f6e199;&quot;&gt;일반적으로 자동 백업을 추천&lt;/span&gt;한다. 기본으로 사용 설정이 되어있고 따로 구현할 작업이 없기 때문이다. 하지만 더 구체적인 요구사항이 있다면 키/값 백업 기능의 사용을 고려할 수 있다. 본 글에서는 자동 백업에 대해 설명한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;1. 백업되는 파일&lt;/b&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;자동 백업에는 앱의 데이터가 할당된 대부분의 디렉토리에 있는 파일이 포함된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;(1) 공유 환경설정 파일&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;(2) &lt;span style=&quot;background-color: #f6e199;&quot;&gt;getFilesDir()&lt;/span&gt; 또는&lt;span style=&quot;background-color: #f6e199;&quot;&gt; getDir(String, int)&lt;/span&gt; 을 사용해 액세스하는 앱의 내부 저장소 파일&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;(3)&lt;span style=&quot;background-color: #f6e199;&quot;&gt; getDatabasePath(String)&lt;/span&gt; 에서 반환한 디렉토리 파일 (SQLiteOpenHelper 클래스 파일 포함)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;(4) &lt;span style=&quot;background-color: #f6e199;&quot;&gt;getExternalFilesDir(String)&lt;/span&gt; 에서 반환한 디렉토리의 외부 저장소에 있는 파일&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;getCacheDir(), getCodeCacheDir()&lt;/span&gt; 또는 &lt;span style=&quot;background-color: #f6e199;&quot;&gt;getNoBackupFilesDir()&lt;/span&gt; 에서 반환한 디렉토리 파일은 자동 백업에서 제외된다. 이 위치에 저장된 파일은 임시파일(캐시 등)으로써 일시적으로만 사용되거나 백업 작업에서 의도적으로 제외된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;2. 백업 위치&lt;/b&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;백업 데이터는 &lt;span style=&quot;background-color: #f6e199;&quot;&gt;사용자의 Google 드라이브 계정&lt;/span&gt;에 있는 비공개 폴더에 저장되며 앱당 25MB로 제한되다. 저장된 데이터는 개인 Google 드라이브 할당량에 포함되지 앟으며, 최근 백업만 저장된다. 또한 사용자가 두 대의 기기를 소유하고 있다면 백업 데이터는 기기별로 존재한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;!!주의&lt;/span&gt;&lt;/b&gt; : 데이터양이 25MB를 초과하면 시스템은 onQuotaExceeded() 를 호풀하고 데이터를 백업하지 않는다. 이후 25MB 임계값 이내로 줄어드는지 주기적으로 확인하고 자동 백업을 계속한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;3. 백업 일정&lt;/b&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;다음 조건 충족시 자동 백업이 실행된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;(1) 사용자의 백업 사용 설정. Android 9 이상에서는 이 설정이 &lt;span style=&quot;background-color: #f6e199;&quot;&gt;설정 &amp;gt; 시스템 &amp;gt; 백업&lt;/span&gt;에 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;(2) 마지막 백업 후 24시간 이상 경과.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;(3) 기기가 유휴 상태 (어떤 프로그램에 의해서도 사용되지 않는 상태)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;(4) Wi-Fi 연결상태. (사용자가 모바일 데이터 백업을 선택하지 않은 경우)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;실제로 위 조건은 매일 밤 발생한다. 하지만 기기에서 전혀 백업을 실행하지 않을 수 있다. (예 : 기기가 네트워크에 연결되지 않은 경우 등)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;백업 및 복원 테스트 도구를 통해 앱의 백업을 수동으로 시작할 수 있다. 백업 및 복원 테스트 참고.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;4. 복원 일정&lt;/b&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;Play Store에서 기기를 설정하는 동안 (시스템에서 이전에 설치된 앱을 설치하는 경우) 또는 adb 설치를 실행하는 중 데이터가 복원된다. 복원 작업은 APK를 설치한 후 앱 시작 전에 일어나며 복원할 데이터를 묻는 메세지가 사용자에게 표시된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;5. 백업 사용 설정 및 중지&lt;/b&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;Android 6.0(API 23) 이상에서 자동 백업은 자동으로 포함된다. 앱 매니페스트 파일에서 &lt;span style=&quot;background-color: #f6e199;&quot;&gt;android:allowBackup&lt;/span&gt;을 통해 백업 사용을 결정할 수 있다. 기본값은 true.&lt;/p&gt;
&lt;pre id=&quot;code_1611893094094&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;manifest ... &amp;gt;
    ...
    &amp;lt;application android:allowBackup=&quot;true&quot; ... &amp;gt;
        ...
    &amp;lt;/application&amp;gt;
&amp;lt;/manifest&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;6. 포함, 제외할 파일&lt;/b&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;시스템에서는 기본적으로 모든 앱 데이터를 백업하지만 XML을 이용해 백업 대상을 제어할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(1) res/xml/ 디렉토리에 백업 규칙을 포함한 XML 파일을 생성한다. 파일 내에 &amp;lt;Include&amp;gt;, &amp;lt;exclude&amp;gt; 요소를 사용해 규칙을 추가한다. 아래 코드는 device.xml 을 제외한 모든 공유 환경설졍을 백업한다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1611894918016&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&amp;gt;
&amp;lt;full-backup-content&amp;gt;
    &amp;lt;include domain=&quot;sharedpref&quot; path=&quot;.&quot;/&amp;gt;
    &amp;lt;exclude domain=&quot;sharedpref&quot; path=&quot;device.xml&quot;/&amp;gt;
&amp;lt;/full-backup-content&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;(2) 매니페스트에서 &amp;lt;application&amp;gt; 요소에 &lt;span style=&quot;background-color: #f6e199;&quot;&gt;android:fullBackupContent&lt;/span&gt; 속성을 추가한다. 앞서 생성한 XML 파일을 추가한다.&lt;/p&gt;
&lt;pre id=&quot;code_1611894765135&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;application ...
    android:fullBackupContent=&quot;@xml/my_backup_rules&quot;&amp;gt;
&amp;lt;/application&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;7. 백업 XML 구성&lt;/b&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;구성 파일의 XML 구문은 다음과 같다&lt;/p&gt;
&lt;pre id=&quot;code_1611895546465&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;full-backup-content&amp;gt;
    &amp;lt;include domain=[&quot;file&quot; | &quot;database&quot; | &quot;sharedpref&quot; | &quot;external&quot; | &quot;root&quot;]
    path=&quot;string&quot;
    requireFlags=[&quot;clientSideEncryption&quot; | &quot;deviceToDeviceTransfer&quot;] /&amp;gt;
    &amp;lt;exclude domain=[&quot;file&quot; | &quot;database&quot; | &quot;sharedpref&quot; | &quot;external&quot; | &quot;root&quot;]
    path=&quot;string&quot; /&amp;gt;
&amp;lt;/full-backup-content&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;lt;full-backup-content&amp;gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;태그 내에&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&amp;lt;include&amp;gt;&lt;span&gt;와&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&amp;lt;exclude&amp;gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;요소를 정의할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span&gt;(1) &amp;lt;include&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span&gt;백업할 파일 또는 폴더를 지정한다. &amp;lt;include&amp;gt; 요소를 하나라도 지정하게 되면 시스템은 지정된 파일만 백업한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;getCacheDir(),&amp;nbsp;getCodeCacheDir()&lt;/span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;또는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;getNoBackupFilesDir()&lt;/span&gt;&lt;span&gt;에서 반환된 디렉터리의 파일은 백업에 포함하려고 해도 항상 제외된다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span&gt;(2) &amp;lt;exclude&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span&gt;백업에서 제외할 파일 또는 폴더를 지정한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span&gt;(3) 속성&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span&gt;각 요소는 다음 속성을 포함해야 한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span&gt;- domain : 리소스 위치 지정&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; - rood : 앱에 속한 모든 비공개 파일이 저장된 디렉토리&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; - file : getfilesDir() 에서 반환한 디렉토리&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; - database : getDatabasePath() 에서 반환한 디렉토리, SQLiteOpenHelper로 생성된 데이터베이스가 여기 저장된다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; - sharedpref : SharedPreferences 가 저장된 디렉토리&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; - external : getExternalFilesDir() 에서 반환한 디렉토리.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span&gt;- path : 백업에 포함하거나 제외할 파일 또는 폴더 지정&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Android/공통</category>
      <category>android</category>
      <category>androidStudio</category>
      <category>안드로이드</category>
      <category>안드로이드스튜디오</category>
      <author>moonsu</author>
      <guid isPermaLink="true">https://moonsu.tistory.com/59</guid>
      <comments>https://moonsu.tistory.com/59#entry59comment</comments>
      <pubDate>Fri, 29 Jan 2021 13:56:35 +0900</pubDate>
    </item>
    <item>
      <title>배열의 시간 복잡도</title>
      <link>https://moonsu.tistory.com/58</link>
      <description>&lt;p data-ke-size=&quot;size14&quot;&gt;배열 (Array)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;같은 타입의 변수들로 이루어진 집합.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;배열을 구성하는 각각의 값을 배열 요소(element)라고 하며, 배열에서의 위치를 가리키는 숫자는 인덱스(index)이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;배열의 인덱스는 0부터 시작해 0, 1, 2, 3, ..., size - 1 의 인덱스를 참조할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;배열 A의 n번 째에 해당하는 변수는 A[n]으로 표시한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;배열 내 연산은 크게 &lt;span style=&quot;background-color: #f6e199;&quot;&gt;&lt;b&gt;접근(access), 검색(search), &lt;b&gt;추가(add), 제거(remove)&lt;/b&gt;&lt;/b&gt;&lt;/span&gt;&amp;nbsp;으로 나뉜다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;아래는 크기가 10인 Integer형 배열이며,&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kBcPP/btqUZumg5KK/LUdautoyWuykvke1UxtZ50/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kBcPP/btqUZumg5KK/LUdautoyWuykvke1UxtZ50/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kBcPP/btqUZumg5KK/LUdautoyWuykvke1UxtZ50/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkBcPP%2FbtqUZumg5KK%2FLUdautoyWuykvke1UxtZ50%2Fimg.jpg&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;1. 접근&lt;/b&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;&lt;b&gt;접근&lt;/b&gt;&lt;/span&gt;은 배열 내에서 &lt;span style=&quot;background-color: #f6e199;&quot;&gt;&lt;b&gt;n번째 인덱스에 해당하는 값&lt;/b&gt;&lt;/span&gt;을 찾아내는 연산이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;배열의 접근은 &lt;span style=&quot;background-color: #f6e199;&quot;&gt;&lt;b&gt;O(1)의 시간복잡도&lt;/b&gt;&lt;/span&gt;를 갖는다. 따라서 찾고자 하는 값이 몇 번째 인덱스에 있는지 알고 있다면 굉장히 빠른 검색 속도를 갖는다. 배열의 첫번째 변수에는 시작 주소값이 저장되고, A[n]의 값을 찾아가기 위해 시작 주소값에서 단순 사칙연산이 수행되기 때문이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;2. 검색&lt;/b&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;&lt;b&gt;배열의 검색은 순차검색&lt;/b&gt;&lt;/span&gt;이다. 인덱스를 알지 못할 때 원하는 값을 찾기 위해 배열을 하나하나 확인해야한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ebR7Gv/btqUWtaBdb1/PsZJhqmDd2BUy8b9OpJfw1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ebR7Gv/btqUWtaBdb1/PsZJhqmDd2BUy8b9OpJfw1/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ebR7Gv/btqUWtaBdb1/PsZJhqmDd2BUy8b9OpJfw1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FebR7Gv%2FbtqUWtaBdb1%2FPsZJhqmDd2BUy8b9OpJfw1%2Fimg.jpg&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;A[3]의 값을 찾기 위해 A[0], A[1]... 을 순서대로 검색한다. 따라서 최대 &lt;span style=&quot;background-color: #f6e199;&quot;&gt;&lt;b&gt;O(n)의 시간 복잡도&lt;/b&gt;&lt;/span&gt;를 가진다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;3. 추가, 삭제&lt;/b&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;추가와 삭제는 먼저 빈 공간이 마련되 있다를 전제로 한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ctbBif/btqU0xXor35/tv2mfnmBKKakoWTN1FokYk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ctbBif/btqU0xXor35/tv2mfnmBKKakoWTN1FokYk/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ctbBif/btqU0xXor35/tv2mfnmBKKakoWTN1FokYk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FctbBif%2FbtqU0xXor35%2Ftv2mfnmBKKakoWTN1FokYk%2Fimg.jpg&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;추가, 삭제의 시간복잡도는 앞서 말한 &lt;span style=&quot;background-color: #f6e199;&quot;&gt;&lt;b&gt;접근과 검색의 방법 차이&lt;/b&gt;&lt;/span&gt;에 따라 시간복잡도가 나뉜다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;A[6]에 5라는 값을 넣고, 혹은 빼고 싶을 때 해당 인덱스를 정확하게 알고 있다면 &lt;span style=&quot;background-color: #f6e199;&quot;&gt;&lt;b&gt;접근의 개념으로 O(1)의 시간복잡도&lt;/b&gt;&lt;/span&gt;를 가지지만 해당 인덱스를 찾아야한다면 &lt;span style=&quot;background-color: #f6e199;&quot;&gt;&lt;b&gt;검색의 시간복잡도인 O(n)&lt;/b&gt;&lt;/span&gt;에 해당한다.&lt;/p&gt;</description>
      <category>알고리즘, 자료구조/자료구조</category>
      <category>배열</category>
      <category>시간복잡도</category>
      <category>알고리즘</category>
      <category>자료구조</category>
      <author>moonsu</author>
      <guid isPermaLink="true">https://moonsu.tistory.com/58</guid>
      <comments>https://moonsu.tistory.com/58#entry58comment</comments>
      <pubDate>Fri, 29 Jan 2021 02:12:24 +0900</pubDate>
    </item>
  </channel>
</rss>