์กฐํ•ฉ ๋ฉ”์†Œ๋“œ 

์ถ”์ƒํ™” ์ˆ˜์ค€์ด ๋น„์Šทํ•œ ๋ฉ”์†Œ๋“œ ํ˜ธ์ถœ๋กœ ํ•˜๋‚˜์˜ ๋ฉ”์†Œ๋“œ๋ฅผ ๊ตฌ์„ฑํ•˜๋ผ

 

๊ด€๋ จ๋œ ์ฝ”๋“œ๋งŒ ๋ชจ์•„๋†“๊ณ  ๊ด€๋ จ์„ฑ์ด ๋–จ์–ด์ง€๋Š” ์ฝ”๋“œ๋Š” ๋ถ„๋ฆฌ!

 

๋ฉ”์†Œ๋“œ๋ฅผ ๊ตฌ์„ฑํ•  ๋•Œ๋Š” ์ถ”์ธก์ด ์•„๋‹Œ ์‚ฌ์‹ค์— ๊ทผ๊ฑฐํ•˜๋ผ

-> ์ผ๋‹จ ๋™์ž‘ํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ๋งŒ๋“ค๊ณ  ๊ตฌ์„ฑ ๋ฐฉ์‹ ๊ฒฐ์ •

 

์˜๋„ ์ œ์‹œํ˜• ์ด๋ฆ„

๋ฉ”์†Œ๋“œ์˜ ์ด๋ฆ„์„ ํ†ตํ•ด์„œ ์˜๋„๋ฅผ ์ „๋‹ฌํ•˜๊ณ  ๊ทธ ์™ธ ์ •๋ณด๋Š” ๋‹ค๋ฅธ ๋ฐฉ์‹์œผ๋กœ ์ „๋‹ฌํ•˜๋ผ

 

Customer.linearSearch(String id) // x
Customer.find(String id) // o

 

๋ฉ”์†Œ๋“œ ๊ฐ€์‹œ์„ฑ

๋ฉ”์†Œ๋“œ๋ฅผ ์ ๊ฒŒ ๋…ธ์ถœ์‹œํ‚ค๋ฉด ์œ ์—ฐ์„ฑ์—์„œ ์ด๋“์„ ์–ป์„ ์ˆ˜ ์žˆ์Œ

๊ฐ€์‹œ์„ฑ์„ ์„ ํƒํ•  ๋•Œ ๊ณ ๋ คํ•ด์•ผํ•  ์‚ฌํ•ญ ๋‘๊ฐ€์ง€

1. ๋ฏธ๋ž˜์˜ ์œ ์—ฐ์„ฑ

2. ๊ฐ์ฒด ์‚ฌ์šฉ ๋น„์šฉ

 

๋จผ์ € ์ œํ•œ์ ์ธ ๊ฐ€์‹œ์„ฑ์„ ์„ ํƒํ•˜๊ณ  ํ•„์š”์— ๋”ฐ๋ผ ์ฐจ์ธฐ ํ™•์žฅ์‹œํ‚ค์ž !

 

์˜ค๋ฒ„๋กœ๋“œ

๋ฉ”์†Œ๋“œ ์˜ค๋ฒ„๋กœ๋“œ๋Š” ํŒŒ๋ผ๋ฏธํ„ฐ ํƒ€์ž…๋งŒ ๋‹ค๋ฅผ ๋ฟ, ๊ฐ™์€ ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•ด์•ผํ•œ๋‹ค.

์˜๋„๊ฐ€ ๋‹ค๋ฅด๋‹ค๋ฉด ์ƒˆ๋กœ์šด ์ด๋ฆ„์„ ๊ฐ–๋Š” ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์ž !!

 

๋ฉ”์†Œ๋“œ ๋ฐ˜ํ™˜ ํƒ€์ž…

๊ตฌ์ƒ ํด๋ž˜์Šค๊ฐ€ ๊ฐ™์€ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ณต์œ ํ•œ๋‹ค๋ฉด ์œ ์‚ฌ์ ๊ณผ ์ฐจ์ด์ ์„ ๋ช…ํ™•ํ•˜๊ฒŒ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ๋‹ค.

 

๋ฉ”์†Œ๋“œ ์ฃผ์„

์ฃผ์„์€ ์ •๋ณด๋ฅผ ์ค‘๋ณต์œผ๋กœ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ๋‹ค.

๋”ฐ๋ผ์„œ ์ฝ”๋“œ๋งŒ์œผ๋กœ ๋ถ„๋ช…ํ•˜์ง€ ์•Š์€ ์ •๋ณด๋Š” ์ฃผ์„์„ ์‚ฌ์šฉํ•˜๋ผ

 

ํ•˜์ง€๋งŒ ์ฃผ์„์€ ์ฝ”๋“œ์™€์˜ ์ผ๊ด€์„ฑ์„ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ๋…ธ๋ ฅ์ด ๋“ ๋‹ค. 

๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ์ด๋Ÿฐ ๋…ธ๋ ฅ์„ ๊ฐ์•ˆํ•  ๋งŒํผ ๊ฐ€์น˜๊ฐ€ ์žˆ์–ด์•ผํ•œ๋‹ค.

 

๋„์šฐ๋ฏธ ๋ฉ”์†Œ๋“œ

๋‹น์žฅ ๊ด€๋ จ๋„๊ฐ€ ๋–จ์–ด์ง€๋Š” ์„ธ๋ถ€ ๊ตฌํ˜„์„ ์ˆจ๊ธฐ๊ณ  ๋ฉ”์†Œ๋“œ ์ด๋ฆ„์„ ํ†ตํ•ด ํ”„๋กœ๊ทธ๋ž˜๋จธ์˜ ์˜๋„๋ฅผ ๋‚˜ํƒ€๋ƒ„์œผ๋กœ์จ,

๋ณต์žกํ•˜๊ณ  ๊ฑฐ๋Œ€ํ•œ ์—ฐ์‚ฐ ์ฝ”๋“œ๋ฅผ ์ฝ๊ธฐ ์ข‹๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.

 

๋””๋ฒ„๊ทธ ์ถœ๋ ฅ ๋ฉ”์†Œ๋“œ

toString() ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๊ฐ์ฒด๋ฅผ ๋ฌธ์ž์—ด๋กœ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ๋‹ค.

ํ”„๋กœ๊ทธ๋ž˜๋จธ์—๊ฒŒ ์œ ์šฉํ•œ ๊ฐ์ฒด์˜ ์ •๋ณด๋ฅผ ์•Œ๋ ค์ฃผ๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜์ž !

 

๋ณ€ํ™˜

๋ณ€ํ™˜ ๋ฉ”์†Œ๋“œ

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

 

class Polar {
	Cartesian asCartesian() {
    	...
    }
}

 

๋ณ€ํ™˜ ์ƒ์„ฑ์ž

์›๋ณธ ๊ฐ์ฒด๋ฅผ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ์ทจํ•ด์„œ ๋Œ€์ƒ ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

๊ตฌ์ƒ ํด๋ž˜์Šค๊ฐ€ ์•„๋‹Œ ํด๋ž˜์Šค๋ฅผ ๋ฐ˜ํ™˜ํ•ด์„œ ๋ณ€ํ™˜์„ ๊ตฌํ˜„ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด , ๋ณ€ํ™˜ ์ƒ์„ฑ์ž๋ฅผ ์ข€๋” ์ผ๋ฐ˜์ ์ธ ํƒ€์ž…์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ณต์žฅ ๋ฉ”์†Œ๋“œ๋กœ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

์ƒ์„ฑ

์˜๋ฏธ์žˆ๋Š” ๊ฐ์ฒด ์ƒ์„ฑ์„ ์œ„ํ•ด์„œ๋Š” ๋ช…ํ™•ํ•˜๊ณ  ์ง์ ‘์ ์ธ ํ‘œํ˜„๊ณผ ์œ ์—ฐ์„ฑ ์‚ฌ์ด์—์„œ ๊ท ํ˜•์„ ์žก์•„์•ผํ•œ๋‹ค.

 

์™„๊ฒฐ ์ƒ์„ฑ์ž

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

 

niew Rectangle(0,0,50,200)

 

์ด์™€๊ฐ™์ด 4๊ฐœ์˜ ์ธ์ž๋ฅผ ์ทจํ•˜๋Š” ์ƒ์„ฑ์ž๊ฐ€ ์žˆ๋‹ค๋ฉด, 4๊ฐœ์˜ ์ธ์ž๊ฐ€ ํ•„์š”ํ•œ ๊ฒƒ์ด๋ผ๋Š” ์‚ฌ์‹ค์„ ๋ฐ”๋กœ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

 

๊ณต์žฅ ๋ฉ”์†Œ๋“œ

๊ณต์žฅ๋ฉ”์†Œ๋“œ๋Š” ์ถ”์ƒ ํƒ€์ž…์„ ๋ฐ˜ํ™˜ํ•  ์ˆ˜ ์žˆ๊ณ  ๋ฉ”์„œ๋“œ ๋„ค์ด๋ฐ์„ ํ†ตํ•ด ์˜๋„๋ฅผ ๋ช…ํ™•ํ•˜๊ฒŒ ํ•  ์ˆ˜ ์žˆ๋‹ค.

ํ•˜์ง€๋งŒ ๋ณต์žก์„ฑ์ด ์ฆ๊ฐ€ํ•˜๋ฏ€๋กœ ์ด๋“์ด ์žˆ์„ ๊ฒฝ์šฐ์—๋งŒ ์‚ฌ์šฉํ•ด์•ผํ•œ๋‹ค !

Rectangle.create(0,0,50,200);

 

๋‚ด๋ถ€ ๊ณต์žฅ

getX() {
	if (x== null){
    	x = computeX();
    return x;
    }
}

 

์ปฌ๋ ‰์…˜ ์ ‘๊ทผ์ž ๋ฉ”์†Œ๋“œ

 

์‚ฌ์šฉ์ž๊ฐ€ ์ปฌ๋ ‰์…˜์„ ์ง์ ‘ ์กฐ์ž‘ํ•˜๊ฒŒ ๋˜๋ฉด ์œ„ํ—˜ํ•˜๋‹ค !

์ˆ˜์ •ํ•  ์ˆ˜ ์—†๋Š” ์ปฌ๋ ‰์…˜ ํ˜•ํƒœ๋กœ ๋ฐ”๊ฟ”์„œ ๋ฐ˜ํ™˜ํ•˜์ž !

 

Iterator getBooks() {
	return books.iterator();
}

 

๋ถˆ๋ฆฐ ์„ค์ • ๋ฉ”์†Œ๋“œ

๋ถˆ๋ฆฐ ์ƒํƒœ๋ฅผ ์„ค์ •ํ•˜๋Š” ๊ฐ€์žฅ ์ข‹์€ ๋ฐฉ๋ฒ•์€ ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

void setValid(boolean newState) {
	...
}

 

์งˆ์˜ ๋ฉ”์†Œ๋“œ

๊ฐ์ฒด๊ฐ€ ๋‹ค๋ฅธ ๊ฐ์ฒด์˜ ๊ฒฐ์ •์„ ๋„์™€์•ผ ํ•  ๊ฒฝ์šฐ์—๋Š” be๋™์‚ฌ๋‚˜ have๋™์‚ฌ๋ฅผ ์ด์šฉํ•œ ์งˆ์˜ ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ผ

 

๋™๋“ฑ์„ฑ ๋ฉ”์†Œ๋“œ

๊ฐ์ฒด์˜ ๋™์ผ์„ฑ์ด ์•„๋‹Œ ๋™๋“ฑ์„ฑ์„ ๋น„๊ตํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ equals์™€ hashcode๋ฅผ ๊ตฌํ˜„ํ•˜๋ผ

https://cb036133.tistory.com/127

 

equals & hash code ์™€ ์ด๋ฅผ ๊ฐ™์ด ์žฌ์ •์˜ ํ•˜๋Š” ์ด์œ 

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ๋ฐฑ์—”๋“œ ๋ฐ๋ธŒ์ฝ”์Šค์—์„œ ์ง„ํ–‰ํ•œ Tech Log ํ™œ๋™ ๋ชฉ์ ์œผ๋กœ ์ œ์ž‘๋˜์—ˆ์Šต๋‹ˆ๋‹ค. 1. String ํด๋ž˜์Šค์˜ equals & hashcode ์†Œํ”„ํŠธ์›จ์–ด ์„ธ๊ณ„์—์„œ๋Š” ๋ฌธ์ž์—ด๋„ ์ด์ƒํ•œ ๋ฐฉ์‹์œผ๋กœ ๊ด€๋ฆฌํ•œ๋‹ค. ๋ฐ”๋กœ ๋™๋“ฑ์„ฑ์„ ๋ณด

cb036133.tistory.com

์—ฌ๊ธฐ ์•„์ฃผ ์ •๋ฆฌ๊ฐ€ ์ž˜ ๋ผ์žˆ๋‹ค !

 

์ทจ๋“ ๋ฉ”์†Œ๋“œ

๊ฐ์ฒด ์ƒํƒœ์— ๋Œ€ํ•œ ์ ‘๊ทผ์„ ํ—ˆ์šฉํ•˜๊ธฐ ์œ„ํ•œ ํ•œ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์€ ์ƒํƒœ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฉ”์†Œ๋“œ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

 

int getX() {
	return x;
}

 

์„ค์ • ๋ฉ”์†Œ๋“œ

ํ•„๋“œ ๊ฐ’์„ ์„ค์ •ํ•˜๋Š” ๋ฉ”์†Œ๋“œ๊ฐ€ ํ•„์š”ํ•˜๋‹ค๋ฉด, ๋‹ค์Œ๊ณผ ๊ฐ™์ด set ์ ‘๋‘์–ด๋ฅผ ๋ถ™์ธ ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

 

int setX(int newX) {
	x = newX;
}

 

์•ˆ์ „ํ•œ ๋ณต์‚ฌ

๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ฑฐ๋‚˜ ์ €์žฅํ•˜๊ธฐ ์ „์— ๋ณต์‚ฌ๋ณธ์„ ๋งŒ๋“œ๋Š” ๋ฐฉ์‹์œผ๋กœ ์ด๋Ÿฐ ๋ฌธ์ œ๋ฅผ ํ”ผํ•  ์ˆ˜ ์žˆ๋‹ค.

 

List<Books> getBooks() {
	List<Books> results =.new ArrayList<Book>();
    result.addAll(books);
    return result;
}
List<Books> setBooks(List<Book> newBooks) {
	books = new ArrayList<Books>();
    books.addAll(newBooks);
}

 

 

MQTT ๋ž€?

MQTT ํ”„๋กœํ† ์ฝœ์€ ๊ธฐ๊ณ„ ๊ฐ„ ํ†ต์‹ ์„ ์œ„ํ•ด ์„ค๊ณ„๋œ ํ†ต์‹  ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค.

REST ํ†ต์‹  ๋ฐฉ์‹๊ณผ๋Š” ๋‹ค๋ฅด๊ฒŒ ์„œ๋ฒ„ ๊ฐ„ ์ง์ ‘ ํ†ต์‹ ์ด ์•„๋‹Œ ์ค‘๊ฐ„์— ์ค‘๊ณ„ ์„œ๋ฒ„๋ฅผ ๋‘๊ณ  ๊ฒŒ์‹œ-๊ตฌ๋… ํ˜•ํƒœ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•ฉ๋‹ˆ๋‹ค.

 

์ œํ•œ๋œ ๋ฆฌ์†Œ์Šค๋กœ ํ†ต์‹ ์„ ํ•ด์•ผํ•˜๋Š” IOT์˜ ํŠน์„ฑ์œผ๋กœ ์ธํ•ด, ๊ตฌํ˜„์ด ์‰ฝ๊ณ  ํšจ์œจ์ ์ธ ํ†ต์‹ ์ด ๊ฐ€๋Šฅํ•œ MQTT ํ”„๋กœํ† ์ฝœ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

 

MQTT์˜ ํŠน์ง•

 

ํ™•์žฅ์„ฑ

MQTT๋Š” ์ ์€ ์ „๋ ฅ๊ณผ ์ตœ์†Œํ•œ์˜ ์ฝ”๋“œ๋กœ ์—ฌ๋Ÿฌ ๋””๋ฐ”์ด์Šค์™€ ํ†ต์‹ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 

๋˜ํ•œ ๋ชจ๋“  ๋””๋ฐ”์ด์Šค๋Š” ์ œํ•œ์—†์ด ์ •๋ณด(ํ† ํ”ฝ)๋ฅผ ๊ตฌ๋…ํ•˜๊ฑฐ๋‚˜ ๊ฒŒ์‹œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋งŒ์•ฝ ํ†ต์‹  ๊ฐ€๋Šฅํ•œ ๋””๋ฐ”์ด์Šค๋ฅผ ๋Š˜๋ฆฌ๊ณ  ์‹ถ๋‹ค๋ฉด ๋‹จ์ˆœํžˆ ๋””๋ฐ”์ด์Šค๊ฐ€ ํ•ด๋‹น ํ† ํ”ฝ์„ ๊ตฌ๋…ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

 

์‹ ๋ขฐ์„ฑ

๊ธฐ์กด ๋ฌด์„  ํ†ต์‹ ์€ ์ •๋ณด์˜ ์†์‹ค์ด ์žˆ์—ˆ์ง€๋งŒ MQTT๋Š” ๋ธŒ๋กœ์ปค๊ฐ€ ๋ฉ”์„ธ์ง€๋ฅผ ๋ณด๊ด€ , ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ ๋ฉ”์‹œ์ง€๋ฅผ ๋ฐ›๋Š” ๋””๋ฐ”์ด์Šค๊ฐ€ ์ค€๋น„๊ฐ€ ๋  ๋•Œ๊นŒ์ง€ ๋ฉ”์‹œ์ง€ ์ „์†ก์„ ๋Œ€๊ธฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

MQTT์˜ ๊ตฌ์„ฑ ์š”์†Œ

 

ํด๋ผ์ด์–ธํŠธ

MQTT๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ†ต์‹ ํ•˜๋Š” ๋””๋ฐ”์ด์Šค๋ฅผ ํด๋ผ์ด์–ธํŠธ๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

ํด๋ผ์ด์–ธํŠธ๋Š” ๊ตฌ๋…์„ ํ•˜์—ฌ์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์„ ์ˆ˜ ์žˆ๊ณ  ๊ฒŒ์‹œ๋ฅผ ํ•˜์—ฌ์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

๋ธŒ๋กœ์ปค

๋ธŒ๋กœ์ปค๋Š” ํด๋ผ์ด์–ธํŠธ ๊ฐ„ ๋ฉ”์‹œ์ง€๋ฅผ ์ค‘๊ฐœํ•˜๋Š” ๋ผ์šฐํŒ…์„œ๋ฒ„์ž…๋‹ˆ๋‹ค.

ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋ณด๋‚ธ ๋ฉ”์„ธ์ง€๋Š” ๋ธŒ๋กœ์ปค๋ฅผ ๊ฑฐ์ณ๊ฐ€๋ฉฐ ๋ธŒ๋กœ์ปค๋Š” ์ด ๋ฉ”์„ธ์ง€๋ฅผ ๊ด€๋ฆฌํ•˜๊ณ , ํ•ด๋‹น ํ† ํ”ฝ์„ ๊ตฌ๋…ํ•˜๋Š” ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ๋ฉ”์„ธ์ง€๋ฅผ ์ „์†กํ•ฉ๋‹ˆ๋‹ค.

 

 

MQTT์˜ ๋™์ž‘ ๋ฐฉ์‹

 

์ฃผ์ œ(Topic)

์ฃผ์ œ๋ฅผ ์ด์šฉํ•˜์—ฌ ๋ธŒ๋กœ์ปค๊ฐ€ ๋ฉ”์‹œ์ง€๋ฅผ ์ˆ˜์‹ ๋ฐ›์„ ํด๋ผ์ด์–ธํŠธ๋ฅผ ํ•„ํ„ฐ๋ง ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ•ด๋‹น ์ฃผ์ œ๋ฅผ ๊ตฌ๋…ํ•œ ํด๋ผ์ด์–ธํŠธ๋งŒ ๋ฉ”์‹œ์ง€๋ฅผ ๋ฐ›๊ณ  , ์ฃผ์ œ๋Š” ๊ณ„์ธต ๊ตฌ์กฐ๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ฒŒ์‹œ

ํด๋ผ์ด์–ธํŠธ๋Š” ์ฃผ์ œ ๋ฐ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค์–‘ํ•œ ํ˜•์‹์œผ๋กœ ๋ธŒ๋กœ์ปค์— ์ „์†กํ•ฉ๋‹ˆ๋‹ค.(XML,JSON etc...)

 

๊ตฌ๋…

ํด๋ผ์ด์–ธํŠธ๋Š” ๊ตฌ๋…ํ•œ ์ฃผ์ œ์˜ ๋ฉ”์‹œ์ง€๋งŒ ๋ธŒ๋กœ์ปค๋กœ๋ถ€ํ„ฐ ์ˆ˜์‹  ๋ฐ›์Šต๋‹ˆ๋‹ค.

 

QOS

๋ธŒ๋กœ์ปค๋Š” ๋ฉ”์‹œ์ง€๋ฅผ ๋ฐ›๊ณ  ์ง€์ •๋œ QOS ๋ ˆ๋ฒจ์— ๋”ฐ๋ผ์„œ ๋ฉ”์‹œ์ง€๋ฅผ ์ „์†กํ•ฉ๋‹ˆ๋‹ค.

 

MQTT QOS 0

๋ฉ”์„ธ์ง€๋ฅผ ํ•œ๋ฒˆ๋งŒ ๋ณด๋‚ด๊ณ  ํ™•์ธ ๋ฉ”์„ธ์ง€(PUBACK) ์„ ๋ฐ›์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋ฐ์ดํ„ฐ์˜ ์œ ์‹ค์ด ํฌ๊ฒŒ ๋ฌธ์ œ ๋˜์ง€ ์•Š์„ ๋•Œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

 

์œ ์‹ค ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ์ง€๋งŒ ์ ์€ ๋น„์šฉ์œผ๋กœ ๋ฉ”์„ธ์ง€๋ฅผ ๋ณด๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

MQTT QOS 1

๋ฉ”์„ธ์ง€๋ฅผ ์ ์–ด๋„ ํ•œ๋ฒˆ ์ด์ƒ ๋ณด๋ƒ…๋‹ˆ๋‹ค.

PUBACK์„ ๋ฐ›์œผ๋ฉฐ ๋งŒ์•ฝ ํ™•์ธ ๋ฉ”์„ธ์ง€๊ฐ€ ์˜ค์ง€ ์•Š๋Š” ๋‹ค๋ฉด ๋ฉ”์„ธ์ง€๋ฅผ ์—ฌ๋Ÿฌ๋ฒˆ ๋‹ค์‹œ ๋ณด๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

๋ชจ๋“  ๋ฉ”์„ธ์ง€๋ฅผ ๋ฐ›์„ ์ˆ˜ ์žˆ์œผ๋ฉฐ , ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์˜คํ”„๋ผ์ธ์ผ ๋•Œ ๋ฉ”์„ธ์ง€๋ฅผ ์ €์žฅ(ํ)ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

MQTT QOS 2

๋”ฑ ํ•œ๋ฒˆ์˜ ์ „์†ก์œผ๋กœ ๋ฉ”์„ธ์ง€ ์ „์†ก์„ ์™„๋ฃŒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ•ธ๋“œ ์‰์ดํฌ ๊ณผ์ •์„ ํ†ตํ•ด์„œ ๋ฉ”์„ธ์ง€ ์ „์†ก์„ ํ™•์ธํ•˜๋ฉฐ ๊ฐ€์žฅ ๋Š๋ฆฌ์ง€๋งŒ ๊ฐ€์žฅ ํ™•์‹คํ•ฉ๋‹ˆ๋‹ค.

 

*QOS ๋ ˆ๋ฒจ์€ ๊ฒŒ์‹œ์ž์™€ ๊ตฌ๋…์ž๊ฐ€ ์ •ํ•œ ๋ ˆ๋ฒจ ์ค‘์—์„œ ๊ฐ€์žฅ ๋‚ฎ์€ ๊ฐ’์ด ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

๋ฉ”์‹œ์ง€

๋ฉ”์‹œ์ง€ ์ˆ˜์‹ ์ž๊ฐ€ ๋ฉ”์‹œ์ง€๋ฅผ ๋ฐ›์œผ๋ฉด, ๋ฐœ์‹ ์ž์˜ ์ƒํƒœ๋Š” ๋ฐ”๋€Œ์ง€ ์•Š์ง€๋งŒ ์ˆ˜์‹ ์ž์˜ ์ƒํƒœ๋Š” ๋ฐ”๋€” ์ˆ˜ ์žˆ๋‹ค.

๋ฉ”์‹œ์ง€๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ํ”„๋กœ์‹œ์ €๋Š” ๋‹น์žฅ ์ค‘์š”ํ•˜์ง€ ์•Š์€ ์„ธ๋ถ€ ๊ตฌํ˜„์ด ์กด์žฌํ•œ๋‹ค ๋ผ๋Š” ์˜๋ฏธ๋ฅผ ๋‚ดํฌํ•  ์ˆ˜ ์žˆ๋‹ค. (์บก์Šํ™”)

 

function() {
	input();
    process();
    output();
}

 

์„ ํƒ ๋ฉ”์‹œ์ง€

์„ ํƒ ๋ฉ”์‹œ์ง€๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ช…์‹œ์  ์กฐ๊ฑด๋ฌธ์˜ ์‚ฌ์šฉ์„ ํฌ๊ฒŒ ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค.

ํ•˜์ง€๋งŒ ๊ณผ๋„ํ•œ ์„ ํƒ๋ฉ”์‹œ์ง€์˜ ์‚ฌ์šฉ์€ ๊ฐ€๋…์„ฑ์„ ์ €ํ•ดํ•  ์ˆ˜ ์žˆ๋‹ค.

 

public void display(Subject subject, Brush brush) {
	brush.display(subject);
}

 

๋”๋ธ” ๋””์ŠคํŒจ์น˜

2๊ฐœ์˜ ์„ ํƒ ๋ฉ”์‹œ์ง€๋ฅผ ์ง๋ ฌ๋กœ ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค.

https://www.youtube.com/watch?v=s-tXAHub6vg&loop=0 

 

๋ถ„๋ฆฌ ๋ฉ”์‹œ์ง€

์—ฌ๋Ÿฌ ๋‹จ๊ณ„๋กœ ๊ตฌ์„ฑ๋˜๋Š” ๋ณต์žกํ•œ ์•Œ๊ณ ์ฆ˜์„ ๋‹จ๊ณ„๋ณ„๋กœ ๋ชจ์œผ๋กœ ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด๋‚ผ ์ˆ˜ ์žˆ๋‹ค.

 

๋˜๋Œ๋ฆผ ๋ฉ”์‹œ์ง€

๋„์šฐ๋ฏธ ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ฉ”์†Œ๋“œ์˜ ๊ฐ€๋…์„ฑ์„ ๋†’์ผ ์ˆ˜ ์žˆ๋‹ค.

void process() {
	helper.process(this);
}

void compute() {
	input();
    process(helper);
    output();
}

 

์ดˆ์ฒญ ๋ฉ”์‹œ์ง€

๋กœ์ง์— ๋Œ€ํ•œ ๊ธฐ๋ณธ ๊ตฌํ˜„๋˜์–ด์žˆ์ง€ ์•Š๋‹ค๋ฉด ์ถ”์ƒ ๋ฉ”์†Œ๋“œ๋กœ ์„ ์–ธํ•ด์„œ ์ถ”์ƒ ๋ฉ”์‹œ์ง€์ž„์„ ๋ถ„๋ช…ํžˆํ•˜๋ผ

 

์„ค๋ช… ๋ฉ”์‹œ์ง€

 

highlight ๋ฉ”์†Œ๋“œ์™€ ๊ฐ™์ด ํ”„๋กœ๊ทธ๋ž˜๋จธ์˜ ์˜๋„๋ฅผ ์ „๋‹ฌํ•˜๊ธฐ ์œ„ํ•œ ๋ฉ”์†Œ๋“œ๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ๋‹ค.

highlight() {
	reverse();
}

 

๋˜ ์ฃผ์„์„ ๋ถ™์ด๊ณ  ์‹ถ์€ ์ฝ”๋“œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ณ€๊ฒฝ ๊ฐ€๋Šฅํ•˜๋‹ค,.

flags |= LOADED_BIT; // ๋กœ๋“œ ๋น„ํŠธ๋ฅผ ์„ค์ •

setLoadedFlag() {
	flags |= LOADED_BIT;
};

์ด๋Ÿฌํ•œ ํ•œ์ค„์งœ๋ฆฌ ๋ฉ”์†Œ๋“œ๋Š” ์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜์„ ๋•๋Š”๋‹ค.

 

์˜ˆ์™ธ ํ๋ฆ„

์˜ˆ์™ธ ํ๋ฆ„์€ ์ˆ˜ํ–‰ ๋นˆ๋„๊ฐ€ ๋‚ฎ๊ณ  ์ˆ˜์ • ๋นˆ๋„๊ฐ€ ๋‚ฎ์œผ๋ฉฐ, ์ฃผ์š” ํ๋ฆ„์— ๋น„ํ•ด ์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜์˜ ์ค‘์š”์„ฑ์ด ๋–จ์–ด์ง„๋‹ค.

์ฃผ๋ฃŒ ํ๋ฆ„์€ ๋ช…๋ฃŒํ•˜๊ฒŒ ๋‚˜ํƒ€๋‚ด๊ณ  ์˜ˆ์™ธ ํ๋ฆ„์€ ์ฃผ์š” ํ๋ฆ„์˜ ๋ช…๋ฃŒ์„ฑ์„ ํ›ผ์†ํ•˜์ง€ ์•Š๋Š” ๋ฒ”์œ„ ๋‚ด์—์„œ ๋ช…๋ฃŒํ•˜๊ฒŒ ๋‚˜ํƒ€๋‚ด๋ผ !

 

๋ณดํ˜ธ์ ˆ

๋ณดํ˜ธ์ ˆ์„ ์‚ฌ์šฉํ•ด์„œ ๋ณต์žกํ•œ ์ œ์–ด ๊ตฌ์กฐ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ๊ฐ™์€ ์ฝ”๋“œ๋ฅผ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

void conpute() {
	Server server = getServer();
    if (server != null) {
    	Client client = server.getClient();
        if(client != null) {
        	....
        }
    }
}

 

void conpute() {
	Server server = getServer();
    if (server != null)
    	return;
    Client client = server.getClient();
    if(client != null)
    	return;
    ...
}

 

์˜ˆ์™ธ

๋ฉ”์†Œ๋“œ๊ฐ€ ์˜ˆ์™ธ๋ฅผ ๋˜์ง€๋ฉด ๋ฉ”์†Œ๋“œ์˜ ์„ค๊ณ„์™€ ๊ตฌํ˜„์˜ ์˜ํ–ฅ์„ ๋ฏธ์นœ๋‹ค.

๋”ฐ๋ผ์„œ ๊ฐ€๋Šฅํ•˜๋ฉด ์ˆœ์ฐจ์  ๊ตฌ๋ฌธ , ๋ฉ”์‹œ์ง€ , ๋ฃจํ”„ ์ œ์–ด๋ฌธ์„ ์‚ฌ์šฉํ•ด์„œ ์ œ์–ด ํ๋ฆ„์ด ์•ˆ๋  ๊ฒฝ์šฐ ์˜ˆ์™ธ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค

 

์˜ˆ์™ธ ์ „๋‹ฌ

ํ•˜์œ„ ์ˆ˜์ค€์˜ ์˜ˆ์™ธ๋Š” ๋ฌธ์ œ๋ฅผ ์ง„๋‹จํ•˜๋Š” ๋ฐ ์œ ์šฉํ•œ ์ •๋ณด๋ฅผ ์ œ๊ณตํ•ด์ฃผ๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๋‹ค.

ํ•˜์œ„ ์ˆ˜์ค€์˜ ์˜ˆ์™ธ๋ฅผ ์ƒ์œ„ ์ˆ˜์ค€ ์˜ˆ์™ธ๋กœ ํฌ์žฅํ•˜๋ผ 

 

 

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

์ƒํƒœ

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

 

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

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)

 

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

๋ฆฌํ”Œ๋ ‰์…˜์ด๋ž€?

์ž๋ฐ” ๊ณต์‹ ๋ฌธ์„œ์—์„œ๋Š” ๋ฆฌํ”Œ๋ ‰์…˜์„ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ •์˜ํ•˜๊ณ  ์žˆ๋‹ค.

 

 Reflection enables Java code to discover information about the fields, methods and constructors of loaded classes, and to use reflected fields, methods, and constructors to operate on their underlying counterparts, within security restrictions. The API accommodates applications that need access to either the public members of a target object (based on its runtime class) or the members declared by a given class. It also allows programs to suppress default reflective access control.

 

๊ฐ„๋‹จํ•˜๊ฒŒ ํ•ด์„ํ•ด๋ณด๋ฉด, ์ž๋ฐ” ์ฝ”๋“œ๋ฅผ ํ†ตํ•ด ๋กœ๋“œ๋œ ํด๋ž˜์Šค์— ๋Œ€ํ•ด ์ ‘๊ทผ ์ œํ•œ์ž์™€ ๊ด€๊ณ„ ์—†์ด ํ•„๋“œ , ์ƒ์„ฑ์ž , ๋ฉ”์†Œ๋“œ๋ฅผ ์ด์šฉํ•  ์ˆ˜ ์žˆ๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ํ•œ๋‹ค.

 

๋กœ๋“œ๋œ ํด๋ž˜์Šค๋ž€ , ํด๋ž˜์Šค ๋กœ๋” ๋‚ด์—์„œ ํด๋ž˜์Šค๋ฅผ ๋กœ๋“œํ•œ ํ›„์— ํ•ด๋‹น ํด๋ž˜์Šค์˜ ์ •๋ณด๋ฅผ ๋‹ด์€ ๊ฐ์ฒด๋ฅผ ํž™์— ์ €์žฅํ•ด ๋‘” ๊ฒƒ์ด๋‹ค.

 

https://cb036133.tistory.com/132

 

JVM ๋‚ด๋ถ€๋กœ

JVM์ด๋ž€? ์ž๋ฐ”๋ฅผ ๊ฐ€์ง€๊ณ  ์ฝ”๋”ฉ์„ ํ•˜๋Š” ์‚ฌ๋žŒ์€ ํ•œ๋ฒˆ ์ฏค JVM ์ด๋ž€ ๋‹จ์–ด๋ฅผ ๋“ค์–ด์™”์„ ๊ฒƒ์ด๋‹ค. ์ด JVM์€ ์ปดํ“จํ„ฐ์™€์˜ ์†Œํ†ต์„ ๋„์™€์ฃผ๋Š”๋ฐ, ์–ด๋–ค ์‹์œผ๋กœ ์†Œํ†ต์„ ๋„์™€์ฃผ๋Š” ์ง€ ๋‹จ๊ณ„๋ณ„๋กœ ์‚ดํŽด๋ณด์ž ๋จผ์ € ์šฐ๋ฆฌ๊ฐ€

cb036133.tistory.com

 

์™œ ์‚ฌ์šฉํ• ๊นŒ?

๋ฆฌํ”Œ๋ ‰์…˜์„ ์‚ฌ์šฉํ•˜๋ฉด ์ ‘๊ทผ ์ œํ•œ์ž์™€ ์ƒ๊ด€์—†์ด ๋ชจ๋“  ํด๋ž˜์Šค๋ฅผ ์ด์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

์‚ฌ์‹ค ์ด๊ฒƒ์€ ์บก์Šํ™”, ์€๋‹‰ํ™”๋ฅผ ๋ฌด๋ ฅํ™” ์‹œํ‚ค๋Š” ๊ฑด๋ฐ ์˜คํžˆ๋ ค ์‚ฌ์šฉ์„ ์ง€์–‘ํ•ด์•ผ ํ•˜์ง€ ์•Š์„๊นŒ?

 

์†Œ๊ทœ๋ชจ์˜ ํ”„๋กœ๊ทธ๋žจ์—์„œ๋Š” ๋ฆฌํ”Œ๋ ‰์…˜์˜ ์‚ฌ์šฉ์ด ๋ถ€์ ํ•ฉํ•  ์ˆ˜ ์žˆ๋‹ค.

ํ•˜์ง€๋งŒ ํŒจํ‚ค์ง€ , ๋ชจ๋“ˆ ๊ตฌ์กฐ๊ฐ€ ๋ณต์žกํ•˜๊ณ  ์˜์กด ๊ด€๊ณ„ ํŒŒ์•…์ด ํž˜๋“  ํ”„๋กœ์ ํŠธ์—์„œ๋Š” ๋ฆฌํ”Œ๋ ‰์…˜์ด ์ฃผ๋Š” ์ด์ ์ด ๋งŽ๋‹ค.

 

๋Œ€ํ‘œ์ ์œผ๋กœ ์–ด๋…ธํ…Œ์ด์…˜์ด ์žˆ๋Š”๋ฐ ์–ด๋…ธํ…Œ์ด์…˜์„ ์‚ฌ์šฉํ•˜๋ฉด ํ”„๋ ˆ์ž„์›Œํฌ์—์„œ ํƒ์ƒ‰ ํ›„ ํ•ด๋‹น ํด๋ž˜์Šค๋ฅผ ๊ด€๋ฆฌํ•ด์ค€๋‹ค.

์—ฌ๊ธฐ์„œ ๋ฆฌํ”Œ๋ ‰์…˜์˜ ๊ธฐ์ˆ ์ด ์‚ฌ์šฉ๋˜์—ˆ๋Š”๋ฐ , ์ฆ‰ ๋Ÿฐํƒ€์ž„ ์‹œ์ ์— ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด๋‹ค

 

๋ฆฌํ”Œ๋ ‰์…˜์€ ์ฃผ๋กœ ํ”„๋ ˆ์ž„์›Œํฌ๋‚˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—์„œ๋Š” ์ปดํŒŒ์ผ ์‹œ์ ์— ์•Œ ์ˆ˜ ์—†๋Š” ์ •๋ณด๋ฅผ ๋Ÿฐํƒ€์ž„ ์‹œ์ ์— ๋ถˆ๋Ÿฌ์˜ค๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•œ๋‹ค.

 

์–ด๋–ป๊ฒŒ ์‚ฌ์šฉํ• ๊นŒ?

 

1. ํด๋ž˜์Šค ์ฐพ๊ธฐ

Class<Test> ReflectionTest = Test.class;

 

2.์ƒ์„ฑ์ž ์ฐพ๊ธฐ

Test test = new Test();
Class<? extends Test> getClassTest = test.getClass();

 

3.๋ฉ”์†Œ๋“œ ์ฐพ๊ธฐ

Class<?> ReflectionTest = Class.forName("Test");

 

์—ฌ๊ธฐ์„œ ์ค‘์š”ํ•œ ์ ์€ ์–ด๋–ค ๋ฐฉ๋ฒ•์œผ๋กœ ์ธ์Šคํ„ด์Šค๋ฅผ ๊ฐ€์ ธ์˜ค๋˜ ๋ชจ๋‘ ๊ฐ™์€ ์ธ์Šคํ„ด์Šค๋ผ๋Š” ๊ฒƒ์ด๋‹ค !

 

์ด์ œ ๊ฐ€์ ธ์˜จ ์ธ์Šคํ„ด์Šค๋“ค์„ ์–ด๋–ป๊ฒŒ ํ™œ์šฉํ•˜๋Š” ์ง€ ์•Œ์•„๋ณด์ž

 

์˜ˆ์‹œ ์ฝ”๋“œ

 

๋จผ์ € ์ƒ์„ฑ์ž๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ์ฝ”๋“œ !

// ๋ชจ๋“  ์ƒ์„ฑ์ž๋“ค์„ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๋‹ค.
Arrays.stream(testClass.getConstructors()).forEach(System.out::println);

//์ƒ์„ฑ์ž๋ฅผ ๋ฆฌํ”Œ๋ ‰์…˜์œผ๋กœ ๊ฐ€์ ธ์™€์„œ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.
Constructor<? extends Test> constructor = 
				getClassTest.getConstructor(null);
                
// ๋ฆฌํ”Œ๋ž™์…˜์œผ๋กœ ๊ฐ€์ ธ์˜จ ์ƒ์„ฑ์ž๋ฅผ ํ†ตํ•ด ๊ฐ์ฒด ์ƒ์„ฑ                
Test test1 = constructor.newInstance();

// ์ƒ์„ฑ์ž์— ํ•„์š”ํ•œ ํŒŒ๋ผ๋ฏธํ„ฐ ํƒ€์ž…๋“ค์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.
Constructor<? extends Test> stringConstructor = 
        		getClassTest.getConstructor(String.class, String.class, String.class);
                
// ๋ฆฌํ”Œ๋ž™์…˜์œผ๋กœ ๊ฐ€์ ธ์˜จ ์ƒ์„ฑ์ž๋ฅผ ํ†ตํ•ด ๊ฐ์ฒด ์ƒ์„ฑ                     
Test test2 = stringConstructor.newInstance("param1", "param2", "param3");
}

 

๋‹ค์Œ์€ ๋ฉ”์†Œ๋“œ๋ฅผ ๊ฐ€์ ธ์™€์„œ ์ด์šฉํ•ด๋ณด์ž

//์ธ์Šคํ„ด์Šค ํ•„๋“œ๋ฅผ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๋‹ค.
Field c = getClassTest.getDeclaredField("field1");

// ํ•„๋“œ ์ ‘๊ทผ์€ ํ—ˆ์šฉ์‹œ์ผœ์ค€๋‹ค.
field1.setAccessible(true);

// ํ•„๋“œ๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋‹ค.
c.set(test, "fieid1_modified"); 

// ๋ฉ”์†Œ๋“œ๋„ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๋‹ค.
Method func = getClassTest.getDeclaredMethod("func");

// ๋ฉ”์†Œ๋“œ ํ˜ธ์ถœ!
func.invoke(test);

 

 

๋ฆฌํ”Œ๋ ‰์…˜์˜ ์žฅ/๋‹จ์ 

 

์žฅ์ 

1. ๋Ÿฐํƒ€์ž„์— ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์ƒ์„ฑ์ž , ๋ฉ”์†Œ๋“œ , ํ•„๋“œ๋ฅผ ์ด์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

 

๋‹จ์ 

1. ์บก์Šํ™”๋ฅผ ์ €ํ•ดํ•  ์ˆ˜ ์žˆ๋‹ค.

2. ๊ฐ€๋…์„ฑ์„ ์ €ํ•ด์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค.

3. ์ผ๋ฐ˜์ ์œผ๋กœ ์‚ฌ์šฉํ–ˆ์„ ๋•Œ๋ณด๋‹ค ์ฒ˜๋ฆฌ ์„ฑ๋Šฅ์ด ๋–จ์–ด์ง„๋‹ค.

 

 

์ฐธ๊ณ ์ž๋ฃŒ

https://papimon.tistory.com/82

 

Reflection API

์•ˆ๋…•ํ•˜์„ธ์š”! ์กฐ์—˜์ž…๋‹ˆ๋‹ค! ๐ŸŽ‰ ์˜ค๋Š˜์€ ์ž๋ฐ”์˜ Reflection API์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๋Š” ์‹œ๊ฐ„์„ ๊ฐ€์ ธ๋ณผ๊ฒŒ์š”! ๐Ÿ’ช๐Ÿ’ช ํ”ผ๋“œ๋ฐฑ ํ™˜์˜์ž…๋‹ˆ๋‹ค! ๋Œ“๊ธ€ ๋‹ฌ์•„์ฃผ์„ธ์š” :) *** Reflection API๋ž€? *** Reflection API์˜ ์ •์˜๋ฅผ ๋จผ์ € ์•Œ์•„

papimon.tistory.com

https://medium.com/msolo021015/%EC%9E%90%EB%B0%94-reflection%EC%9D%B4%EB%9E%80-ee71caf7eec5

 

์ž๋ฐ” Reflection์ด๋ž€?

๋งŽ์€ ์ž…๋ฌธ์šฉ ์ž๋ฐ” ์„œ์ ์—์„œ ์ž˜ ๋‹ค๋ฃจ์ง€ ์•Š๋Š” Reflection์ด๋ผ๋Š” ๊ฐœ๋…์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

medium.com

https://brunch.co.kr/@oemilk/172

 

Effective Java - ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์ผ๋ฐ˜

#53 ๋ฆฌํ”Œ๋ ‰์…˜๋ณด๋‹ค๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜์ž | Effective Java - ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์ผ๋ฐ˜ #53 ๋ฆฌํ”Œ๋ ‰์…˜๋ณด๋‹ค๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜์ž ๋ฆฌํ”Œ๋ ‰์…˜(Reflection)์€ ๋ฉ”๋ชจ๋ฆฌ์— ๋กœ๋“œ๋œ ํด๋ž˜์Šค๋“ค์˜ ๊ด€ํ•œ ์ •๋ณด๋ฅผ ํ”„๋กœ๊ทธ๋žจ

brunch.co.kr

 

์ž๋ฐ”๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ Call By Value ๋ฐฉ์‹์œผ๋กœ ๋™์ž‘ํ•œ๋‹ค.

๋ณธ๋ฌธ์— ์•ž์„œ ๋‹ค์Œ ์ฝ”๋“œ๋ฅผ ๋ณด์ž

 

์ž๋ฐ”์—์„œ ์ „๋‹ฌ ๋ฐ›์€ ๊ฐ’์„ ์ˆ˜์ •ํ•  ๊ฒฝ์šฐ ์›๋ณธ ๊ฐ’์ด ๋ณ€ํ•˜๋Š” ์ง€ ์•Œ์•„๋ณด๊ธฐ ์œ„ํ•œ ์ฝ”๋“œ์ด๋‹ค.

 

public static void mian() {
        
        int x = 1;
        int y = 2;
       
        assertEquals(x, 1); // true
        assertEquals(y, 2); // true
        
        modify(x, y);
        
        assertEquals(x, 1); // true
        assertEquals(y, 2); // true
    }
    
    public static void modify(int x1, int y1) {
        x1 = 5;
        y1 = 10;
    }

 

๋„˜๊ฒจ๋ฐ›์€ ๊ฐ’์„ ์ˆ˜์ •ํ–ˆ๋Š”๋ฐ ์›๋ณธ ๊ฐ’์€ ๋ณ€ํ™”ํ•˜์ง€ ์•Š์•˜์Œ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

์ด ์ด์œ ๋Š” ์˜ค๋Š˜ ์•Œ์•„๋ณผ Call By Value ๋ผ๋Š” ๋ฐฉ์‹ ๋•Œ๋ฌธ์ด๋‹ค.

 

Call By Value ์™€ Call By Reference ์˜ ์ฐจ์ด๋Š” ?

- Call By Value ๋ฐฉ์‹์€ ๊ฐ’๋งŒ ๋„˜๊ฒจ์ค€๋‹ค. ๋”ฐ๋ผ์„œ ์ „๋‹ฌ ๋ฐ›์€ ๊ฐ’์„ ์ˆ˜์ •ํ•˜๋”๋ผ๋„ ์›๋ณธ๊ฐ’์— ์˜ํ–ฅ์ด ์—†๋‹ค. (์ฐธ์กฐ๊ฐ’์„ ์ˆ˜์ •ํ•˜๋Š” ๊ฒฝ์šฐ ์ œ์™ธ)

- Call By Reference ๋Š” ๋ฐฉ์‹์€ ์ฃผ์†Œ๊ฐ’ ์ž์ฒด๋ฅผ ๋„˜๊ฒจ์ค€๋‹ค. ๋„˜๊ฒจ์ค€ ๊ฐ’ , ์ „๋‹ฌ ๋ฐ›์€ ๊ฐ’ ๋ชจ๋‘ ๋™์ผํ•œ ๋ณ€์ˆ˜์ด๋‹ค.

   ๋”ฐ๋ผ์„œ ์ „๋‹ฌ ๋ฐ›์€ ๊ฐ’์„ ์ˆ˜์ •ํ•  ๊ฒฝ์šฐ ์›๋ณธ ๊ฐ’๋„ ๋ณ€๊ฒฝ๋œ๋‹ค.

 

Call By Value๋Š” ์–ด๋–ป๊ฒŒ ๋™์ž‘ํ• ๊นŒ ?

- ๋จผ์ € JVM์—์„œ ์–ด๋–ป๊ฒŒ ๋ณ€์ˆ˜๋ฅผ ์ €์žฅํ•˜๋Š” ์ง€ ์•Œ์•„๋ณด์ž

 

์›์‹œ ํƒ€์ž…

 

์Šคํƒ ์˜์—ญ์— ๋ณ€์ˆ˜์™€ ํ•จ๊ป˜ ๊ฐ’์ด ์ €์žฅ๋œ๋‹ค.

 

์ฐธ์กฐ ํƒ€์ž…

์ฐธ์กฐ ํƒ€์ž…์˜ ๊ฒฝ์šฐ, ๋ณ€์ˆ˜๋ฅผ ๋ณต์‚ฌํ•˜์—ฌ ์ฃผ์†Œ๊ฐ’์„ ์ €์žฅํ•œ๋‹ค.

์—ฌ๊ธฐ์„œ ์˜คํ•ดํ•˜์ง€ ๋ง์•„์•ผ ํ•˜๋Š”๊ฒƒ์€ ์ฃผ์†Œ๊ฐ’ ์ž์ฒด๋ฅผ ๋ฐ›๋Š” ๊ฒƒ์ด ์•„๋‹Œ ๋ณต์‚ฌํ•˜์—ฌ ๋ฐ›๋Š” ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

๋”ฐ๋ผ์„œ ์ฐธ์กฐํ•˜๋Š” ๊ฐ’์„ ๋ณ€๊ฒฝํ•  ๊ฒฝ์šฐ ์›๋ณธ ๊ฐ’์—๋„ ์˜ํ–ฅ์„ ๋ฏธ์นœ๋‹ค.

 

์ด์ œ ๋ณ€์ˆ˜๋ฅผ ๋ณ€๊ฒฝํ•  ๊ฒฝ์šฐ ๊ฐ๊ฐ ์–ด๋–ป๊ฒŒ ๋™์ž‘ํ•˜๋Š” ์ง€ ์•Œ์•„๋ณด์ž

 

์›์‹œ ํƒ€์ž…

์›์‹œ ํƒ€์ž…์˜ ๊ฒฝ์šฐ ๋„˜๊ฒจ ๋ฐ›์€ ๊ฐ’์€ ์•„์˜ˆ ๋‹ค๋ฅธ ๋ณ€์ˆ˜์ด๊ธฐ ๋•Œ๋ฌธ์— ์ˆ˜์ •ํ•˜๋”๋ผ๋„ ์›๋ณธ ๊ฐ’์— ์•„๋ฌด๋Ÿฐ ์˜ํ–ฅ์ด ์—†๋‹ค.

 

์ฐธ์กฐ ํƒ€์ž…

์ฐธ์กฐ ํƒ€์ž… ๋˜ํ•œ ๋‹จ์ˆœํžˆ ๋ณต์‚ฌ๋œ ๋ณ€์ˆ˜์ด๊ธฐ ๋•Œ๋ฌธ์— ๋„˜๊ฒจ ๋ฐ›์€ ๊ฐ’์— ์ƒˆ๋กœ์šด ๊ฐ’์„ ํ• ๋‹นํ•˜๋”๋ผ๋„ ์›๋ณธ ๊ฐ’์—๋Š” ์˜ํ–ฅ์ด ์—†๋‹ค.

ํ•˜์ง€๋งŒ ์ฐธ์กฐํ•˜๋Š” ๊ฐ’์„ ์ง์ ‘์ ์œผ๋กœ ์ˆ˜์ •ํ•  ๊ฒฝ์šฐ๋Š” ๋…ผ์™ธ์ด๋‹ค. (ex. ๋ฐฐ์—ด)

 

 

Call By Reference ์™€์˜ ์ฐจ์ด๋Š”?

๊ทผ๋ฐ ์ฃผ์†Œ๊ฐ’์„ ๋ฐ›๊ธฐ ๋•Œ๋ฌธ์— Call By Reference ๋ฐฉ์‹๊ณผ ํ—ท๊ฐˆ๋ฆด ์ˆ˜ ์žˆ๋‹ค.

๋ช…ํ™•ํžˆ ํ•ด์•ผํ•  ๊ฒƒ์€ Call By Reference ๋ฐฉ์‹์€ ๋ณ€์ˆ˜ ์ž์ฒด๋ฅผ ๋„˜๊ฒจ์ฃผ๊ณ  ์ž๋ฐ”๋Š” ๋ณ€์ˆ˜๋ฅผ ๋ณต์‚ฌํ•ด์„œ ๋ฐ›๊ธฐ ๋•Œ๋ฌธ์—

์—„์—ฐํžˆ ์ฐจ์ด๊ฐ€ ์žˆ๋‹ค.

 

์ฐธ๊ณ ์ž๋ฃŒ

https://www.baeldung.com/java-pass-by-value-or-pass-by-reference

 

ํด๋ž˜์Šค

 

๋‚ด๋ถ€ ํด๋ž˜์Šค

 

์ž‘์€ ์ „์šฉ ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํด๋ž˜์Šค ์‚ฌ์šฉ์— ๋Œ€ํ•œ ๋น„์šฉ์„ ์ง€๋ถˆํ•˜์ง€ ์•Š๊ณ  ํด๋ž˜์Šค์˜ ์žฅ์ ์„ ์ทจํ•  ์ˆ˜ ์žˆ๋‹ค.

 

๋‚ด๋ถ€ ํด๋ž˜์Šค๋Š” ๋‚ด๋ถ€ ํด๋ž˜์Šค๋ฅผ ๊ฐ์‹ผ ํด๋ž˜์Šค์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ์•”๋ฌต์ ์œผ๋กœ ์ „๋‹ฌ๋ฐ›๋Š”๋‹ค.

๋ช…์‹œ์ ์œผ๋กœ ํด๋ž˜์Šค ๊ฐ„์˜ ๊ด€๊ณ„๋ฅผ ์ •ํ•˜์ง€ ์•Š์œผ๋ฉด์„œ๋„ ๊ฐ์‹ผ ํด๋ž˜์Šค์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค.

public class Enclose {
	private String field;
    
    public class Inner {
    	public String example() {
        	return field;
        }
     }

}

๋งŒ์•ฝ ์™ธ๋ถ€ ํด๋ž˜์Šค์™€ ์™„์ „ํžˆ ๋ถ„๋ฆฌ๋œ ๋‚ด๋ถ€ ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด, ๋‚ด๋ถ€ ํด๋ž˜์Šค๋ฅผ ์ •์ ์œผ๋กœ ์„ ์–ธํ•˜๋ฉด ๋œ๋‹ค.

 

์ธ์Šคํ„ด์Šค๋ณ„ ํ–‰์œ„

 

๊ฐ์ฒด์˜ ๋กœ์ง์ด ํด๋ž˜์Šค์— ์˜ํ•ด ์™„์ „ํžˆ ์ •์˜๋  ๋•Œ, ์ฝ”๋“œ ๋…์ž๋Š” ์–ด๋–ค ์ผ์ด ๋ฒŒ์–ด์ง€๋Š”์ง€ ์ดํ•ดํ•œ๋‹ค.

ํ•˜์ง€๋งŒ ์ธ์Šคํ„ด์Šค ๋ณ„๋กœ ๋กœ์ง์ด ๋‹ค๋ฅด๋‹ค๋ฉด ์ฝ”๋“œ๋ฅผ ์‰ฝ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์—†๋‹ค.

 

ํšจ๊ณผ์ ์ธ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ์œ„ํ•ด ์ธ์Šคํ„ด์Šค ์ƒ์„ฑ ํ›„์—๋Š” ์ธ์Šคํ„ด์Šค ๋ณ„ ํ–‰๋™์„ ๋ณ€ํ™”์‹œํ‚ค์ง€ ์•Š๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.

 

์กฐ๊ฑด๋ฌธ

 

์กฐ๊ฑด๋ฌผ์„ ์‚ฌ์šฉํ•˜๋ฉด ์ธ์Šคํ„ด์Šค ๋ณ„ ํ–‰๋™์„ ์ง€์›ํ•˜๋ฉด์„œ๋„ ๋ชจ๋“  ๋กœ์ง์„ ํ•˜๋‚˜์˜ ํด๋ž˜์Šค ์•ˆ์— ๋„ฃ์„ ์ˆ˜ ์žˆ๋‹ค.

ํžˆ์ž๋ฏผ ํ”„๋กœ๊ทธ๋žจ ์ˆ˜ํ–‰ ๊ฒฝ๋กœ๊ฐ€ ๋งŽ์œผ๋ฉด ๋งŽ์„ ์ˆ˜๋ก ์˜ค๋ฅ˜๊ฐ€ ์ƒ๊ธธ ํ™•๋ฅ ์ด ๋†’์•„์ง„๋‹ค.

 

์•„๋ž˜์™€ ๊ฐ™์€ ์Šค์œ„์น˜ ๋ฌธ์„ ์ƒ๊ฐํ•ด๋ณด์ž

public boolean contains(Point p) {
	switch (getType()) {
    	case A :
        // ...
        case B :
        // ...
    }
}

์—ฌ๊ธฐ์„œ case C ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด , ์Šค์œ„์น˜๋ฌธ์— ์ƒˆ๋กœ์šด ์ ˆ์„ ์‚ฝ์ž…ํ•˜๊ณ  ํด๋ž˜์Šค ๋˜ํ•œ ์ˆ˜์ •ํ•ด์•ผ ํ• ์ˆ˜๋„ ์žˆ๋‹ค.

 

๋”ฐ๋ผ์„œ ํ•˜์œ„ ํด๋ž˜์Šค๋‚˜ ์œ„์ž„ ์ค‘ ํ•˜๋‚˜๋ฅผ ์„ ํƒํ•ด์„œ ์กฐ๊ฑด๋ฌธ์„ ๋ฉ”์„ธ์ง€๋กœ ๋ฐ”๊พธ๋Š” ๊ฒƒ์œผ๋กœ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค.

 

์œ„์ž„

์œ„์ž„์„ ํ†ตํ•ด์„œ ๊ฐ ์ธ์Šคํ„ด์Šค์•ณ์„œ ๋‹ค๋ฅธ ๋กœ์ง์„ ์ˆ˜ํ–‰ํ•˜๊ฒŒ ํ•  ์ˆ˜ ์žˆ๋‹ค.

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

 

public void mouseDown() {
	getTool().mouseDown();
}

 

ํ”Œ๋Ÿฌ๊ทธ์ธ ์„ ํƒ์ž

 

ํ•œ๋‘๊ฐœ์˜ ๋ฉ”์†Œ๋“œ์—์„œ๋งŒ ์ธ์Šคํ„ด์Šค๋ณ„ ํ–‰๋™์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ ๋ฆฌํ”Œ๋ ‰์…˜์„ ํ†ตํ•ด ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๊ฒƒ๋„ ์ข‹๋‹ค

String name;
public void runTest() throws Exception {
	Class[] noArgument = new class[0];
    Method method = getClass().getMethod(name,noArguments);
    method.invoke(this,new Object[0]);
}

 

์ต๋ช… ๋‚ด๋ถ€ ํด๋ž˜์Šค

 

์ต๋ช… ๋‚ด๋ถ€ ํด๋ž˜์Šค๋Š” ํ•œ๊ณณ์—์„œ๋งŒ ์‚ฌ์šฉ๋˜๋Š” ํด๋ž˜์Šค๋ฅผ ์ƒ์„ฑํ•ด์„œ ์˜ค๋ฒ„๋ผ์ด๋“œ ํ•œ ํ›„์— ์ง€์—ญ์ ์œผ๋กœ๋งŒ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

์ด๋•Œ ํด๋ž˜์Šค ์ด๋ฆ„์€ ์ง€์ •ํ•˜์ง€ ์•Š๋Š”๋‹ค.

 

ํšจ์œจ์ ์ธ ์‚ฌ์šฉ์„ ์œ„ํ•ด API๊ฐ€ ๋งค์šฐ ๊ฐ„๋‹จํ•˜๊ฑฐ๋‚˜ ์ƒ์œ„ ํด๋ž˜์Šค๊ฐ€ ๋Œ€๋ถ€๋ถ„์˜ ๊ตฌํ˜„์„ ๋‹ด๋‹นํ•ด์„œ ๋‚ด๋ถ€ ํด๋ž˜์Šค๋ฅผ ์‰ฝ๊ฒŒ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์–ด์•ผํ•œ๋‹ค.

 

์ต๋ช… ๋‚ด๋ถ€ ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ํด๋ž˜์Šค๋ฅผ ์ƒ์„ฑํ•  ๋•Œ ์ธ์Šคํ„ด์Šค์—์„œ ์‚ฌ์šฉํ•  ์ฝ”๋“œ๋ฅผ ์•Œ์•„์•ผํ•œ๋‹ค.

๋˜ํ•œ ํ…Œ์ŠคํŠธํ•˜๊ธฐ ์–ด๋ ค์›Œ์„œ ๋ณต์žกํ•œ ๋กœ์ง์— ์ ์ ˆ์น˜์•Š๋‹ค.

ํด๋ž˜์Šค

ํด๋ž˜์Šค๋Š” ๋น„์Šทํ•œ ์„ฑ์งˆ์„ ๊ฐ€์ง„ ๊ฒƒ์„ ์ด์นญํ•˜๋ฉฐ, ๊ฐ์ฒด๋Š” ํด๋ž˜์Šค๊ฐ€ ๊ตฌ์ฒดํ™”๋œ ๊ฒƒ์ด๋‹ค.

 

ํด๋ž˜์Šค

 

ํด๋ž˜์Šค์˜ ๋กœ์ง๊ณผ ๋ฐ์ดํ„ฐ๋Š” ํ•จ๊ผ ์‚ฌ์šฉ๋˜๋ฉฐ, ๋กœ์ง์€ ๋ฐ์ดํ„ฐ์— ๋น„ํ•ด ๋ณ€ํ™”์œจ์ด ๋‚ฎ๋‹ค. ํด๋ž˜์Šค ๋‚ด๋ถ€์˜ ๋ฐ์ดํ„ฐ๋Š” 
๊ด€๋ จ ๋กœ์ง์— ์˜ํ•ด ๋ณ€ํ™”ํ•˜๋ฉฐ, ํด๋ž˜์Šค ๋‚ด๋ถ€์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๋ฐ์ดํ„ฐ์˜ ๋ณ€ํ™”์œจ์€ ๋น„์Šทํ•˜๋‹ค.

๋Œ€์ฒด๋กœ ์ด ์„ ์–ธ์„ ๋‚ดํฌํ•˜๊ธฐ๋Š” ํ•˜์ง€๋งŒ ์ ˆ๋Œ€์ ์ด์ง€๋Š” ์•Š๋‹ค.

 

๋”ฐ๋ผ์„œ ํšจ๊ณผ์ ์ธ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ์œ„ํ•ด์„œ ๋กœ์ง์„ ํด๋ž˜์Šค ๋‹จ์œ„๋กœ ์–ด๋–ป๊ฒŒ ๊ตฌ์„ฑํ•ด์•ผ ํ•˜๋‚œ์ง€, ๋กœ์ง ์‚ฌ์ด์˜ ์ฐจ์ด์ ์„ ์–ด๋–ป๊ฒŒ ํšจ๊ณผ์ ์œผ๋กœ 

ํ‘œํ˜„ํ•ด์•ผํ•˜๋Š”์ง€ ๋ฐฐ์›Œ์•ผ ํ•œ๋‹ค.

 

ํด๋ž˜์Šค ๊ณ„์ธต์„ ์‚ฌ์šฉํ•˜๋ฉด ํ•˜์œ„ ํด๋ž˜์Šค๋ฅผ ์ดํ•ดํ•˜๊ธฐ ์œ„ํ•ด ์ƒ์œ„ ํด๋ž˜์Šค ๋˜ํ•œ ๋ชจ๋‘ ์ดํ•ดํ•ด์•ผ ํ•˜๋ฏ€๋กœ ์ฝ๊ธฐ ์–ด๋ ค์›Œ์ง„๋‹ค.

๋ชจ๋“  ํด๋ž˜์Šค๋ฅผ ์ƒ์†๋ฐ›๊ธฐ ๋ณด๋‹จ ์„ ๋ณ„์ ์œผ๋กœ ํด๋ž˜์Šค๋ฅผ ์ƒ์†ํ•˜์ž

 

ํด๋ž˜์Šค๋Š” ํ”„๋กœ๊ทธ๋žจ์˜ ์„ค๊ณ„ ์š”์†Œ ์ค‘ ๊ฐ’์ด ๋น„์‹ผ ํŽธ์ด๋ฏ€๋กœ, ์˜๋ฏธ ์žˆ๋Š” ์ž‘์—…์—๋งŒ ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•ด์•ผํ•œ๋‹ค.

๋‹ค๋ฅธ ํด๋ž˜์Šค์˜ ํฌ๊ธฐ๋ฅผ ์œ ์ง€ํ•˜๋ฉด์„œ ํด๋ž˜์Šค์˜ ์ˆ˜๋ฅผ ์ค„์ด๋Š” ๊ฒƒ์ด ํ”„๋กœ๊ทธ๋žจ์„ ๊ฐœ์„ ํ•œ ๊ฒƒ์ด๋ผ๊ณ  ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

 

๋‹จ์ˆœํ•œ ์ƒ์œ„ ํด๋ž˜์Šค ์ด๋ฆ„

 

์ ํ•ฉํ•œ ํด๋ž˜์Šค ์ด๋ฆ„์€ ์ฝ”๋“œ๋ฅผ ๋‹จ์ˆœํ™”ํ•˜๊ณ  ํ–ฅ์ƒ ์‹œ์ผœ์ค€๋‹ค.

์ค‘์š”ํ•œ ํด๋ž˜์Šค ์ด๋ฆ„์— ๋Œ€ํ•ด์„œ๋Š” ํ•œ ๋‹จ์–ด๋กœ ๋œ ์ด๋ฆ„์„ ์‚ฌ์šฉํ•˜๊ณ  , ๋ฉ”ํƒ€ํฌ(์€์œ )๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ข‹๋‹ค !

 

ํ•œ์ •์  ํ•˜์œ„ํด๋ž˜์Šค ์ด๋ฆ„

 

ํ•˜์œ„ํด๋ž˜์Šค ์ด๋ฆ„์€ ์ƒ์œ„ ํด๋ž˜์Šค์™€ ๋‹ฌ๋ฆฌ ๊ฐ„๊ฒฐ์„ฑ์€ ํฌ๊ธฐํ•˜๋”๋ผ๋„ ํ‘œํ˜„์„ฑ์„ ํƒํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.

ํ•˜์ง€๋งŒ ๊ทธ ํ•˜์œ„ํด๋ž˜์Šค๊ฐ€ ๋‹ค๋ฅธ ํด๋ž˜์Šค์˜ ์ƒ์œ„ ํด๋ž˜์Šค๋ผ๋ฉด ๋‹ค์‹œ ๋‹จ์ˆœ์„ฑ์„ ์„ ํƒํ•ด์•ผํ•œ๋‹ค.

 

๋‹ค๋ฅธ ๊ฒฝ์šฐ๋Š” ๋‹ค๋‹จ๊ณ„ ํด๋ž˜์Šค ๊ณ„์ธต์ด๋‹ค. 

๊ธฐ๊ณ„์ ์œผ๋กœ ๋ฐ”๋กœ ์œ„์˜ ์ƒ์œ„ ํด๋ž˜์Šค ์ด๋ฆ„์— ์ˆ˜์‹์–ด๋ฅผ ๋ถ™์ด๊ธฐ ๋ณด๋‹จ , ๊ฐ€์žฅ ์œ ์‚ฌํ•œ ์ƒ์œ„ ํด๋ž˜์Šค์˜ ์ด๋ฆ„์„ ๋ฐ”ํƒ•์œผ๋กœ

์ง“๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.

 

ํšจ๊ณผ์ ์ธ ์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜์„ ์œ„ํ•ด ์ข‹์€ ํด๋ž˜์Šค ์ด๋ฆ„์ด ํ•„์š”ํ•˜๋‹ค.

์ด๋ฆ„์— ์—ฐ๊ด€์„ฑ์ด ์—†๋Š” ํด๋ž˜์Šค๋Š” ์ดํ•ดํ•˜๊ธฐ๋„ ๊ธฐ์–ตํ•˜๊ธฐ๋„ ์–ด๋ ต๋‹ค.

ํด๋ž˜์Šค ์ด๋ฆ„์€ ์ฝ”๋“œ์˜ ๋‚ด์šฉ์„ ๋ฐ˜์˜ํ•ด์•ผํ•œ๋‹ค.

 

์ถ”์ƒ ์ธํ„ฐํŽ˜์ด์Šค

 

์„ค๊ณ„์ƒ์˜ ๊ฒฐ์ •์„ ํ•„์š” ์ด์ƒ์œผ๋กœ ๋…ธ์ถœํ•˜์ง€ ์•Š์•„์•ผํ•œ๋‹ค.

 

์ธํ„ฐํŽ˜์ด์Šค๋ž€ ๊ตฌํ˜„์ด ๋น ์ง„ ์—ฌ๋Ÿฌ ์—ฐ์‚ฐ์˜ ์ง‘ํ•ฉ์„ ์˜๋ฏธํ•œ๋‹ค.

ํ•˜์ง€๋งŒ ์ธํ„ฐํŽ˜์ด์Šค ์ถ”๊ฐ€์—๋Š” ๋น„์šฉ์ด ๋ฐœ์ƒํ•œ๋‹ค.

๋”ฐ๋ผ์„œ ์œ ์—ฐ์„ฑ์„ ์–ป์„ ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ์—๋งŒ ์ถ”๊ฐ€ ์„ค๊ณ„์— ๋Œ€ํ•œ ๋น„์šฉ์„ ์ง€๋ถˆํ•ด์•ผํ•œ๋‹ค.

์‹ค์ œ๋กœ ์œ ์—ฐ์„ฑ์ด ํ•„์š”ํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ๋„ ๋งค์šฐ ๋งŽ๋‹ค.

 

์ €๋ฒˆ ์žฅ์—๋„ ๋งํ–ˆ๋“ฏ์ด ๋ถˆํ™•์‹คํ•œ ๋ฏธ๋ž˜๋ฅผ ์˜ˆ์ธกํ•˜๊ธฐ ๋ณด๋‹จ ๋‹น์žฅ์˜ ์ด์ต์„ ์ทจํ•˜์ž

์ถ”ํ›„ ํ•„์š”ํ•ด์ง€๋Š” ๊ฒฝ์šฐ์—๋งŒ ์‹œ์Šคํ…œ์— ์œ ์—ฐ์„ฑ์„ ๋ถ€์—ฌํ•˜๋Š” ํŽธ์ด ๋ฐ”๋žŒ์งํ•˜๋‹ค.

 

์ธํ„ฐํŽ˜์ด์Šค

 

์ž๋ฐ” ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์€ "์—ฌ๊ธฐ๊นŒ์ง€๊ฐ€ ๋‚ด๊ฐ€ ์›ํ•˜๋Š” ๊ฒƒ์ด๊ณ  , ์ด์™ธ์˜ ๋‚ด์šฉ์€ ์ƒ๊ด€ํ•˜์ง€ ์•Š๋Š”๋‹ค."

๋ผ๋Š” ๋‚ด์šฉ์„ ๋‚ดํฌํ•œ๋‹ค.

์ธํ„ฐํŽ˜์ด์Šค๋Š” ํ•„๋“œ๋ฅผ ๋ฐฐ์ œํ•˜๊ณ  ์—ฐ์‚ฐ๋งŒ์„ ๋‚˜ํƒ€๋‚ด๋ฏ€๋กœ ์‚ฌ์šฉ์ž๋Š” ๊ตฌํ˜„์ด ๋ณ€๊ฒฝ๋˜๋”๋ผ๋„ ์‹ ๊ฒฝ ์“ธ ํ•„์š”๊ฐ€ ์—†๋‹ค.

 

๋ฐ˜๋Œ€๋กœ ๊ตฌํ˜„์„ ๋ฐ”๊พธ๋Š” ๊ฒƒ์€ ์‰ฝ์ง€๋งŒ ์ธํ„ฐํŽ˜์ด์Šค ์ž์ฒด๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒƒ์€ ์‰ฝ์ง€ ์•Š๋‹ค.

๋ณ€๊ฒฝ ์‹œ์— ๋ชจ๋“  ๊ตฌํ˜„ ํด๋ž˜์Šค๋ฅผ ์ˆ˜์ •ํ•ด์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

 

๋ฒ„์ „ ์ธํ„ฐํŽ˜์ด์Šค

 

๋งŒ์•ฝ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋ฐ”๊พธ๊ณ  ์‹ถ์€๋ฐ ์„ค๊ณ„๋ฅผ ์ˆ˜์ •ํ•˜๋Š” ๊ฒƒ์ด ๋ถ€๋‹ด์Šค๋Ÿฌ์šด ๊ฒฝ์šฐ, ๋ฒ„์ „ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๊ธฐ์กด ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ƒ์†ํ—ค์„œ ์ƒˆ๋กœ์šด ์—ฐ์‚ฐ์„ ์ถ”๊ฐ€ํ•˜๋ฏ€๋กœ ์‚ฌ์šฉ์ž๋Š” ๊ธฐ์กด ์ธํ„ฐํŽ˜์ด์Šค์— ๋Œ€ํ•ด ์•Œ ํ•„์š”๊ฐ€ ์—†๋‹ค.

 

ํ•˜์ง€๋งŒ ๋ฒ„์ „ ์ธํ„ฐํŽ˜์ด์Šค๋Š” ๊ทธ๋ฆฌ ์ข‹์€ ๋ฐฉ๋ฒ•์ด ์•„๋‹ˆ๋‹ค.

๋ฒ„์ „ ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ๋Š˜์–ด๋‚  ์ˆ˜๋ก ๊ฒฐ๊ตญ ๊ด€๋ฆฌํ•ด์•ผํ•  ๋กœ์ง,ํด๋ž˜์Šค๊ฐ€ ๋งŽ์•„์ง€๋ฏ€๋กœ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ํ•  ์ผ์ด ๋Š˜์–ด๋‚œ๋‹ค.

์ด๋Š” ์„ค๊ณ„ ์ž์ฒด๋ฅผ ์ˆ˜์ •ํ•  ๋•Œ๊ฐ€ ๋˜์—ˆ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

 

์ถ”์ƒ ํด๋ž˜์Šค

 

์ถ”์ƒ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๋˜ ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์€ ์ถ”์ƒ ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

 

์ธํ„ฐํŽ˜์ด์Šค์™€ ๋น„๊ตํ–ˆ์„ ๋•Œ ์žฅ๋‹จ์ ์ด ์žˆ๋‹ค.

 

๋จผ์ € ์ˆ˜์ •์˜ ๊ด€์ ์—์„œ ๋ณด๋ฉด ์ถ”์ƒ ํด๋ž˜์Šค๋Š” ์ˆ˜์ •์— ์šฉ์ดํ•˜๋‹ค.

๊ธฐ์กด ์„ค๊ณ„๋ฅผ ์œ ์ง€ํ•˜๋ฉด์„œ ์–ผ๋งˆ๋“ ์ง€ ์ƒˆ๋กœ์šด ์—ฐ์‚ฐ์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

ํ•˜์ง€๋งŒ ์ถ”์ƒ ํด๋ž˜์Šค๋Š” ๋‹จ 1๊ฐœ์˜ ์ƒ์œ„ ํด๋ž˜์Šค๋งŒ์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

์ด๋Š” ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ๊ณผ ๋Œ€์กฐ๋œ๋‹ค.

 

์ž๋ฐ” ํด๋ž˜์Šค์—์„œ abstract ํ‚ค์›Œ๋“œ๋ฅผ ์”€์œผ๋กœ์จ, ํ•ด๋‹น ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š”

๋ฐ˜๋“œ์‹œ ๊ตฌํ˜„์ด ํ•„์š”ํ•˜๋‹ค๋Š” ์‚ฌ์‹ค์„ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

๊ฐ’ ๊ฐ์ฒด

 

ํ•จ์ˆ˜ํ˜•(๊ฐ’) ์Šคํƒ€์ผ ์—ฐ์‚ฐ์€ ์ƒํƒœ๋ฅผ ๋ณ€ํ™”์‹œํ‚ค์ง€ ์•Š์œผ๋ฉฐ ์ƒˆ๋กœ์šด ๊ฐ’์„ ์ƒ์„ฑํ•œ๋‹ค.

๊ณ ์ •์ ์ธ ์ƒํ™ฉ์„ ํ‘œํ˜„ํ•˜๊ณ  ํ•จ์ˆ˜ํ˜• ์Šคํƒ€์ผ์ด ์ ์ ˆํ•˜๊ณ  , ์ƒํ™ฉ์ด ๋ณ€ํ•˜๋Š” ๊ฒฝ์šฐ๋ผ๋ฉด ์ƒํƒœ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ํŽธ์ด ๋‚ซ๋‹ค.

 

๊ฐ’ ์Šคํƒ€์ผ ๊ฐ์ฒด์˜ ๋ฌธ์ œ์ ์€ ์„ฑ๋Šฅ์ด๋‹ค.  (ํ•˜์ง€๋งŒ ๋งค์šฐ ๋ฏธ๋น„ํ•˜๋‹ค)

๋‹ค๋ฅธ ๋ฌธ์ œ๋Š” ๊ฐ’ ์Šคํƒ€์ผ๊ณผ ์ƒํƒœ๋กœ ๋ถ€๋ถ„์„ ๊ตฌ๋ณ„ํ•˜๊ธฐ ์‰ฝ์ง€ ์•Š๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

 

๋”ฐ๋ผ์„œ ๋‘ ์Šคํƒ€์ผ์„ ์ ์ ˆํžˆ ์„ž์–ด์„œ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.

 

ํŠนํ™”

 

์—ฐ์‚ฐ ๊ฐ„์˜ ์œ ์‚ฌ์ ๊ณผ ์ฐจ์ด์ ์„ ๋ถ€๊ฐ์‹œํ‚ค๋Š” ๋ฐฉํ–ฅ์œผ๋กœ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋ฉด , ํ”„๋กœ๊ทธ๋žจ์„ ์ฝ๊ณ  ์ˆ˜์ •ํ•˜๊ธฐ ์‰ฌ์›Œ์ง„๋‹ค.

์ด๋Ÿฐ ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜๋ฉด ๋ช…ํ™•ํžˆ ์ฝ”๋“œ๋ฅผ ์ดํ•ดํ•˜๊ณ  ์ƒˆ๋กœ์šด ์š”๊ตฌ ์‚ฌํ•ญ์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์„ ์ง€๋ฅผ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

๋˜ํ•œ ์ˆ˜์ •์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ ๊ธฐ์กด ์ฝ”๋“œ๋ฅผ ๋ณ€ํ˜•ํ• ์ง€ ์ƒˆ๋กœ ๋งŒ๋“ค์ง€๋ฅผ ํŒ๋‹จํ•  ์ˆ˜ ์žˆ๋‹ค.

 

๋Œ€๋ถ€๋ถ„์˜ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์€ ๋‘ ๊ฐ€์ง€์˜ ๊ทน๋‹จ์  ๋ณ€ํ˜• ์‚ฌ์ด์— ์กด์žฌํ•œ๋‹ค.

ํ˜„์‹ค์—์„œ๋Š” ์•ฝ๊ฐ„ ๋ณ€ํ˜•๋œ ์ž…๋ ฅ ๋ฐ์ดํ„ฐ๋ฅผ ์‹œ์šฉํ•˜๊ฑฐ๋‚˜ ์•ฝ๊ฐ„ ๋ณ€ํ˜•๋œ ๋กœ์ง์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๋‹ค.

 

ํ•˜์œ„ ํด๋ž˜์Šค

 

์ œ๋Œ€๋กœ ๋œ ์ƒ์œ„ํด๋ž˜์Šค๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค๋ฉด ํ•˜์œ„ ํด๋ž˜์Šค๋Š” ๊ฐ•๋ ฅํ•œ ํž˜์„ ๋ฐœํœ˜ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

ํ•˜์ง€๋งŒ ํ•˜์œ„ ํด๋ž˜์Šค์˜ ์‚ฌ์šฉ์€ ์—ฌ๋Ÿฌ ๋ฌธ์ œ๋ฅผ ์•ผ๊ธฐํ•œ๋‹ค.

1. ํ•˜์œ„ ํด๋ž˜์Šค์˜ ์‚ฌ์šฉ์„ ๋˜๋Œ๋ฆฌ๊ธฐ ์–ด๋ ต๋‹ค.

2. ํ•˜์œ„ํด๋ž˜์Šค๋ฅผ ์ดํ•ดํ•˜๊ธฐ ์œ„ํ•ด ์ƒ์œ„ ํด๋ž˜์Šค๊นŒ์ง€ ์ดํ•ดํ•ด์•ผํ•œ๋‹ค. 

3. ์ƒ์œ„ ํด๋ž˜์Šค์˜ ์ˆ˜์ •์ด ์กฐ์‹ฌ์Šค๋Ÿฌ์›Œ์ง„๋‹ค.

 

์ด๋Ÿฌํ•œ ๋ฌธ์ œ์ ์„ ์ž˜ ์•Œ๊ณ  ์žˆ๋‹ค๋ฉด ํ•˜์œ„ ํด๋ž˜์Šค๋Š” ๊ฐ•๋ ฅํ•œ ๋„๊ตฌ๊ฐ€ ๋  ์ˆ˜ ์žˆ๋‹ค.

์ƒ์œ„ ํด๋ž˜์Šค์˜ ๋กœ์ง์„ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋ฉ”์†Œ๋“œ๋กœ ์ž˜๊ฒŒ ์ชผ๊ฐœ๋ฉด ๊ฐ ๋ฉ”์†Œ๋“œ๋ฅผ ๋”ฐ๋กœ ์˜ค๋ฒ„๋ผ์ด๋“œ ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

ํ•˜์œ„ ํด๋ž˜์Šค๋Š” ๋™์ ์œผ๋กœ ๋ณ€ํ™”ํ•˜๋Š” ๋กœ์ง์„ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์—†๋‹ค.

๋”ฐ๋ผ์„œ ์ด ๊ฒฝ์šฐ๋„ค๋Š” ์กฐ๊ฑด๋ฌธ์ด๋‚˜ ์œ„์ž„์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๋ฐ”๋žŒ์งํ•˜๋‹ค. 

 

๊ตฌํ˜„์ž

 

๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋žจ์—์„œ๋Š” ๋‹คํ˜•์  ๋ฉ”์‹œ์ง€๋ฅผ ํ†ตํ•ด ์„ ํƒ์„ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

๋•๋ถ„์— ์—ฐ์‚ฐ์˜ ๋‚ด๋ถ€ ๊ตฌํ˜„์— ๋Œ€ํ•ด์„œ๋Š” ์‹ ๊ฒฝ ์“ฐ์ง€ ์•Š์•„๋„ ๋œ๋‹ค.

 

๋‹คํ˜•์  ๋ฉ”์„ธ์ง€๋Š” ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ๋ณ€๊ฒฝ์„ ์ˆ˜์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

ํ”„๋กœ๊ทธ๋žจ์ด ๋‹ค๋ฅธ ์‹œ์Šคํ…œ์— ์ผ๋ จ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•˜๋Š” ๊ฒฝ์šฐ, ์ถ”์ƒ ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํ˜ธ์ถœ ์ฝ”๋“œ์— ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š๊ณ 

๊ตฌํ˜„์„ ์ž์œ ๋กญ๊ฒŒ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ๋‹ค.

 

์ด๋Š” ํšจ๊ณผ์ ์œผ๋กœ ํ”„๋กœ๊ทธ๋ž˜๋จธ์˜ ์˜๋„์™€ ๊ตฌํ˜„์„ ๋ถ„๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.

๋˜ํ•œ ์ƒ์ƒํ•˜์ง€ ๋ชปํ–ˆ๋˜ ๋ฏธ๋ž˜์˜ ํ™•์žฅ์„ ์ˆ˜์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์ด๋ก 

ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์ด๋ก ์€ ์ƒˆ๋กœ์šด ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•ด๋„ ํ•ด๊ฒฐ์ฑ…์„ ์ฐพ์„ ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ค€๋‹ค.

 

์‹ค์ œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ๋Š” ๋™๋ ฅ์ด ์กด์žฌํ•œ๋‹ค.

 

1. ๊ฐ€์น˜

- ๊ฐ€์น˜๋Š” ๋ชจ๋“  ํ”„๋กœ๊ทธ๋ž˜๋ฐ์— ์ ์šฉ๋œ๋‹ค. 

- ์ปค๋ฎค๋‹ˆํ…Œ์ด์…˜ , ์œ ์—ฐ์„ฑ ๋“ฑ ๋ชจ๋“  ์˜์‚ฌ ๊ฒฐ์ •์— ์˜ํ–ฅ์„ ๋ฏธ์นœ๋‹ค.

 

2. ์›์น™

- ์ง์ ‘ ์ ์šฉํ•˜๊ธฐ ์–ด๋ ค์šด ๊ฐ€์น˜์™€ , ์ง€์—ฝ ์ ์ธ ํŒจํ„ด ์‚ฌ์ด์— ๊ฐ€๊ต ์—ญํ• ์„ ํ•œ๋‹ค.

- ํŒจํ„ด ์ค‘ ํ•˜๋‚˜๋ฅผ ์„ ํƒํ•ด์•ผ ํ•  ๋•Œ ์›์น™์„ ๋”ฐ๋ฅธ๋‹ค. 

 

ํŒจํ„ด์€ ์ง€๊ธˆ ๋‹น์žฅ ๋ฌด์—‡์„ ํ•ด์•ผํ• ์ง€๋ฅผ ์•Œ๋ ค์ฃผ๊ณ , ๊ฐ€์น˜๋Š” ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š” ๋™๊ธฐ๋ฅผ ์•Œ๋ ค์ฃผ๋ฉฐ, ์›์น™์€ ๋™๊ธฐ๋ฅผ ํ–‰๋™์œผ๋กœ ์–ด๋–ป๊ฒŒ ๋ฐ”๊ฟ€์ง€๋ฅผ ์•Œ๋ ค์ค€๋‹ค.

 

๊ฐ€์น˜

์„ธ๊ฐ€์ง€ ๊ฐ€์น˜๋Š” ์„œ๋กœ ์ถฉ๋Œํ•˜๋Š” ๊ฒฝ์šฐ๋„ ์žˆ์ง€๋งŒ ์ƒํ˜ธ ๋ณด์™„์ ์ธ ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๋‹ค.

 

์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜

๋‹ค๋ฅธ ๊ฐœ๋ฐœ์ž๊ฐ€ ๋ดค์„ ๋•Œ์˜ ๊ด€์ ์œผ๋กœ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋ผ

์ฝ”๋“œ๋ฅผ ์‰ฝ๊ฒŒ ์ดํ•ดํ•˜๊ณ , ์ˆ˜์ •ํ•˜๊ณ , ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์–ด์•ผํ•œ๋‹ค

์ด๋ ‡๊ฒŒ ์ž‘์„ฑํ•˜๋ฉด ์ถ”ํ›„ ์ฝ”๋“œ ์ˆ˜์ • ์‹œ์— ๋‚ด๊ฐ€ ์“ด ์ฝ”๋“œ๋ฅผ ์‰ฝ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ, ๊ฐœ๋ฐœ ๋น„์šฉ์ด ๊ฐ์†Œํ•œ๋‹ค.

๋˜ํ•œ ํƒ€์ธ์˜ ์‹œ์„ ์—์„œ ์ƒ๊ฐํ•˜๋‹ค๋ณด๋ฉด ๋” ๋งŽ์€ ์ƒ๊ฐ์„ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ฝ”๋“œ์˜ ์งˆ์ด ์ข‹์•„์ง„๋‹ค.

 

๋‹จ์ˆœ์„ฑ

๋ถˆํ•„์š”ํ•œ ๋ณต์žก๋„๋Š” ์†Œํ”„ํŠธ์›จ์–ด์˜ ์ˆ˜์ •์„ ์–ด๋ ต๊ฒŒ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํ”„๋กœ๊ทธ๋žจ์˜ ๊ฐ€์น˜๊ฐ€ ๋–จ์–ด์ง„๋‹ค.

์ฝ”๋“œ์—์„œ ๋ถˆํ•„์š”ํ•œ ๋ถ€๋ถ„์„ ์ œ๊ฑฐํ•˜๋ผ. 

๊ณผ๋„ํ•œ ์š”์†Œ์™€ ์˜๋ฏธ์—†๋Š” ์ฝ”๋“œ๋ฅผ ์ œ๊ฑฐํ•˜๋ฉด ํ”„๋กœ๊ทธ๋žจ์˜ ๋‹จ์ˆœ์„ฑ์„ ๋†’์ผ ์ˆ˜ ์žˆ๋‹ค.

 

์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜๊ณผ ๋‹จ์ˆœ์„ฑ์€ ํ˜‘์—… ๊ด€๊ณ„์— ์žˆ๋‹ค.

์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜์˜ ์‹ ๊ฒฝ์„ ์“ธ์ˆ˜๋ก ์–ด๋–ค ๋ถ€๋ถ„์ด ๊ณผ๋„ํ•˜๊ฒŒ ๋ณต์žกํ•œ ์ง€ ์•Œ๊ธฐ ์‰ฌ์šฐ๋ฉฐ, ๋‹จ์ˆœํ• ์ˆ˜๋ก ์‹œ์Šคํ…œ์„ ์ดํ•ดํ•˜๊ธฐ ์‰ฝ๋‹ค.

 

์œ ์—ฐ์„ฑ

์œ ์—ฐ์„ฑ์„ ์œ„ํ•ด์„œ ๋ณต์žกํ•œ ์„ค๊ณ„๋ฅผ ์ •๋‹นํ™”ํ•  ์ˆ˜ ์žˆ๋‹ค.

ํ•˜์ง€๋งŒ ์ด๋Ÿฌํ•œ ๋ณต์žก๋„๊ฐ€ ์•„๋ฌด๋Ÿฐ ์ด๋“์„ ๊ฐ€์ ธ์˜ค์ง€ ์•Š๋Š”๋‹ค๋ฉด ๋‹จ์ˆœ์„ฑ์„ ์„ ํƒํ•ด์•ผํ•œ๋‹ค.

 

์„ค๊ณ„ ์ดˆ๊ธฐ ์œ ์—ฐ์„ฑ์ด ํ•„์š”ํ–ˆ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋„, ์ดํ›„ ํ•„์š”ํ•œ ์ƒํ™ฉ์ด ์˜ค์ง€ ์•Š์„ ์ˆ˜ ์žˆ๋‹ค.

๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ์ดˆ๊ธฐ ์„ค๊ณ„ ๋น„์šฉ์„ ๋ถˆํ•„์š”ํ•˜๊ฒŒ ์ฆ๊ฐ€์‹œํ‚ค๋Š” ๊ฒƒ๋ณด๋‹ค ๋‹น์žฅ์˜ ์ด๋“์„ ์„ ํƒํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.

 

์ถ”์ธก์— ์˜๊ฑฐํ•ด ์„ค๊ณ„์— ์œ ์—ฐ์„ฑ์„ ๋ถ€์—ฌํ•˜๊ธฐ ๋ณด๋‹จ ๋‹จ์ˆœ์„ฑ์„ ์œ ์—ฐํ•˜๊ฒŒ ์ ์šฉํ•œํ›„ ํ…Œ์ŠคํŠธ๋ฅผ ์ฒ ์ €ํ•˜๊ฒŒ ํ•˜๋Š” ๊ฒƒ์ด ํšจ๊ณผ์ ์ด๋‹ค.

 

๋‹จ์ˆœ์„ฑ์€ ์œ ์—ฐ์„ฑ์„ ์ด‰์ง„์‹œํ‚จ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์˜ต์…˜์„ ์ œ๊ฑฐํ•˜๋ฉด ํ”„๋กœ๊ทธ๋žจ์˜ ์ˆ˜์ •์€ ๋”์šฑ ๊ฐ„๋‹จํ•ด์ง„๋‹ค.

์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜์„ ์ค‘์‹œํ•˜๋ฉด ์ฝ”๋“œ๋ฅผ ์ดํ•ดํ•˜๊ธฐ ์‰ฌ์›Œ์ง€๋ฏ€๋กœ ์ˆ˜์ •์ด ์‰ฌ์›Œ์ง„๋‹ค. ์ด๋กœ์จ ์œ ์—ฐ์„ฑ์ด ์ฆ๋Œ€๋œ๋‹ค.

 

์›์น™ 

๊ฐ ํŒจํ„ด์€ ๊ฐ€์น˜ ์ค‘ ํ•˜๋‚˜ ์ด์ƒ์„ ๋‚ดํ‘œํ•˜๊ณ  ์žˆ๋‹ค.

์›์น™์€ ์ผ๋ฐ˜์ ์ธ ์ƒ๊ฐ์„ ๋‹ด๊ณ  ์žˆ์œผ๋ฉฐ, ํŒจํ„ด์˜ ๊ทผ๊ฐ„์„ ์ด๋ฃฌ๋‹ค.

 

์›์น™์„ ๋ช…ํ™•ํ•˜๊ฒŒ ์•Œ๊ณ  ์žˆ๋‹ค๋ฉด ์ƒˆ๋กœ์šด ํŒจํ„ด๋“ค์„ ๋งŒ๋“ค์–ด๋‚ผ ์ˆ˜ ์žˆ๋‹ค.

๋˜ํ•œ ํŒจํ„ด์„ ์‚ฌ์šฉํ•˜๋Š” ๊ทผ๋ณธ์ ์ธ ์ด์œ ๋ฅผ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

 

 

์ง€์—ญ์  ๋ณ€ํ™”

์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•  ๋•Œ ํ•จ๊ป˜ ๋ฐ”๊ฟ”์•ผํ•˜๋Š” ๋ถ€๋ถ„์„ ์ตœ์†Œํ™”ํ•˜๋ผ

์ง€์—ญ์  ๋ณ€ํ™”๋งŒ์„ ์ผ์œผํ‚ค๋Š” ์ฝ”๋“œ๋Š” ์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜์ด ์‰ฝ๋‹ค.

 

์ตœ์†Œ ์ค‘๋ณต

์ค‘๋ณต๋œ ์ฝ”๋“œ๊ฐ€ ๋งŽ์„ ์ˆ˜๋ก ์ฝ”๋“œ์˜ ์ˆ˜์ •์ด ์–ด๋ ค์›Œ์ง„๋‹ค.

์–ด๋–ค ๊ฐœ๋…์„ ์ˆ˜์ •ํ–ˆ์„ ๋•Œ ํด๋ž˜์Šค๋ฅผ 2๊ฐœ ์ด์ƒ ์ˆ˜์ •ํ•ด์•ผํ•œ๋‹ค๋ฉด, ์ด๋Š” ์ง€์—ญ์  ๋ณ€ํ™”์˜ ์›์น™์„ ์œ„๋ฐฐํ•œ๋‹ค.

 

ํ•˜์ง€๋งŒ ์ฝ”๋“œ์˜ ์ค‘๋ณต์€ ์ƒํ™ฉ์— ๋”ฐ๋ผ ๋ถˆ๊ฐ€ํ”ผํ•  ์ˆ˜ ์žˆ๋‹ค.

๋”ฐ๋ผ์„œ ์ ˆ๋Œ€์ ์œผ๋กœ ํ”ผํ•˜๊ธฐ ๋ณด๋‹จ ์œ„ํ—˜ ์š”์†Œ๋กœ ๋ณด๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.

 

๋กœ์ง๊ณผ ๋ฐ์ดํ„ฐ์˜ ๊ฒฐํ•ฉ

๋ฐ์ดํ„ฐ์™€ ๊ทธ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋กœ์ง์„ ๊ฐ™์€ ๋ฉ”์†Œ๋“œ , ๊ฐ™์€ ๊ฐ์ฒด , ๊ฐ™์€ ํŒจํ‚ค์ง€ ๋‚ด์— ๋ฐฐ์น˜ํ•˜๋ผ

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ํ”„๋กœ๊ทธ๋žจ์„ ์ˆ˜์ •ํ•˜๋”๋ผ๋„ ๊ทธ ์˜ํ–ฅ์ด ์ผ์ • ์˜์—ญ์— ๋จธ๋ฌผ๊ฒŒ ๋œ๋‹ค.

 

๋Œ€์นญ์„ฑ

๋Œ€์นญ์„ฑ์— ๋”ฐ๋ผ ์•„์ด๋””์–ด๋ฅผ ์ผ๊ด€๋œ ๋ฐฉ์‹์œผ๋กœ ํ‘œํ˜„ํ•˜์ž

๋ฉ”์†Œ๋“œ๋ฅผ ํ•˜๋‚˜์˜ ๊ตฌํ˜„์œผ๋กœ ํ†ตํ•ฉํ•  ์ˆ˜ ์žˆ์–ด์„œ ์ค‘๋ณต์„ ์ œ๊ฑฐํ•  ์ˆ˜ ์žˆ๋‹ค.

 

void process() {
	input();
    	tally(); // ์ผ์น˜์‹œํ‚ค๋‹ค
   	output();
}

 

์„ ์–ธ์  ํ‘œํ˜„

์ˆ˜ํ–‰ ์ˆœ์„œ๊ฐ€ ์ค‘์š”ํ•œ ๊ตฌ๋ฌธ์ด๋‚˜ ์กฐ๊ฑด๋ถ€ ๊ตฌ๋ฌธ์ด ์—†๋Š” ๊ฒฝ์šฐ, ์„ ์–ธ์  ํ‘œํ˜„์„ ํ†ตํ•ด ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.

(์•„๋งˆ ์–ด๋…ธํ…Œ์ด์…˜์ธ ๋“ฏ)

 

@RunWith(Suite.class)
@TestClasses({
	SimpleTest.class,
    ComplicatedTest.class
}
)
class AllTests {
}

์ด๋Ÿฐ ๋ฐฉ์‹์œผ๋กœ ๋‚ด๋ถ€๋ฅผ ๋ณผ ํ•„์š”์—†์ด ์ฝ๊ธฐ ์‰ฌ์šด ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.

 

๋ณ€ํ™”์œจ

๋กœ์ง๊ณผ ๋ฐ์ดํ„ฐ๋ฅผ ํ•จ๊ป˜ ๊ด€๋ฆฌํ•˜๊ณ  ๋ณ€ํ™”์œจ์ด ๋‹ค๋ฅธ ๋กœ์ง๊ณผ ๋ฐ์ดํ„ฐ๋ฅผ ๋ถ„๋ฆฌํ•˜๋ผ

๋ณ€ํ™”์œจ์€ ์‹œ๊ฐ„์  ๋Œ€์นญ์„ฑ์— ํ•ด๋‹นํ•œ๋‹ค.

 

ํ•˜๋‚˜์˜ ๊ฐ์ฒด์— ์žˆ๋Š” ๋ชจ๋“  ํ•„๋“œ๋Š” ๊ฐ€๊ธ‰์  ํ•จ๊ป˜ ๋ณ€ํ•ด์•ผํ•œ๋‹ค.

ํŠน์ • ๋ฉ”์†Œ๋“œ๊ฐ€ ์ˆ˜ํ–‰๋  ๋•Œ๋งŒ ์‚ฌ์šฉ๋˜๋Š” ํ•„๋“œ๋Š” ๊ทธ ๋ฉ”์†Œ๋“œ์˜ ์ง€์—ญ ๋ณ€์ˆ˜๋กœ ์„ ์–ธ๋˜์–ด์•ผํ•œ๋‹ค.

 

์˜ˆ๋ฅผ ๋“ค์–ด ํ•จ๊ป˜ ๋ณ€ํ™”ํ•˜๋Š” ๋‘ ๊ฐœ์˜ ํ•„๋“œ(value, currency)๊ฐ€ ์žˆ๋‹ค๋ฉด ํ•˜๋‚˜์˜ ๋„์šฐ๋ฏธ ๊ฐ์ฒด(Money)์— ๋„ฃ๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.

setAmount(Money value) {
	this.money = money;
}

 

 

Gradle ์ด๋ž€?

์ž๋ฐ”๋ฅผ ์ด์šฉํ•ด์„œ ์ฝ”๋”ฉ์„ ํ•˜๋‹ค๋ณด๋ฉด Gradle ์„ ์‚ฌ์šฉํ•ด์„œ ๋นŒ๋“œํ•˜๋Š” ๊ฒฝํ—˜์„ ๋งŽ์ด ํ•œ๋‹ค.

๊ทผ๋ฐ ์ด Gradle ์€ ์ •ํ™•ํžˆ ์–ด๋–ค ์—ญํ• ์„ ํ• ๊นŒ?

๊ณต์‹๋ฌธ์„œ๋ฅผ ๋จผ์ € ์ฐพ์•„๋ณด๋ฉด,

Gradle is an open-source build automation tool flexible enough to build almost any type of software.

 

Gradle ์€ ์Šค์Šค๋กœ ๋นŒ๋“œ ์ž๋™ํ™”(build automation) ํˆด์ด๋ผ๊ณ  ์†Œ๊ฐœํ•˜๊ณ  ์žˆ๋‹ค.

 

๐Ÿง ๋นŒ๋“œ๋ž€ ๋ฌด์—‡์ผ๊นŒ?

์ž๋ฐ”์ฝ”๋“œ๋ฅผ ์ปดํŒŒ์ผ ๊ณผ์ •์„ ๊ฑฐ์ณ์„œ ์ปดํ“จํ„ฐ๊ฐ€ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ํŒŒ์ผ๋กœ ๋งŒ๋“ค์–ด ์ฃผ๋Š” ๊ณผ์ •์„ ๋งํ•œ๋‹ค.

 

 

๊ทธ๋ ‡๋‹ค๋ฉด ์ผ๋‹จ Gradle์ด ์ด๋Ÿฌํ•œ ๊ณผ์ •์„ ๊ด€๋ฆฌํ•ด์คŒ์œผ๋กœ์จ ๊ฐœ๋ฐœ์ž์˜ ์‚ถ์„ ์ข€ ๋” ์œคํƒํ•˜๊ฒŒ ํ•ด์ค€๋‹ค๋Š” ๊ฒƒ์€ ์•Œ๊ฑฐ๊ฐ™๋‹ค.

๊ตฌ์ฒด์ ์œผ๋กœ Gradle์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ผ์„ ํ•œ๋‹ค. (์Šคํ”„๋ง ๊ธฐ์ค€)

 

Compile

- ์ž๋ฐ” ํŒŒ์ผ์„ ์ปดํ“จํ„ฐ๊ฐ€ ์ฝ์„ ์ˆ˜ ์žˆ๋Š” ๋ฐ”์ดํŠธ ์ฝ”๋“œ๋กœ ๋ณ€ํ™˜ํ•ด์ค€๋‹ค.

 

Test

- ํ”„๋กœ๊ทธ๋žจ์ด ์ œ๋Œ€๋กœ ๋Œ์•„๊ฐˆ ์ˆ˜ ์žˆ๋Š” ์ง€์— ๋Œ€ํ•œ ํ…Œ์ŠคํŠธ๋ฅผ ์ง€์›ํ•ด์ค€๋‹ค.

 

Pakaging

- ์ปดํŒŒ์ผ ๋œ ์ฝ”๋“œ๋กœ ์‹คํ–‰ ํŒŒ์ผ์„ ๋งŒ๋“ ๋‹ค.

 

Deploy & Run

- ์‹ค์ œ๋กœ ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰์‹œํ‚จ๋‹ค. ์˜ˆ๋ฅผ ๋“ค๋ฉด ์Šคํ”„๋ง ์„œ๋ฒ„๋ฅผ ๋Œ๋ฆฌ๋Š” ๊ฒƒ๊ณผ ๊ฐ™๋‹ค.

 

ํ•˜์ง€๋งŒ Gradle์ด ๋‹ค๋ฅธ ํˆด๊ณผ ๋น„๊ตํ–ˆ์„ ๋•Œ ์–ด๋–ค ์žฅ์ ์ด ์žˆ์–ด์„œ ๋งŽ์€ ๊ฐœ๋ฐœ์ž๋“ค์ด ์‚ฌ์šฉํ•˜๋Š” ๊ฑธ๊นŒ?

 

Gradle, ์™œ ์“ฐ๋Š” ๊ฑธ๊นŒ?

 

๋‹ค๋ฅธ ํˆด๋“ค๊ณผ ๋น„๊ตํ•ด๋ดค์„ ๋•Œ Gradle์ด ๊ฐ€์ง€๋Š” ์žฅ์ ์ด ๋ช‡๊ฐ€์ง€ ์žˆ๋‹ค.

๊ทธ ์žฅ์ ๋“ค์— ๋Œ€ํ•ด์„œ ํ•˜๋‚˜์”ฉ ์•Œ์•„๋ณด์ž

 

๊ฐ„๊ฒฐํ•œ ์Šคํฌ๋ฆฝํŠธ

 

Gradle์˜ ์žฅ์ ์€ ๋จผ์ € ์Šคํฌ๋ฆฝํŠธ๋งŒ ๋ด๋„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

๋จผ์ € ๊ฒฝ์Ÿ์ž์ธ Maven์˜ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋ณด์ž !

 

Maven์˜ ๊ฒฝ์šฐ์—๋Š” XML ํ˜•์‹์˜ ์Šคํฌ๋ฆฝํŠธ ๊ตฌ์กฐ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์–ด์„œ ๊ฐ€๋…์„ฑ๋„ ๋–จ์–ด์ง€๊ณ  ์ž‘์„ฑํ•˜๊ธฐ๋„ ์–ด๋ ต๋‹ค.

ํ•˜์ง€๋งŒ Gradle ๊ฐ™์€ ๊ฒฝ์šฐ ์„ค์ • ์ฃผ์ž… ๋ฐฉ์‹์œผ๋กœ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ž‘์„ฑํ•ด์คŒ์œผ๋กœ์จ ๊ฐ€๋…์„ฑ๋„ ์ข‹์•„์ง€๊ณ  ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ๋ฅผ ๋ณด๋‹ค ์‰ฝ๊ฒŒ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

๋ฉ€ํ‹ฐ ํ”„๋กœ์ ํŠธ ๋นŒ๋“œ

ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๋‹ค ๋ณด๋ฉด ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋ชจ๋“ˆ๋กœ ๊ตฌ์„ฑ๋˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๋‹ค.

ํ•˜์ง€๋งŒ ์ด ๋•Œ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋ชจ๋“ˆ์„ ๋”ฐ๋กœ ๋นŒ๋“œํ•˜๊ฒŒ ๋˜๋ฉด ๋ฒˆ๊ฑฐ๋กญ๊ธฐ๋„ ํ•˜๊ณ  ์‹ค์ˆ˜ํ•  ๊ฐ€๋Šฅ์„ฑ๋„ ์ƒ๊ธด๋‹ค.

 

Gradle์€ ์ด๋Ÿฐ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋ชจ๋“ˆ๋“ค์„ ๋™์‹œ์— ๋นŒ๋“œํ•  ์ˆ˜ ์žˆ๋‹ค.

๋˜ํ•œ ๋ชจ๋“ˆ๋งˆ๋‹ค ๊ณตํ†ต๋œ ์ฝ”๋“œ , ๋ณ„๋„์˜ ์ฝ”๋“œ๋ฅผ ๋ถ„๋ฆฌํ•ด ์คŒ์œผ๋กœ์จ ์ฝ”๋“œ์˜ ์ค‘๋ณต์„ ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค.

 

๋น ๋ฅธ ๋นŒ๋“œ ์†๋„

์œ„์—์„œ ๋งํ•œ ๊ฒƒ๋“ค๋งŒ ๋ชจ๋‘ ํ•ด์ค€๋‹ค๊ณ  ํ•ด๋„ ์ถฉ๋ถ„ํžˆ ์“ธ๋งŒํ•œ ํˆด์ด๋‹ค.

๊ทผ๋ฐ ์—ฌ๊ธฐ์— ์†๋„๊นŒ์ง€ ๋น ๋ฅด๋‹ค๋ฉด ? ๊ทธ ์–ด๋ ค์šด ๊ฑธ Gradle ์ด ๋‹ค์‹œ ํ•ด๋‚ด๋ฒ„๋ ธ๋‹ค.

 

ํ‘œ๋ฅผ ๋ณด๋ฉด Gradle ์€ ๊ฒฝ์Ÿ์‚ฌ ๋Œ€๋น„ ์›”๋“ฑํžˆ ๋น ๋ฅธ ์†๋„๋ฅผ ๋ณด์—ฌ์ฃผ๊ณ  ์žˆ๋‹ค.

ํŽธ๋ฆฌํ•˜๊ณ  ๋น ๋ฅธ Gradle .. ์•ˆ ์“ธ ์ด์œ ๊ฐ€ ์—†์ง€ ์•Š์„๊นŒ?

์ž ๊น Gradle ์€ ๋Œ€์ฒด ์–ด๋–ป๊ฒŒ ๋งŒ๋“ค์—ˆ๊ธธ๋ž˜ ๋น ๋ฅธ๊ฑธ๊นŒ?

 

Gradle, ์™œ ๋น ๋ฅธ ๊ฑธ๊นŒ?

๋‹ค์‹œ Gradle์˜ ๊ณต์‹ ๋ฌธ์„œ๋ฅผ ๋ณด์ž

Gradle avoids unnecessary work by only running tasks that need to do work because inputs or outputs have changed. Gradle uses various caches to reuse outputs from previous builds. With a shared build cache, you can even reuse outputs from other machines.

 

 

์ด ๋ฌธ์žฅ์„ ์š”์•ฝํ•˜๋ฉด Gradle์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ถˆํ•„์š”ํ•œ ์ž‘์—…์„ ๋ฐฉ์ง€ํ•˜๊ณ  ์บ์‹œ๋ฅผ ํ†ตํ•ด ์žฌ์‚ฌ์šฉํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

 

์ด๊ฒƒ์„ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋Œ€ํ‘œ์ ์œผ๋กœ 3๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค.

 

์ ์ง„์  ๋นŒ๋“œ

๋นŒ๋“œ๋ฅผ ํ•  ๋•Œ ๋ชจ๋“  ํŒŒ์ผ๋“ค์„ ๋‹ค์‹œ ๋นŒ๋“œํ•˜๋Š” ๊ฒŒ ์•„๋‹Œ , ๋ฐ”๋€ ํŒŒ์ผ๋“ค๋งŒ ์ถ”์ ํ•ด์„œ ํ•ด๋‹น ํŒŒ์ผ๋งŒ ๋นŒ๋“œํ•˜๋Š” ๊ฒƒ์„ ๋งํ•œ๋‹ค.

 

์˜ˆ๋ฅผ ๋“ค์–ด 20๊ฐœ์˜ ํŒŒ์ผ์„ ๋นŒ๋“œํ•  ๋•Œ 15๊ฐœ์˜ ํŒŒ์ผ์ด ๊ทธ๋Œ€๋กœ๋ฉด ๋‚˜๋จธ์ง€ 5๊ฐœ์˜ ํŒŒ์ผ๋งŒ ๋นŒ๋“œํ•˜๋Š” ํ˜•์‹์ด๋‹ค.

 

๋นŒ๋“œ ์บ์‹œ

์—ฌ๋Ÿฌ ๋ฒˆ์˜ ๋นŒ๋“œ๋ฅผ ์‹คํ–‰ํ•  ๋•Œ Gradle์€ ์ด๋ฏธ ๋นŒ๋“œ๊ฐ€ ๋œ ๊ฒฐ๊ณผ๋ฌผ๋“ค์„ ๋นŒ๋“œ ์บ์‹œ์— ๋‹ด์•„๋†“๋Š”๋‹ค.

์ถ”ํ›„์— ํ•ด๋‹น ํŒŒ์ผ์— ๋Œ€ํ•ด ๋‹ค์‹œ ๋นŒ๋“œ๋ฅผ ํ•˜๊ฒŒ ๋˜๋ฉด, ๋‹ค์‹œ ๋นŒ๋“œํ•  ํ•„์š”์„ฑ์„ ์ค„์—ฌ์คŒ์œผ๋กœ์จ ๋นŒ๋“œ๋ฅผ ๋”์šฑ ๋นจ๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.

 

ํ˜น์€ ๋นŒ๋“œ ์บ์‹œ๋ฅผ ๋กœ์ปฌ์—์„œ๋งŒ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹Œ , ํŒ€์›๋“ค๋ผ๋ฆฌ ๋นŒ๋“œ ์บ์‹œ๋ฅผ ๊ณต์œ ํ•ด์„œ ๋นŒ๋“œ ๊ฒฐ๊ณผ๋“ค์„ ์บ์‹œ์— ๋‹ด์•„ ์žฌ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

๋ฐ๋ชฌ ํ”„๋กœ์„ธ์Šค

 

๋ฐ๋ชฌ ํ”„๋กœ์„ธ์Šค๋ฅผ ์•Œ์•„๋ณด๊ธฐ ์ „์— ๋ฐ๋ชฌ์€ ๋ฌด์—‡์ผ๊นŒ?

Gradle์—์„œ ๋˜ ์นœ์ ˆํ•˜๊ฒŒ ๋ฐ๋ชฌ์˜ ์ •์˜๋ฅผ ๋งํ•ด์ฃผ๊ณ  ์žˆ๋‹ค.

A daemon is a computer program that runs as a background process, rather than being under the direct control of an interactive user.

 

 

ํ•ด์„ํ•˜์ž๋ฉด , ๋ฐ๋ชฌ์€ ์‚ฌ์šฉ์ž๊ฐ€ ์ง์ ‘ ์ œ์–ดํ•˜์ง€ ์•Š๊ณ  ๋ฐฑ๊ทธ๋ผ์šด๋“œ ํ”„๋กœ์„ธ์Šค๋กœ ๋Œ์•„๊ฐ€๋Š” ํ”„๋กœ๊ทธ๋žจ์ด๋‹ค.

 

์ด๊ฒƒ์„ ๋นŒ๋“œ์— ์–ด๋–ป๊ฒŒ ๋„์ž…ํ–ˆ์„๊นŒ?

Gradle์€ JVM์ด๋ผ๋Š” ๊ฐ€์ƒ ์žฅ์น˜ ์œ„์—์„œ ์‹คํ–‰๋˜๋ฉฐ ์ด JVM์€ ์—ฌ๋Ÿฌ ์ดˆ๊ธฐํ™” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋“ค์„ ์‚ฌ์šฉํ•˜๋ฉฐ, ์ด ๊ณผ์ •์€ ๊ฝค ์‹œ๊ฐ„์ด ๊ฑธ๋ฆด ์ˆ˜ ์žˆ๋‹ค.

๋•Œ๋ฌธ์— ๋งค๋ฒˆ ์ƒˆ๋กœ ๋นŒ๋“œํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹Œ ๋™์ผํ•œ ๋นŒ๋“œ๋Š” ์ด๋ฏธ ์‹คํ–‰์ค‘์ธ ๋ฐ๋ชฌ์„ ์ด์šฉํ•˜์—ฌ์„œ ๋นŒ๋“œ ์‹œ๊ฐ„์„ ์ค„์—ฌ์ค€๋‹ค.

 

 

 

์˜ˆ๋ฅผ ๋“ค์–ด์„œ ๋…ธํŠธ๋ถ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์„ ๋•Œ ์•„์˜ˆ ๋„๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ๋‹ค์Œ ์‚ฌ์šฉ์„ ์œ„ํ•ด ์Šฌ๋ฆฝ ๋ชจ๋“œ๋กœ ๋‘๋Š” ๊ฒƒ๊ณผ ๊ฐ™๋‹ค.

 

Gradle, ์–ด๋–ป๊ฒŒ ์“ฐ๋Š” ๊ฑธ๊นŒ?

์ด๋ ‡๊ฒŒ ์ข‹์€ Gradle , ์–ด๋–ป๊ฒŒ ์“ฐ๋Š” ์ง€ ์ •๋„๋Š” ์•Œ์•„๋ณด์ž !

์˜ค๋Š˜์€ ๋นŒ๋“œ ์Šคํฌ๋ฆฝํŠธ์—์„œ ์˜์กด์„ฑ์„ ์„ค์ •ํ•˜๋Š” ๋ถ€๋ถ„์„ ์•Œ์•„๋ณผ ๊ฒƒ์ด๋‹ค.

์˜์กด์„ฑ ์„ค์ •์„ ์œ„ํ•ด์„  build.gradle์˜ dependencies ๋ถ€๋ถ„์„ ๋ด์•ผํ•œ๋‹ค.

 

 

Gradle์—์„  ์˜ˆ์‹œ ์ฝ”๋“œ์ฒ˜๋Ÿผ ๊ฐ„ํŽธํ•˜๊ฒŒ ์˜์กด์„ฑ์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

๊ทผ๋ฐ ์•ž์— ์žˆ๋Š” ์ฝ”๋“œ๋ฅผ ๋ณด๋ฉด ๋ชจ๋‘ ๋‹ค๋ฅธ ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋‹ค.

์ด ์ฝ”๋“œ๋“ค์€ ์™œ ์žˆ๊ณ  ์–ด๋–ค ๊ธฐ๋Šฅ๋“ค์„ ์ˆ˜ํ–‰ํ•˜๋Š” ์ง€ ์•Œ์•„๋ณด์ž!

 

compileOnly

์ปดํŒŒ์ผ ์‹œ์—๋งŒ ์˜์กด์„ฑ์„ ์ •์˜ํ•œ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด ๋กฌ๋ณต๊ฐ™์€ ๊ฒฝ์šฐ , ์–ด๋…ธํ…Œ์ด์…˜์„ ๋ณด๊ณ  getter , setter๋ฅผ ์ปดํŒŒ์ผ ํ•ด์ฃผ๊ณ  ๋Ÿฐํƒ€์ž„์—๋Š” ๋„ฃ์ง€ ์•Š๋Š”๋‹ค.

runtimeOnly

๋Ÿฐํƒ€์ž„ ์‹œ์—๋งŒ ์˜์กด์„ฑ์„ ์ •์˜ํ•œ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด DB๊ด€๋ จ ํ˜น์€ ๋กœ๊ทธ ์˜์กด์„ฑ ์ฃผ์ž… ์‹œ์— ์‚ฌ์šฉํ•œ๋‹ค.

test

์•ž์— test๊ฐ€ ๋ถ™์–ด์žˆ์œผ๋ฉด ํ•ด๋‹น ์˜์กด์„ฑ์„ ํ…Œ์ŠคํŠธ ์‹œ์—๋งŒ ์‚ฌ์šฉํ•œ๋‹ค๋Š” ์˜๋ฏธ์ด๋‹ค.

 

์˜์กด์„ฑ์ด๋ž€?

๋ชจ๋“ˆ ๊ฐ„์˜ ๊ด€๊ณ„๋ฅผ ์˜ˆ๋กœ ๋“ค๋ฉด, A ๋ชจ๋“ˆ์ด B ๋ชจ๋“ˆ์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋‹ค.

์ด๊ฒƒ์„ A ๋ชจ๋“ˆ์ด B ๋ชจ๋“ˆ์— ์˜์กดํ•˜๊ณ  ์žˆ๋‹ค๊ณ  ๋งํ•œ๋‹ค.

์ฆ‰ ์˜์กด์„ฑ์ด๋ž€ ๋ชจ๋“ˆ ๊ฐ„ ์„œ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ด€๊ณ„์ด๋‹ค.

 

 

Api vs Implementation

dependencies๋ฅผ ๋ณด๋ฉด api ๋„ ์žˆ๊ณ  implementation๋„ ์žˆ๋‹ค.

๋‘˜์€ ์–ด๋–ค ์ฐจ์ด๊ฐ€ ์žˆ์„๊นŒ?

๋จผ์ € ์ „์ด ์˜์กด์„ฑ์ด๋ž€ ๊ฐœ๋…์„ ์งš๊ณ  ๋„˜์–ด๊ฐˆ ํ•„์š”๊ฐ€ ์žˆ๋‹ค.

 

 

๋งŒ์•ฝ ์„œ๋กœ ์˜์กดํ•˜๊ณ  ์žˆ๋Š” ๋ชจ๋“ˆ 3๊ฐœ๊ฐ€ ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜์ž

์—ฌ๊ธฐ์„œ A ๋ชจ๋“ˆ์ด ๋ณ€๊ฒฝ๋œ๋‹ค๋ฉด ๋‚˜๋จธ์ง€ ๋ชจ๋“ˆ๋“ค์€ ์–ด๋–ป๊ฒŒ ๋ ๊นŒ?

 

๋งŒ์•ฝ ์—ฌ๊ธฐ์„œ ์˜์กดํ•˜๊ณ  ์žˆ๋Š” ๋ชจ๋“ˆ๋“ค์ด ๋ชจ๋‘ ์˜ํ–ฅ์„ ๋ฐ›๋Š”๋‹ค๋ฉด ์ „์ด ์˜์กด์„ฑ์ด ํ—ˆ์šฉ๋œ ๊ฒฝ์šฐ์ด๋‹ค.

์—ฌ๊ธฐ์„œ ๋งํ•œ ์ „์ด ์˜์กด์„ฑ์˜ ํŠน์„ฑ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ์ง€๊ฐ€ ์ฐจ์ด๋ฅผ ๊ฒฐ์ •ํ•œ๋‹ค.

 

๊ณต์‹ ๋ฌธ์„œ๋ฅผ ์ฐธ๊ณ ํ•ด๋ณด์ž

api ๋˜๋Š” compile(์ง€์› ์ค‘๋‹จ๋จ) ๋Œ€์‹  ์ด ์ข…์† ํ•ญ๋ชฉ ๊ตฌ์„ฑ์„ ์‚ฌ์šฉํ•˜๋ฉด ๋นŒ๋“œ ์‹œ์Šคํ…œ์—์„œ ๋‹ค์‹œ ์ปดํŒŒ์ผํ•ด์•ผ ํ•˜๋Š” ๋ชจ๋“ˆ ์ˆ˜๊ฐ€ ์ค„์–ด๋“ค๊ธฐ ๋•Œ๋ฌธ์— ๋นŒ๋“œ ์‹œ๊ฐ„์ด ํฌ๊ฒŒ ๊ฐœ์„ ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

 

์˜ˆ๋ฅผ ๋“ค์–ด implementation ์ข…์† ํ•ญ๋ชฉ์ด API๋ฅผ ๋ณ€๊ฒฝํ•˜๋ฉด Gradle์€ ์ด ์ข…์† ํ•ญ๋ชฉ๊ณผ ์ด์— ์ง์ ‘์ ์œผ๋กœ ์ข…์†๋œ ๋ชจ๋“ˆ๋งŒ ๋‹ค์‹œ ์ปดํŒŒ์ผํ•ฉ๋‹ˆ๋‹ค. ๋Œ€๋ถ€๋ถ„์˜ ์•ฑ๊ณผ ํ…Œ์ŠคํŠธ ๋ชจ๋“ˆ์€ ์ด ๊ตฌ์„ฑ์„ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

 

implementation์„ ์‚ฌ์šฉํ•˜๋ฉด, ์ข…์† ํ•ญ๋ชฉ๊ณผ ์ง์ ‘์ ์œผ๋กœ ์ข…์†๋œ ๋ชจ๋“ˆ๋งŒ ๋‹ค์‹œ ์ปดํŒŒ์ผํ•œ๋‹ค๊ณ  ๋‚˜์™€์žˆ๋‹ค.

๊ทธ๋ž˜์„œ ๋ชจ๋“ˆ ํ•˜๋‚˜๊ฐ€ ๋ณ€๊ฒฝ ๋œ๋‹ค๊ณ  ํ•ด์„œ ๋‹ค๋ฅธ ๋ชจ๋“ˆ๋“ค๊นŒ์ง€ ๋ชจ๋‘ ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š๋Š” ๊ฒƒ์ด๋‹ค.

์ฆ‰ ์ „์ด ์˜์กด์„ฑ์„ ๊ฐ€์ง€์ง€ ์•Š๋Š”๋‹ค๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

๋ฐ˜๋Œ€๋กœ api๋Š” ์ „์ด ์˜์กด์„ฑ์„ ๊ฐ€์ง€๊ธฐ ๋•Œ๋ฌธ์— ์˜์กดํ•˜๊ณ  ์žˆ๋Š” ๋ชจ๋“  ๋ชจ๋“ˆ๋“ค์ด ์˜ํ–ฅ์„ ๋ฐ›๊ณ  ์ด๊ฒƒ์€ ๊ณง ์ปดํŒŒ์ผ ์‹œ๊ฐ„์— ์˜ํ–ฅ์„ ์ค€๋‹ค.

 

์™œ api๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋‹ค๋ฅธ ๋ชจ๋“ˆ๋“ค๊นŒ์ง€ ์˜ํ–ฅ์„ ๋ฐ›์„๊นŒ?

API๋Š” ์ปดํŒŒ์ผ class-path ์—๋„ ๋…ธ์ถœ๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ปดํŒŒ์ผ ์‹œ์— ๋‹ค๋ฅธ ๋ชจ๋“ˆ๋“ค์ด ์˜ํ–ฅ์„ ๋ฐ›๊ฒŒ ๋œ๋‹ค.

ํ•˜์ง€๋งŒ implementation์€ ๋Ÿฐํƒ€์ž„ class-path ์—๋งŒ ๋…ธ์ถœ์ด ๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋‹ค์‹œ ์ปดํŒŒ์ผ ํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค.

 

๐Ÿง ๋‘ ๊ฐ€์ง€ class-path ์˜ ์ฐจ์ด๋ฅผ ์•Œ์•„๋ณด์ž

์ปดํŒŒ์ผ class-path : Java ์ฝ”๋“œ๋ฅผ class ํŒŒ์ผ๋กœ ์ปดํŒŒ์ผ ํ•  ๋•Œ ํƒ์ƒ‰ํ•˜๋Š” ๊ฒฝ๋กœ

๋Ÿฐํƒ€์ž„ class-path : ์ปดํŒŒ์ผ ๋œ ์ž๋ฐ” ์ฝ”๋“œ๋ฅผ JVM์ด ์‹คํ–‰ํ•  ๋•Œ ํƒ์ƒ‰ํ•˜๋Š” ๊ฒฝ๋กœ

 

์ •๋ฆฌํ•˜์ž๋ฉด,

api ๋Š” ์ปดํŒŒ์ผ class-path , ๋Ÿฐํƒ€์ž„ class-path ์— ๋…ธ์ถœ๋œ๋‹ค.

implementation์€ ๋Ÿฐํƒ€์ž„ class-path์—๋งŒ ๋…ธ์ถœ๋œ๋‹ค.

 

implementation์„ ์‚ฌ์šฉํ•˜๋ฉด ๊ฝค ๋งŽ์€ ์žฅ์ ๋“ค์ด ์žˆ๋‹ค.

  1. ์ปดํŒŒ์ผ , ๋Ÿฐํƒ€์ž„ class-path๋ฅผ ๋ถ„๋ฅ˜ํ•จ์œผ๋กœ์จ ๋” ๋น ๋ฅธ ์ปดํŒŒ์ผ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
  2. ์ปดํŒŒ์ผ ์‹œ์— ๋‹ค๋ฅธ ๋ชจ๋“ˆ์—์„œ ์›์น˜์•Š๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊นŒ์ง€ ์˜์กดํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค.

+ Recent posts