Kotlin 공부 기록(4) - 데이터 클래스, companion object, object 싱글톤 패턴
my code archive
article thumbnail
반응형

🔎코틀린 데이터 클래스(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
반응형
profile

my code archive

@얼레벌레 개발자👩‍💻

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!

반응형