[내배캠 Android 4기] TIL 0528

오리너구리·2024년 5월 28일
0

TIL

목록 보기
18/48
post-thumbnail
  • 오늘 계획 (Task)
    - [x] 코드카타 20번
    - [ ] 컨스트레인 레이아웃 정리
    - [x] 확장함수,String에서 사용하는 확장함수 공부
    - [x] 배열,리스트 공부하기
    - [x] 프로젝트 작업
    - [x] TIL 작성 세션

    1. 알고리즘 코드카타 20번

    20번 링크
    https://velog.io/@orinugoori_art/%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-CODEKATA-20-%EC%A0%95%EC%88%98-%EB%82%B4%EB%A6%BC%EC%B0%A8%EC%88%9C%EC%9C%BC%EB%A1%9C-%EB%B0%B0%EC%B9%98%ED%95%98%EA%B8%B0 점점 코드카타가 어려워진다!!!
    그래도 코드 타닥타닥 치는거 재밌어!

    2. 확장 함수 공부

    오늘 확장함수를 공부한 이유

    최근 코드 카타를 풀면서 어떤 함수를 써야하는지 몰라 검색해보거나, 다 풀고나서 다른 분들의 코드를 확인하면 확장 함수를 활용하는 경우가 많았다.
    하지만 나는 확장함수에 대한 개념이 없어서 사실 처음에는 그것들이 확장 함수인지도 모르고 오 그냥 이런게 있군.. 하면서 풀고 나중에 찾아봐야지 하면서

이렇게 노션에 쌓아뒀음
근데 알고보니 저중에 반 이상이 확장함수였던거 실화냐고요

오늘도 코트카타를 하는데 도저히 해결이안돼서 chat gpt 선생님 도움을 받았다.
선생님이 map 함수, joinToString 함수 를 사용하라고 하시길래 대충 흐름은 알겠어서 풀긴 풀었다.

근데 joinToString이 이름도 길고 수상하게 생겼길래

정체를 물어봤더니 확장 함수라는거 그래서 이 참에 오늘 그냥 확장 함수를 공부해야겠다 싶어서 공부를 시작했다.

GPT 피셜 확장함수 공부하는 방법

  1. 기본 개념 이해하기
  2. 공식 문서 읽기
  3. 예제 코드 작성 및 실습
  4. 코틀린 표준 라이브러리 검색
  5. 프로젝트에 사용
  6. 커뮤니티와 함께 학습
  7. 심화 학습

결론
확장 함수를 학습하고 활용하는 것은 Kotlin을 마스터하는 데 매우 유용합니다. 공식 문서와 다양한 예제를 통해 기본 개념을 익히고, 실제 프로젝트에 적용하여 확장 함수의 강력한 기능을 경험해보세요. 이를 통해 더 읽기 쉽고 유지 보수하기 쉬운 코드를 작성할 수 있을 것입니다.

라고 한다. 일단 그래서 할 수 있는 방법들을 동원해서 공부했음

확장함수 공부 의식의 흐름 (내가 나중에 보려고 적음)

  1. 코드카타 하다가 joinToString,map 등 확장함수를 사용해서 풀어야하는 문제를 만나서 확장함수를 알 필요성을 느낌
  2. GPT 한테 확장함수는 어떻게 공부하는게 좋냐고 물어봄
  3. 공식 문서를 읽으라길래 공식문서 읽음 -> 확장함수 정의 방법을 배움
  4. 갑자기 String 확장 함수가 따로 있는지 궁금해져서 물어봄
  5. 있다면서 String 확장 함수의 종류를 마구 소개해줌
  6. String 에도 확장함수 종류가 엄청 많길래 그럼 코틀린에서 제공하는 확장 함수의 목록을 어디서 보냐고 물어봄
  7. Kotlin 표준 라이브러리를 보라함
  8. 봤는데 문자열 관련 확장함수만 따로 확인하는 방법이 없음
  9. 그냥 GPT 한테 문자열 관련 확장 함수 니가 알려달라고 해서 공부함 (따로 게시물로 정리할 예정)

확장함수란?

확장 함수 개념 정리
https://velog.io/@orinugoori_art/Kotlin-%ED%99%95%EC%9E%A5-%ED%95%A8%EC%88%98Extension-Function

TIL 에 정리해놓으면 나중에 찾아 읽기 힘들 수도 있기에 그냥 글을 따로 써서 정리함!

3.Array, Collection 공부

공부한 게기

사전캠프 때에도 Array랑 Collection 에 대해서 공부를 해서 개념은 알고 있다고 생각했는데
막상 코드카타 문제를 풀면서 내가 Array 나 Collection을 직접 생성하려고 하니까 문법이 자꾸 헷갈려서
다시 공부하기로 함!

공부 방법

Array 랑 Collection을 선언하고 활용하는 문제를 GPT 한테 내달라고함
아래는 GPT 가 내준 문제와 내가 작성한 코드!

문제 1: Array 선언 및 활용

  1. 크기가 5인 Int 타입의 배열을 선언하고, 각 요소에 1부터 5까지의 값을 할당하세요.

      Array를 선언하는 3가지 방법이 있다.
      
      1. arrayOf 함수 사용
    		val intArray = arrayOf(1,2,3,4,5)
      
      2. Array 클래스 생성자 사용
    	   val intArray2 = Array(5){i->i+1}
    	
    	3. 특정 타입의 배열 생성 함수 사용
         val intArray3 = IntArray(5){it+1}
  2. 배열의 요소를 모두 출력하세요.

        println("intArray : ${intArray.joinToString()} ")
        // intArray 를 그대로 출력하면 배열의 내용을 출력하지 않고 배열 객체의
        // 참조 정보를 출력하기 때문에 joinToString 함수를 사용해서 배열의 요소를
        // 문자열로 변환하도록 만들어줘야함
  3. 배열의 모든 요소를 2배로 만든 새로운 배열을 생성하고 출력하세요.

    val doubledArray= intArray.map { it * 2}.toTypedArray()
    // map 함수를 사용해서 배열의 각 요소를 변환(*2) 해줌 
        
        println("doubledArray : ${doubledArray.joinToString()}")

문제 2: List 선언 및 활용

  1. 1부터 10까지의 숫자를 포함하는 불변 리스트를 선언하세요.

    fun main() {
        
        val intList = listOf(1,2,3,4,5,6,7,8,9,10)
        
        println (intList)
    
    }
  2. 리스트의 요소 중 짝수만 필터링하여 새로운 리스트를 생성하고 출력하세요.

    fun main() {
        
        val intList = listOf(1,2,3,4,5,6,7,8,9,10)
        
        val evenList = intList.filter { it % 2 == 0}.map{it}
        println (evenList)
    
    }
  3. 리스트의 각 요소에 3을 곱한 값을 가지는 새로운 리스트를 생성하고 출력하세요.

    fun main() {
        
        val intList = listOf(1,2,3,4,5,6,7,8,9,10)
        
        val evenList = intList.filter { it % 2 == 0}.map{it}
        
        println (evenList)
        
        val timesthree = evenList.map{it*3}
        
        println (timesthree)
    
    }

문제 3: MutableList 선언 및 활용

  1. MutableList를 선언하고 1부터 5까지의 숫자를 추가하세요.

    fun main() {
        
        val intList = mutableListOf<Int>()
        
        intList.add(1)
        intList.add(2)
        intList.add(3)
        intList.add(4)
        intList.add(5)
        
        println(intList) 
    }
  2. 리스트에서 3번째 요소를 제거하고 리스트를 출력하세요.

    fun main() {
        
        val intList = mutableListOf<Int>()
        
        intList.add(1)
        intList.add(2)
        intList.add(3)
        intList.add(4)
        intList.add(5)
        
        println(intList)
        
        intList.removeAt(2)
        
        println(intList)
    }
  3. 리스트의 모든 요소를 제곱한 값을 가지는 새로운 리스트를 생성하고 출력하세요.

    fun main() {
        
        val intList = mutableListOf<Int>()
        
        intList.add(1)
        intList.add(2)
        intList.add(3)
        intList.add(4)
        intList.add(5)
        
        println(intList)
        
        intList.removeAt(2)
        
        println(intList)
        
        val doubledIntList = intList.map{it.toDouble().pow(2.0).toInt()}
        
        println(doubledIntList)
    }

문제 4: Set 선언 및 활용

  1. "apple", "banana", "cherry"를 포함하는 불변 Set을 선언하세요.

    fun main() {
        val fruitSet = setOf("apple","banana","cherry") 
        
        println (fruitSet)
    
    }
  2. "banana"가 집합에 포함되어 있는지 확인하고, 포함되어 있으면 "Found", 아니면 "Not Found"를 출력하세요.

    fun main() {
        val fruitSet = setOf("apple","banana","cherry") 
        
        println (fruitSet)
        
        if (fruitSet.contains("banana")){
            println("Found")
        } 
        else {
            println ("Not Found")
        }
    
    }
  3. 집합에 "orange"를 추가한 새로운 집합을 생성하고 출력하세요.

    fun main() {
        val fruitSet = setOf("apple","banana","cherry") 
        
        println (fruitSet)
        
        if (fruitSet.contains("banana")){
            println("Found")
        } 
        else {
            println ("Not Found")
        }
        
        val newFruitSet = fruitSet.plus("orange")
        
        println(newFruitSet)
    
    }

문제 5: Map 선언 및 활용

  1. "a" to 1, "b" to 2, "c" to 3을 포함하는 불변 Map을 선언하세요.

    fun main() {
        val map = mapOf("a" to "1", "b" to "2", "c" to "3")
        println(map)
    }
  2. 키가 "b"인 값을 출력하세요.

    fun main() {
        
        val exMap = mapOf("a" to "1", "b" to "2", "c" to "3")
        
        println(exMap)
        
        println(exMap.get("b"))
        
        
    }
  3. 각 키의 값을 2배로 만든 새로운 Map을 생성하고 출력하세요.

지금 적으면서 깨달았는데 3번 문제 고민중에 프로젝트 수정하러 가야해서 마지막을 안풀어버렸다.
내일 풀어야징

문제 풀면서 느낀점

역시 직접 이렇게 문제를 풀어야 금방 익힐 수 있는 것 같다
앞으로도 뭐 배울 때마다 GPT 한테 문제 내라고 해야겠음

4. 프로젝트 작업

오늘의 프로젝트 진행 상황

  1. 같이 메인 페이지를 맡은 팀원 분과 코드를 합쳤다.
    나는 전체적인 레이아웃 xml 파일을 만들고 팀원분이 중간에 들어갈 horizontalScrollView 의 레이아웃과 kt. 파일을 작성해주셔서 둘을 합쳤음
  2. 튜터님께 코드 리뷰를 부탁드림
    피드백 내용
    • LinearLayout 대신 ConstraintLayout을 사용하는 연습을 하면 좋다
    • Ux를 위해 img 대신 그 상위 레이아웃에 ClickListener를 적용하면 좋을 것 같다
    • 팀원들의 사진에 대한 변수명을 ivA, ivB 보다 iv팀원이름 으로 짓는게 나중에 코드를 보기에 편할 것 같다
  3. 피드백 내용에서 왜 ConstraintLayout을 사용권장하는지 궁금해서 검색
  4. 피드백 반영해서 코드 수정
  5. 수정한 파일 Git 에 Push

프로젝트 진행 중 알게 된 것

1. ConstraintLayout을 사용하는 이유
튜터님의 피드백으로 ConstraintLayout을 LinearLayout 보다 권장하는 이유를 찾아봤음
1. 더 유연한 레이아웃 배치
- 복잡한 레이아웃을 더 쉽게 만들 수 있게 해준다.
2. 성능 최적화
- 단일 레이아웃 트리로 배치함으로 Linear를 중첩하는 것보다 성능이 좋다.
3. 레이아웃 플렉서빌리티
- 뷰를 상대적으로 배치할 수 있기 때문에 다양한 화면 크기와 방향에 맞게 쉽게 조정 가능하다.
4. 더 나은 UI 디자인 도구 지원
- Constraint에서 더 강력한 도구와 시각적 편집 기능을 제공한다.
결론
LinearLayout은 뷰를 단순 수평 수직 배치 할 때는 직관적이고 간단하다는 장점이 있지만 퍼포먼스 최적화와 추가적인 유연성을 고려했을 때 Constraint를 사용하는 것이 유리할 수 있다.

2. Git 을 빨리 익혀야 겠다
팀 단위 프로젝트이다보니 GIt을 활용해야 코드를 더 편하게 합치고 할 것 같음
아직은 자꾸 git올리려는데 방법도 잘 모르고, 일단은 어떻게 검색해서 하긴하는데 이해를 못하고 있음

5. TIL 작성 특강

공부한 이유

그냥 내배캠에서 특강을 마련해줘서 들으러감 어차피 매일 써야하니깐

배운 것

TIL을 잘쓰면 취업에 유리하게 작용할 수도 있겠다.
하지만 나는 취업 목적이 아니긴한데 그래도 인생 어떻게 될지 모르는거니까 열심히 써야겠다.

TMI

나는 그냥 TIL쓰는게 재밌긴 함.
초딩 때 방학 숙제로 일기쓰기 맨날 안해가서 개학날마다 손바닥맞고 손들고 서있고 했었는데
이제 일기가 재밌어진걸까?

지금도 퇴실시간 (9시) 넘었는데 1시간 넘게 TIL 쓰고있음

6. 오늘 공부하면서 안 내용

  1. 나는 확장함수가 그냥 코틀린에서 기본으로 제공하는 것만 쓰는 건 줄 알았는데
    그냥 함수 만드는것처럼 확장 함수도 직접 만들어서도 사용할 수 있다는 걸 알았다.

  2. 확장함수 종류가 엄청나게 많구나를 깨달음..나는 오늘 공부하면 코틀린에 있는 확장 함수를 정복한다거나
    적어도 한번씩 다 훑어본다거나 아니면 반절이라도 정복한다거나 할 수 있을 줄 알았는데 어림도 없음

  3. 클래스들이 각각 확장 함수를 가지고 있다는걸 알았다. String,Collection,Sequence,Map,Array.. 등
    클래스들이 확장함수를 가지고 있었다.

  4. Iterable 인터페이스, 인터페이스의 존재를 알았다. map 함수에 대해서 찾아보다가 인터페이스라는게 있다는걸 발견함

  5. 컬렉션의 Map 과 map 함수가 별개의 존재라는걸 인지했다

  6. Stirng, Int 등 단순 데이터 타입이라고만 생각한 애들이 사실은 클래스였음 충격 전혀 몰랐음

7. 여담

  1. 이제 12시간 공부하다보니까 TIL 적는것도 진짜 오래걸린다.
    아직은 이틀밖에 안돼서 그런가 신기하게 12시간 앉아있는게 그렇게 힘들지 않음
    시간이 금방 가는 느낌
    나 사실 공부 체질이였나? 그럴리가 없는데
    아니면 게임 12시간씩 하던 짬에서 나오는 바이브인가?

  2. 근데 아침에 일어나는건 좀 힘들긴 함.
    더 정확히는 아침에 일어나는 것보다 일찍 일어나야해서 밤에 일찍 자야되는게 힘듬
    늦개 자고싶다.

  3. 공부하는데 chatGPT 없었으면 큰일날뻔함 서포터 출신이라 그런가 도구랑 잘맞음 ?

profile
오리너구리입니다

0개의 댓글