
안드로이드의 화면(UI)를 구성하는 모든 요소들을 말한다.
View만을 배치하기에는 계층이 존재하지 않는 불안정한 구조이기 때문에 View를 상속받아 View들을 담는 ViewGroup을 통해 UI를 그린다.
LinearLayout은 가로 또는 세로의 단일 방향으로 모든 하위 요소를 정렬하는 ViewGroup, Layout이다
LinearLayout은 레이아웃 중첩이 매우 많아질 수 있고, 중첩이 많아질 수록 퍼포먼스적인 문제가 발생할 수 있다
LinearLayout의 한계를 극복하기 위해 만들어진 Layout
뷰의 크기와 위치를 제약을 통해 구성한다.
ConstraintLayout은 match_parent보다 0dp를 사용하는 것을 권장한다.
android:layout_constraint<뷰가 제한을 걸어둘 위치>_to<제한을 걸릴 뷰의 위치>Of="ViewId"
액자형으로 겹치게 배치할 수 있는 Layout
추가된 순서대로 쌓이고 마지막에 추가된 뷰가 가장 위에 올라가게 된다
2차원 격자무늬로 배치할 수 있는 Layout
레이아웃 내의 자식 뷰 위젯들이 서로 간의 상대적 위치 관계에 따라 최종적으로 표시될 영역을 결정하도록 만드는 Layout
ConstraintLayout은 RelativeLayout과 LinearLayout의 장점을 합쳐서 만들어졌다
Activity가 생성되어 소멸하기까지의 전 과정
안드로이드는 앱을 개발하기 위한 프레임워크를 제공한다. 이 프레임워크에 코드를 삽입하면 코드를 상황에 맞게 실행시켜준다.
프레임워크가 코드를 인식해 실행시켜주는 것이 생명주기이고, 안드로이드 프레임워크는 해당 컴포넌트에 따라 콜백 함수가 존재하고 그 함수를 실행한다.
여기서 생명주기 함수(생명주기 콜백)은 Activity가 생성되고 소멸될 때까지 사용자가 특정 로직을 수행할 수 있도록 설계된 장치이다.

생명주기 출처 : https://velog.io/@its-mingyu/%EC%95%88%EB%93%9C%EB%A1%9C%EC%9D%B4%EB%93%9C-Activity-Lifecycle
xml에 있는 Layout을 코틀린(자바) 코드에 맞게 객체를 생성해주고 코틀린 파일에서 사용할 수 있게 해주는 과정
Inflate 과정이 없으면 코틀린 파일에서 Layout, View 객체에 접근할 수 없다.
Activity 내부에는 자체적으로 Layout을 inflate해주는 LayoutInflater라는 클래스가 존재한다.
이 함수는 인수로 레이아웃을 넘겨주면 내부적으로 LayoutInflater 클래스를 활용해 xml문서를 inflate하여 화면에 보여준다.
안드로이드는 기본적으로 findViewById()라는 함수를 사용해 View 객체에 접근하였다
최근에 안드로이드 개발에서는 findViewById()는 거의 금기시 되고 있다
findViewById()가 금기시 되고 있나?findViewById 함수 자체의 코스트가 높다.ViewGroup이 트리구조(조금 복잡한 형태)로 되어 있기에 하단 뷰까지 탐색(DFS)해 나가기에 VIew를 가져오는 것 자체에 탐색 비용이 생각보다 높다.TextView가 알고보니 EditText였다면?TextView 3개를 정의했는데 일반 폰에서는 2개만 정의했다면?buildFeatures {
viewBinding = true
}
추가하기
class MainActivity : AppCompatActivity() {
lateinit var binding: ActivityMainBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)
}
}
binding.{id}.{수행할 코드}