외우지말고 이해하라.

외우는 것 보단 이해해서 내것으로 만들어 활용하기

Another-Develop/kotlin

01 코틀린 - 클래스, 데이터 클래스, 타입추론 , Nullable

hyg4196 2021. 4. 16. 09:53
반응형

https://pl.kotl.in/7r-P1J0pP

 

Kotlin Playground: Edit, Run, Share Kotlin Code Online

 

play.kotlinlang.org

 

1. 클래스

fun main(){
 	val article1 = Article()
    article1.id = 1
    article1.regDate = "2020-12-12 12:12:12"
    article1.title = "제목1"
    println("id : ${article1.id}, title : ${article1.title}")

    val article2 = Article()
    article2.id = 2
    article2.regDate = "2020-12-12 12:12:12"
    article2.title = "제목2"
	println("id : ${article2.id}, title : ${article2.title}")
    
    val article3 = Article()
    article3.id = 3
    article3.regDate = "2021-12-12 12:12:12"
    article3.title = "제목3"
    println("id : ${article3.id} , title : ${article3.title}")
    
    
}

class Article{
//  var 변수 , val 불변
    var id:Int = 0;
    var regDate:String = "";
    var title:String = "";
    
}

 

fun main(){
    val person01 = Person()
    person01.name ="철수"
    person01.age = 23
    person01.gen ="남자"
    person01.loc="철원"
    println("첫번째 사람은 ${person01.name}/${person01.gen}/${person01.age}살/${person01.loc}")
    
    val person02 = Person()
    person02.name ="영희"
    person02.age = 22
    person02.gen ="여자"
    person02.loc="남원"
    println("두번째 사람은 ${person02.name}/${person02.gen}/${person02.age}/${person02.loc}")

    
    val person03 = Person()
    person03.name ="영수"
    person03.age = 25
    person03.gen ="남자"
    person03.loc="진천"
    println("세번째 사람은 ${person03.name}/${person03.gen}/${person03.age}/${person03.loc}")

}

class Person{
    var name:String =""
    var age:Int = 0
    var gen:String = ""
    var loc:String = ""
}

 

 

2. Data class

 

fun main(){
    val person01 = Person()
    person01.id = 1
    person01.name ="철수"
    person01.age = 23
    person01.gen ="남자"
    person01.loc="철원"
    println("첫번째 사람은 ${person01.name}/${person01.gen}/${person01.age}살/${person01.loc}")
    println(person01)
    println(person01.introduceMsg())
    println()

    val person02 = Person()
    person02.id = 2
    person02.name ="영희"
    person02.age = 22
    person02.gen ="여자"
    person02.loc="남원"
    println("두번째 사람은 ${person02.name}/${person02.gen}/${person02.age}살/${person02.loc}")
    println(person02)
    println(person02.introduceMsg())
    println()

    val person03 = Person()
    person03.id = 3
    person03.name ="영수"
    person03.age = 25
    person03.gen ="남자"
    person03.loc="진천"
    println("세번째 사람은 ${person03.name}/${person03.gen}/${person03.age}살/${person03.loc}")
    println(person03)
    println(person03.introduceMsg())
    println()

    var a:String = "테스트파일"
    var b:String = "테스트파일"


//    data class
    println("--------- 데이터 클래스 -------------")

    val person02_01 = Person02(1,"한우",26,"남자","원주");
    println(person02_01)
    println(person02_01.introduceMsg02())
}

class Person{
    var id:Int=0
    var name:String =""
    var age:Int = 0
    var gen:String = ""
    var loc:String = ""

    fun introduceMsg ():String = "자기소개 : 안녕, 나는 ${name}! ${age}살 ${gen}이고 ${loc} 출신이야!";


    override fun toString(): String {
        return "정보 ${id} :  ${name}/${gen}/${age}살/${loc}";
    };
}

// 데이터 클래스
data class Person02(var id:Int, // 주 생성자
               var name:String, // 주 생성자
               var age:Int,     // 주 생성자
               var gen:String,  // 주 생성자
               var loc:String   // 주 생성자

){
    fun introduceMsg02():String ="데이터 클래스 자기소개 : 안녕하세요, 저는 ${name}! ${age}살 ${gen}이고 ${loc} 출신입니다.";

}

 

 

3. 타입 추론

 

코틀린에서는 타입을 명시하지 않아도, 변수가 선언될 때 할당된 값의 형태로 어떤 자료형을 가지는지 추론해준다.

   ((반드시 특정 자료형으로 지정해야하는 상황이 아니라면, 타입추론 기능을 이용하여 코드량을 줄일 수 있다.))

 

 코틀린은 변수 선언시 타입을 명시한다면 var name:String = "이름" 이런식으로 표현되지만

var name = "이름" 이런식으로 표기할 경우 타입이 추론되어 생략된 표기로도 사용가능하다.

 

val value:String = "my string" 
val value = "my string" // Type 생략 가능

 

 

 

4. nullable

 

변수 타입 옆에 ?를 붙이면 null을 할당할 수 있는 프로퍼티이고

 ?가 붙지 않으면 null이 허용되지 않는 프로퍼티를 의미

var nullable: String? = "nullable"
var nonNullable: String = "non-Nullable"

nullable 프로퍼티는 null을 할당할 수 있지만, nonNullable에 null을 할당하려고 하면 컴파일 에러가 발생

 

 

 

전체 코드

fun main(){
    val person01 = Person()
    person01.id = 1
    person01.name ="철수"
    person01.age = 23
    person01.gen ="남자"
    person01.loc="철원"
    println("첫번째 사람은 ${person01.name}/${person01.gen}/${person01.age}살/${person01.loc}")
    println(person01)
    println(person01.introduceMsg())
    println()

    val person02 = Person()
    person02.id = 2
    person02.name ="영희"
    person02.age = 22
    person02.gen ="여자"
    person02.loc="남원"
    println("두번째 사람은 ${person02.name}/${person02.gen}/${person02.age}살/${person02.loc}")
    println(person02)
    println(person02.introduceMsg())
    println()

    val person03 = Person()
    person03.id = 3
    person03.name ="영수"
    person03.age = 25
    person03.gen ="남자"
    person03.loc="진천"
    println("세번째 사람은 ${person03.name}/${person03.gen}/${person03.age}살/${person03.loc}")
    println(person03)
    println(person03.introduceMsg())
    println()

    var a:String = "테스트파일"
    var b:String = "테스트파일"


//    data class
    println("--------- 데이터 클래스 -------------")

    val person02_01 = Person02(1,"한우",26,"남자","원주");
    println(person02_01)
    println(person02_01.introduceMsg02())

    println("------ null able -------")
//     val person22 : Person
//    person22 = null
//    Person 이 들어가야 하기때문에 null 이 들어가면 오류 발생  -- ?를 붙이면 사용가능

    val person22 : Person?
    person22 = null

// 단점 : nullpointerexception 발생할 수 있음
}

class Person{
    var id:Int=0
    var name:String =""
    var age:Int = 0
    var gen:String = ""
    var loc:String = ""

    fun introduceMsg ():String = "자기소개 : 안녕, 나는 ${name}! ${age}살 ${gen}이고 ${loc} 출신이야!";


    override fun toString(): String {
        return "정보 ${id} :  ${name}/${gen}/${age}살/${loc}";
    };
}

// 데이터 클래스
data class Person02(var id:Int, // 주 생성자
               var name:String, // 주 생성자
               var age:Int,     // 주 생성자
               var gen:String,  // 주 생성자
               var loc:String   // 주 생성자

){
    fun introduceMsg02():String ="데이터 클래스 자기소개 : 안녕하세요, 저는 ${name}! ${age}살 ${gen}이고 ${loc} 출신입니다.";

}

 

반응형