# μ μ΄μ(modifier)
written by sohyeon, hyemin π‘
# 1. μ μ΄μλ?
μ μ΄μ(modifier)λ ν΄λμ€, λ³μ λλ λ©μλμ μ μΈλΆμ ν¨κ» μ¬μ©λμ΄ λΆκ°μ μΈ μλ―Έλ₯Ό λΆμ¬νλ€.
μ κ·Ό μ μ΄μ : public, protected, default, private
κ·Έ μΈ : static, final, abstract, native, transient, synchronized, volatile, strictfp
μ κ·Ό μ μ΄μλ νλμ λμμ λν΄μ publicκ³Ό private λ± λ€ κ°μ§ μ€ νλλ§ μ νν΄μ μ¬μ©ν μ μλ€.
# 2. static - ν΄λμ€μ, 곡ν΅μ μΈ
μΈμ€ν΄μ€λ³μλ νλμ ν΄λμ€λ‘λΆν° μμ±λμλλΌλ κ°κΈ° λ€λ₯Έ κ°μ μ μ§νμ§λ§, ν΄λμ€λ³μ(staticλ©€λ²λ³μ)λ μΈμ€ν΄μ€μ κ΄κ³μμ΄ κ°μ κ°μ κ°λλ€.
κ·Έ μ΄μ λ λͺ¨λ μΈμ€ν΄μ€κ° 곡μ νκΈ° λλ¬Έ
μ΄λ€.
staticμ΄ μ¬μ©λ μ μλ κ³³ - λ©€λ²λ³μ, λ©μλ, μ΄κΈ°ν λΈλ
μ μ΄μ | λμ | μλ―Έ |
---|---|---|
static | λ©€λ²λ³μ | - λͺ¨λ μΈμ€ν΄μ€μ 곡ν΅μ μΌλ‘ μ¬μ©λλ ν΄λμ€λ³μκ° λλ€. - ν΄λμ€λ³μλ μΈμ€ν΄μ€λ₯Ό μμ±νμ§ μκ³ λ μ¬μ© κ°λ₯νλ€. - ν΄λμ€κ° λ©λͺ¨λ¦¬μ λ‘λλ λ μμ±λλ€. |
static | λ©μλ | - μΈμ€ν΄μ€λ₯Ό μμ±νμ§ μκ³ λ νΈμΆμ΄ κ°λ₯ν static λ©μλκ° λλ€. - staticλ©μλ λ΄μμλ μΈμ€ν΄μ€ λ©€λ²λ€μ μ§μ μ¬μ©ν μ μλ€. |
- μΈμ€ν΄μ€ λ©€λ²λ₯Ό μ¬μ©νμ§ μλ λ©μλλ staticμ λΆμ¬μ staticλ©μλλ‘ μ μΈν κ²
- static λ©μλλ‘ νλ κ²μ΄ μΈμ€ν΄μ€λ₯Ό μμ±νμ§ μκ³ λ νΈμΆμ΄ κ°λ₯ν΄μ λ νΈλ¦¬νκ³ μλλ λ λΉ λ₯΄λ€.
# ex) μμ
class StaticTest {
static int width = 200; // ν΄λμ€ λ³μ (staticλ³μ)
static int height = 120; // ν΄λμ€ λ³μ (staticλ³μ)
static { // ν΄λμ€ μ΄κΈ°ν λΈλ
// staticλ³μμ 볡μ‘ν μ΄κΈ°ν μν
}
static int max(int a, int b) { // ν΄λμ€ λ©μλ(staticλ©μλ)
return a > b ? a : b;
}
}
# 3. final - λ§μ§λ§μ, λ³κ²½λ μ μλ
finalμ λ§μ§λ§μ
λλ λ³κ²½λ μ μλ
μ μλ―Έλ₯Ό κ°μ§κ³ μλ€.
finalμ΄ μ¬μ©λ μ μλ κ³³ - ν΄λμ€, λ©μλ, λ©€λ²λ³μ, μ§μλ³μ
μ μ΄μ | λμ | μλ―Έ |
---|---|---|
final | ν΄λμ€ | - λ³κ²½λ μ μλ ν΄λμ€, νμ₯λ μ μλ ν΄λμ€κ° λλ€. κ·Έλμ finalλ‘ μ§μ λ ν΄λμ€λ λ€λ₯Έ ν΄λμ€μ μ‘°μμ΄ λ μ μλ€. |
final | λ©μλ | - λ³κ²½λ μ μλ λ©μλ. finalλ‘ μ§μ λ λ©μλλ μ€λ²λΌμ΄λ©μ ν΅ν΄ μ¬μ μ λ μ μλ€. |
final | λ©€λ²λ³μ, μ§μλ³μ | - λ³μ μμ finalμ΄ λΆμΌλ©΄, κ°μ λ³κ²½ν μ μλ μμκ° λλ€. |
# ex) μμ
final class FinalTest { // μ‘°μμ΄ λ μ μλ ν΄λμ€
final int MAX_SIZE = 10; // κ°μ λ³κ²½ν μ μλ λ©€λ²λ³μ(μμ)
final void getMaxSize() { // μ€λ²λΌμ΄λ©ν μ μλ λ©μλ(λ³κ²½λΆκ°)
final int LV = MAX_SIZE; // κ°μ λ³κ²½ν μ μλ μ§μλ³μ(μμ)
return MAX_SIZE;
}
}
# μμ±μλ₯Ό μ΄μ©ν finalλ©€λ² λ³μμ μ΄κΈ°ν
finalμ΄ λΆμ λ³μλ μμμ΄λ―λ‘ μΌλ°μ μΌλ‘ μ μΈκ³Ό μ΄κΈ°νλ₯Ό λμμ νμ§λ§, μΈμ€ν΄μ€λ³μμ κ²½μ° μμ±μμμ μ΄κΈ°ν λλλ‘
ν μ μλ€.
ν΄λμ€ λ΄μ 맀κ°λ³μλ₯Ό κ°λ μμ±μλ₯Ό μ μΈ
νμ¬, μΈμ€ν΄μ€λ₯Ό μμ±ν λ finalμ΄ λΆμ λ©€λ²λ³μλ₯Ό μ΄κΈ°ννλλ° νμν κ°μ μμ±μμ 맀κ°λ³μλ‘λΆν° μ 곡λ°λλ€.
# ex) μμ
class Card {
final int NUMBER; // μμμ§λ§ μ μΈκ³Ό ν¨κ» μ΄κΈ°ν νμ§ μκ³
final String KIND; // μμ±μμμ λ¨ νλ²λ§ μ΄κΈ°νν μ μλ€.
static int width = 100;
static int height = 250;
Card(String kind, int num) {
KIND = kind;
NUMBER = num;
}
Card() {
this("HEART", 1);
}
}
# 4. abstract - μΆμμ, λ―Έμμ±μ
abstractλ λ―Έμμ±
μ μλ―Έλ₯Ό κ°μ§κ³ μλ€.
abstractκ° μ¬μ©λ μ μλ κ³³ - ν΄λμ€, λ©μλ
μ μ΄μ | λμ | μλ―Έ |
---|---|---|
abstract | ν΄λμ€ | - ν΄λμ€ λ΄μ μΆμ λ©μλκ° μ μΈλμ΄ μμμ μλ―Ένλ€. |
abstract | λ©μλ | - μ μΈλΆλ§ μμ±νκ³ κ΅¬νλΆλ μμ±νμ§ μμ μΆμ λ©μλμμ μλ¦°λ€. |
# ex) μμ
abstract class AbstractTest { // μΆμν΄λμ€(μΆμλ©μλλ₯Ό ν¬ν¨ν ν΄λμ€)
abstract void move(); // μΆμ λ©μλ(ꡬνλΆκ° μλ λ©μλ)
}
μ΄ ν΄λμ€ μ체λ‘λ μΈλͺ¨κ° μμ§λ§, λ€λ₯Έ ν΄λμ€κ° μ΄ ν΄λμ€λ₯Ό μμ
λ°μμ μΌλΆμ μνλ λ©μλλ§ μ€λ²λΌμ΄λ©ν΄μ λλ€λ μ₯μ μ΄ μλ€.
# 5. μ κ·Ό μ μ΄μ(access modifier)
μ κ·Όμ μ΄μλ λ©€λ² λλ ν΄λμ€μ μ¬μ©λμ΄, ν΄λΉνλ λ©€λ² λλ ν΄λμ€λ₯Ό μΈλΆμμ μ κ·Όνμ§ λͺ»νλλ‘ μ ν
νλ μν μ νλ€.
ν΄λμ€λ λ©€λ²λ³μ, λ©μλ, μμ±μμ μ κ·Ό μ μ΄μκ° μ§μ λμ΄ μμ§ μλ€λ©΄, μ κ·Ό μ μ΄μκ° default
μμ λ»νλ€.
μ κ·Ό μ μ΄μκ° μ¬μ©λ μ μλ κ³³ - ν΄λμ€, λ©€λ²λ³μ, λ©μλ, μμ±μ
private : κ°μ ν΄λμ€ λ΄μμλ§ μ κ·Όμ΄ κ°λ₯νλ€.
default : κ°μ ν¨ν€μ§ λ΄μμλ§ μ κ·Όμ΄ κ°λ₯νλ€.
protected : κ°μ ν¨ν€μ§ λ΄μμ, κ·Έλ¦¬κ³ λ€λ₯Έ ν¨ν€μ§μ μμ ν΄λμ€μμ μ κ·Όμ΄ κ°λ₯νλ€.
public : μ κ·Ό μ νμ΄ μ ν μλ€.
# λμμ λ°λΌ μ¬μ©ν μ μλ μ κ·Ό μ μ΄μ
# μ κ·Ό μ μ΄μλ₯Ό μ΄μ©ν μΊ‘μν
μΊ‘μν(encapsulation)
: κ°μ²΄μ§ν₯κ°λ
μμ λ°μ΄ν°κ° μ ν¨ν κ°μ μ μ§νλλ‘, λλ λΉλ°λ²νΈμ κ°μ λ°μ΄ν°λ₯Ό μΈλΆμμ ν¨λΆλ‘ λ³κ²½νμ§ λͺ»νλλ‘ μΈλΆλ‘λΆν°μ μ κ·Όμ μ ννλ κ²
μ κ·Ό μ μ΄μλ₯Ό μ¬μ©νλ μ΄μ
- μΈλΆλ‘λΆν° λ°μ΄ν°λ₯Ό 보νΈνκΈ° μν΄μ
- μΈλΆμλ λΆνμν, λ΄λΆμ μΌλ‘λ§ μ¬μ©λλ λΆλΆμ κ°μΆκΈ° μν΄μ
# ex) μμ
public class Time { // λ©μλλ₯Ό ν΅ν μ κ·Ό νμ©
private int hour;
private int minute;
private int second; // μ κ·Ό μ μ΄μλ₯Ό privateμΌλ‘ νμ¬ μΈλΆμμ μ§μ μ κ·Όνμ§ λͺ»νλλ‘ νλ€.
public int getHour() { return hour; }
public void setHour(int hour) {
if(hour < 0 || hour > 23) return;
this.hour = hour; // λ©€λ²λ³μμ κ°μ μ½κ³ λ³κ²½ν μ μλ public λ©μλλ₯Ό μ 곡ν¨μΌλ‘μ¨ κ°μ μ μΌλ‘ λ©€λ²λ³μμ κ°μ λ€λ£° μ μλλ‘ νλ κ²μ΄ λ°λμ§νλ€.
}
public int getMinute() { return minute; }
public void setMinute(int minute) {
if(minute < 0 || minute > 59) return;
this.minute = minute;
}
public int getSecond() { return second; }
public void setSecond(int second) {
if(second < 0 || second > 59) return;
this.second = second;
}
}
# μμ±μμ μ κ·Ό μ μ΄μ
μμ±μμ μ κ·Ό μ μ΄μλ₯Ό private
μΌλ‘ μ§μ νλ©΄, μΈλΆμμ μμ±μμ μ κ·Όν μ μμΌλ―λ‘ μΈμ€ν΄μ€λ₯Ό μμ±ν μ μλ€.
κ·Έλλ ν΄λμ€ λ΄λΆμμλ μΈμ€ν΄μ€λ₯Ό μμ±ν μ μλ€.
λμ μΈμ€ν΄μ€λ₯Ό μμ±ν΄μ λ°νν΄μ£Όλ publicλ©μλλ₯Ό μ 곡ν¨μΌλ‘μ¨ μΈλΆμμ μ΄ ν΄λμ€μ μΈμ€ν΄μ€λ₯Ό μ¬μ©ν μ μλλ‘ νλ€.
μ΄ λ©μλλ publicμΈ λμμ static
μ΄μ΄μΌ νλ€.
# ex) μμ
class Singleton {
...
private static Singleton s = new Singleton(); // getInstance()μμ μ¬μ©λ μ μλλ‘ μΈμ€ν΄μ€κ° 미리 μμ±λμ΄μΌ νλ―λ‘ staticμ΄μ΄μΌ νλ€.
private Singleton() {
...
}
// μΈμ€ν΄μ€λ₯Ό μμ±νμ§ μκ³ λ νΈμΆν μ μμ΄μΌ νλ―λ‘ static μ΄μ΄μΌ νλ€.
public static Singleton getInstance() {
return s;
}
...
}
# 6. μ μ΄μ(modifier)μ μ‘°ν©
# λμμ λ°λΌ μ¬μ©ν μ μλ μ μ΄μ
# μ μ΄μλ₯Ό μ‘°ν©ν΄μ μ¬μ©ν λ μ£Όμν μ¬ν
1. λ©μλμ staticκ³Ό abstractλ₯Ό ν¨κ» μ¬μ©ν μ μλ€.
- static λ©μλλ λͺΈν΅μ΄ μλ λ©μλμλ§ μ¬μ©ν μ μκΈ° λλ¬Έμ΄λ€.
2. ν΄λμ€λ abstractμ finalμ λμμ μ¬μ©ν μ μλ€.
- ν΄λμ€μ μ¬μ©λλ finalμ ν΄λμ€λ₯Ό νμ₯ν μ μλ€λ μλ―Έμ΄κ³ , abstractλ μμμ ν΅ν΄μ μμ±λμ΄μΌ νλ€λ μλ―Έμ΄λ―λ‘ μλ‘ λͺ¨μλκΈ° λλ¬Έμ΄λ€.
3. abstractλ©μλλ μ κ·Ό μ μ΄μκ° privateμΌ μ μλ€.
- abstractλ©μλλ μμν΄λμ€μμ ꡬνν΄μ£Όμ΄μΌ νλλ° μ κ·Ό μ μ΄μκ° privateμ΄λ©΄, μμ ν΄λμ€μμ μ κ·Όν μ μκΈ° λλ¬Έμ΄λ€.
4. λ©μλμ privateκ³Ό finalμ κ°μ΄ μ¬μ©ν νμλ μλ€.
- μ κ·Ό μ μ΄μκ° privateμΈ λ©μλλ μ€λ²λΌμ΄λ©λ μ μκΈ° λλ¬Έμ΄λ€.
# Reference & Additional Resources
https://csw7432.tistory.com/entry/Java-μ κ·Όμ μ΄μ-Access-Modifier/