300x250

클래스 인스턴스를 생성, 초기화


-> 클래스 인스턴스 생성 : 클래스에 정의된 속성을 구조로 갖는 객체를 메모리에 할당하는 것.

-> 실제로 해당 객체를 사용할 수 있게 하려면 각 속성에 초기값을 지정해야 함. 

-> 이것을 " 초기화 " 라고 함.

 

기본 생성자


Person 클래스 헤더에 기본 생성자 정의

임시 변수를 사용해서  Person 클래스의 각 속성에 초깃값을 제공

class Person (_name : String, _age : Int, _sex : Char){
	var name = _name
		get() = field.capitalize()
		private set(value){
			field = value.trim()
		}
	val age = _age
	private val sex = _sex    
    
}

....

fun main ( args : Array<String> ) {

	val person = Person ("Eddy", 20, 'M')
    
}

 

 

기본 생성자에 속성 정의 하기


class Person (_name : String, var age : Int, private val sex : Char){
	  
}

 

 

보조 생성자


- 헤더가 아닌 몸체에 정의

- 매개변수를 다르게 조합하여 여러 개 정의 할 수있음

class Person (_name : String, var age : Int, private val sex : Char){
	var name = _name
		get() = field.capitalize()
		private set(value){
			field = value.trim()
		}

	constructor( name : String ) : this( name, age = 20, sex ='M' )
    	// this : 보조 생성자를 사용해서 생성되는 Person 인스턴스의 또 다른 생성자인 기본 생성자를 뜻함
    ...
    
}

...



fun main ( args : Array<String> ) {

	val person = Person ("Eddy") // 보조 생성자 호출
    
}

보조 생성자 생성, 호출

 

 

class Person (_name : String, var age : Int, private val sex : Char){
	var name = _name
		get() = field.capitalize()
		private set(value){
			field = value.trim()
		}

	constructor( name : String ) : this( name, age = 20, sex ='M' ){
    	if( name.toLowerCase() == "eddy") sex = 'F' 
    }
    	// this : 보조 생성자를 사용해서 생성되는 Person 인스턴스의 또 다른 생성자인 기본 생성자를 뜻함
    ...
    
}

보조 생성자에 속성 초기화 코드 추가

 

 

기본인자


- 생성자를 정의할 때, 인자의 기본값 지정 

- 기본, 보조 생성자 모두 가능

class Person (_name : String, var age : Int = 20, private val sex : Char){
	var name = _name
		get() = field.capitalize()
		private set(value){
			field = value.trim()
		}

	constructor( name : String ) : this( name, sex ='M' ){
    	if( name.toLowerCase() == "eddy") sex = 'F' 
    }
    	// this : 보조 생성자를 사용해서 생성되는 Person 인스턴스의 또 다른 생성자인 기본 생성자를 뜻함
    ...
    
}

기본 생성자에서 속성 age : Int 의 기본 값을 지정

 

// age 값으로 30이 전달되면서 기본 생성자 호출
Person ("Eddy", 30, 'M')

// age 인자를 생략, 기본 생성자가 호출되면서 age 속성은 기본값인 20
Person ("Eddy", 'M') 

// 보조 생성자가 호출되며 이 생성자에서 다시 age 인자를 생략하고
// 기본 생성자를 호출하므로 age 속성은 기본 값인 20 
Person ("Eddy") 

여러 방법으로 생성자 호출

 

지명인자


- 기본 인자 많아짐 -> 생성자 호출 방법 많아짐 -> 혼란스러울 수도 있음.

- 함수처럼 생성자에도 지명 ( named argument ) 사용할 수 있음.

// 첫번째 방법 : 매개 변수 이름과 값 모두 지정
val person = Person ( name = "Eddy", age = 20, sex = 'M' )

// 두번째 방법 : 값만 지정
val person = Person ( "Eddy", 20, 'M' )

- 매개변수가 정의된 순서와 다르게 인자를 전달할 수 있다.

- 가독성이 좋아진다. 특히나 Boolean형 매개변수 isXXXX, isYYYY가 여러 개 있는 경우

반응형

'Kotlin' 카테고리의 다른 글

@JvmOverloads  (0) 2021.04.18
Any  (0) 2021.04.16
Module  (0) 2021.04.16
internal  (0) 2021.04.16
300x250

@JvmOverloads


- 생성자 오버로딩

- 기본 매개 변수 값을 대체하는 이 함수에 대한 오버로드 생성

- 표면적으로 보이는 코드수가 적어진다.

 

 

Example


 

 

View Sub Class 확장

class CustomView @JvmOverloads constructor(context : Context, attrs: AttributeSet?=null, defStyleAttr:Int =0 ) :View (context,attrs,defStyleAttr) {
	...
}

 

 

  • 참고

JvmOverloads - Kotlin Programming Language (kotlinlang.org)

반응형
300x250

Package


kotlin

 

open class Any

 

Summary


코틀린 클래스 계층 최상위

모든 코틀린 클래스에는 Superclass로 Any class를 가지고 있다.

 

 

Functions


equals ( other : Any? ) : Boolean

hashCode ( other : Any? ) : Int

toString ( )  : String

 

 

 

 

코틀린 클래스 계층 최상위

 

모든 코틀린 클래스는 Any 클래스를 ㅅㄱ

반응형
300x250

Project > Module > Package > Class

반응형

+ Recent posts