클래스(init, 생성자, getter/setter), 접근제한자

유민국·2023년 5월 29일
0

클래스

클래스를 이용한 객체 생성

// 참조 변수 선언시 클래스 타입 생략가능
// 참조 변수에는 객체의 아이디 정보가 들어있다.
val obj1:TestClass1 = TestClass()

클래스 내부에 내용이 없다면 {}는 생략 가능하다

class TestClass2

init

  • 클래스를 통해 객체가 생성되면 자동으로 동작하는 코드이다.
  • 매개 변수를 정의할 수 없기 때문에 생성자는 아니다.
  • init 블럭의 코드는 Java 파일로 변환될 때, 모든 생성자의 가장 위에 코드가 삽입되어 init 블럭의 코드가 먼저 수행되고 생성자가 수행된다.

constructor

constructor(v1:Int, v2:Int){
    println("매개 변수가 두 개인 생성자")
    this.v1 = v1
    this.v2 = v2
}

or

class TestClass(var a1:Int, var a2:Int)

기본 생성자 외에 추가적인 생성자를 정의할 때는 클래스 이름 옆에 정의한 생성자를 반드시 호출해야 한다.

constructor(a1:Int) : this(a1,200){
    println("매개 변수가 있는 생성자 호출")
}

Property

멤버 변수는 전부 private 변수이다.

  • 접근 제한자를 설정하면 Java로 변환될 때 setter/getter 생성에 대한 설정이 된다.
  • var는 setter/getter 모두 작성 됨
  • val의 경우 final 변수로 정의 되고 getter만 작성된다.
  • 만약 setter/getter를 오버라이딩 하고 싶다면 다음과 같이 한다.
// field는 변수를 의미한다.
var v3 = 0
     get() {
         println("getter 호출")
         return field
     }
     set(value){
         println("setter 호출")
         if(value in 1..10){
             field = value
         }
     }

val v4 = 0
     get(){
         println("getter 호출 v4")
         return field
     }

접근제한자

클래스

private : 파일이 같을 경우에만 사용이 가능하다.
public : 패키지, 모듈이 달라도 사용이 가능하다.
internal : 패키지, 모듈이 다르면 사용이 불가능하다.

변수, 메서드

private : 모든 경우에 사용이 불가능하다.
public : 모든 경우에 사용이 가능하다.
protected : 상속 관계에서만 사용이 가능하다. 패키지, 모듈이 달라도 사용 가능하다.
internal : 모듈이 다르면 사용이 불가능하다.
profile
안녕하세요 😊

0개의 댓글