[TIL/Kotlin] 코틀린 고급문법_객체 선언과 동반자 객체
·
TIL/Kotlin
1. 객체 선언 프로그램 전체에서 공유할 수 있는 하나뿐인 객체를 만드는 방법이다. 코틀린에서는 자바에서 사용하던 싱글톤 패턴 코드를 사용하지 않고도 object 키워드를 사용하면 싱글톤으로 생성할 수 있다. 클래스를 선언하듯이 객체를 선언하면 식별자로 객체에 바로 접근이 가능하다. object Person { var name: String = "" var age: Int = 0 fun print(){ println(name) println(age) } } fun main() { // 식별자 Person으로 객체에 바로 접근 가능 Person.name = "Singleton" Person.age = 45 Person.print() // Person은 타입 이름이기도 하기 때문에 아래와 같은 코드도 가능 ..
[TIL/Kotlin] 코틀린 중급문법_접근지정자, 접근지정자 오버라이딩, 확장 함수, 확장 프로퍼티
·
TIL/Kotlin
1. 접근 지정자 코틀린에서 선언 가능한 요소(함수, 전역변수, 클래스, 프로퍼티, 멤버함수 등) 중, 일부 요소에는 접근 권한이라는 것을 지정할 수 있다. 이를 접근 지정자 또는 가시성 지정자라고 한다. 코틀린에서 접근 지정자는 총 4개가 있다. class Rectangle(private val width: Int, private val height: Int) { val area: Int get() = width * height } fun main() { val rect = Rectangle(5, 7) // println(rect.width) // 에러 발생 println(rect.area) } 다음과 같은 곳에 접근 지정자를 붙일 수 있다. 접근 지정자 class 식별자 접근 지정자 construct..
[TIL/Kotlin] 코틀린 중급문법_스마트 캐스팅, is 연산자, as 연산자와 다운캐스팅
·
TIL/Kotlin
1. 스마트 캐스팅 스마트 캐스팅이란? 특정 조건을 만족하는 경우, 컴파일러는 변수의 타입을 다른 타입으로 자동 캐스팅한다. fun main() { val number: Int?= null val number2 = 1225 checkNull(number) // null이 들어왔습니다. checkNull(number2) // 1225 } fun checkNull(any: Any?) { if(any == null) { println("null이 들어왔습니다") return } // any가 null 값이 아니라고 완벽히 추론이 가능하므로, // any?.toString()이 아닌 any.toString()으로 호출이 가능 println(any.toString()) } 2. is 연산자 is 연산자로 참조 변..
[TIL/Kotlin] 코틀린 중급문법_Nothing타입, Nullable, ?. 연산자, !! 연산자, ?: 연산자
·
TIL/Kotlin
1. Nothing 타입 Nothing 타입은 실행 흐름이 도달할 수 없는 구역을 나타내기 위한 특수 타입이다. fun throwing(): Nothing = throw Exception() fun main() { println("start") // Int 타입의 변수에 Nothing 타입의 표현식을 대입 // Nothing 타입은 어떠한 타입과도 호환되기 때문에 이러한 코드가 가능함 // Int 타입에 Nothing 타입을 대입한다고 해도, throwing 함수가 호출되면 곧바로 예외가 던져져 프로그램이 강제 종료되므로 문제가 되지 않는다. val i: Int = throwing() println(i) validate(-2) /* Exception in thread "main" java.lang.Exc..
[TIL/Kotlin] 코틀린 중급문법_예외 처리, 예외 던지기
·
TIL/Kotlin
1. 예외 처리 예외를 처리하지 않으면 프로그램은 무조건 강제 종료된다. 예외를 처리하여 프로그램이 강제 종료되는 것을 막아야한다. 예외가 발생할 가능성이 있는 부분을 try 블록으로 감싸고 try 블록 바로 아래에 예외가 발생했을 때 대신 실행할 코드를 catch 블록으로 지정한다. e는 예외 객체를 가리키는 참조 변수이고, 아래 예제에 보이는 NumberFormatException은 예외 타입이다. finally 블록은 예외 발생 여부와 상관 없이 무조건 실행되는 블록이다. fun main() { try { val str = "abcd" val num = str.toInt() println(num) // e는 예외 객체를 가리키는 참조 변수이고, NumberFormatException은 예외 타입 }..
[TIL/Kotiln] 코틀린 중급문법_생성자와 초기화(init)블록, 보조생성자, Getter/Setter, 연산자 오버로딩, 번호붙은접근연산자, 호출연산자, in연산자, 멤버함수의 중위표기법, 상속, 업캐스팅, 오버라..
·
TIL/Kotlin
1. 생성자와 초기화 블록 생성자는 다음처럼 정의하며, constructor 키워드는 생략해도 상관 없다. class 클래스 이름 constructor(생성자의 매개변수 선언) { } 아래는 예제 코드이다. val 프로퍼티를 선언하고 있으며, init 블록(초기화 블록) 안에서 프로퍼티를 초기화하고 있다. class Person constructor(name: String, age: Int) { // val 프로퍼티 선언(초기화하지않음) val name: String val age: Int // 초기화 블록 // init 블록 안에서 프로퍼티를 초기화하면 프로퍼티를 선언과 동시에 초기화하지 않아도 됨 init { this.name = name this.age = age } } fun main(args: ..
[TIL/Kotlin] 코틀린 중급문법_객체(Object), 클래스(Class), ===와 !== 연산자, 힙(Heap) 영역의 존재 이유
·
TIL/Kotlin
1. 객체(Object) 객체란, 상자, 사람, 가방 등 우리가 인식할 수 있는 물체 또는 물건을 뜻한다. 객체들은 각자의 고유한 속성과 동작을 갖고 있다. SW 관점에서 객체란, 서로 연관 있는 변수(속성)들을 묶어놓은 데이터 덩어리를 뜻한다. 코틀린에서 object는 {} 중괄호로 시작과 끝을 나타낸다. 이 사이에 object에 포함시킬 변수들을 선언한다. object에 포함된 변수들을 선언과 동시에 초기화 하고 있으며, name, age처럼 object에 포함된 변수들은 프로퍼티(property)라고 부른다. fun main(args: Array): Unit { // person 변수에 object(객체)를 저장 val person = object { /* object에 포함된 변수들은 선언과 동시..
[TIL/Kotlin] 코틀린 기초문법_함수, Unit 타입, 디폴트 인수와 가변 인수
·
TIL/Kotlin
1. 함수(Function) 함수를 선언하는 방식은 아래와 같다. fun 식별자(): 반환타입 { 함수에 포함시킬 문장 } 샘플 코드를 살펴보자 함수 블록의 문장이 하나일 경우 한 줄로 축약할 수 있다. 타입을 추론할 수도 있기 때문에 함수의 반환 타입까지 생락이 가능하다. fun main(args: Array): Unit { println(myFunction()) println(myFunction() + 10) } fun myFunction(): Int { val a = 3 val b = 6 println("a: " + a + ", b: " + b) return a + b } // 함수 블록의 문장이 하나일 경우 한 줄로 축약할 수 있다. fun function(): Double { return 3.0..
[TIL/Kotlin] 코틀린 기초문법_흐름 제어(조건문과 반복문, Label)
·
TIL/Kotlin
1. 조건문 - if 와 if-else, if와 else의 중첩 if(조건)에서 조건이 true인 경우 if 문 안으로 들어와 if 문 안에 있는 문장을 실행시킨다. fun main(args: Array): Unit { var a = 15 val b = 11 if(a > b) { println("if 안으로 들어옴") a -= b } println(a) } if(조건)이 true인 경우 if 문 안에 있는 문장을 실행시키고 false인 경우 else 안에 있는 문장을 실행시킨다. fun main(args: Array): Unit { val a = 10 val b = 5 if(a b) println("a가 크다") else..