2024/08 16

Textwatcher

EditText의 값이 변경될 때마다 입력 된 값을 실시간으로 관찰하면서 특정 작업을 처리 해주기 위한 인터페이스   binding.emailArea.addTextChangedListener(object : TextWatcher { override fun beforeTextChanged(p0: CharSequence?, p1: Int, p2: Int, p3: Int) { //텍스트가 변경되기 전 호출 } override fun onTextChanged(p0: CharSequence?, p1: Int, p2: Int, p3: Int) { // 텍스트가 변경될 때마다 호출 //..

Repository

지난주 금요일부터 5일동안 강의를 듣고 자료를 찾아보고 직접 쳐봐도repository패턴이 이해되지 않아 글을 써서 정리해보기로 했다.인터페이스를 잘 모르니까 코드 동작원리가 전혀 와닿지 않았고 그나마 이해하고 있는 개념도 흔들렸다. repository뿐만 아니라 보다 근본적인 개념도 같이 잡는 걸 목표로 작성을 시작한다.    Repository Pattern데이터를 캡슐화하여 출처에 관계 없이 동일한 인터페이스로 데이터에 접근할 수 있도록 하는 패턴 출처에 관계 없이 내부에서 preference, room 등으로 저장한 cache data와 외부에서 api 등으로 끌어온 response data로 구분한다. ViewModel은 직접 Data에 접근해 데이터를 가져오는 것이 아니라 Repository에..

Retrofit 알려줘

Q. 어떻게 사용해?A.  data-model-데이터클래스data class ImageModel( @SerializedName("meta") val imageMeta: ImageMeta, @SerializedName("documents") val imageDocuments: MutableList) data-remote-인터페이스interface NetWorkInterface { //카카오 이미지 검색결과 받아오는 코루틴 전용 메소드 @Headers("Authorization: 키") @GET("v2/search/image") suspend fun searchImage( @Query("query") query: String ): ImageMode..

object

객체 object클래스를 정의하면서 인스턴스를 생성하는 키워드선언 : object {} 선언식Object declaration싱글톤Singleton패턴. 단일 인스턴스이므로 생성자 사용불가, 상속불가, 인스턴스 추가생성 불가Thread-safe : 멀티 스레드 환경에서 일반적으로 어떤 함수나 변수, 혹은 객체가 여러 스레드로부터 동시에 접근이 이루어져도 프로그램 실행에 문제가 없는 것lazy initialization : Object 키워드가 선언된 클래스는 외부에서 객체가 사용되는 시점에 초기화 표현식익명객체annonymous object. 호출할 때마다 새로운 인스턴스 생성여러 메소드를 오버라이드해야되는 경우 권장되고 하나의 메소드일 경우 람다식이 효율적리스너(object: 클래스() {} 형태로 많..

SharedPreferences

Preference 프로그램의 설정 정보(사용자의 옵션 선택 사항 이나 프로그램의 구성 정보)를 영구적으로 저장하는 용도간단한 정보들을 저장할 때 사용(예 : 알림설정 true/false)하며 보통 여러개를 저장한다. XML 텍스트 파일에 키-값 세트로 저장  SharedPreferences 클래스 Preferences의 데이터를 관리하는 클래스응용 프로그램 내(현 어플리케이션) 액티비티 간 공유. 한 액티비티에서 수정 시 다른 액티비티에서도 수정된 값 확인응용 프로그램의 고유한 정보이므로 외부에서는 읽을 수 없다.         String, Boolean, Int, Long, Float  타입의 저장 및 복원한개의 파일 : getPreferences 액티비티 클래스에 정의된 메소드이므로 액티비티 인스..