본문 바로가기

차근차근 코틀린

차근차근Kotlin(8) - 접근제한자, Generic, Null Safety

1) 접근제한자

- 서로 다른 파일에게 자신에 대한 접근 권한을 제공하는 것.

- 각 변수나 클래스 이름 앞에 아무런 접근제한자를 붙이지 않았을 경우에는 기본적으로 public이 적용된다.

 

· 접근제한자의 종류

 

1. private : 다른 파일에서 접근할 수 없다.

2. internal : 같은 모듈에 있는 파일만 접근할 수 있다.

3. protected : private와 같으나 상속관계에서 자식 클래스가 접근할 수 있다.

4. public : 제한없이 모든 파일에서 접근할 수 있다.

 

abstract class BaseActivity : AppCompatActivity() {

    private var privateName: String = "peace"
    protected var protectedName : String = "peace"
    internal var internalName :String = "peace"
    var publicName: String = "peace"

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

    }
}
class MainActivity : BaseActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

//      privateName  private로 선언되었기 때문에 접근 불가
        protectedName //BaseActivity를 상속하고 있기 때문에 접근 가능
        internalName // 같은 모듈에 있기 때문에 접근 가능
        publicName //public이 적용되었기 때문에 접근 가능

    }
}

 

2) Generic

- 입력되는 값의 타입을 자유롭게 사용하기 위한 설계 도구

- 주로 컬렉션이나 배열에서 입력되는 값의 타입을 특정하기 위해 사용한다.

var list: MutableList<제네릭> = mutableListOf("월", "화", "수")
    fun memberList(){ 
        
        var nameList : MutableList<String> = mutableListOf("평화", "혁주", "동관")
        
        print(nameList)
    }

 

3) Null Safety

- 코틀린은 null pointer 예외가 발생하는 것을 막기 위해 여러가지 안전장치를 만들어두었다.

 

· null값 허용하기 : Nullable

  -코틀린에서 지정하는 기본 변수는 모두 null이 입력되지 않는다.

  -null값을 입력하기 위해서는 변수를 선언할 때 타입 뒤에 ?(nullable)를 입력해야 한다.

 

  • 변수에 Null 허용하기
var age: String? = null

 

  • 함수 파라미터에 Null 허용하기
class MainActivity : BaseActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        memberList(null)
    }

    fun memberList(email: String?){
        if(email != null){  // email 파라미터에 대한 null 체크를 수행해야 email 파라미터 사용 가능
            println(email)
        }
    }
}

→ 위 코드처럼 함수 파라미터가 null을 허용한 경우에는 코드 내부에서 해당 파라미터에 대해 null여부를 체크해야만 파라미터를 쓸 수가 있다.

 

  • 함수의 리턴타입에 Null 허용하기
    fun memberList() : String?{
        return null
    }

 

· 안전한 호출 >>> ?.(Safe Call)

- Nullable인 변수 다음에 ?.을 사용하면 해당 변수가 null일 경우 ?.다음의 메서드나 프로퍼티를 호출하지 않는다.

 fun memberList(email: String?) : String?{
	var emailLength: Int? = email?.length
	// 만약 SafeCall을 사용하지 않았는데 email 변수가 null 이라면 프로그램은 다운된다.
        return null
    }