플랫폼이란 무엇인가
정의 :
어원 :
평평한이라는 의미를 가진 'plat'과 형태라는 의미를 가진 'form'의 합성어로 경계가 없던 땅이 구획되면서 용도에 따라 다양한 형태로 활용될 수 있는 공간
일상 :
역에서 기차를 타고 내리는 곳
IT :
어플리케이션 소프트웨어(프로그램)을 작동시키기 위한 기반이 되는 OS의 종류, 설정, 기술환경을 의미
특징 :
- 많은 사람들이 쉽게 이용하거나 다양한 목적으로 사용 가능
종류 :
1. 소프트웨어 플랫폼
- 일반적인 의미에서 가장 많이 사용하는 개념
- 플랫폼이 여러가지 기능들을 제공해주는 공통 실행 환경
- 응용 소프트웨어를 실행 혹은 작동하게 하는 운영체제 플랫폼
2. 하드웨어 플랫폼
- 소프트웨어 플랫폼의 개념이 하드웨어 분야로 확장한 것
- 공산품화 과정에서 제품개발을 가능하게 하는 기술
- 개발을 지원하는 표준 공정을 통해 다양한 제품을 만들어내는 기반이나 도구 혹은 프로세스
3. 서비스 플랫폼
- 웹과 앱 등의 인터넷 서비스가 등장하면서 용어가 등장
- 정보와 콘텐츠를 찾는 사람들을 모아 포털 사이트 안에서 다양한 서비스를 활용할 수 있는 환경을 만듦
- 다른 서비스들이 나의 서비스 기능을 쉽게 사용할 수 있게 해주는 인터넷 기반의 기술 환경
4. 비즈니스 플랫폼
- 서비스 플랫폼의 한 부분이자 서비스 플랫폼에서 파생된 용어.
- 내 비즈니스가 다른 비즈니스의 일부로 사용 되는 것
5. ICT 기업의 플랫폼
- 온라인에서 콘텐츠의 생산, 소비, 유통이 일어지는 공간
6. 다면 플랫폼
- 각종 서비스를 제공하는 여러 서비스 사업자와 수많은 사용자들을 서로 연결해주는 플랫폼
- 2개이상의 고객 집단 혹은 참가자 집단간의 직접적인 상호작용 장려해서 가치 창출. 즉 다자간 상호작용과 거래 촉진
예시 :
마이크로소프트 윈도우, 리눅스, 맥OS, 구글 안드로이드, 애플 iOS, 네이버, 다음, 페이스북, 카카오톡, 라인, 페이스북, 트위터, 인스타그램
운영체제 (OS)란 무엇인가
운영체제의 정의 :
컴퓨터 시스템의 하드웨어, 소프트웨어적인 자원들을 자원을 효율적으로 관리하고 운영하여 사용자에게 편리한 인터페이스 환경을 제공하고 컴퓨터를 효과적으로 사용할 수 있도록 하는 일종의 소프트웨어
운영체제의 종류 :
Window, MAC OS, Unix, Linux, Android, iOS
운영체제의 기능 :
- 프로세스 관리 :
- OS에서 동시에 실행되는 많은 프로세스를 효율적으로 관리
- 프로세스의 생성부터 실행, 종료까지의 전 과정에 관여
- 파일 관리 :
- 디렉터리 형식으로 파일 관리
- 파일 생성, 수정, 삭제, 조작, 백업 등 기능 제공
- 네트워크 관리 :
- 프로세서가 통신할 때 경로 설정, 접속 정책, 충돌 보안 등을 관리
- 네트워크 서비스 성능, 오류 분석, 프로비저닝, 품질 관리 등
- 메모리 관리 :
- 프로그램마다 필요한 메모리를 확인하여 한정된 메모리를 적절한 수준의 메모리로 각 프로그램마다 분배
- 메모리 추적, 프로세스에 따른 메모리 할당
- 보조 기억 장치 관리 :
- 스토리지 할당, 여우 공간 관리, 디스크 스케줄링
- 입출력 장치 관리 :
- 버퍼 캐싱 시스템 제공, 장치 드라이버 제공
- 보안 관리 :
- 시스템 보호 및 오류로 인한 시스템 손상 방지
- 명령어 해석기 :
- 대화형 명령어가 들어오면 이를 운영체제에 전달
- 사용자와 시스템 간의 인터페이스, 인터프리터, 쉘 등
Android OS란 무엇인가
정의 :
구글에서 스마트폰, 태블릿 PC 같은 터치스크린 모바일 장치 용으로 디자인한 운영 체제이자
수정된 리눅스 커널 버전을 비롯한 오픈 소스 소프트웨어 기반을 둔 모바일 운영체제
특징 :
1. 리눅스 기반 커널 사용
2. 공식 개발 언어 : Java, Kotlin
3. 오픈 라이브러리 채택
4. Android Studio라는 전용 개발 도구를 무료로 제공
5. Jetpack
6. 높은 점유율
7. 높은 이식성
Android의 Architecture
안드로이드의 권장 아키텍처
앱 아키텍쳐

UI Layer -> Domain Layer -> Data Layer
UI Layer
- 화면에 애플리케이션 데이터를 표시하는 UI 레이어
- 사용자 상호작용 또는 외부입력으로 인해 데이터가 변할 때마다 변경사항을 반영하도록 UI가 업데이트 되어야 함
- 두 가지로 구성
- UI elements : 화면에 데이터를 렌더링하는 UI 요소. 뷰 또는 Jetpack Compose 함수를 사용하여 빌드
- State holders : 데이터를 보유하고 이를 UI에 노출하여 로직을 처리하는 상태 홀더
Domain Layer
- UI와 데이터 레이어 간의 상호작용을 간소화하고 재사용하기 위한 도메인 레이어
- UI 레이어와 데이터 레이어 사이에 있는 선택적 레이어
- 복잡한 비즈니스 로직, 여러 ViewModel에서 재사용되는 간단한 비즈니스 로직의 캡슐화를 담당
- 모든 앱에 이러한 요구사항이 있는 것은 아니므로 이 레이어는 선택사항
- 복잡성을 처리하거나 재사용성을 선호하는 등 필요한 경우에만 도메인 레이어를 사용
Data Layer
- 엡 비즈니스 로직을 포함하고 애플리케이션 데이터를 노출하는 데이터 레이어
- 비즈니스 로직은 앱에 가치를 부여하는 요소로, 앱의 데이터 생성, 저장, 변경 방식을 결정하는 규칙으로 구성
- 0개부터 여러 개의 데이터 소스를 각각 포함할 수 있는 저장소로 구성
- 앱에서 처리하는 다양한 유형의 데이터마다 저장소 클래스를 만들어야 함
안드로이드 아키텍쳐 컴포넌트 (AAC)
Livedata :
기본 데이터베이스가 변경되면 뷰에 알리는 데이터 객체를 빌드
ViewModel :
앱 회전 시 제거되지 않는 UI 관련 데이터를 저장
Room :
SQLite 개체 매핑 라이브러리.
상용구 코드를 피하고 SQLite 테이블 데이터를 자바 객체로 쉽게 변환
Room은 SQLite 문의 컴파일 시간 확인을 제공하며 RxJava, Flowable, LiveData observable을 반환
Manifest의 주요 속성 10가지와 기능
Manifest :
모든 앱 프로젝트는 프로젝트 소스 세트의 루트에 AndroidManifest.xml 파일이 있어야 함.
이 파일은 Android 빌드 독, Android 운영체제 및 Google Play에 앱에 관한 필수 정보를 설명
1. <Manifest>
- AndroidManifest.xml 파일의 루트 요소
- <application> 요소를 포함해야 하며 xmlns:android 및 package 속성을 지정
2. <application>
- 애플리케이션의 선언
- 애플리케이션의 각 구성요소를 선언하는 하위 요소를 포함
- 모든 구성요소에 영향을 줄 수 있는 속성을 가짐
- 이러한 속성 중 다수 (예 : icon, label, permission, process, taskAffinity, allowTaskReparenting)는 구성 요소의 상응하는 속성에 기본값을 설정
- 그 외 속성 (예 : debuggable, enabled, description, allowClearUserData)은 애플리케이션의 값을 전체적으로 설정하며 구성요소별로 재정의할 수 없음
3. <activity>
- 애플리케이션의 시각적 사용자 인터페이스 요소를 구현하는 활동 (Activity 서브클래스)을 선언
- 모든 활동은 매니페스트 파일의 <activity> 요소로 나타내야 함
- 여기에 선언되지 않은 활동은 시스템에 표시되지 않으며 실행되지 않음
4. <intent-filter>
- 활동, 서비스 ,broadccast receiver가 응답할 수 있는 인텐트의 유형을 지정
- 상위 구성요소의 기능, 즉 활동이나 서비스가 할 수 있는 작업과 수신기가 처리할 수 있는 브로드캐스트의 유형을 선언
- 전달된 유형의 수신 인텐트로 구성요소를 열고 이 구성요소에 의미가 없는 인텐트를 필터링
- 필터 내용의 대부분은 <action>, <category>, <data> 하위 요소에서 설명
5. <action>
- 인텐트, 필터에 작업을 추가
- <intent-filer> 요소에 <action> 요소가 하나 이상 포함되어야 함
- 인텐트 필터에 <action> 요소 없으면 필터가 Intent 객체를 허용하지 않음
6. <permission>
- 이 애플리케이션이나 다른 애플리케이션의 특징 구성요소 또는 기능에 대한 액세스를 제한하는 데 사용될 수 있는 보안 권한을 선언
7. <uses-permission>
- 앱이 올바르게 작동하기 위해 사용자가 반드시 부여해야 하는 시스템 권한
- 애플리케이션이 설치될 때 (Android 5.1 이하 버전을 실행하는 기기) 또는 앱이 실행 중일 때 (Android 6.0 이상 버전을 실행하는 기기) 사용자에게 권한을 부여
8. <provider>
- 콘텐츠 제공자 구성요소를 선언
- 콘텐츠 제공자는 애플리케이션에서 관리되는 데이터에 관해 구조화된 액세스를 제공하는 ContentProvider 서브클래스
- 애플리케이션의 모든 콘텐츠 제공자는 매니페스트 파일의 <provider> 요소에서 정의해야 함(그러지 않으면 시스템에서 인식하지 못해 이 구성요소를 실행하지 않음)
- 애플리케이션에서 사용하는 다른 애플리케이션의 콘텐츠 제공자를 선언하면 안됨
- Android 시스템은 제공자의 콘텐츠 URI의 일부인 권한 문자열에 따라 콘텐츠 제공자 참조를 저장합니다. 예를 들어 의료 전문가에 관한 정보를 저장하는 콘텐츠 제공자에 액세스하려는 경우 제공자를 식별하는 URI를 다른 인수에서 가져오는 ContentResolver.query() 메서드를 호출
9. <receiver>
- broadcast receiver(BroadcastReceiver 서브클래스)를 애플리케이션의 구성요소 중 하나로 선언
- broadcast receiver를 사용하면 애플리케이션의 다른 구성요소가 실행되고 있지 않을 때도 시스템이나 다른 애플리케이션에서 브로드캐스트하는 인텐트를 애플리케이션에서 수신 가능
- broadcast receiver를 시스템에 알리는 방법1: 이 요소를 사용해 매니페스트 파일에 broadcast receiver를 선언
- broadcast receiver를 시스템에 알리는 방법2: 코드에서 동적으로 broadcast receiver를 만든 다음 Context.registerReceiver() 메서드를 사용해 등록
10. <service>
- 서비스(Service 서브클래스)를 애플리케이션의 구성요소 중 하나로 선언
- 활동과 달리 서비스는 시각적 사용자 인터페이스가 없음
- 오래 실행되는 백그라운드 작업이나 다른 애플리케이션에서 호출할 수 있는 리치 커뮤니케이션 API를 구현하는 데 사용
- 모든 서비스는 매니페스트 파일의 <service> 요소로 나타내야 함(여기에 선언되지 않은 서비스는 시스템에 표시되지 않으며 실행되지 않음)
Manifest의 4대 컴포넌트 종류와 기능
액티비티 (Activity) :
- 화면을 제어, 사용자 인터페이스를 구성
- UI를 담당하는 컴포넌트이며 사용자와의 상호작용을 담당
- 모든 안드로이드 어플리케이션은 반드시 하나 이상의 Activity를 가짐
- LifeCycle 메소드를 재정의하여 원하는 기능을 정의
- 각 Acitivity는 Manifest에 등록되어 있어야 함
- 하나 이상의 view 또는 ViewGroup을 가질 수 있음
- 두 개의 Activity를 동시에 화면에 보이게 할 수 없음
- Activity 안에는 Fragment를 붙혀 화면을 분할할 수 있음
서비스 (Service) :
- 백그라운드에서 계속 동작
- 백그라운드에서 실행되는 작업을 위한 컴포넌트로, 오랫동안 실행되는 작업이나 원격 프로세스 작업을 수행하기 위해 사용
- UI를 가지지 않음
- 한 번 시작된 서비스는 앱이 종료되어도 계속 백그라운드에서 동작
- 모든 서비스는 Service의 하위 클래스로 구현
- 네트워크와 연동하여 데이터를 가져올 수 있음
- Activity와 Service는 동일한 어플리케이션 스레드인 UI 스레드에서 실행
- ex) 스트리밍 앱에서 음악을 백그라운드로 재생, 다른 작업을 수행하며 파일 다운로드 진행
방송 수신자 (BR, Broadcast Receiver) :
- 방송을 대기하고 수신
- 안드로이드 OS에서 발생하는 다양한 이벤트 정보를 받아 반응하는 컴포넌트
- 수신기를 통해 디바이스의 상황을 감지하고 적절한 작업을 수행
- 대부분 UI를 가지지 않음
- BroadcastReceiver의 하위 클래스로 구현
- 대다수의 브로드캐스트는 서비스에서 발생 ex) 배터리 부족 알림, 캡쳐 알림, 시스템 부팅, 문자/전화 수신
- 앱도 브로드캐스트를 시작할 수 있음 ex) 다른 앱에서 기기에 데이터 다운로드를 완료했다는 알림
컨텐츠 제공자 (CP, Content Provider) :
- 자신의 데이터를 외부로 공개
- 데이터를 관리하고 다른 어플리케이션 데이터를 제공하는 컴포넌트
- 특정 어플리케이션이 가지고 있는 DB를 공유하기 위해 사용하며 표준화된 인터페이스를 제공
- 파일 시스템, SQLite 데이터베이스, 웹상에 저장된 데이터를 관리
- 콘텐츠 제공자를 이용해 다른 앱의 데이터를 쿼리하거나, 허용할 경우 수정도 가능
- 인텐트로 공유가능한 데이터 이외에 음악 또는 사진 파일과 같은 용량이 큰 데이터 공유에 적합
- 콘텐츠 제공자가 앱에 접근하려면 Read, Write 권한이 필요
Intent
Intent 역할
- 컴포넌트끼리 통신하기 위해 사용하는 메시징 메커니즘
- 다른 앱 구성요소로부터 작업을 요청하는데 사용
ex)
- 액티비티 시작
- 서비스 시작
- 브로드캐스트 전달
명시적 Intent와 암시적 Intent의 차이
1. 명시적 Intent
- Intent를 충족하는 애플리케이션이 무엇인지 명시
- 인텐트에 클래스 객체나 컴포넌트 이름을 지정하여 호출될 대상을 확실히 알 수 있음
- 실행하고자 하는 Component 클래스명을 Intent에 담음
- 보통 동일 앱 안에서 구성요소를 시작할 때 사용
- 사용자 작업에 응답하여 새로운 액티비티를 시작하거나 백그라운드에서 파일을 다운로드하기 위해 서비스를 시작하는 것이 해당
2. 암시적 인텐트
- 호출될 대상의 속성들을 지정했지만 호출될 대상이 달라질 수 있는 경우
- 다른 응용 프로그램의 컴포넌트를 호출할 때 사용
- 수행할 일반적인 작업을 선언하여 다른 앱의 구성요소가 이를 처리할 수 있도록 함
- 운영체제에는 인텐트의 정보를 참조하여 호출할 컴포넌트를 검색하는 정교한 알고리즘이 작성되어 있으며 시스템은 적절한 컴포넌트를 찾기 위해 설치된 모든 응용 프로그램의 컴포넌트를 조사
- Android 시스템에서 시작할 적절한 구성요소를 찾을 때 인텐트의 내용을 기기에 있는 다른 여러 앱의 Manifest 파일에서 선언된 Intent Filer와 비교하는 방법을 사용
- Intent와 일치하는 Intent Filer가 있으면 시스템에서 해당 구성요소를 시작하고 이를 Inent 객체에 전달
안드로이드에서 자주 사용되는 용어
1. TextView
문자열을 화면에 출력하는 뷰
2. Button
사용자가 탭하거나 클릭하여 작업을 수행할 수 있는 사용자 인터페이스
3. ImageView
이미지를 화면에 출력하는 뷰
ImageView는 이미지에 색조를 적용하고 이미지 크기 조정을 처리하는 데에도 일반적으로 사용
4. RecyclerView
데이터에 해당하는 뷰가 포함된 ViewGroup
이는 뷰 자체이므로, 다른 UI 요소를 추가할 때처럼 레이아웃에 RecyclerView를 추가하면 됨
5. ScrollView
그 안에 배치된 뷰 계층 구조를 스크롤할 수 있게 해주는 뷰 그룹
스크롤 뷰에는 직계 하위 항목이 하나만 있을 수 있음
스크롤 뷰 내에 여러 개의 뷰를 추가하려면 뷰 그룹을 추가하는 직계 하위 항목 LinearLayout을 만들고 해당 LinearLayout 내에 추가 뷰를 배치
6. NestedScrollView
NestedScrollView는 와 비슷 ScrollView하지만 Android의 새 버전과 이전 버전 모두에서 중첩 스크롤 상위 및 하위 역할을 모두 지원
중첩 스크롤은 기본적으로 활성화되어 있음
7. BottomNavigationView
BottomNavigationView란 화면 밑에 있는 네이게이션 역할을 하는 버튼 모음
8. TabLayout
카카오톡, 페이스북, 구글 플레이스토어, 등에서 볼 수 있는 각각의 탭 메뉴
각각의 페이지가 다른 화면을 가지기 위해 ViewPager를 사용
9. FloatingActionButton
앱 UI의 기본 작업을 트리거하는 원형 버튼
10. margin
뷰와 뷰 사이의 간격
11. padding
뷰 내부에서 뷰 테두리간 간격 지정
12. chainStyle
연결되어있는 뷰들의 배치
13. id 네이밍
뷰를 식별하기 위한 뷰의 식별자 속성
Layout 종류
1. Linear Layout
- 세로 또는 가로의 단일 방향으로 모든 요소를 정렬하는 레이아웃
- vertical/horizontal - 뷰가 한 방향으로 집중됨
- list 모양을 떠오르면 됨
2. Relative Layout
- view끼리의 상대적 위치로 배치를 적용하는 Layout
- view를 배치할 때 기존에 존재하는 view를 기준으로 상대적 위치를 설정하여 view를 배치
3. Constraint Layout
- Linear Layout이 가진 가중치의 장점과 Relative Layout이 가진 상대적 위치 관계에 따른 배치를 활용할 수 있는 Layout
- 가장 많이 쓰이는 Layout
- Android studio에 기본으로 설정되어 있는 Layout
- constraint 계약 :
- constraint 계약 내부 자식에게 상하좌우에 각각 하나씩 걸 수 있음
- 제약으로 인해 relative Layout처럼 어떤 뷰의 상하좌우에 위치하게끔 할 수 있고,
어떤 뷰들 사이에 위치하게끔 할 수 있음 - 이 Layout으로 다른 Layout을 배치할 수 있고, 안드로이드 사이트에서도 이러길 권장하고 있음
4. Frame Layout
- 여러 개의 View를 중첩으로 배치하고 그 중 하나를 Layout의 전면에 표시할 때 사용하는 Layout
- 여러 개의 view를 겹쳐놓고, 그 view들을 삭제해가며 보여주고 싶을 때 유용하게 쓰임
5. Table Layout
- 행과 열로 이루어진 표 형태의 구조를 가진 Layout
- 행 통합 불가능
6. Grid Layout
- Table Layout의 단점을 보완한 Layout
- 직관적인 행렬선언과 셸 병합을 할 수 있고, 각각 행과 열의 개수를 지정할 수 있음
참고 사이트 :
https://developer.android.com/jetpack/guide?hl=ko
https://subokim.wordpress.com/2013/01/31/platform-story/
https://m.blog.naver.com/naverschool/221577698896
http://thebetterday.tistory.com/entry/What-is-Platform
https://newly0513.tistory.com/130
https://kbwplace.tistory.com/4
https://terms.naver.com/entry.naver?docId=2275870&cid=42238&categoryId=51182
https://kpmg.com/kr/ko/home/insights/2019/10/insight67.html
https://cocoon1787.tistory.com/685
https://ojt90902.tistory.com/583
https://velog.io/@0mi/%EC%9A%B4%EC%98%81%EC%B2%B4%EC%A0%9C%EC%9D%98-%EC%97%AD%ED%95%A0
https://ko.wikipedia.org/wiki/%EC%95%88%EB%93%9C%EB%A1%9C%EC%9D%B4%EB%93%9C_(%EC%9A%B4%EC%98%81%EC%B2%B4%EC%A0%9C) https://coding-factory.tistory.com/202
https://dinfree.com/lecture/android/android_1.1.html
https://m.blog.naver.com/imagine0716/220971553970
https://velog.io/@yoosk5485/Manifest%EC%9D%98-%EC%A3%BC%EC%9A%94-%EC%86%8D%EC%84%B1-10%EA%B0%80%EC%A7%80https://jinee0717.tistory.com/45
https://siadaddy-cordinglife.tistory.com/22
https://velog.io/@abc9985/AndroidBottomNavigationView-%EB%A7%8C%EB%93%A4%EC%96%B4%EB%B3%B4%EA%B8%B0
'대외활동 > UMC 동아리' 카테고리의 다른 글
| [UMC 5기] Android 워크북 3주차 (0) | 2023.09.29 |
|---|---|
| [UMC 5기] Android 워크북 2주차 (1) | 2023.09.29 |
| [UMC 5기] Android 스터디 2주차 (0) | 2023.09.24 |
| [UMC 5기] Android 스터디 1주차 (0) | 2023.09.20 |
| [UMC 동아리] 5기 합격 후기 (0) | 2023.09.17 |