본문 바로가기

[Kotlin] 코틀린 기본 - 클래스 'constructor / init / default'

Kotlin, 코틀린 기본, 클래스

Kotlin 코틀린 클래스의 생성자(Constructor) / init (초기화) / 기본값 (Default)

 

 

클래스

  • 클래스와 인스턴스의 개념

     : 클래스 - 붕어빵 틀

       인스턴스(객체) - 붕어빵 실체

  • 자바에 비해 훨씬 간결한 클래스 문법


     : 자바(Java)는 Model의 경우 멤버변수의 Getter/Setter, toString(), equals() 많은 수의 메서드를 선언

    Kotlin에서는 '프로퍼티' 라는 속성의 개념이 멤버변수 + Getter/Setter를 자동으로 만들어줌 (보이지않게)

  • 클래스 선언

     : 
    Kotlin에서 클래스는 기본적으로 public 접근지정자로 선언 (생략가능)
// 기본 클래스 선언, public 생략
class Person {
}

// 인스턴스 생성, Kotlin에서는 new키워드 사용x
var a = Person()

 

  • 생성자

     : 빈 생성자, 기본 생성자
// 빈 생성자(기본), Kotlin - JAVA 비교

// Kotlin
class Person(){		// 방법 1
}
class Person{		// 방법 2 (생성자의 인자가 없을 경우 괄호 생략가능)
}

// Java
public class Person{
	public Person(){
    }
}

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
// 매개변수를 가진 생성자, Kotlin - JAVA 비교

// JAVA
public class Person{
    String name;	// 멤버변수 name
    public Person(String name){	// 생성자 
    	this.name = name;		// name 초기화
    }
}

// Kotlin
// 인자에 var키워드를 붙여주면, 클래스 내부 멤버변수로 저장, 초기화
class Person(var name :String){
}

var a = Person("홍길동")
println(a.name)		// var name은 멤버변수로 저장되어서 게터/세터 함수가 가능

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
// Kotlin - name을 매개변수로 받지만 Person클래스의 멤버변수는 존재x
class Person(name :String) {
}
var a = Person("홍길동")
println(a.name)		// ERROR, name은 멤버변수가 아니어서 미존재

// 생성자로 Field(멤버변수) 초기화 하기
class Person(name :String){		// name인자를 받는 생성자
    var name :String = name;	// 생성자 실행시 초기화 되는 멤버변수
}


           : init 키워드 - 기본생성자가 호출 직후 바로 실행되는 코드블럭
                  : 클래스를 인스턴스화할 때 가장 먼저 초기화 되는 부분

class Person(name:String){
    init {		// 생성자 호출 후 바로 init부분의 코드블럭을 실행
    	println(name)
        println("생성자 호출 직후 바로 초기화하는 함수")
    }
}

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
class Person(name:String){
    var name :String
    var age :Int
    var phone :String
    
    init {		// 생성자 호출 후 바로 init부분의 코드블럭을 실행
    	this.name = name	// 인자로 받은 name 대입
        this.age = 10		// age 초기화
        this.phone ="010-1234-5678"	// phone 초기화
        println("${name} ${age} ${phone}")	// 정보 출력
    }
}

 

init 키워드 사용 방법

 
         : 보조 생성자 'constructor 키워드' - 생성자 Overloading(오버로딩)

// 기본 생성자 (name :String)
class Person(name:String){
    var name :String	// 멤버변수 name
    var age :Int		// 멤버변수 age
    var phone :String	// 멤버변수 phone

    init {      // 기본 생성자 호출 시 바로 호출
        println("init 실행")
        this.name = name
        this.age = 0
        this.phone = ""
        println("${name} ${age} ${phone}\n")
    }
	
    // 보조 생성자 - Overloading 생성자
    // 보조 생성자를 호출해도 ":this()" 기본생성자를 먼저 호출하고 호출됨
    constructor(name :String, age :Int, phone :String) :this(name){
        println("보조 생성자 실행")
        this.name = name
        this.age = age
        this.phone = phone
        println("${name} ${age} ${phone}")
    }
}

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
// JAVA의 동일 버전
public class Person{
    String name;	// 멤버변수 name
    int age;		// 멤버변수 age
    String phone;	// 멤버변수 phone
    
    // 기본 생성자
    public Person(String name){
	System.out.println("init 실행");
        this.name = name;
        this.age = 0;
        this.phone = "";
        System.out.println(name + " " + age + " " + phone + "\n");
    }
    
    // 보조 생성자 - Overloading 생성자
    public Person(String name, int age, String phone){
	System.out.println("보조 생성자 실행");
        this.name = name;
        this.age = age;
        this.phone = phone;
        System.out.println(name + " " + age + " " + phone);
    }

보조 생성자 실행 순서

 

  • 기본값 (Default Value) 설정

      : 생성자 인자를 생략할 경우 미리 설정해놓은 Default값으로 설정해주는 기능

        Java와 다르게 Kotlin에서는 기본값 설정을 해놓으면 매개변수를 생략할 수 있음 
// 생성자 매개변수 3개, (name, age, phone)

// 3개 모두 Default 값 설정 ( 매개변수 :자료형 = "default Value" )
class Person2(name:String ="아무개", age:Int = 0, phone:String = "010-0000-0000"){
    var name :String = name
    var age :Int = age
    var phone :String = phone
}
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

// 매개변수 모두 디폴트값 설정되어 있어서 매개변수 생략 가능
var test1 = Person()	// name : 아무개, age : 0, phone : 010-0000-0000 

// 매개변수 3개 사용자 정의 값으로 인스턴스 생성
var test2 = Person("박조로", 28, "010-3333-3333") // name : 박조로, age : 28, phone : 010-3333-333

 

  • 변수 순서변경 & 인자 일부만 대입

     : 방법 3번처럼 하면 매개변수의 일부부만 대입이 가능.

       변수명을 같이 적어주면 인자의 순서도 상관없이 생성할 수 있음
// age만 사용자 설정값으로 설정

// 방법 1
var test1 = Person(15)	// ERROR

// 방법 2
var test1 = Person("", 15, "") // Not Error, 하지만 name/phone 값이 ""으로 설정됨

// 방법 3
var test1 = Person(age = 15)	// 성공, 매개변수에 해당 변수명을 적어주면 컴파일이 이해함

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

// 기본 생성방식
var test1 = Person("최상디", 20, "010-5555-5555")

// 인자 순서 바꿔서 생성 - 변수의 이름을 지정해주면 가능
var test1 = Person(age=20, phone="010-5555-5555", name="최상디)

 

Kotlin 기본 생성자 + 보조 생성자 "constructor 키워드" - 보조 생성자 선언 시 기본 생성자 상속 필요 ":tihs()"

변수 기본값(default) 설정 - var name :String ="default"

매개 변수 순서, 일부분만 사용하기 - 매개변수 입력부분에 변수명(name)과 값을 같이 사용 ex) name="value"