4학년 현장실습을 하면서 안드로이드 스튜디오를 이용하고 Java를 이용한 앱개발을 하게 되었다. 하지만 많은 소스코드들을 찾아보면서 요즘 앱개발 대세는 Kotlin을 사용한 앱개발로 변경되고 있고 구글에서도 Koltilin을 밀어주기? 때문에 Kotlin에 대해서 공부를 해야겠다라고 생각했다. 그래서 다양한 블로그나 자료들을 찾아보니까 Koltin이라는 언어가 누구나 쉽게 접근하게 쉽게 만들어 졌다 라고 생각했다. 그래서 코틀린에 대해서 공부를 해볼려고 한다! 내가 좀더 성장하고 전문적이지 않지만 내가 공부한것들을 적어 둘려고한다.
코틀린 프로젝트는 모듈(Module), 패키지(Package),파일로 구성되어 있다. 코틀린 프로젝트는 모듈이 있고 모듈은 다시 패키지로 구성되어 있다.
변수란 값을 넣을 수 있는 상자 정도로 생각하면 된다.
자료형 : 값의 성질
변수는 val, var이라는 키워드를 이용하여 선언할 수 있다. 이것이 Java와 Kotlin의 차이점중 하나라고 느꼈다.
즉 변수값을 변경되지 않게 하려면 val, 변수값이 변경되어야 한다면 var이다.
코틀린은 변수에 할당된 값을 보고 자료형을 추출할 수 있는 가장 큰 특징이있다.
ex) val userName="Kildong" // 코틀린이 "Kildong"자료형을 추론하여 자료형을 String으로 지정한다.
- 단, 자료형을 지정하지 않은 변수는 반드시 자료형을 추론할 값을 지정해야한다.
- 값을 할당하지 않고 변수 선언 시 자료형은 반드시 필요하다.
코틀린은 참조형 자료형을 사용한다.
기본형(Primitive Data Type)은 가공되지않은 순수한 자료형
참조형(Reference Type)은 객체를 생성하고 동적 메모리 영역에 데이터를 둔 다음 이것을 참조하는 자료형이다.
참조형으로 선언한 변수는 성능최적화를 위해 코틀린 컴파일러에서 다시 기본형으로 대체된다.
기본형으로 선언한 변수는 스택(임시메모리)에 저장되며 값이 저장된 메모리의 크기도 고정되어 있다. 참조형은 스택에 값이 아닌 참조 주소가 있다. 참조형의 실제 객체는 동적 메모리인 힙에 저장된다.
정수자료형: 양수만 표현할 수 있는, 즉 부호가 없는(unsigned)정수 자료형은 부호가 있는 자료형과 2배 많은 양수를 표현할 수있는 장점이 있다.
-> 코틀린에서 사용할 수 있는 부호가 없는 정수자료형
문자 자료형의 값은 작은 따옴표(')로 감싸서 표현
만약 정수 자료형을 이용하여 문자자료형을 선언한다면 toChar()을 이용해 문자 자료형을 선언할 수 있다.
문자열 자료형은 기본형에 속하지 않는 배열형태로 되어있는 특수한 자료형
변수의 값이나 표현식을 문자열안에 넣어 출력하려면 달러($)기호와 함께 변수나 표현식을 사용한다.
var a = 1
var s1 ="a is $a" //String 자료형인 s1을 선언하고 초기화
변수가 아니라 표현식을 문자열에 포함시키려면 중괄호를 사용하면 된다.
중괄호를 사용해도 큰따옴표나 $로 표현할 수 있다.
typealias Username=String //String을 Username이라는 별명으로 대체
val user : Username="Kildong"
-> 특정 자료형이나 클래스등의 별명을 붙이면 좀 더 명확하게 용도를 나타낼 수 있따.
코틀린은 위에서 적었듯이 변수 사용시 반드시 값이 할당되어 있어야하는 원칙이 있다.
만약 값이 할당되어 있지 않은 변수를 사용하면 오류가 발생한다.
코틀린에서 null 상태인 변수를 허용하려면 물음표(?) 기호를 사용해 선언해야함
물론 null을 허용하는 변수를 사용하려면 null검사하고 처리하는 방법까지 고려해야한다.
또한 필요하면 자료형을 변환할 수 있다
프로그램이 실행되는 도중에 값이 null인 변수에 접근하려면 NullPointerException(NPE)예외 오류가 발생한다 하지만 코틀린은 변수에 아예 null을 허용하지 않아 이 문제를 미리 방지할 수 있다.
변수의 null 허용 여부에 따라 String과 String? 이 서로 다른 자료형이 임을 알 수 있다.
String? 형에서는 세이프콜 (?.) 이나 non-null 단정기호(!!.)만 허용한다.
str1?.length?:-1 == if(str1!=null)str1.length else -1
즉 str1이 null이 아니면 str1.length를 반환 null이면 -1을 반환
세이프콜과 엘비스 연산자를 사용하면 null인 경우 반환값을 특정값으로 대체하므로 null발생을 대비할 수 있다. -> 코드를 한줄에 표현할 수있기때문에 가독성이 좋아짐.
코틀린에서 자료형이 다른 변수에 재할당하면 자동 형변환이 되지않고 자료형 불일치 오류(Type Mismatch)가 발생!
단순히 값만 비교 할 때는 이중 등호(==) 참조 주소를 비교하려면 삼중등호(===)를 사용
어떤값이 정수일수도 있고 실수일수도 있을때 컴파일러가 자동으로 형변환을 하는 스마트캐스트를 사용하는게 편하다.
스마트캐스트가 적용되는 자료형은 Number형이다.
as로 스마트 캐스트를 할수 있다.
as는 형변환이 가능하지 않으면 예외를 발생시킨다. ]
Any형은 자료형이 특별히 정해지지 않은 경우에 사용
Any형은 모든 클래스의 뿌리이다.
즉, 코틀린의 모든 클래스는 Any형이라는 슈퍼클래스를 가진다.
fun main() {
var a :Any=1 //Any형 a는 1로 초기화될때 Int형이됨
a=20L //Int형인 a가 20L에 의해 Long형이 된다.
println("a:{a.javaClass}")}
실행결과 a는 20 type은 Long이 된다.
화이팅!! 프로필은 본인인가요???귀여워요