클래스와 인스턴스는 기본적으로 공개 가시성이다. 어떤 대상의 가시성을 다음과 같은 가시성 변경자를 사용해 변경할 수 있다.
• private
• protected
• internal
• public
private 가시성인 대상은 자신이 정의된 클래스 안에서만 볼 수 있다. 자바에서는 내부(inner) 클래스(다른 클래스 안에 정의된 클래스)의 비공개 멤버를 외부 클래스에서 볼 수 없다. 코틀린에서는 반대다. 외부 클래스에 정의된 비공개 멤버를 내부 클래스에서 볼 수 없다.
클래스 생성자는 기본적으로 public 가시성이다. 다음과 같이 생성자의 가시성 수준을 바꿀 수 있는데, 이 경우 constructor를 생략하면 안 된다.
class Person private constructor(val name: String, val registered: Instant)
자바와 달리 코틀린에는 패키지 내 공개(package private) 가시성이 없다(자바에서는 패키지 내 공개가 기본 가시성이다). 반대로 internal 가시성은 코틀린에만 있는 가시성으로 같은 모듈 안에 있는 어떤 코드에서나 internal로 선언된 대상을 볼 수 있다(그레이들 테스트 소스 세트에 있는 소스 코드는 자신에 상응하는 주 소스 세트에 있는 내부 가시성 원소들을 볼 수 있다는 점을 기억하라).