๐Today...
์ ์ ์์๋ ์ฃผ๋ง์ด ์ง๋๊ฐ๋ค... ์ ์ฒ๊ธฐ๋ ๊ฐ์ฑ์ ํด๋ดค์๋ ํฉ๊ฒฉํ๊ฒ๊ฐ๋ค. ๋ํ๊ต ๋ค๋๋๋์ C++์ ๋ฐฐ์ด์ ์ด ์์๋๋ฐ ๊ฐ์ฒด์งํฅ์ด๋ผ๋ ๊ฐ๋ ์ด ๋์ ํ ๋ด๋จธ๋ฆฌ๋ก๋ ์ดํด๊ฐ ์๊ฐ๊ณ ์ด๋ ค์ ๋๊ฒ๊ฐ๋ค. ์ง๊ธ๋ ์ด๋ ต๊ธด ํ์ง๋ง ๊ทธ๋๋ณด๋ค ์กฐ๊ธ๋ ์ดํด๊ฐ๋๋ ๋๋์ด๋ค. ๋ ธํธ๋ถ๋ ๊ณ ์ฅ๋๊ณ ํ๊ฒฝ์ ๋ง์ด ์ด๋ ต์ง๋ง ๊ณ์ ๊ณต๋ถํ์! ํ์ดํ
โ์ค๋์ TIL(Today I Learn)
์์ฑ์
์์ฑ์(Constructor)๋ ๋ง ๊ทธ๋๋ก ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ ์ญํ ์ ํ๋ ํด๋์ค์ ๊ตฌ์ฑ์์์ด๋ค. ์ธ์คํด์ค๊ฐ ์์ฑ๋ ๋ ํธ์ถ๋๋ ์ธ์คํด์ค ์ด๊ธฐํ ๋ฉ์๋ ์ด๋ค. new ํค์๋๋ฅผ ํตํด ๊ฐ์ฒด๋ฅผ ์์ฑํ ๋ ํธ์ถ๋๋๊ฒ์ด ์ด ์์ฑ์๋ผ๋ ๊ฒ์ด๋ค.
์์ฑ์๊ฐ ์ธ์คํด์ค๋ฅผ ์์ฑํ๋ ์ญํ ์ด๋ค ? (X)
์ธ์คํด์ค ์์ฑ์ ํ๋์ญํ > new ํค์๋ (O)
์ธ์คํด์ค ๋ณ์๋ค์ ์ด๊ธฐํ ํ๋ ์ญํ > ์์ฑ์ (O)
์์ฑ์๋ ๋ค์๊ณผ ๊ฐ์ ๋ฐฉ๋ฒ์ผ๋ก ๋ง๋ค์ด์ง๋ค.
class Constructor{
Constructor(){ //์์ฑ์ ์ ์ธ์ด ์์์์๋ ์ปดํ์ผ๋ฌ์ ์ํด ์๋์์ฑ
}
Constructor(String str){ //์์ฑ์ overloading1
}
Constructor(int a,int b){ //์์ฑ์ overloading2
}
์์ฑ์ ์์ฑ์ ๊ท์น์ ๋ค์๊ณผ ๊ฐ๋ค.
1. ์์ฑ์์ ์ด๋ฆ์ ๋ฐ๋์ ํด๋์ค์ ์ด๋ฆ๊ณผ ๊ฐ์์ผํ๋ค.
2. ์์ฑ์๋ return ํ์ ์ด ์๋ค.
3. ํด๋์ค์์๋ ๋ฐ๋์ ํ๋ ์ด์์ ์์ฑ์๊ฐ ์กด์ฌ(์ ์ธ์ด ์์์์๋ default Constructor๊ฐ ์ปดํ์ผ๋ฌ์ ์ํด ์๋ ์์ฑ)
4. ์์ฑ์๊ฐ ์ ์ธ๋๋ฉด ์ ์ธ๋ ์์ฑ์๋ฅผ ๊ธฐ๋ณธ์ผ๋ก ์ฌ์ฉํ๋ค.
class Car{
int num;
String str;
public Car(int num, String str){ //์์ฑ์
this.num = num; //thisํค์๋๋ก Carํด๋์ค์ ๋ฉค๋ฒ๋ณ์ ์ด๊ธฐํ
this.str = str; //thisํค์๋๋ก Carํด๋์ค์ ๋ฉค๋ฒ๋ณ์ ์ด๊ธฐํ
}
}
public class ConstructorExample {
public static void main(String[] args) {
Car c = new Car(1118,"๋ฒค์ธ ");
System.out.println(c.num + "," + c.str);
}
//output
//1118,๋ฒค์ธ
//์์ ์ฌ์ ์ ๋ ๊ฒ ์ ์๋๋ฐ ์ค์ ์ฌ์ฉ์ Class์ ๋ฉค๋ฒ๋ณ์๊ฐ private์ผ๋ก ์ ์ธ๋์์๋
//์ ๊ทผ์ด ๋ถ๊ฐํ๊ฒ ์บก์ํ๋์ด์์ผ๋ฏ๋ก ์ธ์คํด์ค์ ์ธ์์ ์ ๋ ๊ฒ ํ๋๊ฐ์ ์ค์ ํด์ฃผ๊ณ
//getter / setter๋ก ๋ถ๋ฌ์ค๋ ๋ฐฉ์์ผ๋ก ์ฌ์ฉํ๋ค...!
์์ ์ฝ๋๋ ๋งค๊ฐ๋ณ์๊ฐ ์๋ ์์ฑ์๋ก ๋งค๊ฐ๋ณ์๋ฅผ ํตํด ํธ์ถ์์ ํด๋น๊ฐ์ ๋ฐ์์ ์ธ์คํด์ค์ ๋ฉค๋ฒ๋ณ์๋ฅผ ์ด๊ธฐํํ๋ค.
this vs this()
# this()
this()๋ ์์ ์ด ์ํ ํด๋์ค์์ ๋ค๋ฅธ์์ฑ์๋ฅผ ํธ์ถํ๋ ๊ฒฝ์ฐ์ ์ฌ์ฉํ๋ค. ์๋ ์ฝ๋๋ก ํ์ธํด๋ณด์.
public class Test {
public static void main(String[] args) {
Example example = new Example();
Example example2 = new Example(5);
}
}
class Example {
public Example() {
System.out.println("Example์ ๊ธฐ๋ณธ ์์ฑ์ ํธ์ถ!");
};
public Example(int x) {
this(); //<-------this() ์ฌ์ฉ!!
System.out.println("Example์ ๋ ๋ฒ์งธ ์์ฑ์ ํธ์ถ!");
}
}
//Output
Example์ ๊ธฐ๋ณธ ์์ฑ์ ํธ์ถ!
Example์ ๊ธฐ๋ณธ ์์ฑ์ ํธ์ถ!
Example์ ๋ ๋ฒ์งธ ์์ฑ์ ํธ์ถ!
์์๋ ๋ค์๊ณผ ๊ฐ๋ค. 4๋ฒ์งธ ์ค์์ Example example2 = new Example(5)๋ฅผ ํตํด์ Example(int x) ์์ฑ์๊ฐ ์คํ๋ ๊ฒ์ด๊ณ this()๋ฅผ ํตํด์ Example()์์ฑ์๋ฅผ ํธ์ถํ๋ค. ๊ทธ๋ฆฌ๊ณ Example(int x)์ ๋ฌธ์ฅ์ด ์คํ๋๋ค.
this()๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด ๋ฌธ๋ฒ์์๋ฅผ ์ถฉ์กฑ์์ผ์ผํ๋ค.
- this() ๋ฉ์๋๋ ๋ฐ๋์ ์์ฑ์์ ๋ด๋ถ์์๋ง ์ฌ์ฉ ๊ฐ๋ฅ
- this() ๋ฉ์๋๋ ๋ฐ๋์ ์์ฑ์์ ์ฒซ์ค์ ์์นํ๋ค.
# this
this๋ ์ธ์คํด์ค ์์ ์ ๊ฐ๋ฆฌํจ๋ค. ์ฐ๋ฆฌ๊ฐ ์ฐธ์กฐ๋ณ์๋ฅผ ํตํด ์ธ์คํด์ค๋ฉค๋ฒ์ ์ ๊ทผํ ์ ์๋๊ฒ ์ฒ๋ผ this๋ฅผ ํตํด์ ์ธ์คํด์ค ์์ ์ ๋ณ์์ ์ ๊ทผ์ด ๊ฐ๋ฅํ๋ค. ๊ทธ๋ฆฌ๊ณ ์ธ์คํด์ค ๋ณ์์ ๋งค๊ฐ๋ณ์๋ฅผ ์ด๋ฆ๋ง์ผ๋ก๋ ๊ตฌ๋ถํ๊ธฐ๊ฐ ์ด๋ ค์ด๋ฐ, ์ด๋ ์ด๋ฅผ ๊ตฌ๋ถํด ์ฃผ๊ธฐ ์ํ ์ฉ๋๋ก ์ฌ์ฉ๋๋๊ฒ์ด ๋ฐ๋ก this ํค์๋์ด๋ค.
class Car{
int num;
String str;
public Car(int num, String str){ //์์ฑ์
this.num = num; //thisํค์๋๋ก Carํด๋์ค์ ๋ฉค๋ฒ๋ณ์ ์ด๊ธฐํ
this.str = str; //thisํค์๋๋ก Carํด๋์ค์ ๋ฉค๋ฒ๋ณ์ ์ด๊ธฐํ
//num = num; ---ใฑ
//str = str; ---> ์ง์ญ๋ณ์๋ก ๊ฐ์ฃผ๋์ด ์๋ฌ๋ฐ์
}
}
public class Main {
public static void main(String[] args) {
Car c = new Car(1118,"๋ฒค์ธ ");
System.out.println(c.num + "," + c.str);
}
}
* ์ฃผ๋ก ์ธ์คํด์ค ํ๋๋ช ๊ณผ ์ง์ญ๋ณ์๋ฅผ ๊ตฌ๋ถํ๊ธฐ ์ํ ์ฉ๋๋ก ์ฌ์ฉ๋๋ค.
๋ด๋ถ ํด๋์ค(Inner Class)
๋ด๋ถํด๋์ค(inner class)๋ ํด๋์ค ๋ด๋ถ์ ์ ์ธ๋ ํด๋์ค๋ก ์ธ๋ถํด๋์ค์ ๋ด๋ถํด๋์ค๊ฐ ์๋ก ์ฐ๊ด๋์ด์์๋ ์ฌ์ฉํ๋ค.
๋ด๋ถํด๋์ค๋ฅผ ์ฌ์ฉํ๋ฉด ์ธ๋ถํด๋์ค์ ๋ฉค๋ฒ์ ์ฝ๊ฒ ์ ๊ทผ์ด ๊ฐ๋ฅํ๊ณ , ์ฝ๋์ ๋ณต์ก์ฑ์ ์ค์ผ์์๋ค. ๋ํ ์ธ๋ถ์ ์ผ๋ก ๋ถํ์ํ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ถ์ ์์ด ์บก์ํ๋ฅผ ๋ฌ์ฑํ๋๋ฐ ์ ์ฉํ๋ค.
class Outer { // ์ธ๋ถ ํด๋์ค
class Inner {
// ์ธ์คํด์ค ๋ด๋ถ ํด๋์ค
}
static class StaticInner {
// ์ ์ ๋ด๋ถ ํด๋์ค
}
void run() {
class LocalInner {
// ์ง์ญ ๋ด๋ถ ํด๋์ค
}
}
}
์ข ๋ฅ | ์ ์ธ์์น | ์ฌ์ฉ๊ฐ๋ฅํ๋ณ์ |
์ธ์คํด์ค ๋ด๋ถ ํด๋์ค(instance inner class) | ์ธ๋ถ ํด๋์ค์ ๋ฉค๋ฒ๋ณ์ ์ ์ธ์์น์ ์ ์ธ (๋ฉค๋ฒ ๋ด๋ถ ํด๋์ค) |
์ธ๋ถ ์ธ์คํด์ค ๋ณ์, ์ธ๋ถ ์ ์ญ ๋ณ์ |
์ ์ ๋ด๋ถ ํด๋์ค(static inner class) | ์ธ๋ถ ํด๋์ค์ ๋ฉค๋ฒ๋ณ์ ์ ์ธ์์น์ ์ ์ธ (๋ฉค๋ฒ ๋ด๋ถ ํด๋์ค) |
์ธ๋ถ ์ ์ญ ๋ณ์ |
์ง์ญ ๋ด๋ถ ํด๋์ค(local inner class) | ์ธ๋ถ ํด๋์ค์ ๋ฉ์๋๋ ์ด๊ธฐํ๋ธ๋ก ์์ ์ ์ธ | ์ธ๋ถ ์ธ์คํด์ค ๋ณ์, ์ธ๋ถ ์ ์ญ ๋ณ์ |
์ต๋ช ๋ด๋ถ ํด๋์ค(anonymous inner class) | ํด๋์ค์ ์ ์ธ๊ณผ ๊ฐ์ฒด์ ์์ฑ์ ๋์์ ํ๋ ์ผํ์ฉ ์ต๋ช ํด๋์ค | ์ธ๋ถ ์ธ์คํด์ค ๋ณ์, ์ธ๋ถ ์ ์ญ ๋ณ์ |
๋ด๋ถํด๋์ค๋ ์ผ๋จ ๊ฐ๋ ๋ง ์๊ณ ๋์ด๊ฐ์! ๋ค์๋ฒ์ ๊ธฐํ๊ฐ ๋๋ฉด ๋ค์ํ๋ฒ ๊ณต๋ถ๋ฅผ ์งํํด์ผ๊ฒ ๋ค.
๐ํผ์์ ํด๊ฒฐํ๊ธฐ
1. ํ ์คํธ ์คํํฌ๋ํํธ ๋ง๋ค๊ธฐ