본문 바로가기

TIL

[TIL] 20230802 - 2일차

[오늘 배운 내용]

-1- UI

안드로이드 스튜디오에서 제공하는 UI 버튼 기능들 공부

디자인 탭에 들어가면 흰색레이아웃 옆에 초록색 청사진이 계속 떠있어서 불편했는데

Design and Blueprint 가 체크되어 있어 그렇더라 Design 체크해주니까 깔끔하게 흰색 레이아웃만 남았다.

Blueprint는레이아웃들의 윤곽만 보여준다

개발할 때 Design에서 겹침등의 현상을 잡아낼 때 요긴하게 쓰인다고 하는데

아직 나는 개발단계에서는 사용할 필요 없을 것 같아서 꺼두기로 했다.

 

-2- .xml 에서 위젯에 id 지정 "@+id/원하는id"

findViewById<위젯타입>(R.id.지정한id) 로 id로 지정한  UI와 연결이 가능

 

findViewById 와 View Binding 의 차이에 대해서 간단하게 공부

findViewById 를 사용하지 않고, viewBiding 을 주로 사용하는 이유는

findViewById 은 Null 오류가 발생할 수 있다는 Null 안정성 문제와, viewBinding에 비해 Type안정성이 떨어진다는 이유다.

속도도 viewBinding이 상대적으로 빠르다고 한다.

 

view Binding 적용법

viewBinding 은 .gadle(module) 에 android{} 안에 해당 코드를 입력해준 뒤

코드입력창 상단에 sync now 를 눌러주면 적용된다.

안드로이드 스튜디오 4.0 버전 이상에서만 해당 코드로 설정 가능하다고 한다.

buildFeatures {
        viewBinding true
}

 

 

-3- buttonName.setOnClickListener{  } 로 버튼 클릭 시 이벤트 추가 가능.

해당 부분은 뷰 바인딩 공부하고, UI 공부하는데 시간을 많이 보내서 자세히 검색 해보지 못 했다.

시간이 나게 되면 좀 더 공부해서 상세하게 적을 수 있도록 해야겠다.

 

 

 

 


 

[오늘 복습한 내용]

- Colletion

1. 콜렉션은 동일한 유형의 여러 객체를 담을 수 있는 범위를 말한다 변수 그룹이며 포함된 객체가 0 개일 수 있다.

2. 콜렉션의 개체를 요소 또는 항목이라고 한다고 한다. 

3. LIst, Set, Map 을 사용해서 컬렉션을 생성할 수 있다.

  • List : List에 추가된 순서대로 Index값을 가지며 동일한 값을 추가할 수 있다.
    Index는 0부터 시작한다.
    list.get(i) 또는 list[i] 로 인덱스에 해당하는 값을 불러올 수 있으나 존재하지 않는 값을 불러들이면 컴파일 오류가 난다.
    .getOrNull(i) 을 사용해서 Null값이 나올 수 있는 경우, null을 출력할 수 있도록 해주자.

  • MutableList는 리스트안의 요소들이 변경 가능하다.
val numbers = mutableListOf(1, 2, 3, 4)
numbers.add(5)
numbers.removeAt(1)
numbers[0] = 0 // 인덱스 값에 해당하는 값을 변경
numbers.shuffle()
println(numbers)
  • 리스트 요소는 중복될 수 있고 단일 개체의 항목이 여러 개 포함될 수 있는데
    이 과정에서 두 목록의 크기가 같고 구조적으로 동일한 요소가 동일한 위치에 있으면 동일한 것으로 간주한다.
val bob = Person("Bob", 31)
val people = listOf(Person("Adam", 20), bob, bob)
val people2 = listOf(Person("Adam", 20), Person("Bob", 31), bob)
println(people == people2) // true 출력
bob.age = 32
println(people == people2) // false 출력

 

 

 

 

  • Set : List와 다르게 동일한 값을 추가할 수 없으며, List의Index 처럼 순서도 상관하지 않는다.
val numbers = setOf(1, 2, 3, 4)  // LinkedHashSet is the default implementation
val numbersBackwards = setOf(4, 3, 2, 1)

println(numbers.first() == numbersBackwards.first()) //false 출력
println(numbers.first() == numbersBackwards.last()) // true 출력

 

 

 

  • Map : 맵(dictionary) 은 key와 value의 쌍으로 형성된다. key에 해당하는 값은 여러개 중복되는 key 값으로 설정할 수 없으며, 하나의 key는 하나의 value에 할당된다. value는 동일한 값을 넣을 수 있다
  •  (value in map.values) 로 true, false 확인 가능
val numbersMap = mapOf("key1" to 1, "key2" to 2, "key3" to 3, "key4" to 1)

println("All keys: ${numbersMap.keys}")
println("All values: ${numbersMap.values}")
if ("key2" in numbersMap) println("Value by key \"key2\": ${numbersMap["key2"]}")    
if (1 in numbersMap.values) println("The value 1 is in the map")
if (numbersMap.containsValue(1)) println("The value 1 is in the map")

[오류,에러 등등]

1. 예전에 안드로이드 스튜디오에서 지원해주던 material3 을 젯팩으로 적용해보려고 했는데 계속 실패했다.

에러코드도 한 두 줄이 아니라서 시도 방법 자체가 잘 못된 것 같다. 다른 방법으로 추후에 재시도 예정. 

 

2. constraintlayout 에서 a위젯 id를 바꿨는데 a위젯에 의존하고 있던 다른 위젯들도 위치가 튀어 버렸다.

  • id를 수정하게 될 때에는 ctrl + shift + R 로 해당 id를 전부 다 바꾸는 걸로 하니까 수월해졌다.

3.

 


[느낀 점]

1. 개인과제 viewbinding을 사용하지 않고 findViewById 로 작성해야 하는 것을 오늘 알았다.

lv3 까지는 엄두를 안내서 아래까지 내려보지 않았는데,  앞으로는 진행하는 내용을 다 읽도록 해야겠다.

 

2. 작성시간 21:00 기준 오늘 집중한 시간 7:04:21 인데, 정작 배운 내용은 없는 것 같다.

집중하기 전에 어떤 것을 배워야할지, 필요한 부분이 어떤건지 구상을 잘 해놓고 집중하도록 해야겠다.

 

3. lambda를 갑자기 배우다가, collection 을 배우다가, UI Layout을 공부하다가 당장 궁금한 내용만 해결되면 끝까지 알아보려고 하지 않고 도중에 다른 의문을 풀러가서 완벽하게 정리되는 내용이 없는 것 같다.

특정 한 종류를 시작했으면 해당 내용과 관련된 내용 또는 해당 부분을 완벽하게 끝마치고 다른 내용으로 넘어갈 수 있도록해야겠다.

'TIL' 카테고리의 다른 글

[TIL] 20230809  (0) 2023.08.09
[TIL] 20230808 5일차  (0) 2023.08.08
[TIL] 20230804 - 4일차  (0) 2023.08.05
[TIL]20230803 - 3일차  (0) 2023.08.03
[TIL] 20230801 - 블로그 시작 등...  (0) 2023.08.01