Java

์ œ์–ด์žModifier

voider 2020. 9. 6. 19:02

๐Ÿ“š ์ž๋ฐ”์˜ ์ •์„์„ ์ •๋ฆฌํ•œ ๋‚ด์šฉ์ž…๋‹ˆ๋‹ค.

์ œ์–ด์žModifier

Non-Access-Modifiers

์ ‘๊ทผ ์ œ์–ด์ž๊ฐ€ ์•„๋‹Œ ์ œ์–ด์ž๋“ค๋กœ๋Š”
static, final, abstract, synchronized......๋“ฑ์ด ์žˆ๋‹ค.

๋ช‡ ๊ฐ€์ง€๋งŒ ์†Œ๊ฐœํ•œ๋‹ค.

static

๋ฉค๋ฒ„๋ณ€์ˆ˜, ๋ฉ”์„œ๋“œ, ์ดˆ๊ธฐํ™” ๋ธ”๋Ÿญ ์•ž์— ๋ถ™๋Š”๋‹ค.
static์ด ๋ณ€์ˆ˜์— ๋ถ™์œผ๋ฉด ๋ชจ๋“  ์ธ์Šคํ„ด์Šค์—์„œ ๊ณตํ†ต์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ํด๋ž˜์Šค ๋ณ€์ˆ˜๊ฐ€ ๋œ๋‹ค.
๋ฉ”์„œ๋“œ์— ๋ถ™์œผ๋ฉด ์ธ์Šคํ„ด์Šค ์ƒ์„ฑ์—†์ด ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๋Š” static ๋ฉ”์„œ๋“œ๊ฐ€ ๋œ๋‹ค.

final

ํด๋ž˜์Šค, ๋ฉ”์„œ๋“œ, ๋ฉค๋ฒ„๋ณ€์ˆ˜, ์ง€์—ญ๋ณ€์ˆ˜์— ๋ถ™๋Š”๋‹ค.
final์ด ๋ถ™์œผ๋ฉด ์ˆ˜์ •ํ•  ์ˆ˜ ์—†๋Š” ๋ฉ”์„œ๋“œ, ๋ณ€์ˆ˜, ํด๋ž˜์Šค๊ฐ€ ๋œ๋‹ค.
์ฆ‰,
final๋ณ€์ˆ˜๋Š” ๊ฐ’์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†๋Š” ์ƒ์ˆ˜.
final method๋Š” ์˜ค๋ฒ„๋ผ์ด๋”ฉ ๋ถˆ๊ฐ€.
final class๋Š” extends ๋ถˆ๊ฐ€.

final ๋ณ€์ˆ˜๋ผ๋„
์ƒ์„ฑ์ž๋ฅผ ์ด์šฉํ•œ ์ดˆ๊ธฐํ™”๋ฅผ ํ†ตํ•ด ๊ฐ ์ธ์Šคํ„ด์Šค๋งˆ๋‹ค ๋‹ค๋ฅธ ๊ฐ’์„ ๊ฐ€์ง€๊ฒŒ ํ•  ์ˆ˜ ์žˆ๋‹ค.

abstract

ํด๋ž˜์Šค, ๋ฉ”์„œ๋“œ ์•ž์— ๋ถ™๋Š”๋‹ค.
ํด๋ž˜์Šค์— ๋ถ™์œผ๋ฉด, ์ถ”์ƒ ๋ฉ”์„œ๋“œ๊ฐ€ ์„ ์–ธ๋˜์–ด ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ๋œปํ•œ๋‹ค.
๋ฉ”์„œ๋“œ์— ๋ถ™์œผ๋ฉด ์„ ์–ธ๋ถ€๋งŒ ์žˆ๊ณ  ๊ตฌํ˜„๋ถ€๊ฐ€ ์—†๋Š” ์ถ”์ƒ ๋ฉ”์„œ๋“œ๋ผ๋Š” ๊ฒƒ์„ ๋œปํ•œ๋‹ค.

์ ‘๊ทผ ์ œ์–ด์žAccess-Modifiers

์ž๋ฐ”์—๋Š” public, protected, default, private ์ด๋ ‡๊ฒŒ 4๊ฐœ์˜ ์ ‘๊ทผ ์ œ์–ด์ž๊ฐ€ ์žˆ๋‹ค.

์ด๋ฏธ์ง€ ์ถœ์ฒ˜ : https://www.softwaretestingmaterial.com/access-modifiers-in-java/

  • public - ์ ‘๊ทผ ์ œํ•œ ์—†์Œ
  • protected ๊ฐ™์€ ํŒจํ‚ค์ง€ ๋‚ด, ๊ทธ๋ฆฌ๊ณ  ๋‹ค๋ฅธ ํŒจํ‚ค์ง€์˜ ์ž์†(sub)ํด๋ž˜์Šค์—์„œ๋งŒ ์ ‘๊ทผ ๊ฐ€๋Šฅ
  • default ๊ฐ™์€ ํŒจํ‚ค์ง€ ๋‚ด์—์„œ๋งŒ ์ ‘๊ทผ ๊ฐ€๋Šฅ
  • private ๊ฐ™์€ ํด๋ž˜์Šค ๋‚ด์—์„œ๋งŒ ์ ‘๊ทผ ๊ฐ€๋Šฅ

์ด๋ฏธ์ง€ ์ถœ์ฒ˜ : https://www.softwaretestingmaterial.com/access-modifiers-in-java/

์บก์Šํ™”

์™œ ๊ท€์ฐฎ๊ฒŒ ์ ‘๊ทผ์„ ์ œ์–ดํ• ๊นŒ? ๋ฐ์ดํ„ฐ๋ฅผ ๋ณดํ˜ธํ•˜๊ธฐ ์œ„ํ•ด์„œ๋‹ค. ํด๋ž˜์Šค ์™ธ๋ถ€์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ํ•จ๋ถ€๋กœ ๋ณ€๊ฒฝํ•˜์ง€ ๋ชปํ•˜๋„๋ก ๋ณดํ˜ธํ•  ํ•„์š”๊ฐ€ ์žˆ๋‹ค. ์ด๊ฒƒ์„ ๋ฐ์ดํ„ฐ ๊ฐ์ถ”๊ธฐData Hiding์ด๋ผ๊ณ  ํ•œ๋‹ค. Data Hiding์€ ๊ฐ์ฒด์ง€ํ–ฅ๊ฐœ๋…์—์„œ ์บก์Šํ™”Encapsulation์— ํ•ด๋‹นํ•˜๋Š” ๋‚ด์šฉ์ด๋‹ค.
๋‚ด๋ถ€์—์„œ๋งŒ ์ด์šฉํ•˜๊ณ , ์™ธ๋ถ€์—๋Š” ๋ถˆํ•„์š”ํ•œ ๋ถ€๋ถ„์„ ๊ฐ์ถ”๊ธฐ ์œ„ํ•ด ๋ฉค๋ฒ„๋ฅผ private์œผ๋กœ ์ง€์ •ํ•˜๋Š”๋ฐ, ์ด๊ฒƒ ์—ญ์‹œ ์บก์Šํ™”์— ํ•ด๋‹นํ•œ๋‹ค.
๋งŒ์•ฝ Time์ด๋ผ๋Š” ํด๋ž˜์Šค๋ฅผ ์ด๋ ‡๊ฒŒ ์ •์˜ํ•œ๋‹ค๊ณ  ํ•˜์ž.

class Time {

    int hour;
    int minute;
    int second;
}

์ด๋Ÿฌ๋ฉด ๋ˆ„๊ฐ€ ์–ธ์ œ ์–ด๋””์„œ๋“  ๊ฐ’์„ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์œ„ํ—˜ํ•˜๊ณ , ๋˜ ์‹œ๊ฐ„์œผ๋กœ ๋“ค์–ด์™€์•ผ ํ•˜๋Š” ๊ฐ’์— 25์ด๋‚˜ 33 ๊ฐ™์€ ์œ ํšจํ•˜์ง€ ์•Š์€ ๊ฐ’์„ ๋„ฃ์„์ง€๋„ ๋ชจ๋ฅธ๋‹ค. ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด์„œ ์ด๋ ‡๊ฒŒ ์“ด๋‹ค.

public class Time {

    private int hour, minute, second;

    Time(int hour, int minute, int second) {
        setHour(hour);
        setMinute(minute);
        setSecond(second);
    }

    /* SETTER */
    public int getHour() {
        return hour;
    }

    public int getMinute() {
        return minute;
    }

    public int getSecond() {
        return second;
    }

    /*GETTER*/
    public void setHour(int hour) {
        if(hour < 0 || hour > 23) return; //์œ ํšจ์„ฑ ๊ฒ€์‚ฌ
        this.hour = hour;
    }

    public void setMinute(int minute) {
        if(minute < 0 || minute > 59) return;
        this.minute = minute;
    }

    public void setSecond(int second) {
        if(second < 0 || second > 59) return;
        this.second = second;
    }

    @Override
    public String toString() {
        return "Time{" +
                "hour=" + hour +
                ", minute=" + minute +
                ", second=" + second +
                '}';
    }
}

public class TimeMain {
    public static void main(String[] args) {
        Time time = new Time(13, 47, 22);
        //time.hour = 22; ์ด์ œ ์ด๋Ÿฐ์‹์œผ๋กœ ์ˆ˜์ •ํ•˜์ง€ ์•Š๋Š”๋‹ค.
        time.setHour(time.getHour()+1);
        System.out.println(time);
    }
}

์ด๋Ÿฐ ์‹์œผ๋กœ ํ•˜๋ฉด Timeํด๋ž˜์Šค์˜ ๋ฉค๋ฒ„๋ฅผ ์ง์ ‘ ์ˆ˜์ •ํ•  ์ˆ˜ ์—†๋‹ค. setter๋ฅผ ๊ฑฐ์ณ์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ๋ฅผ ํ†ตํ•ด ์œ ํšจํ•˜์ง€ ์•Š์€ ๊ฐ’์€ returnํ•  ์ˆ˜ ์žˆ๋‹ค.

์ƒ์„ฑ์ž์˜ ์ ‘๊ทผ ์ œ์–ด์ž

์ผ๋ฐ˜์ ์œผ๋กœ ์ƒ์„ฑ์ž์˜ ์ ‘๊ทผ ์ œ์–ด์ž๋Š” ํด๋ž˜์Šค์˜ ์ ‘๊ทผ ์ œ์–ด์ž์™€ ์ผ์น˜ํ•˜์ง€๋งŒ ๋‹ค๋ฅด๊ฒŒ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.
private์œผ๋กœ ์ง€์ •ํ•˜๋ฉด ์™ธ๋ถ€์—์„œ ์ƒ์„ฑ์ž์— ์ ‘๊ทผํ•  ์ˆ˜ ์—†๋‹ค. ํ•ด๋‹น ํด๋ž˜์Šค ๋‚ด์— ์ธ์Šคํ„ด์Šค๋ฅผ returnํ•˜๋Š” static๋ฉ”์„œ๋“œ๋ฅผ ์„ ์–ธํ•ด๋‘๋ฉด, private์ƒ์„ฑ์ž์—ฌ๋„ ์™ธ๋ถ€์—์„œ ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.

์ฃผ์˜ํ•  ์ ์€ private ์ƒ์„ฑ์ž๋ฅผ ๊ฐ€์ง„ ํด๋ž˜์Šค๋Š” ๋‹ค๋ฅธ ํด๋ž˜์Šค์˜ ์กฐ์ƒ์ด ๋  ์ˆ˜ ์—†๋‹ค. ๋”ฐ๋ผ์„œ class ์•ž์— fianl์„ ๋ช…์‹œ์ ์œผ๋กœ ๋ถ™์ด๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.

์œ„์— ๋ง์ด ์ข€ ์–ด๋ ค์› ๋Š”๋ฐ ์ฝ”๋“œ๋กœ ๋ณด๋ฉด ์‰ฝ๋‹ค.

final class Singleton {
    private Singleton() {}

    public static Singleton getInstance() {
        return new Singleton();
    }
}

public class SingletonTest {
    public static void main(String[] args) {
       //Singleton singleton = new Singleton(); //ERROR
        Singleton singleton = Singleton.getInstance();
    }
}
  • ์ฐธ๊ณ ์ž๋ฃŒ : ์ž๋ฐ”์˜ ์ •์„

'Java' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

๋‹คํ˜•์„ฑPolymorphism  (0) 2020.09.06
์ƒ์†Inheritance  (0) 2020.09.06
๊ฐ์ฒด์ง€ํ–ฅ2  (0) 2020.09.06
๊ฐ์ฒด์ง€ํ–ฅ1  (0) 2020.09.06
Java๋ž€?  (0) 2020.09.06