2023. 12. 11. 21:44ㆍ코틀린
접근 제한자
객체를 이용해서 변수나 메소드를 호출할 수 있는지의 여부를 접근이라 한다.
접근권한을 통해 데이터에 무분별한 접근을 막을 수 있고, 클래스들간에 접근하면 안되는 상황을 구분하기 때문에 향후에 유지보수 하기에 용이하다.
프로젝트> 모듈> 패키지> 클래스
프로젝트
: 최상단 개념이고 모듈, 패키지, 클래스를 포함한다.
모듈
:프로젝트 아래의 개념이고 패키지, 클래스를 포함한다.
패키지
: 모듈 아래 개념이고 클래스를 포함한다.
public: 명시하지 않으면 기본적으로 public 이다. (어디서나 접근가능)
private: 동일한 클래스 내부에서만 접근할 수 있다.
internal: 같은 모듈 내부에서만 접근할 수 있다.
protected: 기본적으로 private이지만 상속을 받은경우에 타 모듈에서 접근할 수 있다.
예외처리
프로그램을 실행하기 전에 알 수 있는 컴파일 에러를 오류라고 한다. 프로그램을 실행하는 도중에 발생하는 런타임 에러인 예외가 발생할 수 있어서 프로그램이 비상적으로 종료하게 한다....이는 심각하는 문제다.....
그래서 프로그램 실행도중에 발생하는 예외를 적절하게 처리해야하는데,
이를 예외처리라고 하며
미리 예외를 생각하고 소스코드를 작성해야 안정성을 높인 프로그램이라고 할 수 있다.
kotlin의 예외처리
1) try-catch 구조
fun method1() {
try {
예외가 발생할 가능성이 존재하는 코드
} catch(예외종류) {
예외가 발생했을때 처리할 코드
}
}
while(true) {
try {
var num1 = readLine()!!.toInt()
println("내가 입력한 숫자는 ${num1}입니다")
break
} catch(e:java.lang.NumberFormatException) {
println("숫자를 입력하세요")
}
}
2) throw의 구조
fun method1(num1:Int) {
if(num1 > 10) {
throw 예외종류
}
}
while(true) {
try {
var num1 = readLine()!!.toInt()
println("내가 입력한 숫자는 ${num1}입니다")
break
} catch(e:java.lang.NumberFormatException) {
println("숫자를 입력하세요")
} finally {
println("키보드와의 연결은 정상적입니다")
}
}
지연초기화
변수나 상수의 값을 나중에 초기화할 수 있다.
코틀린은 클래스를 설계할 때 안정성을 위해 반드시 변수의 값을 초기화할 것을 권장하며 설계시 초기의 값을 정의하기 난처하므로 나중에 대입하기 위한 문법이다. 저사용으로 제한되어 있는 환경에서는 메모리를 더욱 효율적으로 사용 할 수 있다.
초기화 하는 방법
코틀린은 지연초기화 또는 늦은초기화를 위해 lateinit, lazy 키워드를 활용하는데,
변수는 lateinit로, 상수는 lazy로 지연초기화한다.
변수의 지연초기화
fun main(){
var s1 = Student()
s1.name = "참새"
s1.displayInfo()
s1.age = 10
s1.displayInfo()
}
class Student {
lateinit var name:String
var age:Int = 0
fun displayInfo() {
println("이름은: ${name} 입니다.")
println("나이는: ${age} 입니다.")
}
}
여기서 displayinfo를 불러 올때 isInitialized를 활용해서 값이 초기화되었는지 확인할 수 있고, 사용할때는 값이 아니라 참조형태로 사용해야하기 때문에 this:: 또는 ::를 붙인다.
fun displayInfo() {
if(this::name.isInitialized) {
println("이름은: ${name} 입니다.")
println("나이는: ${age} 입니다.")
} else {
println("name변수를 초기화해주세요.")
}
}
상수의 지연초기화
상수를 사용하는 시점에 값을 대입하고 초기화 수행된다.
fun main(){
var s1 = Student()
s1.name = "참새"
s1.displayInfo()
s1.age = 10
s1.displayInfo()
}
class Student {
lateinit var name:String
var age:Int = 0
val address: String by lazy {
println("address 초기화")
"seoul"
}
fun displayInfo() {
println("이름은: ${name} 입니다.")
println("나이는: ${age} 입니다.")
println("주소는: ${address} 입니다.")
}
}
널 세이프티
코틀린의 Null 안정성을 향상시켜줄 수 있다.
Null 예외는 프로그램의 가용성을 저하시키는 치명적인 오류이다. 안전한 설계를 위해 자료형에 Null 여부를 명시할 수 있다.
코틀린의 널 세이프티 방법
Null 예외로부터 안전한 설계를 위한 다양한 키워드들을 지원한다.
?,!!,?.,?:를 이용해서 Null 예외로부터 벗어나려고 하며 강제로 null이 아니라고 하는 !!는 최대한 사용을 지양하는 편이 좋다.
각 의미를 간략히 설명하자면,
?
널을 가질 수 있다.
?.
널 아닐 때만 출력 가능 널이 아닐때는 그 문자열 그대로 출력한다.
?:
엘비스 연산자라고 하며, 널 아닐 때와 그럴 때를 구별 할 수 있다. 널 일 때 널이 아닌 다른 문자열으로 대체해서 출력 가능하다.
조금씩 배웠던 것들을 되새감질 할 수 있게 해준다,,, ㅠㅠ
공부 파이팅 하자 다음엔 내가 다 쓸수있도록
'코틀린' 카테고리의 다른 글
TIL 20231213 (0) | 2023.12.13 |
---|---|
TIL 20231212 (0) | 2023.12.12 |
WIL 20231209 (0) | 2023.12.09 |
TIL 20231208 (0) | 2023.12.08 |
TIL 20231207 (1) | 2023.12.07 |