Published on

[F-Lab] Access Modifier

Authors
  • avatar
    Name
    심성헌 (SeongHeon Sim)
    Twitter

평소에 쓰던 것만 쓰던 나

지금까지 개발하면서 접근 제어자를 열심히 썼다 지웠다 하며 개발 했지만, 정작 각각의 의미를 정확히 파악하지 못하고 개발했다. 이번 시간에는 그런 과거의 나를 반성하고, 접근 제어자에 대해 공부해서 이를 적재적소에 활용하여 더 효율적인 개발을 진행하고자 기록한다.


접근 제어자

접근 제어자는 변수, 메소드, 클래스에 적용하여 해당 요소들에 얼마만큼 접근 할 수 있게 할 것인지 지정한다. 처음엔 public으로 지정해놓으면 어디서든 접근 할 수 있으니까 모든 요소를 public으로 지정하면 모든 문제를 해결하는 거 아냐? 라고 생각하던 시절이 있었다. 하지만 조금씩 배워가면서 이러한 생각은 정말 초보라서 할 수 있는 용감한 생각이라고 느꼈다.

이는 프로그래밍을 더 어렵게 하기 위해 존재하는 것이 아니라, 질서있는 자유를 위해 존재하는 것이다.

  • 생활코딩, 이고잉 님

생활코딩 영상도 함께 참고하며 접근 제어자에 대해 공부하는 중에 위의 말이 가장 인상 깊었다. 왜 자유를 위해 규제를 하는 것일까?

더 나아가 Java 는 OOP(Object Oriented Programing) 를 지향하는 언어이고, 이러한 방법론의 특징 중 캡슐화라는 것이 존재한다. 이 캡슐화라는 것은 모듈의 내부 구현을 은닉화하여 내부에서 문제나 변화가 발생하더라도 해당 모듈과 협력하는 외부 모듈에 미치는 영향이 줄어들거나 퍼져나가지 않도록 하기 위함이다. (응집도와 결합도에 대해 추후 공부하자!) 이러한 방법론의 특징을 준수하기 위해 접근 제어자가 필요한 것이다.

접근 제어자라는 녀석들

이제 접근 제어자라는 녀석'들'을 하나씩 살펴보려고 한다.

대표적으로 privatedefaultprotectedpublic 순으로 접근 권한이 점점 넓어지는데, 나는 아직까지 privatepublic 이외의 접근 제어자를 사용해보지 못했다.

  1. private
    • 말 그대로 굉장히 프라이빗한 접근 제어자이다.
    • 해당 접근 제어자가 선언된 변수 혹은 메소드는 자신이 속한 클래스 바깥에서 호출될 수 없다. 즉, 감옥에 갇힌 것과 마찬가지라고 볼 수 있다.
    • private 접근 제어자는 클래스에서 선언하지 못한다.
  2. default
    • 기본 접근 제어자이기 때문에 변수, 메소드, 클래스 앞에 접근 제어자가 생략되어 있다면 해당 요소는 default 접근 제어자로 선언됐다는 의미이다.
    • 해당 접근 제어자가 호출된 요소는 다른 패키지에서 호출이 불가능하지만, 해당 요소가 속한 패키지 내에서는 모든게 허용되는 접근 제어자이다.
  3. protected
    • 해당 접근 제어자는 클래스에서 선언하지 못한다.
    • 그렇기 때문에 해당 접근 제어자가 선언된 변수, 메소드는 자신이 속한 클래스의 패키지 내에서만 호출된다.
    • 또는 외부 패키지에서 해당 클래스를 상속한다면 예외적으로 호출 할 수 있다.
  4. public
    • 모든 것이 허용된 오픈 마인드의 접근 제어자
    • 변수, 메소드, 클래스 모든 요소에 선언 가능하며, 자신이 속한 패키지는 외부 패키지는 관계없이 접근 가능한 접근 제어자이다.