wanna be dev 🧑‍💻

Cool 하고 Sick한 개발자가 되고 싶은 uzun입니다

A.K.A. Kick-snare, hyjhyj0901, h_uz99 solvedac-logo

Android/Challenge

패스트캠퍼스 챌린지 02일차

Kick_snare 2022. 1. 25. 23:16
728x90

02일차

생성일: 2022년 1월 25일 오후 10:03

30개 프로젝트로 배우는 Android 앱 개발 with Kotlin 초격차 패키지 Online

강의 목표


  • 프로젝트를 따라해보며 앱개발에 필요한 기술을 학습할 수 있습니다.
  • 프로젝트를 따라해보며 앱개발에 필요한 기술을 학습할 수 있습니다.
  • 앱 개발시 원하는 기능을 구현하기 위해 어떤 기술이 필요한 지 알 수 있습니다.
  • 디자인 아키텍처 패턴, 비동기 처리 등 효율적인 앱 개발 방법을 익힐 수 있습니다.

Ch01. Kotlin 목차


  • Kotlin에 대해 알아보자
  • Kotlin 문법 훑어보기
  • Kotlin으로 개발하기 vs Java로 개발하기

Kotlin으로 개발하기 vs Java로 개발하기

코틀린은 Null safe 하다

// JAVA

Interger a = 100 
// null safe 하지 않음

a = null
a.sum()
  • 자바의 경우 try-catch 또는 예외처리로 null check가 필요하다. 그렇지 않으면 NullPoint Exception 이 날 수도 있음
// KOTLIN

val b: Int? = 100
val c: Int  = 100
// null을 의미에 둔다

b?.sum() // null 일 경우 실행하지 않음
c.sum()  // 애초에 null safe한 자료형
  • 코틀린의 경우 null 의 가능성을 자료형 선언 단계에서 null check 가능하다
  • ? 와일드 카드로 null이 아닐때에면 실행하는 방법도 있다

범위 함수 Scope Funtion (apply, with, let, also, run)

  • 코틀린에서 기본제공되는 함수
  • 람다식으로 호출할때 범위 안에서 수신객체 등이 자유롭게 접근 할 수 있도록 해줌
  • 각각 비슷하지만 다른 특징을 가짐 (용도가 다름)
  • 코드를 좀 더 읽기 쉽게 해줌

Apply 함수

// JAVA
Person person = new Person();
person.firstName = "Fast"
person.lastName = "Campus"
// KOTLIN
val person = Person().apply {
    firstName = "Fast"
    lastName = "Campus"
}
  • 내부에서 this 를 통해 접근 (생략)
  • 객체의 맴버에 접근
  • 객체를 반환
  • 주로 객체를 초기화 할 때 사용

Also 함수

// JAVA
int value = Random().nextInt(100);
System.out.print(value);
// KOTLIN

Random.nextInt(100).also { value ->
    print("getRandomInt() generated value $value")
} // 객체가 입력값으로 전달됨

Random.nextInt(100).also { 
    print("getRandomInt() generated value $it")
} // 매개변수는 생략하고 it으로 접근가능
  • 객체가 람다 매개변수로 전달
  • it 으로 입력값에 접근 가능
  • 객체를 반환
  • 객체의 유효성을 확인하거나 print하여 디버깅 할 때 사용

LET 함수

// JAVA

Interger number = null;
String sumNumberStr = null;

if(number != null) {
    sumNumberStr = "" + sum(10, number);
}
// KOTLIN

val number: Int?

val sumNumberStr = number?.let {
    "${sum(10, it)}"
}

val sumNumberStr = number?.let {"${sum(10, it)}"}.orEmpty()
// number가 null 일 때 it에 빈값이 들어간다.
  • 주로 null 이 아닌 객체에서 람다를 실행할 때 사용
  • 식 안에서 실행한 결과 값이 반환된다
  • null 이 아닐때에만 실행된다

With 함수

Person person = new Person();

person.work();
person.sleep();
System.out.println(person.age);
Person person = new Person();

with(person) {
    work()
    sleep()
    println(age)
}
  • 객체로 이러한 함수나 변수들로 할 수 있는 명령
  • this 로 접근

Run 함수

service.port = 8080
Result result = service.query()
val result = service.run {
    port = 8080
    query()
}
  • 어떤 값을 계산할 필요하거나 객체 구성값이 한번에 있을 때 유용
  • with 함수와 비슷하다

Data Class 데이터 클래스

data class JavaObject(val s: String)
  • 데이터를 저장하는 목적으로 만든 클래스
  • copy, toString, hashcode, getter, setter 등이 자동으로 생성되어 편리하다
  • var 로 선언 시 getter setter 이용가능

Lamda Expression 람다식

button.setOnClickListener { v ->
    ...
}

button.setOnClickListener {
    ... $it ...
}
  • 코틀린이 함수형 언어에 가까워서 있는 특징
  • 함수에 함수를 전달하고 전달된 함수에서 실행

Lazy init (lateinit) 게으른 초기화

var nullableNumber: Int? = null
lateinit var lateinitNumber: Int

lateinitNumber = 10 // 추후 초기화

nullableNumber?.add() // 매번 nullcheck가 필요
lateinitNumber.add() // 편하다
val lazyNumber :Int by lazy { 100 }
// 사용하기 전까지는 lazyNumber 라는 변수에 100이 할당되지 않는다

lazyNumber.add() // 사용할 때 100이 할당
  • 코틀린에서는 변수를 생성할 때 null safe한 타입으로 선언한 경우 초기화가 필수
  • val 로 선언했을 때 초기값이 없으면 초기화 불가
  • 그래서 lateinit 을 사용
  • 굳이 lazy 한 동작이 필요하지 않다면 초기화 먼저하자

---

본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.

수강 인증샷

링크


https://bit.ly/37BpXiC

728x90