• Java 기반
  • 타입추론 기반 정적타입지정
  • 집합의 경우 immutable이 기본 ( list, map형식도 mutable이 따로 존재 )
  • null에 엄격

기본 구성

  • Activities : 화면
  • Services : 백그라운드 실행 구성요소
  • Broadcast receivers : 이벤트 delegate
  • Content providers : api? 터미널? 브릿지

 

  • 타입추론 기반
    • var : 변수
    • val : 상수
    • 선언시 타입지정은 optional ( 타입추론을 통해 알아서 정적지정 )
      • var [name] : [type] = [value]

 

  • 집합
    • 배열 타입
      • array ( collection )
      • list
      • map ( dictionary )
        • map은 key값의 중복이 불가, dictionary는 가능
      • set ( 중복값 자동제거, 내용물을 unique하게 유지함 )
      • arrayList
        • 동적 리스트와 비슷..?
        • method 명명 또 이상함 (  add, clear, get, remove )
        • 초기화 시 ArrayList<type>( index length )
          • 물론 arrayListOf<type>( values ) 도 가능
        • iteration : while ( [name].hasNext() )를 통해 가능
        • .length 대신 .size
    • immutable 기본
      • list, map조차도 기본형은 추가,제거,내용수정이 불가
      • 선언 시 mutableListOf<>() 혹은 [List] = [List].toMutableList와 같이 명시적으로 mutable로 지정해야 함
    • pseudo
      • type은 IntArray 혹은 Array<type> ( 구지 다중타입배열의 타입을 명시하고싶으면, Array<Any>쓰면 될듯..? )
      • data init은 arrayOf( [values] ) 또는 arrayOf<type>( [values] ) 또는 intArrayOf( [values] )
    • 내용물 보는건 .contentToString()
    • 데이터 스트럭쳐
      • class
      • data class ( struct )

 

  • Null 관리 ( NPE = null pointer exception )
    • 예외 확인 및 nullptr, null 등의 예외처리를 최소화하기 위해 null 허용 및 관리를 엄격하게 가져감
    • 모든 변수는 기본적으로 !nullable
    • var에 null 입력시 exception을 throw하지않으려면, 타입선언 시 물음표를 붙여줘야 함 ( var [name] : [type]? = [data])
    • null시 exception 처리방법 - [name]? : [null일시 exec할 내용] ( isnullptr의 대체? ) ( Elvis operator )
      • not null일때만 실행 - [name] ?. let { exec statement }
    • 클래스 내의 메서드에 접근 시, 각 단계에서 안전하게 접근할때, 그냥 경로상의 클래스/멤버 단위에 각각 ?붙여주면 됨 ( null safe operator )
      • ex. class?.mathod1?.method2?.method3?.param1?
    • nullable var/val 뒤에 !!를 붙이면 not null에 대입할 수 있음 ( nullable var/val의 값이 null이면 그 statement에서 에러 반환 )
      • var s : Int? = null     →     var c : Int =  s!!

 

  • Type
    • 모든 type ( custom class 포함 )은 class Any 를 상속함
    • [class] :: class 를 통해 타입 획득 ( .simpleName을통해 클래스이름만 출력 )
    • [name] is [type] 을 통해 논리연산 가능
      • switch-case문의 대체인, when-[value] 문에서 when-is [type] 을통해 타입기반 switch가 가능
    • 범위 선언
      • in 1..10 = [1, 2, ... , 9, 10]
      • in [범위] step [간격]
    • 형변환(cast)는 as로 함, ?를 붙여 safe cast 가능
      • var a: A = b as A
      • var a: A = b as? A  ?:  [exec statement when b<A> is null]
        • a에는 null을 반환함

 

  • Constructor와 Initializer
    • method의 name이 contructor면 자동으로 subconstructor method로 기능
      • class 생성시 초기화 param은 primary constructor를 통해 받음
      • class [name] ( params ) : type { class block }
      • subconstructor는 이후 primary constructor를 덮어씌워서 초기화 하는 느낌?
        • constructor ( parmasb ) : this ( paramsb ) { subcons block }
    • method의 name이 init이면 자동으로 initializer method로 기능
    • 작동 순서
      • primary cons → 모든 subcons의 초기화 → 모든 init → 모든 subcons block

 

  • Class
    • 접근지정자
      • 상속가능 여부 : Open, Final ( final이 기본 )
      • 접근가능 여부 : public, protected, private, internal
        • protected는 open 추가로 붙여줘야 함 ( 당연히 public도 )
        •  internal은 같은 모듈안에서 접근 가능 ( 한번에 컴파일되는 단위 기준? )
    • 내부inner
      • 클래스 내 클래스에만 접두 가능
      • 자기 테두리클래스에도 접근가능
        • private 멤버에도 접근 가능
    • 중첩nested ( 내부인데 inner로 지정하지 않을 경우 기본클래스 )
      • 그냥 클래스안에 있는 클래스인듯
      • class Outer{
        var a = 3
        val innerObj = Inner()
        init {
        this.a = 4
        }
        inner class Inner{
        val c = a
        fun setA(a: Int){
        this@Outer.a = a
        }
        }
        }var outer = Outer()
        var inner = outer.innerObj
        var inner2 = Outer().Inner()
        var inner3 = outer.Inner()println(inner.c)
        println(inner2.c)
        println(inner3.c)
        println(Outer().a)
        println("---------")
        println(outer.a)
        inner3.setA(10)
        println(outer.a)3
        4
        4
        4
        ---------
        4
        10Process finished with exit code 0

 

  • Lamda식
    • val/var  [name] = { [parma n] : [type n], [param m] : [type m] → return value ( with params ) }

 

  • Android View Class Hierarchy
    • 뷰 : 시각적 컴포넌트의 최상위 클래스
    • 뷰 그룹 : 여러개의 뷰를 포함
    • 위젯 : 기능성 버튼
    • 레이아웃 : 내부에 뷰를 포함, 뷰들의 배치와 정렬에 대해 관리

 

함수 정리

함수 정리
- Log
    - .e ( tag, message ) : 오류
    - .w ( tag, message ) : 경고
    - .i ( tag, message ) : 정보
    - .d ( tag, message ) : 디버그
    - .v ( tag, message ) : 상세

'프로그래밍' 카테고리의 다른 글

win api  (0) 2024.05.21
네트워크  (0) 2024.05.21
어셈블리 & 기계어 & OS와 HW  (0) 2024.05.21
CLI  (0) 2024.05.21
C  (0) 2024.05.21

+ Recent posts