핀수로그
  • [kotlin] 코틀린 기초 문법 다지기 - 2. class
    2022년 06월 12일 18시 03분 00초에 업로드 된 글입니다.
    작성자: 핀수
    728x90
    반응형

    해당 강의를 들으며 작성된 것입니다.

     

    [무료] 코틀린 3강으로 끝내기 feat. 안드로이드 개발 - 인프런 | 강의

    3강으로 짧게 끝내는 코틀린 문법! 코틀린 기초 문법과 안드로이드 기초 프로그래밍은 물론, 직접 안드로이드 앱도 만들어보세요!, - 강의 소개 | 인프런...

    www.inflearn.com

     

     

    Class

    👉🏻 코틀린은 자바와 달리 클래스 이름과 파일의 이름이 달라도 된다.

    👉🏻 한 파일 안에 여러 클래스를 생성할 수 있다.

     

    기본 형태

    👉🏻 코틀린은 new 키워드가 없다.

    class Human {
    	val name = "spin"
    	fun eatingCake(){
            println("This is so yummy")
        }
    }
    
    fun main(){
        val human = Human()
        human.eatingCake()
        println("My name is ${human.name}.)
    }

     

    생성자 이용하기

    생성자에서 프로퍼티를 넘겨주려고 하는 경우 자바는 아래와 같이 사용한다.

    // 프로퍼티가 있는 경우
    public Human(name, int age){
        this.name = name;
        this.age = age;
    }

    코틀린의 경우는 아래와 같다.

    constructor 키워드를 사용한다.

    class Human constructor(name: String) {
    	val name = name
    	fun eatingCake(){
            println("This is so yummy")
        }
    }
    
    fun main(){
        val human = Human("spin") // 이름을 넣어주지 않으면 에러가 생긴다.
        human.eatingCake()
        println("My name is ${human.name}.)
    }

    프로퍼티의 name 과 생성자의 name 이 같으므로

    생성자 constructor 에 한번만 써도 무방하다.

    그리고 constructor 또한 생략해도 된다.

    class Human (val name: String) {
    	fun eatingCake(){
            println("This is so yummy")
        }
    }
    
    fun main(){
        val human = Human("spin") // 이름을 넣어주지 않으면 에러가 생긴다.
        human.eatingCake()
        println("My name is ${human.name}.)
    }

    프로퍼티의 디폴트 값도 줄 수 있다.

    class Human (val name: String = "홍길동") {
    	fun eatingCake(){
            println("This is so yummy")
        }
    }
    
    fun main(){
        val human = Human("spin") 
        var human2 = Human() // 오류가 생기지 않는다.
        human.eatingCake()
        println("My name is ${human1.name}.) // My name is 홍길동.
    }

     

    init

    객체가 생성될 때 수행해야할 것들을 정의하고 싶다면

    자바의 경우 생성자에서 선언을 했지만

    코틀린에서는 init 블럭을 사용한다.

    init 은 주생성자의 일부이다.

    class Human (val name: String = "홍길동") {
    
        // 생성될 때 하고 싶은 작업 정의 (주생성자)
        init {
            println("New Human has been born")
        }
        
    	fun eatingCake(){
            println("This is so yummy")
        }
    }
    
    fun main(){
        val human = Human("spin") 
        var human2 = Human() // 오류가 생기지 않는다.
        human.eatingCake()
        println("My name is ${human1.name}.) // My name is 홍길동.
    }

     

    오버로딩

    다른 프로퍼티도 받을 경우 (오버로딩) 부생성자를 만들어준다.

    부생성자를 만들 때는 주생성자의 위임을 받아야한다.

    : this(name) 이 그것과 같다.

    class Human (val name: String = "홍길동") {
    
        // 생성될 때 하고 싶은 작업 정의 (주생성자)
        init {
            println("New Human has been born")
        }
        
        constructor(name: String, age: Int) : this(name){
            println("my name is $name and $age years old")
        }
        
        fun eatingCake(){
            println("This is so yummy")
        }
    }
    
    fun main(){
        val human = Human("spin") 
        var human2 = Human() // 오류가 생기지 않는다.
        human.eatingCake()
        println("My name is ${human1.name}.) // My name is 홍길동.
    }

     

    상속

    👉🏻 코틀린의 클래스는 기본적으로 final

    👉🏻 같은 파일 내에 있어도 접근을 할 수가 없다.

    👉🏻 open 이라는 예약어를 통해서 접근해야한다.

    open class Human(){
    	...
    }
    
    class Korean : Human(){
        override fun singASong(){
            super.singASong()
            println("my name is $name lululu")
        }
    
    }

     

    override

    오버라이딩 또한 open 예약어를 통해 접근한다.

    부모의 메서드도 사용할 경우 super 예약어를 통하면 된다. (자바와 같음)

    open class Human(){
    	open fun singASong(){
        	println("lalala")
        }
    }
    
    class Korean : Human(){
        override fun singASong(){
            super.singASong()
            println("랄랄라")
        }
    
    }

     

    프로퍼티 또한 부모의 것을 사용하고 싶다면

    override 예약어를 사용해준다.

    마찬가지로 해당 프로퍼티도 open 으로 선언된 것 이어야 한다.

    class Korean(override val name : String) : Human(){
        override fun singASong(){
            super.singASong()
            println("my name is $name lululu")
        }
    
    }

     

     

     

     

    728x90
    반응형
    댓글