반응형
🔎코틀린 데이터 클래스(data class)
- 자바에서 POJO(Plain Old Java Object)라고 불리는 데이터 클래스를 코틀린에서는 아주 간편한 문법으로 제공한다.
- data class 키워드로 생성하여 생성자에 파라미터만 정의해주면 된다.
- 기본 생성자의 파라미터는 val , var 여야만 한다.
- 기본 생성자에는 최소 1개 이상의 파라미터가 있어야 한다.
- 데이터 클래스는 abstract, open, sealed, inner가 되면 안 된다.
1
2
3
4
5
6
7
8
9
10
11
|
data class Ticket(val companyName:String, val name:String, var date:String, val seatNumber:Int)
class TicketNomal(val companyName:String, val name:String, var date:String, val seatNumber:Int)
//toString(), hashCode(), equals(), copy()
fun main(){
val ticketA = Ticket("koreanAir", "jungahYeom", "2022-02-01", 14)
val ticketB = TicketNomal("koreanAir", "archive", "2022-02-01", 14)
println(ticketA)
println(ticketB)
}
|
cs |
- 출력 결과를 보면 데이터 클래스와 일반 클래스의 차이점을 좀더 쉽게 알 수 있다.
🔎코틀린 companion object
- private 프로퍼티, 메소드를 읽어오는 역할(자바의 static 역할)
- 이름을 지어줄 수 있다.
- 인터페이스 구현 및 상속도 가능하다.
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
|
//다른 곳에서 사용하지 못하도록 private 선언
class Book private constructor(val id:Int, val name:String){
companion object BookFactory:IdProvider{
override fun getId(): Int {
return 444
}
val myBook = "new book"
fun create():Book = Book(getId(), myBook)
}
}
interface IdProvider{
fun getId():Int
}
fun main(){
val book:Book = Book.create()
val bookId = Book.BookFactory.getId()
/*
companion object
1. 생략 가능
2. private 프로퍼티, 메소드 읽어오는 역할(자바의 static 역할)
3. 이름 지어줄 수 있음.(ex)BookFactory
4. 상속 가능
*/
println("${book.id} ${book.name}")
}
|
cs |
🔎object 키워드를 이용한 싱글톤 패턴 구현
- 싱글톤 패턴 : 인스턴스를 1개 생성하여 계속 재사용하는 패턴, 불필요한 메모리 사용 줄임.
- 기존 자바에서는 싱글톤 패턴을 위해 복잡한 코드가 필요했다. (변수 선언, instance 초기화 체크, 반환...)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
public class SingletonClass{
private static SingletonClass instance;
private String sampleString = "Sample String";
private SingletonClass(){}
public static synchronized SingletonClass getInstance(){ //instance를 가져오는 메소드
if(instance == null){
instance = new SingletonClass();
}
return instance;
}
}
|
cs |
- 코틀린에서는 object 키워드 단 하나만으로 싱글톤 패턴을 간편하게 구현할 수 있다.
- But, 자바 코드에서는 getInstance()가 처음 호출될 때 초기화되어 메모리상에 올라가지만,
- 코틀린 코드에서는 프로세스가 메모리상에 올라갈 때 곧바로 생성되어 올라간다.
- =>클래스가 사용되지 않을 때에도 메모리상에 인스턴스가 올라가있다는 것을 뜻한다.
- by lazy(지연 생성) 키워드를 통해 메모리를 최적화할 수 있다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
//Singleton Pattern
//1번 객체 생성 후 계속 사용, 불필요한 메모리 사용 줄임.
object CarFactory{
val cars : MutableList<Car> = mutableListOf<Car>()
fun makeCar(horsePower: Int):Car{
val car = Car(horsePower)
cars.add(car)
return car
}
}
data class Car(val horsePower : Int)
fun main(){
val car:Car = CarFactory.makeCar(10)
val car2:Car = CarFactory.makeCar(200)
println(car)
println(car2)
println(CarFactory.cars.size.toString())
}
|
cs |
반응형
'💻 my code archive > 🎈Kotlin' 카테고리의 다른 글
Kotlin 공부 기록(6) - 심리테스트 앱 만들기 (Fragment, Navigation 사용) (0) | 2022.02.06 |
---|---|
Kotlin 공부 기록(5) - 안드로이드 레이아웃(layout) 종류 (0) | 2022.02.06 |
Kotlin 공부 기록(3) - 람다식(람다 표현식), 확장함수, return (0) | 2022.02.01 |
Kotlin 공부 기록(2) - 클래스, 생성자, 상속 (0) | 2022.01.27 |
Kotlin 공부 기록(1) - 기본 문법 정리, 함수, 조건식, val과 var, 코틀린 null 체크 (0) | 2022.01.26 |