목차
개요
본 포스팅은 앞으로 카카오테크캠퍼스 백엔드 과정에 따른 공부를 기록하는 용도로 사용할 예정이다.
자바에서의 접근제어지시자
접근 제어자는 총 4가지가 존재하는데
public, protected, default ,private가 존재한다.
이는 클래스, 인터페이스, 멤버 변수, 메서드 등에 적용 가능하며 이는 클래스나 멤버의 접근가능 범위에 대해서 말하고 있다.
접근 제어자를 사용하여 클래스와 멤버의 접근성을 관리하게된다면 객체 지향 프로그래밍의 중요한 원칙 중 하나인 캡슐화를 구현할 수 있는데 캡슐화란 객체 내부의 상태와 행위를 외부에서 직접 접근하지 못하게 함으로써(기능구현에 유리하게 적용) 객체의 무결성을 유지하고 코드의 안정성을 높이는 설계 방식이다.
public 부터 알아보자
public
public 접근 제어자는 클래스나 멤버가 어디서든 접근 가능하다는 것을 나타낸다.
4가지 제어자 중에서 가장 넓은 접근 권한을 부여해준다.
public class PublicExample {
public int publicVar;
public void publicMethod() {
System.out.println("Public method called");
}
}
이 경우, PublicExample 클래스와 그 안의 publicVar 변수 및 publicMethod 메서드는 어디서든 접근할 수 있다.
protected
protected 접근 제어자는 동일 패키지 내의 클래스와 해당 클래스의 서브 클래스에서만 접근 가능하다.
이것에 대한 예시는 JLS의 래퍼런스의 예제를 통해서 알아보자
예제 8.8.9-2. Accessibility of Constructors v. Classes 을 보게되면
예제는 생성자와 클래스의 접근성 간의 차이를 보여주는데 Outer 클래스는 public이며, Inner 클래스는 protected
SonOfOuter 클래스는 다른 패키지에 있고, p1.Outer 클래스를 상속받는다.
SonOfOuter 클래스에서 Inner 클래스는SonOfOuter가 Outer의 하위 클래스이기 때문에 접근이 가능
Inner 클래스의 기본 생성자는 SonOfOuter가 Inner의 하위 클래스가 아니기 때문에 SonOfOuter에서 접근이 불가능
하위 클래스(서브 클래스)인가 아닌가에 따른 접근 여부가 가려지는 것을 확인 할 수 있다.
더 자세한 내용은 아래 글을 읽어보자 캡슐화에 대한 이해도 할 수 있을것이다.
private
private 접근 제어자는 해당 클래스 내부에서만 접근이 가능하다. 다른 클래스에서는 접근이 불가능하다.
가장 제한적인 접근권한을 부여한다.
public class Outer {
private class Inner {
private int innerVar;
private void innerMethod() {
System.out.println("Private method called");
}
}
}
이 경우에는 Inner하고 void 형의 innerMethod()는 Outer 이라는 클래스 내에서만 접근이 가능하다.
대부분 클래스의 내부 구현을 숨기고 외부로 보호하기 위해서 private를 사용한다.
외부에서 접근할 필요가 없는 멤버에 대한 캡슐화를 강화할때 이용한다.
default access (명시하지 않은 경우 기본 제어 지시자)
접근 제어자를 생략한 경우, default 접근 제어자가 적용된다. default는 동일 패키지 내의 클래스에서만 접근 가능하다.
이또한 정보의 은닉 정도를 조절할때 이용된다
정보은닉을 통한 캡슐화
정보은닉 : 꼭 필요한 정보만 외부 패키지에 보여주고 나머지 구현 세부사항은 숨기는 것
캡슐화 : 객체의 상태(속성)과 행동(메서드)를 하나의 클래스로 묶는 작업
정보은닉을 적용한 캡슐화 : 외부에 노출되지 않아도 되는 세부 구현을 숨겨서 외부 패키지에 제공할 속성과 메서드를 구분한 작업
'미사용 > KakaoTechCampus' 카테고리의 다른 글
Java기초[5] 예제로 알아보는 static 변수, 싱글톤 패턴 (0) | 2023.04.13 |
---|---|
Java기초[4] this, super와 클래스 상속 (0) | 2023.04.12 |
Java기초[2] 생성자, 기본 / 참조자료형 (0) | 2023.04.12 |
Java기초[1] OOP 객체지향언어 구성요소 (0) | 2023.04.11 |
카카오 테크 캠퍼스 코딩테스트/합격 후기 (12) | 2023.04.05 |