KOTLIN 객체지향 프로그래밍(1)

도니·2022년 9월 21일
0

🤍 클래스와 생성자

✅ 클래스 선언

- 클래스는 class 키워드로 선언

- 클래스는 본문에 입력하는 내용이 없다면 {} 생략

- 클래스의 멤버를 생성자, 변수, 함수, 클래스로 구성

- 생성자는 constructor라는 키워드로 선언하는 함수

- 객체를 생성해 사용하며 객체로 클래스의 멤버에 접근

- 객체를 생성할 때 new 키워드를 사용하지 않음

// 클래스
class ClassBasic{
    // 클래스의 멤버
    // 변수
    var name = "sik"

    // 함수
    fun some(){
        print("name : ${name}")
    }

    // 생성자
    constructor(name:String){
        this.name = name
    }
    // 내부 클래스
    class innerClass{}
    
    // 생성자
    // 주 생성자와 보조 생성자로 구분
    // 주 생성자는 필수는 X, 한 클래스에 하나만 생성 가능

    // 주 생성자 선언방법 1 - constructor 키워드 선언
    class Tester constructor(){}

    // 주 생성자 선언방법 2 - constructor 키워드 생략
    class Tester2(){}

    // 주 생성자 선언방법 3 - 매개변수가 없는 주 생성자 자동 선언
    class Tester3{}
}

✅ 주 생성자

- 생성자를 주 생성자와 보조 생성자로 구분

- 주 생성자는 constructor 키워드로 클래스 선언부에 선언함

- 주 생성자 선언은 필수는 아니며, 한 클래스에 하나만 가능함

- constructor 키워드는 생략 가능

주 생성자의 본문 - init 영역

- init 키워드를 이용해 주 생성자의 본문을 구현할 수 있음

- init 키워드로 지정한 영역은 객체를 생성할 때 자동으로 실행

class User(name: String, count: Int){
    // init 키워드 - 주생성자 본문 구현
    // 객체가 생성될 때 자동으로 실행
    init {
        println("I am init")
    }
}
fun main(){
	val user = User("you", 10)
}

생성자의 매개변수를 클래스의 멤버 변수로 선언하는 방법

- 생성자의 매개변수는 기본적으로 생성자에서만 사용할 수 있는 지역 변수

class User(name: String, count: Int){
    init {
        println("객체 생성시 자동으로 실행 : ${name}, ${count}")
    }
}

매개변수를 var나 val 키워드로 선언하면 클래스의 멤버 변수

class User(name: String, count: Int){
    var name2 = name
    var count2 = count
    fun test(){
        // 생성자 매개변수를 함수에서 사용 1
        // 함수 내부에서 지역변수를 선언하여, 생성자 매개변수를 할당하여 사용
        println("테스트 함수에서 생성자의 매개변수 호출 : ${name2}, ${count2}")
    }
}
// 생성자 매개변수를 함수에서 사용 2
// 생성자 매개변수 val 키워드를 사용하여 선언
class User2(val name: String, val count: Int){
    fun test2(){
        println("생성자 매개변수 출력 : ${name}, ${count}")
    }
}

✅ 보조 생성자

- 보조 생성자는 클래스의 본문에 constructor 키워드로 선언하는 함수

- 여러 개를 추가할 수 있음

// 보조 생성자
// 보조 생성자 생성 - 클래스 내부에서 constructor 키워드를 사용
// 여러개를 생성 가능
class User3{
    constructor(name: String){
        println("보조 생성자 1: ${name}")
    }
    constructor(name: String, count: Int){
        println("보조 생성자 2: ${name}, ${count}")
    }
}

보조 생성자에 주 생성자 연결

- 보조 생성자로 객체를 생성할 때 클래스 내에 주 생성자가 있다면 this() 구문을 이용해 주 생성자를 호출

- 역순으로 실행

// 보조 생성자 - 주 생성자 연결
class User4(name: String){
    init {
        println("name: ${name}")
    }
    // 보조 생성자로 객체 생성시
    // 클래스 내에 주 생성자가 있다면, this()구문을 이용해서 생성자를 호출
    constructor(name: String, count: Int):this(name){
        println("보조 생성자, 주 생성자 연결 1 : ${name}, ${count}")
    }

    constructor(name: String, count: Int, email: String):this(name, count){
        println("보조생성자1, 보조생성자2 연결 : ${name}, ${count}, ${email}")
    }
}
profile
내가 보려고 만든 벨로그

0개의 댓글