C์ธ์ด
๋ฐฐ์ด์ ๋ํด์ ์์๋ณด์.
- int a[10];   โ 8byte ์ง๋ฆฌ a๋ ํผ๋ฐ์ค ๋ณ์ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ ๊ณผ 40byte ์ ์ ๋ฐฐ์ด ๊ณต๊ฐ.
 
- a ๋ a[0] ์ ์ฒซ ๋ฒ์งธ byte ๋ฅผ ๊ฐ๋ฆฌํจ๋ค.
 
- a ๋ 8byte ์ง๋ฆฌ โํฌ์ธํฐ ๋ณ์โ ์ด๋ค.
 
arr[0] ์ *arr ๋ ๊ฐ๋ค.
arr[9999] ์ *(arr + 9999) ๋ ๊ฐ๋ค. 

๐ก ๋ฐฐ์ด์ ํต์ฌ : 2๊ฐ๋ง ์๋ฉด **๋ชจ๋  ๊ณณ**์ ์ฐพ์ ๋ค์ด๊ฐ ์ ์๋ค. 
๋ช ์นธ์ธ์ง, a[0] ์ ์ฒซ ๋ฒ์งธ byte
๋ฐฐ์ด ์ ์ฌ์ฉํ๋๊ฐ ?
- ๋ณ์ 1๊ฐ๋ก ๊ณต๊ฐ ์ฌ๋ฌ ๊ณณ์ ๋ค๋ฃฐ ์ ์๋ค.
 
- ๊ด๋ จ๋ ๋ฐ์ดํฐ๋ฅผ ๋ชจ์๋์ ์ ์๋ค.
 
- ๋ฐฐ์ด ์์์ ๋ํ ์ ๊ทผ์ด ๋งค์ฐ ๋น ๋ฅด๋ค.
 
์๋ฐ
ํด๋์ค์ ๊ฐ์ฒด
class Main {
  public static void main(String[] args) {
  
    ์๋์ฐจ a์๋์ฐจ;
    
    a์๋์ฐจ = new ์๋์ฐจ();
    
    a์๋์ฐจ.๋ฌ๋ฆฌ๋ค();
  }
}
class ์๋์ฐจ {
  void ๋ฌ๋ฆฌ๋ค() {
    System.out.println("์๋์ฐจ๊ฐ ๋ฌ๋ฆฝ๋๋ค.");
  }
}
- ๊ฐ์ฒด๊ฐ ์๋ก ์๊ฒฉ ์กฐ์ข
ํ๋ค ?

 
โ ์ ์ฌ๊ฐ์ฒด ์์๋ ๋ฌด๊ธฐ๊ฐ ๋ค์ด๊ฐ๋๊ฒ ์๋๋ผ, ๋ฌด๊ธฐ๋ฆฌ๋ชจ์ฝ์ด ๋ค์ด๊ฐ๋ค.
โ ์ ์ฌ๊ฐ ๋ฌด๊ธฐ๋ฅผ ์๊ฒฉ ์กฐ์ข
ํ๊ณ  ์๋ ์ํ.
- ๋ชจ๋  ๊ฐ์ฒด๋ค์ ์๋ก๋ฅผ ํ์ ๋ณผ ์ ์๋ค.
- ์ ์ฌ๊ฐ ์ธ๋ถ ๊ฐ์ฒด์ ์์ฒญํ  ๋, โ๋ฆฌ๋ชจ์ฝโ์ผ๋ก ์๊ฒฉ ์กฐ์ ํ๋ค.
 
 
์์
- ์์์ 
IS ๊ด๊ณ์ด๋ค.
- ์ฒญ๋ฅ์ค๋ฆฌ๋ ์ค๋ฆฌ์ด๋ค.
 
- ์ฌ๋์ ๋๋ฌผ์ด๋ค.
 
 
- ์์์ผ๋ก ๋ฉ์๋์ ์ค๋ณต ์ฌํญ ์ ๊ฑฐ ๊ฐ๋ฅ.
- ์๋ฐ์์๋ 
is ๋ฅผ extends ๋ผ๊ณ  ์ฌ์ฉํ๋ค.
์ฆ, ์ฌ๋ extends ๋๋ฌผ 
- ์ฌ๋์ ์์ class, ๋๋ฌผ์ ๋ถ๋ชจ class. ๋ถ๋ชจ class์ ๋ชจ๋  ๊ฒ์ ๋ฌผ๋ ค๋ฐ๋๋ค.
โ ์ ํํ๋ **๋ณต์ฌ**๋ผ์ ๋ค์ด๊ฐ) 
 
๋์์ธ ํจํด
- ์์, ๊ตฌ์ฑ์ ํ์์ฑ
 
- ์ํํธ์จ์ด์์ ๋ณํํ๋ ๊ฒ์ ๋ณํํ์ง ์๋ ๊ฒ์ผ๋ก๋ถํฐ ๋ถ๋ฆฌํ๋ผ.
 
- ์ ๋ต ํจํด(Startegy Pattern)
 
์ค๋ฆฌ ์๋ฎฌ๋ ์ด์
์ ํตํด ์์, ๋ฉ์๋์ค๋ฒ๋ผ์ด๋ฉ ์ดํดํ๊ธฐ.
ctrl + 1 โ class, method ์๋ ์์ฑ 
- ๊ฐ์ฒด์งํฅ ํจํด โ 
์ค๋ณต์ ์ผ๋ง๋ ๊น๋ํ๊ฒ ์ ๊ฑฐํ๋๋. ๊ฐ ๊ด๊ฑด์ด๋ค.
- ์์ค์ฝ๋ ์ค๋ณต์ด๋?
 
 
- ๋ฉ์๋ ์ค๋ฒ๋ผ์ด๋๋?
- ๊ธฐ์กด ๋ฉ์๋๊ฐ ๋ณ๋ก์ฌ์, ์๋ก ๋ง๋๋ ํ์. (๊ณ ๋ฌด์ค๋ฆฌ ์ 
๋ ๋ค() ์ฌ์ ์)
โ ๊ธฐ์กด ๋ ๋ค() ๋ฉ์๋๋ super.๋ ๋ค();๋ผ๋ ๊ฒ์ผ๋ก ์ ๊ทผ ๊ฐ๋ฅํ๋ค! 
 
- ์์์ผ๋ก๋ ๋ชจ๋  ์์๋ค์ ๋ง์กฑ์ํฌ ์ ์๋ค.
 
static โ class ์ธ์คํด์ค ์์ฑํ์ง ์๊ณ  ํด๋์ค ๋ณ์๋ก ๋ฐ๋ก ์ ๊ทผ ๊ฐ๋ฅ. 
- ๋ค์ค์์์ ๋งํ ์๋ค !!!
- class ๋ก๋ด์ค๋ฆฌ extends ์ค๋ฆฌ, ๊ณ ๋ฌด์ค๋ฆฌ { } โ (x)  
new ๋ก๋ด์ค๋ฆฌ().๋ ๋ค(); ๋ฅผ ํ  ๋, ๋ฌด์์ ๊ฐ์ ธ์์ผ ํ ์ง ๋ชจ๋ฅธ๋ค.
์ฆ, ์ค๋ฆฌ์์ ๊ฐ์ ธ์ฌ์ง, ๊ณ ๋ฌด์ค๋ฆฌ์์ ๊ฐ์ ธ์ฌ์ง ์ ๋งคํ๋ค.
 
 
- ์์์ผ๋ก๋ ๋ณต์กํ ๊ด๊ณ๋ฅผ ๋ง์กฑ์ํฌ ์ ์๋ค. (์์ ์ฌ์ฉ์ ์ง์ํ๋ ์ด์ )
- class 
๋ก๋ด์ค๋ฆฌ ์์ ์ค๋ฆฌ์ ๋ ๋ค(); ์ ๊ณ ๋ฌด์ค๋ฆฌ์ ํค์์น๋ค(); ๋ฅผ ๊ฐ์ ธ์ค๊ณ  ์ถ์๋ฐ, ๋ค์ค์์์ ๋งํ ์๋ค. ๊ทธ๋์, ์ค๋ฆฌ๋ง ์์๋ฐ๊ณ  ํค์์น๋ค(); ๋ ๊ทธ๋ฅ ์ค๋ฒ๋ผ์ด๋ฉ ํด๋ดค์ง๋ง,
โ ์ญ์ ๊ณ ๋ฌด์ค๋ฆฌ ํค์์น๋ค(); ์ ์ค๋ณต์ด ๋ฐ์ํ๋ค. ์ด๊ฑด ์ด์ฉ ์ ์๋ค. 
 
์นผ a์นผ;
// a์นผ ๋ณ์์๋ ์ค์ง ์นผ ๋ฆฌ๋ชจ์ฝ๋ง ๋ค์ด๊ฐ ์ ์๋ค.
// a์นผ ๋ณ์๋ ์ค์ง ์นผ ๊ฐ์ฒด๋๋ง ์ฐ๊ฒฐ๋  ์ ์๋ค.
class Main {
	public static void main(String[] args) {
	  ๋ฌด๊ธฐ a๋ฌด๊ธฐ = new ์นผ();
	  a๋ฌด๊ธฐ.๊ณต๊ฒฉ();
		
    }
}
class ๋ฌด๊ธฐ { }
class ์นผ extends ๋ฌด๊ธฐ {    
	void ๊ณต๊ฒฉ() { }
}  
์ ๋ฆฌ
- ํด๋์ค๋ก ํ  ์ ์๋ 3๊ฐ์ง
- ๋ณ์ ์์ฑ : ์ฌ๋ a์ฌ๋;
๊ฐ์ฒด ์์ฑ : new ์ฌ๋();
๋ฆฌ๋ชจ์ฝ ์์ฑ : new ์ฌ๋(); 
 
- ๋ฉ์๋๊ฐ ์ฐ์ด๋ 2๊ฐ์ง ์ํฉ
- ๊ฐ์ฒด์์๋ ๊ธฐ๋ฅ
๋ฆฌ๋ชจ์ฝ์์๋ ๋ฒํผ 
 
- ์ฌ๋ a์ฌ๋;
- a์ฌ๋ ์ด๋ผ๋ ๋ณ์์๋ ์ค์ง! ์ฌ๋ ๋ฆฌ๋ชจ์ฝ๋ง ๋ค์ด ์ฌ ์ ์๋ค.
 
- a์ฌ๋ ์ด๋ผ๋ ๋ณ์๋ ์ค์ง ์ฌ๋ ๊ฐ์ฒด์ ์ฐ๊ฒฐ๋  ์ ์๋ค.
 
 
- ์์์ผ๋ก๋ ๋จ์ํ ์ค๋ณต์ ํด๊ฒฐํ  ์ ์์ง๋ง, ๋ณต์กํ ์ค๋ณต์ ํด๊ฒฐํ  ์ ์๋ค.
=> ๊ตฌ์ฑ์ ๋ฐฐ์์ผ ํ๋ค. 
- ๋ค์ค์์์ ๋ถ๊ฐ๋ฅํ๋ค.
 
- ์ํํธ์จ์ด์ ๊ฐ์ฒด์งํฅ ๊ธฐ๋ฒ, ์ข์ ์ค๊ณ๊ธฐ๋ฒ, ๋์์ธ ํจํด ๋ฑ์ ์ค์ง 
์ค๋ณต์์ค์ฝ๋๋ฅผ ํฉ๋ฆฌ์ ์ผ๋ก ์์ ๊ธฐ ์ํด์ ์กด์ฌํ๋ค. 
- ์ค๋ณต์ด ์ ์ข์ ์ด์ .
- ๋์ค์ ๋ณ๊ฒฝ์ฌํญ์ด ์๊ธธ ๋, ๋ฐ๊ฟ์ผ ํ๋๊ฒ ๋ง์์ง๋ค.
โ ๋ง์ฝ ํ๋๋ก ๊ด๋ฆฌํ๋ฉด, ๊ทธ ๋ถ๋ถ๋ง ์์ ํ๋ฉด ๋. 
- ์ด ์ค๋ณต์ ํด๊ฒฐํ๊ธฐ ์ํด 
๊ฐ์ฒด์งํฅ ๊ธฐ๋ฒ์ ๋์
ํ๋ค.