Java Spring

9. 접근 제어자

pearl.k 2023. 4. 3. 16:04

1. 클래스 멤버에 대한 접근 제어자

 접근 제어자는 클래스의 멤버(변수, 메소드) 들의 접근 권한을 지정한다. 사용자가 접근하면 안되거나, 접근할 필요가 없는 멤버들에 적절한 접근 제어자를 설정해줘야 한다.

 아래 코드를 보면 public 으로 선언된 메소드는 다른 클래스에서 호출할 수 있다. 그러나 private 으로 선언된 z는 다른 클래스에서 호출할 수 없다. private은 본인이 속한 클래스 밖에서 호출하면 안되고, 클래스 내부에서만 호출이 가능하다. 이런 클래스는 내부적으로 사용하면 된다.

 public String x 메소드를 보면, return z(); 하는 것을 볼 수 있다. 다른 클래스에서 x를 실행하여, 해당 클래스 내부에서 z를 되돌려준다면 z를 사용할 수 있다. (아래 결과 참조) 이를 내부적 사용이라고 한다.

class A {
    public String y(){
        return "public void y()";
    }
    private String z(){
        return "public void z()";
    }
    public String x(){
        return z();
    }
}

class Main {

    public static void main(String[] args) {
        A a = new A();
        System.out.println(a.y());
        // 아래 코드는 오류가 발생
        //System.out.println(a.z()); z로 바로 접근 불가능, x를 통해 접근 가능
        System.out.println(a.x()); 
    }
}
// print 결과
// public void y()
// public void z()

 

 접근 제어자를 사용하는 이유는 다음과 같다.

  • 사용자가 의도하지 않게 내부 객체까지 접근하는 것 막기 : 오류가 생기거나 의도하지 않은 동작 발생 가능성
  • 객체의 로직 보호 : 객제가 외부 사용자에 의해 수정되지 않게 만들기
  • 사용자에게 only 객체 조작 수단만 제공 : 사용자가 객체 사용에 집중할 수 있도록 함

JAVA 접근 제어자 종류와 범위를 그림으로 나타낸 것

출처: 한빛미디어
출처: 생활코딩 자바

 

 

2. 클래스에 대한 접근 제어자

 클래스의 접근 제어자는 총 2가지이다. (public / default) 클래스의 접근 제어자는 package와 관련된 개념이다.

  • default: 클래스 선언 시, 접근 제어자를 붙이지 않으면 default가 된다. 같은 package 내에서만 사용 가능하다.
  • pulbic: 다른 package의 클래스에서도 사용할 수 있는 클래스이다.
    • 중요한 제약사항: public 클래스가 포함된 소스코드는, public 클래스의 클래스 명과 소스코드의 파일 명이 같아야 한다. 하나의 소스코드에는 하나의 public 클래스가 존재할 수 있다.