์ถ์ํ
์ด๋ค ์์ญ์์ ํ์๋ก ํ๋ ์์ฑ์ด๋ ํ๋์ ์ถ์ถํ๋ ์์ ์ ์๋ฏธํ๋ค.
์ฌ๋ฌ ๊ฐ์ฒด์ ๊ณตํต๋ ํน์ง์ ํ์ ํด ํ๋์ ์งํฉ์ผ๋ก ์ผ๋ฐํํ๊ฒ ๋๋ค.
์ป์ ์ ์๋ ๊ฒ
๊ฐ ๊ฐ์ฒด์ ๊ตฌ์ฒด์ ์ธ ๊ฐ๋ ์ ์์กดํ์ง ์๊ธฐ ๋๋ฌธ์ ์ค๊ณ๋ฅผ ์ ์ฐํ๊ฒ ๋ณ๊ฒฝํ ์ ์๋ค.
ex) ์๋์ฐจ๋ ์ด๋ค ์ข ๋ฅ์ ์๋์ฐจ๋ ์๊ด ์์ด ์์ง์ค์ผ์ ๊ฐ ์ ์๋ค.
์บก์ํ
์บก์ํ๊ฐ ํ์ํ ์ด์
์ํํธ์จ์ด ๊ฐ๋ฐ์์ ์๊ตฌ์ฌํญ ๋ณ๊ฒฝ์ ๋น์ฐํ ๊ฒ์ด๊ธฐ ๋๋ฌธ!
์ป์ ์ ์๋ ๊ฒ
์บก์ํ๋ ์ ๋ณด ์๋์ ํตํด ๋ฎ์ ๊ฒฐํฉ๋์ ๋์ ์์ง๋๋ฅผ ๊ฐ๋๋ก ํ๋ค.
-> ๋ณ๊ฒฝ์ด ๋ฐ์ํด๋ ์ํฅ์ด ์ ์
- ์ ๋ณด ์๋ : ์ธ๋ถ์์ ์ ํ์๊ฐ ์๋ ๋ด๋ถ ์ ๋ณด์ ์ ๊ทผํ์ง ๋ชปํ๋๋ก ํ๋ ๊ฒ
- ex) ์๋์ฐจ์ ๊ฐ์ ํ๋ฌ์ ๋ฐ์ผ๋ฉด ์๋๊ฐ ์ฌ๋ผ๊ฐ์ง๋ง ๊ทธ ์์ ์ด๋ค ๊ณผ์ ์ด ์๋์ง ๋ชฐ๋ผ๋ ์ง์ฅ์ด ์์
- ์์ง๋ : ํด๋์ค๋ ๋ชจ๋ ์์ ์์๋ค์ด ์ผ๋ง๋ ๋ฐ์ ํ๊ฒ ๊ด๋ จ๋์ด ์๋์ง (๋ด๋ถ)
- ๊ฒฐํฉ๋ : ์ด๋ค ๊ธฐ๋ฅ์ ์คํํ๋ ๋ฐ ๋ค๋ฅธ ํด๋์ค๋ ๋ชจ๋๋ค์ ์ผ๋ง๋ ์์กด์ ์ธ์ง
์ ๋ณด์๋์ด ์๋ค๋ฉด ํ ํด๋์ค๊ฐ ๋ณ๊ฒฝ์ด ๋ฐ์ํ๋ฉด ๋ณ๊ฒฝ๋ ํด๋์ค์ ๋น๋ฐ์ ์์กดํ๋ ํด๋์ค ๋ํ ๋ณ๊ฒฝํด์ผํ ๊ฐ๋ฅ์ฑ์ด ๋์์ง๋ค.
์ด๋ ์ํํธ์จ์ด์ ๊ฒฐํฉ๋๋ฅผ ๋์ด๊ณ ์๋ก์๊ฒ ์ํฅ์ ๋ผ์น๊ฒ ๋๋ค.
์ผ๋ฐํ ๊ด๊ณ
์ผ๋ฐํ๋ ๋ ๋ค๋ฅธ ์บก์ํ๋ผ๊ณ ๋ณผ ์ ์๋ค.
(๊ฐ์ฒด ์งํฅ์์ ์์ ๊ด๊ณ)
๊ธฐ๋ฅ์ ์ฌ์ฌ์ฉ์ ์ผ๋ฐํ ๊ด๊ณ๋ก ์ป์ ์ ์๋ ์ผ๋ถ ์ด์ ์ผ๋ฟ ๋ค๋ฅธ ์ค์ํ ํฌ์ธํธ๊ฐ ์๋ค.
'์ฌ๋' ํด๋์ค๋ ์๋์ฐจ๋ ์์ง๋ง ๊ตฌ์ฒด์ ์ธ ์๋์ฐจ์ ์ข ๋ฅ๋ฅผ ์์ง ๋ชปํ๋ค. ์ฆ, ์ฌ๋์ ์๋์ฐจ์ ์ข ๋ฅ์ ๋ฐ๋ผ ์ํฅ์ ๋ฐ์ง ์์ ์ ์๋ค.
๋ง์ฝ, 'ํ๋', 'ํ ์ํ' ๋ฑ ์๋์ฐจ๊ฐ ๋ ์ถ๊ฐ๋์ด๋ ์ฌ๋์ ๊ทธ์ ์๋์ฐจ๋ง ์๊ธฐ ๋๋ฌธ์ ๊ทธ๋๋ก ์ฌ์ฉํ ์ ์๋ค. (์ฌ๋์ ๋ณ๊ฒฝ ์์ด ํ์ฅ ๊ฐ๋ฅ)
์ด๋ ๊ฒ ์ฌ์ฉํ ์ ์๋ ์ด์ ๋ ์ผ๋ฐํ ๊ด๊ณ๋ฅผ ํตํด ์์ ํด๋์ค๋ฅผ ์ธ๋ถ๋ก๋ถํฐ ์๋ํ๊ธฐ ๋๋ฌธ์ด๋ค.
[KEYPOINT] : "์ผ๋ฐํ ๊ด๊ณ๋ ์์ ํด๋์ค๋ฅผ ์ธ๋ถ๋ก๋ถํฐ ์๋ํ๋ ์บก์ํ์ ์ผ์ข ์ด๋ค."
์ผ๋ฐํ ๊ด๊ณ์ ์์
๋ง์ ์ฌ๋๋ค์ด ์ผ๋ฐํ ๊ด๊ณ๋ฅผ ์์ฑ์ด๋ ๊ธฐ๋ฅ์ ์์, ์ฆ ์ฌ์ฌ์ฉ์ ์ํด ์กด์ฌํ๋ค๊ณ ์คํดํ๊ณ ์๋ค!
์ด๋ ์ฌ์ค์ด ์๋๋ค!!
MyStack์ ArrayList๋ฅผ ์์ํด ๊ตฌํํ๋ค๊ณ ๊ฐ์ ํด๋ณด์.
์ด ๋ ์ฐ๋ฆฌ๋ Userํด๋์ค๋ฅผ ํตํด MyStack์ ์ฌ์ฉํ ๊ฒ์ด๋ค.
Userํด๋์ค์์๋ MyStack์ผ๋ก ArrayList์ ๋ชจ๋ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ ์ ์์ผ๋ฏ๋ก Stack์ ์ค๊ฐ์ ๋ฃ๊ฑฐ๋ ์ญ์ ํ ์๋ ์๋ค.
์ด๊ฒ์ Stack์ ๋ฌด๊ฒฐ์ฑ ์กฐ๊ฑด์ธ "LIFO" ์๋ฐฐ ๋๋ค.
๋ฐ๋ผ์, ์ด ๋ ํด๋์ค์ ์ผ๋ฐํ ๊ด๊ณ๋ ์ฑ๋ฆฝํ ์ ์๋ค. (Stack "is a kind of" ArrayList??) -> Nope
๊ทธ๋ ๋ค๋ฉด ์ด๋ค ํด๋์ค์ ์ผ๋ถ ๊ธฐ๋ฅ๋ง ์ฌ์ฌ์ฉํ๊ณ ์ถ๋ค๋ฉด ์ด๋ป๊ฒ ํด์ผ ์ข์๊น? ๋ต์ "์์"์ ์ฌ์ฉํ๋ ๊ฒ์ด๋ค.
์์
์์์ ์์ ์ด ์ง์ ๊ธฐ๋ฅ์ ์คํํ์ง ์๊ณ ๋ค๋ฅธ ํด๋์ค์ ๊ฐ์ฒด๊ฐ ๊ธฐ๋ฅ์ ์คํํ๋๋ก ์์ํ๋ ๊ฒ์ด๋ค.
- ์์ ์์ ์ฝ๋
Public class MyStack<String>{
private ArrayList<String> arList = new ArrayList<String>;
public void push(String ele){
arList.add(ele);
}
public String pop(){
return arList.remove(size() - 1);
}
public boolean isEmpty(){
return arList.isEmpty();
}
}
๊ธฐ๋ฅ๋ง ์ฌ์ฌ์ฉํ ๋๋ "์์", ์ผ๋ฐํ ๊ด๊ณ๋ผ๋ฉด "์์"์ ์ฌ์ฉํ์.
๋คํ์ฑ
๊ฐ์ฒด์งํฅ์์ ๋คํ์ฑ์ '์๋ก ๋ค๋ฅธ ํด๋์ค์ ๊ฐ์ฒด๊ฐ ๊ฐ์ ๋ฉ์์ง๋ฅผ ๋ฐ์์ ๋ ๊ฐ์์ ๋ฐฉ์์ผ๋ก ๋์ํ๋ ๋ฅ๋ ฅ'์ด๋ค.
๋คํ์ฑ๊ณผ ์ผ๋ฐํ๊ด๊ณ๋ฅผ ์ด์ฉํด์ ์์ ํด๋์ค๋ฅผ ๊ฐ๋ณ์ ์ผ๋ก ๋ค๋ฃฐ ํ์์์ด ํ ๋ฒ์ ์ฒ๋ฆฌํ ์ ์๋ ์๋จ์ ์ ๊ณตํ๋ค.
Public abstract class Pet{
public abstract void talk();
}
public class Cat extends Pet{
public void talk(){
sysout("์ผ์น");
}
}
public class Dog extends Pet{
public void talk(){
sysout("๋ฉ๋ฉ");
}
}
public class Parrot extends Pet{
public void talk(){
sysout("์๋
์");
}
public void fly(){
sysout("๋ ์๋ค!");
}
}
public class Main{
public static void main(String[] args){
Pet[] p = {new Cat(), new Dog(), new Parrot};
((Cat)p[0]).talk();
((Cat)p[1]).talk();
p[2].fly();
p[2].talk();
}
}
์ ์ฝ๋์ฒ๋ผ ๋คํ์ฑ์ ์ฌ์ฉํ๋ฉด ๊ฐ๊ฐ์ ๋๋ฌผ์ ์ธ์์๋ฆฌ์ ๋ํด ํ๋์ ๋ฉ์๋๋ก ์ฒ๋ฆฌํด์ค ์ ์๋ค.
๋ํ, ์๋ก์ด ๋๋ฌผ์ด ์ถ๊ฐ๋๋๋ผ๋ ์์ ์์ด ๋๊ฐ์ ๋ฉ์๋๋ก ์ฒ๋ฆฌํ ์ ์๋ค.
์ด๊ฒ์ด ๊ฐ๋ฅํ ์ด์ ๋ ๋ถ๋ชจ ํด๋์ค์ ์ฐธ์กฐ ๋ณ์๊ฐ ์์ ํด๋์ค์ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค. (๋ฆฌ์ค์ฝํ ์นํ ๋ฒ์น)
(๋จ, ๋ถ๋ชจ ํด๋์ค๊ฐ์ ์ฐธ์กฐ ๋ณ์๊ฐ ์ ๊ทผํ ์ ์๋ ๊ฒ์ ๋ถ๋ชจ ํด๋์ค๊ฐ ๋ฌผ๋ ค์ค ๋ณ์์ ๋ฉ์๋๋ฟ์ด๋ค.
[KEYPOINT] : ๋คํ์ฑ๊ณผ ์ผ๋ฐํ๊ด๊ณ๋ ์ฝ๋๋ฅผ ๊ฐ๊ฒฐํ ๊ฒ ํ ๋ฟ ์๋๋ผ ๋ณํ์๋ ์ ์ฐํ๊ฒ ๋์ฒํ ์ ์๊ฒ ํ๋ค.
ํผํฐ ์ฝ๋์ ์์ ๊ท์น
1. ์์ ํด๋์ค์ ๋ถ๋ชจ ํด๋์ค ์ฌ์ด๋ '์ญํ ์ํ' ๊ด๊ณ๊ฐ ์๋์ด์ผ ํ๋ค.
2. ํ ํด๋์ค์ ์ธ์คํด์ค๋ ๋ค๋ฅธ ์๋ธ ํด๋์ค์ ๊ฐ์ฒด๋ก ๋ณํํ ํ์๊ฐ ์ ๋ ์์ด์ผ ํ๋ค.
3. ์์ ํด๋์ค๊ฐ ๋ถ๋ชจ ํด๋์ค์ ์ฑ
์์ ๋ฌด์ํ๊ฑฐ๋ ์ฌ์ ์ํ์ง ์๊ณ ํ์ฅ๋ง ์ํํด์ผ ํ๋ค.
4. ์์ ํด๋์ค๊ฐ ๋จ์ง ์ผ๋ถ ๊ธฐ๋ฅ์ ์ฌ์ฌ์ฉํ ๋ชฉ์ ์ผ๋ก ์ ํธ๋ฆฌํฐ ์ญํ ์ ์ํํ๋ ํด๋์ค๋ฅผ ์์ํ๋ฉด ์๋๋ค. (์์)
5. ์์ ํด๋์ค๊ฐ ์ญํ , ํธ๋์ญ์
, ๋๋ฐ์ด์ค ๋ฑ์ ํน์ํ ํด์ผ ํ๋ค.