일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 기존 앱
- 상단 탭바
- Side Menu
- UIPresentationController
- Swift Package Manager
- SwiftUI
- DevelopmentRegion
- convert base64
- transformation.map
- Android
- base64 변환
- url 관찰
- scrolling tab
- detect url
- GeometryReader
- UIViewControllerTransitioningDelegate
- ViewBuilder
- ios
- 스크롤 탭
- Tuist
- 개발자 면접
- List
- url 추적
- DataBinding
- notifychanged
- swift #swift keychain #keychain 사용법
- development language
- swift
- oberve url
- pod install
- Today
- Total
목록안드로이드 (39)
버그 잡이
1. Generic이란? - 클래스 내부에서 사용할 데이터 타입을 외부에서 지정하는 기법 - 인스턴스화 할때 지정됨 -> (클래스를 정의할때는 데이터 타입을 확정하지 않고) 해당 클래스의 내용을 실체화할때 구체적으로 type을 명시하는 것 2. 왜 Generic을 사용하는가? - 같은 구성의 클래스일 경우 코드 중복 제거를 위해서 클래스 type을 object로 받을 수 있다. - 하지만, 이 경우 다른 타입으로 casting 할 경우 추후 casting 시 에러가 발생한다. - Java는 type에 대한 명확한 지정을 요구하기 때문이다.(python, php, js는 그렇지 않다.) -> "타입 안전 + 코드 중복 제거(다양한 type 대응)" 두 마리 토끼를 잡고 싶다. 3. Generic의 특성 "..
1. MVVM이란? 기존의 MVP가 가지는 문제를 해결하고자 나온 모델입니다.. 기존 MVP 모델은 view와 presenter의 의존성이 강하다는 것이 문제였는데 MVVM은 "viewmodel은 view를 모르는 구조"로 설계함으로써 view와 viewmodel의 의존성을 느슨하게 만들었습니다. 2. MVP vs MVVM "ViewModel은 View를 모른다" 그림에서 볼 수 있듯이 가장 큰 특징은 mvp에서는 presenter에서 view를 참조하고 있는데 mvvm에서는 viewmodel이 view를 참조하고 있지 않습니다. 이 특징 덕분에 기존 mvp 패턴에서 presenter와 view간의 의존성이 높아져 발생할 수 있는 문제를 어느 정도 해결할 수 있게 해줍니다. '클래스간 의존성이 높아지면 ..
추상클래스 vs 인터페이스 1. 정의 - 추상클래스 : 1개 이상의 추상메소드를 가진 클래스 - 인터페이스 : 모든 메소드가 추상 메소드인 추상 메소드 모음 2. 차이점 "사용 목적에 있어서 다릅니다." (핵심) 추상 메서드 - 부모 클래스의 기능을 이용 및 확장 인터페이스 - 구현 객체와 동일한 동작을 강제. 일종의 설계도와 같은 역할 +그 외 추상 메서드 - 클래스로 구체적인 로직이나 상태를 가질 수 있습니다. - 단일 상속 인터페이스 - 인터페이스로 구체적인 로직이나 상태를 가질 수 없습니다. - 다중 상속 가능 인터페이스와 다형성 인터페이스는 "메소드에 대한 정의를 먼저 하고 구현을 미루는 패턴"입니다. 이렇게 어떤한 행동에 대한 구체적인 구현을 나중으로 미루는 것을 추상이라고 합니다. 추상화를 ..
오늘 날 잡아서 앱에서 사용될 CustomView들을 만들었습니다. 원래는 customView를 안 썼었는데 이렇게 만들어서 쓰니 Activity에서 코드가 확 줄어듭니다. #ProgressBar - 영어 단어를 맞추면 전체 갯수 중 몇개를 맞췄는지 보여주는 TextView가 추가된 progressbar가 필요했습니다. - 퍼센트 형태가 아니라 "맞힌 단어수 / 전체 단어수" 이기에 매개변수를 두개를 받았습니다. open class CustomProgressBar @JvmOverloads constructor(context: Context, attrs: AttributeSet?=null, defStyleAttr: Int=0) : LinearLayout(context, attrs, defStyleAttr)..
* 요구사항 1. 음악 재생이 2분 이상 지속될 수 있어야 한다. 2. 음악 재생 상태가 UI에 반영될 필요는 없다. 서비스를 시작하는 두가지 방법 서비스를 시작하는 방법에는 위와 같이 두 가지 방법이 있다. startService()는 가장 기본적인 service 실행 방법이고 bindService()는 service와 activity가 서로 통신할 수 있게 해주는 기능이 있다. ex) 음악 재생시 재생 상태에 따라 버튼 모양 변경 -> 내가 만들 앱은 알람앱으로 단순 음악만 재생하면 되기 때문에 startService()로 실행하겠다. 오레오 이후 백그라운드 서비스 제한 오레오 버전 이후 백그라운드에 대한 제한이 엄격해졌다. 어느 정도냐면 실제로 백그라운드에서 서비스를 실행하고 5초가 지나면 serv..
"안드로이드에서 LongTask한 작업은 새로운 스레드를 만들어서 작업한다." 내가 안드로이드 스레드를 공부하면서 느낀 스레드의 핵심 중 하나이다. "그렇다면 스레드는 얼마나 만들어서 쓸 수 있는가?" 라는 질문이 생겼다. - stackoverflow를 살펴보니 - "메모리에서 허용하는 만큼, 정확히는 stack 메모리가 허용하는 만큼 만들 수 있다" 는 답변을 보았다. 이는 자연스레 "stack은 무엇인가?"라는 질문으로 이어졌고 이를 알기 위해선 Process와 Thread의 내부 구조를 살펴봐야했다. Process 프로세스란 실행중인 프로그램으로 메모리 입장에서는 운영체제로부터 시스템 자원을 할당받은 작업의 단위이다. process 는 아래와 같은 구조로 이루어져있다. *Text 영역 : 실행할 프..
비동기 프로그래밍과 관련된 3가지 구글 독스 1. Process and app lifecycle 2. Process and Thread 3. Communication with UI 이 내용을 정리해보고자 한다. 1. Process and app lifecycle - 안드로이드 앱은 안드로이드 시스템에 의해서 일부 또는 전체가 강제 종료될 수 있다. - 네가지 중요도 계층이 있는데 아래 계층으로 내려갈수록 강제 종료될 확률이 높아진다. 1. 포그라운드 프로세스 - 사용자가 현재 하고 있는 작업에 필요한 프로세스. □ Activity의 onResume □ BroadcastReceiver의 onReceive □ Service의 onCreat 2. 가시적 프로세스 - 사용자가 알고 잇는 작업 □ Activity..
eidttext는 사용자의 입력을 받는 창이다. 단순 버튼과는 다르게 사용자의 다양한 패턴에 대한 대응을 해줘야한다. 1. 키패드의 버튼으로 최종 입력하는 경우 setOnEditorActionListener()를 활용하면 키패드를 통한 완료 처리에 대응할 수 있다. *이것을 설정해주지 않으면 키패드의 완료 버튼으로 최종 결과를 입력할때 아무런 결과를 호출할 수 없다. wordMeaningET.setOnEditorActionListener { v, actionId, event -> if(actionId == EditorInfo.IME_ACTION_DONE){ wordAddClick(v) true } else{ false } *imeOption이 적용이 안 되는 경우가 있다. 이때는 inputType="te..