프로그래밍/Kotlin

[코틀린 / Kotlin] open class, private , protected 속성 설정

pupu91 2022. 10. 20. 16:18
반응형

 

클래스에 open 키워드가 없으면 기본적으로 닫힌 클래스

/* 닫힌 클래스는 상속 불가 */
class PublicClass{
}

 

open class

/* 상속이 필요한 경우라면 open class 활용 */
open class PublicClass{
}

 

 

 

private , protected 키워드로 속성 설정

/* 주 생성자에 접근 제어자(private)를 설정하면 get/set 불가한 속성이 된다.*/
open class PublicClass(var publicProp1: String, private var privateProp1: String){
	
    var publicProp2 = "public prop2"
    /* private로 설정하면 해당 클래스 내부에서만 사용가능하고, get/set 불가한 속성이 된다.*/
    private var privateProp2 = "private prop2"
    /* protected로 설정하면 상속 받은 클래스에서만 접근 가능하다*/
    protected  var protectedProp = "protected prop"    
   
    /* private 키워드를 붙였지만 클래스 내부이기 떄문에 접근 가능 */
    fun publicFunc(){
   		 println(privateProp1)
    }
   
    private fun privateFunc() = println("private 메소드") //이 클래스 안에서만 사용

    protected  fun protectedFunc() = println("protected 메소드")
}

fun main(){
	
    val publicClass = PublicClass("Hello","World")
    println(publicClass.publicProp1)
    
    println(publicClass.privateProp1)
    //private 키워드를 붙였기 때문에 외부에서 접근 불가
   
    println(publicClass.protectedProp)
    //protected 키워드를 붙여 선언했기 때문에 외부에서 접근 불가
    
}

출력 결과 
Hello
반응형

 

private class

/* private 접근 제어자를 붙인 클래스는 같은 파일 내부에서만 사용 가능 */
private class PrivateClass{}

fun publicFunc() = println("public function")

/* private 접근 제어자를 붙인 함수는 같은 파일 내부에서만 사용 가능 */
private fun privateFunc() = println("private function") 

var publicVariable = "public variable"

/* private 접근 제어자를 붙이 변수 or 상수는 같은 파일 내부에서만 사용 가능*/
private val privateConstant = "private constant

fun main(){
	
    /* 상단의 코드 모두 private 키워드를 붙였지만 같은 파일 내부이기 때문에 접근 가능 */
    val privateClass = privateClass()
    
    privateFunc()
    
    println( privateConstant )
}

출력 결과
private function
private constant

 

 

 

새 프로젝트에서 publicClass 상속받아서 접근하기

class Extender(prop1: String, prop2: String) : PublicClass(prop1, prop2){
	//(prop1: String, prop2: String)가 PublicClass(prop1, prop2)에 전달되면서 초기화 한다
    
    fun parentAccessDemo(){
    	
        /* publicClass에서 protected로 선언 된 속성과 기능은 접근 가능*/
    	println(protectedProp)
        protectedFunc()
        
        /* PublicClass에서 private로 선언 된 속성과 기능에느 접근 불가 */
        /*println(privateProp1)
        privateFunc()*/
    }
 
 fun main(){
 	
    /* 같은 파일에 정의 된 클래스, 함수, 변수 or 상수가 아니기 때문에 접근 불가 */
 	
 	 /* val privateClass = PrivateClass()

    privateFunc()

    println(privateConstant)*/

    /* private 키워드가 없는 클래스, 함수, 변수 or 상수는 다른 파일에서 접근 가능 */
    publicFunc()

    println(publicVariable)
 }
}

출력 결과
public function
public variable
반응형