세미나/세미나 후기

오준석 안드로이드 생존코딩

Yulia Na 2019. 8. 10. 16:52

[Intro] 앱 만들기 전 준비 사항 및 자세

 

1.책 추천: Effective Java, Kotlin in  Action 추천

2.Android Studio의 Scratch를 활용하여 연습 가능하다. 

[Kotlin 중요문법, Java와 비교되는주요 특징]

 

1. 함수를 선언하는 fun의 :Unit은 return 값이 없다는 말이며(java의 void와 비슷) 생략 가능하다. (Unit과 Nothing의 차이 등 type은 추가 공부해야 함)

fun greet(str: String) : Unit { println(str)}

 

2. 함수의 괄호를 생략할 수 있다.

fun greet(str:String) = println(str)

 

3.코틀린의 기본자료형은 모두 객체이다. 

String, Int, Double, Long, Float…

 

4. 3개의 쌍따옴표 “””  “”” 를 쓰면 \n 필요없이 쓴 그대로 출력된다.

val top = """

   *

   **

   ***

   ****

""" 

5. 코틀린에서 오브젝트 비교시에는 ===(identity equality), !==를 사용한다. ==(content equality)는 equals()와 똑같이 동작한다.

 

6. java의 Collection인 List, Set, Map은 arrayOf(...), mapOf(key to value, ….), listOf(...), mutableListOf(...-요소변경가능 kotlin.collections.MutableCollection -> 읽기 전용인 kotlin.collections.Collections와 구분), mutableSetOf(..) 등의 ...Of형태를 사용한다.

val numbers = arrayOf(1, 2, 3, 4, 5)

 

7. filter, forEach 등 java8에서 할 수 있는 기능을 사용 가능하다.

numbers.filter { …..}.forEach { …. }

numbers.forEach { println(it) }

 

8. switch/case문 대신 when문을 사용한다. when문은 break를 쓰지 않아도 되기때문에 break를 쓰지 않아 생기는 오류를 막을 수 있다. 여러값을 한번에 처리할 때는 ,로 구분한다(2, 3). 또한 when은 object를 인자로 받을 수 있고, in을 사용하여 (in 0...9) 범위를 표현할 수 있기때문에 활용도가 높다.

 when (i) {
        1-> println(“1”)

        2,3-> println(“2 or 3”
    }

 

9. for문의 범위는 (i in 1...3) 등으로 in을 사용하여 표기한다. 일반 적으로 1~3까지의 수는 1...3으로 ...을 사용하여 표현할 수 있다. 점점 작아지는 수는 downTo를 사용하고 +2, -3 등 1이 아닌 규칙으로 변화하고 싶을 때는 step을 사용한다.

for (i in 10 downTo 0 step 2)

 

10. Constructor를 만들 때는 타입 추론이 가능하므로 타입 생략이 가능하다. new 또한 생략한다. (new, ; 자체가 없다)default 변수를 활용해 3가지를 한번에 생성할 수 있다.

class Sample(val name: String, val age: Int = 0, val birthday: String = "") { }



11. 기본 constructor에서는 코드가 포함될 수 없으며, 초기화 코드는 init block으로 시작해야한다. 최상위 constructor에서만 val, var 변수를 가질 수 있으며(전역변수 역할) 하위 constructor에서는 var, val를 정의하면 오류가 발생한다.

class ClassName constructor() {init { } }

 

12. data class …{ } 를 사용하여 getters, setters, copy hashcode, equals, toString를 한 줄로 선언 가능하다

 

13. 접근제한자의 default는 public이며, 같은 모듈 안에서만 접근 가능한 internal도 있다.

 

14. default Kotlin class는 상속이 금지이며 open을 class 앞에 붙여 주어야 상속이 가능하다.

  (무분별한 상속을 막기 위해서)

 

15. extends와 implement 대신 : 를 사용한다. 

 

16. class 앞에 Inner를 붙여 주어야 Inner Class로 사용 가능하다. default는 내부에 클래스를 선언하여도 분리된 클래스로 인식한다. (java는 내부에 쓰면 자동 inner class이며 static을 붙여야 분리된다.)

 

17. @override 어노테이션은 생략가능하지만 코틀린은 필수로 override를 fun 앞에 붙여주어야한다.

 

18.  null을 하용하고 싶으면?(nullable)를 붙여야한다. ?를 붙이지 않으면 null을 사용하면 빨간줄이 뜬다.

19. lateinit이 var로 선언한 변수의 늦은 초기화라면 lazy는 값을 변경할 수 없는 val를 사용할 수 있다.

 

20. !!(강제 호출)을 추가하면 null로 null point exception을 만들 수 있다. 이 방법을 많이 사용하지는 않는다.

 

21. ?.(Safe Call) - if (null != obj)을 이용하여  null이 아닌 경우에만 호출한다. 앞의 타입이 null이 아닌 경우에만 호출을 해서 값을 리턴하고 그렇지 않은 경우엔 null을 호출한다.

 

22. ?:(앨비스연산자) null이 아닌 기본값을 변환하고 싶을 때 사용한다.

 

23. SAM 변환은 (single abstract method)  java에서 작성한 인터페이스일 때만 동작한다. 그러므로 코틀린에서는 인터페이스 대신에 함수를 쓰는 것이 좋다. (람다)

 

24. 확장함수를 사용하면 상속을 하지 않고 .만 찍어 쉽게 사용 가능하다. 쉽게 기존클래스에 함수를 추가 할 수 있다. 

 

25. 형변환은 to자료형명()으로 한다  .toInt(), .toDouble(), .toFloat() 등으로 쉽게 변환 가능하다.

 

26. 캐스팅은 변수 변수 as 타입형태이다. 캐스팅이 실패하면 ClassCastException을 반환한다. as?(안전한 형변환)를 사용하여 대처 가능하다.

 

27. Is, !Is를 사용하면 런타임에 객체가 주어진 타입을 따르는 지 확인 가능하다  

if(str Is String) println(“good”)

 

28. 고차함수(High-Order Function)를 사용하여 파라미터를 함수로 받거나 함수를 리턴할 수 있다.

 

29. 코틀린은 static이 없고 패키지 내 함수를 선언하여 사용할 수 있다. companion objects를 사용하면 클래스를 인스턴스화 하지 않고, Java static Method와 동일한 문법으로 멤버함수를 호출하는 것이 가능하다.



[실습…..]