일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
31 |
- DiffUtil
- 리사이클러뷰
- recyclerview
- 뷰홀더
- Android
- 프로세스
- NestedScrollView
- 운영체제
- viewModelScope
- flutter
- appcompatactivity
- http발전과정
- AsyncListDiffer
- 절대 주소
- apk 빌드 과정
- 디자인 패턴
- AAC
- 내부 단편화
- 데코레이터 패턴
- Kotlin
- 플로이드워셜
- GetX
- 물리 메모리
- 리사이클러뷰풀
- 상태관리
- Dispatchers
- http 역사
- 자이고트
- 안드로이드
- appcompatacitivity
- Today
- Total
hong's android
[Kotlin] 코틀린 인 액션 2장 본문
2장에서 다루는 내용
- 함수. 변수. 클래스. enum, 프로퍼티를 선언하는 방법 제어 구조
- 스마트 캐스트
- 예외 던지기와 예외 잡기
조건문
조건문은 문이 아니라 식이다. 그렇기 때문에 리턴값이 존재하고 몇몇 경우에 간결하게 코드를 작성할 수 있다.
fun eval (e: Expr): Int = if (e is Num) {
e.value
} else if (e is Sum》 {
eval(e.right》 + eval(e.left) }
else {
throw IllegalArgumentException (" Unknown expression’’ )
}
(식이 본문인 경우에 타입추론이 있기 때문에 리턴값을 생략 할 수 있다. 하지만 식이 본문이 아닌 경우 반환 타입과 리턴문을 선언해줘야 한다. 아주 긴 함수에 리턴문이 많은 경우는 리턴값을 명시해야 어떤 값을 반환하는지 한눈에 알 수 있기 때문이다.)
문자열 템플릿
문자열 안에 변수를 추가할수있다. 컴파일러는 각 식을 정적으로 검사하므로 존재하지 않는 변수를 문자열 템플릿에 사용할 경우 오류가 난다.
⚠️ 한글도 식별자이기 때문에 한글과 문자열 템플릿을 사용할떈 ${value}처럼 괄호를 붙여준다.
프로퍼티
비공개 필드 + 접근자 메소드를 제공한다.
보통 자바에서 클래스를 선언할때 내부 값들은 비공개, 그 값들을 외부에서 이용할 수 있게 게터/세터를 만들어주는데 해당 과정들을 한꺼번에 해준다.
커스텀 접근자로 프로퍼티의 접근자 메소드를 변경할 수 있다.
디렉터리와 패키지
모든 클래스 파일 앞에 package가 들어갈 수 있고 패키지의 모든 선언을 사용할 수 있다. 같은 패키지에 속해 있다면 다른 파일이더라도 그대로 사용할 수 있고, 다른 패키지이면 import 해야 한다.
자바의 경우 클래스들을 패키지에서 관리하고 클래스 이름과 파일명을 일치시켜야 한다. 하지만 코틀린은 여러 클래스를 한 파일 안에 넣을 수 있고 이름도 마음대로 변경할 수 있다.
함수도 따로 Import 가능
Enum
상수값을 관리하는 enum 클래스, 코틀린에선 프로퍼티와 메서드를 활용할 수 있다.
enum class Color (
val r: Int, val g: Int, val b: Int <----- 상수의 프로퍼티를 정의한다.
){
RED(255, 0, 0), ORANGE(255, 165, 0),<——각 상수를 생성할 때 그에 대한 프로퍼티 값을 지정한다.
YELLOW(255, 255, 0), GREEN (0, 255, 0), BLUE(0, 0, 255),
INDIGO(75, 0, 130), VIOLET(238, 130, 238); <------ 사용해야 한다
}
Enum으로 상수값을 관리하게 되면 상수값의 중복을 막을 수 있고 속성이 비슷한 상수값들을 묶어주어 가독성이 좋아진다.
When
when을 이용해서 여러 가지 조건을 검사하는 코드인 경우 조금 더 간결하게 코드를 구성할 수 있다. if와 마찬가지로 타입검사 후 스마트 타입 캐스트가 발생한다.
in
in을 사용해서 범위 내에 어떤 값이 속하는지 확인할 수 있다.
Try, catch, finally
코틀린은 check 예외를 잡아내도록 강제하지 않는다. 프로그래머들이 예외를 다시 던지거나, 의미 없이 처리하는 경우가 많아서 오류발생을 방지 못한다고 판단해서이다. IOException을 예로 들면 버퍼 스트림을 close 하다가 실패하는 경우 IOException에 해당하는데 따로 예외처리를 할 수 없기 때문에 이 예외처리는 불필요하다.
fun readNumber(reader: BufferedReader)
{
val number = try {
Integer.parselnt (reader.readLine ()) <------ ' 예외가 발생하지 않으면 이 값울 시용한다’ }
catch (e: NumberFormatException) {
null
}
}
}
자바와 달리 try는 식이다. 그러므로 변수에 대입할 수 있고, 결괏값을 반환한다.
(Catch 블록에서 예외가 잡히면 블록 안에 결괏값이 반환된다.)
자바의 Exception
1) IOException (입출력 예외):
- 의미: 입출력 작업이 실패하거나 인터럽트된 경우 발생합니다. 파일 읽기/쓰기, 네트워크 연결 등에서 발생할 수 있습니다.
- 예시: 파일을 읽으려 했으나 파일이 존재하지 않거나, 파일 쓰기 도중 디스크 공간이 부족한 경우.
2) IllegalArgumentException (부적합한 인수 예외):
- 의미: 메서드가 부적합한 또는 잘못된 인수를 받았을 때 발생합니다.
- 예시: 메서드가 예상하는 범위 내의 값이 아닌 값을 전달한 경우
'Develop > Kotlin' 카테고리의 다른 글
[코틀린] object 키워드 (0) | 2023.03.13 |
---|---|
[Kotlin] 상속과 위임 (0) | 2023.02.21 |
[Kotlin] 코틀린 인 액션 1장 (0) | 2023.01.16 |