[Java] 접근 제어자와 캡슐화

이병수·2024년 1월 2일
0

Java

목록 보기
8/27
post-thumbnail
post-custom-banner

접근 제어자와 캡슐화


접근 제어자를 사용하면 해당 클래스 외부에서 특정 필드나 메서드에 접근하는 것을 허용하거나 제한할 수 있다.


접근 제어자 종류

  1. private

  2. default (package-private)

  3. protected

  4. public


private

모든 외부 호출을 막는다.

  • 나의 클래스 안으로 속성과 기능을 숨기며, 외부 클래스에서 해당 기능은 호출이 불가능하다.

default (package-private)

같은 패키지 안에서 호출은 허용한다. (키워드는 아무것도 적지 않음)

  • 접근 제어자를 명시하지 않으면 같은 패키지 안에서 호출을 허용하는 default 접근 제어자가 적용된다.

  • 동일한 패키지 내의 다른 클래스에서만 접근이 가능

  • 즉, 나의 패키지 안으로 속성과 기능을 숨기며, 외부 패키지에서 해당 기능을 호출이 불가능하다.


protected

같은 패키지 안에서 호출은 허용, 패키지가 달라도 상속 관계의 호출은 허용한다.

  • 상속관계로 속성과 기능을 숨기며, 상속이 아닌 곳에서 해당 기능은 호출이 불가능하다.

public

모든 외부 호출을 허용한다.

  • 기능을 숨기지 않고 어디서든 호출이 가능하다.

접근 제어자 사용 위치

  • 접근 제어자는 필드와 메서드 그리고 생성자에 사용된다.

  • 추가적으로 클래스 레벨에도 일부 접근 제어자 (public, default)를 사용할 수 있다.


필드, 메서드에서 접근 제어자 사용

  • 내부 패키지 안의 클래스 안에서 자신의 클래스 안에 선언된 필드들을 다 접근 가능

  • 같은 패키지 안 이지만 외부 클래스에서는 해당 클래스의 default와 public만 접근 가능

  • 외부 패키지에서는 해당 클래스의 public만 접근이 가능


참고로 생성자도 접근 제어자 관점에서의 메서드와 같다.


클래스 레벨에서 접근 제어자 사용

클래스 레벨의 접근 제어자 규칙

  • 클래스 레벨의 접근 제어자는 public, default만 사용 가능

    • private, protected는 사용할 수 없다.
  • public 클래스는 반드시 파일명과 이름이 같아야한다.

    • 하나의 자바 파일에 public 클래스는 하나만 등장할 수 있다 (여러개 x)

    • 하나의 자바 파일에 default 접근 제어자를 사용하는 클래스는 무한정 만들 수 있음


캡슐화

캡슐화(Encapsulation)는 데이터와 해당 데이터를 처리하는 메서드를 하나로 묶어서 외부에서의 접근을 제한하는 것을 말한다.

  • 객체 지향 프로그래밍의 중요한 개념 중 하나

  • 캡슐화를 통해 데이터의 직접적인 변경을 방지하거나 제한할 수 있다.

  • 속성(데이터)과 기능(메서드)을 하나로 묶고, 외부에 꼭 필요한 기능만 노출하고 나머지는 모두 내부로 숨김

  • 캡슐화를 안전하게 완성할 수 있게 만드는 장치가 바로 접근 제어자이다.


데이터를 숨겨라

  • 객체에는 속성(데이터)와 기능(메서드)이 있다.

  • 캡슐화에서 가장 필수로 숨겨야 하는 것은 속성(데이터)이다.

  • 객체 내부의 데이터를 외부에서 함부로 접근하게 두면 클래스 안에서 데이터를 다루는 모든 로직을 무시하고 데이터를 변경할 수 있기 때문에, 이는 캡슐화가 깨진 것이다.

  • 따라서 객체의 데이터는 객체가 제공하는 기능인 메서드를 통해 접근해야한다.


기능을 숨겨라

  • 객체의 기능 중에서 외부에서 사용하지 않고 내부에서만 사용하는 기능들이 있다.

  • 이런 기능도 모두 감추는 것이 좋다.


정리

  • 데이터는 모두 숨기고, 기능은 꼭 필요한 기능만 노출하자.

참고

profile
백엔드 개발자가 되고 싶어요
post-custom-banner

0개의 댓글