์ ์ด์ ( modifier )
- ํด๋์ค์ ํด๋์ค์ ๋ฉค๋ฒ(๋ฉค๋ฒ ๋ณ์, ๋ฉ์๋)์ ๋ถ๊ฐ์ ์ธ ์๋ฏธ ๋ถ์ฌ
์ ๊ทผ ์ ์ด์ → public , protected , (default) , private
๊ทธ ์ธ → static , final , abstract , native , transient , synchronized , volatile , strictfp
- ํ๋์ ๋์์ ์ฌ๋ฌ ์ ์ด์๋ฅผ ๊ฐ์ด ์ฌ์ฉ ๊ฐ๋ฅ ( ์ ๊ทผ ์ ์ด์๋ ํ๋๋ง )
static - ํด๋์ค์ , ๊ณตํต์ ์ธ
์ ์ด์ | ๋์ | ์ ๋ฏธ |
static | ๋ฉค๋ฒ๋ณ์ | - ๋ชจ๋ ์ธ์คํด์ค์ ๊ณตํต์ ์ผ๋ก ์ฌ์ฉ๋๋ ํด๋์ค ๋ณ์๊ฐ ๋๋ค. - ํด๋์ค ๋ณ์๋ ์ธ์คํด์ค๋ฅผ ์์ฑํ์ง ์๊ณ ๋ ์ฌ์ฉ ๊ฐ๋ฅํ๋ค. - ํด๋์ค๊ฐ ๋ฉ๋ชจ๋ฆฌ์ ๋ก๋๋ ๋ ์์ฑ๋๋ค. |
๋ฉ์๋ | - ์ธ์คํด์ค๋ฅผ ์์ฑํ์ง ์๊ณ ๋ ํธ์ถ์ด ๊ฐ๋ฅํ static ๋ฉ์๋๊ฐ ๋๋ค. - static๋ฉ์๋ ๋ด์์๋ ์ธ์คํด์ค๋ฉค๋ฒ๋ค์ ์ง์ ์ฌ์ฉํ ์ ์๋ค. |
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;
}
}
final - ๋ง์ง๋ง์ , ๋ณ๊ฒฝ๋ ์ ์๋
์ ์ด์ | ๋์ | ์ ๋ฏธ |
final | ํด๋์ค | ๋ณ๊ฒฝ๋ ์ ์๋ ํด๋์ค, ํ์ฅ๋ ์ ์๋ ํด๋์ค๊ฐ ๋๋ค. ๊ทธ๋์ final๋ก ์ง์ ๋ ํด๋์ค๋ ๋ค๋ฅธ ํด๋์ค์ ์กฐ์์ด ๋ ์ ์๋ค. |
๋ฉ์๋ | ๋ณ๊ฒฝ๋ ์ ์๋ ๋ฉ์๋, final๋ก ์ง์ ๋ ๋ฉ์๋๋ ์ค๋ฒ๋ผ์ด๋ฉ์ ํตํด ์ฌ์ ์ ๋ ์ ์๋ค. | |
๋ฉค๋ฒ๋ณ์ | ๋ณ์ ์์ final์ด ๋ถ์ผ๋ฉด, ๊ฐ์ ๋ณ๊ฒฝํ ์ ์๋ ์์๊ฐ ๋๋ค. | |
์ง์ญ๋ณ์ |
final class FinalTest { → ์กฐ์์ด ๋ ์ ์๋ ํด๋์ค
final int MAX_SIZE = 10; → ๊ฐ์ ๋ณ๊ฒฝํ ์ ์๋ ๋ฉค๋ฒ๋ณ์(์์)
final void getMaxSize() { → ์ค๋ฒ๋ผ์ด๋ฉํ ์ ์๋ ๋ฉ์๋(๋ณ๊ฒฝ๋ถ๊ฐ)
final int LV = MAX_SIZE; → ๊ฐ์ ๋ณ๊ฒฝํ ์ ์๋ ์ง์ญ๋ณ์(์์)
return MAX_SIZE;
}
}
abstract - ์ถ์์ , ๋ฏธ์์ฑ์
์ ์ด์ | ๋์ | ์ ๋ฏธ |
abstract | ํด๋์ค | ํด๋์ค ๋ด์ ์ถ์ ๋ฉ์๋๊ฐ ์ ์ธ๋์ด ์์์ ์๋ฏธํ๋ค. |
๋ฉ์๋ | ์ ์ธ๋ถ๋ง ์์ฑํ๊ณ ๊ตฌํ๋ถ๋ ์์ฑํ์ง ์์ ์ถ์ ๋ฉ์๋์์ ์๋ฆฐ๋ค. |
abstract class AbstractTest { → ์ถ์ ํด๋์ค(์ถ์ ๋ฉ์๋๋ฅผ ํฌํจํ ํด๋์ค)
abstract void move(); → ์ถ์ ๋ฉ์๋(๊ตฌํ๋ถ๊ฐ ์๋ ๋ฉ์๋)
}
AbstractTest a = new AbstractTest(); → ์๋ฌ. ์ถ์ ํด๋์ค์ ์ธ์คํด์ค ์์ฑ๋ถ๊ฐ
์ถ์ํด๋์ค๋ ๋ฏธ์์ฑ๋ ํด๋์ค์ด๊ธฐ ๋๋ฌธ์ ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ ค๋ฉด ์ถ์ ํด๋์ค๋ฅผ ์์๋ฐ์์ ์์ ํ ํด๋์ค(๊ตฌ์ ํด๋์ค)๋ฅผ ๋ง๋ ํ์ ๊ฐ์ฒด ์์ฑ์ด ๊ฐ๋ฅํ๋ค.
์ ๊ทผ ์ ์ด์ ( access modifier )
private | ๊ฐ์ ํด๋์ค ๋ด์์๋ง ์ ๊ทผ์ด ๊ฐ๋ฅํ๋ค. |
(default) | ๊ฐ์ ํจํค์ง ๋ด์์๋ง ์ ๊ทผ์ด ๊ฐ๋ฅํ๋ค. |
protected | ๊ฐ์ ํจํค์ง ๋ด์์, ๊ทธ๋ฆฌ๊ณ ๋ค๋ฅธ ํจํค์ง์ ์์ํด๋์ค์์ ์ ๊ทผ์ด ๊ฐ๋ฅํ๋ค. |
public | ์ ๊ทผ ์ ํ์ด ์ ํ ์๋ค. |
ํ๋์ ๋์์ ํ๊ฐ์ ์ ๊ทผ ์ ์ด์๋ง ์ฌ์ฉ์ด ๊ฐ๋ฅํ๋ค.
์ ์ด์ | ๊ฐ์ ํด๋์ค | ๊ฐ์ ํจํค์ง | ์์ํด๋์ค | ์ ์ฒด |
public | O | O | O | O |
protected | O | O | O | |
(default) | O | O | ||
private | O |
class ์์๋ public ๊ณผ (default) ๋ ๊ฐ์ง๋ง ๋ถ์ผ ์ ์๋ค.
method ์์๋ 4๊ฐ์ง ๋ชจ๋๋ค ๋ถ์ผ ์ ์๋ค.
์บก์ํ
์ ๊ทผ ์ ์ด์๋ฅผ ์ฌ์ฉํ๋ ์ด์
- ์ธ๋ถ๋ก๋ถํฐ ๋ฐ์ดํฐ๋ฅผ ๋ณดํธํ๊ธฐ ์ํด์ ( ์บก์ํ )
- ์ธ๋ถ์๋ ๋ถํ์ํ, ๋ด๋ถ์ ์ผ๋ก๋ง ์ฌ์ฉ๋๋, ๋ถ๋ถ์ ๊ฐ์ถ๊ธฐ ์ํด์
public class Time {
private int hour;
private int minute;
private int secone;
public int getHour() { return hour; }
public void setHour(int hour) {
if (hour < 0 \\ hour > 23) return;
this.hour = hour;
}
}
์์ ๊ฐ์ด ์๊ฐ์ ๋ด๋ ๋ณ์๋ private๋ก ์ ๊ทผ์ ๋ง๊ณ ,
์๊ฐ์ ํ์ธํ๋ ๋ฉ์๋์ ์๊ฐ์ ์กฐ์ ํ๋ ๋ฉ์๋๋ฅผ public์ผ๋ก ์ค์ ํ์๋ค.
์ด๋ ๊ฒ ์ค์ ์ ํ๊ฒ๋ ๊ฒฝ์ฐ, Time t= new Time(); ๊ฐ์ฒด๋ฅผ ์์ฑ ํ, t.hour = 25; ์ด๋ฐ ์์ผ๋ก
์๊ฐ์ผ๋ก์จ ์ค์ ์ด ๋ถ๊ฐ๋ฅํ ์๊ฐ์ ๋ฃ์์ ๋๋ฅผ ๋๋นํ ์ ์๋ค.
์๊ฐ์ ๋ํ ์ง์ ์ ์ธ ์ ๊ทผ์ ๋ง์ผ๋ฉด์ ๋ฉ์๋๋ฅผ ํตํ ์ ํด์ง ์๊ฐ ๋ด์์์ ์กฐ์ ๋ง ๊ฐ๋ฅํ๋ค.
๋คํ์ฑ ( poltmorphism )
- ์กฐ์ ํ์ ์ฐธ์กฐ ๋ณ์๋ก ์์ ํ์ ๊ฐ์ฒด๋ฅผ ๋ค๋ฃจ๋ ๊ฒ
- ์ฌ๋ฌ ๊ฐ์ง ํํ๋ฅผ ๊ฐ์ง ์ ์๋ ๋ฅ๋ ฅ
class Tv{
boolean power;
int channel;
void power() { power = !power; }
void channelUp() { ++channel; }
void channelDown() { --channel; }
}
class SmartTv extends Tv{
String text;
coid caption(){ /* ๋ด์ฉ์๋ต */ }
Tv ํด๋์ค์ Tvํด๋์ค๋ฅผ ๋ถ๋ชจ๋ก ํ๋ SmartTv ํด๋์ค๊ฐ ์๋ค.
์ฌ๊ธฐ์ Tv๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด Tv t = new Tv(); ๊ฐ ์์ด์ผ ํ๊ณ ,
SmartTv๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด SmartTv s = new SmartTv(); ๊ฐ ์์ด์ผ ํ๋ค.
ํ์ง๋ง ๋คํ์ฑ์ด๋ผ๋ ๊ฒ์, Tv t = new SmartTv();
์ด๋ ๊ฒ ํ์ ์ด ๋ถ์ผ์นํ์ฌ๋ ๊ด์ฐฎ๋ค๋ ๊ฒ์ด๋ค.
ํ์ง๋ง ์ฌ๊ธฐ์ ์ฃผ์ํด์ผ ํ ์ ์ ์กฐ์ ํ์ ์ ์ฐธ์กฐ ๋ณ์์ ์์ ํ์ ์ ๊ฐ์ฒด๋ ํ์ฉ์ด ๋์ง๋ง,
์์ ํ์ ์ ์ฐธ์กฐ ๋ณ์๋ก ์กฐ์ ํ์ ์ ๊ฐ์ฒด๋ฅผ ๊ฐ๋ฆฌํฌ ์๋ ์๋ค.
Tv t = new SmartTv(); → OK. ํ์ฉ
SmartTv s = new Tv(); → Error. ํ์ฉ ์ ๋จ.
์ด๋ ๊ฒ ์์ ํ์ ์ ์ฐธ์กฐ๋ณ์๋ก ์กฐ์ ํ์ ์ ๊ฐ์ฒด๋ฅผ ๊ฐ๋ฆฌํฌ ์ ์๋ค.
์ ๋ฆฌ
· ์ฐธ์กฐ ๋ณ์์ ํ์ ์ ์ธ์คํด์ค์ ํ์ ๊ณผ ์ผ์นํ๋ ๊ฒ์ด ๋ณดํต์ด์ง๋ง ์ผ์นํ์ง ์์ ์๋ ์๋ค. (๋คํ์ฑ)
· ์ฐธ์กฐ ๋ณ์๊ฐ ์กฐ์ ํ์ ์ผ ๋์ ์ฐจ์ด์ ์ ์ฐธ์กฐ ๋ณ์๋ก ์ฌ์ฉํ ์ ์๋ ๋ฉค๋ฒ์ ๊ฐฏ์๊ฐ ๋ฌ๋ผ์ง๋ค.
· ์์ ํ์ ์ ์ฐธ์กฐ๋ณ์๋ก ์กฐ์ ํ์ ์ ๊ฐ์ฒด๋ฅผ ๊ฐ๋ฆฌํฌ ์๋ ์๋ค.
์ฐธ์กฐ ๋ณ์์ ํ๋ณํ
- ์ฌ์ฉํ ์ ์๋ ๋ฉค๋ฒ์ ๊ฐ์๋ฅผ ์กฐ์ ํ๋ ๊ฒ
- ์กฐ์ ์์ ๊ด๊ณ์ ์ฐธ์กฐ ๋ณ์๋ ์๋ก ํ๋ณํ ๊ฐ๋ฅ
๊ธฐ๋ณธํ์ ํ๋ณํ์ 3.6์ int๋ก ํ๋ณํ ํ๋ฉด 3์ด ๋๋ค. ์ฆ, ๊ฐ์ด ๋ฐ๋๊ฒ ๋๋ค.
ํ์ง๋ง, ์ฐธ์กฐ ๋ณ์ (์ฃผ์ ๊ฐ, ๊ฐ์ฒด)๋ฅผ ํ๋ณํ ํด๋ ๊ฐ์ ํ๋๋ ๋ฐ๋์ง ์๊ณ , ๋ฉค๋ฒ์ ๊ฐฏ์๋ง ๋ฌ๋ผ์ง๊ฒ ๋๋ค.
์ฐธ์กฐ ๋ณ์์ ํ ๋ณํ์ ํ๋ฉด, ์ฌ์ฉํ ์ ์๋ ๋ฉค๋ฒ์ ๊ฐฏ์๋ฅผ ์กฐ์ ํ๋ ๊ฒ์ด๋ค. ๊ทธ ์ธ์๋ ์๋ฌด๊ฒ๋ ๋ณํ์ง ์๋๋ค.
์ฐธ์กฐ ๋ณ์๋ ํญ์ ํ๋ณํ์ด ๊ฐ๋ฅํ ๊ฒ์ด ์๋๊ณ , ์กฐ์ ์์ ๊ด๊ณ์ ์ฐธ์กฐ ๋ณ์์ผ ๋ ์๋ก ํ๋ณํ์ด ๊ฐ๋ฅํ๋ค.
์ ์ฌ์ง์ ๋ณด๋ฉด Car์ FireEngine, Ambulanceํด๋์ค๊ฐ ์๋ค๊ณ ๊ฐ์ ํด๋ณด์.
Fire Engine๊ณผ Ambulance๋ Car์ ์์ ๊ด๊ณ์ด๋ค.
๊ทธ๋์ ์กฐ์ ์์ ๊ด๊ณ์ธ Car์ FireEngine๋ผ๋ฆฌ, ๊ทธ๋ฆฌ๊ณ Car์ Ambulance๋ผ๋ฆฌ๋ ํ๋ณํ์ด ๊ฐ๋ฅํ๋ค.
ํ์ง๋ง, FireEngine๊ณผ Ambulance ๊ฐ์ ํ์ ๊ด๊ณ๋ ํ๋ณํ์ด ๋ถ๊ฐ๋ฅํ๋ค.
์ ์ด๋ฏธ์ง์ ๊ฐ์ด Carํด๋์ค๊ฐ ์๊ณ , Carํด๋์ค๋ฅผ ์์๋ฐ์ FireEngineํด๋์ค๊ฐ ์์ ๋,
FireEngine๊ฐ์ฒด๋ฅผ ๋ง๋ค๊ณ , FireEngine ์ฐธ์กฐ ๋ณ์ f๋ก ๊ฐ๋ฆฌํจ๋ค.
์ด๊ฒ์ ํํํ๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.
๋ฉค๋ฒ๋ ์ด 5๊ฐ๋ค.
๊ทธ๋ฆฌ๊ณ ์ฐธ์กฐ๋ณ์ carํ์ ์ ์ฐธ์กฐ๋ณ์ c๊ฐ ๋ง๋ค์ด์ง๊ณ ,
์์๋ง๋ FireEngine Type์ ๊ฐ์ฒด๋ฅผ ๊ฐ๋ฆฌํค๋ ์ฃผ์๋ฅผ ์ ์ฅํ f๊ฐ์ c์ ์ ์ฅํ๋ค.
์ด๋, c๋ FireEngine๊ฐ์ฒด๋ฅผ ๊ฐ๋ฆฌํค๊ฒ ๋๋๋ฐ, ์ฐธ์กฐ ๋ณ์์ ํ์ ๊ณผ ๋ค๋ฃจ๊ณ ์ํ๋ ๊ฐ์ฒด์ ํ์ ์ด ๋ถ์ผ์นํ๋ค.
๊ทธ๋ ๊ธฐ ๋๋ฌธ์ f๊ฐ ๊ฐ๋ฆฌํค๋ FireEngine๊ฐ์ฒด์ ์ฃผ์๋ฅผ c์ ์ ์ฅํ๊ธฐ ์ํด์๋ f๊ฐ์ ์ฐธ์กฐ๋ณ์ c์ ํ์ ์ธ Carํ์ ์ผ๋ก
ํ๋ณํ์ ํด์ผ ํ๋ค. Car์ FireEngine์ ๋ถ๋ชจ ์์๊ด๊ณ์ด๊ธฐ ๋๋ฌธ์ ํ๋ณํ์ด ๊ฐ๋ฅํ๋ค.
๊ทธ๋ฆฌ๊ณ , ๋์ ์ฐ์ฐ์์ ์ข์ธก์ ์ฐธ์กฐ ๋ณ์๊ฐ ์กฐ์ํ์ , ์ฐ์ธก์ ์ฐธ์กฐ๋ณ์๊ฐ ์กฐ์ฐํ์ ์ผ ๊ฒฝ์ฐ ํ๋ณํ์ด ์๋ต ๊ฐ๋ฅํ๋ค.
์ด๋ ๊ฒ ํ๋ฉด ์ฐธ์กฐ๋ณ์ f๋ ๋ค๋ฃจ๋ ค๋ ๊ฐ์ฒด๊ฐ ๊ฐ์ง ๋ชจ๋ ๋ฉค๋ฒ๋ฅผ ์ฌ์ฉํ ์ ์๊ณ ,
์ฐธ์กฐ๋ณ์ c๋ FireEngine์ ๋ถ๋ชจ์ธ Carํด๋์ค์์ ์์๋ ๋ฉค๋ฒ๋ง ์ฌ์ฉํ ์ ์๋ค.
์์ ์ฝ๋์์ FireEngine f2 = (FireEngine)cl ์ฝ๋๋ฅผ ์คํํ๋ฉด,
f2๋ผ๋ ์ฐธ์กฐ ๋ณ์๋ฅผ ํตํด ๋ค์ ๊ฐ์ FireEngine๊ฐ์ฒด์ ๋ชจ๋ ๋ฉค๋ฒ๋ฅผ ์ฌ์ฉํ ์ ์๊ฒ ๋๋ค.
์ด๋ ๊ฒ ์กฐ์ ์์ ๊ด๊ณ์ ์ฐธ์กฐ ๋ณ์์ ํ๋ณํ์ ํตํด ์ฌ์ฉํ ์ ์๋ ๋ฉค๋ฒ์ ๊ฐ์๋ฅผ ์ค์๋ค๊ฐ ๋๋ ธ๋ค๊ฐ ํ๋ ๊ฒ์ด๋ค.
๋ค๋ฅธ ์ฃผ์ํ ์ ์ผ๋ก๋ ๋ค์๊ณผ ๊ฐ๋ค.
์ด๋ ๊ฒ ์กฐ์์์ ์์์ผ๋ก ํ๋ณํ, ์์์์ ์กฐ์์ผ๋ก ํ๋ณํ์ ๊ฐ๋ฅํ๊ธฐ์ ๋ฌธ๋ฒ์ ์ผ๋ก ์ค๋ฅ๋ ์๋ค.
๊ทธ๋ฆฌ๊ณ car2.drive();๋ฅผ ์คํํ๊ฒ ๋๋ฉด NullPointerException์ด ๋ฐ์ํ๊ฒ ๋๋ค.
Car์ Null์ด๊ณ , Null์ fe2์ ๋ฃ์์ผ๋ fe2๋ Null์ด ๋๋ค.
๊ทธ๋ฆฌ๊ณ Null์ธ fe2๋ฅผ car2์ ๋ฃ๊ฒ ๋๋ Null.drive();๊ฐ ๋๊ฒ ๋๋ค.
์ฆ, ์ค์ ์ธ์คํด์ค๊ฐ ๋ฌด์์ธ์ง๊ฐ ์ค์ํ๋ค.
๊ผญ ๊ธฐ์ตํด์ผ ํ ์ ์ ์ค์ ์ธ์คํด์ค์ ๋ฉค๋ฒ ๊ฐ์๋ฅผ ํ์ธํ๊ณ ,
ํด๋น ์ธ์คํด์ค๋ฅผ ๋ค๋ฃจ๋ ค๋ ์ฐธ์กฐ ๋ณ์์ ํ์ ์ ํด๋์ค ๋ฉค๋ฒ๊ฐ ์ธ์คํด์ค์ ๋ฉค๋ฒ ๊ฐ์๋ฅผ ๋์ผ๋ฉด ์ ๋๋ค.