[kotlin] 클래스, 확장함수

hyooosong·2021년 1월 26일
0

클래스

class Person(var name: String){

}

fun main() {
  val person = Person("홍길동")
  print(person.name) // 홍길동
}

-> Person 클래스의 생성자인 name에 바로 접근 가능

❓ Constructor? init?

  • Constructor
    코틀린의 클래스는 하나의 주 생성자와 다수의 부 생성자를 가질 수 있다.

    • constructor 의 접근 제한자는 기본적으로 public을 가진다.
      다른 제한자를 이용하고 싶을 때는 아래 코드처럼 작성해주면 된다.
 	 class Person private constructor()
  • primary constructor (주 생성자)
    • 어노테이션이나 접근 제한자 (public, private ..) 가 없다면 constructor 키워드 생략 가능
    • 초기화 하는 코드를 넣고 싶은 경우 init 블럭 이용
  • secondary constructors (부 생성자)
    • constructor 키워드 이용, 주 생성자처럼 생략 불가능
     //primary constructor 가 없는 경우
	 class Person {
	     var children: MutableList<Person> = mutableListOf<Person>();
 	     constructor(parent: Person) { // 부 생성자
 	        parent.children.add(this)
 	     }
	  }
    //primary constructor 가 있는 경우
	class Person(var name: String) {
 	  var age: Int = 26
  	  constructor(name: String, age: Int) : this(name) { // 부 생성자
     	     this.age = age
    	  }
	}

부 생성자 사용 시 주 생성자가 있는 경우
-> this() 생성자를 이용해 직간접적으로 주 생성자에 위임해야 함

✔ 생성자 유무로 상속 / 인터페이스 구분 !

  • 상속 (extends) : 호출 시 생성자 필요
    ex. Activity : AppCompatActivity()
  • 인터페이스 (implements) : 생성자 필요 x
    ex. View : View.OnClickListener

확장함수

기존에 정의된 클래스에 함수를 추가하는 기능

// String type 뒤에 새로 정의한 myLength 함수 사용 가능

fun String.myLength() : Int {
  return this.length
}

fun main() {
  var str: String = "kotlin"
  str.myLength()
}

0개의 댓글

관련 채용 정보