๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ’กCS/Java

์ ‘๊ทผ ์ œ์–ด์ž(private, default, protected, public)

by hyeon-z 2023. 6. 7.

 

private

 

ํ•ด๋‹น ํด๋ž˜์Šค์—์„œ๋งŒ ์ ‘๊ทผ ๊ฐ€๋Šฅํ•˜๋‹ค.

 

public class Main {
    private String access;

    private String getAccess() {
        return this.access;
    }
}

access๋ณ€์ˆ˜์™€ getAccess ๋ฉ”์„œ๋“œ๋Š” ์˜ค์ง Main ํด๋ž˜์Šค์—์„œ๋งŒ ์ ‘๊ทผ ๊ฐ€๋Šฅํ•˜๊ณ  ๋‹ค๋ฅธ ํด๋ž˜์Šค์—์„œ๋Š” ์ ‘๊ทผ์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค.

 

default

 

์ ‘๊ทผ ์ œ์–ด์ž๋ฅผ ๋ณ„๋„๋กœ ์„ค์ •ํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด ํ•ด๋‹น ๋ณ€์ˆ˜, ๋ฉ”์„œ๋“œ๋Š” defauilt ์ ‘๊ทผ ์ œ์–ด์ž๊ฐ€ ๋˜์–ด ํ•ด๋‹น ํŒจํ‚ค์ง€ ๋‚ด์—์„œ๋งŒ ์ ‘๊ทผ ๊ฐ€๋Šฅํ•˜๋‹ค.

 

๐Ÿ‘† name/Park.java (name ํŒจํ‚ค์ง€)

package name;

public class Park {
    String lastname = "Park";
}

 

๐Ÿ‘†name/Kim.java (name ํŒจํ‚ค์ง€)

package name;

public class Kim {
    String lastname = "Kim";

    public static void main(String[] args) {
        Park park = new Park();
        System.out.println(park.lastname);
    }
}

Park๊ณผ Kim๋Š” ๊ฐ™์€ ํŒจํ‚ค์ง€์— ์†ํ•ด์žˆ๋‹ค.(name)

๋”ฐ๋ผ์„œ Kimํด๋ž˜์Šค์—์„œ Park์˜ lastname ๋ณ€์ˆ˜์— ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

 

protected

 

๋™์ผ ํŒจํ‚ค์ง€์˜ ํด๋ž˜์Šค ๋˜๋Š” ํ•ด๋‹น ํด๋ž˜์Šค๋ฅผ ์ƒ์†๋ฐ›์€ ๋‹ค๋ฅธ ํŒจํ‚ค์ง€์˜ ํด๋ž˜์Šค์—์„œ๋งŒ ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

 

๐Ÿ‘† name/Park.java (name ํŒจํ‚ค์ง€)

package name;

public class Park {
    protected String lastname = "Park";
}

 

๐Ÿ‘† name/person/ParkMinHa.java (name/person ํŒจํ‚ค์ง€)

package name.person;

import name.Park;

public class ParkMinHa extends Park {
    public static void main(String[] args) {
        ParkMinHa pmh = new ParkMinHa();
        System.out.println(pmh.lastname);
    }
}

Park ํด๋ž˜์Šค๋ฅผ ์ƒ์†ํ•œ ParkMinHa ํด๋ž˜์Šค์˜ ํŒจํ‚ค์ง€๋Š” name.person์œผ๋กœ Park์˜ ํŒจํ‚ค์ง€์ธ name๊ณผ ๋‹ค๋ฅด๋‹ค.

ํ•˜์ง€๋งŒ Park์˜ lastname๋ณ€์ˆ˜๊ฐ€ protected์ด๊ธฐ ๋•Œ๋ฌธ์— pmh.lastname์œผ๋กœ ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•˜๋‹ค. 

 

๐Ÿค” Parkํด๋ž˜์Šค์˜ lastname๋ณ€์ˆ˜์˜ ์ ‘๊ทผ์ œ์–ด์ž๊ฐ€ default๋ผ๋ฉด?

์ปดํŒŒ์ผ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

"lastname' is not public in 'name.person'. Cannot be accessed from outside package"

 

public

 

์–ด๋–ค ํด๋ž˜์Šค์—์„œ๋ผ๋„ ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

 

package person;

public class PersonA {
    public String name = "HaHa";
}
package pet;

import person.PersonA;

public class Dog {
    public static void main(String[] args) {
        PersonA personA = new PersonA();
        System.out.println(personA.name);
    }
}

PersonAํด๋ž˜์Šค์˜ name๋ณ€์ˆ˜๋Š” public ์ ‘๊ทผ ์ œ์–ด์ž๊ฐ€ ๋ถ™์–ด์žˆ์œผ๋ฏ€๋กœ ์–ด๋–ค ํด๋ž˜์Šค๋ผ๋„ ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

 

โœ… ์ •๋ฆฌ

private: ํ•ด๋‹น ํด๋ž˜์Šค์—์„œ๋งŒ ์ ‘๊ทผ ๊ฐ€๋Šฅ

default: ํ•ด๋‹น ํŒจํ‚ค์ง€ ๋‚ด์—์„œ๋งŒ ์ ‘๊ทผ ๊ฐ€๋Šฅ

protected: ๋™์ผ ํŒจํ‚ค์ง€ + ํ•ด๋‹น ํด๋ž˜์Šค๋ฅผ ์ƒ์†๋ฐ›์€ ๋‹ค๋ฅธ ํŒจํ‚ค์ง€์˜ ํด๋ž˜์Šค์—์„œ ์ ‘๊ทผ ๊ฐ€๋Šฅ

public: ๋ชจ๋“  ํด๋ž˜์Šค ์ ‘๊ทผ ๊ฐ€๋Šฅ

 

์ ‘๊ทผ ํ—ˆ์šฉ ๋น„๊ต : private < default < protected < public

์ ‘๊ทผ์ž ํด๋ž˜์Šค ๋‚ด๋ถ€ ํŒจํ‚ค์ง€ ์ƒ์†๋ฐ›์€ ํด๋ž˜์Šค ์ด์™ธ์˜ ์˜์—ญ
private O X X X
default O O X X
protected O O O X
public O O O O

 

Referemce

https://wikidocs.net/232

๋Œ“๊ธ€