개발이 취미인 사람

[Java] 접근 제어자 (Access Modifier) 본문

언어(Programming Language)/Java

[Java] 접근 제어자 (Access Modifier)

RyanSin 2021. 1. 28. 01:30
반응형

- 개요

안녕하세요. 이번 시간에는 자바에 접근 제어자(Access Modifier)에 대해 알아보겠습니다.

 

접근 제어자는 말 그대로 "변수와 메서드에 접근을 어디까지 허용하게 할 것인지 권한을 설정" 할 때 사용됩니다.

 

- 종류

  • private
  • default
  • protected
  • public

private

접근 제어자가 private으로 설정되었다면, "해당 변수와 메서드는 해당 클래스에서만 접근"이 가능합니다.

 

package com.company.person;

public class Person {

    private String name; // 이름
    private int age; // 나이 
    
}

private 변수 참조 불가

해당 변수를 호출하려고 했지만... 역시 호출할 수가 없습니다.

 

default

접근 제어자를 별도로 설정하지 않으면 "기본 변수, 메서드가 되며 해당 패키지 내에서만 접근"이 가능합니다.

 

package com.company.person;

public class Person {

    String name; // 이름
    int age; // 나이
}

동일하지 않은 패키지
동일한 패키지

동일하지 않은 패키지에서 person의 name을 호출하게 되면 변수를 호출 할수 없습니다.

 

하지만 동일한 패키지에서는 가능하죠 :)

 

여기서 패키지는 폴더를 뜻합니다. 같은 폴터 안에 포함 됐다면 접근이 가능합니다.

 

폴더 구조

 

protected

접근 제어자가 protected로 설정 되었다면 "동일한 패키지내의 클래스" 또는 "해당 클래스를 상속 받은 외부 패키지의 클래스"까지 접근이 가능합니다.

 

당연히 동일한 패키지에는 변수를 참조할 수 있겠죠? 그럼 외부 패키지 클래스 예시를 진행하겠습니다.

 

package Access;

import Access.person.Person;

public class Adult extends Person {

    public void setName(){

        name = "다른 패키지 : 개발이 취미인 남자";

        System.out.println(name);
    }
}

 

외부 패키지 클래스에서 Person 클래스를 상속 받았습니다.

 

외부 패키지 클래스에서 다음과 같은 setName 메서드 안에 name 값을 참조하고 있다. 해당 name 은 Person(부모 클래스) 변수이다.

 

package Access;

public class Main {

    public static void main(String[] args) {

        Adult adult = new Adult();
        adult.setName();

    }
}

//실행 결과 콘솔화면
다른 패키지 : 개발이 취미인 남자

 

public

접근 제어자가 public으로 설정되었다면, 변수와 메서드는 패키지에 상관 없이 모든 클래스에서 접근이 가능합니다.

 

이번 시간에는 자바 접근 제어자(Access Modifier)에 대해 알아봤습니다.

 

모든 실습을 해보시는 걸 추천드리겠습니다. :) 프로그래밍은 실전이니깐요~~ ㅎ