BackEnd๐Ÿงต

2023.04.24 TIL(์ƒ์„ฑ์ž)

hae02y 2023. 4. 24. 18:47
๋ฐ˜์‘ํ˜•

 

๐Ÿ‘€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. ํ…์ŠคํŠธ ์Šคํƒ€ํฌ๋ž˜ํ”„ํŠธ ๋งŒ๋“ค๊ธฐ

 

 

 

 

๋ฐ˜์‘ํ˜•