새차원의 코틀린 강좌 - Classes
클래스
클래스는 class 키워드로 선언
- 클래스 이름
- 클래스 헤더 (형식 매개변수, 기본 생성자 등 + 접근 지정자)
- 클래스 바디 { }
1 | class Invoice(data: Int) { |
- 헤더와 바디는 옵션이고, 바디가 없으면 { } 도 생략 가능
1 | class Empty |
기본 생성자
- 클래스별로 1개만 가질 수 있음
- 클래스 헤더의 일부
- 클래스 이름 뒤에 작성
1 | class Person constructor(firstName: String) { |
- annotation이나 접근지정자가 없을 때는, 기본생성자의 constructor 키워드 생략 가능
1 | class Person(firstName: String) { |
기본생성자는 코드를 가질 수 없음
- 초기화는 초기화 블록(init) 안에서 작성해야함
- 초기화 블록은 init 키워드로 작성
기본생성자의 파라미터는 init 블록 안에서 사용 가능함
1 | class Customer(name: String) { |
- 기본 생성자의 파라미터는 프로퍼티 초기화 선언에도 사용 가능
1 | class Customer(name: String) { |
- 프로퍼티 선언 및 초기화는 기본생성자에서 간결한 구문으로 사용 가능
1 | class Person(val firstName: String, val lastName: String) { |
- 프로퍼티란?
1 | class Customer(name: String) { |
1 | fun main(args: Array<String>) { |
# 출력값
call getter
원딜레이
call setter
call getter
홍홍홍
- 기본생성자에 어노테이션 또는 접근지정자 등이 있는 경우 constructor 키워드가 필요함
1 | class Person public constructor(name: String) { |
보조생성자
- 클래스별로 여러 개를 가질 수 있음
- constructor 키워드로 바디에 선언 (기본생성자는 헤더에 선언)
1 | class Person { |
클래스가 기본생성자를 가지고 있다면, 각각의 보조생성자들은 기본생성자를 직접 or 간접적으로 위임해주어야 함
this 키워드 이용
- 직접적 : 기본생성자에 위임
- 간접적 : 다른 보조생성자에 위임
1 | class Person(val name: String) { |
생성된(generated) 기본생성자
클래스에 기본생성자 or 보조생성자를 선언하지 않으면, 생성된 기본생성자가 만들어짐
generated primary constructor
- 매개변수가 없음
- 가시성이 public
만약 생성된 기본생성자의 가시성이 public이 아니어야한다면, 다른 가시성을 가진 빈 기본생성자를 선언해야함
1 | class DontCreateMe private constructor() { |
인스턴스 생성
- 코틀린은 new 키워드가 없음
- 객체를 생성하려면 생성자를 일반 함수처럼 호출하면 됨
1 | val invoice = Invoice() |
클래스 멤버
클래스는 아래의 것들을 포함할 수 있음
- Constructors and initializer blocks
- Functions
- Properties
- Nested and Inner Classes
- Object Declarations -> 자바와 많이 다름!
출처 : 새차원의 코틀린 강좌 https://www.inflearn.com/course/%EC%BD%94%ED%8B%80%EB%A6%B0-%EA%B0%95%EC%A2%8C-%EC%83%88%EC%B0%A8%EC%9B%90/