새소식

java

접근 제어자(access level modifier)

  • -

제어자(modifier)란 클래스와 클래스 멤버의 선언 시 사용하여 부가적인 의미를 부여하는 키워드를 의미한다.

자바에서 제어자는 접근 제어자(access modifier)와 기타 제어자로 구분할 수 있다.

기타 제어자는 경우에 따라 여러 개를 함께 사용할 수도 있지만, 접근 제어자를 두 개 이상 같이 사용할 수는 없다.

접근 제어자와 기타 제어자는 조합에 따라 함께 사용할 수 있다.

 

 

객체 지향에서 정보 은닉(data hiding)이란 개념이 있는데, 사용자가 굳이 알 필요가 없는 정보는 사용자로부터 숨겨야 한다는 뜻이다.

(이렇게 함으로써 사용자는 언제나 최소한의 정보만으로 프로그램을 손쉽게 사용 가능)

자바에서는 이러한 정보 은닉을 위해 접근 제어자(access modifier)라는 기능을 제공

 

 

접근 제어자는 네 종류가 있으며( private, default, protected, public )

private -> default -> protected -> public 순으로 보다 많은 접근을 허용

 

<private>

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

public class Sample {
    private String secret;
    private String getSecret() {
        return this.secret;
    }
}

// secret 변수와 getSecret 메서드는 오직 Sample 클래스에서만 접근이 가능하고 다른 클래스에서는 접근이 불가능

 

<default>

접근 제어자를 별도로 설정하지 않는다면

접근 제어자가 없는 변수, 메서드는 default 접근 제어자가 되어 해당 패키지 내에서만 접근이 가능

// house/HouseKim.java

package house;  // 패키지가 동일하다.

public class HouseKim {
    String lastname = "kim";  // lastname은 default 접근제어자로 설정된다.
}

 

// house/HousePark.java

package house;  // 패키지가 동일하다.

public class HousePark {
    String lastname = "park";

    public static void main(String[] args) {
        HouseKim kim = new HouseKim();
        System.out.println(kim.lastname);  // HouseKim 클래스의 lastname 변수를 사용할 수 있다.
    }
}

// HouseKim과 HousePark의 패키지는 house로 동일하다. 따라서 HousePark 클래스에서 HouseKim의 lastname 변수에 접근이 가능

 

<protected>

protected가 붙은 변수, 메서드는 동일 패키지의 클래스 또는 해당 클래스를 상속받은 다른 패키지의 클래스에서만 접근이 가능

// house/HousePark.java

package house;  // 아래와 패키지가 서로 다르다.

public class HousePark {
    protected String lastname = "park";
}

 

// house/person/EungYongPark.java

package house.person;  // 패키지가 서로 다르다.

import house.HousePark;

public class EungYongPark extends HousePark {  // HousePark을 상속했다.
    public static void main(String[] args) {
        EungYongPark eyp = new EungYongPark();
        System.out.println(eyp.lastname);  // 상속한 클래스의 protected 변수는 접근이 가능하다.
    }
}

HousePark 클래스를 상속한 EungYongPark 클래스의 패키지는 house.person으로 HousePark의 패키지인 house와 다름

하지만, HousePark의 lastname 변수가 protected이기 때문에 eyp.lastname과 같은 접근이 가능

lastname의 접근제어자가 protected 가 아닌 default 접근제어자였다면 eyp.lastname 문장은 컴파일 오류가 발생할 수 있는데,

default 접근제어자는 같은 패키지 내에서만 접근할 수 있기 때문이다.

 

<public>

 public 접근제어자가 붙은 변수, 메서드는 어떤 클래스에서라도 접근이 가능

package house;

public class HousePark {
    protected String lastname = "park";
    public String info = "this is public message.";
}

 

import house.HousePark;

public class Sample {
    public static void main(String[] args) {
        HousePark housePark = new HousePark();
        System.out.println(housePark.info);
    }
}

// 위 HousePark의 info 변수는 public 접근 제어자가 붙어 있으므로 어떤 클래스라도 접근이 가능

 

 

 

 

<참고>

https://wikidocs.net/232

 

07-02 접근제어자 (Access Modifier)

자바는 접근제어자를 사용하여 변수나 메서드의 사용 권한을 설정할 수 있다. [TOC] ## 접근 제어자 변수나 메서드의 사용 권한은 다음과 같은 접근 제어자를 사용하여 …

wikidocs.net

http://www.tcpschool.com/java/java_modifier_accessModifier

 

코딩교육 티씨피스쿨

4차산업혁명, 코딩교육, 소프트웨어교육, 코딩기초, SW코딩, 기초코딩부터 자바 파이썬 등

tcpschool.com

 

'java' 카테고리의 다른 글

입출력  (0) 2023.01.08
Interface  (0) 2023.01.08
상속  (0) 2023.01.08
생성자와 this (기초개념)  (0) 2023.01.08
Exception  (0) 2022.12.22
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.