BackEnd๐Ÿงต

2023.04.21 TIL(๊ฐ์ฒด์ง€ํ–ฅ)

hae02y 2023. 4. 24. 01:12
๋ฐ˜์‘ํ˜•

 

๐Ÿ‘€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๋Š” ํ•จ์ˆ˜ ํ˜น์€ ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ ์ „๋‹ฌ ํ˜น์€ ์ž…๋ ฅ๋˜๋Š” ์‹ค์ œ ๊ฐ’์ด๋‹ค.(์ „๋‹ฌ์ธ์ž) ํ•จ์ˆ˜์™€ ๋ฉ”์†Œ๋“œ์˜ ์ž…๋ ฅ๊ฐ’

 

 

 

๋ฐ˜์‘ํ˜•