java
자바에서 접근제어자는 클래스, 메서드, 변수 등의 멤버에 대한 접근 권한을 제어하는 데 사용됩니다. 각 멤버에 대한 접근 권한을 제어하여 외부에서의 무분별한 접근을 방지하고, 객체 지향 프로그래밍의 캡슐화 원칙을 유지하는 데 사용됩니다.
💡다음은 자바에서 사용되는 네 가지 접근 제어자의 허용 범위를 나타내는 표입니다.
클래스 내부 | 같은 패키지 내의 클래스 | 다른 패키지의 자식 클래스 | 다른 패키지의 클래스 | |
---|---|---|---|---|
public | O | O | O | O |
protected | O | O | O | X |
default | O | O | X | X |
private | O | X | X | X |
public class Example {
private int privateField; // 비공개 필드 - 클래스 내부에서만 접근 가능
public int publicField; // 공개된 필드 - 어디서든 접근 가능
protected int protectedField; // 보호된 필드 - 같은 패키지 또는 상속받은 클래스에서 접근 가능
int defaultField; // 기본 접근 제어자 (default) 필드 - 같은 패키지에서만 접근 가능
}
Javapublic class Example {
private void privateMethod() {
// 비공개 메서드 - 클래스 내부에서만 호출 가능
}
public void publicMethod() {
// 공개된 메서드 - 어디서든 호출 가능
}
protected void protectedMethod() {
// 보호된 메서드 - 같은 패키지 또는 상속받은 클래스에서 호출 가능
}
void defaultMethod() {
// 기본 접근 제어자 (default) 메서드 - 같은 패키지에서만 호출 가능
}
}
Java// 공개된 클래스 - 어디서든 접근 가능
public class PublicClass {
}
// 기본 접근 제어자 (default) 클래스 - 같은 패키지에서만 접근 가능
class DefaultClass {
}
Javapublic class Outer {
private class InnerPrivate {
// 비공개 내부 클래스 - 외부 클래스 내부에서만 접근 가능
}
public class InnerPublic {
// 공개된 내부 클래스 - 어디서든 접근 가능
}
protected class InnerProtected {
// 보호된 내부 클래스 - 같은 패키지 또는 상속받은 클래스에서 접근 가능
}
class InnerDefault {
// 기본 접근 제어자 (default) 내부 클래스 - 같은 패키지에서만 접근 가능
}
}
Java// Person 클래스: 정보를 캡슐화하고 접근 제어자를 활용한 예제
public class Person {
private String name; // 비공개 필드
private int age; // 비공개 필드
public String address; // 공개된 필드
// 생성자
public Person(String name, int age, String address) {
this.name = name;
this.age = age;
this.address = address;
}
// 비공개 메서드: name 필드에 접근하는 메서드
private String getName() {
return name;
}
// 공개된 메서드: age 필드에 접근하는 메서드
public int getAge() {
return age;
}
// 보호된 메서드: address 필드에 접근하는 메서드
protected String getAddress() {
return address;
}
// 기본 접근 제어자 메서드: 모든 정보를 출력하는 메서드
void printInfo() {
System.out.println("Name: " + getName());
System.out.println("Age: " + getAge());
System.out.println("Address: " + getAddress());
}
}
// Main 클래스: Person 클래스를 사용하는 메인 예제
public class Main {
public static void main(String[] args) {
// Person 객체 생성
Person person = new Person("Alice", 25, "123 Main St");
// 공개된 필드에 직접 접근 가능
System.out.println("Address: " + person.address);
// 비공개 및 보호된 메서드를 통해 접근
System.out.println("Name: " + person.getAge());
System.out.println("Age: " + person.getAge());
System.out.println("Address: " + person.getAddress());
// 기본 접근 제어자 메서드를 통해 모든 정보 출력
person.printInfo();
}
}
Java자바의 접근 제어자는 프로그램의 안정성과 유지보수성을 높이기 위한 중요한 도구로, 클래스, 메서드, 변수 등의 멤버에 대한 접근 권한을 제어합니다. 각 접근 제어자는 외부로부터의 불필요한 접근을 막아주며, 객체 지향 프로그래밍의 핵심 원칙 중 하나인 캡슐화를 실현합니다.
테스트 시 의존성 주입(Dependency Injection)과 Mockito Spring 애플리케이션을 개발하다 보면, 테스트 코드에서 실제 빈(Bean)을 사용하지…
들어가며 스프링 기반 프로젝트에서 좋은 설계 구조와 테스트 전략은 소프트웨어 품질과 유지보수성에 직결됩니다. 최근 학습한…
들어가며 코드를 작성할 때 종종 "이 로직을 어떻게 단순하고 읽기 쉽게 표현할 수 있을까?" 고민하게…
HTTP 상태코드란 무엇인가? HTTP 상태코드(HTTP Status Code)는 서버가 클라이언트의 요청을 처리한 결과를 수치화된 코드로 나타내는…
HTTP란 무엇인가? HTTP(Hypertext Transfer Protocol)는 웹에서 데이터를 주고받기 위해 사용하는 응용 계층 프로토콜입니다. 우리가 브라우저에서…