반응형

Java와의 차이점

  • 함수 선언 시 'fun' 키워드 사용  ex ) fun main( )
  • 파라미터 이름 뒤에 파라미터 타입을 쓴다.  ex ) args: Array<String>
  • 문장 끝에 세미콜론(;) 생략 가능
  • 클래스 상속 표현 시 콜론(:) 사용
  • 함수의 반환 값이 없는 경우 'void' 생략

코틀린의 안드로이드 확장 플러그인이 제공하는 기능

  • View Binding : XML에서 만든 UI 요소를 findViewById( ) 없이 접근
  • parcelable : 객체를 직렬화

 

TextView를 사용할 때 변경하거나 이벤트를 처리할 필요가 없는 고정적인 UI 요소는 ID 신경 쓸 필요 X

  cf ) 다른 UI를 기준으로 해당 UI를 배치하는 경우 ID를 의미 있는 이름으로 바꾸는 것이 좋다.

 

setContentView( ) : UI로 사용할 레이아웃 XML 파일 지정

 

안드로이드 UI가 XML 리소스로 분리되어 있는 이유 : 재사용

 

Activity 간 화면 전환을 위해 Intent 클래스 사용

 

startActivity(Intent(this@MainActivity, ~Activity::class.java)) : Intent로 ~Activity를 타겟으로 지정하고 startActivity로 시작

 

Activity 화면 상단에 나타나는 타이틀은 Activity의 Label 값으로 기본 설정, 매니페스트 파일에서 설정

 

findViewById( )는 자원 소모가 큰 함수 -> 많이 호출하면 성능면에서 안 좋은 패턴

 

Third Party Library : 제품을 제조하는 원래 회나 이외의 기업에서 개발한 라이브러리

 

  Java Kotlin
자료형 변환 ( 문자열 -> 'Double' ) Double.parse( ) toDouble( )
문자열 합치기 '+' 문자열 안에 '${ }'
변수 선언 타입 + 변수 'val', 'var' 키워드 사용

 

※ Parcelable : 클래스를 액티비티 간에 한 번에 전달되고 받아볼 수 있도록 해주는 것

 

System.currentTimeMillis( ) : 현재 시간을 밀리세컨드 단위로 정수 형태로 리턴 ( long형 )

SimpleDateFormat zmffotm : 시간 관련된 텍스트를 포맷화

 

객체 지향 언어에서는 객체의 상태에 따라 함수에 입력된 조건이 같아도 결과가 달라진다.

  -> 단점 : 결과 예측이 어렵다 = 문제 발생 시 대처하기 어렵다 -> 대체제 : 함수형 프로그래밍 - 불변성 중요

 

변수 선언

var : 변경 가능한 참조 변수

val : 변경 불가능한 참조를 저장하는 변수, 초기화 후 재 대입 불가

변수를 불변으로 선언할 경우 메모리, 멀티쓰레드 안전성, 함수형 코드 등의 이점 존재 -> 필요한 경우에만 var 권장

 

변수의 타입 추론

  - 정적 타입 언어 : 컴파일 시점에 타입을 결정  cf ) 동적 타입 언어 : 런타임 시점에 타입 결정

  장점 : 컴파일 시 타입 캐스팅 문제 확인 가능, 실행이 빠르다.

  단점 : 변수 선언 시 반드시 타입을 적어야 한다.

  스마트 캐스팅 : 변수의 타입을 체크한 경우 블록 내에서 타입 캐스팅이 자동으로 되는 것

    -> 코드를 간결하게 하고, 실수를 줄여준다.

* 최상위 클래스 Object / Any : 모든 클래스로 캐스팅 가능 -> 다형성 측면에서 편리

 

조건문

  if/else 는 자바와 동일

  when( cf. java - switch)

// Java

switch(number){
    case 1:
    case 2:
    case 3:
    case 4:
        {A}
        break;
    case 9:
    case 11:
        {B}
        break;
    default:
        {C}
        break;
}


// Kotlin

when(number){
    in 1..4 -> {A}
    9, 11 -> {B}
    else -> {C}
}

  코틀린에서는 break를 넣지 않아도 해당되는 케이스만 실행된다.

  케이스의 코드가 2줄 이상이면 중괄호로 감싼다.

  'in' 키워드를 사용하면 '..' 기호를 사용해 범위를 지정할 수 있다.

  또, ','를 사용할 수도 있다.

 

반복문

  for

// Java
String[] array = {"apple", "banana"};
for (String item : array){
    System.out.println(item);
}



// Kotlin
val collection = mutableListOf<String>("apple", "banana")
for(item in collection){
    println(item)
}

for(i in 0..100){
    println(i)
}

for((index, value) in collection.withIndex()){
    println("$value at $index")
}

* collection이 val로 선언되었기 때문에 add를 통한 추가는 가능하지만 reassign은 불가능

 

  while / do~while

  while문은 자바와 동일

  do~while문에서 조건식에 do 블럭 내부 변수에 접근 가능

do{
    val y = retrieveData()
}while(y!=null)

 

  break / continue

  레이블 : 'break' 또는 'return' 이후 어떤 블럭을 빠져나가는지 알 수 있다.

loop1@ while(true){
    var x = retrieveData()
    if(x == null) break@loop1
    else{
        loop2@ while(true){
            var y = getData()
            if(y == null) break@loop2
        }
    }
}


// 중첩 반복문

loop@ for(i in 1..100){
    for(j in 1..100){
        if(~) break@loop
    }
}

continue는 자바와 동일

 

함수

  선언 : 'fun' 키워드 사용

// Java
public void function1(int age){
}

public int function2(int age){
    return 0;
}


// Kotlin
fun funtion1(age:int){
}

fun function2(age:int):int{
    return 0
}

* 코틀린에는 'void'와 같은 형태로 'Unit' 타입이 있는데 생략 가능

 

  정적 유틸리티 클래스 : 객체 상태 정보가 없고, 정적 함수만 제공하는 클래스

    자바에서는 모든 함수가 클래스 내부에 있어야 하기 때문에 연관성이 없는 클래스 객체를 new로 생성하여 호출 시 효율성과 직관성이 떨어지기 때문에 사용

 

  Kotlin의 최상위 함수

    클래스 외부에 있는 함수

 

  Java에서 Kotlin 최상위 함수 사용

    코틀린과 자바는 100% 상호 호환 -> 코틀린의 최상위 함수는 컴파일 단계에서 자동으로 새로운 클래스에 포함

    '@file:JvmName'을 활용하여 접근하는 클래스 이름 변경 가능

 

  Java 함수의 디폴트 파라미터

    메소드 오버로딩으로 해결

    * 파라미터의 수가 많아짐에 따라 같은 메소드가 오버라이딩 되는 횟수가 증가하는 단점이 있다.

 

  Kotlin 함수의 디폴트 파라미터

    * Java 컴파일러는 코틀린의 파라미터 기본값 처리 불가 => 어노테이션 기능 사용(@JvmOverloads)

 

  함수의 이름 붙인 인자

    함수 호출 시 인자 이름을 사용하여 가독성 향상

반응형
반응형

# 버전 선택 : 버전마다 지원되는 요소가 다 다르지만 다 숙지하는 데는 어려움이 있다. -> 점유율을 참고할 수 있다.

 

프로젝트 구조

manifests : 환경설정 파일 및 메타 정보 파일

  • allowBackup : 앱 데이터 백업, 복원 여부 (Default : true)
  • icon : 앱 아이콘과 구성 요소에 대한 기본 아이콘
  • label : 사용자가 읽을 수 있는 레이블과 구성 요소에 대한 기본 레이블
  • roundIcon : 원형 아이콘이 적합한 경우 원형 아이콘 사용
  • supportsRtl : 오른쪽에서 왼쪽으로 레이아웃을 지원할지 여부 ( Default : false)
  • theme : 기본 테마 스타일, Activity 마다 다르게 설정 가능

java : 실제 코드 부분, 유닛 테스트(기능별 테스트)를 지원하기 때문에 3가지

res : layout : 화면의 UI를 담당하는 레이아웃 리소스

  • layout : 화면의 UI를 담당하는 레이아웃 리소스
  • mipmap : 애플리케이션 아이콘 등 이미지
  • values : 문자열, 컬러

Gradle Scripts : 앱의 설정 정보, 기타 앱이 의존하는 라이브러리 정보

 

# import 과정에서 매번 [ Alt + Enter ]로 진행하는 것이 불편하기 때문에 Settings에서 Auto Import를 활성화한다.

 

컴파일 vs 빌드

  • 컴파일 : 통역
  • 빌드 : 컴파일 + 링킹 + 로드

  - 링킹 : 여러 개의 코드로 분리된 기능들을 취합하는 과정

  - 로드 : 실제로 메모리에 올리는 것

 

주석

  • java 주석 : 한 줄 - "//", 여러 줄 - "/*" ~ "*/"
  • javaDoc 형식의 주석 : "/*" ~ "*/", 도움말로 참조 가능
  • XML 주석 : "<!--" ~ "-->"

 

진입점

안드로이드는 단일 진입점이 없다. cf) Java, C, C#의 main

4대 컴포넌트가 진입점 역할

  • Activity :화면에 포커싱 되어 사용자와 상호 작용
  • Service : 백그라운드에서 실행되는 구성 요소, 사용자 UI 제공 X
  • BroadCast Receiver : 시스템 변경 사항 알림
  • Content Provider : 데이터 공유

 

#안드로이드 런처 : 안드로이드의 홈 화면을 담당하는 특수한 앱, 'Home' 키를 누르면 복귀하는 앱

 

코드의 재사용성과 유지/보수

클래스 vs 인스턴스

  • 클래스 : 객체를 위한 설계도
  • 인스턴스 : 설계도(Class)를 통해 생성된 실제 객체

 

 

 

캡슐화

  - 객체의 내부 정보를 외부로부터 은닉하는 것

  • 내부의 복잡한 로직을 숨겨 외부에서 기능을 사용에 용이하게 한다.
  • 내부의 주요 속성들을 외부로부터 보호

 

* 접근 지시자 : 캡슐화를 지원하기 위해 존재

  • public : 프로그램의 모든 위치에서 액세스 가능
  • protected : 동일한 패키지 또는 다른 패키지의 서브 클래스에서만 액세스 가능
  • default : 동일한 패키지에서만 액세스 가능
  • private : 자신의 클래스에서만 액세스 가능, 클래스나 인터페이스는 불가

  필드에서도 public을 사용하여 외부에서 접근할 수 있지만 외부에서 객체의 속성에 직접 접근 가능해지기 때문에 캡슐화 원칙이 지켜지기 어렵다. -> 외부와의 상호 작용은 public 메소드 사용을 권장

 

상속

  - 다른 클래스의 기능을 그대로 사용하면서 자신만의 기능을 추가하는 확장의 개념

  • 메소드 오버 로딩 : 같은 기능을 하지만 입력받는 파라미터의 자료형이 다를 때 사용
  • 메소드 오버 라이딩 : 상속에서 부모가 제공한 기능을 그대로 쓰지 않고 바꿔서 사용하는 것

 

라이브러리

  - 개발의 생산성 향상을 위하여 자주 사용하는 기능을 여러 곳에서 사용할 수 있도록 묶은 것

  - bulid.gradle에서 dependencies에 의존성이 있는 라이브러리를 적는다.

프레임워크

  - 라이브러리처럼 자주 사용하는 기능을 묶어 개발 생산성 향상을 목적으로 한다.

  - 공통적인 부분은 상위 클래스에서 구현, 추가 구현 부분은 하위 클래스의 Callback을 호출

 

라이브러리 vs 프레임워크 : 코드 흐름의 제어권

  •   라이브러리 : 앱 흐름을 직접 제어
  •   프레임워크 : 앱 코드가 프레임워크에 의해 사용된다.

Callback 함수

  - 외부에서 불려지는 함수 (직접 호출 X)

반응형
반응형

책 링크

출처 - 교보문고

안드로이드 공부를 시작하는데 자바와 코틀린으로 쓰여진 프로젝트 실습을 할 수 있는 책을 찾다가 구매했다.

반응형

'독서 > Kotlin 안드로이드' 카테고리의 다른 글

4장 - Kotlin(코틀린) 프로그래밍(1)  (0) 2020.05.28
3장 - 안드로이드 기초  (0) 2020.03.17

+ Recent posts