Java/문법

[JAVA 중급 스터디 - 2회차] 접근 제한자와 캡슐화

soowitty 2024. 3. 8. 16:27

접근 제한자

접근 제한자는 외부로부터 데이터를 보호하고, 외부에는 불필요한(내부적으로만 사용되는) 부분을 감추기 위해 사용한다.

 

접근제한자의 종류

접근 제한자에는 public, protected, default, private이 있다.

  • 생성자, 메서드, 필드의 접근 제한자로는 public, protected, default, private 이 모두 가능하다.
  • 클래스의 접근 제한자로는 private, public 만 가능하다.

public > protected > default > private 순으로 많은 접근을 허용함

 

private

  • 모든 외부 호출을 막음
  • 클래스 안으로 속성과 기능을 숨길 때 사용
  • 외부 클래스에서 private 클래스 내부의 기능을 호출할 수 없음

 

default (=package-private)

  • 같은 패키지 안에서만 호출을 허용
  • 패키지 안으로 속성과 기능을 숨길 때 사용
  • 외부 패키지에서 해당 패키지 내부의 기능을 호출할 수 없음

 

protected

  • 같은 패키지 안에서 호출을 허용하고, 서로 다른 패키지이더라도 상속 관계에 있으면 호출을 허용
  • 상속 관계로 속성과 기능을 숨길 때 사용
  • 상속 관계가 아닌 곳에서 해당 기능을 호출할 수 없음

 

public

image

  • 모든 외부 호출을 허용
  • 기능을 숨기지 않고 어디서든 호출 가능하도록 공개함

✏️ 참고

  • 접근 제어자를 명시하지 않으면, 기본적으로 default가 적용됨 (접근 제어자의 기본값은 default!)
  • 접근 제어자의 핵심은 속성기능을 외부로부터 숨기는 것!

 

클래스에 접근 제한자 사용

  • 클래스 레벨의 접근 제어자는 public, default 만 사용 가능
  • public 클래스는 반드시 파일명 == 이름 !
    • 하나의 자바 파일에는 public 클래스는 하나만 등장 가능
    • 하나의 자바 파일에 default 접근 제어자를 사용하는 클래스는 무한 생성 가능

 

캡슐화

객체 지향 프로그래밍의 4가지 특징(추상화, 상속, 다형성, 캡슐화) 중 하나이다.
접근제한자는 캡슐화를 실현 가능하게 해준다!

캡슐화란?

  • 데이터해당 데이터를 처리하는 메서드 를 하나로 묶어 캡슐로 만들어서 외부에서의 접근을 제한하는 것이다.
    • 이때, 접근 제한자가 외부에서의 접근을 제한할 수 있도록 해준다.
  • 속성과 기능을 하나로 묶고, 외부에서 꼭 필요한 기능만 노출하고 나머지는 모두 내부로 숨긴다.

 

캡슐화의 목적

  • 클래스에 정의된 속성과 기능들을 외부로부터 보호한다.
  • 필요한 부분만 외부로 노출될 수 있도록 한다.

각 객체의 고유의 독립성과 책임 영역을 안전하게 지키고자 함!

 

좋은 캡슐화

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

객체 = 속성(데이터) + 기능(메서드)

  • 속성(데이터) : 객체의 데이터는 객체가 제공하는 기능인 메서드를 통해서 접근해야 한다.
  • 기능(메서드) : 사용자 입장에서 꼭 필요한 기능만 외부에 노출하고, 나머지 기능은 모두 내부로 숨겨야 한다.
    📌 좋은 캡슐화 == 데이터는 모두 숨기고, 꼭 필요한 기능만 노출하는 것

 

캡슐화 vs. 정보 은닉

  • 정보 은닉 : 객체지향 언어적 요소를 활용하여 객체에 대한 구체적인 정보를 노출시키지 않도록 하는 기법
  • 정보 은닉의 종류
    • 업캐스팅 : 객체의 구체적인 타입 은닉
    • 캡슐화 : 객체의 필드 및 메소드 은닉
    • 인터페이스 & 추상 클래스 : 구현 은닉
  • 정보 은닉 기법 중 하나가 캡슐화인 것이다. (캡슐화 != 정보은닉)