[내배캠 Android 4기] TIL 0625

오리너구리·2024년 6월 25일
0

TIL

목록 보기
39/48
post-thumbnail

오늘 할일

  • 코드카타 47번
  • 개인과제
  • .sorted 공부
  • 데이터 클래스
  • intent flag 공부
  • 람다식 공부

코드카타

⏲️09 : 10 ~09 : 30

오늘은 코드가 아주 간단해서 엄청 빨리 끝났다. 오랜만에..

문자열을 특정 인덱스 기준으로 정렬하는 문제였는데

sortedWith를 쓰니 아주 간단하게 해결됐음

https://velog.io/@orinugoori_art/%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-CODEKATA-47-%EB%AC%B8%EC%9E%90%EC%97%B4-%EB%82%B4-%EB%A7%88%EC%9D%8C%EB%8C%80%EB%A1%9C-%EC%A0%95%EB%A0%AC%ED%95%98%EA%B8%B0


sorted() 공부

⏲️ 09 : 30 ~ 11 : 00

공부 계기

오늘 코드카타에서 sortedWith를 쓰는 문제를 만났는데

sorted가 대충 정렬에 쓰이는건 아는데

sortedBy sortedWith sorted등을 내가 그냥 되는대로 그때그때 검색해서 맨날 써야해서

시간 남는김에 정리하고 가려고함

공부 내용 간단 정리

  1. sort , sorted 차이

    sort는 원본리스트 자체를 정렬 (mutableList에 사용)

    sorted 는 원본리스트를 바탕으로 정렬한 새로운 리스트를 반환 (일반 리스트에도 사용해서 새로운 리스트 반환)

  2. 내림차순을 사용하고 싶을때는 + Descending

  3. sorted() , sortedBy(), sortedWith() 차이

    • sorted() : 그냥 알아서 오름차순으로 정렬한 리스트를 반환하면 된다! 하면 얘를 쓴다
    • sortedBy() : 내가 정렬에 한가지 기준을 정해주겠다 하면 얘를 쓴다.
    • sortedWith() : 정렬기준이 여러개라면 얘를 쓴다.

과제 검사 후 새로운 퀘스트 받아오기

⏲️11 : 00 ~ 11 : 10

어제 한 과제 수정한거 다시 검사맡으러 갔다와서 새로운 할일을 얻어왔당~~

먼가 메이플 마을 퀘스트 깨는 느낌이라 잼있땅

스톤골렘 조각 50개모아가니까

아이스골렘 조각 50개 모아오라고해서

또 모아가면 파이어골렘 조각 50개 모아오라고 하는듯한

째미땅메이플처럼 배우는 코딩~!!!

이번 퀘스트는

인텐트에서 새로운 액티비티를 띄울 때 옵션을 설정하는 방법에 대해서 공부하기!

힌트 : intentFlag를 찾아보기


IntentFlag 공부

⏲️

11 : 20 ~ 13 : 10

14 : 10 ~ 16 : 30

안드로이드에서 사용자의 경험을 위해 사용자 관점에서 본 앱의 사용 흐름을 관리하는 방법으로 Task라는 것을 사용하는데

Task를 통해 사용자가 어떤 흐름으로 앱을 사용할지 관리할 수 있음

이 Task를 제어하기위해 개발단계에서 Manifest파일에 LaunchMode속성을 지정하거나, Intent의 IntentFlag라는 속성을 추가하는 방법을 사용함

주로 어떤 상황에서도 같은 방식으로 액티비티가 실행되야 하면 Manifest 파일에서 LaunchMode를 통해 관리하고, 상황마다 액티비티 실행방식이 바뀐다면 Intent Flag를 사용하면 됨

Launch Mode에는 4가지 모드가 있는데,

Standard, SingleTop, SingleTask, SingleInstance 가 있다

Standard는 따로 모드를 설정하지 않을때의 기본값으로 , 그냥 액티비티실행하는 족족 Task에 쌓이게 되는 모드!

SingleTop 은 해당 액티비티가 TopActivity인데 한번 더 실행이 될 경우 새로 인스턴스를 만들지 않고 그대로 재사용 하는 모드

SingleTask는 어떤 상황에서도 액티비티가 인스턴스를 만들지 않고 단일 인스턴스를 유지하는 모드로 밑에 깔려있던 액티비티가 다시 실행되면 그 위에 쌓여있던 액티비티를 없애는 방식으로 실행하는 모드

SingleInstance 는 애초에 어떤 액티비티를 실행했다가 다른 액티비티를 실행하면 실행한 액티비티만 Task에 있도록 하는 모드

IntentFlag는 종류가 아주 많아서 다 설명할순 없지만

종류가 많은만큼 Mode 보다 좀 더 세밀한 제어가 가능하고, 만약 LaunchMode와 IntentFlag가 동시에설정되어있으면 IntentFlag가 우선시되고, 필요에 따라 여러개의 Flag를 조합해서 사용할 수 도있다.

열심히 정리해놈~!


Data Class 공부

⏲️ 16 : 40 ~ 18 : 00

공부 계기

과제할 때 User클래스를 데이터 클래스를 안써봐서 데이터만 있는 클래스인데 그냥 일반 클래스로 생성했더니 튜터님이 피드백해주시면서 Data 클래스로 변경하고 이번에 공부를 해보라고 추천해주심

공부내용 간단 정리

Data Class 란:

데이터를 저장하기 위한 클래스로 유용한 함수들을 따로 정의하지 않아도 기본적으로 제공해서 편리하다.

Data Class 특징 :

  • open, abstract, sealed, inner등 키워드 사용 불가
  • 상속 받을 수 없음
  • 기본 생성자의 파라미터가 val 이나 var 이여야함
  • 유용한 함수 copy(), toString(), hashCode(), equals(), get(),set() 을 기본적으로 제공한다.

Data Calss가 제공하는 함수의 사용

  1. toString() :

    인스턴스의 프로퍼티를 자동으로 문자열로 만들어줌

  2. copy() :

    인스턴스를 복제하거나, 변경하고 싶은 특정 값만 변경해서 새로운 인스턴스를 만들 수 있음

  3. hashCode() :

    주어진 객체를 해싱 알고리즘에 의해 계산한 int값 리턴 동일한 객체는 동일한 해시코드 리턴

  4. equals():

    두 객체의 내용이 일치하는지 비교 후 Boolean 값 리턴

  5. get():

    인스턴스이름.프로퍼티이름 으로 해당 인스턴스의 프로퍼티 값을 불러옴

  6. set() :

    인스턴스이름.프로퍼티이름=값 으로 해당 인스턴스의 프로퍼티 값을 설정함

Destructing (구조분해)

객체의 각 속성을 개별적으로 추출하여 각각의 변수에 할당하는 것

코틀린에서는 일반 클래스의 인스턴스도 구조분해를 할 수 있지만 클래스에 따로 componentN()메서드를 정의해주어야하는데, 데이터 클래스는componentN() 이라는 메서드를 기본적으로 제공하기 때문에 구조분해하기에 용이함

일반 클래스의 구조분해 예시

class Person(val name: String, val age: Int) {
    operator fun component1(): String = name // 이 부분을 따로 정의해줘야함
    operator fun component2(): Int = age
}

fun main() {
    val person = Person("John", 28)
    val (name, age) = person // 구조 분해 사용
    println("Name: $name, Age: $age")
}

데이터 클래스 구조 분해 예시

data class Person(val name : String , val age : Int)

fun main() {
		val person = Person("A" , 30)
		val (name, age) = person // 구조분해
		println("Name : $name , Age : $age") // Name : A , Age : 30 
}

componentN() 으로 값 분해하기

데이터 클래스의 인스턴스는 componentN() 메서드를 통해 각 프로퍼티 값에 쉽게 접근 할 수 있어서 해당 메서드가 구조분해할당을 가능하게 해서 따로 메서드를 호출하지 않고도 구조분해를 통해 값을 분해할 수 있다.

data class Person(val name : String , val age : Int , val gender : String)

fun main() {
		val person = Person("A" , 30 , "Male")
		println("Component1: " + person1.component1()) // Component1: A 출력
		println("Component2: " + person2.component2()) // Component2: 30 출력
		println("Component3: " + person3.component3()) // Component3: Male 출력

람다식 공부

⏲️ 19 : 00 ~20 : 00

공부 계기

코드카타 하는데 다른사람 풀이 보면 다 람다식으로 풀어놔서 나 람다식 잘 모르는데 뭔가

눈치껏 알아들어야되는게 빡쳐서

공부 한 내용 간단 정리

  • 함수형 프로그래밍의 정의

    함수형 프로그래밍이란 함수를 변수처럼 다룰 수 있는 프로그래밍 패러다임

  • 함수형 프로그래밍에 사용되는 주요 개념

    • 순수함수
    • 일급 객체
    • 일급 함수
    • 불변성
    • 고차함수
  • 순수 함수 (pure function) : 함수의 입력이 동일할 때 출력도 항상 동일한 함수

  • 일급 객체(First Class Object) : 프로그래밍 언어에서 변수처럼 다룰 수 있는 모든 객체

  • 일급 함수(FIrst Class Function) : 일급 객체의 조건을 만족하는 함수

  • 고차 함수(Higher-Order-Functions) : 함수를 매개변수로 사용하거나 함수를 반환하는 함수 즉 함수를 반환값으로 갖고있는 함수

  • 람다 (lambda Expression) : 람다식, 람다, 익명함수를 의미함. 보통 한번 사용하고 재사용되지 않는 함수를 만들 때 익명함수로 만든다.

일단 오늘은 여기까지 공부했다…으어어어어어어근데아직 개념이 덜 서서 계속해서 공부해야하는데,

그래도 엣날에 1트로 공부했을 때보다는 조금 더 이해되는 것들이 있기도해서 다행인거같기도하고 아직도 이렇게 어려운게 ㅈ댄거같기두하고~

profile
오리너구리입니다

0개의 댓글