[Java] 접근제한자

김제현·2024년 1월 14일

Java

목록 보기
5/13
post-thumbnail

✔️ 접근 제어자의 종류

private

모든 외부 호출을 막는다.

default

같은 패키지 안에서 호출은 허용한다.

protected

같은 패키지 안에서 호출은 허용한다. 패키지가 달라도 상속 관계의 호출은 허용한다. 순서대로 privte이 가장 많이 차단하고, public이 가장 많이 허용한다.
private -> default -> protected -> public

public

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

접근 제어자 사용위치

접근 제어자는 필드와 메서드, 생성자에 사용된다. 추가로 클래스 레벨에도 일부 접근 제어자를 사용할 수 있다.
클래스 레벨의 접근 제어자에는 public, default만 사용할 수 있다. 하나의 자바 파일에 public 클래스는 하나만 등장할 수 있지만 하나의 자바 파일에 default 접근 제어자는 무한정으로 만들 수 있다.

public class Speaker {
	private int volume;		// 필드
    
    public Speaker(int volume) {}		// 생성자
    
    public void volumeUp() {}		// 메서드
    public void volumeDown() {}
    public void showVolume() {}
    
}

class DefaultClass1 {}
class DefaultClass2 {}

접근 제어자의 핵심은 속성과 기능을 외부로부터 숨기는 것이다.

private은 나의 클래스 안으로 속성과 기능을 숨길 때 사용한다. 외부 클래스에서 해당 기능을 호출할 수 없다.
defualt는 나의 패키지 안으로 속성과 기능을 숨길 때 사용한다. 외부 패키지에서 해당 기능을 호출할 수 없다.
protected는 상속 관계로 속성과 기능을 숨길 때 사용한다. 상속 관계가 아닌 곳에서 해당 기능을 호출할 수 없다.
public은 기능을 숨기지 않고 어디서든 호출할 수 있게 공개한다.

✔️ 캡슐화

캡슐화는 데이터와 해당 데이터를 처리하는 메서드를 하나로 묶어서 외부에서의 접근을 제한하는 것을 말한다. 캡슐화를 통해 데이터의 직접적인 변경을 방지하거나 제한할 수 있다.

속성과 기능을 하나로 묶고, 외부에 꼭 필요한 기능만 노출하고 나머지는 모두 내부로 숨기는 것을 의미한다.

1. 데이터를 숨겨라

객체에는 속성(데이터)과 기능(메서드)이 있다. 캡슐화에서 가장 필수로 숨겨야 하는 것은 속성이다. 외부에서 객체 내부의 데이터를 함부로 접근하게 두면 클래스 안에 데이터를 다루는 모든 로직을 무시하고 데이터를 변경할 수 있다.

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

2. 기능을 숨겨라

객체의 기능 중에서 외부에서 사용하지 않고 내부에서만 사용하는 기능들은 모두 감추는 것이 좋다. 예를 들어 우리가 자동차를 운전하기 위해 자동차가 제공하는 복잡한 엔진 조절 기능, 배기 기능까지 우리가 알 필요가 없다.

0개의 댓글