๊ด€๋ฆฌ ๋ฉ”๋‰ด

Tech Log ๐Ÿ› ๏ธ

์ผ„ํŠธ๋ฐฑ์˜ ๊ตฌํ˜„ํŒจํ„ด 6์žฅ - ์ƒํƒœ ๋ณธ๋ฌธ

๊ฐœ๋ฐœ ์„œ์ /์ผ„ํŠธ๋ฐฑ ๊ตฌํ˜„ ํŒจํ„ด

์ผ„ํŠธ๋ฐฑ์˜ ๊ตฌํ˜„ํŒจํ„ด 6์žฅ - ์ƒํƒœ

sehaan 2023. 10. 2. 02:50

 

๊ฐ์ฒด๋Š” ์™ธ๋ถ€์— ๋“œ๋Ÿฌ๋‚˜๋Š” ํ–‰์œ„์™€ ํ–‰์œ„๋ฅผ ์ง€์›ํ•˜๊ธฐ ์œ„ํ•œ ์ƒํƒœ๋ฅผ ๋ฌถ์–ด์ฃผ๋Š” ํŽธ๋ฆฌํ•œ ๋‹จ์œ„๋‹ค.

์ƒํƒœ

-  ์ƒํƒœ๋ฅผ ํšจ๊ณผ์ ์œผ๋กœ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด์„œ ์œ ์‚ฌํ•œ ์ƒํƒœ๋ฅผ ๋ฌถ์–ด์„œ ๊ด€๋ฆฌํ•˜๊ณ  ๊ฐ ์ƒํƒœ๋Š” ๋ณ„๋„๋กœ ๊ด€๋ฆฌํ•ด์•ผํ•œ๋‹ค.

 

๋‘ ๊ฐœ์˜ ์ƒํƒœ๊ฐ€ ์œ ์‚ฌํ•œ ์ง€ ์•Œ๋ ค๋ฉด

1. ๋‘ ๊ฐœ์˜ ์ƒํƒœ๊ฐ€ ๋™์ผํ•œ ์—ฐ์‚ฐ ์•ˆ์—์„œ ์‚ฌ์šฉ๋˜๋Š”๊ฐ€?

2. ๋™์ผํ•œ ์‹œ์ ์— ์ƒ์„ฑ๋˜๊ณ  ์†Œ๋ฉธ๋˜๋Š”๊ฐ€?

๋ฅผ ํ™•์ธํ•˜๋ฉด ๋œ๋‹ค.

 

์ง์ ‘ ์ ‘๊ทผ

- ์ง์ ‘ ์ ‘๊ทผ์˜ ์žฅ์ ์€ ๋ช…ํ™•์„ฑ์ด๋‹ค.

x=10 // ๋งค์šฐ๋งค์šฐ ๋ช…ํ™•ํ•˜๋‹ค.

ํ•˜์ง€๋งŒ ์ฝ”๋“œ๋ฅผ ํ†ตํ•ด ์ž์„ธํ•œ ๋‚ด์šฉ์„ ์•Œ๋ ค์ฃผ๊ธฐ๋Š” ์–ด๋ ต๋‹ค.

 

์˜ˆ๋ฅผ ๋“ค์–ด

doorRegister = 1; // ์ง๊ด€์ ์ด์ง€ ์•Š์Œ
door.open(); // ๋งค์šฐ ์ง๊ด€์ ์ž„

๋”ฐ๋ผ์„œ ์ง์ ‘ ์ ‘๊ทผ์ด ๋งŽ๋‹ค๋ฉด ์›ํ™œํ•œ ์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜์„ ๋ฐฉํ•ดํ•  ์ˆ˜ ์žˆ๋‹ค.

 

๊ฐ„์ ‘ ์ ‘๊ทผ

- ๋ช…ํ™•์„ฑ๊ณผ ์ง์ ‘์„ฑ์„ ํฌ์ƒํ•ด์„œ ์œ ์—ฐ์„ฑ์„ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค.

- 2๊ฐœ ์ด์ƒ์˜ ๋ฐ์ดํ„ฐ ๊ฐ„์˜ ์˜์กด ๊ด€๊ณ„๊ฐ€ ์กด์žฌํ•˜๋Š” ๊ฒฝ์šฐ ๋งค์šฐ ์œ ์šฉํ•˜๋‹ค.

void setValue(int number){
	this.number = number;
    value = width * number;
}

 

๊ณต์šฉ ์ƒํƒœ

- ๊ฐ™์€ ๋ฐ์ดํ„ฐ ์š”์†Œ๋Š” ํด๋ž˜์Šค์— ํ•„๋“œ๋ฅผ ์„ ์–ธํ•ด์„œ ์‚ฌ์šฉํ•˜๋ฉด ์ข‹๋‹ค.

- ๊ฐ ๊ฐ์ฒด์˜ ๊ณต์šฉ ์ƒํƒœ๋Š” ๋ชจ๋‘ ๋ฒ”์œ„์™€ ์ƒ๋ช… ๊ธฐ๊ฐ„์ด ๊ฐ™์•„์•ผํ•œ๋‹ค.

class Point {
	int x;
    int y;
}

๊ฐ€๋ณ€ ์ƒํƒœ

- ๋ฐ์ดํ„ฐ ์š”์†Œ์˜ ์ด๋ฆ„์„ ํ‚ค๋กœํ•˜๊ณ  ๊ฐ’์„ ๋ฐ์ดํ„ฐ๋กœ ํ•˜๋Š” ๋งต์œผ๋กœ ํ‘œํ˜„ํ•œ๋‹ค.

- ์œ ์—ฐํ•˜๊ธด ํ•˜์ง€๋งŒ ์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜์ด ์–ด๋ ต๋‹ค.

- ๊ฐ ํ•„๋“œ์˜ ์ƒํƒœ์— ๋”ฐ๋ผ ๋‹ค๋ฅธ ํ•„๋“œ๋ฅผ ํ•„์š”๋กœ ํ•˜๋Š” ๊ฒฝ์šฐ ์œ ์šฉํ•˜๋‹ค.

 

์™ธ์žฌ ์ƒํƒœ

์–ด๋–ค ๊ฐ์ฒด์™€ ๊ด€๋ จ๋œ ํŠน์ˆ˜ ๋ชฉ์  ์ •๋ณด๋Š” ๊ฐ์ฒด๊ฐ€ ์•„๋‹ˆ๋ผ ํ•„์š”๋กœ ํ•˜๋Š” ๋ถ€๋ถ„์— ๋‘๋Š” ๊ฒŒ ๋‚ซ๋‹ค.

๋‹ค๋งŒ ์™ธ์žฌ ์ƒํƒœ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๊ฐ์ฒด์˜ ๋ณต์‚ฌ๊ฐ€ ์–ด๋ ค์›Œ์ง„๋‹ค.

 

๋ณ€์ˆ˜

๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ์—๋Š” ์ง€์—ญ ๋ณ€์ˆ˜๋ฅผ ์‹œ์šฉํ•˜๊ณ  ๊ฐ„๊ฐ„ํžˆ ์ •์  ๋ณ€์ˆ˜์™€ ์ „์šฉ ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๊ฐ์ฒด ๊ฐ„์˜ ์˜์กด์„ฑ์„ ์ค„์ด๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.

๋ณ€์ˆ˜์˜ ์ข…๋ฅ˜๋ฅผ ์ค„์ด๋ฉด ๋ฌธ๋งฅ๋งŒ์œผ๋กœ๋„ ์‰ฝ๊ฒŒ ๊ตฌ๋ถ„ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

๋ณ€์ˆ˜์˜ ์ƒ๋ช… ์‹œ๊ฐ„์€ ๋ณ€์ˆ˜์˜ ๋ฒ”์œ„์— ๊ฐ€๊นŒ์šด๊ฒŒ ์ข‹๋‹ค.

๊ฐ™์€ ๋ฒ”์œ„์—์„œ ์ •์˜๋˜๋Š” ๋ณ€์ˆ˜๋“ค์€ ๋ชจ๋‘ ๊ฐ™์€ ์ƒ๋ช… ๊ธฐ๊ฐ„์„ ๊ฐ€์ ธ์•ผํ•œ๋‹ค.

 

์ง€์—ญ๋ณ€์ˆ˜ 

์ง€์—ญ ๋ณ€์ˆ˜๋Š” ๊ฐ€๊ธ‰์  ์ตœ์†Œ ๋ฒ”์œ„ ๋‚ด์—์„œ ์„ ์–ธํ•˜๋ผ

 

์ง€์—ญ ๋ณ€์ˆ˜๋Š” ๋„์šฐ๋ฏธ ๋ฉ”์†Œ๋“œ๋กœ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ๋‹ค.

์ด๋•Œ ์—ฐ์‚ฐ์— ํ•„์š”ํ•œ ํ‘œํ˜„์€ ๋ฉ”์†Œ๋“œ ๋‚ด์šฉ์ด ๋˜๊ณ , ๋ณ€์ˆ˜ ์ด๋ฆ„์€ ๋ฉ”์†Œ๋“œ ์ด๋ฆ„์ด ๋œ๋‹ค.

 

ํ•„๋“œ

ํ•„๋“œ์˜ ๋ฒ”์œ„์™€ ์ƒ๋ช…๊ธฐ๊ฐ„์€ ํ•„๋“œ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๊ฐ์ฒด์™€ ๊ฐ™๋‹ค.

 

๋งŒ์•ฝ ํ•„๋“œ๋ฅผ ๊ฐ€์žฅ ์•ž์— ์„ ์–ธํ•˜๋ฉด , ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉ๋ ์ง€์— ๋Œ€ํ•œ ๋ฌธ๋งฅ์„ ์ œ๊ณตํ•ด์ค„ ์ˆ˜ ์žˆ๋‹ค.

๋’ค์— ์„ ์–ธํ•œ๋‹ค๋ฉด ์ค‘์š”์„ฑ์ด ์ƒ๋Œ€์ ์œผ๋กœ ๋–จ์–ด์ง„๋‹ค๋Š” ๊ฒƒ์„ ์•”์‹œํ•œ๋‹ค.

 

๋ถˆ๋ฆฐ ํ”Œ๋ž˜๊ทธ๋ฅผ ํ†ตํ•ด "๊ฐ์ฒด๊ฐ€ ๋‘ ๊ฐ€์ง€ ๋‹ค๋ฅธ ๋ฐฉ์‹์œผ๋กœ ๋™์ž‘ํ•œ๋‹ค" ๋Š” ๊ฒƒ์„ ๋‚ดํฌํ•  ์ˆ˜ ์žˆ๋‹ค.

 

ํŒŒ๋ผ๋ฏธํ„ฐ

ํ•˜๋‚˜์˜ ๊ฐ์ฒด์—์„œ ๋‹ค๋ฅธ ๊ฐ์ฒด์— ๋Œ€ํ•œ ์—ฌ๋Ÿฌ ๋ฉ”์‹œ์ง€๊ฐ€ ๊ฐ™์€ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ํ•„์š”๋กœ ํ•œ๋‹ค๋ฉด , ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ํ˜ธ์ถœ๋˜๋Š” ๊ฐ์ฒด์— ํฌํ•จํ•˜๋ผ

 

Server s = new Server();
s.a(this);
s.b(this);
s.c(this);

์ด ์ฝ”๋“œ๋ฅผ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋‹ค.

Server s = new Server(this);
s.a();
s.b();
s.c();

 

์ด๋ ‡๊ฒŒ ํ•จ์œผ๋กœ์จ ์˜์กด์„ฑ์„ ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค.

 

์˜ต์…˜ ํŒŒ๋ผ๋ฏธํ„ฐ

๋ฐ˜๋“œ์‹œ ํ•„์š”ํ•œ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์•ž์—์„œ ์ „๋‹ฌํ•˜๊ณ  , ์˜ต์…˜ ํŒŒ๋ผ๋ฏธํ„ฐ๋Š” ๋’ค์— ์ „๋‹ฌํ•œ๋‹ค.

 

public Server();
public Server(int port);
public Server(int port, int log)

์ด๋ฅผ ๋ง์›๊ฒฝ์‹ ํŒŒ๋ผ๋ฏธํ„ฐ ํŒจํ„ด์ด๋ผ๊ณ ๋„ ํ•œ๋‹ค.

 

๊ฐ€๋ณ€ ์ธ์ž

์•„๋ž˜์™€ ๊ฐ™์€ ๋ฐฉ๋ฒ•์œผ๋กœ ์ž„์˜์˜ ์ˆ˜์˜ ์ธ์ž๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๋‹ค.

method(Class... classes)

 

ํŒŒ๋ผ๋ฏธํ„ฐ ๊ฐ์ฒด

์—ฌ๋Ÿฌ ๊ฐœ์˜ ํŒŒ๋ผ๋ฏธํ„ฐ๊ฐ€ ํ•จ๊ป˜ ์—ฌ๋Ÿฌ ๋ฉ”์†Œ๋“œ๋กœ ์ „๋‹ฌ๋œ๋‹ค๋ฉด, ์ด๋“ค์„ ํ•˜๋‚˜๋กœ ๋ฌถ์–ด์„œ ํ•˜๋‚˜์˜ ๊ฐ์ฒด๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด x,y,heigh,width ๋ฅผ ๋ฌถ์–ด์„œ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.

 

setOuterBounds(x, y, width, height)

setOuterBounds(bounds)

ํŒŒ๋ผ๋ฏธํ„ฐ ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ฝ”๋“œ๊ฐ€ ์งง์•„์ง€๊ณ  ์˜๋„๋ฅผ ๋ช…ํ™•ํžˆ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ๋‹ค.

๋˜ํ•œ ํ•ด๋‹น ํŒŒ๋ผ๋ฏธํ„ฐ๋“ค์ด ๋ฐ€์ ‘ํ•œ ์—ฐ๊ด€์„ฑ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ๋ณด์—ฌ์ค„ ์ˆ˜ ์žˆ๋‹ค.

 

ํ•˜์ง€๋งŒ ๋งŒ์•ฝ ๊ฐ์ฒด์˜ ์ƒ์„ฑ์œผ๋กœ ์ธํ•ด ์„ฑ๋Šฅ ์ €ํ•˜๊ฐ€ ์ผ์–ด๋‚œ๋‹ค๋ฉด ํŒŒ๋ผ๋ฏธํ„ฐ ๊ฐ์ฒด๋ฅผ ์—†์• ๋Š” ์ชฝ์œผ๋กœ ์ˆ˜์ •ํ•˜๋ฉด ๋œ๋‹ค.

 

์ƒ์ˆ˜

 

๋ณ€ํ™”ํ•˜์ง€ ์•Š๋Š” ๋ฐ์ดํ„ฐ๋ฅผ static final์„ ํ†ตํ•ด ์„ ์–ธํ•˜๊ณ  ๊ทธ ๋ณ€์ˆ˜๋ฅผ ์ฐธ์กฐํ•˜๊ฒŒ๋” ํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.

 

์ดˆ๊ธฐํ™”

์ดˆ๊ธฐํ™”๋Š” ๋ณ€์ˆ˜๊ฐ€ ์‚ฌ์šฉ๋˜๊ธฐ ์ „์— ์•Œ๊ณ  ์žˆ๋Š” ์ƒํƒœ๋กœ ๋งŒ๋“œ๋Š” ์ž‘์—…์ด๋‹ค.

 

์ดˆ๊ธฐํ™”๋Š” ๊ฐ€๊ธ‰์  ์„ ์–ธ๊ณผ ํ•จ๊ป˜ ํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.

๋งŒ์•ฝ ์ดˆ๊ธฐํ™”์— ๋“œ๋Š” ๋น„์šฉ์ด ๋น„์‹ธ๋‹ค๋ฉด ์ƒ์„ฑ๊ณผ ์ดˆ๊ธฐํ™”๋ฅผ ๋ถ„๋ฆฌํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค..

 

์—ด์„ฑ์  ์ดˆ๊ธฐํ™”(eager)

 

๋ชจ๋“  ๋ณ€์ˆ˜๊ฐ€ ์ดˆ๊ธฐํ™” ์ดํ›„์— ์‚ฌ์šฉ๋˜๋Š” ๊ฒƒ์„ ๋ณด์žฅํ•  ์ˆ˜ ์žˆ๋‹ค.

๋ณ€์ˆ˜๊ฐ€ ์„ ์–ธ๋˜๊ฑฐ๋‚˜ ์ƒ์„ฑ๋˜์ž๋งˆ์ž ์ดˆ๊ธฐํ™”ํ•œ๋‹ค.

 

์„ ์–ธ๋ฌธ์—์„œ ๋ณ€์ˆ˜๋ฅผ ์ดˆ๊ธฐํ™”ํ•˜๋ฉด ์„ ์–ธ ํƒ€์ž…๊ณผ ์‹ค์ œ ํƒ€์ž…์„ ์‰ฝ๊ฒŒ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

List<Integer> number = new ArrayList<>();

 

์„ ์–ธ๋ฌธ์—์„œ ํ•„๋“œ๋ฅผ ์ดˆ๊ธฐํ™”ํ•  ์ˆ˜ ์—†๋‹ค๋ฉด ์ƒ์„ฑ์ž์—์„œ ์ดˆ๊ธฐํ™”ํ•˜๋ผ

 

class Point {
	int x,y;
    Point(int x,int y){
    	this.x = x;
        this.y = y;
    }
}

 

๊ฒŒ์œผ๋ฅธ ์ดˆ๊ธฐํ™”(lazy)

 

์ดˆ๊ธฐํ™” ๋น„์šฉ์ด ํฌ๊ฑฐ๋‚˜ ๋น„์šฉ ๋ถ€๋‹ด์„ ๋Šฆ์ถ”๊ณ  ์‹ถ๋‹ค๋ฉด ๋ฉ”์†Œ๋“œ๊ฐ€ ํ˜ธ์ถœ๋  ๋•Œ ๊ฐ์ฒด๋ฅผ ์ดˆ๊ธฐํ™”ํ•˜๋ฉด ๋œ๋‹ค.