[Java] 접근 제어자

Bam·2024년 3월 1일
0

Java

목록 보기
32/98
post-thumbnail

자바에서는 객체지향 프로그래밍의 네 가지 특징 중 하나인 캡슐화를 지원하기 위해 접근 제어자를 제공하고 있습니다. 접근 제어자를 이용해서 객체를 외부에 얼마나 결정할지 결정할 수 있습니다.

캡슐화는 객체의 내부 구조는 숨기고 사용법만 외부에 공개함으로서 사용하기 편하게 만듦과 동시에 보안성도 높이는 특징입니다.

접근 제어자에는 public, protected, pirvate 세 가지 종류가 있습니다. 정확하게는 default라는 접근 제어자까지 더해 4가지이기도 합니다.

public

public 접근 제어자는 제한 범위가 없습니다. 외부로부터의 접근을 자유롭게 허용하고 있습니다.

publicclass 앞에서도 사용될 수 있는데요. 클래스 앞에 사용될 경우 해당 클래스의 이름은 파일명과 반드시 일치해야한다는 것과 어디에서든지 접근할 수 있다는 특징을 갖습니다.

protected

protected는 같은 패키지, 상속받은 자식 클래스에서만 접근이 가능한 접근 제어자입니다.

private

private은 가장 좁은 범위의 허용을 하는 접근 제어자로 객체 자기 자신의 내부에서만 접근할 수 있고 외부에서는 절대로 접근할 수 없습니다.

default

defaultdefault 접근 제어자를 붙이거나 접근 제어자를 붙이지 않았을 경우의 상태입니다. default는 같은 패키지 내에서만 접근이 가능합니다.

default를 사용하고자 할 경우 일반적으로는 default를 적어주는 것이 아닌 접근 제어자가 없는 상태로 작성합니다.


정리하자면 다음과 같습니다.

  • public: 어디에서나 호출 가능
  • protected: 자기 자신과 상속받은 클래스에서만 호출 가능
  • private: 자기 자신만이 호출 가능
  • default: 같은 패키지 내부에서만 호출 가능

접근 범위의 넒이를 정리하면 다음과 같습니다.
public > protected > default > private

public class Member {
    protected String name;

    protected Member() {
        System.out.println("Member 클래스 기본 생성자 호출");
    }
}
public class Student extends Member {
    private int grade;

    public Student(String name, int grade) {
        this.name = name;
        this.grade = grade;
    }

    public void printStudentInfo() {
        System.out.println("이름: " + name + "\n" + "학년: " + grade);
    }
}
public class Main {
    public static void main(String[] args) {
        Student student = new Student("김사과", 1);

        student.printStudentInfo();
    }
}

위 코드를 실행했을 때, 각 접근 제어자의 성격에 맞게 올바른 위치에서 호출을 했기 때문에 오류가 발생하지 않습니다. 하지만 외부의 클래스인 Main에서 상속받은 클래스만이 호출할 수 있는 protected 멤버나, Student 클래스의 private멤버를 호출하면 오류가 발생합니다.


지금까지는 전부 public으로 선언했는데요. 어디서든 접근가능한 public의 특성상 정말 필요한 경우가 아니고서야 protected, private를 사용하는 것이 권장됩니다.

0개의 댓글