Java 정리

접근 제한자

으엉어엉 2025. 3. 26. 10:41
728x90

 

 자바 접근제어자 - private와 public의 차이점

자바에서 클래스의 필드나 메서드에 접근할 수 있는 범위는 접근제어자(Access Modifier) 로 결정됩니다. 이 중 가장 자주 사용되는 두 가지, private와 public의 차이점은 무엇일까요?


기본 구조

 
package edu.mju.oop;

public class Car {
    private int member_val;

    public void access(int a){
        member_val = a;  // 같은 클래스 내부라서 접근 가능
    }
}
  • member_val은 private으로 선언되어 있으므로 Car 클래스 내부에서만 접근 가능합니다.

 


 [같은 패키지 - 다른 클래스] →  접근 불가

package edu.mju.oop;

public class Asset {
    Car c = new Car();
    public void add(int val){
        c.member_val = val;  // 같은 패키지여도 다른 클래스에서는 private 접근 불가
    }
}

설명: Car와 Asset이 같은 패키지에 있어도 member_val은 private이므로 외부 클래스에서는 접근할 수 없습니다.


 [다른 패키지] →  접근 불가

package edu.mju.nonOOP;

public class Driver {
    Car c = new Car();
    public void drive(int speed){
        c.member_val = speed;  //  다른 패키지 + 다른 클래스
    }
}

설명: 패키지가 다르면 당연히 접근 불가! 게다가 private은 패키지 구분 없이 클래스 외부 접근 자체가 안 됨.


 [다른 패키지 + 상속 관계] →  접근 불가

package edu.mju.nonOOP;

public class BMW extends Car {
    public void valueUp(int add){
        member_val += add;  // 상속받아도 private 멤버에는 직접 접근 불가
    }
}

설명: 상속을 받았다고 해도 private 멤버는 서브 클래스에서도 접근할 수 없습니다.


 public이면 어떻게 될까?

public int member_val;로 바꿔준다면
 

위의 모든 경우에서 접근이 가능해져요. 어디서든지 객체를 통해 member_val에 접근할 수 있게 됩니다.


private vs public

제어자접근 가능 범위예시
private 같은 클래스 내부에서만 접근 가능 Car 클래스 내부의 member_val 접근
public 어디서든 접근 가능 외부 클래스, 다른 패키지, 서브 클래스 등 모두 접근 가능

 

  • 메서드는 public으로 선언해서 외부에서 접근하도록 함
  • setter, getter 메서드를 이용해 private 필드에 간접적으로 접근하게 한다
728x90

'Java 정리' 카테고리의 다른 글

Object Class  (0) 2025.03.24
참조형과 기본형  (0) 2025.03.23
리플렉션  (1) 2024.12.27
채팅 프로그램  (0) 2024.12.25
Logger  (0) 2024.11.22