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 |
취업, 창업의 막막함, 외주 관리, 제품 부재!
당신의 고민은 무엇입니까? 현실과 동떨어진 교육, 실패만 반복하는 외주 계약,
아이디어는 있지만 구현할 기술이 없는 막막함.
우리는 알고 있습니다. 문제의 원인은 '명확한 학습, 실전 경험과 신뢰할 수 있는 기술력의 부재'에서 시작됩니다.
이제 고민을 멈추고, 캐어랩을 만나세요!
코딩(펌웨어), 전자부품과 디지털 회로설계, PCB 설계 제작, 고객(시장/수출) 발굴과 마케팅 전략으로 당신을 지원합니다.
제품 설계의 고수는 성공이 만든 게 아니라 실패가 만듭니다. 아이디어를 양산 가능한 제품으로!
귀사의 제품을 만드세요. 교육과 개발 실적으로 신뢰할 수 있는 파트너를 확보하세요.
캐어랩