기본
변수선언
kotlin은 두 키워드(val 및 var)를 사용하여 변수를 선언한다.
값이 변경되지 않는 변수에 val, 값이 변경될 수 있는 변수에 var을 사용한다.
유형 추론
Kotlin 컴파일러는 변수의 유형이 Int인지 String인지 할당된 값의 유형을 기반으로 유형을 추론할 수 있어 유형을 적지 않아도 문제가 없다. 물론 유형을 써주면 확인이나 수정할 때 실수를 줄여주니 적어두면 좋긴하다.
Null 안전
일부 언어에서는 초기 값을 명시적으로 제공하지 않고 참조 유형 변수를 선언할 수 있다. 이러한 경우 변수에는 일반적으로 null값이 포함된다. kotlin 변수는 기본적으로 null 값을 보유할 수 없다.
null 값을 포함하는 변수는 nullable 유형이어야한다. 아래 예와 같이 ?를 변수 유형의 접미사로 지정하여 변수를 nullalbe로 지정할 수 있다.
val languageName : String = null //null값이 들어갈 수 없다.
val languageName : String? = null //null값이 들어갈 수 있다.
nullalbe 변수는 신중하게 처리해야 한다. 아니면 심각한 NullPointerException이 발생할 위험도 있다.
조건부
kotlin은 조건부 논리를 구현하기 위한 몇 가지 메커니즘을 제공한다.
가장 일반적인 것은 if-else 문이다.
if 키워드 옆에 괄호 안에 포함된 표현식이 true 로 평가되는 경우, 해당 분기 내 코드가 실행된다. 그렇지 않은 경우 else 분기 내 코드가 실행된다.
val answerString: String =if (ount == 42){
"I have the answer."
} else if (count > 35){
"The answer is close."
} else {
"The answer dludes me."
}
println(answerString)
암시적으로 각 조건부 분기는 마지막 줄에 표현식의 결과를 반환하므로 return키워드를 사용할 필요가 없다.
*kotlin에는 3항연산자가 없으며 주로 조건식이 대신 사용된다.
아래 예와 같이 조건문의 복자보가 증가하면 if-else 표현식을 when 표현식으로 교체할 수도 있다.
val answerString = when {
count == 42 -> "I have the answer."
count > 35 -> "the answer is close."
else -> "The answer eludes me."
}
println(answerString)
when 표현식의 각 분기는 조건, 화살표(->) 및 결과로 표시된다. 화살표의 왼쪽 조건이 true로 평가되면 오른쪽에 있는 표현식의 결과가 반한된다.
한 분기에서 다음 분기로 실행되지 않는다. (Switch와의 차이점이다.Switch의 경우 break를 걸어주지 않은 경우 다음 분기가 실행된다.)
선언위치에 따라 다르다.
클래스 내에서는 property(속성)
이외의 scope내에 선언된 변수 local variable
형변환함수
toType()
배열함수
arrayOf(값,값)
null로 채워진 배열
arrayOfNulls<Type>(개수)
상속
상속이 필요한 경우 : 공통적인 속성이 필요한것
수퍼클래스:상속해주는 클래스, 서브클래스: 상속 받는클래스
주의점.
서브클래스는 수퍼 클래스에 존재하는 속성과 '같은 이름'의 속성을 가질 수 없음
서브 클래스를 생성할떄는 반드시 수퍼클래스의 생성자까지 호출되어야 함.
클래스를 상속시키려면 open class로 만들어 줘야한다.
오버라이딩과 추상화
원래는 서브클래스와 수퍼 클래스에 존재하는 속성과 '같은 이름'의 속성을 가질 수 없는데,
오버라이딩을 하면 같은 이름과 형태로 된 함수의 내용을 다시 구현할 수 있다.
추상화 : 선언부만 있고 기능이 구현되지 않은 추상함수와 추상함수를 포함하는 추상클래스가 있다.- 틀만만든것
미완성클래스이기에 단독으로 인스턴스를 만들 수 없다. 오버라이드를 통해 서브클래스에서 구현가능
인터페이스 : 다른 언어에서는 추상함수로만 이루어져있는 '순수 추상화 기능'을 말하는 것이지만, 코틀린에서는 추상함수 뿐아니라 일반함수,속성까지 모두 포함한다.
추상함수와 인터페이스의 차이점 : 추상화는 생성자를 가질 수 있지만, 인터페이스는 불가능
인터페이스에서 구현부가 있는 함수는 open 함수로 간주, 구현부가 없는 함수는 abstract함수로 간주
프로젝트
우리가 코틀린으로 어플리케이션을 짤 때 관련한 모든 내용을 담는 '큰틀'
모듈
하나의 프로젝트는 여러개의 모듈로 이루어져있다.
모듈안에는 여러개의 폴더와 파일이 들어가있는 물리적인 구조를 담당하고,
패키지
개발시에 소스코드의 '소속'을 지정하기 위한 논리적 단위이다.
코드를 작성할 떄는 코드내에서 사용하는 이름이 용도에 따라 충돌하지 않도록 다르게 짓는게 일반적인데 일반적으로 패키지의 이름을 지을 떄는
도메인을 거꾸로 쓰면 패키지의 주소이다.
import를 이용해 외부 패키지를 불러올 수 있으며 외부 패키지의 변수나 함수, 클래스등을 그대로 사용할 수 있다.
만약 외부 패키지와 클래스나 변수명이 같다면 패키지포함 풀네임을 써주면 된다.
그래서 코틀린은 하나의 파일에' 여러개의 클래스'를 넣어도 알아서 컴파일이 가능한데 파일내에 package를 기준으로 구분하는 특성상 가능하다.
접근제한자와 스코프
스코프 : 변수나 함수, 클래스 같은 '멤버'들을 서로 공유
'kotlin' 카테고리의 다른 글
Kotlin_RecyclerView (0) | 2021.08.20 |
---|---|
kotlin 스타일 가이드 (0) | 2021.08.05 |