Programming language/Kotlin

[코틀린 OOP #3] - 접근 제한자

Think-About 2022. 8. 18. 09:16

코틀린 접근 제한자

객체지향 프로그래밍을 하면서 클래스가 많아지면 코드가 복잡하고 어려워집니다.
코드에 존재하는 클래스가 어느 범위까지 접근 가능하도록 설정하는 것은 처리 작업을 간결하게 해 줍니다.
추후 코드를 리팩터링 할 때도 큰 도움이 되기에, 접근성을 프로그래머가 잘 관리해주어야 하는 이유입니다.
코틀린 접근 제한자는 클래스의 정보(멤버)를 어느 범위까지 접근 가능하도록 결정하는 키워드입니다.
접근 제한자는 가시성 제한자라고도 불리며 영문으로는 visibility modifier라고 합니다.

접근 제한자의 종류
public 멤버가 클래스 외부에서 사용가능하다.
private 멤버가 클래스 내부에서만 사용가능하다.
protected 멤버가 클래스 내부와 하위 클래스에서만 사용가능하다.
internal 멤버가 클래스가 포함된 모듈에서 사용가능하다.

코틀린 접근 제한자 public은 기본적으로 설정됩니다.
코틀린의 이전 글들에 나온 예시들은 지금까지 다 public이었다고 이해하시면 됩니다.
이전 글들도 확인하시는 것을 추천드립니다.

 

'프로그래밍 언어/Kotlin' 카테고리의 글 목록

지식을 공유하고 같이 생각해보는 블로그입니다. 전문 지식 뿐만 아니라 많은 분들께 도움 되는 지식 공유하는 블로그입니다.

think-about.tistory.com


코틀린에서 접근 제한자(혹은 가시성 제한자)를 통해 클래스 외부에 노출될 필요가 없는 멤버는 private로 제한하거나 어디서든 사용 가능하도록 public으로 설정하는 등 접근성(가시성)을 제한 및 설정하는 객체지향 프로그래밍 개념을 정보은닉(information hiding)과 캡슐화(encapsulation)라고 합니다.
이 개념은 코딩을 하면서 계속해서 만날 개념이며 자격증 시험에도 등장하니 꼭 숙지해야 합니다.

 

 

결론은 클래스를 만들고 관리할 때는 꼭 필요한 경우에만 외부에 노출하도록 해야 한다는 것입니다.


코틀린 접근 제한자 예시

이번 예시는 안드로이드 스튜디오를 통해 살펴보도록 하겠습니다.
다음 코드는 vibilityModifier.kt의 내용입니다.

class Test{
    var a = 10
    internal var b = 20
    protected var c = 30
    private var d = 40
}

변수 a의 경우 별다른 제한자를 사용하지 않았으므로 기본적으로 public입니다.

다음은 test.kt의 내용입니다.

fun main(){
    var test = Test()
    println(test.a)
    println(test.b)
    println(test.c)
    println(test.d)
}

안드로이드 스튜디오에서 vibilityModifer.kt와 test.kt가 같은 모듈에 있도록 작성했습니다.
그렇다면 test.kt를 실행한 결과는 어떻게 될까요?
test 객체의 a와 b는 출력이 되지만 c와 d는 오류가 발생합니다.
a는 public임으로 어디서든 호출이 가능합니다.

b는 internal임으로 같은 모듈 내에서는 호출이 가능합니다.

c는 protected임으로 클래스 내부와 하위 클래스에서 호출이 가능하나 예시의 경우 main함수에서 호출했습니다.
d는 private임으로 클래스 내부에서만 호출 가능하나 예시의 경우 main함수에서 호출했습니다.

 

코틀린 시작하기 Kotlin getting started

코틀린 Kotlin  코틀린은 자바 가상 머신(JVM, Java Virtual Machine)에서 동작하는 크로스 플랫폼 오픈소스(아파치 2 라이선스) 프로그래밍 언어입니다. 2011년 7월, JetBrains에서 공개했으며 2019년 5월 7일..

think-about.tistory.com

위의 글을 보시고 안드로이드 스튜디오를 통해 꼭 실습해보시길 바랍니다.

보너스로 private로 제한된 d 변수의 데이터를 변경하고 참조할 수 있도록 해보겠습니다.

//visibilityModifier.kt
class Test{
    var a = 10
    internal var b = 20
    protected var c = 30
    private var d = 40

    fun setD(value : Int) { this.d = value }

    fun getD() : Int { return this.d }
    
}
//test.kt
fun main(){
    var test = Test()
    test.setD(100)
    println(test.getD())
}

Test 클래스의 변수 d는 main 함수에서 직접 접근할 수 없습니다.
하지만 Test 클래스 내부에서는 접근할 수 있기 때문에 setD와 getD라는 public 함수를 정의하고,
이 함수들을 main 함수에서 호출하여 변수 d의 데이터에 접근할 수 있도록 한 것입니다.
setD와 getD 함수들을 setter, getter라고 합니다.


코틀린 객체지향 프로그래밍

접근성은 클래스의 멤버를 보호해주는 역할을 하기에 꼭 숙지하는 것이 좋습니다.

질문은 언제나 환영입니다.
Think-about ~ Kotlin!


함께보면 좋은 글

[코틀린 OOP #1] - 클래스와 생성자

 

[코틀린 OOP #1] - 클래스와 생성자

코틀린 언어의 기본적인 내용을 앞서 살펴보았습니다. 마지막 중요한 관문이 남아있습니다. 바로 코틀린에서의 객체지향 프로그래밍(OOP)입니다. 코틀린 객체지향 프로그래밍에 대해 공부하기

think-about.tistory.com

[코틀린 OOP #2] - 상속, 오버라이딩

 

[코틀린 OOP #2] - 상속, 오버라이딩

코틀린 클래스 상속 클래스를 선언할 때 다른 클래스의 기능을 확장하고자 참조하여 정의하는 것을 상속이라고 합니다. 다른 클래스를 상속받을 때는 클래스 이름 뒤에 콜론과 상속받을 클래스

think-about.tistory.com

'Programming language > Kotlin' 카테고리의 다른 글

[코틀린 OOP #2] - 상속, 오버라이딩  (2) 2022.08.17
[코틀린 OOP #1] - 클래스와 생성자  (0) 2022.08.16
코틀린 반복문  (0) 2022.08.13
코틀린 컬렉션 타입  (2) 2022.08.13
코틀린 함수 매개변수  (2) 2022.08.05