๐Today...
์ฐ์ ๋ฌด์์ด ๋๊ณ ์ ํ๋๊ฐ๋ฅผ ์์ ์๊ฒ ๋งํ๋ผ ๊ทธ๋ฆฌ๊ณ ํด์ผ ํ ์ผ์ ํ๋ผ - Epictetus
โ์ค๋์ TIL(Today I Learn)
๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ
๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ(OOP; Object Oriented Programming) ์ ์ผ๋ จ์ ๋ช ๋ น์ด๋ค์ ๋์ดํ์ฌ ๋ง์ ๊ฑด๋ด๋ ์ ์ฐจ์ ์ธ ํ๋ก๊ทธ๋๋ฐ ๋ฐฉ์๊ณผ๋ ๋ค๋ฅด๊ฒ ํ๋ก๊ทธ๋๋ฐ์์ ํ์ํ ๋ฐ์ดํฐ๋ฅผ ํ๊ณณ์ ๋ชจ์ ์ถ์ํ์์ผ ์ํ์ ํ์๋ฅผ ๊ฐ์ง ๊ฐ์ฒด๋ฅผ ๋ง๋ค๊ณ ๊ทธ ๊ฐ์ฒด๋ค๊ฐ์ ํ๋ ฅ๊ณผ ์ ๊ธฐ์ ์ธ ์ํธ์์ฉ์ ํตํด ํน์ ๊ธฐ๋ฅ์ ๊ตฌ์ฑ ํ๋ ํ๋ก๊ทธ๋๋ฐ ๋ฐฉ๋ฒ๋ก ์ด๋ค.
http://wiki.hash.kr/index.php/%EA%B0%9D%EC%B2%B4%EC%A7%80%ED%96%A5
- ํด๋์ค(Class) : ๊ฐ์ฒด๋ฅผ ์ ์ํ ํ, ๊ฐ์ฒด๋ฅผ ์์ฑํ๋๋ฐ ์ฌ์ฉ๋๋ค.
- ๊ฐ์ฒด(Object) : ์ค์ฌํ๋ ๋ชจ๋ ๊ฒ, ์ฌ์ฉ ํ ์ ์๋ ์ค์ฒด
- ์ธ์คํด์ค(Instance) : ํด๋์ค๋ฅผ ํตํด ์์ฑ๋ ๊ฐ์ฒด, ๊ฐ์ฒด๋ฅผ ๋ง๋๋ ๊ณผ์ ์ ์ธ์คํด์คํ ๋ผ๊ณ ํ๋ค.
์ธ์คํด์ค ⊂ ๊ฐ์ฒด
ํด๋์ค์ ๊ฐ์ฒด
# Class
ํด๋์ค๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๋๋ฌธ์๋ก ์์ํ๋ค.
- ํ๋(field) - ํด๋์ค์ ์์ฑ์ ๋ํ๋ด๋ ๋ณ์
- ๋ฉ์๋(method) : ํด๋์ค์ ๊ธฐ๋ฅ์ ๋ํ๋ด๋ ํจ์
- ์์ฑ์(constructor) : ํด๋์ค์ ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ ์ญํ
- ์ด๋ ํด๋์ค(inner class) : ํด๋์ค ๋ด๋ถ์ ํด๋์ค
์์ ๊ตฌ์ฑ์์๋ค์ค ์์ฑ์๋ฅผ ์ ์ธํ ์์๋ฅผ Class์ member๋ผ๊ณ ํ๋ค. ์ด์ค ํ๋์ ๋ฉ์๋๋ ๊ฐ๊ฐ ์์ฑ, ๊ธฐ๋ฅ์ ๋ํํ๋ค.
# ๊ฐ์ฒด(Object)
๊ฐ์ฒด๋ ์์ฑ๊ณผ ๊ธฐ๋ฅ์ด๋ผ๋ ๊ตฌ์ฑ์์๋ก ์ด๋ฃจ์ด์ง๋ค.
์์ฑ - ํ๋
๊ธฐ๋ฅ - ๋ฉ์๋
์์ ๊ตฌ์ฑ์์๋ค๊ณผ ์ด๋ํด๋์ค๋ฅผ ๊ฐ์ฒด์ member๋ผ๊ณ ๋ถ๋ฅธ๋ค.
๊ฐ์ฒด์ ์์ฑ๋ฐฉ๋ฒ์ newํค์๋๋ฅผ ํตํด ์ค์ ๊ฐ์ฒด๋ฅผ ์์ฑํ ์ ์๋ค. ๊ทธ๋ฆฌ๊ณ point์ฐ์ฐ์( . )์ ํตํด ํด๋น ๊ฐ์ฒด์ ๋ฉค๋ฒ์ ์ ๊ทผ์ด ๊ฐ๋ฅํ๋ค.
<ํด๋์ค๋ช
> <์ฐธ์กฐ๋ณ์๋ช
> = new <์์ฑ์>();
Person ps = new Person();
์ฐธ๊ณ ์๋ฃ
http://wiki.hash.kr/index.php/%ED%81%B4%EB%9E%98%EC%8A%A4
http://wiki.hash.kr/index.php/%EA%B0%9D%EC%B2%B4
https://www.youtube.com/watch?v=Mm06BuD3PlY
ํ๋์ ๋ฉ์๋
# ํ๋
ํ๋๋ ํด๋์ค์ ํฌํจ๋ ๋ณ์๋ฅผ ์๋ฏธ , ๊ฐ์ฒด์ ์์ฑ์ ์ ์ํ ๋ ์ฌ์ฉ
class Example { // => ํด๋์ค ์์ญ
int instanceVariable; // ์ธ์คํด์ค ๋ณ์
static int classVariable; // ํด๋์ค ๋ณ์(static ๋ณ์, ๊ณต์ ๋ณ์)
void method() { // => ๋ฉ์๋ ์์ญ
int localVariable = 0; // ์ง์ญ ๋ณ์. {}๋ธ๋ก ์์์๋ง ์ ํจ
}
}
์ฌ๊ธฐ์ ์ธ์คํด์ค๋ณ์, ํด๋์ค๋ณ์๋ ํด๋์ค ์์ญ์ ์ ์ธ๋์๊ธฐ ๋๋ฌธ์ ๋ฉค๋ฒ๋ณ์(ํ๋) ์ด๋ค.
๊ทธ๋ฆฌ๊ณ ๋ฉค๋ฒ๋ณ์์ ๋ค๋ฅด๊ฒ ์ง์ญ๋ณ์๋ ๋ฉ์๋ ๋ด๋ถ์ ๋ธ๋ก์์๋ง ์ฌ์ฉ์ด ๊ฐ๋ฅํ๋ค. ์ง์ญ๋ณ์๋ ์คํ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅ์ด ๋์๋ค๊ฐ ๋ฉ์๋๊ฐ ์ข ๋ฃ๋จ๊ณผ ํจ๊ป ์๋ฉธํ๋ค.
๊ทธ๋ฆฌ๊ณ ํ๋๋ณ์์ ์ง์ญ๋ณ์์ ์ฐจ์ด๋ ์ด๊ธฐ๊ฐ์ ์๋๋ฐ ํ๋๋ณ์๋ ๊ฐ์ ๋ก ์ด๊ธฐํ๊ฐ ์ด๋ฃจ์ด์ง๋ค. ์ฆ, ์ง์ญ๋ณ์๋ ์ ์ธ์์ ๋ฐ๋์ ์ด๊ธฐํ๊ฐ ํ์ํ๋ค.
http://wiki.hash.kr/index.php/%ED%95%84%EB%93%9C_(%EC%9E%90%EB%B0%94)
# Static
static ํค์๋๋ฅผ ์ฌ์ฉํ ๋ณ์๋ฅผ 'static member' ๋ผ๊ณ ๋ถ๋ฅด๊ณ ์ธ์คํด์ค ๋ฉค๋ฒ์ ๊ตฌ๋ถ๋๋ค.
static ํค์๋๋ฅผ ์ฌ์ฉํ ๋ณ์/๋ฉ์๋๋ ์ธ์คํด์ค์ ์์ฑ ์์ด ํธ์ถ์ด ๊ฐ๋ฅํ๋ค.
์ ์ ํ๋๋ ๊ฐ์ฒด๊ฐ์ ๊ณต์ ๋ณ์์ ์ฑ์ง์ด๋ค. (๋ฉ์๋๋ ๋์ผํ๊ฒ ์ ์ฉ)
์ ์ ๋ฉ์๋์ ๊ฒฝ์ฐ ์ธ์คํด์ค๋ณ์ ๋๋ ์ธ์คํด์ค ๋ฉ์๋๋ฅผ ์ฌ์ฉํ ์๊ฐ ์๋ค.
ํด๋์ค ๋ณ์(Static ๋ฉค๋ฒ)
- ํด๋์ค ๋ด์ Static ํค์๋๋ก ์ ์ธ๋ ๋ณ์
- ์ฒ์ JVM์ด ์คํ๋์ด ํด๋์ค๊ฐ ๋ฉ๋ชจ๋ฆฌ์ ์ฌ๋ผ๊ฐ ๋ ~ ํ๋ก๊ทธ๋จ์ด ์ข ๋ฃ๋ ๋๊น์ง ์ ์ง
- ํด๋์ค๊ฐ ์ฌ๋ฌ ๋ฒ ์์ฑ๋์ด๋ Static ๋ณ์๋ ์ฒ์ ๋ฑ ํ ๋ฒ๋ง ์์ฑ๋จ
- ๋์ผํ ํด๋์ค์ ๋ชจ๋ ๊ฐ์ฒด๋ค์ ์ํด์ ๊ณต์ ๋จ
์ธ์คํด์ค ๋ณ์(Non-static ๋ฉค๋ฒ)
- ํด๋์ค ๋ด์ ์ ์ธ๋ ๋ณ์
- ๊ฐ์ฒด ์์ฑ ์๋ง๋ค ๋งค๋ฒ ์๋ก์ด ๋ณ์๊ฐ ์์ฑ๋จ
- ํด๋์ค ๋ณ์์ ๋ฌ๋ฆฌ ๊ณต์ ๋์ง ์์
# ๋ฉ์๋(method)
๋ฉ์๋๋ "ํน์ ํ ์์ ์ ์ํํ๋ ์ผ๋ จ์ ๋ช ๋ น๋ฌธ๋ค์ ์งํฉ" ์ด๋ค. ํด๋์ค์์ ๊ธฐ๋ฅ์ ํด๋นํ๋ ๋ด์ฉ์ ๋ด๋นํ๋ค.
๋ฉ์๋๋ ๋ฉ์๋ ์๊ทธ๋์ฒ(method signature), ๋ฉ์๋ ๋ฐ๋(method body)๋ก ๊ตฌ๋ถ๋๋ค.
public static int add(int x, int y) { // ๋ฉ์๋ ์๊ทธ๋์ฒ
int result = x + y; // ๋ฉ์๋ ๋ฐ๋
return result;
}
method์ ๋ฐํํ์ ์ด void๊ฐ ์๋๊ฒฝ์ฐ์๋ ๋ฉ์๋ ๋ฐ๋์ ๋ฐ๋์ return๋ฌธ์ด ์กด์ฌํด์ผํ๊ณ , ๊ฒฐ๊ณผ๊ฐ์ ๋ฐํํ์ ๊ณผ ์ผ์นํ๊ฑฐ๋ ์๋ํ๋ณํ์ ํตํด์๋ผ๋ ์ผ์นํด์ผํ๋ค.
http://wiki.hash.kr/index.php/%EB%A9%94%EC%86%8C%EB%93%9C
# ๋ฉ์๋ ์ค๋ฒ๋ก๋ฉ(Overloading)
๋ฉ์๋ ์ค๋ฒ๋ก๋ฉ์ ํ๋์ ํด๋์ค ์์ ๊ฐ์ ์ด๋ฆ์ ๋ฉ์๋๋ฅผ ์ฌ๋ฌ๊ฐ ์ ์ํ๋ ๊ฒ์ ์๋ฏธํ๋ค.
public class Overloading {
public static void main(String[] args) {
Shape s = new Shape(); // ๊ฐ์ฒด ์์ฑ
s.area(); // ๋ฉ์๋ ํธ์ถ
s.area(1);
s.area(1,1);
s.area(1.1, 1.1);
}
}
class Shape {
public void area() { // ๋ฉ์๋ ์ค๋ฒ๋ก๋ฉ. ๊ฐ์ ์ด๋ฆ์ ๋ฉ์๋ 4๊ฐ.
System.out.println("์ธ์ ์์");
}
public void area(int r) {
System.out.println("int ์ธ์ ํ๋");
}
public void area(int w, int l) {
System.out.println("int ํ ์ธ์ ๋");
}
public void area(double b, double h) {
System.out.println("double ํ ์ธ์ ๋");
}
}
//๊ฒฐ๊ณผ
//์ธ์ ์์
//int ์ธ์ ํ๋
//int ํ ์ธ์ ๋
//double ํ ์ธ์ ๋
์กฐ๊ฑด
- ๋ฉ์๋์ ์ด๋ฆ์ด ๊ฐ์์ผํ๋ค.
- ๋ฉ๊ฐ๋ณ์์ ๊ฐ์ ๋๋ ํ์ ์ด ๋ฌ๋ผ์ผ ํ๋ค.
- ๋ฐํํ์ ์ ์ค๋ฒ๋ก๋ฉ์ด ์ฑ๋ฆฝ์ ์ํฅ์ ์ฃผ์ง ๋ชปํ๋ค.
๐ํผ์์ ํด๊ฒฐํ๊ธฐ
1. Parameter vs Argument
parameter๋ ํจ์ ํน์ ๋ฉ์๋ ์ ์์์ ๋์ด๋๋ ๋ณ์ ๋ช (๋งค๊ฐ๋ณ์), ๋ฉ์๋์ ์ ๋ ฅ๋๋ ๋ณ์๋ช
argument๋ ํจ์ ํน์ ๋ฉ์๋๋ฅผ ํธ์ถํ ๋ ์ ๋ฌ ํน์ ์ ๋ ฅ๋๋ ์ค์ ๊ฐ์ด๋ค.(์ ๋ฌ์ธ์) ํจ์์ ๋ฉ์๋์ ์ ๋ ฅ๊ฐ