DB

DELETE, TRUNCATE, DROP

  • DELETE - 데이터는 지워지지만 테이블 용량은 줄어들지 않는다. 원하는 데이터만 지울 수 있으며 삭제 후 잘못한 것을 되돌릴 수 있다
  • TRUNCATE - 용량을 줄이고 인덱스 등 모두 삭제된다. 하지만 테이블은 삭제 되지 않고 데이터만 삭제한다 한꺼번에 다 지워야하며 삭제 후 되돌릴수없다
  • DROP - 테이블 전체를 삭제, 공간, 객체를 삭제한다. 삭제 후 절대 되돌릴 수 없다

프로세스 vs 스레드

  • 프로세스 - 운영체제로부터 자원을 할당받는 작업 단위
  • 스레드 - 프로세스가 할당 받은 자원을 이용하는 실행 단위

멀티 스레드

  • 멀티 프로세스 기반으로 프로그래밍시 프로세스 간 공유자원이 없기에 동일 자원에 동시 접근 하는 일이 없다 하지만 멀티 스레딩 기반으로 프로그래밍 할때는 주의해야함
  • 장점 - 프로세스를 이용해 동시 처리하던 일을 스레드로 구현한 경우 메모리 공간과 시스템 자원 소모가 줄어듬
    • 스레드간 통신이 필요한 경우 별도의 자원을 이용하는 것이 아닌 전역 변수의 공간 또는 동적으로 할당된 공간인 heap 영역을 이용하는 데이터를 주고 받을 수 있다

안드로이드 프로그램에 대한 전반적은 세팅 파일

  • xml 형색(yml 과 비슷)
  • 역할
    • 사용자 권한 식별(인터넷 엑세스, 사용자 연락처 읽기 액세스.. etc)
    • 앱이 요구하는 최소 api
      cf) 최소 api - 안드로이드 플렛폼 버전에서 제공하는 프레임워크 api 수정 버전
    • 앱에서 요구하는 hw, sw기능(카메라, 음성인식 ... etc)
    • 앱에 링크되어야 하는 api라이브러리 선언

기본 프로젝트 세팅

<manifest xmlns:android="<http://schemas.android.com/apk/res/android>"
    package="com.example.manifastproject">
    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
</manifest>

항목 설명

  • application

    • 애플리케이션 모든 요소에 영향을 주는 것 선언
  • intent-filter

    • 활동, 서비스, receiver가 응답할 수 있는 intent유형 지정
    • 전달되는 유형의 수신 intent를 필요 유무에 따라 사용
      • 대부분 action, catagory, data 아래 포함
      • 요소
        • 포함 요소 - activity, activity-alias, service, recevier
        • 필수 포함 요소 - action
        • 포함 가능 요소 - catagory, data
    • 속성
      • android:icon - 따로 지정하지 않으면 에 정의된 아이콘 들어감 (사용자가 보이는 아이콘)
      • android:label - 사용자에게 보이는 글자
      • android:priority - 필터에 설정된 intent처리와 관련해 상위 구성요소에 부여하는 우선수위 cf) setPriorty, getPriorty
      • android:order - 필터가 일치할 때 필터 처리되는 순서
        cf ) priority= 앱전체, order=단일앱에서 일치하는 filter의 순서
  • action

    • 안에 있어야함

    • intent-filter에 작업을 추가시킴 (특정 액션)

    • intent-filter 에 action이 있어야지 intent객체 허용

    • 속성

      • android:name - 작업이름(변수명), Intent 클래스의 상수로 정의

      • activity

      • 애플리케이션에서 사용자에게 시각적으로 느끼게 하는 것

      • 요소

      • 포함가능 항목 - intent-filter, meta-data, layout

      • 특성

      • android:allowEmbedded - 액티비티가 다른 액티비티의 포함된 하위항목으로 시작할수 있음

      • android:alwaysRetainTaskState - 시간이 지난후 시스템이 했던 작업 초기화

      • android:exported - 다른 애플리케이션의 구성요소로 액티비티 실행 가능 여부

            <activity android:allowEmbedded=["true" | "false"]
              android:allowTaskReparenting=["true" | "false"]
              android:alwaysRetainTaskState=["true" | "false"]
              android:autoRemoveFromRecents=["true" | "false"]
              android:banner="drawable resource"
              android:clearTaskOnLaunch=["true" | "false"]
              android:colorMode=[ "hdr" | "wideColorGamut"]
              android:configChanges=["mcc", "mnc", "locale",
                                     "touchscreen", "keyboard", "keyboardHidden",
                                     "navigation", "screenLayout", "fontScale",
                                     "uiMode", "orientation", "density",
                                     "screenSize", "smallestScreenSize"]
              android:directBootAware=["true" | "false"]
              android:documentLaunchMode=["intoExisting" | "always" |
                                      "none" | "never"]
              android:enabled=["true" | "false"]
              android:excludeFromRecents=["true" | "false"]
              android:exported=["true" | "false"]
              android:finishOnTaskLaunch=["true" | "false"]
              android:hardwareAccelerated=["true" | "false"]
              android:icon="drawable resource"
              android:immersive=["true" | "false"]
              android:label="string resource"
              android:launchMode=["standard" | "singleTop" |
                                  "singleTask" | "singleInstance"]
              android:lockTaskMode=["normal" | "never" |
                                  "if_whitelisted" | "always"]
              android:maxRecents="integer"
              android:maxAspectRatio="float"
              android:multiprocess=["true" | "false"]
              android:name="string"
              android:noHistory=["true" | "false"]  
              android:parentActivityName="string" 
              android:persistableMode=["persistRootOnly" | 
                                       "persistAcrossReboots" | "persistNever"]
              android:permission="string"
              android:process="string"
              android:relinquishTaskIdentity=["true" | "false"]
              android:resizeableActivity=["true" | "false"]
              android:screenOrientation=["unspecified" | "behind" |
                                         "landscape" | "portrait" |
                                         "reverseLandscape" | "reversePortrait" |
                                         "sensorLandscape" | "sensorPortrait" |
                                         "userLandscape" | "userPortrait" |
                                         "sensor" | "fullSensor" | "nosensor" |
                                         "user" | "fullUser" | "locked"]
              android:showForAllUsers=["true" | "false"]
              android:stateNotNeeded=["true" | "false"]
              android:supportsPictureInPicture=["true" | "false"]
              android:taskAffinity="string"
              android:theme="resource or theme"
              android:uiOptions=["none" | "splitActionBarWhenNarrow"]
              android:windowSoftInputMode=["stateUnspecified",
                                           "stateUnchanged", "stateHidden",
                                           "stateAlwaysHidden", "stateVisible",
                                           "stateAlwaysVisible", "adjustUnspecified",
                                           "adjustResize", "adjustPan"] >   
            . . .
            </activity>
        

        (https://developer.android.com/guide/topics/manifest/activity-element)

  • activity-alias

    • targetActivity 속성에 이름이 지정되어 있어야함

    • 타켓은 별칭과 동일한 application이 있어야하며 menifest보다 먼저 선언됨

    • 타켓 활동에 독립적 항목 (고유 인텐트 필터 소유 가능)

    • 하위집합에 있는 속성인 경우 타켓에 설정된 어떤 값도 적용 X

    • But, 하위집합이 없다면 타켓 활동에 별칭이 적용

    • 와 의 enabled속성이 둘다 true여야지 사용 가능

    • 요소

      • 포함된 요소 : application

      • 포함 가능 요소 : intent-filter, meta-data

          <activity-alias android:enabled=["true" | "false"]
                        android:exported=["true" | "false"]
                        android:icon="drawable resource"
                        android:label="string resource"
                        android:name="string"
                        android:permission="string"
                        android:targetActivity="string">
            . . .
          </activity-alias>
        

        (https://developer.android.com/guide/topics/manifest/activity-alias-element)

  • category

    • 인텐트를 처리해야하는 구성요소의 종류 및 추가 정보를 담은 문자열
    • intent안에 있어도되지만 없어도됨
    • ex) CATEGORY_BROWSABLE (대상 액티비티가 웹브라우저를 통해 시작하도록 허용, 미디어 링크 참조된 데이터 허용)
    • ex) CATEGORY_LAUNCHER (작업 최조 액티비티, 시스템 애플리케이션 시작 관리자에 목록)
    • 요소
      • 포함된 요소- intent-filter
  • data

    • intent 에 포함할 데이터 사양
    • 요소
      • 포함된 요소 - intent-filter
    • scheme://host:port[path |pathPrefix|pathPattern]
  • provider

    • 콘텐츠 제공자 구성요소 선언
    • 애플리케이션에서 관리되는 데이터에 관해 정해진 엑세스 제공
    • 애플리케이션에서 사용되는 provider는 다른 애플리케이션에서 선언하면 안됨
    • 요소
      • 포함된 요소 - application
      • 포함 가능한 요소 - meta-data, grant-uri-permission, path-permission
  • reseiver

    • 애플리케이션의 구성요소중 하나
    • 애플리케이션의 다른 구성요소가 실행되고 있지 않아도 시스템이나 다른 애플리케이션에서 브로드캐스팅하는 인스턴트를 애플리케이션에서 수행가능
  • service

    • 애플리케이션의 구성요소중 하나
    • activity와 달리 사용자에게 시각적으로 영향을 주는게 없음
    • 백그라운드 작업, api작업 구현시 사용
    • 모든 서비스는 manifest에 service 등록해야 실행 가능
  • uses-configuration

    • application에 필요한 sw, hw 기능
    • 대부분의 앱에서는 사용 안함
      • 언제 사용? 시각장애인 지원 터치패드 ...etc
  • uses-feature

    • 외부 에플리케이션이 의존하는 hw, sw기능 집합
  • uses-permission

    • 예를 들어 '카메라'기능이 필요한경우 google play는 애플리케이션 실행시 카메라 기능이 필요하다고 생각하고 이를 제공하지 않는 기기에서 애플리케이션을 필터링 해야함
    • 이때 필터링을 하기위해 uses-permission 요소에 카메라 기능을 검색하는데 googleplay에 의존하지 않고 uses-feature요소에 하드웨어 기능을 명시적으로 선언한후, 특정 기능을 비활성화 하고 싶은 경우 android:required="false" 특성을 에 추가

권한

// 설정 방법
<manifest>
    <users-permission android:name="android.permission.SEND_SMS"/>
</manifest>

앱 구성 요소

  • activity
    • 사용자가 보는 하나의 화면
    • ex) mail app -> 메일 작성, 메일 리스트, 새메일알림...
  • service
    • activity 에서 동작 하는 함수
  • broadcast reviewer
    • 정기적인 이벤트 밖에서 구성되는 이벤트들
    • ex) 알림기능
  • content provider

안드로이드는 activity, service, broadcast reviewer는 " 비동기 메세지(인텐트)" 로 활성화

cf ) intent 란?

  • 구성 요소가 어느 앱에 속하든 관계없이 다른 구성 요소로부터 작업을 요청하는 역할
  • 특정 구성요소를 활성화 할지 아니면 구성요소의 암시적 특정 유형을 활성화할지 나타내는 메시지를 정의
  • activity끼리 통신하기 위한 통신 장치

주의 사항

  • android: ~로 시작
  • , 는 필수 요소
  • 같은 라인에 있는 것들은 순서가 중요하지 않다
    • 예외 : 는 다음에 와야함
    • 예외 : 은 의 마지막에 와야함

매니페스트란 ?

  • xml 형색(yml 과 비슷)
  • 안드로이드 프로그램에 대한 전반적인 세팅 파일
  • 역할
    • 사용자 권한 식별(인터넷 엑세스, 사용자 연락처 읽기 액세스.. etc)
    • 앱이 요구하는 최소 api
      cf) 최소 api - 안드로이드 플렛폼 버전에서 제공하는 프레임워크 api 수정 버전
    • 앱에서 요구하는 hw, sw기능(카메라, 음성인식 ... etc)
    • 앱에 링크되어야 하는 api라이브러리 선언

기본 프로젝트 세팅

<manifest xmlns:android="<http://schemas.android.com/apk/res/android>"
    package="com.example.manifastproject">
    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
</manifest>

항목 설명

  • application
    • 애플리케이션 모든 요소에 영향을 주는 것 선언
  • intent-filter
    • 활동, 서비스, receiver가 응답할 수 있는 intent유형 지정
    • 전달되는 유형의 수신 intent를 필요 유무에 따라 사용
      • 대부분 action, catagory, data 아래 포함
      • 요소
        • 포함 요소 - activity, activity-alias, service, recevier
        • 필수 포함 요소 - action
        • 포함 가능 요소 - catagory, data
    • 속성
      • android:icon - 따로 지정하지 않으면 에 정의된 아이콘 들어감 (사용자가 보이는 아이콘)
      • android:label - 사용자에게 보이는 글자
      • android:priority - 필터에 설정된 intent처리와 관련해 상위 구성요소에 부여하는 우선수위 cf) setPriorty, getPriorty
      • android:order - 필터가 일치할 때 필터 처리되는 순서
        cf ) priority= 앱전체, order=단일앱에서 일치하는 filter의 순서
  • action
    • 안에 있어야함
    • intent-filter에 작업을 추가시킴 (특정 액션)
    • intent-filter 에 action이 있어야지 intent객체 허용
    • 속성
      • android:name - 작업이름(변수명), Intent 클래스의 상수로 정의
      • activity
      • 애플리케이션에서 사용자에게 시각적으로 느끼게 하는 것
      • 요소
      • 포함가능 항목 - intent-filter, meta-data, layout
      • 특성
      • android:allowEmbedded - 액티비티가 다른 액티비티의 포함된 하위항목으로 시작할수 있음
      • android:alwaysRetainTaskState - 시간이 지난후 시스템이 했던 작업 초기화
      • android:exported - 다른 애플리케이션의 구성요소로 액티비티 실행 가능 여부
    <activity android:allowEmbedded=["true" | "false"]
      android:allowTaskReparenting=["true" | "false"]
      android:alwaysRetainTaskState=["true" | "false"]
      android:autoRemoveFromRecents=["true" | "false"]
      android:banner="drawable resource"
      android:clearTaskOnLaunch=["true" | "false"]
      android:colorMode=[ "hdr" | "wideColorGamut"]
      android:configChanges=["mcc", "mnc", "locale",
                             "touchscreen", "keyboard", "keyboardHidden",
                             "navigation", "screenLayout", "fontScale",
                             "uiMode", "orientation", "density",
                             "screenSize", "smallestScreenSize"]
      android:directBootAware=["true" | "false"]
      android:documentLaunchMode=["intoExisting" | "always" |
                              "none" | "never"]
      android:enabled=["true" | "false"]
      android:excludeFromRecents=["true" | "false"]
      android:exported=["true" | "false"]
      android:finishOnTaskLaunch=["true" | "false"]
      android:hardwareAccelerated=["true" | "false"]
      android:icon="drawable resource"
      android:immersive=["true" | "false"]
      android:label="string resource"
      android:launchMode=["standard" | "singleTop" |
                          "singleTask" | "singleInstance"]
      android:lockTaskMode=["normal" | "never" |
                          "if_whitelisted" | "always"]
      android:maxRecents="integer"
      android:maxAspectRatio="float"
      android:multiprocess=["true" | "false"]
      android:name="string"
      android:noHistory=["true" | "false"]  
      android:parentActivityName="string" 
      android:persistableMode=["persistRootOnly" | 
                               "persistAcrossReboots" | "persistNever"]
      android:permission="string"
      android:process="string"
      android:relinquishTaskIdentity=["true" | "false"]
      android:resizeableActivity=["true" | "false"]
      android:screenOrientation=["unspecified" | "behind" |
                                 "landscape" | "portrait" |
                                 "reverseLandscape" | "reversePortrait" |
                                 "sensorLandscape" | "sensorPortrait" |
                                 "userLandscape" | "userPortrait" |
                                 "sensor" | "fullSensor" | "nosensor" |
                                 "user" | "fullUser" | "locked"]
      android:showForAllUsers=["true" | "false"]
      android:stateNotNeeded=["true" | "false"]
      android:supportsPictureInPicture=["true" | "false"]
      android:taskAffinity="string"
      android:theme="resource or theme"
      android:uiOptions=["none" | "splitActionBarWhenNarrow"]
      android:windowSoftInputMode=["stateUnspecified",
                                   "stateUnchanged", "stateHidden",
                                   "stateAlwaysHidden", "stateVisible",
                                   "stateAlwaysVisible", "adjustUnspecified",
                                   "adjustResize", "adjustPan"] >   
    . . .
    </activity>

https://developer.android.com/guide/topics/manifest/activity-element

  • activity-alias
    • targetActivity 속성에 이름이 지정되어 있어야함
    • 타켓은 별칭과 동일한 application이 있어야하며 menifest보다 먼저 선언됨
    • 타켓 활동에 독립적 항목 (고유 인텐트 필터 소유 가능)
    • 하위집합에 있는 속성인 경우 타켓에 설정된 어떤 값도 적용 X
    • But, 하위집합이 없다면 타켓 활동에 별칭이 적용
    • 와 의 enabled속성이 둘다 true여야지 사용 가능
    • 요소
      • 포함된 요소 : application
      • 포함 가능 요소 : intent-filter, meta-data
  <activity-alias android:enabled=["true" | "false"]
                android:exported=["true" | "false"]
                android:icon="drawable resource"
                android:label="string resource"
                android:name="string"
                android:permission="string"
                android:targetActivity="string" >
    . . .
  </activity-alias>

(https://developer.android.com/guide/topics/manifest/activity-alias-element)

  • category
    • 인텐트를 처리해야하는 구성요소의 종류 및 추가 정보를 담은 문자열
    • intent안에 있어도되지만 없어도됨
    • ex) CATEGORY_BROWSABLE (대상 액티비티가 웹브라우저를 통해 시작하도록 허용, 미디어 링크 참조된 데이터 허용)
    • ex) CATEGORY_LAUNCHER (작업 최조 액티비티, 시스템 애플리케이션 시작 관리자에 목록)
    • 요소
      • 포함된 요소- intent-filter
  • data
    • intent 에 포함할 데이터 사양
    • 요소
      • 포함된 요소 - intent-filter
    • scheme://host:port[path |pathPrefix|pathPattern]
  • provider
    • 콘텐츠 제공자 구성요소 선언
    • 애플리케이션에서 관리되는 데이터에 관해 정해진 엑세스 제공
    • 애플리케이션에서 사용되는 provider는 다른 애플리케이션에서 선언하면 안됨
    • 요소
      • 포함된 요소 - application
      • 포함 가능한 요소 - meta-data, grant-uri-permission, path-permission
  • reseiver
    • 애플리케이션의 구성요소중 하나
    • 애플리케이션의 다른 구성요소가 실행되고 있지 않아도 시스템이나 다른 애플리케이션에서 브로드캐스팅하는 인스턴트를 애플리케이션에서 수행가능
  • service
    • 애플리케이션의 구성요소중 하나
    • activity와 달리 사용자에게 시각적으로 영향을 주는게 없음
    • 백그라운드 작업, api작업 구현시 사용
    • 모든 서비스는 manifest에 service 등록해야 실행 가능
  • uses-configuration
    • application에 필요한 sw, hw 기능
    • 대부분의 앱에서는 사용 안함
      • 언제 사용? 시각장애인 지원 터치패드 ...etc
  • uses-feature
    • 외부 에플리케이션이 의존하는 hw, sw기능 집합
  • uses-permission
    • 예를 들어 '카메라'기능이 필요한경우 google play는 애플리케이션 실행시 카메라 기능이 필요하다고 생각하고 이를 제공하지 않는 기기에서 애플리케이션을 필터링 해야함
    • 이때 필터링을 하기위해 uses-permission 요소에 카메라 기능을 검색하는데 googleplay에 의존하지 않고 uses-feature요소에 하드웨어 기능을 명시적으로 선언한후, 특정 기능을 비활성화 하고 싶은 경우 android:required="false" 특성을 에 추가

권한

// 설정 방법
<manifest>
    <users-permission android:name="android.permission.SEND_SMS"/>
</manifest>

앱 구성 요소

  • activity
    • 사용자가 보는 하나의 화면
    • ex) mail app -> 메일 작성, 메일 리스트, 새메일알림...
  • service
    • activity 에서 동작 하는 함수
  • broadcast reviewer
    • 정기적인 이벤트 밖에서 구성되는 이벤트들
    • ex) 알림기능
  • content provider

안드로이드는 activity, service, broadcast reviewer는 " 비동기 메세지(인텐트)" 로 활성화

cf ) intent 란?

  • 구성 요소가 어느 앱에 속하든 관계없이 다른 구성 요소로부터 작업을 요청하는 역할
  • 특정 구성요소를 활성화 할지 아니면 구성요소의 암시적 특정 유형을 활성화할지 나타내는 메시지를 정의
  • activity끼리 통신하기 위한 통신 장치

주의 사항

  • android: ~로 시작
  • , 는 필수 요소
  • 같은 라인에 있는 것들은 순서가 중요하지 않다
    • 예외 : 는 다음에 와야함
    • 예외 : 은 의 마지막에 와야함

+ Recent posts