접근 제한자
접근 제한자는 외부로부터 데이터를 보호하고, 외부에는 불필요한(내부적으로만 사용되는) 부분을 감추기 위해 사용한다.
접근제한자의 종류
접근 제한자에는 public
, protected
, default
, private
이 있다.
생성자
,메서드
,필드
의 접근 제한자로는public
,protected
,default
,private
이 모두 가능하다.클래스
의 접근 제한자로는private
,public
만 가능하다.
public > protected > default > private 순으로 많은 접근을 허용함
private
- 모든 외부 호출을 막음
- 클래스 안으로 속성과 기능을 숨길 때 사용
- 외부 클래스에서 private 클래스 내부의 기능을 호출할 수 없음
default (=package-private)
- 같은 패키지 안에서만 호출을 허용
- 패키지 안으로 속성과 기능을 숨길 때 사용
- 외부 패키지에서 해당 패키지 내부의 기능을 호출할 수 없음
protected
- 같은 패키지 안에서 호출을 허용하고, 서로 다른 패키지이더라도 상속 관계에 있으면 호출을 허용
- 상속 관계로 속성과 기능을 숨길 때 사용
- 상속 관계가 아닌 곳에서 해당 기능을 호출할 수 없음
public
- 모든 외부 호출을 허용
- 기능을 숨기지 않고 어디서든 호출 가능하도록 공개함
✏️ 참고
- 접근 제어자를 명시하지 않으면, 기본적으로
default
가 적용됨 (접근 제어자의 기본값은 default!) - 접근 제어자의 핵심은 속성과 기능을 외부로부터 숨기는 것!
클래스에 접근 제한자 사용
- 클래스 레벨의 접근 제어자는
public
,default
만 사용 가능 - public 클래스는 반드시 파일명 == 이름 !
- 하나의 자바 파일에는 public 클래스는 하나만 등장 가능
- 하나의 자바 파일에 default 접근 제어자를 사용하는 클래스는 무한 생성 가능
캡슐화
객체 지향 프로그래밍의 4가지 특징(추상화, 상속, 다형성, 캡슐화) 중 하나이다.
접근제한자는 캡슐화를 실현 가능하게 해준다!
캡슐화란?
데이터
와해당 데이터를 처리하는 메서드
를 하나로 묶어 캡슐로 만들어서 외부에서의 접근을 제한하는 것이다.- 이때, 접근 제한자가 외부에서의 접근을 제한할 수 있도록 해준다.
- 속성과 기능을 하나로 묶고, 외부에서 꼭 필요한 기능만 노출하고 나머지는 모두 내부로 숨긴다.
캡슐화의 목적
- 클래스에 정의된 속성과 기능들을 외부로부터 보호한다.
- 필요한 부분만 외부로 노출될 수 있도록 한다.
각 객체의 고유의 독립성과 책임 영역을 안전하게 지키고자 함!
좋은 캡슐화
- 캡슐화에서 필수적으로 숨겨야 하는 것은 속성(데이터)이다.
객체 = 속성(데이터) + 기능(메서드)
속성(데이터)
: 객체의 데이터는 객체가 제공하는 기능인 메서드를 통해서 접근해야 한다.기능(메서드)
: 사용자 입장에서 꼭 필요한 기능만 외부에 노출하고, 나머지 기능은 모두 내부로 숨겨야 한다.
📌 좋은 캡슐화 == 데이터는 모두 숨기고, 꼭 필요한 기능만 노출하는 것
캡슐화 vs. 정보 은닉
정보 은닉
: 객체지향 언어적 요소를 활용하여 객체에 대한 구체적인 정보를 노출시키지 않도록 하는 기법- 정보 은닉의 종류
업캐스팅
: 객체의 구체적인 타입 은닉캡슐화
: 객체의 필드 및 메소드 은닉인터페이스 & 추상 클래스
: 구현 은닉
- 정보 은닉 기법 중 하나가 캡슐화인 것이다. (캡슐화 != 정보은닉)
'Java > 문법' 카테고리의 다른 글
[JAVA 중급 스터디 - 4~5회차] static (0) | 2024.03.20 |
---|---|
[JAVA 중급 스터디 - 3회차] 자바의 메모리 구조 (0) | 2024.03.09 |
[JAVA 중급 스터디 - 1회차] 기본형/참조형, Wrapper Class생성자, 패키지 (0) | 2024.03.08 |
[Java] 배열의 공통 원소 집합 구하기 (0) | 2024.03.02 |
[Java 문법] Scanner보다 빠른 BufferedReader, StringTokenizer (0) | 2024.01.29 |