클래스 인스턴스의 프로퍼티나 메서드를 사용하려면 우선 인스턴스를 명시적으로 생성해야 한다. 일반 함수 호출과 똑같아 보이는 생성자 호출을 통해 인스턴스를 만들 수 있다. 일반 함수 호출과 생성자 호출의 차이는 함수 이름 대신 클래스 이름을 사용한다는 점뿐이다.
fun main() { val person = Person() // Person 인스턴스 생성 person.firstName = "John" person.familyName = "Doe" person.age = 25 person.showMe() // John Doe: 25 }
생성자 호출을 사용하면 프로그램이 새 인스턴스에 대한 힙 메모리를 할당한 다음, 인스턴스의 상태를 초기화해주는 생성자 코드를 호출해준다. 앞의 예제에서는 아무 인자도 받지 않는 디폴트 생성자를 사용했다. 다음 절에서는 여러분 자신의 초기화 코드를 실행할 수 있는 커스텀 생성자를 작성하는 방법을 살펴본다.
기본적으로 코틀린 클래스는 공개(public) 가시성이다. 이 말은 코드의 어느 부분에서나 클래스를 사용할 수 있다는 뜻이다. 최상위 함수와 마찬가지로 최상위 클래스를 internal이나 private으로 설정할 수 있다. 이렇게 지정하면 클래스의 가시성 범위를 클래스 정의가 들어있는 파일 내부나 컴파일 모듈 내부로 제한할 수 있다.
자바 vs. 코틀린 코틀린과 달리, 자바에서는 기본적인 가시성이 클래스가 포함된 패키지 내부로 제한된다(이런 가시성을 패키지 전용(package private) 가시성이라고 부른다). 자바에서 어떤 정의를 어느 곳에서나 쓸 수 있게 하려면 명시적으로 public 변경자를 정의 앞에 붙여야 한다.