클래스는 그룹화할 수 있는 함수와 변수를 한군데에 모아 놓고 사용하는 것입니다.
클래스의 기본 구조는 다음과 같습니다.
class 클래스명 { var 변수명 fun 함수() { //코드 } }
프라이머리 생성자
class Person constructor(value: String){ // code }
class Person constructor(value: String) { init{ // code } }
ex)
class Person(val value: String) { fun process() { print(value) } }
세컨더리 생성자
세컨더리 생성자는 constructor 키워드를 함수처럼 클래스 스코프 안에 직접 작성할 수 있습니다.
세컨더리 생성자는 init 블록을 작성하지 않고 constructor 다음에 괄호를 붙여 코드를 작성할 수 있고 파라미터의 개수, 타입이 다르다면 중복해서 만들 수 있습니다.
ex)
class Kotlin { constructor (value: String) { // code } constructor (value: Int) { // code } constructor (value1: Int, value2: String) { // code } }
Default 생성자
ex)
class Student { // 생성자를 작성하지 않아도 기본 생성자가 동작합니다. init { // 기본 생성자가 없더라도 초기화가 필요하면 여기에 코드를 작성합니다. } }
클래스의 이름에 괄호를 붙여서 클래스의 생성자를 호출합니다. - 클래스()
파라미터 없이 클래스명에 괄호를 붙여주면 생성자가 호출되면서 init 블록 안의 코드가 실행됩니다.
클래스의 생성자를 호출한 후 생성되는 것을 인스턴스(Instance)라고 하는데 생성된 인스턴스는 변수에 담아둘 수 있습니다.
생성자에 파라미터가 있다면 값을 입력해서 호출해야 합니다.
클래스 안에 정의된 변수는 프로퍼티라고 하고 함수는 메서드라고 부릅니다. 클래스 내부 함수에 정의된 변수는 프로퍼티가 아닌 변수(지역 변수)라고 합니다.
클래스를 만들어 프로퍼티와 메서드를 사용해보겠습니다.
- 클래스와 프로퍼티, 메서드 생성
class Pig { var name: String = "Pinky" fun printName() { Log.d("class", "Pig의 이름은 ${name}입니다.") } }
- 변수 pig에 인스턴스화해서 담기
var pig = Pig()
- 인스턴스가 담긴 변수명 뒤에 도트 연산자 붙여서 사용하기
pig.name() pig.printName()