Class와 Constructor

김건우·2023년 12월 4일

개발 공부

목록 보기
1/13
post-thumbnail

참고 : Kotlin docs

https://kotlinlang.org/docs/classes.html

Class

클래스 기본 모양

class Person { /.../ }
class 클래스 이름 {클래스 내용} 으로 구성된다.

class Empty
클래스 내용이 없으면, {클래스 내용} 을 생략할 수 있다.

Constructor

생성자

주 생성자

  • 코틀린의 Class는 한 개의 주 생성자를 갖는다.
  • 주 생성자는 Class 헤더 부분의 클래스 이름 뒤에 선언된다.
  • 주 생성자를 선언하지 않으면, 코틀린에서 자체적으로 만들어준다.
  • 주 생성자클래스 인스턴스 생성 시 항상 호출된다.

class Person constructor(firstName: String) { /.../ }
class 클래스 이름 주 생성자 {클래스 내용}

  • constructor*접근제어자(visibility modifiers) 가 없으면 다음과 같이 생략할 수 있다.

    class Person(firstName: String) { /.../ }

    접근제어자 : public, private, protected, internal 4가지로
    				접근제어자가 붙어 있는 해당 요소에의 접근을 제한한다.
  • Class의 인스턴스 생성 과정을 더 제어하고 싶으면 Class 내부에 init 블록으로 생성자 코드를 추가할 수 있다.

    class Person constructor(firstName: String) {
    	init { 
        	println("First initializer block that prints $firstName");
        }
    }
    val person = Person("Kim")

    결과 : First initializer block that prints Kim
    Person클래스의 인스턴스를 생성하면서 주 생성자(init블록)이 자동적으로 실행된다.

  • init블록을 여러 개 쓰면 위에서부터 순서대로 실행된다.

    class Person constructor(firstName: String) {
    	init { 
        	println("First initializer block that prints $firstName")
        }
        init {
        	println("Second initializer block that prints $firstName")
        }
    }
    val person = Person("Kim")

    결과:
    First initializer block that prints Kim
    Second initializer block that prints Kim

부 생성자

  • Class는 여러 개의 부 생성자를 가질 수 있다.
  • Class의 내용 안에 constructor(받을 프로퍼티) {내용}으로 정의한다.
  • Class가 받을 프로퍼티(인자)의 숫자, 종류를 각각 다르게 정의할 수 있다.
  • 부 생성자가 호출되더라도, 주 생성자가 자동적으로 먼저 호출되고 이후에 부 생성자가 호출된다.
    class Constructors {
        init {
            println("Init block")
        }
        constructor(i: Int) {
            println("Constructor $i")
        }
    }
    val con = Constructors(1)
    결과 : 
    Init block
    Constructor 1
profile
즐겁게

0개의 댓글