일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 대구인스타핫플
- 애드몹
- 안드로이드개발
- 인스타핫플
- 안드로이드앱
- 수성구맛집
- 감성카페
- 앱개발
- androidstudio
- 동성로핫플
- 파이썬
- 애드센스
- 의무경찰
- 코딩공부
- 어플개발
- Android
- 동성로카페
- 대구핫플
- 동성로맛집
- 코딩
- 수성구카페
- 범물동카페
- 대구카페
- 범물동
- 대구맛집
- 안드로이드
- 개발자
- 안드로이드앱개발
- 안드로이드스튜디오
- 지산동카페
- Today
- Total
목록Coding/Android (37)
Glacier's Daily Log
코틀린 작업중 발생하는 제안사항인 SAM-constructor 가 뭘까? SAM conversions (Single Abstract Method) 기존 Java에서 클릭 리스너를 만들 때 사용한 익숙한 코드 btnTest.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // Do something } }); 람다식을 사용하지 않은 Kotlin으로 만든 클릭 리스너 btnTest.setOnClickListener(object: View.OnClickListener { override fun onClick(v: View) { // Do something } }) 여기서 OnClickListener는 ..
ℹ️ 배경 회사에서 개발 중 기능의 공통화를 위해서 여러 클래스의 상위 클래스를 제작하였다. 작업 중 상위카드인 ~~~~~.kt에 선언된 var root: SomeDto? = null 를 상속받은 클래스에서 사용할 일이 생겼다. ☢️ 이슈 코틀린에서는 간단하게 직접 변수명으로 접근할 수 있지만, Kotlin으로 선언된 클래스를 상속받은 Java 코드에서는 Setter/Getter를 통해서 접근할 수 밖에 없는 문제가 생겼다. 따라서 기존에 root로 접근하던 수많은 코드를 모두 getRoot()로 변경해주어야 하는 상황이 발생했다. ✅ 해결 @JvmField Instructs the Kotlin compiler not to generate getters/setters for this property an..
코틀린에서 vararg로 가변 인자를 지원. vararg를 사용하면 함수를 호출할 때 인자 개수를 유동적으로 관리할 수 있음. // vararg의 사용 예 fun sum(vararg num: Int) = num.sum() fun main(args: Array) { val nums1 = sum(1 val nums2 = sum(1, 2, 3) } 그렇다면 이미 존재하는 배열을 가변인자로 넘길 수는 없나? spread operator * 사용하기 val tester = arrayOf(1, 3, 5) sum(*tester) 와 같은 방법으로 배열을 spread하여 가변인자로 넣을 수 있음. (c의 포인터 개념과는 다름!)
안드로이드에서 UI 요구사항을 작성하는 방법은 크게 3가지가 있다. 동적으로 프로그래머틱하게 View를 생성 XML 파일을 활용해 UI 작성 Jetpack Compose를 활용하여 작성 아직까지 대부분의 구현은 XML 파일을 활용해 UI를 작성하는 방식을 채택하고 있는데, 수많은 ViewGroup중 LinearLayout이나 RelativeLayout을 활용한 구현이 많이 보인다. 현재 안드로이드 권장사항은 ConstraintLayout 사용인데, ConstraintLayout을 활용하면 어떤 장점이 있는지 알아보자. 우리가 XML로 작성한 코드는 실제로 View기반의 구현체로 바뀌어 화면에 그려지게 된다. 그 View 또한 특수한 생명주기를 따른다 (참고 : https://www.charlezz.com..
Kotlin 1.3에 속하는 캡슐화 블록 예외처리시 사용. val targetJob: Result ... if(targetJob.isSuccess){ it: String -> //성공시 호출됨 } if(targetJob.isFailure){ it: Throwable -> // 실패(오류)시 호출됨 } Result 타입에서 가독성 좋게 값 가져오기 targetJob.getOrThrow() → runCatching문 내에서 성공시엔 성공값, 에러가 발생한 경우 해당 에러 리턴 targetJob.getOrDefault(defaultValue = "Unknown") → runCatching문 내에서 성공시엔 성공값, 에러가 발생한 경우 defaultValue 파라미터를 리턴 targetJob.getOrNull(..
Flow? Coroutine 비동기 작업에서 Suspend 함수를 사용하여 작업이 모두 완료된 후에 값을 리턴받을 수 있다. 하지만 중간에 진행되는 작업 중에 갱신되는 값들도 계속 받을 수 있다면 업데이트를 조금 더 다이나믹하게 진행할 수 있지 않을까? Flow를 사용해서 연속적인 값을 방출하게 구현할 수 있다. LiveData vs Flow 기존에 사용하던 LiveData와 Flow의 차이점? LiveData- 생명주기를 가진 데이터 홀더 - 메인스레드에서 동작. 별도 쓰레드에서 동작해야 하는 상황 (Data Layer에서의 구현 등) 에서는 사용하기 어려움 - 안드로이드 의존성이 밀접하게 결합되어 있어 테스트가 힘들다.- 마찬가지로 안드로이드 의존성이 있기 때문에 코드 분리시에 조심해서 사용해야함 F..