분류 전체보기 (93) 썸네일형 리스트형 프래그먼트 프래그먼트란 : 액티비티 모듈안에 동작하는 사용자 인터페이스 여러개의 프래그먼트를 하나의 액티비티에 조합하여 창이 여러 개인UI 구축할 수 있으며 ㅏ나의프래그먼트를 여러 액티비티에서 재 사용할수 있습니다 액티비티와 프래그먼트 비교 액티비티 : 시스템의 액티비티 매니저에서 인텐트를 해석해 액티비티간 데이터 전달 프래그먼트 : 액티비티의 프래그먼트 매니저에서 메소드로 프래그먼트간 데이터 전달 프래그먼트(Fragment)는 안드로이드 애플리케이션의 UI 부분을 모듈화하여 재사용할 수 있도록 해주는 구성 요소입니다. 프래그먼트는 자체적인 생명주기(lifecycle)를 가지며, 액티비티의 생명주기와 밀접하게 연결되어 있습니다. 프래그먼트의 주요 생명주기 메서드: onAttach() 프래그먼트가 액티비티에 연결될 .. 뷰 바인딩, 어댑터 뷰, 뷰 바인딩 사용 방법 그래들에 작성 buildFeatures{ viewBinding = true } 사용 예시 binding = ActivityMainBinding.inflate(layoutInflater) val view = binding.root setContentView(view) View Binding findViewById 차이점 1. null 안정성 차이 뷰 바인딩을 하면 앱이 레아아웃의 각 뷰를 직접 참조할 수 있게 해주는 코드를 자동으로 생성해주어 null값으로 인한 오류 즉 화면에 나타나지 않았는데 뷰를 사용하려할 때 생기는 문제들을 예방해 줍니다 2. 타입 안정성 xml파일에서 정의된 뷰의 타입과 자동 생성된 바인딩 클래스의 필드 타입이 항상 일치하기에 타입 오류를 방지합니다. 어댑터 .. inferred 타입으로 리턴하면 안되는 이유 코틀린 타입 추론은 JVM세계에서 널리 알려진 코틀린의 특징이며 자바 10 부터는 코틀린을 따라 타입 추론을 도입 했습니다. 다만 타입 추론을 사용할 때 위험한 부분들이 있습니다. 위험한 부분들을 피하려면 할당 때 inferred 타입은 오른쪽에 있는 피연산자에 맞게 설정된다는 것을 기억해야 합니다. 절대로 슈퍼클래스, 인터페이스로는 설정되지 않습니다 open class Animal class Zebra: Animal() fun main() { val animal = Zebra() animal = Animal() //오류 Type mismatch } 일반적인 경우에는 이러한 것이 문제가 되지 않습니다. 그냥 원하는 타입보다 제한된 타입이 설정되었다면, 타입을 명시적으로 지정해서 이러한 문제를 해결할 수 .. null 안정성과 플랫폼 타입 null-safety는 코틀린의 주요 기능 중 하나 입니다 자바에서 자주 볼 수 있는 null-pointer Exception은 코틀린에서 null-safety 매커니즘으로 찾아볼 수 없습니다. null-safety가 없는 자바에서 string 타입을 리턴하는 매서드가 있다고 한다면 코틀린에서 이를 사용하려면 @nullable 어노테이션이 붙어 있다면 nullable로 추정하고, string?로 변경 하면 됩니다 @nullable 어노테이션이 붙어있지 않다면 모든것이 nullable일 수 있기에 안전하게 접근하기 위해 이를 nullable로 가정하고 다루어야 합니다. 하지만 null이 리턴하지 않는게 확실한 부분이 있을수 있기에 그럴 경우 !!를 붙입니다 nullable과 관련하여 나타나는 분제가 자바의.. 뷰바인딩 오류 오류 해결방법을 말하기 전에 먼저 버전부터 확인을 해보자 버전이 4.0 이상이면 buildFeatures{ viewBinding = true } 이하면 viewBinding { enabled = true 버전에 맞게 설정을 했는데 안된다면 이 밑에 방법들을 써보자 해결방법 1 1.빌드 -> rebuild project 2. 그후 직접 입력해서 찾 해결방법 2 buildFeatures{ viewBinding = true } 다시한번 작성 한다. 그래드 파일이 변경 되었으니 싱크를 맞추가고 표시가 뜨면 sync now를 눌러 싱크를 맞춘다 rebuild project를 누른다. Activity Android 4대 컴포넌트 : Activity, Service, Broadcast Receiver, Content Provider 하나의 창을 띄어주며 setContentView를 통해 화면에 UI지정할 수 있다. onCreate Activity 초기화 구간 setContentView를 통해 화면에 UI지정 위젯 연결 사용(view binding,findViewbyId) onPause() : 더이상 ui작용이 불가능한 상태(저장할 데이터가 있을 시 해당 구간에서 해야합니다) Activity의 lifetime - onCreate() -> onDestory Activity의 visible lifetime - onStart -> onStop Activity의 foreground lifetime - onRes.. enableEdgeToEdge() 안드로이드 프로젝트 생성시 기본적으로 나오는 코드 입니다 그런데 한번도 사용 해본적도 없고 알려고 한적도 없더라고요 갑자기 궁금해져서 알아 보았습니다. enableEdgeToEdge() setContentView(R.layout.activity_main) ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main)) { v, insets -> val systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars()) v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom) insets 위 함수의 descr.. 변수의 스코프를 최소화 해야하는 이유 상태를 정의 할때 변수와 프로퍼티의 스코프를 최소화 하는게 좋다 프로퍼티 보다는 지역 변수를 사용하는게 더 좋습니다 최대한 좁은 스코프를 갖게 변수를 사용 합니다 예 : 반복문 내부에 변수가 사용된다면 반복문 내부에 변수를 작성하는게 좋습니다 요소의 스코프란 요소를 볼수있는 컴퓨터 영역입니다. 코틀린의 스코프는 기본적으로 중괄호로 만들어지며, 내부 스코프에서 외부 스코프에 있는 요소에만 접근할 수 있습니다 외부 스코프에 있는 변수에 접근할 수 없지만 내부는 접근할 수 없습니다. 변수 스코프를 제한하는 예 스코프를 좁게 만드는게 좋은 이유는 추적하기 쉽기 때문입니다. 애플리케이션은 간단할수록 읽기도 쉽고 안전해집니다 mutable 프로퍼티보다 immutable 프로퍼티를 선호하는 이유와 비슷합니다. 변수를.. 이전 1 ··· 6 7 8 9 10 11 12 다음