๊ตญ๋น์ง์ D+12
- class ํด๋์ค -
ํด๋์ค
์ง๊ธ๊น์ง ์ฐ๋ฆฌ๋ main()ํจ์์์ ์ฝ๋๋ฅผ ์ง์ ์์ฑํ๊ฑฐ๋ ํจ์๋ฅผ ์ด์ฉํด์ ๋ฌธ์ ๋ฅผ ํ์ด์๋ค.
๊ทธ๋ ๋ค๋ฉด ์ค๋ก์ง ์ด๋ ๊ฒ ํจ์๋ง์ ์ด์ฉํด์ ๋ฌธ์ ๋ฅผ ํธ๋๊ฒ์ด ์ข์ ์ฝ๋๋ผ๊ณ ํ ์ ์์๊น?
์ง๋๋ฒ์ ์ฐ๋ฆฌ๋ ํจ์๋ฅผ ์ฌ์ฉํด์ ์คํ์ ๊ตฌํํ๋ ์๊ฐ์ ๊ฐ์ก์๋ค.
// ๋ฉ์ธํจ์
public static void main(String[] args) {
// Q) ์คํ์ ํํํ์์ค.
// 10๊ฐ์ง๋ฆฌ ๋ฐฐ์ด ์ ์ธ
int[] stack = new int[10];
// [0] : stack potiner
// [1] : stack counter
// [2] : poped data
int[] stackInfo = new int[3];
push(stack, stackInfo, 1);
push(stack, stackInfo, 3);
printStack(stack, stackInfo);
}
์คํ์ผ๋ก ์์ฑ๋ ์ฝ๋๋ก ์๋ฅผ ๋ค์ด ์ค๋ช ํ์๋ฉด, ์ฌ๊ธฐ ๋ฉ์ธํจ์๊ฐ ์๋ค .
๋ฉ์ธํจ์์์๋ ๋ฐฐ์ด๋ก ๊ตฌํํ ์คํ์ด๋ผ๋ ๋ฐ์ดํฐ๊ฐ ์กด์ฌํ๊ฒ ๋ ๊ฒ์ด๋ค.
// ํจ์ push์ ํจ์ pop
public static boolean push(int[] stack, int[] si, int value)
{
// 1. ์คํ์ค๋ฒํ๋ก์ฐ ์ํ๋ผ๋ฉด return false;
if(si[1] == 10)
{
System.out.println("Stack-overflow");
return false;
}
// 2. ์คํํฌ์ธํฐ ์์น์ ๋ฐ์ดํฐ ์ง์ด๋ฃ๋๋ค.
stack[si[0]] = value;
//3. ์คํํฌ์ธํฐ, ์คํ์นด์ดํธ ์ฆ๊ฐ
si[0]++;
si[1]++;
return true;
}
public static boolean pop(int[] stack, int[] si)
{
// 1. ์คํ์ธ๋ํ๋ก์ฐ ์ํ๋ผ๋ฉด return false;
if(si[1] == 0) {
System.out.println("Stack-underflow");
return false;
}
// 2. si[2] ๋ฐ์ดํฐ ์ ์ฅํ (์คํํฌ์ธํฐ - 1) ์์น์ ๋ฐ์ดํฐ๋ฅผ ๋บธ๋ค.
si[2] = stack[si[0] - 1];
stack[si[0] - 1] = 0;
//3. ์คํํฌ์ธํฐ, ์คํ์นด์ดํธ ๊ฐ
si[0]--;
si[1]--;
return true;
}
๊ทธ๋ฆฌ๊ณ ์ฐ๋ฆฌ๊ฐ ์คํ์ ๊ธฐ๋ฅ์ ๊ตฌํํ๊ธฐ ์ํด์ ๋ง๋ ํจ์๋ ์๋ค๊ณ ํ์.
๋ง์ฝ ๋ฉ์ธํจ์์ ๊ธฐ๋ฅ๊ตฌํํจ์๋ฅผ ๊ฐ์์ฌ๋์ด ์๋๋ผ ๋ค๋ฅธ ์ฌ๋์ด ๋ง๋ค์๋ค๊ณ ๊ฐ์ ํด๋ณด์.
๊ทธ๋ ๊ฒ ๋๋ฉด ์คํ์ ๊ธฐ๋ฅ์ ๊ตฌํํ๋ A๋ผ๋ ์ฌ๋์ ์คํ์ด๋ผ๋ ๋ฐ์ดํฐ๊ฐ ์กด์ฌํ์ง ์๊ธฐ ๋๋ฌธ์ ๊ตฌํํ๊ธฐ ์ด๋ ค์ด ๋จ์ ์ด ์กด์ฌํ๊ฒ ๋ ๊ฒ์ด๊ณ , ๋ฉ์ธํจ์๋ฅผ ๊ด๋ฆฌํ๋ B๋ผ๋ ์ฌ๋์ ์คํ์ pop์ด๋ push์ ๊ฐ์ ํจ์๋ฅผ ์ฌ์ฉํ์ง ์๊ณ ๊ธฐ๋ฅ์ ๋ฌด์ํ ์ํ๋ก ํน์ ๊ฐ์ ์ถ์ถํด์ค๋ ์ํฉ์ด ๋ฐ์๋ ๊ฐ๋ฅ์ฑ์ด ์๋ค.
์ฝ๋๊ฐ ๊ฐ๋จํ ๊ฒฝ์ฐ์ ๋ฌธ์ ์ ์ด ๋์ง ์๊ฒ ์ง๋ง ์ฝ๋๊ฐ ๋ณต์กํ ๊ฒฝ์ฐ ์คํ์ ๊ธฐ๋ฅ๊ณผ ์คํ์ ๋ฐ์ดํฐ๋ฅผ ๋ฐ๋ก ๋ถ๋ฆฌ์์ผ๋จ๊ธฐ ๋๋ฌธ์ ๊ฐ์ ๋ฌธ์ ์ ์ด ๋ฐ์๋๋ ๊ฒ์ด๋ค.
์ฐ๋ฆฌ๋ ์ด๋ฌํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด์ ๊ธฐ๋ฅ๊ณผ ๋ฐ์ดํฐ๋ฅผ ๋ถ๋ฆฌํ๋ฉด ๋ฌธ์ ๊ฐ ์๊ธธ ๊ฐ๋ฅ์ฑ์ด ๋์ผ๋ ํ๋๋ก ๋ฌถ์ด์ ๊ด๋ฆฌํ๋ ํด๋์ค๊ฐ ๋ํ๋๊ฒ ๋ ๊ฒ์ด๋ค.
• Class
ํด๋์ค๋ Data์ Function์ด ํฉ์ณ์ง ๋ฐ์ดํฐ ํ์ ์ ์๋ฏธํ๋ค.
• Class์ ๋ฉ๋ชจ๋ฆฌ๋งต
// Students ํด๋์ค
public class Student {
String name;
void setName(String _name)
{
name = _name;
}
}
// main() ํจ์์
Student st1 = new Student();
st1.setName("๋ฐ๋ด๋ด");
System.out.println(st1.name); // ๋ฐ๋ด๋ด
์ผ๋จ ์ฒซ๋ฒ์งธ๋ Students๋ผ๋ ํด๋์ค๋ฅผ ์์ฑํด์ name์ด๋ผ๋ ๋ณ์๋ฅผ ๋ง๋ค์ด์ฃผ๊ณ _name์ ํ๋ผ๋ฏธํฐ๋ก ๋ฐ๋ setName์ด๋ผ๋ ๋ฉ์๋๋ฅผ ์์ฑํ ๊ฒ์ด๋ค.
๋๋ฒ์งธ๋ ๋ฉ์ธํจ์์์์ Student ํด๋ ์์ ์๋ setName๋ฉ์๋๋ฅผ ์ฌ์ฉํด ์ด๋ฆ์ ์ ๋ ฅํ๊ณ ์ต์ข ์ ์ผ๋ก ํ๋ฉด์ ๋์ฐ๋ ์ฝ๋๋ฅผ ์์ฑํ ๊ฒ์ด๋ค.
์ด์ ์ด์ฝ๋๊ฐ ์ด๋ป๊ฒ ๋ฉ๋ชจ๋ฆฌ๋งต์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฐจ์งํ๊ฒ ๋๋์ง ์ค๋ช ์ ํด๋ณด์.
์ผ๋จ์ ๋ฉ์ธํจ์์์ ์ฐ๋ฆฌ๋ Student ํด๋์ค๋ฅผ new๋ผ๊ณ ๋ถ์ฌ์ฃผ๋ฉด์ Student๋ผ๋ ํด๋์ค๊ฐ ํ์์ ๋ค์ด๊ฐ๊ฒ ๋๋ค.
์ด๋ ์ฐ๋ฆฌ๋ ํ์์ ์๋ Student ํด๋์ค๋ฅผ ๊ฐ์ฒด(=memory object)๋ผ๊ณ ๋ถ๋ฅด๋ฉฐ ์์ผ๋ก ์ค๋ช ํ ๋ ๊ฐ์ฒด๋ผ๊ณ ํ๊ฒ ๋ค.
๊ฐ์ฒด๋ ํ์ด๋ผ๋ ๊ณต๊ฐ์์ ๋ค์ด๊ฐ๊ธฐ ๋๋ฌธ์ ์ฐธ์กฐ๋ณ์๋ฅผ ์ฌ์ฉํด์ st1์ด๋ผ๋ ๋ณ์๋ฅผ ์คํ์ ๋ฃ์ด์ Studnet๊ฐ์ฒด์ ์์์ ๋ณด๋ฅผ ๋ด์ ๋๋ค.
ํ์ง๋ง ์ด๋ ์ฐ๋ฆฌ๋ ์๋ฌธ์ ์ ๊ฐ์ ธ์ผ ํ๋๋ฐ ๊ฐ์ฒด ์์ ์๋ name์ ์ฐธ์กฐํ์ผ๋ก ์ฐธ์กฐ๋ณ์๋ฅผ ์์ ๋ฃ์ด์ ์์น์ ๋ณด๋ฅผ ๋ฃ์ด์ฃผ๋ฉด ๋์ง๋ง setName์ ๋ฉ์๋๋ก ๋ช ๋ น์ด Set๋ ๊ธ๋ก๋ฒ์์ญ์ ๋ค์ด๊ฐ์ผํ๋ค.
๊ทธ๋์ setName์ ์์ธ์ ์ผ๋ก Studentํด๋์ค์์ ์์์ง๋ง ๊ธ๋ก๋ฒ ์์ญ์ผ๋ก ๋ค์ด๊ฐ๊ฒ ๋๋ค.
๊ทธ๋ฆฌ๊ณ ๋์ setName์ ์ ์์ ์ผ๋ก ์๋๋๋ ค๋ฉด Student๊ฐ์ฒด์ ์ ๊ทผํด์ผํ๊ธฐ ๋๋ฌธ์ Student๊ฐ์ฒด์ ์์์ ๋ณด(=์ฐธ์กฐ๊ฐ)๋ฅผ ํ๋ผ๋ฏธํฐ๋ก setName๋ฉ์๋์๊ฒ ๋๊ฒจ์ฃผ๊ฒ ๋๋ค.
// Students ํด๋์ค
public class Student {
String name;
void setName(String _name)
{
this.name = _name; // <---------this๋ก ์ ๊ทผ
}
}
์ด๋ ๊ฒ ๊ฐ์ฒด์ ์์์ ๋ณด๋ฅผ ํ๋ผ๋ฏธํฐ๋ก ๋๊ฒจ์ค ๊ฒ์ this๋ผ๊ณ ํ๋ฉฐ ์ฐ๋ฆฌ๋ this(Student์ ์ฐธ์กฐ๊ฐ)์ ๋ฐ์์ผ๋ก์จ setName์ Student๊ฐ์ฒด์ ์ ๊ทผ์ด ๊ฐ๋ฅํ๊ฒ ๋ ๊ฒ์ด๋ค.
์ด๋์ this๋ ํ๋ผ๋ฏธํฐ์ ์๋ต๋์ด ์์ผ๋ฉฐ, ๋ฉ์๋๋ ์ฌ์ค์ ๋ชจ๋ this๋ฅผ ๊ฐ์ง๊ณ ์๋ค๊ณ ํ ์ ์๋ค.
์์ ๊น์ง๋ ์์ฑ๋จ๊ณ๋ผ๊ณ ํ ์ ์์ผ๋ฉฐ, ์ด์ ๋ง์ฝ ์ฐ๋ฆฌ๊ฐ setName์ด๋ผ๋ ๋ฉ์๋๋ฅผ ๋ถ๋ฌ์ผ ํ ๋ ์ฐ๋ฆฌ๋ Student๊ฐ์ฒด๋ฅผ ํตํด์ setName์ ์ ๊ทผํด์ผํ๊ธฐ ๋๋ฌธ์ Studnet๊ฐ์ฒด์์๋ ๊ธ๋ก๋ฒ์์ญ์ ์๋ setName์ ์์์ ๋ณด๋ฅผ ๊ฐ์ง๊ณ ์์ด์ผ ํ๋ค.
์ด๋ ๊ฒ ๋๋ฉด ์ฐ๋ฆฌ๋ ๊ธ๋ก๋ฒ์์ญ์ ๋ช ๋ น์ด(=๋ฉ์๋)๊ฐ ์์ด๋ ์ฝ๊ฒ ์ ๊ทผ์ด ๊ฐ๋ฅํ๋ค.
• ์ ๊ทผ์ ์ด์ (Access Modifier)
- public : ์ฝ๊ณ ์ฐ๊ธฐ๊ฐ ๋ชจ๋ ๊ฐ๋ฅํ๋ค.
- private : ์ฝ๊ณ ์ฐ๊ธฐ๊ฐ ๋ชจ๋ ๋ถ๊ฐ๋ฅํ๋ฉฐ ์ธ๋ถ์ ๊ทผ์๊ฐ ์ ๊ทผํ์ง ๋ชปํ๋๋ก ํ๋ค.
- protected
- default
=> ์ ๊ทผ์ ์ด์๋ ์ผ๋จ public๊ณผ private๋ง ํ์ตํ๋๋ก ํ๋ค.
public์ ๋ฌด์กฐ๊ฑด ์ธ๋ถ์์ ๋ฐ์ดํฐ๋ฅผ ํ์ธํ๊ณ ๋ณ๊ฒฝํ๋ ํ์๊ฐ ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ์ ํฐ ์ด๋ ค์์ ์์ง๋ง private๊ฐ์ ๊ฒฝ์ฐ์๋ ๊ฐ์ ์ฝ์ด์ค์ง๋ ๋ชปํ ๋ฟ๋๋ฌ ๊ฐ์ ๋ณ๊ฒฝํ๋ ๊ฒ ๋ํ ๋ถ๊ฐ๋ฅํ๊ธฐ๋๋ฌธ์ ๋ฐฐ์ฐ๋ ์ฌ๋ ์ ์ฅ์ผ๋ก์จ private๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ๋ํ ์๋ฌธ์ ์ ๊ฐ์ง ์ ์๋ค.
๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ์ฐ๋ฆฌ๋ ์ด๋ฅผ ์กฐ๊ธ ๋ ์ฝ๊ฒ ์ดํดํ๊ธฐ ์ํด ์ผ๋จ ์ฐ๋ฆฌ๊ฐ ์ ๊ทผ์ ์ด์๋ฅผ ์ฌ์ฉํ๋ ๋ชฉ์ ์ ๋ํด์ ๋ถํฐ ์ ํ์๊ฐ ์๋ค.
์๋ฅผ ๋ค์ด ๋ด๊ฐ ๊ตญ์ด, ์์ด, ์ํ์ ๊ฐ์ ์ ๋ ฅํ ๋ค์์ ํ๊ท ์ ๊ฐ์ ๋ฐ์๋ด๋ ํ๋ก๊ทธ๋จ์ ๋ง๋ค๊ฒ์ด๋ค.
๊ทธ๋ ๋ค๋ฉด ์ฐ๋ฆฌ๋ ๊ตญ์ด, ์์ด, ์ํ์ ๊ฐ์ ์ ๋ ฅํ ๋ค์์ ํ๊ท ๊ฐ์ ๊ตฌํด์ฃผ๋ ๋ฉ์๋๋ฅผ ๋ง๋ค์ด์ ๊ฒฐ๊ณผ๋ฅผ ๋ฆฌํดํด ๋ด๋ ๊ฒ์ ์๊ฐํ ์ ์๋ค.
๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ์ฐ๋ฆฌ๋ ๊ตญ์ด, ์์ด, ์ํ ๊ฐ์ ์๊ด์์ด ํ๊ท ๊ฐ์ ๋ณ๊ฒฝํด์๋ ์๋์ง๋ง ๋ง์ฝ ํ๊ท ๊ฐ์ด public์ผ๋ก ์ค์ ๋์ด์๋ค๋ฉด ๋ด๊ฐ ์ธ์ ๋ ์ง ๋ฐ๊พธ๊ณ ์ถ์๋ ๋ฐ๊ฟ ์ ์๊ฒ ๋๋ ๊ฒ์ด๋ค.
๊ทธ๋์ ์ฐ๋ฆฌ๋ ์์๋ก ํ๊ท ๊ฐ์ ์ง์ด๋ฃ์ ์ ์๊ฒ ํ๊ท ๊ฐ์ private๋ก ์ค์ ํด์ฃผ๋ฉด ๋๋ ๊ฒ์ด๋ค.
(๋ง์ฝ, ๊ณผ๋ชฉ์ ๋ํ ์ ๋ณด๋ํ ์ ๊ทผ์ ์ ํํ๊ณ ์ ํ๋ค๋ฉด private๋ก ์ค์ ํด์ค๋ ์๊ด์๋ค)
๊ทธ๋ฐ๋ฐ ์ฌ๊ธฐ์ ๋ ๋ฌธ์ ๊ฐ ์๋ค.
ํ๊ท ์ ๊ฐ์ private๋ก ์ค์ ํด์ฃผ๋ฉด ๊ฐ์ด ๋ณ๊ฒฝ๋์ง ์์ ๋ฟ๋ง์๋๋ผ ์ฝ์์ ์กฐ์ฐจ ์๋ค.
๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ์ฌ๋ฐ๋ฅธ private์ ์ฌ์ฉ๋ฐฉ๋ฒ์ ์ผ๋จ ์์๋ก ๋ฐ๊ฟ์ ์๋ ๊ฐ์ ๋ํด private๋ฅผ ์ฌ์ฉํด์ ์ฝ๊ธฐ์ ์ฐ๊ธฐ๋ฅผ ๋ชจ๋ ์ฐจ๋จํ ๋ค์์ ๊ทธ๋๊ทธ๋ ํ์ํ ๋๋ง๋ค ํจ์๋ฅผ ์ฌ์ฉํด ์ฃผ๋ ๊ฒ์ด๋ค.
๊ทธ๋ ๊ฒ ๋๋ฉด ์ฌ์ฉ์๊ฐ ๋ฐ๋ก ๊ฐ์ ์ ๋ ฅํ ์๋ ์์ง๋ง ๊ฐ์ ์กฐํํ ์ ์๋ ํจ์๋ฅผ ๋ง๋ค์๋ค๋ฉด ์กฐํ๊ฐ ๊ฐ๋ฅํ๊ฒ ๋๋ ๊ฒ์ด๋ค.
• getter / setter
- ๋ฐ์ดํฐ์ ๋ฌด๊ฒฐ์ฑ : ๋ฐ์ดํฐ์ ๊ฒฐํจ์ด ์๊ฒ ํ๋ ๊ฒ์ผ๋ก ๋ฐ์ดํฐ ์ธก๋ฉด์ผ๋ก ๋ฐ๋ผ๋ดค์ ๋ ํ์ง์ฑ์ด ์ฌ๋ผ๊ฐ๋ค.
- ํธ๋ฆฌํจ : ์ง๊ด์ ์ด๊ธฐ ๋๋ฌธ์ readability๊ฐ ์์นํ๊ฒ ๋๋ฉฐ, ํด๋์ค๋ฅผ ์ฌ์ฉํ๋ ์ ์ฅ์์ ํธ๋ฆฌํ๋ค.
- getter : ํด๋์ค์์ private๋ก ๋์ด์๋ ๋ฐ์ดํฐ๋ฅผ ์ป์ด์ฌ ์ ์๋ค.
- setter : private๋ก ์ค์ ๋์ด ์๋ ๋ณ์์์ ๊ฐ์ ๊ฐ๊ณตํด ๋ฃ๋ ๊ฒ์ด๋ค.
'์๋ > ๊ตญ๋น์ง์' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[D+13] Sort, Bubble Sort (0) | 2022.10.10 |
---|---|
[D+13] ์ฝ๋ฉ๋ฐ์ด (0) | 2022.10.10 |
[D+11] ์ฐธ์กฐํ์ (0) | 2022.10.04 |
[D+10] ์ฝ๋ฉ๋ฐ์ด (0) | 2022.10.01 |
[D+09] ์ปดํจํฐ์์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ด๋ป๊ฒ ์ฌ์ฉํ๋๊ฐ? (0) | 2022.09.30 |
๋๊ธ