051 = = =, != = 연산자
String 타입의 리터럴로 이루어진 표현식에 한해서 참조변수에 동일한 문자열을 저장하면 컴파일러는 매번 새로운 문자열을 생성하지 않고 하나의 문자열을 가리키도록 만든다. 코틀린의 === 연산자는 자바의 == 연산자와 같다.
fun main(args: Array<String>)
{
var a = "one"
var b = "one"
println(a === b)
b = "on"
b += "e"
println(a !== b)
b = a
println(a === b)
}
결과
true
true
true
052 멤버 함수(Member Function)
클래스에 내장된 함수를 말한다.
fun main(args: Array<String>)
{
val building = Building()
building.name = "A 오피스텔"
building.date = "2017-12-13"
building.area = 120 * 8
building.print()
}
class Building
{
var name ="" // 건물명
var date = "" // 건축일자
var area = 0 // 면적 (㎡)
fun print()
{
println("이름: " + this.name)
println("건축일자: " + this.date)
println("면적: ${this.area} ㎡")
}
}
결과
이름: A 오피스텔
건축일자: 2017-12-13
면적: 960 ㎡
053 프로퍼티와 멤버 함수의 매개변수 이름이 중복될 때
class AAA
{
var num = 15
fun memberFunc(num: Int)
{
println(num)
println(this.num)
}
}
fun main(args: Array<String>)
{
val a = AAA()
a.memberFunc(53)
}
결과
53
15
054 생성자(Constructor)와 초기화(Initializer) 블록
class Person constructor(name: String, age: Int)
{
val name: String
val age:Int
init
{
this.name = name
this.age = age
}
}
fun main(args: Array<String>)
{
val person = Person("홍길동", 46)
println("이름: ${person.name}")
println("나이: ${person.age}")
}
결과
이름: 홍길동
나이: 46
055 init 블록 나누어 쓰기
class Size(width: Int, height: Int)
{
val width = width
val height: Int
init
{
this.height = height
}
val area: Int
init
{
area = width * height
}
}
fun main(args: Array<String>)
{
val size = Size(10, 50)
println(size.area)
}
결과
500
056 생성자와 프로퍼티 한 번에 쓰기
매개변수 앞에 val, var 키워드를 붙이면 동일한 이름의 프로퍼티가 같이 선언된다. 생성자 매개변수에 들어온 인수가 프로퍼티의 초기값이 된다.
class Car(val name: String, val speed: Int = 0)
fun main(args: Array<String>)
{
val car = Car("My Car")
println(car.name)
println(car.speed)
}
결과
My Car
0
057 보조 생성자(Secondary Constructor)
클래스 내부에 오는 생성자, 여러 개가 올 수 있다.
class Time(val second: Int)
{
init
{
println("init 블록 실행 중")
}
// 보조 생성자 1
constructor(minute: Int, second: Int) : this(minute * 60 + second)
{
println("보조 생성자 1 실행 중")
}
// 보조 생성자 2
constructor(hour: Int, minute: Int, second: Int) : this(hour * 60 + minute, second)
{
println("보조 생성자 2 실행 중")
}
init
{
println("또 다른 init 블록 실행 중")
}
}
fun main(args: Array<String>)
{
println("${Time(15, 6).second} 초")
println("${Time(6, 3, 17).second} 초")
}
결과
init 블록 실행 중
또 다른 init 블록 실행 중
보조 생성자 1 실행 중
906 초
init 블록 실행 중
또 다른 init 블록 실행 중
보조 생성자 1 실행 중
보조 생성자 2 실행 중
21797 초
058 프로퍼티와 Getter/Setter
프로퍼티는 실제로 저장되는 공간(field), 저장된 값을 읽으려고 할 때 호출되는 함수는 Getter 값을 저장하려고 할 때 호출되는 함수는 Setter로 이루어져 있다. 코틀린에서는 프로퍼티에 디폴트 getter/setter가 포함이 되어있기 때문에 따로 만들 필요가 없다. getter/setter의 동작을 커스터마이징 하고 싶다면 별도로 정의를 해야 한다.
fun main(args: Array<String>)
{
val person = Person()
person.age = -30
println(person.age)
}
class Person
{
var age: Int = 0
get()
{
return field
}
set(value)
{
field = if (value >= 0) value else 0
}
}
결과
0
059 연산자 오버로딩(Operator Overloading)
fun main(args: Array<String>)
{
val pt1 = Point(3, 7)
val pt2 = Point(2, -6)
val pt3 = pt1 + pt2
val pt4 = pt3 * 6
val pt5 = pt4 / 3
pt3.print()
pt4.print()
pt5.print()
}
class Point(var x: Int = 0, var y: Int = 0)
{
operator fun plus(other: Point): Point
{
return Point(x + other.x, y + other.y)
}
operator fun minus(other: Point): Point
{
return Point(x - other.x, y - other.y)
}
operator fun times(number: Int): Point
{
return Point(x * number, y * number)
}
operator fun div(number: Int): Point
{
return Point(x / number, y / number)
}
// 좌표 값을 출력한다.
fun print()
{
println("x: $x, y: $y")
}
}
결과
x: 5, y: 1
x: 30, y: 6
x: 10, y: 2
060 번호 붙은 접근 연산자(Indexed Access Operator) [ ]
fun main(args: Array<String>)
{
val person = Person("Kotlin", "2016-02-15")
println(person[0])
println(person[1])
println(person[-1])
person[0] = "Java"
println(person.name)
}
class Person(var name: String, var birthday: String)
{
operator fun get(position: Int): String
{
return when (position) {
0 -> name
1 -> birthday
else -> "알 수 없음"
}
}
operator fun set(position: Int, value: String)
{
when (position)
{
0 -> name = value
1 -> birthday = value
}
}
}
결과
Kotlin
2016-02-15
알 수 없음
Java
'개발자 > kotlin 코틀린' 카테고리의 다른 글
kotlin 05. 파일분리, 패키지, import, object, heap, class (0) | 2022.08.15 |
---|---|
kotlin 04. 매개변수, 인수, 범위, 함수 오버로딩, 스택 예제 코드 (1) | 2022.08.12 |
kotlin 03. 제어문과 함수 기초 (0) | 2022.04.21 |
kotlin 02. 문자열, 연산자, 제어문 (0) | 2022.04.20 |
kotlin 기본 예제 01 (0) | 2022.03.31 |
Kotlin 입문 참고 자료 (0) | 2022.02.10 |
Kotlin 핵심 개념 알아보기 2 (0) | 2022.02.08 |
Kotlin 핵심 개념 알아보기 1 (0) | 2022.02.07 |
더욱 좋은 정보를 제공하겠습니다.~ ^^