본문 바로가기

Computer/Android

Android with cotlin 기본 문법

공부 중

Log.d() 함수를 사용하려면 MainActivity.kt 처음에 import android.util.Log 을 해줘야 한다.

  1. 변수 선언 Var (Variable)
    • var 변수명 : 타입 = 값
      ex) var shortValue: Short = 32.767
    • 종류
      • Double & Float
      • Int & Long
      • Short & Byte
      • Cjar & String
      • Boolean
    • 변수 출력 ${}, "$"표시를 그대로 출력하고 싶을 때는 "$"표시 앞에 백슬래시("\")
  2. 상수 선인 Val
    • 변수와 다르게 한 번 선언하면 바꿀 수 없다.)
      보통 대문자로 쓴다.
      Val 상수 이름 = 값
  3. IF 문
    if ( 조건) {True 일 때....}

  4. If ~ else 문
    if (조건) {True일 때} else {False일 때}

  5. When 문
    • 특이점
      • True 외에 False에 대해서도 쓸 수 있다 (Else를 쓸 수 있다.)
      • 결과가 같으면 비교값을 컴마로 구분해서 같이 쓸 수 있다.
      • 비교값에 "in 숫자..숫자" 로 범위를 표현할 수 있다.
    • 형식
      When (파라미터) {
      비교값1 -> {}
      비교값2 -> {}
      비교값3, 비교값4 -> {}
      else -> {}
      }
  6. 배열
    • 배열은 개수 특정이 있고, 컬렉션은 없다.
    • 형식
      var 변수 = Array(개수)
      ex) var students = intarray(10)
           var longarray = longarray(10)
           ※ String은 기본 타입이 아니기 때문에 StringArray는 없다.
              단, arrayOf() 함수를 사용해서 String 값을 직접 할당할 수는 있다.
                  ex) var dayArray = arrayOf("MON", "TUE", "WED", "THU", "FRI", "SAT", "SUN")
                       var dayArray = Array(10, {item->""})
    • 배열에 값 입력하기
      • 배열명[인덱스] = 값
        배열명.set(인덱스, 값)
    • 배열에 있는 값 꺼내기
      • 배열명[인덱스]
      • 매열명.get(인덱스)
  7. 컬렉션 : 코틀린의 컬렉션 데이터 타입은 기본적으로 변할 수 없는 데이터 타입 (Immutable)로 설계가 되어 있어서 원래 용도인 동적 배열로 사용하기 위해서는 뮤터블로 만들어진 데이터 타입을 사용해야 한다.
    • List 
      • 형식 var list = mutableListOf("MON", "TUE", "WED")
      • 리스트 생성하기 (mutableListOf)
        var mutableList = mutableListOf("MON","THU","WED")
      • 리스트에 값 추가하기 (add)
        입력될 위치의 인덱스를 따로 지정해주지 않아도 입력되는 순서대로 인데스가 지정되며 동적으로 리스트의 공간이 자동으로 증가한다.
        mutableList.add("THU")
      • 리스트에 입력된 값 사용하기 (get)
        입력할 때와 다르게 꺼낼 때는 get을 써야 한다.
        var variable = mutableList.get(1)
      • 리스트값 수정하기 (set)
        두 번재 값을 수정하는 예 :  mutableList.set(1, "수정할 값")
      • 리스트에서 입력된 값 제거하기 (removeAt)
         두 번째 값을 삭제하는 예 : mutableList.removeAt(1)
      • 빈 리스트 사용하기
        빈 리스트를 생성하려면 데이터 타입을 직접 입력해줘야 한다.
        var 변수명 = mutableListOf<컬렉션에 입력될 값의 타입>
        문자열로 된 빈 컬렉션을 생성 : var stringList = mutableListOf<string>()
        ※<>이 괄호 명칭은 제네릭으로  컬렉션이 사용하는 값의 타입을 지정하기 위한 도구
      • 컬렉션 개수 가져오기 (size) : mutabliList.size
    • Set 
      • 중복을 허용하지 않는 List / 인덱스 조회가 불가하고 get 함수도 지원하지 않음 
        [예]
        set= mutableSetOf<String>()
        set.add("JAN")
        set.add("FEB")
        set.add("MAR")
        set.add("JAN")  // 동일한 값은 입력되지 않음
    • Map  
      • Key와 Value가 쌍으로 입력되는 컬렉션
        Map의 Key는 List 의  index와 비슷하나 직접 입력해줘야 하고, 삭제 했을 때 자동으로 땡겨 오지 않는다.
      • 함수 : 입력 및 수정은  put(), 사용은 get(), 삭제는 remove() 함수 사용
        [Put 예]
        var map=mutableMapOf(string, string)

        map.put("키1", "값1") 
        map.put("키2", "값2")
        [Remove 예]
        map.remove("키2")
    • 컬렉션 값의 단위 = 엘리먼트
  1.  
  2. 잡다구리
    MainActivity.kt : Android > app > java > com.example.myapplication > Mainactivity
  3. 부등호에서 같음이 항상 오른쪽(나중에) (<=, >= ...)

반복문 :  For 특정 횟수만큼 반복 시, While은 특정 조건이 만족할 때까지 반복할 때 사용
  1. For 반복문
    • 기본형식 (온점 2개)
      for (변수 in 시작값..종료값) {
        // 실행 코드
      }
    • until 은 마지막 숫자 전 까지
    • 배열 크기 만큼 반복 가능
      [index를 사용하는 방법]
      var array = arrayOf("JAN", "FEB", "MAR", "APR", "MAY", "JUN")
      for (index in 0 until array.size) {
         Log.d("for", "현재 월은 ${array.get(index)}입니다.")
      }
      [변수에 담은 후 사용하는 방법 (가독성이 더 좋음)]
      var array = arrayOf("JAN", "FEB", "MAR", "APR", "MAY", "JUN")
      for (month in array) {
         Log.d("for", "현재 월은 ${month}입니다.")
      }
    • step :  건너뛰기
      [3씩 건너뛰기]
      for (변수 in 시작값..종료값 step 3) {
        //실행 코드
      }
    • downTo :  감소 시키기
  2. While 반복문
    • 기본 형식 
      While (조건식) {
        // 실행 코드
      }
      • 일반적인 while 반복문
        var current = 1
        val until = 12
        while (current < until) {
           Log.d("while", "현재값은 ${current}입니다.")
           current = current + 1
        }
    • do ~ while : do 이후 한번은 무조건 실행 후 while 조건에 따라 추가 진행 여부 결정
    • 반복문 제어 
      • break : 반복문 탈출
      • continue : 해당 반복문을 끝내고 다음 반복문으로 (다음 반복문이 없다면 그냥 끝)
함수 : 코드를 사용할 수 있는 최소 단위
  1. 형식 & 예 : 
    [형식]
    fun 함수명(파라미터 이름: 타임): 반환 타입 {
         return 값
    }
    [예]
    fun square(x: Int): Int {
        return x *x
    }
  2. 함수 파라미터의 정의
    • 변수를 정의하듯 '이름: 타입'의 형태로 정의, 여러 개 일경우 컴마로 구분
      코틀린에서 파라미터를 통해 입력되는 값은 모두 이뮤터블로, Val이 생략된 형태라고 보면 된다.
      [예]
      fun newFunction(name: Streing, age: Int = 29, weight: Double = 65.5) {
           Log.d("fun", "mame의 값은 ${name}입니다.")
           Log.d("fun", "age의 값은 ${age}입니다.")
           Log.d("fun", "weight의 값은 ${weight}입니다.")
      }
      newFunction("Hello")
클래스와 설계 : 그룹화할 수 있는 함수와 변수를 한군데 모아놓고 사용하기 쉽게 이름을 붙여놓은 것
  1. 클래스의 기본 구조
    [형식]
    class 클래스명 {
      var 변수
      fun 함수() {
         //코드
       }  
    }
    [예] Log클래스의 코드를 함축한 예
    class Log {
       var status : Int
       companion object {
          static fun d(tag: String, msg: String) {
             //문자열을 출력하는 코드
          }
          static fun e(tag: String, msg: String) {
            // 문자열을 출력하는 코드 
          }
       }
    }
  2. 클래스의 생성
    • 프라미어 생성자
      • Constructor 키워드를 사용해 정의 (조건에 따라 생략 가능)
        class KotlinOne construcotr(value: String) {
          //코드
        }
        ※ 생성자에 접근 제한자나 특정 옵션이 없다면 consturctor 키워드를 생략할 수 있다.
    • 세컨더리 생성자
      • constructor 키워드를 마치 함수처럼 사용해서 작성할 수 있다.
        class KotlinTwo {
          constructor (value: String) {
            Log.d("class", "생성자로부터 전달받은 값은 ${vlaue}입니다.")
          }
        }
  3. 클래스의 사용 = 클래스 내부에 정의된 변수와 함수를 사용한다는 것

 

 

위젯과 리소스 다루기
  1. 배치를 담당하는 레이아웃
    MainActivity.kt : 소스 코드 작성
    activity_main.xml : 화면을 구성
    • 컨스트레인트 레이아웃 (ConstraintLayout) : 안드로이드 기본 레이아웃 (베치되는 위젯들 사이에 간단한 제약조건(Constraint) 설정만으로 전체 화면을 쉽게 구성)
    • 리니어 레이아웃 (LinearLayout) : 위젯을 가로 또는 세로 한 줄로 배치하기 위한 레이아웃.
    • 리니어 레이아웃을 기본 레[이아웃으로 사용하기
      • 리니어 레아아웃을 사용하기 위해서 컨스트레인트 레이아웃 안에 리니어 레이아웃을 추가할 수도 있지만 레이아웃이 중첩되면 그남큼 그래픽 처리 속도가 느려지기 때문에 기본 레아이아웃인 컨스트레인트 레이아웃을 리니어레이아웃으로 바꾼 후에 작업하는 것이 좋다.
      • XML Code에서 androidx.constraintlayout.widget.Constraintlayout을 LinearLayout으로 수정
        화면 우측 상단에서 code 를 선택하여 코드에서 변경
스코프 함수
  1. run  --> 최종 값을 반환
  2. let  --> 최종 값을 반환
  3. apply  --> 자기 자신을 반환
  4. also  --> 자기 자신을 반환
카메라와 갤러리
  1. 카메라 사용하기
    •