안녕하세요, 20년 차 자바 개발자 코딩하는곰입니다. 오늘은 자바 프로그래밍의 핵심 개념 중 하나인 접근 제어자(Access Modifiers)에 대해 깊이 있게 알아보겠습니다. public, private, protected는 자바에서 클래스, 변수, 메소드의 접근 범위를 제어하는 중요한 키워드입니다. 이 개념을 제대로 이해하지 못하면 객체지향 프로그래밍의 근간인 캡슐화를 구현하기 어렵습니다. 이 글을 끝까지 읽으시면 접근 제어자를 완벽히 이해하고 실무에 적용할 수 있을 거예요!
접근 제어자는 객체지향 프로그래밍의 4대 특징 중 하나인 ‘캡슐화’를 구현하는 핵심 요소입니다. 자바에서는 다음과 같은 4가지 접근 레벨을 제공합니다:
public class AccessExample {public int publicVar = 1;protected int protectedVar = 2;int defaultVar = 3; // default 접근 제어자private int privateVar = 4;}
각 접근 제어자는 클래스, 인터페이스, 변수, 생성자, 메소드에 적용될 수 있습니다. 특히 중요한 것은 클래스 레벨에서는 public과 default만 사용 가능하다는 점입니다.
각 접근 제어자의 구체적인 차이를 표와 예제로 살펴보겠습니다. | 접근 제어자 | 같은 클래스 | 같은 패키지 | 다른 패키지 자식 클래스 | 다른 패키지 일반 클래스 | |------------|------------|------------|-------------------------|------------------------| | public | O | O | O | O | | protected | O | O | O | X | | default | O | O | X | X | | private | O | X | X | X |
// 다른 패키지에서의 접근 테스트package com.another;import com.example.AccessExample;public class TestClass {public void test() {AccessExample example = new AccessExample();System.out.println(example.publicVar); // 가능// System.out.println(example.protectedVar); // 컴파일 에러// System.out.println(example.defaultVar); // 컴파일 에러// System.out.println(example.privateVar); // 컴파일 에러}}
protected는 상속 관계에서 특히 중요한 역할을 합니다. 자식 클래스가 다른 패키지에 있더라도 부모 클래스의 protected 멤버에 접근할 수 있습니다.
빠르게 사칙연산만 하고 싶을 땐, 설치 없이 바로 사용할 수 있는 간단 계산기 도구가 유용합니다.
실제 프로젝트에서는 다음과 같은 원칙으로 접근 제어자를 사용합니다:
public class BankAccount {private double balance; // 외부에서 직접 접근 불가public void deposit(double amount) {if (amount > 0) {balance += amount;}}}
