728x90
강의 링크 : https://www.edwith.org/boostcourse-mo-kotlin-basic1/joinLectures/28611
코틀린의 특징
- 안드로이드의 주 개발 언어인 JAVA가 갖는 한계성을 보완 (애플이 Obj-C에서 Swift로 넘어간 것과 같은 맥락)
- 목표
- 웹, 어플(Android/IOS), 임베디드, IoT 등 모든 개발을 다양한 플랫폼에서 개발하고자 함
- 특징
- Jetbrain에서 개발 / 보급
- 간결한 코드, 높은 호환성
- 세미콜론은 선택
- 안드로이드 공식 언어
- 변후는 Nullable (?로 선언) / Not Null로 구분 가능 : Java의 NullpointerException을 방지
- 플랫폼
- JVM : 자바 가상 머신에서 동작하는 어플 (JAVA와 호환 가능)
- JS : 자바스크립트에 의해 동작하는 웹앱
- Native : LLVM 기반(ARM, x86 등) 컴파일을 지원
- IOS / Mac / Android / Windows / Linux / WebAssembly 등등
- 장점
- 자료형 오류를 미리 잡을 수 있는 정적 언어(statically typed) : 컴파일러가 변수 타입을 미리 검증
- 널 포인터로 인한 중단 예방 - NullpointerException(NPE)에서 자유로움
- 자바와 100% 호환 : JVM 상에서 동작 가능
- 함수형 / 객체지향 모두 가능
- 세미콜론 생략 가능
기본 자료형과 변수 선언 (1) 불변형, 기본형
- 자료형
- 정수형 Int (1)
- 문자열 String ("1")
- 실수형 Float (1.00)
- 그 외 (Double 등)
- 변수
- 불변형 val : 선언 후 값 수정 불가
- 가변형 var : 수정 가능
- 변수명은 숫자로 시작할 수 없고, 코틀린 키워드(while, if 등)으로는 선언 불가
val username : String = "kildong"
//키워드 불변 / 이름 username : 자료형 문자열 / 값 "kildong"
// 자료형은 대문자로 시작함에 유의
- 변수 타입 지정을 해주지 않아도 컴파일러가 타입을 추론해줌
- Ctrl+Shift+P를 누르면 추론된 타입 확인 가능
- 자료형 추론을 하고자 하는 경우 초기값을 반드시 선언해주어야 함
- Ctrl+Shift+P를 누르면 추론된 타입 확인 가능
var number = 10 //자료형 추론을 위해서는 초기값을 주거나
var number : Int //초기값이 없는 경우 자료형을 줘야 함
- 카멜 표기법
- 긴 이름의 변수를 선언하는 규칙 중 하나
- 일반 변수, 함수명은 단어가 변경될 때 대문자로 시작 (카멜 표기법)
- 클래스의 경우 대문자로 시작 (파스칼 표기법)
val camelCase
var numberOfBooks
//변수 선언 - Camel Expr
Class AnimalCategory (){}
Class CarEngine (){}
//클래스 선언 - Pascal Expr
기본 자료형과 변수 선언방법 (2) 정수형과 실수형
- 정수형 변수
- Long : 8바이트
- Int : 4바이트
- Short : 2바이트 (-32768 ~ 32767)
- Byte : 1바이트 (-128 ~ 127)
- 부호 없는 정수형 : 앞에 U를 붙임 (0부터 값까지)
- 정수형 추론
- 자료형 생략 시 Long 외에는 Int로 추론됨
- 접미사 L : Long으로 추론 (ex. 123L)
- 접두사 0x : 16진법 Int (ex.0x0F)
- 접두사 0b : 2진 Int (ex.0b001100)
- 접미사 u(uL) : unsigned int(Long) (ex. 123u, 123uL)
- 가독성 : 언더스코어로 큰 수를 읽기 쉽게 표현 (ex. 123_456_789)
- 실수형 변수
- Double : 8바이트
- Float : 4바이트
- 실수형 추론
- 기본은 Double로 추론
- 접미사 F : Float로 추론됨 (ex. 3.14F)
- 실수형 변수는 부동 소수점 표현
- bit 일부는 기수를 일부는 지수 표현에 사용됨
- 이로 인해 정확한 숫자 표현은 불가능 / 약간의 오차 존재
기본 자료형과 변수 선언방법 (3) 크기 범위와 기타 자료형
- 자료형의 음수 표현 (2의 보수)
- 2의 보수 : 이진수 값을 뒤집고 +1
- ex. -6 : 0000 0110(2) >> 1111 1001(2) (뒤집기)>> 1111 1010(2) (+1)
- 제일 왼쪽 비트(가장 큰 자리수)가 부호 비트 역할
- 2의 보수 : 이진수 값을 뒤집고 +1
- 기타 자료형
- 논리형 Boolean : 1bit로 true / false로 구분
- 문자형 Char : 2바이트 유니코드 표현(\u0000 ~ \uffff)
- String Pool
var str1 : String = "hello"
var str2 = "hello"
//str1 == str2는 true 반환
//문자열은 string pool에 저장되어 처리
- $ 표현식
- 문자열 내에 $기호 사용 시 변수 출력 가능
var a = 1
val s1 = "a is $a" // a is 1
val s2 = "a+1 is ${a+1}" //a+1 is 2
Null 타입
- 코틀린 변수는 기본적으로 Null 허용 x
- 선언한 변수는 반드시 값이 할당되어야 함
- 선언한 변수는 반드시 값이 할당되어야 함
- Nullable 선언 : ? 사용
val a : Int? = null
val b : String? = null
- null 변수를 연산시 오류 발생
- null 연산 시도 시 컴파일 오류 발생
- 메소드(.) 자리에 safe call(?. - null이면 연산 x)
- assert call(!!.) : null이 아니라고 가정(컴파일러의 오류처리 무시) - null 접근시 NPE(NullPointException) 발생
- 엘비스(elvis) 연산자 (?:) : 연산 오류 발생시 대입할 값 지정
val str1 : String?
... //str1의 대입 여부는 모른다고 가정
val len = str1?.length ?: -1
//val len = if(st1!=null) str1.length else -1
비교와 캐스팅
- 자료형 변환 시 메소드 이용
val a : Int = 1
val b : Double = a.toDouble()
- 변환 메소드의 종류
- toByte
- toLong
- toShort
- toFloat
- toInt
- toDouble
- toChar
- 이중 / 삼중 등호
- 이중 등호(==) : 값 비교
- 삼중 등호(===) : 참조 주소 비교 (nullable / not nullable 변수는 같은 값이어도 다른 주소로 할당)
- 스마트 캐스트
- 명시되지 않은 자료형을 자동변환
- Number형 : 대입되는 숫자에 맞는 자료형으로 자동 캐스팅
- Any형 : 자료형이 정해지지 않은 경우
- 모든 자료형 클래스의 root 역할
- 필요한 자료형으로 자동 변환
var test : Number = 12.2 //float
test = 12 //int로 smartcast
tset = 12L //long으로 smartcast
test += 12.0 //다시 float로 smartcast
비트 연산자
- 비트 메소드
- shl(bits) : bits만큼 왼쪽으로 shift
- shr(bits) : bits만큼 오른쪽으로 shift
- ushr(bits) : bits만큼 오른쪽 shift(부호 변화 x)
- and(bits) : bits와 and연산
- or(bits) : bits와 or연산
- xor(bits) : bits와 xor연산
- inv() : bit 뒤집기
728x90