Serialization 이란?- 데이터 구조나 오브젝트 상태를 동일하거나 다른 컴퓨터 환경에 저장하고 나중에 재구성할 수 있는 포맷으로 변환하는 과정. 자바에서 정의하는 Serialization 이란 ?- 자바 언어에서 사용되는 Object 또는 Data를 다른 컴퓨터의 자바 시스템에서도 사용 할 수 있도록 바이트 스트림 형태로 변환하는 포맷 변환 기술을 말한다.- 반대 개념인 역직렬화(Deserialization)는 바이트 스트림으로 변환된 데이터를 자바 시스템의 Object 또는 Data로 변환하는 기술이다. 너무 깊이 가지 말고 간단하게 정리하자면... Android 에서는 컴포넌트간의 Bundle을 통한 데이터 전달이나 서버통신을 할 때 필수적으로 하는 것이 데이터의 직렬화/역직렬화다.보통 Ja..
액티비티 간 클래스 데이터를 전달할 때 직렬화를 적용해서 전달함. Serializable - 표준 Java Interface - 구현이 간편한 대신 내부적으로 Reflection을 사용하여 직렬화를 처리한다. 즉, 많은 추가 객체가 생성되어서 가비지 컬렉션 비용이 높아짐. - 용량이 큼 Parcelable - Android SDK Interface - 필수 메서드를 구현해야 되서 boilerplate code가 늘어남. 내부적으로 Reflection을 사용하지 않기 때문에 성능상 이점이 생김. 성능 이슈 - 기본 방식으로 구현 할 시에는 Serializable 방식이 Parcelable 보다 느리다. - Serializable 방식에서 readObject()와 writeObject() 메서드를 구현할 시..
신입 또는 경력자 면접 질문에서 나오는 질문이지만 가끔 얘기를 할려고 하면 생각이 안날 때가 있다. 일단 적어보자. Program ? - 저장 장치에 저장되어 있는 실행 가능한 명령어의 집합 Process ?? - 프로그램을 실행하여 메모리에 적재된 실행중인 상태가 되면 프로세스 - 각 프로세스에 독립된 자원이 할당됨 (할당 자원 : Code, Data, Stack, Heap) - 각 프로세스는 독립된 주소 공간에서 실행되고, 서로간에 데이터에 접근할 수 없음. - IPC(Inter-Process-Communication)을 통해 다른 프로세스의 자원 접근 가능 Thread ??? - 프로세스가 할당받은 자원을 이용하는 실행 단위 - 각 스레드는 프로세스 내에서 Stack만 따로 할당받고, Code, D..
프로젝트 진행을 하다보면 많은 라이브러리를 참조하게 된다. "그런 라이브러리를 나도 한번 만들어보자" 란 생각을 가진 사람이라면 일단 만들어보자. 널리 사용되는 원격 저장소에는 Maven central과 Bintray jcenter가 있지만 실제로 배포하기까지는 많은 과정을 거쳐야 된다. 하지만 Jitpack을 이용하면 쉽게 등록할 수 있다. Jitpack으로 간단하게 Open Source Library를 배포해보자 1. Android Project 생성한다. - Android Studio를 실행시켜서 프로젝트르 생성한다. 2. Module을 추가한다. - File -> New -> Module -> Android Library 3. Project gradle 설정 classpath "com.github..
목표 : RecyclerView의 Item을 선택할 경우 확장 축소 동작 구현 1. Item layout에 Exapnd View 추가 2. Custom Adapter에 아이템 선택에 따른 확장 축소 관련 부분 추가 SparseBooleanArray를 사용하여 [position, select]에 대한 데이터 처리 // 선택 데이터 리스트 private var selectedItems: SparseBooleanArray = SparseBooleanArray() onBindViewHolder 함수의 TaskViewHolder 부분에 확장 뷰 관련 처리 추가 // 아이템 데이터를 사용하여 각 아이템 값 설정 holder.itemView.apply { tv_item_default_name.text = item.n..
목표 : RecyclerView의 상단에 Header Item, 하단에 Footer Item 을 추가 1. header, footer item layout 추가 - 둘 다 간단하게 텍스트 뷰를 중앙에 위치시킴 2. Custom Adapter에 Header, Footer에 대한 처리 구현 getItemCount에 헤더,풋터 갯수를 포함 getItemViewType에 position에 따른 타입 반환 추가 각 타입에 따른 ViewHolder Class 추가 onCreateViewHolder에서 각 타입에 따른 ViewHolder Class 반환 추가 onBindViewHolder에 각 ViewHolder에 따른 처리 추가 class RvExampleDefaultAdapter : RecyclerView.Ada..
1. Custom Adapter에 삭제를 위한 함수를 추가한다. #1 을 통해 제작된 코드에 추가 // 내부 데이터 값 제거 fun removeTask(position: Int) { tasks.removeAt(position) notifyDataSetChanged() } 2. ItemTouchHelper 클래스 구현 ItemTouchHelper.SimpleCallback 구현 (드래그 방향과 스와이프 방향 설정) attachToRecyclerView를 통해 RecyclerView와 연동 onSwiped에서 Adapter에 삭제에 대한 처리 함수 호출 fun initRecyclerView() { // Recycler View에 Custom Adapter 설정 rv_example_recyclerview.ad..
목표 : Recycler View 기본 타입 구현 1. 레이아웃 파일에 RecyclerView 추가 2. RecyclerView에서 사용할 Item 레이아웃 파일 생성 - 여기에서는 이름, 세부내용, 이미지로 구성 3. Data Class 생성 Item 레이아웃과 맞춤 data class Task(val name: String, val details: String, val image: Uri) 4. Adapter Class 생성 내부 데이터 구현(list) ViewHolder 클래스 구현 onCreateViewHolder, getItemCount, onBindViewHolder 구현 내부 데이터 처리를 위한 함수 구현 (set, add, remove) class RvExampleDefaultAdapter..
많은 사람들이 배우면서 어렵다고 느끼는 pointer를 쉽게 관리하기 위해 사용하는 스마트 포인터에 대해 알아보겠습니다. c++에는 unique_ptr, shared_ptr, weak_ptr 이 제공되고 있습니다.unique_ptr은 인스턴스의 소유권을 유일하게 가지는 스마트 포인터이고shared_ptr은 인스턴스의 소유권을 공유하는 스마트 포인터이고weak_ptr은 인스턴스의 소유권을 가지지 않는 스마트 포인터이다. 헤더 추가 :#include 일단 unique_ptr부터 살펴보면 (1)과 같이 사용하여 해당 인스턴스의 소유권을 유일하게 가지게 되는데 만약 해당 인스턴스의 소유권을 또 가지는 스마트 포인터가 생기면 할당된 메모리를 중복해제하여 에러가 발생하게 된다.std::unique_ptr uniqu..
- Total
- Today
- Yesterday
- remove item
- delete item
- Git
- Parcelable
- git hook
- serializable
- weak_ptr
- qtwebengine
- RecyclerView
- 리사이클러뷰 확장
- type inference
- expandable recyclerview
- ubuntu 16.04
- android open source
- publish opensource
- swip
- 자동 배포
- kotlinx serialization
- C++
- android serialization
- jitpack
- auto depoly
- build server
- Apache
- 오픈 소스 배포
- security.ubuntu.com
- data transfer
- Jenkins
- kotlin
- git server
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |