매일 한줄 코딩

#6. 코틀린 클래스 - Class, 생성자 본문

develop/kotlin

#6. 코틀린 클래스 - Class, 생성자

ShipJH 2022. 6. 6. 23:25
6. 클래스 - Class

6. 클래스 - Class

목차


1. 클래스 - Class

  • 클래스는 class 키워드로 선언
  • 클래스 이름, 해더(매개변수, 기본 생성자 등), 바디(중괄호) 로 구성됨
//키워드 //이름     //헤더
class TestClass(data: Int) {
	//바디
}

  • 해더와 바디는 옵션이고, 바디가 없으면 중괄호 { } 생략 가능
class TestClass


2. 기본생성자 (Primary Constructor)

  • 클래스별로 1개만 가질 수 있음.
  • 클래스 해더의 일부
  • 클래스 이름 뒤에 작성
  • constructor 키워드를 사용
class TestClass constructor(name: String) {
}

  • 어노테이션이나 접근지정자가 없을 때는, constructor 키워드 생략 가능
class TestClass(name: String) {
}

  • 어노테이션이나 접근지정자가 있는경우 constructor 가 필요함
class TestClass public @inject constructor(name: String) { ... } 

2-1. 기본생성자 - init

  • 기본생성자는 코드를 가질 수 없음
    • 초기화는 초기화블록 안에서 작성해야 함
    • 초기화 블록은 init 키워드로 작성
  • 기본 생성자의 파라미터는 init블록 안에서 사용이 가능함
class TestClass(name: String) {
	init {
		println("name is $name")
	}
}

2-2. 기본생성자 - 프로퍼티

  • 기본생성자의 파라미터는 프로퍼티 초기화 선언도 가능
  • 프로피티 선언 및 초기화는 기본생성자에서 간결한 구문으로 사용 가능
fun main(args: Array<String>){
    val obj = TestClass()
    obj.name = "Test"
    println("obj : ${obj.name}")
    println("obj : ${obj.fullName}")

    val obj2 = TestClass2("test2")
    println("obj2 : ${obj2.fullName}")
}

class TestClass() {
    var name: String = ""
    val fullName: String
        get() {return this.name.uppercase()}

}

class TestClass2(name: String) { // name이라는 것을 파라미터에 넣어 프로퍼티화 시켰다. 간결한구문
    val fullName = name.uppercase()
}

/*
obj : Test
obj : TEST
obj2 : TEST2
 */


class TestClass3(name: String, age: Int) { // 여러개가능
}


3. 보조생성자 (Secondary Constructor)

  • 클래스 별로 여러 개를 가질 수 있음
  • constructor 키워드로 선언
class TestClass {
	constructor(member: Member) {
		member.add(this)
	}
}

  • 클래스가 기본생성자를 가지고 있다면, 각각의 보조생성자들은 기본생성자를 직접 or 간접 적으로 위임해주여야 한다.
  • this 키워드를 이용한다.
class Member(val name: String) { // 기본생성자

	//직접적 : 기본생성자에 위임해준다.
	constructor(name:String, person:Person) : this(name) {
		// ...
	}

	// 간접적 : 다른 보조생성자에 위임해준다.
	constructor() : this("배재현",Person()) {
		// ...
	}
}


4. 생성된(generated) 기본생성자

  • 자바의 기본생성자라고 생각하면된다.
  • 클래스에 기본생성자나 보조생성자를 선언하지 않으면, 생성된 기본생성자가 만들어진다.
  • 매개변수가 없다
  • public이다
  • public이 아니여야한다면 다른 접근제안자를 붙인 기본생성자를 선언해주어야 한다.
class TestClass private constructor() { // TestClass가 기본생성자가 public인걸 막기위해.
}


5. 인스턴스 생성!

  • 자바에선 new 키워드를 사용하였지만 코틀린에선 없다.
  • 객체를 생성할때 생성자를 일반 함수처럼 호출하면 된다.
val testObj = testClass()

val member = Member("배재현")


6. 기타 - 클래스안에 포함될 수 있는것들..

클래스 맴버로는 아래와같은것들이 포함될 수 있다.

  • 생성자
  • init블럭
  • function
  • properties
  • 중첩클래스 (이너클래스)
  • 오브젝트 선언

Comments