๐Ÿ“š ์ฐธ๊ณ ํ•œ ์ฑ…

 

: ์ถœ์ฒ˜ ์˜ˆ์Šค24 ํ™ˆํŽ˜์ด์ง€

 

 

- ๊ธฐ๋ณธ์ ์ธ ๊ฐœ๋…์„ ์ •๋ฆฌํ•˜๊ณ  ์ถ”๊ฐ€์ ์œผ๋กœ ๊ถ๊ธˆํ•œ ๊ฒƒ๋“ค์„ ์ •๋ฆฌํ–ˆ์Šต๋‹ˆ๋‹ค -

 

 

๐Ÿฅ ๐Ÿฅ ๐Ÿฅ

 


 

โœ”๏ธ   ์ปฌ๋ ‰์…˜ ํ”„๋ ˆ์ž„์›Œํฌ_ 624p

 

• ์ปฌ๋ ‰์…˜(collection)

: ๋™์ผํ•œ ํƒ€์ž…์„ ๋ฌถ์–ด ๊ด€๋ฆฌํ•˜๋Š” ์ž๋ฃŒ๊ตฌ์กฐ๋กœ ๋ฐ์ดํ„ฐ์˜ ์ €์žฅ ์šฉ๋Ÿ‰์„ ๋™์ ์œผ๋กœ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.

 

• ํ”„๋ ˆ์ž„์›Œํฌ(framework)

: ์„ค๊ณ„์˜ ์›์น™ ๋˜๋Š” ๊ตฌ์กฐ์— ๋”ฐ๋ผ ํด๋ž˜์Šค ๋˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์„ค๊ณ„ํ•˜๊ณ , ์„ค๊ณ„๋œ ํด๋ž˜์Šค์™€ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋ฌถ์–ด ๋†“์€ ๊ฐœ๋…์ด๋‹ค.

 

• ์ปฌ๋ ‰์…˜ ํ”„๋ ˆ์ž„์›Œํฌ

: ๋ฆฌ์ŠคํŠธ, ์Šคํƒ, ํ, ํŠธ๋ฆฌ ๋“ฑ์˜ ์ž๋ฃŒ๊ตฌ์กฐ์— ์ •๋ ฌ, ํƒ์ƒ‰ ๋“ฑ์˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๊ตฌ์กฐํ™”ํ•ด ๋†“์€ ํ”„๋ ˆ์ž„์›Œํฌ

 

์ถœ์ฒ˜: https://opentutorials.org/module/2495/14159

 

 

Q. ์ปฌ๋ ‰์…˜๊ณผ ๋ฐฐ์—ด์˜ ์ฐจ์ด์ ์€?

A. ๋ฐฐ์—ด์€ ์ƒ์„ฑ ์‹œ์ ์— ์ €์žฅ ๊ณต๊ฐ„์˜ ํฌ๊ธฐ๋ฅผ ํ™•์ •ํ•˜๋ฉฐ ํ™•์ •ํ•œ ํ›„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†๋‹ค. ๋ฐ˜๋ฉด์— ์ปฌ๋ ‰์…˜์€ ๋ฐ์ดํ„ฐ์˜ ๊ฐœ์ˆ˜์— ๋”ฐ๋ผ ๋™์ ์œผ๋กœ ์ €์žฅ๊ณต๊ฐ„์ด ๋‹ฌ๋ผ์ง„๋‹ค.

 

 

Q. ํ”„๋ ˆ์ž„์›Œํฌ์™€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ์ฐจ์ด์ ์€?

A. ์ผ๋ฐ˜์ ์œผ๋กœ ๋‹จ์ˆœํžˆ ์—ฐ๊ด€๋œ ํด๋ž˜์Šค์™€ ์ธํ„ฐํŽ˜์ด์Šค๋“ค์˜ ๋ฌถ์Œ์„ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ผ๊ณ  ํ•œ๋‹ค. ํ”„๋ ˆ์ž„์›Œํฌ์™€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ๊ฐ€์žฅ ํฐ ์ฐจ์ด์ ์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ํ๋ฆ„์˜ ์ฃผ๋„๊ถŒ์„ ๋ˆ„๊ฐ€ ์ฅ๊ณ  ์žˆ๋Š”์ง€๋ผ๊ณ  ์ƒ๊ฐํ•œ๋‹ค. ํ”„๋ ˆ์ž„์›Œํฌ๋Š” ์Šค์Šค๋กœ ์ œ์–ด ํ๋ฆ„์˜ ์ฃผ๋„๊ถŒ์„ ์žก์œผ๋ฉด, ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ์ฃผ๋„๊ถŒ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. ํ”„๋ ˆ์ž„์›Œํฌ๋Š” ํฐ ํ‹€๋กœ ๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ๋Š” ๋ฒ”์œ„์™€ ๋”ฐ๋ผ์•ผ ํ•  ๊ฐ€์ด๋“œ๊ฐ€ ์กด์žฌํ•œ๋‹ค. ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ํŠน์ • ๊ธฐ๋Šฅ์„ ๋„์™€์ฃผ๋Š” ๋„๊ตฌ์™€ ๊ฐ™์€ ์—ญํ• ์„ ํ•œ๋‹ค. 

 

 

 

 


 

 

 

 

โœ”๏ธ   List<E> ์ปฌ๋ ‰์…˜ ์ธํ„ฐํŽ˜์ด์Šค_ 626p

 

• List<E>

: ์ธํ„ฐํŽ˜์ด์Šค๋ฉฐ ๋Œ€ํ‘œ์ ์ธ ํด๋ž˜์Šค๋กœ ํฌ๊ฒŒ ArrayList<E>, Vector<E>, LinkedList<E>๊ฐ€ ์žˆ๋‹ค.

List<Integer> aList1 = new ArrayList<Integer>();
ArrayList<Integer> aList2 = new ArrayList<Integer>(30);
Vector<String> aList3 = new Vector<String>();
List<MyWork> aList4 = new LinkedList<MyWord>();
List<MyWork> aList5 = new LinkedList<MyWord>(20); // ์˜ค๋ฅ˜ ๋ฐœ์ƒ!!
์ œ๋„ค๋ฆญ์— ๋Œ€ํ•ด ๋ฐฐ์› ์—ˆ๋‹ค. ์ œ๋„ค๋ฆญ์€ ํด๋ž˜์Šค ๋‚ด๋ถ€์—์„œ ์‚ฌ์šฉํ•  ๋ฐ์ดํ„ฐ ํƒ€์ž…์„ ์™ธ๋ถ€์—์„œ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๊ธฐ๋ฒ•์œผ๋กœ, ๊บพ์‡  ๊ด„ํ˜ธ< >์•ˆ์— ํƒ€์ž…์„ ์ ๋Š”๋‹ค. ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•  ๋•Œ ์ง€์ •ํ•œ ํƒ€์ž…๊ณผ ๋‹ค๋ฅธ ํƒ€์ž…์„ ์‚ฌ์šฉํ•˜๋ฉด ์ปดํŒŒ์ผ ์‹œ์ ์— ์˜ค๋ฅ˜๋ฅผ ๋ฐœ์ƒ์‹œ์ผœ, ํƒ€์ž… ์•ˆ์ •์„ฑ์„ ๋ณด์žฅํ•ด์ค€๋‹ค.

List<E> ์ž์ฒด๋Š” ์ œ๋„ค๋ฆญ ์ธํ„ฐํŽ˜์ด์Šค๋กœ ์ด๋ฅผ ์ƒ์†ํ•œ ์ž์‹ ํด๋ž˜์Šค ๋ชจ๋‘ ์ œ๋„ค๋ฆญ ํด๋ž˜์Šค๊ฐ€ ๋œ๋‹ค. ์ฆ‰, ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•  ๋•Œ ์ œ๋„ค๋ฆญ์˜ ์‹ค์ œ ํƒ€์ž…์„ ์ง€์ •ํ•ด์•ผ ํ•œ๋‹ค. <E>์—์„œ E๋Š” ์š”์†Œ์˜ Element๋ฅผ ๋œปํ•˜์—ฌ ์—ฌ๊ธฐ์„œ ์–ด๋–ค ํƒ€์ž…์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ง€์ •ํ• ์ง€ ์™ธ๋ถ€์—์„œ ์ง€์ •ํ•œ๋‹ค. aList1์€ Integer๋กœ ์ง€์ •๋˜์—ˆ์œผ๋‹ˆ ์ •์ˆ˜๋งŒ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋Š” List๊ฐ€ ๋˜์—ˆ๋‹ค.

aList1์€ ๋ถ€๋ชจ ํƒ€์ž…์ธ List<E>๋กœ ์„ ์–ธํ–ˆ๊ณ , aList3์€ ์ž์‹ ํด๋ž˜์Šค์ธ ๊ตฌ์ฒด์ ์ธ ๊ตฌํ˜„ ํด๋ž˜์Šค ํƒ€์ž…์œผ๋กœ ์„ ์–ธํ–ˆ๋‹ค. ์ด๋Š” ์ž๋ฐ”์˜ ๋‹คํ˜•์„ฑ์„ ํ™œ์šฉํ•œ ๊ฒƒ์œผ๋กœ, ์ปฌ๋ ‰์…˜ ๊ฐ์ฒด๋Š” ๋ถ€๋ชจ ํƒ€์ž…(List)์œผ๋กœ๋„ ์„ ์–ธํ•  ์ˆ˜ ์žˆ๊ณ , ๊ตฌ์ฒด์ ์ธ ์ž์‹ ํด๋ž˜์Šค(ArrayList, LinkedList ๋“ฑ)๋กœ๋„ ์„ ์–ธํ•  ์ˆ˜ ์žˆ๋‹ค.

LinkedList<E>๋ฅผ ์ œ์™ธํ•œ ๋‚˜๋จธ์ง€ ๋Œ€ํ‘œ ๊ตฌํ˜„ ํด๋ž˜์Šค๋Š” ์ดˆ๊ธฐ ์ €์žฅ ์šฉ๋Ÿ‰์„ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ํฌํ•จํ•˜๊ณ  ์žˆ๋Š” ์ƒ์„ฑ์ž๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค. ์ด๋•Œ ์ €์žฅ ์šฉ๋Ÿ‰์€ ์‹ค์ œ ๋ฐ์ดํ„ฐ ๊ฐœ์ˆ˜๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์ €์žฅ ๊ณต๊ฐ„์˜ ํฌ๊ธฐ์™€๋Š” ๋‹ค๋ฅธ ๊ฐœ๋…์œผ๋กœ, ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•ด ๋ฏธ๋ฆฌ ํ• ๋‹นํ•ด ๋†“์€ ๋ฉ”๋ชจ๋ฆฌ ํฌ๊ธฐ๋ผ๊ณ  ์ƒ๊ฐ๋ฉด ๋œ๋‹ค.

 

 

Q. ์ œ๋„ค๋ฆญ์„ ์“ฐ์ง€ ์•Š์€ List๋Š” ์–ด๋–ป๊ฒŒ ๋‹ค๋ฅผ๊นŒ?

A. ํƒ€์ž…์„ ์ง€์ •ํ•˜์ง€ ์•Š์€ List๋กœ Object ํƒ€์ž…์œผ๋กœ ๊ฐ„์ฃผ๋˜์–ด ์•„๋ฌด ํƒ€์ž…์ด๋‚˜ ๋„ฃ์„ ์ˆ˜ ์žˆ๋‹ค. ํ•˜์ง€๋งŒ ๊บผ๋‚ผ ๋•Œ ์ผ์ผ์ด ํ˜•๋ณ€ํ™˜์ด ํ•„์š”ํ•˜๋ฉฐ ์ปดํŒŒ์ผ ์‹œ ์˜ค๋ฅ˜๋ฅผ ์žก์„ ์ˆ˜ ์—†๋‹ค๋Š” ๋‹จ์ ์„ ์ง€๋‹ˆ๊ณ  ์žˆ๋‹ค.
List list = new ArrayList();
list.add("Hello");
list.add(123);โ€‹


 

 

 

• Arrays.asList( )

: ๋ฐฐ์—ด์„ ๋ฆฌ์ŠคํŠธ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๋ฉ”์„œ๋“œ, ๋‚ด๋ถ€์ ์œผ๋กœ ๋ฐฐ์—ด์„ ๋จผ์ € ์ƒ์„ฑํ•œ ํ›„ List<E>๋กœ ๋ž˜ํ•‘ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ €์žฅ ๊ณต๊ฐ„์˜ ํฌ๊ธฐ๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†๋‹ค.

List<Integer> aList7  = Arrays.asList(1,2,3,4);
List<String> aList8  = Arrays.asList("์•ˆ๋…•","ํ•˜์„ธ์š”");
Arrays.asList( ) ์ •์  ๋ฉ”์„œ๋“œ๋Š” ๋‚ด๋ถ€ ๊ตฌ์กฐ๊ฐ€ ๋ฐฐ์—ด๊ณผ ๋™์ผํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”๊ฐ€(add( ))ํ•˜๊ฑฐ๋‚˜ ์‚ญ์ œ(remove( ))๊ฐ€ ๋ถˆ๊ฐ€ํ•˜๋‹ค. ๋‹ค๋งŒ ์ €์žฅ ๊ณต๊ฐ„์˜ ํฌ๊ธฐ๋ฅผ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๋Š” ๋ฐ์ดํ„ฐ์˜ ๋ณ€๊ฒฝ(set( ))์€ ๊ฐ€๋Šฅํ•˜๋‹ค. ์ฃผ๋กœ ๊ณ ์ •๋œ ๊ฐœ์ˆ˜์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ฑฐ๋‚˜ ํ™œ์šฉํ•  ๋•Œ ์ฃผ๋กœ ์‚ฌ์šฉํ•œ๋‹ค.(์˜ˆ๋กœ ์š”์ผ์ด ์žˆ๋‹ค.)

 

 

 

 

• List<E>์˜ ์ฃผ์š” ๋ฉ”์„œ๋“œ

๊ตฌ๋ถ„ ๋ฆฌํ„ด ํƒ€์ž… ๋ฉ”์„œ๋“œ๋ช… ๊ธฐ๋Šฅ
๋ฐ์ดํ„ฐ
์ถ”๊ฐ€
boolean add(E element) ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ž…๋ ฅ๋œ ์›์†Œ๋ฅผ ๋ฆฌ์ŠคํŠธ ๋งˆ์ง€๋ง‰์— ์ถ”๊ฐ€
void add(int index, E element) index ์œ„์น˜์— ์ž…๋ ฅ๋œ ์›์†Œ ์ถ”๊ฐ€
boolean addAll(Collection<? Extends E> c) ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ž…๋ ฅ๋œ ์ปฌ๋ ‰์…˜ ์ „์ฒด๋ฅผ ๋งˆ์ง€๋ง‰์— ์ถ”๊ฐ€
boolean addAll(int index, Collection
<? Extends E> c)
index ์œ„์น˜์— ์ž…๋ ฅ๋œ ์ปฌ๋ ‰์…˜ ์ „์ฒด๋ฅผ ์ถ”๊ฐ€
๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ E set(int index, E element) index ์œ„์น˜์˜ ์›์†Ÿ๊ฐ’์„ ์ž…๋ ฅ๋œ ์›์†Œ๋กœ ๋ณ€๊ฒฝ
๋ฐ์ดํ„ฐ ์‚ญ์ œ E remove(int index) index ์œ„์น˜์˜ ์›์†Ÿ๊ฐ’ ์‚ญ์ œ
boolean remove(Object o) ์›์†Œ ์ค‘ ๋งค๊ฐœ๋ณ€์ˆ˜ ์ž…๋ ฅ๊ณผ ๋™์ผํ•œ ๊ฐ์ฒด ์‚ญ์ œ
void clear( ) ์ „์ฒด ์›์†Œ ์‚ญ์ œ
๋ฆฌ์ŠคํŠธ
๋ฐ์ดํ„ฐ
์ •๋ณด์ถ”์ถœ
E get(int index) index ์œ„์น˜์˜ ์›์†Ÿ๊ฐ’์„ ๊บผ๋‚ด ๋ฆฌํ„ด
int size( ) ๋ฆฌ์ŠคํŠธ ๊ฐ์ฒด ๋‚ด์— ํฌํ•จ๋œ ์›์†Œ์˜ ๊ฐœ์ˆ˜
boolean isEmpty( ) ๋ฆฌ์ŠคํŠธ์˜ ์›์†Œ๊ฐ€ ํ•˜๋‚˜๋„ ์—†๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ๋ฆฌํ„ด
๋ฆฌ์ŠคํŠธ ๋ฐฐ์—ด
๋ณ€ํ™˜
Object[ ] toArray( ) ๋ฆฌ์ŠคํŠธ๋ฅผ Object ๋ฐฐ์—ด๋กœ ๋ณ€ํ™˜
T[ ] toArray(T[] t) ์ž…๋ ฅ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ „๋‹ฌํ•œ ํƒ€์ž…์˜ ๋ฐฐ์—ด๋กœ ๋ณ€ํ™˜

 

 

 

 


 

 

 

 

โœ”๏ธ   ArrayList<E> ๊ตฌํ˜„ ํด๋ž˜์Šค_ 632p

 

• ArrayList<E>

: List<E> ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•œ ๊ตฌํ˜„ ํด๋ž˜์Šค๋กœ ์ˆ˜์ง‘ํ•œ ์›์†Œ๋ฅผ ์ธ๋ฑ์Šค๋กœ ๊ด€๋ฆฌํ•˜์—ฌ ์ €์žฅ ์šฉ๋Ÿ‰์„ ๋™์ ์œผ๋กœ ๊ด€๋ฆฌํ•œ๋‹ค.

List<Integer> aList1 = new ArrayList<Integer>();
aList1.add(1);
aList1.add(2);
System.out.println(aList1.toString()); // aList1=[1,2]

aList1.addAll(1,aList1);
System.out.println(aList1.toString()); // aList1=[1,1,2,2]

aList1.set(1,5);
System.out.println(aList1.toString()); // aList1=[1,5,2,2]

aList1.remove(1);
System.out.println(aList1.toString()); // aList1=[1,2,2]

aList1.remove(new Integer(2));
System.out.println(aList1.toString()); // aList1=[1]

aList1.clear();
System.out.println(aList1.toString()); // aList1=[]
add๋Š” ๊ฐ’์„ ์ถ”๊ฐ€ํ•˜๊ณ  addAll์€ aList1 ์ „์ฒด๋ฅผ 1๋ฒˆ์งธ์— ์ถ”๊ฐ€ํ•œ๋‹ค๋Š” ์˜๋ฏธ์ด๋‹ค. set์˜ ๊ฒฝ์šฐ ๋ณ€๊ฒฝ์„ ์˜๋ฏธํ•˜๋Š”๋ฐ, ์ธ๋ฑ์Šค 1๋ฒˆ์งธ ๊ฐ’์„ 5๋กœ ๋ฐ”๊ฟจ๋‹ค. remove๋Š” ๋‘๊ฐ€์ง€๋กœ ๋‚˜๋‰œ๋‹ค. remove(int index)๋กœ ์ธ๋ฑ์Šค ๊ฐ’์„ ์ฐพ์•„ ์‚ญ์ œํ•˜๋Š” ๊ฒƒ๊ณผ remove(Object o)๋กœ ๊ฐ’์„ ์‚ญ์ œํ•˜๋Š” ๊ฒƒ. ๊ทธ๋ž˜์„œ aList1.remove(1)์€ 1๋ฒˆ์งธ ์ธ๋ฑ์Šค๋ฅผ ์‚ญ์ œํ–ˆ๊ณ , aList.remove(new Integer(2))๋Š” ์ˆซ์ž 2๋ฅผ ์ฐพ์•„ ์‚ญ์ œํ–ˆ๋‹ค. clear์€ ๋ชจ๋“  ์›์†Œ๋ฅผ ์‚ญ์ œํ•œ๋‹ค๋Š” ์˜๋ฏธ๋‹ค. 

 

 

Q. remove์—์„œ ์›์†Œ์˜ ๊ฐ’์„ ์‚ญ์ œํ•˜๊ณ  ์‹ถ์„ ๋•Œ new Integer(2)์™€ ๊ฐ™์ด ์“ฐ๋Š”๋ฐ, ์™œ new๋ฅผ ๋ถ™์ด๋Š”๊ฑธ๊นŒ?

A. ์ธ๋ฑ์Šค ๊ฐ’์œผ๋กœ ์‚ญ์ œํ•˜๋Š” ๋ฐฉ์‹๊ณผ ํ˜ผ๋™ํ•˜์ง€ ์•Š๊ธฐ ์œ„ํ•ด ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๋„๋ก ํ•œ๋‹ค.  alist.remove(new Integer(2))์€ ๊ฐ’์ด 2์ด integer ๊ฐ์ฒด๋ฅผ ์ฐพ์•„ ์‚ญ์ œํ•˜๋ผ๋Š” ์˜๋ฏธ๋กœ ์ผ๋ จ์˜ ๊ณผ์ •์„ ์‚ดํŽด๋ณด์ž. ์ฒซ๋ฒˆ์งธ๋กœ new Integer(2)์„ ํ†ตํ•ด ๊ฐ’์ด 2์ธ Integer ๊ฐ์ฒด๋ฅผ ํ•˜๋‚˜ ์ƒ์„ฑํ•œ๋‹ค. ๊ทธ ๋‹ค์Œ remove(Object o)๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด์„œ ์ด ๊ฐ์ฒด๋ฅผ ์ธ์ž๋กœ ๋„˜๊ธด๋‹ค. ๋ฆฌ์ŠคํŠธ๋Š” ๋‚ด๋ถ€์ ์œผ๋กœ equals() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๋ฆฌ์ŠคํŠธ ์•ˆ์— ์žˆ๋Š” ์š”์†Œ๋“ค๊ณผ ์ด ๊ฐ์ฒด2๊ฐ€ ๊ฐ™์€์ง€ ๋น„๊ต ํ›„ ๊ฐ™์€ ๊ฐ’์ด ์žˆ์œผ๋ฉด ์‚ญ์ œํ•œ๋‹ค. Java 5๋ถ€ํ„ฐ ์˜คํ† ๋ฐ•์‹ฑ(๋ฐ•์‹ฑ๊ณผ ์–ธ๋ฐ•์‹ฑ์„ ์ž๋™์ ์œผ๋กœ ์ฒ˜๋ฆฌ)์ด ์žˆ์–ด์„œ remove(Integer.valueOf(2))์ด๋‚˜ remove((Integer)2)๋„ ๊ฐ€๋Šฅํ•˜๊ธฐ๋Š” ํ•˜๋‚˜ new๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์‚ญ์ œํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€์žฅ ์•ˆ์ „ํ•˜๋‹ค.

 

 

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

System.out.println(aList2.isEmpty); // true

aList2.add(1);
aList2.add(2);
aList2.add(3);
System.out.println(aList2.toString()); // aList2 = [1,2,3]
System.out.println("size: " + aList2.size()); // size: 3
System.out.println("0๋ฒˆ์งธ: " + aList2.get(0))); // 0๋ฒˆ์งธ: 1
isEmpty( )๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ํ•˜๋‚˜๋„ ์—†์„ ๋•Œ๋งŒ true๊ฐ’์„ ๋ฆฌํ„ดํ•œ๋‹ค. ์ฃผ๋กœ ๋ฐ์ดํ„ฐ์˜ ์กด์žฌ ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค. size( )๋Š” ์‹ค์ œ ๋ฐ์ดํ„ฐ ๊ฐœ์ˆ˜๋ฅผ ๋ฆฌํ„ดํ•˜๋ฉฐ ์ถ”๊ฐ€์™€ ์‚ญ์ œ๊ฐ€ ์ด๋ค„์ง€๋ฉด ๊ทธ๋•Œ๋งˆ๋‹ค ๊ฐ’์€ ๋ณ€๊ฒฝ๋  ๊ฒƒ์ด๋‹ค. get(int index)๋Š” ํŠน์ • ์œ„์น˜์˜ ๊ฐ’์„ ๊ฐ€์ ธ์˜ฌ ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.

 

 

Q. ์ •์ˆ˜ํ˜•์„ ๋‹ด๋Š” ๋ฆฌ์ŠคํŠธ์ธ๋ฐ ์ถœ๋ ฅํ•  ๋•Œ toString( )์„ ์‚ฌ์šฉํ•ด์•ผํ•˜๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ผ๊นŒ?

A. toString( ) ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์•„๋„ ์ž๋™์œผ๋กœ ํ˜ธ์ถœ๋˜๊ธด ํ•˜๋Š”๋ฐ, ๊ฒฐ๊ตญ ๋‚ด๋ถ€์ ์œผ๋กœ toString์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋‹ค. toString์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ๋ฅผ ๋ณด๋ฉด ๋ฌธ์ž์—ด์„ ์ถœ๋ ฅํ•  ๊ฒฝ์šฐ ํ˜น์€ ๊ฐ์ฒด๋ฅผ ์ถœ๋ ฅํ•˜๋Š” ๊ฒฝ์šฐ์ด๋‹ค. ๋ฆฌ์ŠคํŠธ์— ๋‹ด๊ฒจ์žˆ๋Š” ๊ฒƒ์ด ์ •์ˆ˜ ํƒ€์ž…์ด์–ด๋„ ๋ฆฌ์ŠคํŠธ ์ž์ฒด๋ฅผ ๊ฐ์ฒด๋กœ ๋ถ„๋ฅ˜ํ•˜๊ธฐ ๋•Œ๋ฌธ์— Object๋กœ์„œ toString( )์„ ํ˜ธ์ถœํ•œ๋‹ค.

 

 

 

 


 

 

 

โœ”๏ธ   Vector<E>, LinkedList<E> ๊ตฌํ˜„ ํด๋ž˜์Šค_ 639p

 

• Vector<E>

: List<E> ๊ณตํ†ต์ ์ธ ํŠน์„ฑ์„ ๊ฐ€์ง€๋ฉฐ, ๋™๊ธฐํ™” ๋ฉ”์„œ๋“œ๋กœ ๊ตฌํ˜„๋ผ ๋ฉ€ํ‹ฐ ์“ฐ๋ ˆ๋“œ์— ์ ํ•ฉํ•˜๋‹ค.

List<Integer> vector1 = new Vector<Integer>();
๋™๊ธฐํ™”๋ฉ”์„œ๋“œ(synchronized method)๋กœ ๊ตฌํ˜„๋œ Vector<E>๋Š” ํ•˜๋‚˜์˜ ๊ณต์œ  ๊ฐ์ฒด๋ฅผ 2๊ฐœ์˜ ์“ฐ๋ ˆ๋“œ๊ฐ€ ๋™์‹œ์— ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค. ํ•˜๋‚˜์˜ ์“ฐ๋ ˆ๋“œ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๊ณ  ๋˜ ํ•˜๋‚˜์˜ ์“ฐ๋ ˆ๋“œ๊ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ญ์ œํ•˜๋Š” ์ž‘์—…์„ ๋™์‹œ์— ์ˆ˜ํ–‰ํ•ด ์ž‘์—…์ด ์ถฉ๋Œํ•˜๋Š” ์ƒํ™ฉ์„ ๋ฐฉ์ง€ํ•œ๋‹ค. Vector<E>๋Š” ArrayList<E>์™€ ๋™์ผํ•œ ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ํ•˜์ง€๋งŒ, ๋ฉ€ํ‹ฐ ์“ฐ๋ ˆ๋“œ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ–ˆ๋‹ค. ๋งŒ์•ฝ ํ•˜๋‚˜์˜ ์“ฐ๋ ˆ๋“œ๋งŒ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ๋Š” Vector<E>๋ง๊ณ  ArrayList<E>๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๋” ์ ํ•ฉํ•˜๋‹ค.

 

 

 

• LinkedList<E>

: List<E> ๊ณตํ†ต์ ์ธ ํŠน์„ฑ์„ ๊ฐ€์ง€๋ฉฐ, ์•ž๋’ค ๊ฐ์ฒด์˜ ์ •๋ณด๋ฅผ ์ €์žฅํ•˜๋ฉฐ ๊ฐ์ฒด ์ƒ์„ฑ์‹œ ์ €์žฅ ์šฉ๋Ÿ‰์„ ์ง€์ •ํ•  ์ˆ˜ ์—†๋‹ค.

List<E> aLinkedList1 = new LinkedList<Integer>();

 

LinkedList<E>๋Š” ArrayList<E>์™€ ๊ฐ™์ด ๋™๊ธฐํ™”ํ•˜์ง€ ์•Š๊ธฐ ๋–„๋ฌธ์— ์‹ฑ๊ธ€ ์“ฐ๋ ˆ๋“œ์— ์ ํ•ฉํ•˜๋‹ค. ArrayList<E>์™€ ๋‹ค๋ฅธ ์ ์€ ์ €์žฅ ์šฉ๋Ÿ‰์„ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๊ฐ–๋Š” ์ƒ์„ฑ์ž๊ฐ€ ์—†์–ด ์ €์žฅ ์šฉ๋Ÿ‰์„ ์ง€์ •ํ•  ์ˆ˜ ์—†๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋‚ด๋ถ€์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ๋ฐฉ์‹์ด ๋‹ค๋ฅธ๋ฐ, ArrayList<E>๋Š” ์ธ๋ฑ์Šค์˜ ๊ฐ’์œผ๋กœ ์ €์žฅํ•˜์ง€๋งŒ LinkedList<E>๋Š” ์•ž๋’ค ๊ฐ์ฒด์˜ ์ •๋ณด๋ฅผ ์ €์žฅํ•˜์—ฌ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๊ฐ€ ์„œ๋กœ ์—ฐ๊ฒฐ๋œ ํ˜•ํƒœ๋ฅผ ์ด๋ฃฌ๋‹ค.

0๋ฒˆ์งธ์— ์ƒˆ๋กœ์šด ์›์†Œ ํ•˜๋‚˜๊ฐ€ ๋“ค์–ด์„ฐ๋‹ค. ArrayList<E>๋Š” 0๋ฒˆ์งธ ์ดํ›„์˜ ๋ชจ๋“  ์›์†Œ๋“ค์ด ๋’ค๋กœ ๋ฐ€๋ ค๋‚œ๋‹ค. ํ•˜์ง€๋งŒ LinkedList<E>๋Š” ๊ฐ ์›์†Œ์˜ ์•ž๋’ค ๊ฐ์ฒด ์ •๋ณด๋งŒ ๊ฐ€์ง€๊ณ  ์˜ค๋ฉด ๋˜๋ฏ€๋กœ ์–ด๋”˜๊ฐ€์— ๊ฐ’์ด ์ถ”๊ฐ€๋˜์–ด๋„ ์•ž๋’ค ์ •๋ณด๋งŒ ์ˆ˜์ •ํ•˜๋ฉด ๋œ๋‹ค. ์ด๋Ÿฐ ๊ฒƒ์„ ์‚ดํŽด๋ณด๋ฉด ๊ฐ’์ด ์ถ”๊ฐ€๋˜๋ฉด ArrayList<E>์˜ ์†๋„๊ฐ€ LinkedList<E>๋ณด๋‹ค ๋А๋ฆฐ ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค. ๋Œ€์‹  ์–ด๋–ค ๊ฐ’์„ ์ฐพ์•„์•ผํ•˜๋Š” ์ƒํ™ฉ์ด๋ผ๋ฉด, ์ธ๋ฑ์Šค ๋ฒˆํ˜ธ๋กœ ์ฐพ์„ ์ˆ˜ ์—†์œผ๋‹ˆ ์ฒ˜์Œ๋ถ€ํ„ฐ ํ•˜๋‚˜ํ•˜๋‚˜ ํ™•์ธํ•ด์•ผํ•˜๋Š” LinkedList<E>๊ฐ€ ํ›จ์”ฌ ๋А๋ฆด ๊ฒƒ์ด๋‹ค.

 

<์ถœ์ฒ˜ ์ธํ”„๋Ÿฐ>

 

 

๊ฐ•์˜ ์„น์…˜ 3์—์„œ ๋งจ ์ฒ˜์Œ ์‹คํ–‰ํ–ˆ์„๋•Œ๋Š” ์ž˜ ๋Œ์•„๊ฐ€๋‹ค๊ฐ€,
์ˆ˜์—… ์ง„ํ–‰์— ๋”ฐ๋ผ ์„ค์ •์„ ๋ฐ”๊พธ๋ฉด์„œ ๊ฐ‘์ž๊ธฐ ์‹คํ–‰์ด ๋˜์ง€ ์•Š์•˜๋‹ค.
์˜ค๋ฅ˜๊ฐ€ ์™œ ๋ฐœ์ƒํ–ˆ๋Š”์ง€ ์ฐพ์•„๋ณด๊ณ  ํ•ด๊ฒฐ์„ ํ•ด๋ณผ ๊ฒƒ์ด๋‹ค.

 

 

 

โœฆ ์—๋Ÿฌ๋‚ด์šฉ :

Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled.
2025-06-17T12:32:24.842+09:00 ERROR 46814 --- [servlet] [           main] o.s.boot.SpringApplication               : Application run failed

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'servletComponentRegisteringPostProcessor': Instantiation of supplied bean failed

 

 

โœฆ ์›์ธ : ์—๋Ÿฌ๋ฅผ ์‚ดํŽด๋ณด๋ฉด Spring์ด servletComponentRegisteringPostProcessor๋ผ๋Š” ๋นˆ์„ ๋งŒ๋“ค๋ ค๊ณ  ํ–ˆ๋Š”๋ฐ, ํ•ด๋‹น ๋นˆ์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•˜์ง€ ๋ชปํ•ด์„œ ์‹คํŒจํ–ˆ๋‹ค๊ณ  ์จ์žˆ๋‹ค. 

 

 

โœฆ ์ด์œ  : IntelliJ ๋ฌด๋ฃŒ๋ฒ„์ „์„ ์“ฐ๋ฉด์„œ War ํ”„๋กœ์ ํŠธ๋ฅผ ๋งŒ๋“ค์—ˆ๋‹ค. War๋ž€, Web ARchive๋กœ ๋ณดํ†ต ํ†ฐ์บฃ๊ฐ™์€ ์„œ๋ฒ„์— ๋ฐฐํฌํ•ด์„œ ์‹คํ–‰ํ•œ๋‹ค. ํ†ฐ์บฃ์€ ์ž๋ฐ” ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹คํ–‰ํ•ด์ฃผ๋Š” ์›น ์„œ๋ฒ„๋กœ War ํŒŒ์ผ์„ ๋„ฃ์œผ๋ฉด ์›น์‚ฌ์ดํŠธ๋กœ ์ž‘๋™ํ•˜๊ฒŒ ๋งŒ๋“ค์–ด์ค€๋‹ค. ์ฆ‰ War ํŒŒ์ผ ํ”„๋กœ์ ํŠธ๋ฅผ ํ†ฐ์บฃ์— ๋„ฃ์–ด ์›น์‚ฌ์ดํŠธ๊ฐ€ ์‹คํ–‰๋˜๋„๋ก ํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ์ด๋•Œ Tomcat์€ ๋‚ด ํ”„๋กœ์ ํŠธ ์•ˆ์— ์žˆ์ง€ ์•Š๊ณ  ๋ฐ–์— ์กด์žฌํ•˜๋„๋ก <scope>provided</scope> ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์„ค์ •๋˜์–ด์žˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ IntelliJ ๋ฌด๋ฃŒ๋ฒ„์ „์€ ์™ธ๋ถ€ ํ†ฐ์บฃ ์„œ๋ฒ„๋ฅผ ์ง์ ‘ ์‹คํ–‰ ํ•  ์ˆ˜ ์—†์œผ๋‹ˆ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•œ ๊ฒƒ์ด๋‹ค.

 

 

โœฆ ์ฒซ๋ฒˆ์งธ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ• : settings - gradle - Build and run using [Gradle]๋กœ ์„ค์ •

 

๊น€์˜ํ•œ๋‹˜์˜ ์ˆ˜์—…์„ ๋“ฃ๋‹ค๊ฐ€ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•œ ๊ฒฝ์šฐ IntelliJ IDEA๋กœ ๋ณ€๊ฒฝํ•ด์„œ ๊ทธ๋Ÿฐ ๊ฒƒ์ด๋‹ค. ๊ทธ๋ž˜์„œ ๋‹ค์‹œ Gradle๋กœ ๋ฐ”๊ฟ”์ฃผ๋ฉด ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋œ๋‹ค.

 

 

 

 

 

โœฆ ๋‘๋ฒˆ์งธ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ• : Add dependencies with 'provided' scope to classpath

  • Run ๋“ค์–ด๊ฐ€๊ธฐ

 

 

  • Edit Configurations ๋“ค์–ด๊ฐ€๊ธฐ

 

 

  • Modify options ๋“ค์–ด๊ฐ€๊ธฐ

 

 

  • Add dependencies with "provided" scope to classpath ๋ˆ„๋ฅด๊ธฐ.

 

๋ฌด๋ฃŒ๋ฒ„์ „์€ ํ†ฐ์บฃ์ด ์™ธ๋ถ€์— ์žˆ๋‹ค๊ณ  ๋ฏฟ์–ด ์„œ๋ฒ„๋ฅผ ๋”ฐ๋กœ ์ง€์ •ํ•ด์ฃผ์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์ œ๋Œ€๋กœ ์‹คํ–‰๋˜์ง€ ์•Š์•˜๋‹ค. ๊ทธ ์„ค์ •์ด provided์˜€๋Š”๋ฐ, Add...classpath๋Š” ์›๋ž˜ ์‹คํ–‰ํ•  ๋•Œ ํฌํ•จ๋˜์ง€ ์•Š์•„์•ผ ํ•  provided ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋“ค์„ ๊ฐ•์ œ๋กœ classpath์— ํฌํ•จ์‹œ์ผœ ์‹คํ–‰ํ•˜๊ธธ ์›ํ• ๋•Œ ์ฒดํฌํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

 

 

 

โœฆ ์„ธ๋ฒˆ์งธ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ• : providedRuntime 'org.springframework.boot:spring-boot-starter-tomcat' ์ฃผ์„์ฒ˜๋ฆฌํ•˜๊ธฐ.

  • build.gradle์— ๋“ค์–ด๊ฐ€์„œ ์ฃผ์„์ฒ˜๋ฆฌํ•˜๊ธฐ.

 

 

 

โœฆ ๋„ค๋ฒˆ์งธ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ• : ์œ ๋ฃŒ๋ฒ„์ „ ๊ตฌ๋งคํ•˜๊ธฐ.

 

 

 


 

 

์•ˆ๋…•ํ•˜์„ธ์š”. - ์ธํ”„๋Ÿฐ | ์ปค๋ฎค๋‹ˆํ‹ฐ ์งˆ๋ฌธ&๋‹ต๋ณ€

๋ˆ„๊ตฌ๋‚˜ ํ•จ๊ป˜ํ•˜๋Š” ์ธํ”„๋Ÿฐ ์ปค๋ฎค๋‹ˆํ‹ฐ. ๋ชจ๋ฅด๋ฉด ๋ฌป๊ณ , ํ•ด๋‹ต์„ ์ฐพ์•„๋ณด์„ธ์š”.

www.inflearn.com

 

 

 

[intellij] Error creating bean with name 'servletComponentRegisteringPostProcessor' ์—๋Ÿฌ

์—๋Ÿฌ์˜ ์ „๋ฌธ์„ ๋ณด๋ฉด์ด๋Ÿฐ ๋น„์Šทํ•œ ์—๋Ÿฌ๋ฅผ ๋ฑ‰์–ด๋‚ด๊ณ  ์žˆ๋‹ค. ๊ทธ ์ด์œ ๋Š” intellij๋ฅผ ๋ฌด๋ฃŒ ๋ฒ„์ „์œผ๋กœ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๊ณ  ํ”„๋กœ์ ํŠธ๊ฐ€ war ํŒŒ์ผ์ธ ๊ฒฝ์šฐ์— ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ. intellij์—์„œ war ํŒŒ์ผ์„ ์‹คํ–‰ํ•˜๋ฉฐ ํ†ฐ์บฃ์„

velog.io

 

<์ถœ์ฒ˜ ์ธํ”„๋Ÿฐ>

 

 

SpringMVC์— ๋ณธ๊ฒฉ์ ์œผ๋กœ ๋“ค์–ด๊ฐ€๊ธฐ์ „ ๊ธฐ๋ณธ์ ์œผ๋กœ ์•Œ์•„์•ผํ•  ๊ฐœ๋…๋“ค์„ ์„น์…˜ 2 ๊ฐ•์˜์—์„œ ๊ฐ„๋‹จํ•˜๊ฒŒ ์„ค๋ช…ํ–ˆ๋‹ค. ๊ฐ•์˜๋ฅผ ๋“ค์„ ๋• ๊ฐœ๋…์— ๋Œ€ํ•œ ๋ฐฐ๊ฒฝ์ง€์‹์ด ํ๋ฆฟํ•ด์„œ ์ˆ˜์—…์„ ๋“ฃ๊ณ  ์žˆ์–ด๋„ ์ˆ˜์—…์˜ ํ๋ฆ„์ด ์ดํ•ด๋˜์งˆ ์•Š์•˜๋‹ค. ๊ทธ๋ž˜์„œ ๋ธ”๋กœ๊ทธ์— WAS - ์„œ๋ธ”๋ฆฟ - ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ - ๋ฉ€ํ‹ฐ์“ฐ๋ ˆ๋“œ - ์“ฐ๋ ˆ๋“œ ํ’€์ด ์–ด๋–ค ์‹์œผ๋กœ ์—ฐ๊ด€์„ ๊ฐ–๋Š”์ง€๋ฅผ ์ค‘์‹ฌ์œผ๋กœ ๊ณต๋ถ€ํ•˜๊ณ ์ž ํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ณต๋ถ€ํ•˜๋ฉด์„œ ์ดํ•ดํ•˜๋Š”๋ฐ ๋ณด์ถฉ์ด ๋˜๋Š” ๊ฐœ๋…๊ณผ ์„ค๋ช…์ด ์žˆ์œผ๋ฉด ํ•จ๊ป˜ ์ ๊ณ , ๋„์ค‘์— ์งˆ๋ฌธ๋“ค์ด ์ƒ๊ธฐ๋ฉด ๊ทธ์— ๋Œ€ํ•œ ๋‹ต๋ณ€๋„ ์ฐพ์•„๋ณด๊ณ ์ž ํ•œ๋‹ค.

 

 

โ˜˜๏ธ 

์ž˜๋ชป๋œ ์ •๋ณด๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค 


 

โœ”๏ธ  ์›น - HTTP ๊ธฐ๋ฐ˜์œผ๋กœ ๋™์ž‘

  • ์„œ๋ฒ„ ๊ฐ„์— ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ  ๋ฐ›์„ ๋•Œ ๋Œ€๋ถ€๋ถ„ HTTP๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.
  • ๊ฑฐ์˜ ๋ชจ๋“  ํ˜•ํƒœ์˜ ๋ฐ์ดํ„ฐ ์ „์†ก์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

 

HTTP

: ์›น ์ƒ์—์„œ ์ฃผ๊ณ  ๋ฐ›์„ ์ˆ˜ ์žˆ๋Š” ํ”„๋กœํ† ์ฝœ๋กœ ์„œ๋ฒ„์™€ ํด๋ผ์ด์–ธํŠธ ์‚ฌ์ด์— ์ด๋ฃจ์–ด์ง€๋Š” ์š”์ฒญ ์‘๋‹ต ํ”„๋กœํ† ์ฝœ์ด๋ฉฐ, ์ฃผ๋กœ HTML ๋ฌธ์„œ๋ฅผ ์ฃผ๊ณ  ๋ฐ›๋Š”๋ฐ ์‚ฌ์šฉํ•œ๋‹ค.

 

์›น ์„œ๋ฒ„ (Web Server)

: HTTP ๊ธฐ๋ฐ˜์œผ๋กœ ๋™์ž‘ํ•˜๋ฉฐ ์ •์  ๋ฆฌ์†Œ์Šค๋ฅผ ์ œ๊ณตํ•œ๋‹ค.

 

์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„ (Web Application Server) 

: HTTP ๊ธฐ๋ฐ˜์œผ๋กœ ๋™์ž‘ํ•˜๋ฉฐ ํ”„๋กœ๊ทธ๋žจ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋กœ์ง์„ ์ˆ˜ํ–‰ํ•œ๋‹ค. ์ •์  ๋ฆฌ์†Œ์Šค ์ œ๊ณต๋„ ๊ฐ€๋Šฅํ•˜๋‹ค.

 

 

 

Q. ์›น ์„œ๋ฒ„๋Š” ์ •์  ๋ฆฌ์†Œ์Šค๋ฅผ ์ œ๊ณตํ•˜๊ณ  ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋กœ์ง์„ ์ œ๊ณตํ•œ๋‹ค๊ณ  ํ–ˆ๋‹ค. ์›น ํŽ˜์ด์ง€๋กœ ์˜ˆ์‹œ๋ฅผ ๋“ค๋ฉด ์–ด๋–ค๊ฒŒ ์žˆ์„๊นŒ?

A. ์ •์  ๋ฆฌ์†Œ์Šค๋Š” ์ด๋ฏธ์ง€, ๋™์˜์ƒ, CSS, HTML ๋“ฑ ์ด๋‹ค. ์›น ํŽ˜์ด์ง€์— ๋กœ๊ณ ๊ฐ€ ์žˆ๋‹ค๋ฉด ๋กœ๊ณ ๋Š” ์ด๋ฏธ์ง€์— ํ•ด๋‹นํ•˜๋‹ˆ ์›น ์„œ๋ฒ„์—์„œ ์ œ๊ณตํ•˜๋Š” ๋ฆฌ์†Œ์Šค๊ฐ€ ๋  ๊ฒƒ์ด๋‹ค. ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„์—์„œ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์€ ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€์—์„œ ์‚ฌ์šฉ์ž๊ฐ€ ์•„์ด๋””์™€ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์ž…๋ ฅํ•˜๋ฉด ์ž…๋ ฅ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜์—ฌ ๋กœ๊ทธ์ธ์ด ๋œ ํ™”๋ฉด์„ ๋ณด์—ฌ์ฃผ๋Š” ์ด๋Ÿฐ ์ผ๋ จ์˜ ๊ณผ์ •์ด๋ผ๊ณ  ๋ณด๋ฉด ๋  ๊ฒƒ ๊ฐ™๋‹ค. ๋‹จ์ˆœํžˆ ๋ณด์—ฌ์ฃผ๋Š” ๊ฒƒ์— ๋๋‚˜์ง€ ์•Š๊ณ  ๋กœ์ง์„ ์ˆ˜ํ–‰ํ•˜๊ณ  ์ฒ˜๋ฆฌํ•˜๋Š” ๊ณผ์ •์ด ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„๊ฐ€ ํ–‰ํ•˜๋Š” ์ผ์ด๋‹ค.

 

 

Q. ๊ทธ๋Ÿฐ๋ฐ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„๊ฐ€ ๋™์ ์ธ ๋กœ์ง ๋ฟ ์•„๋‹ˆ๋ผ, ์ •์  ๋ฆฌ์†Œ์Šค๋„ ์ œ๊ณตํ•œ๋‹ค๊ณ  ํ–ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„๊ฐ€ ์›น ์„œ๋ฒ„๊ฐ€ ํ•˜๋Š” ์ผ๋„ ์ฒ˜๋ฆฌํ•˜๋ฉด ๋˜์ง€ ์•Š์„๊นŒ?

A. WAS๋Š” ๋น„์‹ผ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ์ˆ˜ํ–‰ํ•œ๋‹ค. ์˜ˆ๋กœ ๊ธˆ์ „ ๊ฑฐ๋ž˜, ๊ฐœ์ธ์ •๋ณด๊ด€๋ฆฌ, ์ฃผ๋ฌธ ์ฒ˜๋ฆฌ ๋“ฑ์ด ์žˆ์„ ์ˆ˜ ์žˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋กœ์ง์€ ์ฒ˜๋ฆฌ ์‹œ๊ฐ„๊ณผ ์ž์› ์†Œ๋ชจ๊ฐ€ ํฌ๊ณ  ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๊ฒŒ ๋œ๋‹ค๋ฉด ์„œ๋น„์Šค ์ „์ฒด์— ์‹ฌ๊ฐํ•œ ์˜ํ–ฅ์„ ์ค„ ์ˆ˜ ์žˆ๋‹ค. ์ด๋Ÿฐ ๋ณต์žกํ•œ ๋กœ์ง์„ ์ฒ˜๋ฆฌํ•˜๋Š” WAS์—๊ฒŒ ์ •์ ์ธ ๋ฆฌ์†Œ์Šค๊นŒ์ง€ ์ œ๊ณตํ•˜๋ผ๊ณ  ํ•œ๋‹ค๋ฉด ์ •์ ์ธ ๋ฆฌ์†Œ์Šค ์ œ๊ณต์„ ์ฒ˜๋ฆฌํ•˜๋А๋ผ ์ค‘์š”ํ•œ ๋กœ์ง์˜ ์ฒ˜๋ฆฌ๊ฐ€ ๋ฏธ๋ค„์งˆ ์ˆ˜ ์žˆ์œผ๋ฉฐ ์š”์ฒญ์„ ๋ฐ›๋Š” ๊ฒƒ ๋ถ€ํ„ฐ ์ฒ˜๋ฆฌ๊นŒ์ง€ ๋ชจ๋“  ๊ฒƒ์„ ํ™€๋กœ ํ•ด์•ผํ•˜๋Š” WAS์˜ ์„œ๋ฒ„์— ๊ณผ๋ถ€ํ•˜๊ฐ€ ์˜ฌ ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋ž˜์„œ ์›น ์„œ๋ฒ„๋ฅผ WAS์˜ ์•ž์— ๋ฐฐ์น˜์‹œ์ผœ ์š”์ฒญ์ด ์˜ค๋ฉด ์›น ์„œ๋ฒ„์—์„œ ๋ฐ›๊ฒŒ ํ•œ ํ›„ ๋™์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•ด์•ผํ•˜๋Š” ๋ถ€๋ถ„๋งŒ WAS์—๊ฒŒ ์š”์ฒญ์„ ์œ„์ž„ํ•œ๋‹ค.

 

 

 


 

 

 

 

โœ”๏ธ  ์„œ๋ธ”๋ฆฟ๊ณผ ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ

  • ์ž๋ฐ”์—์„œ๋Š” ์„œ๋ธ”๋ฆฟ ์ปจ๋„ค์ดํ„ฐ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋ฉด WAS๋ผ๊ณ  ํ•œ๋‹ค.

 

์„œ๋ธ”๋ฆฟ (Servlet)

: ์›น ์ƒ์—์„œ ์ฃผ๊ณ  ๋ฐ›์„ ์ˆ˜ ์žˆ๋Š” ํ”„๋กœํ† ์ฝœ๋กœ ์„œ๋ฒ„์™€ ํด๋ผ์ด์–ธํŠธ ์‚ฌ์ด์— ์ด๋ฃจ์–ด์ง€๋Š” ์š”์ฒญ ์‘๋‹ต ํ”„๋กœํ† ์ฝœ์ด๋ฉฐ, ์ฃผ๋กœ HTML ๋ฌธ์„œ๋ฅผ ์ฃผ๊ณ  ๋ฐ›๋Š”๋ฐ ์‚ฌ์šฉํ•œ๋‹ค

 

์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ (Servlet Container)

: ์„œ๋ธ”๋ฆฟ๋“ค์„ ๋ชจ์•„์„œ ๊ด€๋ฆฌํ•˜๊ณ  ์›น์„œ๋ฒ„์™€ ์†Œ์ผ“์„ ํ†ต์‹ ํ•˜๋Š” ์—ญํ• ์„ ํ•œ๋‹ค. ๋Œ€ํ‘œ์ ์œผ๋กœ ํ†ฐ์บฃ์ด ์žˆ๋‹ค.

 

@WebServlet(name = "helloServlet", urlPatterns = "/hello")
public class HelloServlet extends HttpServlet {

    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response) {
    }
}
/hello๋กœ URL์ด ํ˜ธ์ถœ๋˜๋ฉด ๊ทธ๋•Œ ์„œ๋ธ”๋ฆฟ ์ฝ”๋“œ๊ฐ€ ์‹คํ–‰๋œ๋‹ค. ์„œ๋ธ”๋ฆฟ์ด ์ฃผ๋กœ ํ•˜๋Š” ๊ฒƒ์€ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๊ณ , ๊ทธ์— ๋งž๋Š” ์‘๋‹ต์„ ๋ณด๋‚ด๋Š” ๊ฒƒ์ด๋‹ค. ์ฝ”๋“œ๋ฅผ ์‚ดํŽด๋ณด๋ฉด HttpServletRequest์™€ HttpServletResponse๊ฐ€ ์žˆ๋‹ค. ์ด๋Š” ๊ฐ๊ฐ HTTP ์š”์ฒญ ์ •๋ณด๋ฅผ ํŽธ๋ฆฌํ•˜๊ฒŒ ์‚ฌ์šฉํ•˜๊ณ , HTTP ์‘๋‹ต ์ •๋ณด๋ฅผ ํŽธ๋ฆฌํ•˜๊ฒŒ ์ œ๊ณตํ•˜๋Š” ์—ญํ• ์„ ํ•œ๋‹ค.

์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ๋Š” ์„œ๋ธ”๋ฆฟ ๊ฐ์ฒด๋ฅผ ์‹ฑ๊ธ€ํ†ค์œผ๋กœ ๊ด€๋ฆฌํ•œ๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ ๋ณด๋‚ด์˜จ ์š”์ฒญ ๊ฐ์ฒด์™€ ์‘๋‹ต ๊ฐ์ฒด๋งŒ ์ƒˆ๋กญ๊ฒŒ ์ƒ์„ฑํ•œ ํ›„ ์ด๋ฏธ ๋งŒ๋“ค์–ด์ ธ ์žˆ๋Š” ์„œ๋ธ”๋ฆฟ ๊ฐ์ฒด๋ฅผ ์žฌ์‚ฌ์šฉํ•˜์—ฌ ์„ฑ๋Šฅ์„ ์ตœ์ ํ™”์‹œํ‚จ๋‹ค. 

 

 

Q. ์™œ ์š”์ฒญ ๊ฐ์ฒด์™€ ์‘๋‹ต ๊ฐ์ฒด๋ฅผ ์ƒˆ๋กญ๊ฒŒ ์ƒ์„ฑํ•˜๋Š”๊ฑธ๊นŒ?

A. ์‚ฌ์šฉ์ž๋งˆ๋‹ค ์š”์ฒญํ•˜๋Š” ๋‚ด์šฉ์ด ๋‹ค๋ฅด๊ธฐ ๋•Œ๋ฌธ์— ๊ทธ์— ๋Œ€ํ•ด ์ฒ˜๋ฆฌํ•˜๋Š” ์‘๋‹ต๋„ ๋‹ฌ๋ผ์งˆ ๊ฒƒ์ด๋‹ค. ๋งŒ์•ฝ ๊ฐ™์€ ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ ๋œ๋‹ค๋ฉด, 3๋งŒ์›์„ ๊ฒฐ์ œํ•œ ์‚ฌ์šฉ์ž A์™€ 1๋งŒ์› ๊ฒฐ์ œํ•œ ์‚ฌ์šฉ์ž B์— ๋Œ€ํ•œ ์ฒ˜๋ฆฌ ์‘๋‹ต์ด ์„ž์ผ ๊ฒƒ์ด๋‹ค. ๊ทธ๋ž˜์„œ ์š”์ฒญ ๊ฐ์ฒด์™€ ์‘๋‹ต ๊ฐ์ฒด๋Š” ์žฌ์‚ฌ์šฉํ•˜์ง€ ์•Š์œผ๋ฉฐ ๋ฐ˜๋“œ์‹œ ์š”์ฒญ, ์‘๋‹ต ๊ด€๋ จ ๋ฐ์ดํ„ฐ๋Š” HttpServletRequest์™€ HttpServletResponse ๊ฐ์ฒด์— ์ €์žฅํ•˜๊ณ  ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.

 

 

Q. ์™œ ์„œ๋ธ”๋ฆฟ ๊ฐ์ฒด๋Š” ์žฌ์‚ฌ์šฉํ•ด๋„ ๋˜๋Š”๊ฑธ๊นŒ?

A. ์ด ๊ฐœ๋…์„ ์‹๋‹น์œผ๋กœ ๋น„์œ ํ•ด๋ณด๊ณ ์ž ํ•œ๋‹ค. ์„œ๋ธ”๋ฆฟ์€ ์š”๋ฆฌ์‚ฌ๋ผ๊ณ  ์ƒ๊ฐํ•˜๊ณ , ์š”์ฒญ ๊ฐ์ฒด์™€ ์‘๋‹ต ๊ฐ์ฒด๋Š” ์ข…์—…์›์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ์‰ฌ์šธ ๊ฒƒ ๊ฐ™๋‹ค. ์š”๋ฆฌ์‚ฌ(์„œ๋ธ”๋ฆฟ)๋Š” ์ข…์—…์›(์“ฐ๋ ˆ๋“œ)์ด ๋“ค๊ณ ์˜จ ์ฃผ๋ฌธ์„œ(์š”์ฒญ ๊ฐ์ฒด)๋งŒ ๋ณด๊ณ  ์š”๋ฆฌ๋ฅผ ๋งŒ๋“ค๊ณ  ์ข…์—…์›์—๊ฒŒ ๋‚ด์ฃผ๊ธฐ๋งŒ ํ•˜๋ฉด ๋œ๋‹ค. ์š”๋ฆฌ์‚ฌ๋Š” ์–ด๋–ค ์Œ์‹์„ ๋งŒ๋“ค์–ด์•ผํ•˜๋Š”์ง€๋งŒ ํ™•์ธํ•˜๊ณ , ์ด ์Œ์‹์„ ๋ช‡ ๋ฒˆ ํ…Œ์ด๋ธ”์—์„œ ์ฃผ๋ฌธํ–ˆ๊ณ  ์ด ์Œ์‹์„ ์š”์ฒญํ•œ ํ…Œ์ด๋ธ”์ด ์ด์ „์— ์–ด๋–ค ์Œ์‹์„ ์ฃผ๋ฌธํ–ˆ๋Š”์ง€๋Š” ๋ชฐ๋ผ๋„ ๋œ๋‹ค. ์š”๋ฆฌ๊ฐ€ ์™„์„ฑ๋˜์–ด ๋‚˜์˜ค๋ฉด ์ข…์—…์›์€ ์ ‘์‹œ(์‘๋‹ต ๊ฐ์ฒด)๋ฅผ ๋“ค๊ณ  ๊ณ ๊ฐ์—๊ฒŒ ์ค„ ๊ฒƒ์ด๋‹ค. ์„œ๋ธ”๋ฆฟ ๊ฐ์ฒด๋Š” ์ƒํƒœ๋ฅผ ๊ธฐ์–ตํ•˜์ง€ ์•Š์•„๋„ ๋˜๊ณ , ๊ทธ์ € ์ฒ˜๋ฆฌ์—๋งŒ ์ง‘์ค‘ํ•˜๋ฉด ๋˜๊ธฐ์— ํ•˜๋‚˜์˜ ๊ฐ์ฒด๋กœ ์žฌ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด๋‹ค.(์–ด์ฐจํ”ผ ์ข…์—…์›์ด ์˜ฎ๊ธฐ๋Š” ๊ฑฐ๋ผ ์ข…์—…์›์ด ๋ช‡ ๋ฒˆ ํ…Œ์ด๋ธ”์—์„œ ์ฃผ๋ฌธํ•œ ์Œ์‹์ธ์ง€ ๊ธฐ์–ตํ•œ๋‹ค. ํ…Œ์ด๋ธ”์˜ ์ฃผ๋ฌธ์ด ์„ž์ด์ง€ ์•Š๋Š”๋‹ค.) ํ•œ๋ช…์˜ ์š”๋ฆฌ์‚ฌ๋กœ ์ถฉ๋ถ„ํžˆ ๊ณ ๊ฐ์˜ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ๊ตณ์ด ์‚ฌ์žฅ์€ ๋‹ค๋ฅธ ์š”๋ฆฌ์‚ฌ๋ฅผ ๊ณ ์šฉํ•  ์ด์œ ๊ฐ€ ์—†๋‹ค. ๊ทธ๋ฆฌ๊ณ  ํ•œ ๋ช…์˜ ์š”๋ฆฌ์‚ฌ๊ฐ€ ํ•œ ๋ฒˆ์— ํ•˜๋‚˜์˜ ์š”๋ฆฌ๋งŒ ํ•˜์ง€ ์•Š๊ณ  ์—ฌ๋Ÿฌ ํ…Œ์ด๋ธ”์—์„œ ์˜ค๋Š” ์š”์ฒญ์„ ๋™์‹œ์— ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค. ์—ฌ๋Ÿฌ ์ข…์—…์›๊ธ€์ด ์ฃผ๋ฌธ์„œ๋ฅผ ๋“ค๊ณ  ์˜ค๋Š” ๊ฒƒ์„ ๋ฉ€ํ‹ฐ์“ฐ๋ ˆ๋“œ๋กœ ๋น„์œ ํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™๋‹ค. 

 

 

 


 

 

 

 

โœ”๏ธ  ๋ฉ€ํ‹ฐ์“ฐ๋ ˆ๋“œ์™€ ์“ฐ๋ ˆ๋“œ ํ’€

 

๋ฉ€ํ‹ฐ์“ฐ๋ ˆ๋“œ (Multi thread)

: ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค ๋‚ด์—์„œ ๋‘˜ ์ด์ƒ์˜ ์Šค๋ ˆ๋“œ๊ฐ€ ๋™์‹œ์— ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.

 

์“ฐ๋ ˆ๋“œ ํ’€ (Thread pool)

: ๋ฏธ๋ฆฌ ์ผ์ • ๊ฐœ์ˆ˜์˜ ์“ฐ๋ ˆ๋“œ๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ๊ด€๋ฆฌํ•˜๋Š” ๊ธฐ๋ฒ•์ด๋‹ค.

 

 

 

์š”์ฒญ ๋งˆ๋‹ค ์“ฐ๋ ˆ๋“œ๋ฅผ ์ƒ์„ฑํ•œ ๊ฒฝ์šฐ๋‹ค. CPU๋‚˜ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ํ—ˆ์šฉ๋  ๋•Œ ๊นŒ์ง€ ๋™์‹œ์— ์š”์ฒญ๋œ ๊ฒƒ๋“ค์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๊ฒ ์ง€๋งŒ, ์“ฐ๋ ˆ๋“œ์˜ ์ƒ์„ฑ ๋น„์šฉ์€ ๋งค์šฐ ๋น„์‹ธ๋‹ค. ๊ณ ๊ฐ์ด ์š”์ฒญํ•  ๋•Œ ๋งˆ๋‹ค ์ƒˆ๋กœ์šด ์“ฐ๋ ˆ๋“œ๋ฅผ ์ƒ์„ฑํ•˜๊ฒŒ ๋œ๋‹ค๋ฉด ์‘๋‹ต ์†๋„๊ฐ€ ๋Šฆ์–ด์งˆ ๊ฒƒ์ด๋‹ค. ๋˜ ์“ฐ๋ ˆ๋“œ ์ƒ์„ฑ์—๋Š” ์ œํ•œ์ด ์—†๋‹ค. ๋งŒ์•ฝ ๊ณ ๊ฐ์˜ ์š”์ฒญ์ด ๋„ˆ๋ฌด ๋งŽ์ด ์˜ค๊ฒŒ ๋˜๋ฉด, CPU๋‚˜ ๋ฉ”๋ชจ๋ฆฌ ์ž„๊ณ„์ ์ด ๋„˜์–ด์„œ ์„œ๋ฒ„๊ฐ€ ๋‹ค์šด๋  ์ˆ˜ ์žˆ๋‹ค.

 

์š”์ฒญ์ด ์˜ฌ ๋•Œ๋งˆ๋‹ค ์“ฐ๋ ˆ๋“œ๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ์€ ํšจ์œจ์ด ๋–จ์–ด์ง€๊ธฐ ๋•Œ๋ฌธ์— ๋ฏธ๋ฆฌ ์“ฐ๋ ˆ๋“œ๋ฅผ ๋งŒ๋“ค์–ด๋‘”๋‹ค. ๊ทธ๊ฑธ ์“ฐ๋ ˆ๋“œ ํ’€์ด๋ผ๊ณ  ํ•œ๋‹ค. ํ†ฐ์บฃ์€ ์ฃผ๋กœ 200๊ฐœ๋ฅผ ๊ธฐ๋ณธ ์„ค์ •ํ•œ๋‹ค. ๊ทธ๋Ÿผ 200๊ฐœ๊ฐ€ ๋ชจ๋‘ ๋‹ค ์‚ฌ์šฉํ•˜๊ฒŒ ๋œ๋‹ค๋ฉด, ๋‚จ์€ ์š”์ฒญ์€ ํ์—์„œ ๋Œ€๊ธฐํ•˜๋„๋ก ํ•œ๋‹ค. ์“ฐ๋ ˆ๋“œ๋ฅผ ํ•„์š”ํ•  ๋•Œ ๋งŒ๋“ค์–ด์„œ ์“ด ๊ฒฝ์šฐ๋Š” ์ƒ์„ฑ์— ์ œํ•œ์ด ์—†๊ธฐ ๋•Œ๋ฌธ์— CPU๋‚˜ ๋ฉ”๋ชจ๋ฆฌ์˜ ์ž„๊ณ„์ ์ด ๋„˜์–ด๋ฒ„๋ ค ์„œ๋ฒ„๊ฐ€ ์ฃฝ์„ ์ˆ˜ ์žˆ์ง€๋งŒ ์“ฐ๋ ˆ๋“œ ํ’€๋กœ ์“ฐ๋ ˆ๋“œ๋ฅผ ๊ด€๋ฆฌํ•˜๋ฉด ๊ณผ๋„ํ•œ ์š”์ฒญ๋“ค์€ ๋Œ€๊ธฐํ•˜๋„๋ก ๋งŒ๋“ค์–ด ์„œ๋ฒ„ ํญ์ฃผ๋ฅผ ๋ฐฉ์ง€ํ•œ๋‹ค.

 

 

Q. ์š”์ฒญ์ด ๋“ค์–ด์™”์„ ๋•Œ ์“ฐ๋ ˆ๋“œ๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ๊ณผ ๋ฏธ๋ฆฌ ์“ฐ๋ ˆ๋“œ๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ์€ ๊ฒฐ๊ตญ ๋‘˜ ๋‹ค ์“ฐ๋ ˆ๋“œ๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ์ธ๋ฐ ์™œ ์„ฑ๋Šฅ์— ์ฐจ์ด๊ฐ€ ๋‚˜๋Š”๊ฑธ๊นŒ?

A. ์“ฐ๋ ˆ๋“œ๋Š” ์‹๋‹น์—์„œ ์ผํ•˜๋Š” ์ข…์—…์›์— ๋น„์œ ํ•  ์ˆ˜ ์žˆ๋‹ค. ์—ฌ๋Ÿฌ ์ข…์—…์›์ด ์ฃผ๋ฌธ์„œ์™€ ์š”๋ฆฌ ์„œ๋น™์„ ๋™์‹œ๋‹ค๋ฐœ๋กœ ํ•˜๋ฉด ๊ทธ ํ–‰์œ„๊ฐ€ ๋ฉ€ํ‹ฐ์“ฐ๋ ˆ๋“œ๊ฐ€ ๋œ๋‹ค. ์‚ฌ์žฅ์ด ์ข…์—…์›์„ ์—ฌ๋Ÿฌ๋ช… ๊ณ ์šฉํ•œ ํ›„ ์†๋‹˜์˜ ์š”์ฒญ์ด ๋งŽ์•„์ง€๋ฉด ์ข…์—…์›์„ ๋‚ด๋ณด๋‚ด๊ณ  ์š”์ฒญ์ด ์ ์–ด์ง€๋ฉด ๋‹ค์‹œ ํ’€๋กœ ๋“ค์–ด์™€ ๊ธฐ๋‹ค๋ฆฌ๊ฒŒ ํ•œ๋‹ค. ๊ทธ๋ ‡๊ฒŒ ์ข…์—…์›์„ ๊ณ ์šฉํ•˜๊ณ  ํ•ด๊ณ ํ•˜๊ธฐ๋ฅผ ๋ฐ˜๋ณตํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ์ด๋ฏธ ์—ฌ๋Ÿฌ๋ช…์„ ๊ณ ์šฉํ•ด๋‘” ๋’ค ํ’€์ด๋ผ๋Š” ๋Œ€๊ธฐ์‹ค์—์„œ ๊ธฐ๋‹ค๋ฆฌ๊ฒŒ ํ•œ ํ›„ ์š”์ฒญ์˜ ์ˆ˜๋งŒํผ ๋Œ๋ฆฐ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋  ๊ฒƒ ๊ฐ™๋‹ค. ์ข…์—…์›์„ ๊ณ ์šฉํ•˜๊ณ  ํ•ด๊ณ ํ•˜๊ธฐ๋ฅผ ๋ฐ˜๋ณตํ•˜๋ฉด ๋‹น์—ฐํžˆ ๋” ๋งŽ์€ ์‹œ๊ฐ„๊ณผ ๋น„์šฉ์ด ๋“ค ๊ฒƒ์ด๋‹ค. ์ด๋ฏธ ๊ณ ์šฉํ•œ ํ›„ ํ•„์š”ํ•œ ๋งŒํผ ์ข…์—…์›์„ ๋Œ๋ฆฌ๊ณ  ํ•„์š”ํ•˜์ง€ ์•Š๋‹ค๋ฉด ๋Œ€๊ธฐํ•˜๊ฒŒ ํ•œ ํ›„ ์š”์ฒญ์ด ์ƒˆ๋กญ๊ฒŒ ๋“ค์–ด์˜ค๋ฉด ๊ฐ™์€ ์ข…์—…์›์ด ๋‚˜๊ฐ€ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๋„๋ก ํ•˜๋Š” ๊ฒƒ์ด ๋ฐ”๋กœ ์‘๋Œ€๊ฐ€ ๊ฐ€๋Šฅํ•˜๊ธฐ์— ํ›จ์”ฌ ํšจ์œจ์ ์ด๋‹ค.

 

 

๊ฐœ๋ฐœ์ž๋Š” ์“ฐ๋ ˆ๋“œ ํ’€์˜ ์ˆซ์ž๋ฅผ ์ ์ •ํ•˜๊ฒŒ ์„ค์ •ํ•˜๋Š” ๊ฒƒ์ด ๋งค์šฐ ์ค‘์š”ํ•˜๋‹ค. ์“ฐ๋ ˆ๋“œ ํ’€์˜ ์ˆ˜๋ฅผ ๋„ˆ๋ฌด ๋‚ฎ๊ฒŒ ์„ค์ •ํ•˜๋ฉด ์š”์ฒญ์€ ๋Œ€๊ธฐ ์ƒํƒœ๊ฐ€ ๋˜๊ณ  ๊ณ ๊ฐ์˜ ์š”์ฒญ์— ๋Œ€ํ•œ ์‘๋‹ต์€ ์ง€์—ฐ๋œ๋‹ค. ์“ฐ๋ ˆ๋“œ ํ’€์˜ ์ˆ˜๋ฅผ ๋„ˆ๋ฌด ๋†’๊ฒŒ ์„ค์ •ํ•˜๋ฉด ๋™์‹œ ์š”์ฒญ์ด ๋งŽ์ด ๋ฐœ์ƒํ–ˆ์„ ๋•Œ CPU์™€ ๋ฉ”๋ชจ๋ฆฌ์˜ ์ž„๊ณ„์ ์„ ์ดˆ๊ณผํ•˜๊ฒŒ ๋˜์–ด ์„œ๋ฒ„๊ฐ€ ๋‹ค์šด๋  ๊ฒƒ์ด๋‹ค. ์ ์ • ์ˆซ์ž๋ฅผ ์ฐพ๋Š” ๋ฐฉ๋ฒ•์€ ๋กœ์ง์ด ์–ผ๋งˆ๋‚˜ ๋ณต์žกํ•œ์ง€, CPU์™€ ๋ฉ”๋ชจ๋ฆฌ ๊ทธ๋ฆฌ๊ณ  IO ๋ฆฌ์†Œ์Šค ์ƒํ™ฉ์— ๋”ฐ๋ผ ๋‹ค๋ฅด๊ธฐ ๋•Œ๋ฌธ์— ์•„ํŒŒ์น˜ab, ์ œ์ด๋ฏธํ„ฐ, nGrinder ํˆด๋กœ ์„ฑ๋Šฅ ํ…Œ์ŠคํŠธ๋ฅผ ์‹œ๋„ํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.

 

 

 


 

 

 

โœ”๏ธ  HTML ํŽ˜์ด์ง€์™€ HTML API ๊ทธ๋ฆฌ๊ณ  WAS๊ฐ€ ์–ด๋–ป๊ฒŒ ์ž‘์„ฑ๋˜๋Š”์ง€

 

HTML ํŽ˜์ด์ง€

: ๋™์ ์œผ๋กœ ํ•„์š”ํ•œ HTML ํŒŒ์ผ์„ ์ƒ์„ฑํ•ด์„œ ์ „๋‹ฌํ•œ๋‹ค. ์ฃผ๋กœ ์‚ฌ์šฉ์ž๊ฐ€ ๋ณด๋Š” ํ™ˆํŽ˜์ด์ง€๋ฅผ ์˜๋ฏธํ•œ๋‹ค.

๋กœ๊ทธ์ธ ํ™”๋ฉด ์˜ˆ์‹œ

<form action="/login" method="post">
  <input name="username">
  <input name="password" type="password">
  <button type="submit">๋กœ๊ทธ์ธ</button>
</form>
์‚ฌ์šฉ์ž๊ฐ€ ๋กœ๊ทธ์ธ์„ ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋ณด์ด๋Š” ํŽ˜์ด์ง€์ด๋ฉฐ ์‚ฌ์šฉ์ž๊ฐ€ ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด /login ๊ฒฝ๋กœ๋กœ ๋ฐ์ดํ„ฐ๊ฐ€ post ๋ฐฉ์‹์œผ๋กœ ๋ณด๋‚ด์งˆ ๊ฒƒ์ด๋‹ค.

 

 

HTML API

: HTML์ด ์•„๋‹Œ JSON์ด๋‚˜ XML ํ˜•์‹์œผ๋กœ ์ฃผ๊ณ  ๋ฐ›์œผ๋ฉฐ ํ”„๋กœ๊ทธ๋žจ์ด ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ  ๋ฐ›๊ธฐ ์œ„ํ•œ ์ธํ„ฐํŽ˜์ด์Šค๋‹ค.

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ๋กœ๊ทธ์ธ API

fetch('/api/login', {
  method: 'POST',
  body: JSON.stringify({ username: 'sori', password: '1234' }),
  headers: { 'Content-Type': 'application/json' }
})
.then(response => response.json())
.then(data => console.log(data));
๋กœ๊ทธ์ธ ๋ฒ„ํŠผ์ด ๋ˆŒ๋ ธ์„ ๋•Œ ํ™”๋ฉด์— ์ ํžŒ ๋ฐ์ดํ„ฐ๋ฅผ Controller๊นŒ์ง€ ์ „๋‹ฌํ•ด์ฃผ๋Š” ๊ฒƒ์ด HTML API(์›น API ํ˜น์€ REST API)๊ฐ€ ํ•˜๋Š” ์ผ์ด๋‹ค. fetch ํ•จ์ˆ˜์˜ ์ธ์ž์—๋Š” ๋“ค์–ด์˜จ ๊ฒฝ๋กœ์™€ ์–ด๋–ค ๋ฐฉ์‹์œผ๋กœ ๋ณด๋‚ด๋Š”์ง€ ์–ด๋–ค ๋‚ด์šฉ์„ ์–ด๋–ป๊ฒŒ ์ฒ˜๋ฆฌํ•˜์—ฌ ๋ณด๋‚ผ๊ฑด์ง€์— ๋Œ€ํ•ด ์ ๋Š”๋‹ค. ์œ„์˜ ์ฝ”๋“œ๋Š” login ๊ฒฝ๋กœ๋กœ ๋“ค์–ด์˜จ ์ •๋ณด๋ฅผ POST(์ƒˆ๋กœ์šด ์ž์› ์š”์ฒญ)๋ฐฉ์‹์œผ๋กœ ๋ณด๋‚ด๋ฉฐ username๊ณผ password๋Š” JSON ๋ฌธ์ž์—ด๋กœ ๋ฐ˜ํ™˜ํ•œ๋‹ค๋Š” ๋‚ด์šฉ์ด ๋“ค์–ด์žˆ๋‹ค. ์ด API ์š”์ฒญ์€ WAS์˜ Controller๊ฐ€ ๋ฐ›์•„ ์ฒ˜๋ฆฌํ•œ๋‹ค.

HTTP API๋Š” ๋ธŒ๋ผ์šฐ์ € ๊ฐ™์€ UI ํด๋ผ์ด์–ธํŠธ์™€ ํ†ต์‹ ํ•  ๋•Œ๋งŒ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋‹ค.์„œ๋ฒ„์™€ ์„œ๋ฒ„ ๊ฐ„์—๋„ HTTP API๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ ๋ฐ›๋Š”๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ ์ƒํ’ˆ์„ ์ฃผ๋ฌธํ•œ ๋’ค ๊ฒฐ์ œ ๋‹จ๊ณ„๋กœ ๋„˜์–ด๊ฐ€๋Š” ๊ฒฝ์šฐ, ์ฃผ๋ฌธ ์„œ๋ฒ„์™€ ๊ฒฐ์ œ ์„œ๋ฒ„๊ฐ€ HTTP API๋ฅผ ํ†ตํ•ด ํ•„์š”ํ•œ ์ •๋ณด๋ฅผ ์ฃผ๊ณ ๋ฐ›๋Š” ๋ฐฉ์‹์œผ๋กœ ํ†ต์‹ ํ•œ๋‹ค.

 

 

WAS์˜ Controller

@RestController
@RequestMapping("/api")
public class LoginController {

    @PostMapping("/login")
    public ResponseEntity<LoginResult> login(@RequestBody LoginRequest request) {       
       // ๋กœ์ง ์ˆ˜ํ–‰ ์ฝ”๋“œ...
        return ResponseEntity.ok(new LoginResult("success", "Welcome!"));
    }
}
๋กœ๊ทธ์ธ์„ ์ฒ˜๋ฆฌํ•˜๋Š” Controller๋‹ค. @RequestMapping("/api")๋Š” ์ด ํด๋ž˜์Šค์˜ ๋ชจ๋“  ์š”์ฒญ์€ api๋กœ ์‹œ์ž‘๋œ ๊ฒฝ๋กœ๋งŒ ์ฒ˜๋ฆฌํ•˜๊ฒ ๋‹ค๋Š” ์˜๋ฏธ์ด๋‹ค. @PostMapping์€ /api/login ๊ฒฝ๋กœ ์ค‘ post ์š”์ฒญ๋งŒ ์ฒ˜๋ฆฌํ•œ๋‹ค๋Š” ์˜๋ฏธ์ด๋‹ค. ์ด๋ ‡๊ฒŒ ๊ฒฝ๋กœ๋ฅผ ํ†ตํ•ด ๋“ค์–ด์˜จ ์ •๋ณด๋ฅผ ๊ฐ€์ง€๊ณ  ์ผ๋ จ์˜ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์ด ์‹คํ–‰๋œ๋‹ค. 

์‹คํ–‰๋˜๋Š” ๊ฒฝ๋กœ์— ๋Œ€ํ•ด ๋‹ค์‹œ ์ •๋ฆฌํ•ด๋ณด์ž๋ฉด, HTML ํŽ˜์ด์ง€์— ์‚ฌ์šฉ์ž๊ฐ€ ๋กœ๊ทธ์ธ ๊ด€๋ จ ์ •๋ณด๋ฅผ ์ž…๋ ฅํ•˜์—ฌ ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด, HTML API๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์–ด๋–ค ํ˜•ํƒœ๋กœ ์–ด๋–ค ๊ฒฝ๋กœ๋กœ ๋ณด๋‚ผ๊ฑด์ง€ ์ •๋ฆฌํ•˜์—ฌ WAS๋กœ ๋ณด๋‚ธ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด WAS ๋‚ด์— ์žˆ๋Š” Controller ์ค‘ @RestController๊ฐ€ API ์š”์ฒญ์„ ๋ฐ›๊ณ  ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ(์˜ˆ๋กœ ํ†ฐ์บฃ)๊ฐ€ ์š”์ฒญ์„ ์ „๋‹ฌํ•œ๋‹ค. ์ „๋‹ฌ๋œ ์š”์ฒญ์— ๋งž์ถฐ ๋กœ๊ทธ์ธ ์ฒ˜๋ฆฌ ๋กœ์ง์ด ์ˆ˜ํ–‰๋˜๊ณ  JSON ๋ฐ์ดํ„ฐ๋กœ ์ƒ์„ฑ๋œ ๊ฒฐ๊ณผ๋Š” API ์‘๋‹ต์œผ๋กœ ๋ธŒ๋ผ์šฐ์ €๋กœ ์ „๋‹ฌ๋œ๋‹ค. ๋กœ๊ทธ์ธ์ด ์ œ๋Œ€๋กœ ์ฒ˜๋ฆฌ๋˜์—ˆ๋‹ค๋ฉด ๊ทธ์— ๋งž๋Š” ํ™”๋ฉด์„ ์‚ฌ์šฉ์ž๊ฐ€ ๋ฐ›๊ฒŒ ๋  ๊ฒƒ์ด๋‹ค.

 

 

 


 

 

 

โœ”๏ธ  ๋ธŒ๋ผ์šฐ์ € ๋ Œ๋”๋ง, ์„œ๋ฒ„์‚ฌ์ด๋“œ ๋ Œ๋”๋ง, ํด๋ผ์ด์–ธํŠธ ์‚ฌ์ด๋“œ ๋ Œ๋”๋ง

 

๋ธŒ๋ผ์šฐ์ € ๋ Œ๋”๋ง

: ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ์š”์ฒญํ•ด ๋ฐ›์€ ๋‚ด์šฉ์„ ๋ธŒ๋ผ์šฐ์ € ํ™”๋ฉด์— ํ‘œ์‹œํ•ด์ฃผ๋Š” ์ž‘์—…์„ ๋งํ•œ๋‹ค.

 

 

SSR (์„œ๋ฒ„์‚ฌ์ด๋“œ ๋ Œ๋”๋ง)

์ •์ ์ธ ํ™”๋ฉด์— ์‚ฌ์šฉํ•˜๋ฉฐ, HTML ์ตœ์ข… ๊ฒฐ๊ณผ๋ฅผ ์„œ๋ฒ„์—์„œ ๋งŒ๋“ค์–ด์„œ ์›น ๋ธŒ๋ผ์šฐ์ €์— ์ „๋‹ฌํ•œ๋‹ค.

 

์„œ๋ฒ„์‚ฌ์ด๋“œ ๋ Œ๋”๋ง ๋ฐฉ์‹์€ ๋ณดํ†ต ๋ฐฑ์—”๋“œ ์ง€ํ–ฅ ๊ฐœ๋ฐœ์ž๋“ค์ด Spring๊ณผ Thymeleaf ๋“ฑ์„ ์‚ฌ์šฉํ•ด ํ™”๋ฉด๊ณผ ๋กœ์ง์„ ํ•จ๊ป˜ ์ฒ˜๋ฆฌํ•˜๋ฉฐ, ๊ฐ„๋‹จํ•œ ํ”„๋กœ์ ํŠธ๋ฅผ ๋งŒ๋“œ๋Š” ๋ฐ ์ž์ฃผ ํ™œ์šฉ๋˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๋ณด๋ฉด ์ ํ•ฉํ•  ๊ฒƒ ๊ฐ™๋‹ค.

 

 

CSR (ํด๋ผ์ด์–ธํŠธ ์‚ฌ์ด๋“œ ๋ Œ๋”๋ง)

๋™์ ์ธ ํ™”๋ฉด์— ์‚ฌ์šฉํ•˜๋ฉฐ, HTML ๊ฒฐ๊ณผ๋ฅผ ์ž๋ฐ”์Šคํฌ๋ฆฝ๋ฅผ ์‚ฌ์šฉํ•ด ์›น ๋ธŒ๋ผ์šฐ์ €์—์„œ ๋™์ ์œผ๋กœ ์ƒ์„ฑํ•ด์„œ ์ ์šฉํ•œ๋‹ค.

 

ํด๋ผ์ด์–ธํŠธ ์‚ฌ์ด๋“œ ๋ Œ๋”๋ง ๋ฐฉ์‹์ด ์›น ํ”„๋ก ํŠธ์—”๋“œ์™€ ๋ฐฑ์—”๋“œ๊ฐ€ ๋‚˜๋‰˜์–ด ํ”„๋กœ์ ํŠธ๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ์œผ๋กœ ์ƒ๊ฐํ•˜๋ฉด ๋  ๊ฒƒ ๊ฐ™๋‹ค. Vue.js, React๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋™์ ์ธ ํ™”๋ฉด์„ ์ œ๊ณตํ•˜๊ณ  ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ์ž๋Š” ๋ฐ์ดํ„ฐ API์™€ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ๋“ฑ์„ ์ฒ˜๋ฆฌํ•œ๋‹ค.

 

 

 


 

 

์•„๋ž˜์— ์ถœ์ฒ˜๋ฅผ ๋‚จ๊ฒจ๋‘๊ฒ ์Šต๋‹ˆ๋‹ค.
๋ธ”๋กœ๊ทธ์—” ์ œ๊ฐ€ ์ตœ๋Œ€ํ•œ ์ดํ•ดํ•œ ๋‚ด์šฉ๊นŒ์ง€๋งŒ ์ ๋Š”๊ฑฐ๋ผ
์ถœ์ฒ˜์— ๋“ค์–ด๊ฐ€์‹œ๋ฉด ๋” ๋งŽ์€ ๋‚ด์šฉ์ด ์žˆ์–ด ๊ณต๋ถ€ํ•˜์‹œ๋Š”๋ฐ ๋„์›€๋˜์‹ค๊ฒ๋‹ˆ๋‹ค.

 

๐Ÿชฝ

ํ‹€๋ฆฐ ๋‚ด์šฉ์ด ์žˆ๋‹ค๋ฉด ๋Œ“๊ธ€๋กœ ์•Œ๋ ค์ฃผ์„ธ์š”

 

 

 


 

 

- ์›น์„œ๋ฒ„์™€ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„์˜ ์ฐจ์ด

 

[Web] Web Server์™€ WAS์˜ ์ฐจ์ด์™€ ์›น ์„œ๋น„์Šค ๊ตฌ์กฐ - Heee's Development Blog

Step by step goes a long way.

gmlwjd9405.github.io

 

- ์›น๊ณผ HTTP

 

WEB๊ณผ HTTP / (ํŠน์ง•, ๊ตฌ์กฐ, ๋™์ž‘ ๊ณผ์ • ์˜ˆ์‹œ)

ํ‹€๋ฆฐ ๋ถ€๋ถ„์ด ์žˆ๋‹ค๋ฉด ์ง€์ ํ•ด ์ฃผ์‹œ๋ฉด ๊ฐ์‚ฌํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ๊ณต๋ถ€์— ๋งŽ์€ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค. WEB (World Wide Web) ์›น = ์ธํ„ฐ๋„ท? ์ธํ„ฐ๋„ท์ด๋ผ๋Š” ๊ฑฐ๋Œ€ํ•œ ๋„คํŠธ์›Œํฌ ์œ„์—์„œ ๋‹ค์–‘ํ•œ ์„œ๋น„์Šค๋“ค์ด ๋™์ž‘ํ•˜๋Š”๋ฐ, ์›น๋„ ์ธํ„ฐ

mag1c.tistory.com

 

- WAS์™€ ์„œ๋ธ”๋ฆฟ

 

[WEB] WAS(Web Application Server)์™€ ์„œ๋ธ”๋ฆฟ(Servlet)์— ๋Œ€ํ•˜์—ฌ

์ดˆ์ฐฝ๊ธฐ ์›น์ด ์ถœํ˜„ํ–ˆ์„ ๋•Œ๋Š” ์ •์ (Static)์ธ ์›น ํŽ˜์ด์ง€๋“ค์ด ๋งŽ์•˜๊ณ  ๊ทธ๊ฒƒ๋“ค๋งŒ์œผ๋กœ๋„ ์˜๋ฏธ ์ „๋‹ฌ์ด ์ถฉ๋ถ„ํžˆ ๋  ์ˆ˜ ์žˆ์—ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ •์  ์›น ํŽ˜์ด์ง€์˜ ๋ชจ๋“  ๋‚ด์šฉ์€ ์ •ํ•ด์ ธ ์žˆ์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ๊ฐ์˜ ์‚ฌ์šฉ์ž์˜

velog.io

 

- fetch์™€ post

 

fetch ํ•จ์ˆ˜: POST Request

POST ์š”์ฒญ, fetch ํ•จ์ˆ˜, then() ๋ฉ”์„œ๋“œ์—์„œ์˜ ๋ถ„๊ธฐ ์ฒ˜๋ฆฌ, Response message ์ฒ˜๋ฆฌ

velog.io

 

- fetch

 

[JavaScript] fetch ํ•จ์ˆ˜ ์“ฐ๋Š” ๋ฒ•, fetch ํ•จ์ˆ˜๋กœ HTTP ์š”์ฒญํ•˜๋Š” ๋ฒ•

fetch ํ•จ์ˆ˜๋Š” XMLHttpRequest ๊ฐ์ฒด๋ณด๋‹ค ์ตœ๊ทผ์— ๋‚˜์˜จ, HTTP ์š”์ฒญ ์ „์†ก ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋Š” Web API๋‹ค. ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์•„์˜ค๊ธฐ ์œ„ํ•ด ์Šต๊ด€์ฒ˜๋Ÿผ ์“ฐ๋˜ fetch์— ๋Œ€ํ•ด ์ •๋ฆฌํ•ด๋ณด์•˜๋‹ค.

velog.io

 

- ๋ธŒ๋ผ์šฐ์ € ๋ Œ๋”๋ง, CSR๊ณผ SSR

 

ํด๋ผ์ด์–ธํŠธ ์‚ฌ์ด๋“œ ๋ Œ๋”๋ง(CSR) vs ์„œ๋ฒ„ ์‚ฌ์ด๋“œ ๋ Œ๋”๋ง(SSR)

๋ธŒ๋ผ์šฐ์ € ๋ Œ๋”๋ง์ด๋ž€? ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ์š”์ฒญํ•ด ๋ฐ›์€ ๋‚ด์šฉ์„ ๋ธŒ๋ผ์šฐ์ € ํ™”๋ฉด(View)์— ํ‘œ์‹œํ•ด์ฃผ๋Š” ์ž‘์—…์„ ๋งํ•œ๋‹ค. ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ HTML, CSS, JavaScript ๋ฌธ์„œ๋ฅผ ์ „๋‹ฌ๋ฐ›์•„ ๋ธŒ๋ผ์šฐ์ € ์—”์ง„์ด

suzzeong.tistory.com

 

 

#6083_ ๋น› ์„ž์–ด ์ƒ‰ ๋งŒ๋“ค๊ธฐ.

์ž…๋ ฅ : 2 2 2

์ถœ๋ ฅ : 0 0 0
      0 0 1
      0 1 0
      0 1 1
      1 0 0
      1 0 1
      1 1 0
      1 1 1
      8
๋‚ดํ’€์ด

r, g, b = map(int, input().split())
cnt = 0

for i in range(r):
    for j in range(g):
        for k in range(b):
            print(i, j, k)
            cnt += 1
print(cnt)
์ •๋‹ตํ’€์ด

r, g, b = input().split()

r = int(r)
g = int(g)
b = int(b)

for i in range(0, r) :
  for j in range(0, g) :
    for k in range(0, b) :
      print(i, j, k)

print(r*g*b)

 

 

 

#6089_ ์ˆ˜ ๋‚˜์—ดํ•˜๊ธฐ2.

์ž…๋ ฅ : 2 3 7

์ถœ๋ ฅ : 1458
๋‚ดํ’€์ด

a,r,n = map(int,input().split( ))
print(a*(r**(n-1)))
๋‚ดํ’€์ด

a, r, n = map(int, input().split())
ans = a*r

for i in range(0, n-2) :
  ans = ans*r

print(ans)
์ •๋‹ตํ’€์ด

a, r, n = input().split()

a = int(a)
r = int(r)
n = int(n)

for i in range(1, n) :
  a = a*r

print(a)
** ์—ฐ์‚ฐ์ž๋Š” ๊ฑฐ๋“ญ์ œ๊ณฑ ์—ฐ์‚ฐ์ž๋กœ **์˜ ์™ผ์ชฝ์˜ ํ”ผ์—ฐ์‚ฐ์ž๋ฅผ ๋ฐ‘, ์˜ค๋ฅธ์ชฝ์˜ ํ”ผ์—ฐ์‚ฐ์ž๋ฅผ ์ง€์ˆ˜๋กœ ํ•œ ๊ฐ’์„ ๊ตฌํ•œ๋‹ค.
๋„์›€์ด ๋  ์ˆ˜ ์žˆ์œผ๋‹ˆ ํ’€์ด๋ฅผ ์ ์–ด๋ณด์ž๋ฉด, ์ž…๋ ฅ์œผ๋กœ ๋“ค์–ด์˜จ ๊ฐ’ ์ค‘ 7์„ ์‚ดํŽด๋ณด๋ฉด ๊ทธ ์˜๋ฏธ๋Š” 7๋ฒˆ์งธ ์ˆ˜๋ฅผ ๊ตฌํ•˜๋ผ๋Š” ๋œป์ด๋‹ค. ์ฒซ๋ฒˆ์งธ ๋‚ดํ’€์ด์—์„œ n-1์ธ ์ด์œ ๋Š” a์ž์ฒด๊ฐ€ ์ฒซ๋ฒˆ์งธ ์ˆ˜๊ฐ€ ๋˜๋‹ˆ๊นŒ ๊ตณ์ด ์—ฐ์‚ฐ์„ ํ•  ํ•„์š”๊ฐ€ ์—†์–ด์„œ n์—์„œ ํ•˜๋‚˜๋ฅผ ์ฐจ๊ฐํ•œ ์ฑ„ ์‹œ์ž‘ํ•˜๋Š” ๊ฒƒ์ด๊ณ  ๋‘๋ฒˆ์งธ ๋‚ดํ’€์ด์—์„œ n-2์ธ ์ด์œ ๋Š” ์ฒซ๋ฒˆ์งธ ์ˆ˜ a, ๋‘๋ฒˆ์งธ ์ˆ˜ a*r(ans)์ด๋ผ์„œ ๋‘ ๊ฐœ์˜ ๊ณผ์ •์„ ์ œ์™ธํ•ด์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์— n-2๋ฅผ ํ•ด์คฌ๋‹ค.
2 - 6 - 18 - 54 - 162 - 486 - 1458 ์ด๋ ‡๊ฒŒ 7๋ฒˆ์งธ ์ˆ˜๋ฅผ ๊ตฌํ•˜๋ฉด ๋œ๋‹ค.

 

 

 

#6091_ ํ•จ๊ป˜ ๋ฌธ์ œ ํ‘ธ๋Š” ๋‚ .

์ž…๋ ฅ : 3 7 9

์ถœ๋ ฅ : 63
๋‚ดํ’€์ด

import math

a,b,c = map(int, input().split( ))

def lcm(x,y) :

 return(x*y)//math.gcd(x,y)

result = lcm(lcm(a,b),c)

print(result)
์ •๋‹ตํ’€์ด

a, b, c = map(int, input().split())
d = 1

while(d%a!=0 or d%b!=0 or d%c!=0) :
  d = d+1

print(d)
๋‚ดํ’€์ด๋Š” ์œ ํด๋ฆฌ๋“œ ํ˜ธ์ œ๋ฒ•์„ ์‚ฌ์šฉํ•œ ํ’€์ด๋‹ค. ํŒŒ์ด์ฌ์€ ๋‹ค์–‘ํ•œ ๋‚ด์žฅ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์žˆ์–ด ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ๋ฅผ ํ‘ธ๋Š”๋ฐ ์ฝ”๋“œ๊ฐ€ ์งง๊ฒŒ ๋‹จ์ถ•๋œ๋‹ค๋Š” ์žฅ์ ์ด ์žˆ๋‹ค. ๊ทธ ์ค‘ math ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์ˆ˜ํ•™ ๊ด€๋ จ ํ•จ์ˆ˜๊ฐ€ ๋“ค์–ด์žˆ์–ด, ์‚ผ๊ฐํ•จ์ˆ˜ ํ˜น์€ ์ œ๊ณฑ๊ทผ ๋“ฑ ๋‹ค์–‘ํ•œ ๋ฌธ์ œ๋ฅผ ์‰ฝ๊ฒŒ ํ’€ ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ค€๋‹ค.
lcm์€ ์ตœ์†Œ๊ณต๋ฐฐ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ํ•จ์ˆ˜๋กœ ์‚ฌ์šฉ์ž๊ฐ€ ์ •์˜ํ•œ ๊ฒƒ์ด๊ณ  ๊ทธ ์•ˆ์— math.gcd๋ผ๋Š” math ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ์†ํ•œ gcd ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ตœ์†Œ๊ณต๋ฐฐ์ˆ˜๋ฅผ ๊ตฌํ•  ์ˆ˜ ์žˆ๋‹ค. gcd๋Š” ์ตœ๋Œ€๊ณต์•ฝ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ํ•จ์ˆ˜๋กœ ๋‘ ์ˆ˜์ธ x์™€ y๋ฅผ 0์ด ๋  ๋•Œ ๊นŒ์ง€ ๋‚˜๋ˆ„๊ณ  ๋‚˜๋ˆ ์ง„ ์ˆ˜๋ฅผ ๋‘ ์ž์—ฐ์ˆ˜์˜ ๊ณฑ์— ๋‚˜๋ˆ„๋ฉด ์ตœ์†Œ๊ณต๋ฐฐ์ˆ˜๋ฅผ ๊ตฌํ•  ์ˆ˜ ์žˆ๋‹ค.

 

โ€‹

 

#6092_ ์ด์ƒํ•œ ์ถœ์„ ๋ฒˆํ˜ธ ๋ถ€๋ฅด๊ธฐ1.

์ž…๋ ฅ : 10
      1 3 2 2 5 6 7 4 5 9
      
์ถœ๋ ฅ : 1 2 1 1 2 1 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0
๋‚ดํ’€์ด

a = int(input())
num = list(map(int,input().split()))
att = list()

for i in range(24):
  att.append(0)

for i in range(a):
  att[num[i]] = att[num[i]]+1

for i in range(1, 24):
  print(att[i], end=" ")
์ •๋‹ตํ’€์ด

n = int(input())
a = input().split()

for i in range(n) :
  a[i] = int(a[i])

d = []
for i in range(24) :
  d.append(0)

for i in range(n) :
  d[a[i]] += 1

for i in range(1, 24) :
  print(d[i], end=' ')
๋ฆฌ์ŠคํŠธ๋ฅผ ๋งŒ๋“ค ๋•Œ ๊ผญ ์–ด๋–ค ์ˆ˜๋กœ๋“  ์ฑ„์›Œ๋„ฃ์–ด์ค˜์•ผํ•œ๋‹ค. ์•ˆ๊ทธ๋Ÿฌ๋ฉด 0๋ฒˆ์ง€, 1๋ฒˆ์ง€ ๋“ฑ ์ธ๋ฑ์Šค๋กœ ์ ‘๊ทผํ•˜๋ ค๊ณ  ํ•  ๋•Œ ๋ฆฌ์ŠคํŠธ๊ฐ€ ๋น„์–ด์žˆ์–ด ํ•ด๋‹น ์ธ๋ฑ์Šค๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š์•„ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

 

 

 

#6093_ ์ด์ƒํ•œ ์ถœ์„ ๋ฒˆํ˜ธ ๋ถ€๋ฅด๊ธฐ2.

์ž…๋ ฅ : 10

์ถœ๋ ฅ : 5 8 9 7 6 6 3 2 4 10
๋‚ดํ’€์ด

a = int(input())
b = a-1
num = list(map(int,input().split()))

for i in range(a) :
  print(num[b-i],end=" ")
๋‚ดํ’€์ด

n = int(input())
a = list(map(int,input().split( )))

d = []
for i in range(n) :
  d.append(a[i])

d.reverse()

for i in range(n) :
  print(d[i], end=" ")
์ •๋‹ตํ’€์ด

n = int(input())
a = input().split()

for i in range(n) :
  a[i] = int(a[i])

for i in range(n-1, -1, -1):
  print(a[i], end=' ')
d.reverse( )๋Š” ํ˜„์žฌ ๋ฆฌ์ŠคํŠธ๋ฅผ ๊ทธ๋Œ€๋กœ ๊ฑฐ๊พธ๋กœ ๋’ค์ง‘์–ด์ค€๋‹ค. (์—ญ์ˆœ์ •๋ ฌ์ด ์•„๋‹˜)


#6063_ ์ •์ˆ˜ ๋‘ ๊ฐœ ์ž…๋ ฅ๋ฐ›์•„ ํฐ ๊ฐ’ ์ถœ๋ ฅํ•˜๊ธฐ. (์‚ผํ•ญ์—ฐ์‚ฐ์ž ์‚ฌ์šฉํ•  ๊ฒƒ)

์ž…๋ ฅ : 123 456

์ถœ๋ ฅ : 456
๋‚ดํ’€์ด

a,b = map(int,input().split())
c = a if a>b else b
print(c)
๋‚ดํ’€์ด

a,b = map(int,input().split())
print(a) if a>b else print(b)
์ •๋‹ตํ’€์ด

a, b = input().split()
a = int(a)
b = int(b)
c = a if a>=b else b
print(c)
์‚ผํ•ญ์—ฐ์‚ฐ์ž๋Š” [์ฐธ์ผ๋•Œ] if [์กฐ๊ฑด๋ฌธ] else [๊ฑฐ์ง“์ผ๋•Œ] ํ˜•ํƒœ๋กœ ์“ฐ์ด๋ฉฐ ์ฝ”๋“œ๊ฐ€ ๊ฐ„๊ฒฐํ•ด๋ณด์ธ๋‹ค๋Š” ์žฅ์ ์ด ์žˆ์ง€๋งŒ, ์˜คํžˆ๋ ค ๋ณต์žกํ•œ ์—ฐ์‚ฐ์˜ ๊ฒฝ์šฐ ๊ฐ€๋…์„ฑ์ด ๋” ๋–จ์–ด์ ธ ๋ณด์ผ ์ˆ˜ ์žˆ๋‹ค.

 

- ์‚ผํ•ญ ์—ฐ์‚ฐ์ž

 

[python] ํŒŒ์ด์ฌ ์‚ผํ•ญ ์—ฐ์‚ฐ์ž (if ~ else ~)

์•ˆ๋…•ํ•˜์„ธ์š”. BlockDMask์ž…๋‹ˆ๋‹ค. ์˜ค๋Š˜์€ ํŒŒ์ด์ฌ์—์„œ ์‚ฌ์šฉํ•˜๋Š” ์‚ผํ•ญ ์—ฐ์‚ฐ์ž์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. 1. ํŒŒ์ด์ฌ์—์„œ์˜ ์‚ผํ•ญ ์—ฐ์‚ฐ์ž 2. ํŒŒ์ด์ฌ ์‚ผํ•ญ ์—ฐ์‚ฐ์ž ์˜ˆ์ œ 1. ์‚ผํ•ญ ์—ฐ์‚ฐ์ž (Ternary Operators) 1-1) ์‚ผ

blockdmask.tistory.com

 

 

 


#6071_ 0์ด ์ž…๋ ฅ๋  ๋•Œ๊นŒ์ง€ ๋ฌดํ•œ ์ถœ๋ ฅํ•˜๊ธฐ.

์ถœ๋ ฅ : 7
      4
      2
      3
      0
      1
      
์ž…๋ ฅ : 7
      4
      2
      3
๋‚ดํ’€์ด

while True :
    a = int(input())
    if a == 0 :
        break
    print(a)
์ •๋‹ตํ’€์ด

while True:
    a=input()
    a=int(a)
    if a==0:
        break
    else:
        print(a)
์ •๋‹ตํ’€์ด

n = 1

while n != 0 :
  n = int(input())
  if n != 0 :
    print(n)

 

 

 

#6074_ ๋ฌธ์ž ํ•œ ๊ฐœ ์ž…๋ ฅ๋ฐ›์•„ ์•ŒํŒŒ๋ฒณ ์ถœ๋ ฅํ•˜๊ธฐ

์ž…๋ ฅ : f

์ถœ๋ ฅ : a b c d e f
๋‚ดํ’€์ด

a = ord(input())
c = 97

while a >= c :
  print(chr(c), end = " ")
  c = c+1
์ •๋‹ตํ’€์ด

c = input()
i = ord('a')
c = ord(c)

while i<=c:
    print(chr(i), end=' ')
    i+=1
ord('A')๋Š” 65์ด๊ณ , ord('a')๋Š” 97์ด๋‹ค.

 

 


#6081_ 16์ง„์ˆ˜ ๊ตฌ๊ตฌ๋‹จ ์ถœ๋ ฅํ•˜๊ธฐ.

์ž…๋ ฅ : B

์ถœ๋ ฅ : B*1=B
      ...
      B*F=A5
๋‚ดํ’€์ด

a = int(input(),16)
b = int('F',16)
c = int('1', 16)

while c <= b :
  print('%X'%a+'*'+'%X'%c+'='+'%X'%(a*c))
  c = c+1
์ •๋‹ตํ’€์ด

n = int(input(), 16)

for i in range(1, 16) :
  print('%X'%n, '*%X'%i, '=%X'%(n*i), sep='')
16์ง„์ˆ˜๋ฅผ ํ‘œํ˜„ํ•  ๋•Œ %X(๋Œ€๋ฌธ์žํ‘œํ˜„)์™€ %x(์†Œ๋ฌธ์žํ‘œํ˜„)๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.  8์ง„์ˆ˜๋ฅผ ํ‘œํ˜„ํ•  ๋•Œ %O(๋Œ€๋ฌธ์žํ‘œํ˜„)์™€ %o(์†Œ๋ฌธ์žํ‘œํ˜„)๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. 16์ง„์ˆ˜์™€ 8์ง„์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ๋Š” 2์ง„์ˆ˜๋กœ ๊ฐ’์„ ํ‘œํ˜„ํ•˜๊ธฐ์— ๋„ˆ๋ฌด ๊ธธ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. 16์ง„์ˆ˜์™€ 8์ง„์ˆ˜ ๋ชจ๋‘ 2์ง„์ˆ˜์˜ ์ œ๊ณฑ์˜ ํ˜•ํƒœ๋กœ ๊ธธ์–ด์ง„ 2์ง„์ˆ˜์˜ ๊ฐ’์„ ์งง๊ฒŒ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

- 2์ง„์ˆ˜ 8์ง„์ˆ˜ 16์ง„์ˆ˜๋ฅผ ์“ฐ๋Š” ์ด์œ 

 

์ปดํ“จํ„ฐ์—์„œ 2์ง„์ˆ˜, 8์ง„์ˆ˜ 16์ง„์ˆ˜๋ฅผ ์“ฐ๋Š” ์ด์œ 

๊ธฐ๋ณธ์ ์œผ๋กœ ์ธ๊ฐ„์€ 10์ง„์ˆ˜๋ฅผ ์“ด๋‹ค. ํ•˜์ง€๋งŒ ์ปดํ“จํ„ฐ๋Š” 0,1 ๋‘๊ฐ€์ง€ ๋ฐ–์— ๋ชจ๋ฅธ๋‹ค๊ณ  ํ•œ๋‹ค. ๊ทธ๋ž˜์„œ 2์ง„๋ฒ•์„ ์“ด๋‹ค๊ณ  ๋ณด๋ฉด ๋˜๋Š”๋ฐ ์‹ฌ์‹ฌ์น˜์•Š๊ฒŒ 8์ง„์ˆ˜์™€ 16์ง„์ˆ˜๋ฅผ ์ฝ”๋”ฉํ•  ๋•Œ ์“ฐ๊ฒŒ๋œ๋‹ค. ํŒŒ์ผ ๊ฐ™์€๊ฑธ ๋‹ค๋ฃฐ ๋•Œ

velog.io

 

 

 

#6082_ 3 6 9 ๊ฒŒ์ž„์˜ ์™•์ด ๋˜์ž.

์ž…๋ ฅ : 9

์ถœ๋ ฅ : 1 2 X 4 5 X 7 8 X
๋‚ดํ’€์ด

a = int(input())

for i in range (1, a+1) :
  b = i%10
  if b==3 or b==6 or b==9 :
    print('X',end=" ")

  else :
    print(i, end=" ")
๋‚ดํ’€์ด

a = int(input())

for i in range(1, a+1):
  if str(i).count('3')+str(i).count('6')+str(i).count('9') :
    print("X", end =" ")
  else :
    print(i, end=" ")
์ •๋‹ตํ’€์ด

n = int(input())

for i in range(1, n+1) :
  if i%10==3 or i%10==6 or i%10==9 :
    print("X", end=' ')
  else :
    print(i, end=' ')
i๊ฐ’์„ str์ธ ๋ฌธ์ž์—ด๋กœ ๋ฐ›๊ณ , ๋ฌธ์ž์—ด i์— 3๊ณผ 6 ๊ทธ๋ฆฌ๊ณ  9๋ผ๋Š” ๋ฌธ์ž๊ฐ€ ํ•œ ๋ฒˆ์ด๋ผ๋„ ๋‚˜์˜ค๋ฉด X๊ฐ€ ์ถœ๋ ฅ๋˜๋„๋ก ๋งŒ๋“ค์—ˆ๋‹ค. ์—ฌ๊ธฐ์„œ count( )๋Š” ๊ด„ํ˜ธ ์•ˆ์— ์ ์ธ ๊ธ€์ž๊ฐ€ ๋ช‡ ๋ฒˆ ๋‚˜์˜ค๋Š”์ง€ ์„ธ๋Š” ํ•จ์ˆ˜๋‹ค.

 

 


#6033_ ๋ฌธ์ž ํ•œ ๊ฐœ ์ž…๋ ฅ๋ฐ›์•„ ๋‹ค์Œ ๋ฌธ์ž ์ถœ๋ ฅํ•˜๊ธฐ.

์ž…๋ ฅ: a
์ถœ๋ ฅ: b
๋‚ดํ’€์ด

a = ord(input())
print(chr(a+1))
์ •๋‹ตํ’€์ด

a=input()
b=ord(a)+1
c=chr(b)
print(c)
ord๋Š” ๋ฌธ์ž -> ์ˆซ์ž๋กœ, chr๋Š” ์ˆซ์ž -> ๋ฌธ์ž๋กœ ๋ณ€ํ™˜ํ•œ๋‹ค.
๋ฌธ์ž๊ฐ€ ๋“ค์–ด์™”๊ณ  ๊ทธ ๊ฐ’์„ ์ˆซ์ž๋กœ ๋ฐ”๊พผ ํ›„ a์— ๋„ฃ๋Š” ๊ฒƒ์ด๋‹ˆ a์—๋Š” ์ˆซ์ž๊ฐ€ ๋“ค์–ด๊ฐ€ ์žˆ๋‹ค.
๊ทธ๋ฆฌ๊ณ  a์˜ ๊ฐ’์— 1์„ ๋”ํ•œ ๊ฐ’์„ ๋‹ค์‹œ ๋ฌธ์ž๋กœ ๋ฐ”๊พธ๋ฉด ํ•˜๋‚˜์˜ ๊ฐ’์ด ์ƒ์Šนํ•œ ๋ฌธ์ž๊ฐ€ ์ถœ๋ ฅ๋œ๋‹ค.

 

 

 

#6042_ ์‹ค์ˆ˜ 1๊ฐœ ์ž…๋ ฅ๋ฐ›์•„ ์†Œ์ˆซ์  ์ดํ•˜ ์ž๋ฆฌ ๋ณ€ํ™˜ํ•˜๊ธฐ.

์ž…๋ ฅ: 3.141592

์ถœ๋ ฅ: 3.14
๋‚ดํ’€์ด

a = float(input())
print(format(a,".2f"))
์ •๋‹ตํ’€์ด

f = float(input())
print(round(f,2))
format ๋ฉ”์„œ๋“œ๋Š” ๋ฌธ์ž์—ด์„ ๊ตฌ์„ฑํ•˜๋Š”๋ฐ ์‚ฌ์šฉํ•œ๋‹ค. format ๋ฉ”์„œ๋“œ ์ค‘๊ด„ํ˜ธ ์•ˆ์— ๋ณ€์ˆ˜๋‚˜ ๊ฐ’์„ ๋„ฃ์„ ์ˆ˜๋„ ์žˆ๊ณ  ํ˜•์‹ ์ง€์ •์ž๋„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋‹ค.  round ๋ฉ”์„œ๋“œ๋Š” ์ˆซ์ž ์ค‘ ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ์ •์ˆ˜๋กœ ๋ฐ˜์˜ฌ๋ฆผํ•œ๋‹ค. ๊ทธ ์™ธ ceil๊ณผ floor๋กœ ์˜ฌ๋ฆผ๊ณผ ๋‚ด๋ฆผ์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฉ”์„œ๋“œ๋„ ์žˆ๋‹ค.

 

 

 

- format()ํ•จ์ˆ˜ ์‚ฌ์šฉ๋ฒ• ์ •๋ฆฌ ์ถœ์ฒ˜

 

[ํŒŒ์ด์ฌ] format() ํ•จ์ˆ˜ ์‚ฌ์šฉ๋ฒ• ์ •๋ฆฌ

Python์˜ format() ๋ฉ”์†Œ๋“œ๋Š” ๋ฌธ์ž์—ด์„ ๊ตฌ์„ฑํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋ฉฐ, ์ง€์ •๋œ ํ˜•์‹์— ๋งž๊ฒŒ ๊ฐ’์„ ํฌ๋งทํ•˜๊ฑฐ๋‚˜ ์ถœ๋ ฅํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. format() ๋ฉ”์†Œ๋“œ๋Š” ์ค‘๊ด„ํ˜ธ {}๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฌธ์ž์—ด ์•ˆ์— ๋ณ€์ˆ˜๋‚˜ ๊ฐ’๋“ค์„ ์‚ฝ์ž…

python101.tistory.com

 

 

- round() ceil() floor() ์ถœ์ฒ˜

 

[ํŒŒ์ด์ฌ] ๋ฐ˜์˜ฌ๋ฆผ, ์˜ฌ๋ฆผ, ๋‚ด๋ฆผ (round, ceil, floor) ๋ฐฉ๋ฒ•

Python์—์„œ ๋ฐ˜์˜ฌ๋ฆผ, ์˜ฌ๋ฆผ, ๋‚ด๋ฆผ์„ ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋‚ด์žฅ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ„๋‹จํ•˜๊ฒŒ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 1. ๋ฐ˜์˜ฌ๋ฆผ(round) round() ํ•จ์ˆ˜๋Š” ์ˆซ์ž๋ฅผ ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ์ •์ˆ˜๋กœ ๋ฐ˜์˜ฌ๋ฆผํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, round(3.7)์€ 4

python101.tistory.com

 

 

 

#6048_ ์ •์ˆ˜ 2๊ฐœ๋ฅผ ์ž…๋ ฅ๋ฐ›์•„ ๋น„๊ตํ•˜๊ธฐ.

์ž…๋ ฅ : 1 9

์ถœ๋ ฅ : True
๋‚ดํ’€์ด

a,b = map(int, input.split())
if (a<b) :
    print(True)
else :
    print(False)
์ •๋‹ตํ’€์ด

a, b = input().split()
a = int(a)
b = int(b)
print(a<b)

 

 

 

#6048_ ๋‘˜ ๋‹ค ์ฐธ์ผ ๊ฒฝ์šฐ๋งŒ ์ฐธ ์ถœ๋ ฅํ•˜๊ธฐ.

์ž…๋ ฅ : 1 1

์ถœ๋ ฅ : True
๋‚ดํ’€์ด

a,b = map(int, input().split())

if a >0 and b>0 :
  print(True)
else :
  print(False)
์ •๋‹ตํ’€์ด

a, b = input().split()
print(bool(int(a)) and bool(int(b)))
Bool ์ž๋ฃŒํ˜•
1. ๋ฌธ์ž์—ด์˜ ๊ฒฝ์šฐ ๋น„์–ด์žˆ์œผ๋ฉด False, ๋น„์–ด์žˆ์ง€ ์•Š์œผ๋ฉด True
2. ๋ฆฌ์ŠคํŠธ์˜ ๊ฒฝ์šฐ ๋น„์–ด์žˆ์œผ๋ฉด False, ๋น„์–ด์žˆ์ง€ ์•Š์œผ๋ฉด True
3. ์ˆซ์žํ˜•์˜ ๊ฒฝ์šฐ 0์ด๋ฉด False, 0์ด ์•„๋‹ˆ๋ฉด True
4. None ๊ฐ’์€ False

 

 

 

#6059_ ๋น„ํŠธ ๋‹จ์œ„๋กœ NOTํ•˜์—ฌ ์ถœ๋ ฅํ•˜๊ธฐ.

์ž…๋ ฅ : 2

์ถœ๋ ฅ : -3
๋‚ดํ’€์ด&์ •๋‹ตํ’€์ด

a = int(input())
print(~a)
~a = -a-1 = -(n+1)๋กœ ํ‹ธ๋“œ ์—ฐ์‚ฐ์ž๋ฅผ ํ†ตํ•ด ์Œ์ˆ˜๋ฅผ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค. ์–ด๋–ค ๋ฆฌ์ŠคํŠธ์—์„œ ๋’ค์—์„œ n๋ฒˆ์งธ ๊ฐ’์„ ์•Œ๊ณ  ์‹ถ๊ฑฐ๋‚˜ ๋ฐ˜์ „๋œ ์ƒํƒœ๊ฐ€ ์•Œ๊ณ  ์‹ถ์„ ๋•Œ (์ผ๋ถ€ ๋น„ํŠธ ์กฐ์ž‘ ์•Œ๊ณ ๋ฆฌ์ฆ˜) ์‚ฌ์šฉํ•œ๋‹ค.

 


๐Ÿ“š ์ฐธ๊ณ ํ•œ ์ฑ…

 

: ์ถœ์ฒ˜ ์˜ˆ์Šค24 ํ™ˆํŽ˜์ด์ง€

 

 

 

- ๊ธฐ๋ณธ์ ์ธ ๊ฐœ๋…์„ ์ •๋ฆฌํ•˜๊ณ  ์ถ”๊ฐ€์ ์œผ๋กœ ๊ถ๊ธˆํ•œ ๊ฒƒ๋“ค์„ ์ •๋ฆฌํ–ˆ์Šต๋‹ˆ๋‹ค -

 

 

๐Ÿฅ ๐Ÿฅ ๐Ÿฅ

 


 

โœ”๏ธ   ์ œ๋„ค๋ฆญ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ_ 585p

 

• ๊ฐ์ฒด๋ฅผ ์ €์žฅํ•˜๋Š” ํด๋ž˜์Šค

class Onion { }

class Goods1 {
    private Onion onion = new Onion();
    public Onion get() {
        return onionl
    }
    
    public void set(Onion onion) {
        this.onion = onion;
    }
}
Goods1 g1 = new Goods1();
g1.setOnion(new Onion());
Onion onion = (Onion)g1.get();
Onion ํด๋ž˜์Šค์™€ Onion ํด๋ž˜์Šค๋ฅผ ๋‹ด์„ ์ˆ˜ ์žˆ๋Š” Goods1 ํด๋ž˜์Šค๊ฐ€ ์žˆ๋‹ค. Goods1์€ Onion ํด๋ž˜์Šค๋งŒ ๋‹ด์„ ์ˆ˜ ์žˆ์œผ๋‹ˆ Onion์ด ์•„๋‹Œ ๋‹ค๋ฅธ ๊ฒƒ์„ ๋‹ด๊ณ  ์‹ถ์–ด์ง€๋ฉด ์ƒˆ๋กœ์šด ํด๋ž˜์Šค๋ฅผ ์ƒ์„ฑํ•ด์•ผํ•œ๋‹ค. ํ•˜์ง€๋งŒ ์–ด๋–ค ์ฝ”๋“œ๋Š” ํ•˜๋‚˜์˜ ํด๋ž˜์Šค์— ๋‹ค์–‘ํ•œ ํด๋ž˜์Šค๋ฅผ ๋‹ด๊ณ  ์‹ถ์„ ์ˆ˜๋„ ์žˆ๋‹ค.

 

 

• Object๋กœ ์ •์˜ํ•œ ํด๋ž˜์Šค

class Onion {}
class Radish {}

class Goods {
    private Object object = new Object();
    public Object get() {
        return object;
    }
    public void set(Object object) {
        this.object = object;
    }
}
Goods g1 = new Goods();
g1.set(new Onion());
Onion onion = (Onion)g1.get();

Goods g2 = new Goods();
g2.set(new Radish());
Radish radish = (Radish)g2.get();
Onion๊ณผ Radish๋Š” ๋ชจ๋‘ Object ํƒ€์ž…์˜ ์ž์‹์ด๋‹ค. ์™œ๋ƒํ•˜๋ฉด ์ž๋ฐ”์—์„œ ๋ชจ๋“  ํด๋ž˜์Šค์˜ ์ตœ์ƒ์œ„ ๋ถ€๋ชจ๋Š” Object๋ฅผ ์ƒ์†๋ฐ›๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ์˜ˆ์ œ ์ฝ”๋“œ๋Š” set( ) ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด ๊ฐ์ฒด๋ฅผ ์ €์žฅํ•˜๊ณ , get( ) ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด ์ €์žฅ๋œ ๊ฐ’์„ ๊บผ๋‚ธ๋‹ค.

๋งจ ์ฒ˜์Œ ์ œ๋„ˆ๋ฆญ ์—†์ด ๊ฐ์ฒด๋ฅผ ์ €์žฅํ•œ ํด๋ž˜์Šค์˜ ์˜ˆ์‹œ๋ฅผ ์‚ดํŽด๋ณด์ž. ๊ฐ์ฒด๋ฅผ ์ €์žฅํ•  ๋•Œ g1.setOnion์ด๋ผ๊ณ  ์ ์—ˆ๋‹ค. ํ•˜์ง€๋งŒ Object๋กœ ์ •์˜ํ•œ ์ฝ”๋“œ๋ฅผ ์‚ดํŽด๋ณด๋ฉด g1.set(new Onion());์œผ๋กœ Onion์ด Object ํƒ€์ž…์œผ๋กœ ์ €์žฅ๋˜์–ด์žˆ๋‹ค. ์ด ์ ์—์„œ ๋‘ ์ฝ”๋“œ์˜ ์ฐจ์ด๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

Object ํƒ€์ž…์œผ๋กœ ์ €์žฅํ–ˆ์œผ๋‹ˆ get์—์„œ๋„ Object ํƒ€์ž…์œผ๋กœ ๊บผ๋‚ผ ๊ฒƒ ๊ฐ™์ง€๋งŒ ์‚ฌ์‹ค ๊ทธ๋ ‡์ง€ ์•Š๋‹ค. ๊บผ๋‚ผ ๋•Œ๋Š” ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด Onion๊ณผ Radish ๊ฐ์ฒด๋กœ ๋‹ค์šด ์บ์ŠคํŒ…ํ•ด์•ผ ํ•œ๋‹ค. ๋งŒ์•ฝ ์ž˜๋ชป ์บ์ŠคํŒ…์ด ๋œ ๊ฒฝ์šฐ ClassCastException ์‹คํ–‰ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉฐ ํ”„๋กœ๊ทธ๋žจ์ด ์ข…๋ฃŒ๋œ๋‹ค. ์ด๋ฅผ ์•ฝํ•œ ํƒ€์ž… ์ฒดํฌ๋ผ๊ณ  ํ•œ๋‹ค. 

 

 

 


 

 

 

โœ”๏ธ   ์ œ๋„ค๋ฆญ ๋ฌธ๋ฒ•_ 591p

 

• ์ œ๋„ค๋ฆญ

: ํด๋ž˜์Šค ๋‚ด๋ถ€์—์„œ ์‚ฌ์šฉํ•  ๋ฐ์ดํ„ฐ ํƒ€์ž…์„ ์™ธ๋ถ€์—์„œ ์ง€์ •ํ•˜๋Š” ๊ธฐ๋ฒ•

 

• ๊ฐ•ํ•œ ํƒ€์ž… ์ฒดํฌ

: ์ž˜๋ชป๋œ ์บ์ŠคํŒ…์„ ํ•  ๋•Œ ๋ฌธ๋ฒ• ์˜ค๋ฅ˜๋ฅผ ๋ฐœ์ƒ์‹œ์ผœ ์ž˜๋ชป๋œ ์บ์ŠคํŒ…์œผ๋กœ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ๋ฅผ ์‚ฌ์ „์— ์˜ˆ๋ฐฉ

 

• ์ œ๋„ค๋ฆญ ํƒ€์ž… ๋ณ€์ˆ˜์˜ ๊ด€๋ก€์  ํ‘œ๊ธฐ ๋ฐ ์˜๋ฏธ

T ํƒ€์ž…(Type)
K ํ‚ค(Key)
V ๊ฐ’(Value)
N ์ˆซ์ž(Number)
E ์›์†Œ(Element)

 

class KeyValue<K, V> {
    private K key;
    private V value;
    public K getKey() {
        return key;
    }
    
    public void setKey(K key) {
        this.key = key;
    }
    
    public void setValue(V value) {
        this.value = value;
    }
}
KeyValue<String, Integer> kv1 = new KeyValue<>();
kv1.setKey("์‚ฌ๊ณผ");
kv1.setValue(1000);
String key1 = kv1.getKey();
int value1 = kv1.getValue();
System.out.println("key: " + key1 + "value: " + value1);

KeyValue<String, Void> kv2 = new KeyValue<>();
kv2.setKey("ํ‚ค ๊ฐ’๋งŒ ์‚ฌ์šฉ");
String key2 = kv2.getKey();
System.out.println("key: " + key2);
kv1๊ณผ kv2์˜ ํƒ€์ž…์ด ๋‹ค๋ฅด๊ฒŒ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋Š” ์ด์œ ๋Š” ์ œ๋„ค๋ฆญ ํด๋ž˜์Šค๋Š” ํด๋ž˜์Šค๋ฅผ ์ •์˜ํ•˜๋Š” ์‹œ์ ์— ํƒ€์ž…์„ ์ง€์ •ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹Œ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๋Š” ์‹œ์ ์— ํƒ€์ž…์„ ์ง€์ •ํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๊ทธ๋ž˜์„œ ํ•˜๋‚˜์˜ ์ œ๋„ค๋ฆญ ํด๋ž˜์Šค๋กœ ๋‹ค์–‘ํ•œ ํƒ€์ž…์˜ ๊ฐ’์„ ์ €์žฅ ๋ฐ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด๋‹ค.

Object ํƒ€์ž…์˜ ํ•„๋“œ์™€ ์ œ๋„ค๋ฆญ์˜ ๊ฐ€์žฅ ํฐ ์ฐจ์ด์ ์€ setter ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ์ž…๋ ฅ ํƒ€์ž…์„ ์ •ํ™•ํžˆ ํ™•์ธํ•  ์ˆ˜ ์žˆ๊ณ , ๋‹ค์šด์บ์ŠคํŒ…์„ ํ•˜์ง€ ์•Š์•„๋„ ํ•ด๋‹น ํƒ€์ž…์œผ๋กœ ์•Œ์•„์„œ ๋ฆฌํ„ด๋œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ๋งŒ์•ฝ kv2์˜ setKey์— ๋ฌธ์ž์—ด์ด ์•„๋‹Œ ์ˆซ์ž๋ฅผ ๋Œ€์ž…ํ•˜๊ฑฐ๋‚˜ getํ•  ๋•Œ String์ด ์•„๋‹Œ ๋‹ค๋ฅธ ํƒ€์ž…์œผ๋กœ ๊บผ๋‚ด๋Š” ๊ฒฝ์šฐ ๊ฐ•ํ•œ ํƒ€์ž… ์ฒดํฌ๋กœ ์ธํ•ด ๋ฌธ๋ฒ• ์˜ค๋ฅ˜ ๋ฐœ์ƒ์ด ์ผ์–ด๋‚œ๋‹ค. 

์ฝ”๋“œ๋ฅผ ์‚ดํŽด๋ณด์ž KeyValue<String, Integer> kv1 = new KeyValue<>();์—์„œ  KeyValue<String, Integer> kv1 = new KeyValue<String, integer>();์œผ๋กœ ์ž‘์„ฑํ•ด๋„ ๋œ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ œ๋„ค๋ฆญ ํƒ€์ž…์€ ํ•ญ์ƒ ์™ผ์ชฝ ํ•ญ๊ณผ ๋™์ผํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ƒ๋žตํ•  ์ˆ˜ ์žˆ๋‹ค. ์œ„์˜ ์ฝ”๋“œ์—์„œ๋Š” ์ œ๋„ค๋ฆญ ํƒ€์ž… ๋ณ€์ˆ˜๋ฅผ 2๊ฐœ ๊ฐ€์ง„ ๊ฒฝ์šฐ๋กœ ์ž‘์„ฑ๋˜์—ˆ๋Š”๋ฐ, ๋งŒ์•ฝ ํ•˜๋‚˜์˜ ํƒ€์ž…๋งŒ ํ•„์š”ํ•œ ๊ฒฝ์šฐ Void๋ฅผ ์ ์œผ๋ฉด ๋œ๋‹ค. 

 

 

 


 

 

 

โœ”๏ธ   ์ œ๋„ค๋ฆญ ๋ฉ”์„œ๋“œ_ 597p

 

• ์ œ๋„ค๋ฆญ ๋ฉ”์„œ๋“œ

: ์ผ๋ฐ˜ ํด๋ž˜์Šค ๋‚ด๋ถ€์˜ ํŠน์ • ๋ฉ”์„œ๋“œ๋งŒ ์ œ๋„ค๋ฆญ์œผ๋กœ ์„ ์–ธํ•œ ๊ฒฝ์šฐ

class GenericMethods{
    public <K,V> method1(K k, V v) {
        System.out.println(k + ":" + v);
    }
}
GenericMethods gm = new GenericMethods();

gm.<String, Integer>method1("๊ตญ์–ด", 80);
gm.method1("๊ตญ์–ด", 80);
์ผ๋ฐ˜ ํด๋ž˜์Šค GenericMethods ๋‚ด์— ์ œ๋„ค๋ฆญ ๋ฉ”์„œ๋“œ๋กœ 2๊ฐœ์˜ ์ œ๋„ค๋ฆญ ํƒ€์ž… ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋‹ค. ์ฐธ์กฐ๊ฐ์ฒด gm์„ ํ™œ์šฉํ•œ ์ฝ”๋“œ๋ฅผ ๋ณด๋ฉด ์‹ค์ œ ์ œ๋„ค๋ฆญ ํƒ€์ž…์ด ์–ด๋–ค ํƒ€์ž…์ด์ง€ ์ •์˜ํ•ด๋‘” ์ฝ”๋“œ์™€ ์ƒ๋žตํ•œ ์ฝ”๋“œ๋ฅผ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. ์ž…๋ ฅ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ํ†ตํ•ด ์ œ๋„ค๋ฆญ ํƒ€์ž…์ด ์–ด๋–ค ํƒ€์ž…์ธ์ง€ ์•Œ ์ˆ˜ ์žˆ๊ธฐ ์ƒ๋žตํ•ด๋„ ๋ฌด๊ด€ํ•˜๋‹ค. ๋‹ค๋งŒ ์ž…๋ ฅ๋งค๊ฐœ๋ณ€์ˆ˜ ์ž์ฒด๊ฐ€ ์—†๊ฑฐ๋‚˜ ์ž…๋ ฅ๋งค๊ฐœ๋ณ€์ˆ˜์—์„œ ์ œ๋„ค๋ฆญ ํƒ€์ž… ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” public static <T> void doSomething() ์ด๋Ÿฐ ์˜ˆ์‹œ ์ฝ”๋“œ์˜ ๊ฒฝ์šฐ ์ž…๋ ฅ๊ฐ’์œผ๋กœ ์˜ˆ์ธกํ•  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— ์ƒ๋žต์ด ๋ถˆ๊ฐ€ํ•˜๋‹ค.

 

 

• ์ œ๋„ค๋ฆญ Object ํƒ€์ž…

public <T> void method(T t) {
    System.out.println(t.equals("์•ˆ๋…•"));
}
์œ„์˜ ์ฝ”๋“œ๋Š” ํƒ€์ž…์— ์ œํ•œ์ด ์—†๋Š” ์ฝ”๋“œ๋‹ค. ์ด๋Ÿฐ ๊ฒฝ์šฐ ์ปดํŒŒ์ผ ์‹œ T๋ฅผ Object๋กœ ๊ฐ„์ฃผํ•˜์—ฌ Object์— ์ •์˜๋œ ๋ฉ”์„œ๋“œ hashcode, eqauls, toString ๋“ฑ๋งŒ ์‚ฌ์šฉ๊ฐ€๋Šฅํ•˜๋‹ค. ์ด๋ ‡๊ฒŒ ๋˜๋ฉด ์ œ๋„ค๋ฆญ ๋ฉ”์„œ๋“œ์˜ ํ™œ์šฉ ๋ฒ”์œ„๊ฐ€ ๋งค์šฐ ์ข์•„์ง€๊ฒŒ๋œ๋‹ค.

์•„๋ž˜์— ์ •๋ฆฌ๋˜๊ฒ ์ง€๋งŒ, ๊ทธ๋ž˜์„œ ์ด๋Ÿฐ ๊ฒฝ์šฐ ๋” ๋„“๊ฒŒ ํ™œ์šฉํ•˜๊ธฐ ์œ„ํ•ด ์ œ๋„ค๋ฆญ ํƒ€์ž…์˜ ๋ฒ”์œ„๋ฅผ ์ œํ•œํ•œ๋‹ค. ํ˜„์žฌ ์ฝ”๋“œ์—์„œ t.equals๊ฐ€ ์•„๋‹Œ t.length์ธ String ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์€ ๊ฒฝ์šฐ <T>๋ฅผ <T extends String>์œผ๋กœ ๋ณ€๊ฒฝํ•˜๋ฉด String ํด๋ž˜์Šค์— ์žˆ๋Š” ๋ฉ”์„œ๋“œ๋„ ์‚ฌ์šฉ๊ฐ€๋Šฅํ•ด์ง„๋‹ค.

 

 

 


 

 

 

โœ”๏ธ   ์ œ๋„ค๋ฆญ ํƒ€์ž… ๋ฒ”์œ„ ์ œํ•œ_ 602p

 

• ์ œ๋„ค๋ฆญ ํด๋ž˜์Šค ํƒ€์ž… ๋ฒ”์œ„ ์ œํ•œ

class A {}
class B extends A {}
class C extends B {}

class D <T extends B> {
    private T t;
    public T get() {
        return t;
    }
    public void set(T t) {
        this.t = t;
    }
}
D<B> d2 = new D<>();
D<C> d3 = new D<>();
D d4 = new D();

d2.set(new B());
d2.set(new C());

d3.set(new C());

d4.set(new B());
d4.set(new C());
์ œ๋„ค๋ฆญ ํด๋ž˜์Šค์˜ ํƒ€์ž… ์ œํ•œํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ์ œ๋„ค๋ฆญ ํƒ€์ž…์œผ๋กœ ๋Œ€์ž…๋  ์ˆ˜ ์žˆ๋Š” ์ตœ์ƒ์œ„ ํด๋ž˜์Šค๋ฅผ extends ํ‚ค์›Œ๋“œ์™€ ํ•จ๊ป˜ ์ •์˜ํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ๊ทธ๋ž˜์„œ <์ œ๋„ค๋ฆญ ํƒ€์ž… ๋ณ€์ˆ˜ extends ์ƒ์œ„ ํด๋ž˜์Šค>์˜ ํ˜•ํƒœ๋กœ ์‚ฌ์šฉํ•˜๋ฉฐ ์ด๋•Œ extends๋Š” ์ƒ์†ํ•˜๋ผ๋Š” ์˜๋ฏธ๊ฐ€ ์•„๋‹Œ ์ตœ์ƒ์œ„ ํด๋ž˜์Šค ํ˜น์€ ์ธํ„ฐํŽ˜์ด์Šค๋กœ ์ง€์ •ํ•œ๋‹ค๋ผ๋Š” ์˜๋ฏธ๋กœ ๊ฐ€์ง„๋‹ค.  ์ฝ”๋“œ์—์„œ๋Š” <T extends B> ๋กœ ์ž‘์„ฑํ–ˆ์œผ๋ฉฐ A <- B <- C์˜ ์ƒ์† ๊ตฌ์กฐ๋ฅผ ๊ฐ–๊ณ  ์žˆ๋‹ค. 

์ œ๋„ค๋ฆญ ํด๋ž˜์Šค D๋ฅผ ์‚ดํŽด๋ณด์ž. ํด๋ž˜์Šค D๋Š” ํด๋ž˜์Šค B ๋˜๋Š” ํด๋ž˜์Šค B์˜ ์ž์‹ ํด๋ž˜์Šค๋งŒ ์˜ค๋„๋ก ์ œํ•œํ–ˆ๋‹ค. ๊ทธ๋ ‡๋‹ค๋Š” ๊ฒƒ์€ A๋Š” ์ œํ•œ์— ๊ฑธ๋ ค D<A> d1 = new D<>(); ๊ฐ์ฒด ์ƒ์„ฑ์ด ๋ถˆ๊ฐ€ํ•˜๋‹ค๋Š” ์˜๋ฏธ์ด๋‹ค. d2๋Š” ์ œ๋„ค๋ฆญ ํƒ€์ž…์œผ๋กœ B๋ฅผ ์ง€์ •ํ•˜์—ฌ B์™€ C ๊ฐ์ฒด๊ฐ€ ์ž…๋ ฅ๊ฐ€๋Šฅํ•˜๋‹ค. ๊ทธ๋Ÿฐ๋ฐ d3๋Š” C ํƒ€์ž…์œผ๋กœ ์ง€์ •ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— C์˜ ์ƒ์œ„ํด๋ž˜์Šค B๊ฐ์ฒด๋ฅผ ์ž…๋ ฅํ•  ์ˆ˜ ์—†๋‹ค. d4๋Š” ํƒ€์ž…์„ ์ง€์ •ํ•˜์ง€ ์•Š์•˜์ง€๋งŒ ๋ชจ๋“  ํƒ€์ž…์˜ ์ตœ์ƒ์œ„ ํด๋ž˜์Šค๊ฐ€ <B> ํƒ€์ž…์ด๋ฏ€๋กœ ์ œ๋„ค๋ฆญ ํƒ€์ž…์œผ๋กœ ๋Œ€์ž…๋˜์—ˆ๋‹ค. ๊ทธ๋ž˜์„œ d4๋Š” B์™€ C ๊ฐ์ฒด๊ฐ€ ์ž…๋ ฅ๊ฐ€๋Šฅํ•˜๋‹ค. 

 

 

 

• ์ œ๋„ค๋ฆญ ๋ฉ”์„œ๋“œ ํƒ€์ž… ๋ฒ”์œ„ ์ œํ•œ

class A {}
class B extends A {}
class C extends B {}
class D extends C {}

class Goods <T> {
    private T t;
    public T get() {
        return t;
    }
    public void set(T t) {
        this.t = t;
    }
}
void methods(Goods<A> g) {}
void methods(Goods<?> g) {}
void methods(Goods<? extends B> g) {}
void methods(Goods<? super B> g) {}
extends๋Š” ์•„๊นŒ์™€ ๊ฐ™์ด ํ•ด๋‹น ํด๋ž˜์Šค์™€ ์ž์‹ ํด๋ž˜์Šค๋งŒ ๊ฐ€๋Šฅํ•˜๋‹ค. ๊ทธ๋Ÿผ ์ฝ”๋“œ์—์„œ B๋ผ๊ณ  ์ ํ˜€์žˆ์œผ๋‹ˆ B ํด๋ž˜์Šค์™€ B์˜ ์ž์‹ ํด๋ž˜์Šค์ธ ๊ฐ์ฒด๊ฐ€ ๋“ค์–ด๊ฐˆ ๊ฒƒ์ด๋‹ค. super๋Š” ํ•ด๋‹น ํด๋ž˜์Šค์™€ ๋ถ€๋ชจ ํด๋ž˜์Šค์ธ ๊ฐ์ฒด๋งŒ ๊ฐ€๋Šฅํ•˜๋ฏ€๋กœ  B ๋˜๋Š” B์˜ ๋ถ€๋ชจ ํด๋ž˜์Šค๋งŒ ๊ฐ€๋Šฅํ•  ๊ฒƒ์ด๋‹ค.

์ƒ์†๊ตฌ์กฐ๋ฅผ ์‚ดํŽด๋ณด๋ฉด A <- B <- C <- D๊ฐ€ ๋œ๋‹ค. Goods<A>๋Š” A์ธ ๊ฐ์ฒด๋งŒ ๊ฐ€๋Šฅํ•˜๊ณ  Goods<?> ๋ชจ๋“  ํƒ€์ž…์ธ ๊ฐ์ฒด๊ฐ€ ๊ฐ€๋Šฅํ•˜๊ธฐ์— A, B, C, D ํƒ€์ž…์ด ๋ชจ๋‘ ? ์ž๋ฆฌ์— ์˜ฌ ์ˆ˜ ์žˆ๋‹ค. Goods<? extends B>๋Š” B ๋˜๋Š” B์˜ ์ž์‹ ํด๋ž˜์Šค์ธ ๊ฐ์ฒด๋งŒ ๊ฐ€๋Šฅํ•˜๊ธฐ์— B, C, D ํƒ€์ž…์ด ๊ฐ€๋Šฅํ•˜๋ฉฐ Goods<? super B>๋Š” B ๋˜๋Š” B์˜ ๋ถ€๋ชจ ํด๋ž˜์Šค์ธ ๊ฐ์ฒด๋งŒ ๊ฐ€๋Šฅํ•ด์„œ A, B๊ฐ€ ์ œ๋„ค๋ฆญ ํƒ€์ž…์œผ๋กœ ์ง€์ •๋  ์ˆ˜ ์žˆ๋‹ค. 

 

 

 


 

 

 

โœ”๏ธ   ์ œ๋„ค๋ฆญ์˜ ์ƒ์†_ 612p

 

• ์ œ๋„ค๋ฆญ ํด๋ž˜์Šค์˜ ์ƒ์†

class Parent {
    <T extends Number void print(T t) {
        System.out.println(t);
    }
}

class Child extends Parents {
}
Parent p = new Parent();
p.<Integer>print(10);
p.print(10);

Child c = new Child();
c.<Double>print(5.8);
c.print(5.8);
๋ถ€๋ชจํด๋ž˜์Šค๊ฐ€ ์ œ๋„ค๋ฆญ ํด๋ž˜์Šค์ธ ๊ฒฝ์šฐ ์ž์‹ ํด๋ž˜์Šค๋„ ์ œ๋„ค๋ฆญ ํด๋ž˜์Šค๊ฐ€ ๋˜์–ด ์ œ๋„ค๋ฆญ ํƒ€์ž… ๋ณ€์ˆ˜๋ฅผ ์ž์‹ ํด๋ž˜์Šค๊ฐ€ ๊ทธ๋Œ€๋กœ ๋ฌผ๋ ค๋ฐ›๊ฒŒ ๋œ๋‹ค. ๋˜ํ•œ ์ž์‹ ํด๋ž˜์Šค์—์„œ ์ œ๋„ค๋ฆญ ํƒ€์ž… ๋ณ€์ˆ˜๋ฅผ ์ถ”๊ฐ€ํ•ด ์ •์˜ํ•  ์ˆ˜๋„ ์žˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฏ€๋กœ ์ž์‹ ํด๋ž˜์Šค์˜ ์ œ๋„ค๋ฆญ ํƒ€์ž… ๋ณ€์ˆ˜์˜ ๊ฐœ์ˆ˜๋Š” ์–ธ์ œ๋‚˜ ๋ถ€๋ชจ์™€ ๊ฐ™๊ฑฐ๋‚˜ ๊ทธ ์ด์ƒ์ผ ๊ฒƒ์ด๋‹ค.

์ฝ”๋“œ๋ฅผ ๋ณด๋ฉด ๋ถ€๋ชจ ํด๋ž˜์Šค์— ์ตœ์ƒ์œ„ ์ œ๋„ค๋ฆญ ํƒ€์ž…์ด Number๋กœ ์ œํ•œ๋˜์–ด ์žˆ๋‹ค. Number ํด๋ž˜์Šค๋Š” boolean๊ณผ char์„ ์ œ์™ธํ•œ Byte, Short, Integer, Long, Float, Double์ด ์žˆ๋‹ค. ์ž์‹ ํด๋ž˜์Šค๋Š” Number ํด๋ž˜์Šค ๋‚ด์— ์žˆ๋Š” 6๊ฐ€์ง€ ์ž๋ฃŒํ˜•์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ๋ถ€๋ชจ ํด๋ž˜์Šค๊ฐ€ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” print( )๋ฉ”์„œ๋“œ๋„ ์ด์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

 

๐Ÿ“š ์ฐธ๊ณ ํ•œ ์ฑ…

 

: ์ถœ์ฒ˜ ์˜ˆ์Šค24 ํ™ˆํŽ˜์ด์ง€

 

 

 

- ๊ธฐ๋ณธ์ ์ธ ๊ฐœ๋…์„ ์ •๋ฆฌํ•˜๊ณ  ์ถ”๊ฐ€์ ์œผ๋กœ ๊ถ๊ธˆํ•œ ๊ฒƒ๋“ค์„ ์ •๋ฆฌํ–ˆ์Šต๋‹ˆ๋‹ค -

 

 

๐Ÿฅ ๐Ÿฅ ๐Ÿฅ

 


 

โœ”๏ธ   ๋™๊ธฐํ™”_ 539p

 

• ๋™๊ธฐํ™”

: ํ•˜๋‚˜์˜ ์ž‘์—…์ด ์™„๋ฃŒ๋œ ํ›„ ๋‹ค๋ฅธ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ

 

• ๋น„๋™๊ธฐํ™”

: ํ•˜๋‚˜์˜ ์ž‘์—… ๋ช…๋ น ์ดํ›„ ์™„๋ฃŒ ์—ฌ๋ถ€์™€ ์ƒ๊ด€์—†์ด ๋ฐ”๋กœ ๋‹ค๋ฅธ ์ž‘์—… ๋ช…๋ น์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ

 

• ๋ฉ”์„œ๋“œ ๋™๊ธฐํ™”

: 2๊ฐœ์˜ ์“ฐ๋ ˆ๋“œ๊ฐ€ ๋™์‹œ์— ๋ฉ”์„œ๋“œ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์—†๋‹ค๋Š” ๊ฒƒ

์ ‘๊ทผ์ง€์ •์ž synchronized ๋ฆฌํ„ดํƒ€์ž… ๋ฉ”์„œ๋“œ๋ช…(์ž…๋ ฅ๋งค๊ฐœ๋ณ€์ˆ˜){ }
๋ฉ”์„œ๋“œ๋ฅผ ๋™๊ธฐํ™”ํ•  ๋•Œ๋Š” ๋™๊ธฐํ™”ํ•˜๊ณ ์ž ํ•˜๋Š” ๋ฉ”์„œ๋“œ์˜ ๋ฆฌํ„ด ํƒ€์ž… ์•ž์— synchronized ํ‚ค์›Œ๋“œ๋งŒ ๋„ฃ์œผ๋ฉด ๋œ๋‹ค. ์ด๋ ‡๊ฒŒ ๋˜๋ฉด ๋™์‹œ์— 2๊ฐœ์˜ ์“ฐ๋ ˆ๋“œ์—์„œ ํ•ด๋‹น ๋ฉ”์„œ๋“œ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์—†๊ฒŒ๋œ๋‹ค. 

 

 

 

• ๋ธ”๋ก ๋™๊ธฐํ™”

: 2๊ฐœ์˜ ์“ฐ๋ ˆ๋“œ๊ฐ€ ๋™์‹œ์— ํ•ด๋‹น ๋ธ”๋ก์„ ์‹คํ–‰ํ•  ์ˆ˜ ์—†๋‹ค๋Š” ๊ฒƒ

์–ด๋–ค ๋ฉ”์„œ๋“œ {
    synchronized (์ž„์˜์˜ ๊ฐ์ฒด) { }
}
์ „์ฒด ๋ฉ”์„œ๋“œ๋ฅผ ๋™๊ธฐํ™”ํ•˜์ง€ ์•Š๊ณ  ์›ํ•˜๋Š” ๋ถ€๋ถ„๋งŒ ๋™๊ธฐํ™”ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•œ๋‹ค. ํ•„์š”ํ•œ ์ฝ”๋“œ๋งŒ ๋™๊ธฐํ™”๋ฅผ ์ง„ํ–‰ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฉ”์„œ๋“œ ๋™๊ธฐํ™”๋ณด๋‹ค ๋” ์ •๋ฐ€ํ•˜๊ฒŒ ์ฝ”๋“œ๋ฅผ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‹ค. ์—ฌ๊ธฐ์„œ ์ž„์˜์˜ ๊ฐ์ฒด๋ž€ ๋‚ด๊ฐ€ ์„ ํƒํ•œ ์–ด๋–ค ๊ฐ์ฒด๋กœ ์ž ๊ธˆ์„ ์„ค์ •ํ•˜๊ฒ ๋‹ค๋Š” ์˜๋ฏธ๋กœ ์ƒ๊ฐํ•˜๋ฉด ๋˜๊ณ  ์ฃผ๋กœ this๋ฅผ ์‚ฌ์šฉํ•ด์„œ ํ˜„์žฌ ์ธ์Šคํ„ด์Šค ๊ฐ์ฒด๋กœ ์ž ๊ธˆ์„ ์„ค์ •ํ•œ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ์ด ์ž ๊ทผ ๊ฐ์ฒด์™€ ๊ฐ™์€ ๊ฐ์ฒด๋ฅผ ๊ฐ€์ง€๋Š” ๋ธ”๋ก๋“ค์€ ๋™์‹œ ์‚ฌ์šฉ์ด ๋ถˆ๊ฐ€ํ•˜๋‹ค.

 

 

 

• ๋ฉ”์„œ๋“œ ๋™๊ธฐํ™”์™€ ๋ธ”๋ก ๋™๊ธฐํ™”

class MyData {
    
    Object keyObject = new Object();
    synchronized void abc() {
    ...
    }
    
    synchronized void bcd() {
    ...
    }
    
    synchronized void cde() {
    ...
    }
    
    void def() {
        synchronized (keyObject) {
        ...
        }
    }
    
    void efg() {
        synchronized (keyObject) {
        ...
        }
    }
}
abc์™€ bcd๋Š” ๋™๊ธฐํ™” ๋ฉ”์„œ๋“œ์ด๋‹ค. cde์™€ def ๊ทธ๋ฆฌ๊ณ  efg๋Š” ๋™๊ธฐํ™” ๋ธ”๋ก์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. ์—ฌ๊ธฐ์„œ ์ฃผ์˜ ๊นŠ๊ฒŒ ๋ด์•ผํ•  ์ ์€ ์–ด๋–ค ๋ฉ”์„œ๋“œ๊ฐ€ ๋™๊ธฐํ™” ๋ฉ”์„œ๋“œ์ธ์ง€ ๋™๊ธฐํ™” ๋ธ”๋ก์ธ์ง€๊ฐ€ ์•„๋‹ˆ๋‹ค. ๊ฐ ๋ฉ”์„œ๋“œ์™€ ๋ธ”๋ก์ด ์–ด๋–ค ํ‚ค๋กœ ์ž ๊ธˆ์ด ๋˜์–ด์žˆ๋Š”์ง€๋ฅผ ๋ด์•ผํ•œ๋‹ค. abc์™€ bcd ๊ทธ๋ฆฌ๊ณ  cde๋Š” this ๊ฐ์ฒด๋กœ ์ž ๊ธˆ์ด ๋˜์–ด์žˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด abc,bcd,cde๋Š” ๋™์‹œ์— ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค. def์™€ efg๋Š” keyObject๋กœ ์ž ๊ธˆ์ด ๋˜์–ด์žˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด def์™€ efg๋Š” ๋™์‹œ์— ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค.

์—ฌ๊ธฐ์„œ ๊ฐ ํ‚ค๋Š” this์™€ keyObject๋กœ ๋‚˜๋‰œ๋‹ค. ํ‚ค๊ฐ€ ๋‹ค๋ฅด๋‹ค๋ฉด? ๋™์‹œ์— ์‚ฌ์šฉ๊ฐ€๋Šฅํ•˜๋‹ค. abc๋Š” cde์™€ ๋™์‹œ์— ์‚ฌ์šฉ ๋ถˆ๊ฐ€ํ•˜์ง€๋งŒ abc๊ฐ€ def์™€ ๋™์‹œ ์‚ฌ์šฉ์€ ๊ฐ€๋Šฅํ•  ๊ฒƒ์ด๋‹ค. ๋™๊ธฐํ™”์—์„œ ์ค‘์š”ํ•œ ๊ฒƒ์€ ์–ด๋–ค ๊ฐ์ฒด๋กœ ์ž ๊ธˆ์„ ์„ค์ •ํ–ˆ๋Š”์ง€๋‹ค.

์•„๋งˆ ๊ฐ™์€ ํ‚ค๋ฅผ ๊ฐ€์ง€๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ๋™์‹œ์— ์‚ฌ์šฉ ๋ถˆ๊ฐ€ํ•œ ์ด์œ ๋Š” ํ‚ค๊ฐ€ ํ•˜๋‚˜์ด๊ธฐ ๋•Œ๋ฌธ์ผ ๊ฒƒ์ด๋‹ค. ์ฒ˜์Œ์— abc๊ฐ€ ํ‚ค๋ฅผ ์„ ์ ํ•˜๊ณ  ํ•ด์•ผํ•  ํ™œ๋™์„ ๋งˆ์น˜๋ฉด abc๋Š” ํ‚ค๋ฅผ ๋ฐ˜๋‚ฉํ•  ๊ฒƒ์ด๋‹ค. ์ด๋•Œ ํ‚ค๋Š” ๋‹ค์Œ ์ˆœ์„œ์ธ bcd๋กœ ๋„˜์–ด๊ฐ€์ง€ ์•Š๋Š”๋‹ค. bcd์™€ cde๊ฐ€ ๋ฐ˜๋‚ฉ๋œ ํ‚ค๋ฅผ ๊ฐ€์ง€๊ธฐ ์œ„ํ•ด ์„œ๋กœ ๊ฒฝ์Ÿํ•  ๊ฒƒ์ด๊ณ  ํ‚ค๋ฅผ ์„ ์ ํ•œ ๋ฉ”์„œ๋“œ๊ฐ€ ๋จผ์ € ํ™œ๋™ํ•˜๊ฒŒ ๋œ๋‹ค.

 

 

 

 


 

 

 

 

โœ”๏ธ   ์“ฐ๋ ˆ๋“œ 6๊ฐ€์ง€ ์ƒํƒœ_ 552p

 

• NEW ์ƒํƒœ

: Thread ๊ฐ์ฒด๋ฅผ new ํ‚ค์›Œ๋“œ๋ฅผ ์ด์šฉํ•ด ์ƒ์„ฑํ•œ ์‹œ์ ์ธ ์‹คํ–‰ ์ด์ „ ์ƒํƒœ

Thread thread = new Thread() {
    @Override
    public void run() {
        for(long i = 0; i < 1000000000L; i++) {}
    }
}

 

 

• RUNNABLE ์ƒํƒœ

: start( ) ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•œ ์ƒํƒœ, ์‹คํ–‰ ์ƒํƒœ๋กœ ์–ธ์ œ๋“ ์ง€ ๊ฐˆ ์ˆ˜ ์žˆ๋Š” ์ƒํƒœ

thread.start();

 

 

• TERMINATED ์ƒํƒœ

: run( ) ๋ฉ”์„œ๋“œ๊ฐ€ ์™„์ „ํžˆ ์ข…๋ฃŒ๋œ ์‹คํ–‰์„ ๋งˆ์นœ ์ƒํƒœ

try {
    myTread.join();
} catch (InterruptedException e) {}

 

 

• TIMED_WAITING ์ƒํƒœ

: ์ •์  ๋ฉ”์„œ๋“œ์ธ Thread.sleep ๋˜๋Š” ์ธ์Šคํ„ด์Šค ๋ฉ”์„œ๋“œ์ธ join์ด ํ˜ธ์ถœ๋œ ์ƒํƒœ

 Thread t1 = new Thread(() -> {
            try {
                Thread.sleep(2000); // 2์ดˆ ๋™์•ˆ ๊ธฐ๋‹ค๋ฆผ
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        });
Thread t2 = new Thread(() -> {
            try {
                t1.join(1000); // ์ตœ๋Œ€ 1์ดˆ ๋™์•ˆ t1์„ ๊ธฐ๋‹ค๋ฆผ
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        });
์œ„์˜ ์ฝ”๋“œ๋Š” Runnable ์ƒํƒœ์—์„œ ์ผ์‹œ์ •์ง€ ์ƒํƒœ๋กœ ์ „ํ™˜๋˜๋Š” TIMED_WAITING ์ƒํƒœ์ด๋‹ค. TIMED_WAITING ์ƒํƒœ๋Š” ์ฃผ๋กœ sleep(long millis)๋ฅผ ํ˜ธ์ถœํ•˜๊ฑฐ๋‚˜ join(long millis)๊ฐ€ ํ˜ธ์ถœ๋์„ ๋•Œ๋‹ค. 

Thread.sleep( )์€ ์ด ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•œ ์“ฐ๋ ˆ๋“œ๋ฅผ ์ผ์‹œ ์ •์ง€ํ•˜๋ผ๋Š” ์˜๋ฏธ๋กœ ์ผ์‹œ์ •์ง€ ์‹œ๊ฐ„ ๋™์•ˆ CPU๋ฅผ ์–ด๋–ค ์“ฐ๋ ˆ๋“œ๊ฐ€ ์‚ฌ์šฉํ•˜๋“  ์ƒ๊ด€ํ•˜์ง€ ์•Š๋Š”๋‹ค. ์“ฐ๋ ˆ๋“œ ๊ฐ์ฒด.join( ) ๋ฉ”์„œ๋“œ๋Š” ํŠน์ • ์“ฐ๋ ˆ๋“œ ๊ฐ์ฒด์—๊ฒŒ ์ผ์ • ์‹œ๊ฐ„ ๋™์•ˆ CPU๋ฅผ ํ• ๋‹นํ•˜๋ผ๋Š” ์˜๋ฏธ๋‹ค.

์“ฐ๋ ˆ๋“œ t1์€ sleep ๋ฉ”์„œ๋“œ๋กœ ์ผ์‹œ์ •์ง€๊ฐ€ ๋˜์—ˆ๊ณ  2์ดˆ์˜ ์‹œ๊ฐ„๋™์•ˆ ์–ด๋–ค ์“ฐ๋ ˆ๋“œ๊ฐ€ CPU๋ฅผ ์‚ฌ์šฉํ•˜๋“  ์‹ ๊ฒฝ์“ฐ์ง€ ์•Š์„ ๊ฒƒ์ด๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์“ฐ๋ ˆ๋“œ t2๋Š” join ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ–ˆ๊ธฐ์— t2๊ฐ€ ์ž ์‹œ ๋ฉˆ์ถ˜ 1์ดˆ ๋™์•ˆ t1 ์“ฐ๋ ˆ๋“œ๊ฐ€ CPU๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ํ–ˆ๋‹ค.

 

 

 

• BLOCKED ์ƒํƒœ

: ๋™๊ธฐํ™” ๋ฉ”์„œ๋“œ ๋˜๋Š” ๋™๊ธฐํ™” ๋ธ”๋ก์„ ์‹คํ–‰ํ•˜๊ณ ์ž ํ•  ๋•Œ ์ด๋ฏธ ๋‹ค๋ฅธ ์“ฐ๋ ˆ๋“œ๊ฐ€ ํ•ด๋‹น ์˜์—ญ์„ ์‹คํ–‰ํ•˜๊ณ  ์žˆ๋Š” ๊ฒฝ์šฐ ๋ฐœ์ƒ.

Thread t1 = new Thread("thread1") {
    public void run() {
        mc.syncMethod();
    };
};  

Thread t2 = new Thread("thread2") {
    public void run() {
        mc.syncMethod();
    };
}; 

Thread t3 = new Thread("thread3") {
    public void run() {
        mc.syncMethod();
    };
};
์“ฐ๋ ˆ๋“œ t1์ด ๋จผ์ € ์‹คํ–‰ํ•˜๊ณ  ์žˆ์„ ๋•Œ, t1์ด ์‹คํ–‰์„ ์™„๋ฃŒํ•˜๊ณ  ํ•ด๋‹น ๋™๊ธฐํ™” ์˜์—ญ์˜ ์—ด์‡ ๋ฅผ ๋ฐ˜๋‚ฉํ•  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ ค์•ผํ•œ๋‹ค. ์ด๋•Œ ์ด๋Ÿฐ ์ƒํ™ฉ์„ BLOCKED ์ƒํƒœ๋ผ๊ณ  ํ•œ๋‹ค. 

t1์ด ๋ฐ˜๋‚ฉ์„ ํ•˜๊ฒŒ ๋˜๋ฉด ๊ทธ ๋‹ค์Œ ์ˆœ์„œ์ธ t2๊ฐ€ ํ‚ค๋ฅผ ๊ฐ€์งˆ ๊ฒƒ ๊ฐ™์ง€๋งŒ ์‚ฌ์‹ค ๊ทธ๋ ‡์ง€ ์•Š๋‹ค. ํ‚ค๊ฐ€ ๋ฐ˜๋‚ฉ๋œ ์ˆœ๊ฐ„๋ถ€ํ„ฐ t2์™€ t3๋Š” ์„œ๋กœ ํ‚ค๋ฅผ ๊ฐ€์ง€๊ธฐ ์œ„ํ•ด ๊ฒฝ์Ÿํ•  ๊ฒƒ์ด๋‹ค. ๊ทธ๋ ‡๊ฒŒ ๋จผ์ € ํ‚ค๋ฅผ ๊ฐ€์ง€๊ฒŒ ๋œ ์“ฐ๋ ˆ๋“œ๊ฐ€ t1 ๋‹ค์Œ์œผ๋กœ ์‹คํ–‰ํ•˜๊ฒŒ ๋  ๊ฒƒ์ด๋‹ค.
void startAll() {
    t1.start();
    t2.start();
    t3.start();
}
startAll ๋ฉ”์„œ๋“œ์—์„œ t1, t2, t3 ์“ฐ๋ ˆ๋“œ๊ฐ€ ๋™์‹œ์— ์‹คํ–‰ํ•˜๋ ค๊ณ  ํ•œ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ๋‹น์—ฐํ•˜๊ฒŒ t1, t2, t3๋Š” ๊ฒฝ์Ÿํ•  ๊ฒƒ์ด๊ณ  ํ‚ค๋ฅผ ์ฐจ์ง€ํ•œ ์“ฐ๋ ˆ๋“œ ๋จผ์ € ์‹คํ–‰๋˜๋ฉฐ ๋‚˜๋จธ์ง€ ๋‘ ์“ฐ๋ ˆ๋“œ๋Š” BLOCKED ์ƒํƒœ๊ฐ€ ๋  ๊ฒƒ์ด๋‹ค.

 

 


• WAITING ์ƒํƒœ

: ์“ฐ๋ ˆ๋“œ๊ฐ€ ๋ฌดํ•œ์ • ๊ธฐ๋‹ค๋ฆฌ๊ณ  ์žˆ๋Š” ์ƒํƒœ

Thread t = new Thread(() -> {
            synchronized (lock) {
                try {
                    lock.wait();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }

 

์‹œ๊ฐ„์„ ์ง€์ •ํ•˜์ง€ ์•Š์€ join ๋ฉ”์„œ๋“œ ๋˜๋Š” object.wait ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜๋ฉด WAITING ์ƒํƒœ๊ฐ€ ๋œ๋‹ค. join์€ ๋‹ค๋ฅธ ์“ฐ๋ ˆ๋“œ๊ฐ€ ๋๋‚ ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ ค์•ผํ•˜๊ณ  wait๋Š” notify( )๋กœ ๊นจ์šธ ์ˆ˜ ์žˆ๋‹ค. 

lock ๊ฐ์ฒด๋กœ ์ž ๊ธˆ์„ ๊ฑด ์“ฐ๋ ˆ๋“œ t๋Š” lock.wait( )์œผ๋กœ lock์„ ์ž ๊น ๋ฐ˜๋‚ฉํ–ˆ๋‹ค. ์–ธ์ œ๊นŒ์ง€ ๋ฐ˜๋‚ฉํ• ์ง€ ์‹œ๊ฐ„์„ ์ง€์ •ํ•˜์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์— notify( )๋กœ ํ˜ธ์ถœํ•˜์—ฌ WAITING ์ƒํƒœ์—์„œ ๋น ์ ธ๋‚˜์˜ค๋„๋ก ํ•ด์•ผํ•œ๋‹ค.
synchronized (lock) {
    lock.notify(); 
        }

 

 

๐Ÿ“š ์ฐธ๊ณ ํ•œ ์ฑ…

 

: ์ถœ์ฒ˜ ์˜ˆ์Šค24 ํ™ˆํŽ˜์ด์ง€

 

 

 

- ๊ธฐ๋ณธ์ ์ธ ๊ฐœ๋…์„ ์ •๋ฆฌํ•˜๊ณ  ์ถ”๊ฐ€์ ์œผ๋กœ ๊ถ๊ธˆํ•œ ๊ฒƒ๋“ค์„ ์ •๋ฆฌํ–ˆ์Šต๋‹ˆ๋‹ค -

 

 

๐Ÿฅ ๐Ÿฅ ๐Ÿฅ

 


 

โœ”๏ธ   ํ”„๋กœ๊ทธ๋žจ,  ํ”„๋กœ์„ธ์Šค, ์“ฐ๋ ˆ๋“œ_ 511p

 

• CPU 

: ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•จ์œผ๋กœ์จ ์‹ค์ œ ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•˜๋Š” ์žฅ์น˜๋กœ, ๊ฐ€์žฅ ๋น ๋ฅธ ์†๋„๋กœ ๋™์ž‘.

 

 ํ•˜๋“œ๋””์Šคํฌ

: ๋ฐ์ดํ„ฐ์˜ ์ €์žฅ ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•˜๋ฉฐ, ์ƒ๋Œ€์ ์œผ๋กœ ๊ฐ€์žฅ ๋‚ฎ์€ ์†๋„๋กœ ๋™์ž‘.

 

 ๋ฉ”๋ชจ๋ฆฌ

: ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ๋ฅผ CPU๋กœ ๋ณด๋‚ด๋Š” ์—ญํ• ์„ ํ•˜๋ฉฐ, CPU์™€ ๊ทผ์ ‘ํ•œ ์†๋„๋กœ ๋™์ž‘.

 

 ํ”„๋กœ๊ทธ๋žจ

: ํ•˜๋“œ๋””์Šคํฌ์— ์ €์žฅ๋œ ํŒŒ์ผ๋“ค์˜ ๋ชจ์ž„.

 

ํ”„๋กœ์„ธ์Šค

: ๋ฉ”๋ชจ๋ฆฌ์ƒ์— ๋กœ๋”ฉ๋œ ํ”„๋กœ๊ทธ๋žจ์œผ๋กœ ๋ฉ”๋ชจ๋ฆฌ๋Š” ํ•„์š”ํ•œ ๋ถ€๋ถ„๋งŒ์„ ๋™์ ์œผ๋กœ ๋กœ๋”ฉ.

 

 ๋ฉ€ํ‹ฐํ”„๋กœ์„ธ์Šค

: ํ•˜๋‚˜์˜ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์— ๋Œ€ํ•ด ๋™์‹œ์— ์—ฌ๋Ÿฌ ๊ฐœ์˜ ํ”„๋กœ์„ธ์Šค๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๋Š” ๊ธฐ์ˆ .

 

 ์“ฐ๋ ˆ๋“œ

: ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ž‘์—…์ด ๋™์‹œ์— ์ˆ˜ํ–‰๋˜๋„๋ก ํ•˜๊ธฐ ์œ„ํ•ด์„œ ํ•œ์ •๋œ ์ฝ”์–ด์˜ ์ˆ˜๋ฅผ ๊ฐ–๋Š” CPU์— ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ž‘์—…์„ ๋‚˜๋ˆ  ์‚ฌ์šฉํ•˜๋ฉฐ, CPU๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ตœ์†Œ ๋‹จ์œ„.

 

 ๋‹จ์ผ ์“ฐ๋ ˆ๋“œ

public class ThreadExample01 {
    public static void main(String[] args) {
    
        for (int i = 1; i <= 5; i++) {
            System.out.println("์ž‘์—… 1 - i: " + i);
            try {
                Thread.sleep(500); 
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
        
        for (int j = 1; j <= 5; j++) {
            System.out.println("์ž‘์—… 2 - j: " + j);
            try {
                Thread.sleep(500);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}
ํ•ด๋‹น ์ฝ”๋“œ๋Š” ๋‹จ์ผ ์“ฐ๋ ˆ๋“œ๋ฅผ ๋‚˜ํƒ€๋‚ธ ๊ฒƒ์ด๋‹ค. ์ฒซ๋ฒˆ์งธ for๋ฌธ๊ณผ ๋‘๋ฒˆ์งธ for๋ฌธ์ด ๋ฒˆ๊ฐˆ์•„๊ฐ€๋ฉฐ ๋‚˜์˜ค๊ธธ ์›ํ–ˆ์ง€๋งŒ ๋‹จ์ผ ์“ฐ๋ ˆ๋“œ๋กœ ์ฒซ๋ฒˆ์งธ for์ด ๋ชจ๋‘ ์ˆ˜ํ–‰๋œ ๋‹ค์Œ ๋‘๋ฒˆ์งธ for๋ฌธ์ด ์ˆ˜ํ–‰๋œ๋‹ค.

 

 

 

 ๋ฉ€ํ‹ฐ์“ฐ๋ ˆ๋“œ

: ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค ์•ˆ์—์„œ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์“ฐ๋ ˆ๋“œ๊ฐ€ ์žˆ๋Š” ๊ฒƒ

 

 

โ‘  extends Thread + 3๊ฐœ์˜ ์“ฐ๋ ˆ๋“œ

class Task1 extends Thread {
    @Override
    public void run() {
        for (int i = 1; i <= 5; i++) {
            System.out.println("์ž‘์—… 1 - i: " + i);
            try {
                Thread.sleep(500); 
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}

class Task2 extends Thread {
    @Override
    public void run() {
        for (int j = 1; j <= 5; j++) {
            System.out.println("์ž‘์—… 2 - j: " + j);
            try {
                Thread.sleep(500); 
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}

public class ThreadExample02 {
    public static void main(String[] args) {
        Task1 t1 = new Task1(); 
        Task2 t2 = new Task2(); 

        t1.start();
        t2.start(); 
    }
}
์“ฐ๋ ˆ๋“œ์—๋Š” ๋™์‹œ์„ฑ(concurrency)๊ณผ ๋ณ‘๋ ฌ์„ฑ(parallelism)์ด ์žˆ๋‹ค. ๋™์‹œ์„ฑ์€ ์ฒ˜๋ฆฌํ•  ์ž‘์—…์˜ ์ˆ˜๊ฐ€ CPU์˜ ์ฝ”์–ด ์ˆ˜๋ณด๋‹ค ๋งŽ์„ ๋•Œ ๊ฐ ์ž‘์—…์˜ ์“ฐ๋ ˆ๋“œ์˜ ์š”์ฒญ ์ž‘์—…์„ ๋ฒˆ๊ฐˆ์•„๊ฐ€๋ฉด์„œ ์‹คํ–‰ํ•œ๋‹ค. ๋งค์šฐ ์งง์€ ๊ฐ„๊ฒฉ์œผ๋กœ ๊ต์ฐจ ์‹คํ–‰ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์‚ฌ์šฉ์ž๋Š” ๋‘ ์ž‘์—…์ด ๋งˆ์น˜ ๋™์‹œ์— ์‹คํ–‰๋˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ธ๋‹ค. ๋ณ‘๋ ฌ์„ฑ์€ CPU์˜ ์ฝ”์–ด ์ˆ˜๊ฐ€ ์ž‘์—… ์ˆ˜๋ณด๋‹ค ๋งŽ์„ ๋•Œ๋กœ ๊ฐ๊ฐ์˜ ์ž‘์—…์„ ๊ฐ๊ฐ์˜ ์ฝ”์–ด์— ํ• ๋‹นํ•ด ๋™์‹œ์— ์‹คํ–‰ํ•˜๋„๋ก ํ•œ๋‹ค. 

์—ฌ๋Ÿฌ ์ž‘์—…์ด ์žˆ๊ณ  ์—ฌ๋Ÿฌ CPU๊ฐ€ ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜์ž. ๊ทธ๋Ÿฌ๋ฉด ๊ฐœ๋ฐœ์ž๋Š” ์–ด๋А ์ž‘์—…์„ ๋ฉ€ํ‹ฐ ์“ฐ๋ ˆ๋“œ๋กœ ์ง„ํ–‰ํ• ๊ฑด์ง€ ์ฝ”๋“œ๋กœ ์ ์–ด๋‘๋ฉด ๋œ๋‹ค. ๊ทธ ๋‹ค์Œ JVM์ด ์šด์˜์ฒด์ œ๋กœ ํ•ด๋‹น ์“ฐ๋ ˆ๋“œ๋ฅผ ๋„˜๊ธฐ๊ณ  ์šด์˜์ฒด์ œ๋Š” ๊ฐ ์“ฐ๋ ˆ๋“œ๋ฅผ ์–ด๋А CPU์— ๋ฐฐ๋ถ„ํ• ์ง€ ์•Œ์•„์„œ ์ •ํ•œ๋‹ค. (๋ณดํ†ต ๋ฐฐ๋ถ„์€ ์Šค์ผ€์ค„๋Ÿฌ๊ฐ€ ํ•œ๋‹ค)

์œ„์˜ ์ฝ”๋“œ๋ฅผ ์‚ดํŽด๋ณด์ž. extends Thread๋กœ Thread๋ฅผ ์ƒ์†๋ฐ›์•˜๊ณ  Thread ๋‚ด๋ถ€์—” run( )๋ฉ”์„œ๋“œ๊ฐ€ ์žˆ๋‹ค. ๊ทธ๋ž˜์„œ Thread๋ฅผ ์ƒ์†๋ฐ›์€ ํด๋ž˜์Šค์— run( ) ๋ฉ”์„œ๋“œ ์•ˆ์— ์–ด๋–ค ๋™์ž‘์„ ์ˆ˜ํ–‰ํ• ์ง€ ์žฌ์ •์˜ํ•˜๋ฉด ์˜ค๋ฒ„๋ผ์ด๋”ฉ๋˜์–ด Thread์—์„œ ์žฌ์ •์˜ํ•œ ๋™์ž‘์„ ์ˆ˜ํ–‰ํ•˜๊ฒŒ ๋œ๋‹ค.

์“ฐ๋ ˆ๋“œ์—์„œ ํŠน์ดํ•œ ์ ์ด ์žˆ๋‹ค. ๋ฉ”์„œ๋“œ run์„ ์žฌ์ •์˜ํ–ˆ์œผ๋‹ˆ run์„ ์‹คํ–‰์‹œํ‚ค๋ฉด ๋ ํ…๋ฐ, run( )์ด ์•„๋‹Œ start( )๊ฐ€ ์ ํ˜€์žˆ๋‹ค. ์“ฐ๋ ˆ๋“œ๊ฐ€ ์‹ค์ œ CPU์™€ ์ด์•ผ๊ธฐํ•˜๊ธฐ ์œ„ํ•ด์„œ ์ž์‹ ๋งŒ์˜ ์Šคํƒ ๋ฉ”๋ชจ๋ฆฌ์— ํฌํ•จํ•ด ์ค€๋น„ํ•ด์•ผ ํ•  ๊ฒƒ์ด ๋งŽ๋‹ค. ์—ฌ๊ธฐ์„œ start ๋ฉ”์„œ๋“œ๊ฐ€ ์ค€๋น„๋‹จ๊ณ„ ํฌํ•จํ•œ run ๋ฉ”์„œ๋“œ ์‹คํ–‰์„ ์˜๋ฏธํ•œ๋‹ค. start( )๋Š” ์ƒˆ๋กœ์šด ์“ฐ๋ ˆ๋“œ ์ƒ์„ฑ/์ถ”๊ฐ€ํ•˜๊ธฐ ์œ„ํ•œ ๋ชจ๋“  ์ค€๋น„ + ์ƒˆ๋กœ์šด ์“ฐ๋ ˆ๋“œ ์œ„์— run( ) ์‹คํ–‰์ด๋‹ค.

 

 

 

โ‘ก extends Thread + 2๊ฐœ์˜ ์“ฐ๋ ˆ๋“œ

class MyThread extends Thread {
    public void run() {
        for (int i = 1; i <= 5; i++) {
            System.out.println("์ž‘์—… 1 - i: " + i);
            try {
                Thread.sleep(500);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}

public class ThreadExample03 {
    public static void main(String[] args) {
        MyThread t = new MyThread(); 
        t.start();

        for (int j = 1; j <= 5; j++) {
            System.out.println("์ž‘์—… 2 - j: " + j);
            try {
                Thread.sleep(500);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}
์•ž์— ์žˆ์—ˆ๋˜ ์˜ˆ์ œ๋ฅผ ์‚ดํŽด๋ณด๋ฉด ๊ทธ์ € for๋ฌธ๋งŒ ์žˆ์—ˆ๋Š”๋ฐ ๋‹จ์ผ์“ฐ๋ ˆ๋“œ, extends Thread๊ฐ€ 2๊ฐœ์˜€๋Š”๋ฐ ์ด 3๊ฐœ์˜ ์“ฐ๋ ˆ๋“œ์˜€๊ณ , ์ด๋ฒˆ ์ฝ”๋“œ๋Š” extends Thread๊ฐ€ 1๊ฐœ์ธ๋ฐ ์ด 2๊ฐœ์˜ ์“ฐ๋ ˆ๋“œ์ด๋‹ค. ๊ทธ ์ด์œ ๋ฅผ ์‚ดํŽด๋ณด๋ฉด main์— ์žˆ๋‹ค. ๊ฐœ๋ฐœ์ž๊ฐ€ ๋ช…์‹œํ•˜์ง€ ์•Š์•„๋„ ์ž๋ฐ” ํ”„๋กœ๊ทธ๋žจ์ด ์‹คํ–‰๋  ๋•Œ JVM์€ ์ž๋™์œผ๋กœ main ์“ฐ๋ ˆ๋“œ๋ฅผ ์ƒ์„ฑํ•œ๋‹ค. ๊ทธ๋ž˜์„œ ํ•ด๋‹น ์ฝ”๋“œ main์— ์ ์–ด๋‘” for๋ฌธ์ด ๋ฉ€ํ‹ฐ ์“ฐ๋ ˆ๋“œ๋กœ ์ž‘๋™ํ•˜๊ฒŒ ๋œ๋‹ค.

 

 

 

โ‘ข Runnable + 3๊ฐœ์˜ ์“ฐ๋ ˆ๋“œ

class Task1 implements Runnable {
    @Override
    public void run() {
        for (int i = 1; i <= 5; i++) {
            System.out.println("์ž‘์—… 1 - i: " + i);
            try {
                Thread.sleep(500);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}

class Task2 implements Runnable {
    @Override
    public void run() {
        for (int j = 1; j <= 5; j++) {
            System.out.println("์ž‘์—… 2 - j: " + j);
            try {
                Thread.sleep(500);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}

public class ThreadExample04 {
    public static void main(String[] args) {
        Runnable task1 = new Task1();
        Thread t1 = new Thread(task1);
        t1.start();
        
        Runnable task2 = new Task2();
        Thread t2 = new Thread(task2);
        t2.start();
    }
}
Runnable ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•œ ํด๋ž˜์Šค๋ฅผ ์ •์˜ํ•˜๊ณ , run( ) ์ถ”์ƒ ๋ฉ”์„œ๋“œ๋ฅผ ๊ตฌํ˜„ํ•˜๋ฉด์„œ ์“ฐ๋ ˆ๋“œ์˜ ์ž‘์—… ๋‚ด์šฉ์„ ์ž‘์„ฑํ–ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  main์—์„œ Runnable ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ–ˆ๋‹ค.

extends Thread์™€ ์ฐจ์ด์ ์ด ์žˆ๋‹ค. ๋ฐ”๋กœ Runnable ๊ฐ์ฒด์˜ ๋‚ด๋ถ€์—๋Š” start( ) ๋ฉ”์„œ๋“œ๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.  ๊ทธ๋ž˜์„œ main์„ ๋ณด๋ฉด start( )๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” Thread ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•ด์„œ Thread ๊ฐ์ฒด๋กœ ๊ฐ์‹ธ start( )๋ฅผ ํ˜ธ์ถœํ–ˆ๋‹ค. 

Runnable๋กœ ๊ตฌํ˜„ํ–ˆ์„ ๋•Œ์˜ ์žฅ์ ์€ ์ธํ„ฐํŽ˜์ด์Šค๊ธฐ ๋•Œ๋ฌธ์— ๋‹ค๋ฅธ ํด๋ž˜์Šค๋ฅผ ์ƒ์†ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ์ƒ์†์€ ํ•œ ๋ฒˆ๋งŒ ๋˜๋Š”๋ฐ ์“ฐ๋ ˆ๋“œ๋ฅผ ์ƒ์†ํ•ด๋ฒ„๋ฆฌ๋ฉด ๋‹ค๋ฅธ ํด๋ž˜์Šค๋ฅผ ์ƒ์†ํ•  ์ˆ˜ ์—†๊ฒŒ๋œ๋‹ค. 

 

 

 

 


 

 

 

โœ”๏ธ   ์“ฐ๋ ˆ๋“œ์˜ ์†์„ฑ_ 527p

 

• currentThread( )

: ์—ฐ์‚ฐ์„ ํ˜„์žฌ ์“ฐ๋ ˆ๋“œ ๊ฐ์ฒด์˜ ์ฐธ์ขƒ๊ฐ’์„ ์–ป์–ด์˜ฌ ์ˆ˜ ์žˆ๋‹ค.

new Thread(() -> {
    System.out.println("์ž‘์—… ์‹œ์ž‘");
}).start();
System.out.println("main ์Šค๋ ˆ๋“œ ์ด๋ฆ„: " + Thread.currentThread().getName());
 
 or
 
Thread current = Thread.currentThread()
System.out.println("ํ˜„์žฌ ์Šค๋ ˆ๋“œ ์ด๋ฆ„: " + current.getName());
์œ„์˜ ์ฝ”๋“œ๋Š” ์ฐธ์กฐ ๋ณ€์ˆ˜ ์—†์ด ์‹คํ–‰ํ•œ ์ฝ”๋“œ์ด๋‹ค. ์ด๋ ‡๊ฒŒ ์ฐธ์กฐ ๋ณ€์ˆ˜ ์—†์ด ์ผํšŒ์„ฑ์œผ๋กœ ์“ฐ๋ ˆ๋“œ๋ฅผ ์‹คํ–‰ํ•  ๊ฒฝ์šฐ .getName( ) ๊ฐ™์€ ๊ฐ์ฒด์˜ ์†์„ฑ์„ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์—†๋‹ค. ๊ทธ๋ž˜์„œ static Thread Thread.currentThread( )๋ฅผ ํ†ตํ•ด ํ˜„์žฌ ์“ฐ๋ ˆ๋“œ ๊ฐ์ฒด ์ฐธ์ขƒ๊ฐ’์„ ์–ป์–ด์˜ฌ ์ˆ˜ ์žˆ๋‹ค.

 

 

 

• activeCount( )

: ํ˜„์žฌ ์‹คํ–‰ ์ค‘์ธ ์“ฐ๋ ˆ๋“œ์˜ ๊ฐœ์ˆ˜๋ฅผ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

public class ThreadExample05 {
    public static void main(String[] args) {

        Thread t1 = new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println("Thread 1 ์‹คํ–‰ ์ค‘");
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                System.out.println("Thread 1 ์ข…๋ฃŒ");
            }
        });

        Thread t2 = new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println("Thread 2 ์‹คํ–‰ ์ค‘");
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                System.out.println("Thread 2 ์ข…๋ฃŒ");
            }
        });

        Thread t3 = new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println("Thread 3 ์‹คํ–‰ ์ค‘");
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                System.out.println("Thread 3 ์ข…๋ฃŒ");
            }
        });

        t1.start();
        t2.start();
        t3.start();
    }
}
System.out.println("ํ˜„์žฌ ํ™œ์„ฑ ์Šค๋ ˆ๋“œ ์ˆ˜: " + Thread.activeCount());
main ์“ฐ๋ ˆ๋“œ ๋‚ด์—๋Š” ์ด 3๊ฐœ์˜ ์“ฐ๋ ˆ๋“œ๊ฐ€ ๋™์ž‘ํ•˜๊ณ  ์žˆ๋‹ค. ์ด๋ ‡๊ฒŒ ๊ฐ™์€ ๊ทธ๋ฃน ๋‚ด์—์„œ ์‹คํ–‰ ์ค‘์ธ ์“ฐ๋ ˆ๋“œ์˜ ๊ฐœ์ˆ˜๋ฅผ ์•Œ๊ณ ์‹ถ์„ ๋•Œ activeCount๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

 

 

 

• setName( )

: ์“ฐ๋ ˆ๋“œ์— ์ง์ ‘ ์ด๋ฆ„์„ ๋ถ€์—ฌํ•œ๋‹ค.

Thread t1 = new Thread(task);
Thread t2 = new Thread(task);

t1.setName("1๋ฒˆ");
t2.setName("2๋ฒˆ");

 

 

 

• getName( )

: ์ง์ ‘ ์ง€์ •ํ–ˆ๊ฑฐ๋‚˜ ์ž๋™์œผ๋กœ ๋ถ€์—ฌ๋œ ์“ฐ๋ ˆ๋“œ์˜ ์ด๋ฆ„์„ ๊ฐ€์ ธ์˜จ๋‹ค.

for(int i=0; i<3; i++){
    Thread t1 = new Thread();
    t1.setName(i + "๋ฒˆ์งธ ์“ฐ๋ ˆ๋“œ");
    System.out.println(t1.getName());
    t1.start();
}

 

 

 

• ์šฐ์„ ์ˆœ์œ„

public final static int MIN_PRIORITY = 1;
public final static int NORM_PRIORITY = 5;
public final static int MAX_PRIORITY = 10;
void setPriority(int priority)
int getPriority()
๋ชจ๋“  ์“ฐ๋ ˆ๋“œ๋Š” 1~10 ์‚ฌ์ด์˜ ์šฐ์„  ์ˆœ์œ„๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. 1์ด ๊ฐ€์žฅ ๋‚ฎ์€ ์ˆœ์œ„์ด๋ฉฐ 10์ด ๊ฐ€์žฅ ๋†’์€ ์ˆœ์œ„๋‹ค. ์šฐ์„ ์ˆœ์œ„๋ฅผ ์ง€์ •ํ•˜์ง€ ์•Š์œผ๋ฉด ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ 5์˜ ์šฐ์„ ์ˆœ์œ„๋ฅผ ๊ฐ–๋Š”๋‹ค. ์šฐ์„ ์ˆœ์œ„๋Š” ์“ฐ๋ ˆ๋“œ์˜ ๋™์‹œ์„ฑ๊ณผ ๊ด€๊ณ„๊ฐ€ ์žˆ๋‹ค. ๋งŒ์ผ 2๊ฐœ์˜ ์ž‘์—…์ด ์ผ์ • ์‹œ๊ฐ„ ๊ฐ„๊ฒฉ์œผ๋กœ ๋ฒˆ๊ฐˆ์•„๊ฐ€๋ฉด์„œ ์‹คํ–‰ํ•  ๊ฒฝ์šฐ ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋” ๋†’์€ ์ชฝ์ด ์ƒ๋Œ€์ ์œผ๋กœ ๋งŽ์€ ์‹œ๊ฐ„์„ ํ• ๋‹น๋ฐ›๊ฒŒ ๋œ๋‹ค.

setPriority( )๋Š” ์šฐ์„ ์ˆœ์œ„๋ฅผ ์ •ํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๋ฉ”์„œ๋“œ๊ณ , getPriority( )๋Š” ์ง€์ •๋œ ์šฐ์„ ์ˆœ์œ„ ๊ฐ’์„ ๊ฐ€์ ธ์˜ค๋Š” ๋ฉ”์„œ๋“œ๋‹ค.

 

 

 

• availableProcessors

ํ˜„์žฌ ์ปดํ“จํ„ฐ์˜ CPU ์ฝ”์–ด ์ˆ˜๋ฅผ ์•Œ๊ณ  ์‹ถ์„ ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.

public native int availableProcessors();

 

 

 

 


 

 

 

โœ”๏ธ  ๋ฐ๋ชฌ ์„ค์ •_ 533p

 

• ๋ฐ๋ชฌ ์“ฐ๋ ˆ๋“œ

: ์ผ๋ฐ˜ ์“ฐ๋ ˆ๋“œ๊ฐ€ ๋ชจ๋‘ ์ข…๋ฃŒ๋˜๋ฉด ํ•จ๊ป˜ ์ข…๋ฃŒ๋˜๋Š” ์“ฐ๋ ˆ๋“œ

Thread t1 = new MyThread();
t1.setDeamon(false);
t1.setName("t1");
t1.start();

Thread t2 = new MyThread();
t2.setDeamon(true);
t2.setName("t2");
t2.start();

try{Thread.sleep(3500);} catch (InterruptedException e) {}
System.out.println("main Thread ์ข…๋ฃŒ");
์“ฐ๋ ˆ๋“œ์˜ ๋ฐ๋ชฌ ์„ค์ •์€ Thread ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค ๋ฉ”์„œ๋“œ์ธ setDeamon( )๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. ์ด๋•Œ ๊ธฐ๋ณธ ๊ฐ’์€ false๋กœ ์ผ๋ฐ˜ ์“ฐ๋ ˆ๋“œ๋กœ ์„ค์ •ํ•ด๋‘”๋‹ค. ์ƒ์„ฑํ•œ ๊ฐ์ฒด์˜ ๋ฐ๋ชฌ ์„ค์ • ์—ฌ๋ถ€๋Š” isDeamon( )๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด ์–ธ์ œ๋“ ์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. ์œ„์˜ ์ฝ”๋“œ์—์„  ์“ฐ๋ ˆ๋“œ t1์€ ์ผ๋ฐ˜ ์“ฐ๋ ˆ๋“œ, t2๋Š” ๋ฐ๋ชฌ ์“ฐ๋ ˆ๋“œ๋กœ ์„ค์ •ํ–ˆ๋‹ค.

๋ฐ๋ชฌ ์„ค์ •์€ ๋ฐ˜๋“œ์‹œ ์“ฐ๋ ˆ๋“œ๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์ „์ธ start( ) ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ ์ „์— ์„ค์ •ํ•ด์•ผ ํ•œ๋‹ค. ์“ฐ๋ ˆ๋“œ๊ฐ€ ์‹คํ–‰๋˜๊ณ ๊ฐ€๋ฉด ๋ฐ๋ชฌ ์„ค์ •์€ ๋ฐ”๊ฟ€ ์ˆ˜ ์—†๊ฒŒ ๋œ๋‹ค. 

๋งŒ์•ฝ main์— ์ผ๋ฐ˜ ์“ฐ๋ ˆ๋“œ t1๊ณผ ๋ฐ๋ชฌ ์“ฐ๋ ˆ๋“œ t2๊ฐ€ ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด๋ณด์ž. ๋ฐ๋ชฌ ์“ฐ๋ ˆ๋“œ๋Š” ์ž์‹ ์„ ํ˜ธ์ถœํ•œ main ์“ฐ๋ ˆ๋“œ๊ฐ€ ์ข…๋ฃŒ๋˜๋ฉด ํ•จ๊ป˜ ์ข…๋ฃŒ๋ ๊ฑฐ๋ผ ์˜ˆ์ƒํ•˜๊ฒ ์ง€๋งŒ ๋ฐ๋ชฌ์“ฐ๋ ˆ๋“œ๋Š” ์ฃผ ์“ฐ๋ ˆ๋“œ์˜ ์ข…๋ฃŒ๊ฐ€ ์•„๋‹Œ ํ”„๋กœ์„ธ์Šค ๋‚ด์˜ ๋ชจ๋“  ์ผ๋ฐ˜ ์“ฐ๋ ˆ๋“œ๊ฐ€ ์ข…๋ฃŒ๋˜์–ด์•ผ ์ข…๋ฃŒ๋œ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ์•„์•ผํ•œ๋‹ค. main์ด ๋จผ์ € ๋๋‚ด๋„ t1 ์“ฐ๋ ˆ๋“œ๊ฐ€ ์ข…๋ฃŒ๋˜์ง€ ์•Š์€ ์ƒํƒœ๋ผ๋ฉด t2๋Š” ์—ฌ์ „ํžˆ ์ž‘๋™ํ•˜๊ณ  ์žˆ์„ ๊ฒƒ์ด๋‹ค.

 

 

๐Ÿ“š ์ฐธ๊ณ ํ•œ ์ฑ…

 

: ์ถœ์ฒ˜ ์˜ˆ์Šค24 ํ™ˆํŽ˜์ด์ง€

 

 

 

- ๊ธฐ๋ณธ์ ์ธ ๊ฐœ๋…์„ ์ •๋ฆฌํ•˜๊ณ  ์ถ”๊ฐ€์ ์œผ๋กœ ๊ถ๊ธˆํ•œ ๊ฒƒ๋“ค์„ ์ •๋ฆฌํ–ˆ์Šต๋‹ˆ๋‹ค -

 

 

๐Ÿฅ ๐Ÿฅ ๐Ÿฅ

 


 

โœ”๏ธ   ์˜ˆ์™ธ์ฒ˜๋ฆฌ_ 467p

 

try

: ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ์ฝ”๋“œ๊ฐ€ ํฌํ•จ๋˜์–ด์žˆ๋‹ค.

 

catch

: ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ์ฒ˜๋ฆฌํ•  ์ฝ”๋“œ๊ฐ€ ํฌํ•จ๋œ๋‹ค.

 

finally

: ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•˜๋“ , ๋ฐœ์ƒํ•˜์ง€ ์•Š๋“  ํ•ญ์ƒ ์‹คํ–‰๋˜๋Š” ๋ธ”๋ก์œผ๋กœ, ์ผ๋ฐ˜์ ์œผ๋กœ ๋ฆฌ์†Œ์Šค ํ•ด์ œ๋‚˜ try{ }, catch{ }์˜ ๊ณตํ†ต ๊ธฐ๋Šฅ ์ฝ”๋“œ๊ฐ€ ํฌํ•จ๋˜์–ด์žˆ๋‹ค.

 

try {
    int a = 10 / 0;
}

catch (Exception e) {
    System.out.println("์˜ˆ์™ธ ๋ฐœ์ƒ!");
}

catch (ArithmeticException e) {
    System.out.println("0์œผ๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค!");
}

finally {
    System.out.println("ํ”„๋กœ๊ทธ๋žจ ์ข…๋ฅ˜");
}
try๋Š” ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ์ฝ”๋“œ๋ฅผ ๋‹ด๊ณ  ์žˆ๋‹ค. ํ•ด๋‹น ์ฝ”๋“œ์—์„  ArithmeticException์ด๋ž€ ์˜ˆ์™ธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚จ๋‹ค. catch๋Š” ์˜ˆ์™ธ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ์‹์„ ๋‚˜ํƒ€๋‚ด๋Š”๋ฐ ์—ฌ๋Ÿฌ ๊ฐœ๋ฅผ ์ •์˜ํ•  ์ˆ˜ ์žˆ๋‹ค. try์—์„œ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ๊ทธ์— ๋งž๋Š” ์ฒ˜๋ฆฌ๋ฐฉ๋ฒ•์„ ์ฐพ๊ธฐ ์œ„ํ•ด ์ฒซ๋ฒˆ์งธ catch๋ถ€ํ„ฐ finally๋ฅผ ํ–ฅํ•ด ๋‚ด๋ ค๊ฐ„๋‹ค.

๊ทธ๋Ÿฐ๋ฐ ์œ„์˜ ์ฝ”๋“œ๋Š” ์˜ˆ์™ธ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ณผ์ •์—์„œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. ๋ชจ๋“  ์˜ˆ์™ธ๋Š” Exception ํด๋ž˜์Šค์˜ ํ•˜์œ„ ํด๋ž˜์Šค๋กœ ์–ด๋–ค ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•˜๋“  ์ฒซ๋ฒˆ์งธ catch ๋ธ”๋ก๋งŒ ์‹คํ–‰๋˜๋ฏ€๋กœ ๋‘๋ฒˆ์งธ catch ๋ธ”๋ก์— ๋„๋‹ฌํ•  ์ˆ˜ ์—†๋Š” ์ฝ”๋“œ๊ฐ€ ๋œ๋‹ค. ๊ทธ๋ž˜์„œ unreachable code ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

 

 

๋ชจ๋“  ์˜ˆ์™ธ๋Š” Exception์˜ ํ•˜์œ„ํด๋ž˜์Šค๋‹ค.

 

 

try {
    int a = 10 / 0;
}

catch (ArithmeticException e) {
    System.out.println("0์œผ๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค!");
}

catch (Exception e) {
    System.out.println("์˜ˆ์™ธ ๋ฐœ์ƒ!");
}

finally {
    System.out.println("ํ”„๋กœ๊ทธ๋žจ ์ข…๋ฅ˜");
}
์ˆœ์„œ๋ฅผ ๋ฐ”๊ฟ”์ฃผ๋ฉด ์˜ค๋ฅ˜๊ฐ€ ํ•ด๊ฒฐ๋˜์–ด ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•ด์ง„๋‹ค.

 

 

 

๋‹ค์ค‘ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ

public class TryCatchPratice1 {
    public static void main(String[] args) {
    
        try {
            System.out.println(10 / 0); 
        } catch (ArithmeticException e) {
            System.out.println("0์œผ๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.");
        } finally {
            System.out.println("ํ”„๋กœ๊ทธ๋žจ์„ ์ข…๋ฅ˜ํ•ฉ๋‹ˆ๋‹ค.");
        }    

        try {
            int[] arr = new int[3];
            System.out.println(arr[5]);
        } catch (ArrayIndexOutOfBoundsException e) {
            System.out.println("๋ฐฐ์—ด ์ธ๋ฑ์Šค ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚ฌ์Šต๋‹ˆ๋‹ค.");
        } finally {
            System.out.println("ํ”„๋กœ๊ทธ๋žจ์„ ์ข…๋ฅ˜ํ•ฉ๋‹ˆ๋‹ค.");
        }    
    }
}
์ฒซ๋ฒˆ์งธ try์—์„œ๋Š” 0์œผ๋กœ ๋‚˜๋ˆ„๋Š” ๊ฒƒ์ด ๋ถˆ๊ฐ€๋Šฅํ•˜์—ฌ ArithmeticException ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๋ฐฉ๋ฒ•์„ ๋’€๋‹ค. ๋‘๋ฒˆ์งธ try์—์„œ๋Š” ๋ฐฐ์—ด์˜ ํฌ๊ธฐ๊ฐ€ 3์ž„์—๋„ ๊ทธ ์ด์ƒ์— ์žˆ๋Š” ๋ฐฐ์—ด์„ ์ถœ๋ ฅ์‹œํ‚ค๋ฉฐ ๋ฐœ์ƒํ•œ ์ธ๋ฑ์Šค ๋ฒ”์œ„ ์˜ค๋ฅ˜ ์˜ˆ์™ธ๋ฅผ ์ฒ˜๋ฆฌํ–ˆ๋‹ค. finally์˜ ๊ฒฝ์šฐ ์ค‘๋ณต๋˜์–ด ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ–ˆ๋‹ค.

 

public class TryCatchPratice02 {
    public static void main(String[] args) {
        try {
            int[] arr = new int[3];
            System.out.println(10 / 0);     
            System.out.println(arr[5]);      
        } catch (ArithmeticException e) {
            System.out.println("0์œผ๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.");
        } catch (ArrayIndexOutOfBoundsException e) {
            System.out.println("๋ฐฐ์—ด ์ธ๋ฑ์Šค ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚ฌ์Šต๋‹ˆ๋‹ค.");
        } finally {
            System.out.println("ํ”„๋กœ๊ทธ๋žจ์„ ์ข…๋ฅ˜ํ•ฉ๋‹ˆ๋‹ค.");
        }    
    }
}
ํ•˜๋‚˜์˜ try ๋ธ”๋ก ์•ˆ์— ์—ฌ๋Ÿฌ ์˜ˆ์™ธ๋ฅผ ๋„ฃ๊ณ  catch๋กœ ์˜ˆ์™ธ์ฒ˜๋ฆฌ๋ฅผ ํ•œ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ํ›จ์”ฌ ๊ฐ„๊ฒฐํ•œ ์ฝ”๋“œ๊ฐ€ ์™„์„ฑ๋œ๋‹ค. try ๋ธ”๋ก์— ์žˆ๋Š” ์˜ˆ์™ธ ์ฝ”๋“œ๋Š” catch ๋ธ”๋ก์˜ ์ˆœ์„œ์™€ ์—ฐ๊ด€์—†์ด ์•Œ์•„์„œ ์ž‘์„ฑํ•ด์ฃผ๋ฉด ๋œ๋‹ค. try์™€ catch์— ์ค‘๋ณต๋œ ์ฝ”๋“œ๊ฐ€ ์žˆ์„ ๊ฒฝ์šฐ, finally์— ์ ์–ด ์ค‘๋ณต์„ ํ”ผํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

 

 ๋‹ค์ค‘ ์˜ˆ์™ธ๋ฅผ ํ•œ ๋ธ”๋ก์—์„œ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•

public class TryCatchPratice02 {
    public static void main(String[] args) {
        try {
            int[] arr = new int[3];
            System.out.println(10 / 0);     
            System.out.println(arr[5]);      
        } catch (ArithmeticException | ArrayIndexOutOfBoundsException e) {
            System.out.println("์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.");
        } finally {
            System.out.println("ํ”„๋กœ๊ทธ๋žจ์„ ์ข…๋ฅ˜ํ•ฉ๋‹ˆ๋‹ค.");
        }    
    }
}
ํ•˜๋‚˜์˜ catch ๋ธ”๋ก์—์„œ ๋‘ ๊ฐœ์˜ ์˜ˆ์™ธ๋ฅผ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋Ÿด ๊ฒฝ์šฐ |(OR)์„ ์‚ฌ์šฉํ•˜์—ฌ ๋‚˜ํƒ€๋‚ด๋ฉด ๋œ๋‹ค.

 

 

 

 


 

 

 

โœ”๏ธ   ๋ฆฌ์†Œ์Šค ํ•ด์ œ_ 477p

 

๋ฆฌ์†Œ์Šค ํ•ด์ œ

: ๋”์ด์ƒ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ์ž์›์„ ๋ฐ˜๋‚ฉํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค.

 

InputStreamReader๋ฅผ ์ด์šฉํ•˜์—ฌ ๋ฆฌ์†Œ์Šค ์ž๋™ ํ•ด์ œ

try (InputStreamReader isr1 = new InputStreamReader (System.in);) {
    char input = (char) isr1.read();
    System.out.println("์ž…๋ ฅ ๊ธ€์ž = " + input);
} catch (IOException e) {
    e.printStackTrace();
}

try (InputStreamReader isr2 = new InputStreamReader (System.in);) {
    char input = (char) isr2.read();
    System.out.println("์ž…๋ ฅ ๊ธ€์ž = " + input);
} catch (IOException e) {
    e.printStackTrace();
}
InputStreamReader์—๋Š” AutoCloseable์„ ๊ตฌํ˜„ํ•˜๊ณ  ์žˆ๋‹ค. try์˜ ๊ด„ํ˜ธ ์•ˆ์— ์„ ์–ธ๋œ ๊ฐ์ฒด๊ฐ€ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ ๊ตฌ๋ฌธ์˜ ์‹คํ–‰์ด ๋๋‚˜๋ฉด ์ž๋™์œผ๋กœ close( ) ํ˜ธ์ถœํ•ด ๋ฆฌ์†Œ์Šค๋ฅผ ํ•ด์ œํ•œ๋‹ค. 

๊ทธ๋Ÿฐ๋ฐ ์œ„์˜ ์ฝ”๋“œ๋Š” ์ฒซ๋ฒˆ์งธ try ๋ธ”๋ก์—์„œ ์˜ˆ์™ธ์ฒ˜๋ฆฌ๋ฅผ ๋งˆ์น˜๊ณ  ๋ฆฌ์†Œ์Šค๋ฅผ ํ•ด์ œํ–ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ๊ทธ ๋‹ค์Œ try ๋ธ”๋ก์€ ์–ด๋–ป๊ฒŒ ์ง„ํ–‰๋˜๋Š”๊ฑธ๊นŒ. System.in์€ ์ฝ˜์†” ์ž…๋ ฅ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฆฌ์†Œ์Šค๋กœ ์ž๋ฐ” ๊ฐ€์ƒ ๋จธ์‹ ์ด ๋‹จ ํ•˜๋‚˜์˜ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•ด ์ œ๊ณตํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ด๋ฅผ ๋ฐ˜๋‚ฉํ•˜๋ฉด ๋”์ด์ƒ ์ฝ˜์†”์„ ์ž…๋ ฅํ•  ์ˆ˜ ์—†๊ฒŒ๋œ๋‹ค. ๊ทธ๋Ÿฌ๋ฏ€๋กœ ์ฒซ๋ฒˆ์งธ try ๋ธ”๋ก์—์„œ ๋ฆฌ์†Œ์Šค๋ฅผ ๋ฐ˜๋‚ฉํ•ด์„œ ๋‹ค์Œ try ๋ธ”๋ก์€ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๊ฒŒ๋œ๋‹ค.

 

 

 

 ์ง์ ‘ close๋ฅผ ์„ค์ •ํ•˜์—ฌ ๋ฆฌ์†Œ์Šค ์ˆ˜๋™ ํ•ด์ œ

A a1 = null;

try {
    a1 = new A("ํŠน์ • ํŒŒ์ผ")
}

catch (Exception e) {
    System.out.println("์˜ˆ์™ธ ์ฒ˜๋ฆฌ");
}

finally {
    if(a1.resource!=null) {
        try{
            a1.close();
        } catch (Exception e) {
        }
    }
}
finally์— ์ง์ ‘ close( )๋ฅผ ์ •์˜ํ•œ๋‹ค. finally์— ์ •์˜ํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด, ํด๋ž˜์Šค A์— AutoCloseable ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•œ๋‹ค. AutoCloseable ๋‚ด๋ถ€์— close( ) ๋ฉ”์„œ๋“œ๋ฅผ ํฌํ•จํ•˜๊ณ  ์žˆ๊ธฐ์— finally์— ์ง์ ‘ ์ •์˜ํ•˜์ง€ ์•Š์•„๋„, ๋ฆฌ์†Œ์Šค๋ฅผ ์•Œ์•„์„œ ํ•ด์ œํ•  ๊ฒƒ์ด๋‹ค.

 

 

 

 


 

 

 

โœ”๏ธ   ์˜ˆ์™ธ์ „๊ฐ€_ 485p

 

์˜ˆ์™ธ ์ „๊ฐ€

: ์˜ˆ์™ธ ์ฒ˜๋ฆฌ์˜ ์˜๋ฌด๋ฅผ ํ˜ธ์ถœํ•œ ๋ฉ”์„œ๋“œ๊ฐ€ ์˜ˆ์™ธ๋ฅผ ๊ฐ–๊ฒŒ ๋˜๋ฉฐ, ์ƒ์œ„์˜ ๋ฉ”์„œ๋“œ๋„ ์ž์‹ ์„ ํ˜ธ์ถœํ•œ ์ง€์ ์œผ๋กœ ์˜ˆ์™ธ๋ฅผ ์ „๊ฐ€ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

throws

: ์˜ˆ์™ธ ์ „๊ฐ€ ๋ฌธ๋ฒ•์ด๋‹ค.

    public static void readFile() throws IOException {
        BufferedReader reader = new BufferedReader(new FileReader("example.txt"));
        String line = reader.readLine();
        System.out.println("์ฝ์€ ๋‚ด์šฉ: " + line);
        reader.close();
    }

    public static void main(String[] args) {
        try {
            readFile();
        } catch (IOException e) {
            System.out.println("ํŒŒ์ผ์„ ์ฝ๋Š” ์ค‘ ์˜ค๋ฅ˜ ๋ฐœ์ƒ: " + e.getMessage());
        }
    }
readFile ๋ฉ”์„œ๋“œ์—์„œ ๋ฐœ์ƒํ•˜๋Š” ์˜ˆ์™ธ๋ฅผ IOException์œผ๋กœ ์ „๊ฐ€๋˜์—ˆ์œผ๋ฉฐ ๋ฉ”์„œ๋“œ ๋‚ด๋ถ€์—์„œ try-catch ๊ตฌ๋ฌธ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜์ง€ ์•Š์•˜๋‹ค. ๋Œ€์‹ , main ๋ฉ”์„œ๋“œ์—์„œ readFile( )์„ ํ˜ธ์ถœํ•  ๋•Œ  try-catch๋กœ ์˜ˆ์™ธ๋ฅผ ์ฒ˜๋ฆฌํ•œ๋‹ค. ์˜ˆ์™ธ ์ „๊ฐ€๋Š” ์œ„์˜ ์ฝ”๋“œ์ฒ˜๋Ÿผ ์˜ˆ์™ธ๋ฅผ ์œ ์—ฐํ•˜๊ฒŒ ๋ถ„๋ฆฌ ์‹œ์ผœ ๋‚˜์ค‘์— ์ฒ˜๋ฆฌํ•˜๋„๋ก ํ•ด์ค€๋‹ค.

์˜ˆ์™ธ๋ฅผ ์ฒ˜๋ฆฌํ•˜์ง€ ์•Š๊ณ  ๊ณ„์† ์ „๊ฐ€ํ•˜๊ฒŒ ๋˜๋ฉด ์ž๋ฐ” ๊ฐ€์ƒ ๋จธ์‹ ์ด ์ง์ ‘ ์˜ˆ์™ธ๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ฒŒ ๋œ๋‹ค. ์ž๋ฐ” ๊ฐ€์ƒ ๋จธ์‹ ์˜ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ ๋ฐฉ๋ฒ•์€ ์šฐ๋ฆฌ๊ฐ€ ์ž˜ ์•„๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค. ๋ฐœ์ƒํ•œ ์˜ˆ์™ธ์˜ ์ •๋ณด๋ฅผ ํ™”๋ฉด์— ์ถœ๋ ฅํ•œ ๋’ค ํ”„๋กœ๊ทธ๋žจ์„ ๊ฐ•์ œ ์ข…๋ฃŒํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

์˜ˆ์™ธ ์ „๊ฐ€๋„ ๋‹ค์ค‘์œผ๋กœ ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅํ•˜๋‹ค. throws ์˜ˆ์™ธ ํด๋ž˜์Šค A, ์˜ˆ์™ธ ํด๋ž˜์Šค B... ๋กœ ํ•œ ๋ฒˆ์— ์ „๊ฐ€ํ•˜๋ฉด ๋œ๋‹ค.

 

 

 

 


 

 

 

โœ”๏ธ   ์‚ฌ์šฉ์ž ์ •์˜ ์˜ˆ์™ธ ํด๋ž˜์Šค_ 492p

 

์‚ฌ์šฉ์ž ์ •์˜ ์˜ˆ์™ธ ํด๋ž˜์Šค

: ์ž๋ฐ”์— ์กด์žฌ ํ•˜์ง€ ์•Š๋Š” ์˜ˆ์™ธ๋ฅผ ์ง์ ‘ ์ž‘์„ฑํ•œ๋‹ค.

 

 ์‚ฌ์šฉ์ž ์ •์˜ ์˜ˆ์™ธ ํด๋ž˜์Šค ์ž‘์„ฑ

public class MyException extends Exception {
    public MyException(String message) {
        super(message);
    }
}
์ƒ์„ฑ์ž์—์„œ message๋ฅผ ๋ฐ›์•„, ์˜ˆ์™ธ ๋ฉ”์‹œ์ง€๋ฅผ ๋ถ€๋ชจ์—๊ฒŒ ์ „๋‹ฌํ•œ๋‹ค.

 

 

์‚ฌ์šฉ์ž ์ •์˜ ์˜ˆ์™ธ ๊ฐ์ฒด ์ƒ์„ฑ๊ณผ ์˜ˆ์™ธ ๊ฐ์ฒด ๋˜์ง€๊ธฐ

throw new MyException("๋‚˜์ด๊ฐ€ ๋„ˆ๋ฌด ์–ด๋ ค์„œ ๊ฐ€์ž…ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.");

 

 

 ์‚ฌ์šฉ์ž ์ •์˜ ์˜ˆ์™ธ ๊ฐ์ฒด ์ƒ์„ฑ๊ณผ ์˜ˆ์™ธ ๊ฐ์ฒด ๋˜์ง€๊ธฐ

public class Pratice01 {

    public static void checkAge(int age) throws MyException {
        if (age < 18) {
            throw new MyException("๋‚˜์ด๊ฐ€ ๋„ˆ๋ฌด ์–ด๋ ค์„œ ๊ฐ€์ž…ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.");
        } else {
            System.out.println("๊ฐ€์ž…์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.");
        }
    }

    public static void main(String[] args) {
        try {
            checkAge(15);
        } catch (MyException e) {
            System.out.println("์˜ˆ์™ธ ๋ฐœ์ƒ: " + e.getMessage());
        }
    }
}
18์‚ด ์ดํ•˜๋ฉด MyException ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•˜๋„๋ก ๋งŒ๋“ค์—ˆ๋‹ค. try ๋ธ”๋ก์—์„œ 15๋ฅผ ์ธ์ž๋กœ ๋ณด๋ƒˆ๊ณ  ์˜ˆ์™ธ MyException์ด ๋ฐœ์ƒํ•ด ์˜ˆ์™ธ๋ฅผ ๋˜์กŒ๋‹ค. catch ๊ตฌ๋ฌธ์—์„œ ๋ฐ›์•„ ์˜ˆ์™ธ ๋ฐœ์ƒ ๋ฌธ๊ตฌ๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

 

 

 

 


 

 

 

โœ”๏ธ   ์˜ˆ์™ธ ํด๋ž˜์Šค์˜ ๋ฉ”์„œ๋“œ_ 497p

 

getMassage( ) ๋ฉ”์„œ๋“œ

: ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ์ƒ์„ฑ์ž๋กœ ๋„˜๊ธด ๋ฉ”์‹œ์ง€๋ฅผ ๋ฌธ์ž์—ด ํ˜•ํƒœ๋กœ ๋ฆฌํ„ดํ•˜๋Š” ๋ฉ”์„œ๋“œ

 throw new MyException("๋‚˜์ด๊ฐ€ ๋„ˆ๋ฌด ์–ด๋ ค์„œ ๊ฐ€์ž…ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.");
System.out.println("์˜ˆ์™ธ ๋ฐœ์ƒ: " + e.getMessage());
๋‚˜์ด๊ฐ€ ๋„ˆ๋ฌด ์–ด๋ ค์„œ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค. ์˜ˆ์™ธ๋Š” "๋‚˜์ด๊ฐ€ ๋„ˆ๋ฌด ์–ด๋ ค์„œ ๊ฐ€์ž…ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค."๋ผ๋Š” ๋ฉ”์‹œ์ง€๋ฅผ ํฌํ•จํ•˜๊ณ  ์žˆ๋‹ค. ํ•ด๋‹น ๋ฉ”์‹œ์ง€๋Š” ์˜ˆ์™ธ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•  ๋•Œ ์ž…๋ ฅ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ „๋‹ฌ๋œ๋‹ค. ์ด ๋ฌธ์ž์—ด์€ getMassage( ) ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด ๋ฆฌํ„ดํ•œ๋‹ค.

 

 

 

printStackTrace( ) ๋ฉ”์„œ๋“œ

์˜ˆ์™ธ ๋ฐœ์ƒ์ด ์ „๋‹ฌ๋˜๋Š” ๊ฒฝ๋กœ๋กœ, ์˜ˆ์™ธ ๋ฐœ์ƒ ์‹œ ๊ฐœ๋ฐœ์ž๊ฐ€ ๋””๋ฒ„๊น…ํ•  ์ˆ˜ ์žˆ๋„๋ก ์˜ˆ์™ธ์˜ ์›์ธ์„ ์ž์„ธํžˆ ์ถœ๋ ฅํ•œ๋‹ค.

try (InputStreamReader isr1 = new InputStreamReader(System.in)) {
    char input = (char) isr1.read();
    System.out.println("์ž…๋ ฅ ๊ธ€์ž = " + input);
} catch (IOException e) {
    e.printStackTrace();
}
์ฝ˜์†”์— ์˜ˆ์™ธ๊ฐ€ ์–ด๋””์—์„œ ์ „๊ฐ€๋˜์—ˆ๋Š”์ง€ ๋“ฑ ์ถ”์  ์ •๋ณด๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

 

+ Recent posts