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

 

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

 

 

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

 

 

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

 


 

โœ”๏ธ   Set<E>_ 646p

 

โ€ข Set<E>

: ๋™์ผํ•œ ํƒ€์ž…์„ ๋ฌถ์–ด ๊ด€๋ฆฌํ•˜๋Š” ์ž๋ฃŒ๊ตฌ์กฐ๋กœ ์ธ๋ฑ์Šค ์ •๋ณด๋ฅผ ํฌํ•จํ•˜๊ณ  ์žˆ์ง€ ์•Š์€, ์ง‘ํ•ฉ์˜ ๊ฐœ๋…๊ณผ ๊ฐ™์€ ์ปฌ๋ ˆ์…˜์ด๋‹ค.

Set<String> hset1 = new HashSet<String>();

hset1.add("a");
hset1.add("b");
hset1.add("c");
System.out.println(hset1.toString());
System.out.println(hset1.size());

hset1.add("a");
System.out.println(hset1.toString());
System.out.println(hset1.size());
Set<E>๋Š” ์ธ๋ฑ์Šค ์ •๋ณด๊ฐ€ ์—†์–ด์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ค‘๋ณตํ•ด ์ €์žฅํ•˜๋ฉด ์ค‘๋ณต๋œ ๋ฐ์ดํ„ฐ ์ค‘ ํŠน์ • ๋ฐ์ดํ„ฐ๋ฅผ ์ง€์นญํ•ด ๊บผ๋‚ผ ๋ฐฉ๋ฒ•์ด ์—†๋‹ค. Set<E>๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๊ตฌ๋ถ„ํ•  ์ˆ˜ ์žˆ๋Š” ์œ ์ผํ•œ ๋ฐฉ๋ฒ•์ด ๋ฐ์ดํ„ฐ ๊ทธ ์ž์ฒด์ธ ๊ฒƒ์ด๋‹ค. ์ฝ”๋“œ๋ฅผ ์‚ดํŽด๋ณด๋ฉด hset1์— a,b,c๋ฅผ ์ €์žฅํ–ˆ๊ณ  ์ดํ›„์— a๋ฅผ ๋˜ ํ•œ ๋ฒˆ ์ €์žฅํ–ˆ๋‹ค. Set<E>๋Š” ๋™์ผํ•œ ๋ฐ์ดํ„ฐ์˜ ์ค‘๋ณต ์ €์žฅ์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ, ์ถœ๋ ฅ๋˜๋Š” ๊ฐ’๊ณผ ์‚ฌ์ด์ฆˆ์˜ ํฌ๊ธฐ๋Š” ๋ณ€๋™๋˜์ง€ ์•Š๋Š”๋‹ค. ์ด๋•Œ ์ถœ๋ ฅ์€ ์ž…๋ ฅ ์ˆœ์„œ์™€ ๋‹ค๋ฅด๊ฒŒ ์ถœ๋ ฅ๋  ์ˆ˜ ์žˆ๋‹ค.

 

 

โ€ข Set<E>์˜ ์ฃผ์š” ๋ฉ”์„œ๋“œ

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

 

 

 

 


 

 

 

โœ”๏ธ   HashSet<E>_ 648p

 

โ€ข HashSet<E>

: Set<E> ์ธํ„ฐํŽ˜์ด์Šค์˜ ๋Œ€ํ‘œ์ ์ธ ๊ตฌํ˜„ ํด๋ž˜์Šค๋กœ, ์ €์žฅ์šฉ๋Ÿ‰์„ ๋™์ ์œผ๋กœ ๊ด€๋ฆฌํ•˜๋ฉฐ ๊ธฐ๋ณธ ์ƒ์„ฑ์ž๋กœ ์ƒ์„ฑํ•  ๋•Œ ๊ธฐ๋ณธ๊ฐ’์€ 16์ด๋‹ค.

 

โ€ข contains

: Set์— ํฌํ•จ๋œ ๊ฐ’์ด ์žˆ๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ๋ฆฌํ„ดํ•œ๋‹ค.

 

โ€ข iterator

: ๋ฐ์ดํ„ฐ๋ฅผ ์—ฐ์†ํ•ด์„œ ๊บผ๋‚ธ๋‹ค.

hset1.contains("a"); // true

Iterator<String> iterator = hset1.iterator();
while(iterator.hasNext()) {
    System.out.println(iterator.next() + " "); // a b c
}
contains(Object o) ๋ฉ”์„œ๋“œ๋Š” HashSet<E> ๊ฐ์ฒด ์•ˆ์— ํ•ด๋‹น ์›์†Œ๊ฐ€ ์žˆ๋Š”์ง€๋ฅผ true/false๋กœ ๋ฆฌํ„ดํ•œ๋‹ค.

iterator( )๋Š” Set<E> ๊ฐ์ฒด ๋‚ด๋ถ€์˜ ๋ฐ์ดํ„ฐ๋ฅผ 1๊ฐœ์”ฉ ๊บผ๋‚ด ์ฒ˜๋ฆฌํ•˜๊ณ ์ž ํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค. ์ธ๋ฑ์Šค ๋ฒˆํ˜ธ๊ฐ€ ์—†์–ด์„œ List<E> ๊ฐ์ฒด์ฒ˜๋Ÿผ for ๋ฌธ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค. ์ฝ”๋“œ์—์„œ hset1์€ string ํƒ€์ž…์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. ๊ทธ๋ž˜์„œ Iterator์˜ ํƒ€์ž…์€ <String>์ด ๋œ๋‹ค.

hasNext( ) ๋ฉ”์„œ๋“œ๋Š” ๋‹ค์Œ์œผ๋กœ ๊ฐ€๋ฆฌํ‚ฌ ์›์†Œ์˜ ์กด์žฌ ์—ฌ๋ถ€๋ฅผ ๋ถˆ๋ฆฌ์–ธ์œผ๋กœ ๋ฆฌํ„ดํ•˜๋Š” ๊ฒƒ์ด๊ณ , ์ด ๊ฐ’์ด false์ผ ๋•Œ ๋งˆ์ง€๋ง‰ ๋ฐ์ดํ„ฐ๊นŒ์ง€ ์ฝ์€ ๊ฒƒ์ด๋‹ค. next( ) ๋ฉ”์„œ๋“œ๋Š” ๋‹ค์Œ ์›์†Œ ์œ„์น˜๋กœ ๊ฐ€์„œ ์ฝ์€ ๊ฐ’์„ ๋ฆฌํ„ดํ•œ๋‹ค.

Iterator<E> ๊ฐ์ฒด๊ฐ€ ์ฒ˜์Œ์— ์ƒ์„ฑ๋˜๋ฉด ์ฒซ ์›์†Œ ๋ฐ”๋กœ ์ด์ „์˜ ๊ฐ’์„ ๊ฐ€๋ฆฌํ‚ค๊ณ  ์žˆ๋‹ค. ๊ทธ๋ž˜์„œ ์ฒซ ๋ฒˆ์งธ ์›์†Ÿ๊ฐ’์„ ์ฝ์œผ๋Ÿฌ๋ฉด iterator.hasNext๋ฅผ ํ•ด์•ผํ•œ๋‹ค.

 

 

 

โ€ข toArray(), toArray(T[] t)

: ๋ฐฐ์—ด๋กœ ๋ณ€ํ™˜ํ•œ๋‹ค.

Object[] objArray = hset1.toArray();
System.out.println(Arrays.toString(objArray)); // [a b c]

Object[] strArray1 = hset1.toArray(new String[0]);
System.out.println(Arrays.toString(strArray1)); // [a b c]

Object[] strArray2 = hset1.toArray(new String[5]);
System.out.println(Arrays.toString(strArray2)); // [a b c null null]
toArray( ) ๋ฉ”์„œ๋“œ๋Š” HashSet<E> ๋‚ด์˜ ๋ชจ๋“  ์›์†Œ๋ฅผ ๋‹ด๋Š” Object[ ]์„ ๋ฆฌํ„ดํ•œ๋‹ค. HashSet<E>์˜ ๋ฐ์ดํ„ฐ ๊ฐœ์ˆ˜๋ณด๋‹ค ์ž‘์€ ํฌ๊ธฐ์˜ ๋ฐฐ์—ด์„ ๋„˜๊ฒจ ์ฃผ๋ฉด ๋ฐ์ดํ„ฐ์˜ ๊ฐœ์ˆ˜๋งŒํผ ํ™•์žฅ๋œ ๋ฐฐ์—ด์„ ๋ฆฌํ„ดํ•œ๋‹ค. ๋ฐ˜๋Œ€๋กœ ํฐ ๋ฐฐ์—ด์„ ๋„˜๊ฒจ์ฃผ๋ฉด ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐฐ์—ด ์•ž์—์„œ ์ฑ„์šด ํ›„ ๋ฆฌํ„ดํ•œ๋‹ค.

 

 

 

โ€ข HashSet์˜ ์ค‘๋ณต ํ™•์ธ

HashSet์€ ๋‚ด๋ถ€์—์„œ ์—ฌ๋Ÿฌ๊ฐœ์˜ ๋ฒ„ํ‚ท์„ ๊ด€๋ฆฌํ•œ๋‹ค. ๊ฐ’์„ ์ €์žฅํ•˜๊ฑฐ๋‚˜ ๊ฒ€์ƒ‰ํ•  ๋•Œ, ๊ฐ์ฒด์˜ hashCode( )๋ฅผ ์ด์šฉํ•ด ์–ด๋А ๋ฒ„ํ‚ท์— ๋“ค์–ด๊ฐˆ์ง€ ๊ฒฐ์ •ํ•œ๋‹ค. ๋งŒ์•ฝ ์ด๋ฏธ ๊ฐ™์€ ๋ฒ„ํ‚ท์— ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ๋‹ค๋ฉด, hashCode( ) ๊ฐ’์ด ๊ฐ™๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ๊ทธ ๋‹ค์Œ equals( ) ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด ํ™•์ธํ•œ๋‹ค. equals๋Š” ์‹ค์ œ ๊ฐ’์ด ๊ฐ™์€์ง€ ํ™•์ธํ•œ๋‹ค. equals() ๋ฉ”์„œ๋“œ๊ฐ€ true๋ฅผ ๋ฆฌํ„ดํ•˜๋ฉด ๋‘ ๊ฐ์ฒด๋Š” ๋™์ผํ•œ ๊ฐ์ฒด๊ฐ€ ๋œ๋‹ค.

 

 

 


 

 

 

โœ”๏ธ   LinkedHashSet<E>_ 662p

 

โ€ข LinkedHashSet<E>

: HashSet<E>์˜ ์ž์‹ ํด๋ž˜์Šค๋กœ HashSet<E>์˜ ๋ชจ๋“  ๊ธฐ๋Šฅ์— ๋ฐ์ดํ„ฐ ๊ฐ„์˜ ์—ฐ๊ฒฐ ์ •๋ณด๋งŒ์„ ์ถ”๊ฐ€๋กœ ๊ฐ–๊ณ  ์žˆ๋Š” ์ปฌ๋ ‰์…˜์ด๋ฉฐ, ์ž…๋ ฅ๋œ ์ˆœ์„œ๋ฅผ ๊ธฐ์–ตํ•œ๋‹ค.

Set<String> linkedSet1 = new LinkedHashSet<>();

linkedSet1.add("a");
linkedSet1.add("b");
linkedSet1.add("c");

System.out.println(linkedSet1.toString()); // [a, b, c]

 

 

 


 

 

 

โœ”๏ธ   TreeSet<E>_ 662p

 

โ€ข TreeSet<E>

: ๊ณตํ†ต์ ์ธ Set<E>์˜ ๊ธฐ๋Šฅ์— ํฌ๊ธฐ์— ๋”ฐ๋ฅธ ์ •๋ ฌ ๋ฐ ๊ฒ€์ƒ‰ ๊ธฐ๋Šฅ์ด ์ถ”๊ฐ€๋œ ์ปฌ๋ ‰์…˜์ด๋‹ค.

 

โ€ข TreeSet<E>์˜ ์ฃผ์š” ๋ฉ”์„œ๋“œ

๊ตฌ๋ถ„ ๋ฆฌํ„ดํƒ€์ž… ๋ฉ”์„œ๋“œ๋ช… ๊ธฐ๋Šฅ
๋ฐ์ดํ„ฐ
๊ฒ€์ƒ‰
E first() Set ์›์†Œ ์ค‘ ๊ฐ€์žฅ ์ž‘์€ ์›์†Ÿ๊ฐ’ ๋ฆฌํ„ด
E last() Set ์›์†Œ ์ค‘ ๊ฐ€์žฅ ํฐ ์›์†Ÿ๊ฐ’ ๋ฆฌํ„ด
E lower(E element) ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ž…๋ ฅ๋œ ์›์†Œ๋ณด๋‹ค ์ž‘์€ ๊ฐ€์žฅ ํฐ ์ˆ˜
E higher(E element) ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ž…๋ ฅ๋œ ์›์†Œ๋ณด๋‹ค ํฐ ๊ฐ€์žฅ ์ž‘์€ ์ˆ˜
E floor (E element) ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ž…๋ ฅ๋œ ์›์†Œ๋ณด๋‹ค ๊ฐ™๊ฑฐ๋‚˜ ์ž‘์€ ๊ฐ€์žฅ ํฐ์ˆ˜
E ceiling (E element) ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ž…๋ ฅ๋œ ์›์†Œ๋ณด๋‹ค ๊ฐ™๊ฑฐ๋‚˜ ํฐ ๊ฐ€์žฅ ์ž‘์€์ˆ˜
๋ฐ์ดํ„ฐ
๊บผ๋‚ด๊ธฐ
E pollFirst() Set ์›์†Œ๋“ค ์ค‘ ๊ฐ€์žฅ ์ž‘์€ ์›์†Ÿ๊ฐ’์„ ๊บผ๋‚ด ๋ฆฌํ„ด
E pollLast() Set ์›์†Œ๋“ค ์ค‘ ๊ฐ€์žฅ ํฐ ์›์†Ÿ๊ฐ’์„ ๊บผ๋‚ด ๋ฆฌํ„ด
๋ฐ์ดํ„ฐ
๋ถ€๋ถ„ ์ง‘ํ•ฉ
์ƒ์„ฑ
SortedSet<E> headSet(E toElement) toElement ๋ฏธ๋งŒ์ธ ๋ชจ๋“  ์›์†Œ๋กœ ๊ตฌ์„ฑ๋œ Set์„ ๋ฆฌํ„ด
NavigableSet<E> headSet(E toElement, boolean inclusive) toElement ๋ฏธ๋งŒ/์ดํ•˜์ธ ๋ชจ๋“  ์›์†Œ๋กœ ๊ตฌ์„ฑ๋œ Set์„ ๋ฆฌํ„ด(inclusive=true์ด๋ฉด toElement ํฌํ•จ, inclusive=false์ด๋ฉด toElement ๋ฏธํฌํ•จ)
SortedSet<E> tailSet(E fromElement, boolean inclusive) toElement ์ด์ƒ์ธ ๋ชจ๋“  ์›์†Œ๋กœ ๊ตฌ์„ฑ๋œ Set์„ ๋ฆฌํ„ด(fromElement ํฌํ•จ)
NabigableSet<E> tailSet(E fromElement, E toElement) fromElement ์ดˆ๊ณผ/์ด์ƒ์ธ ๋ชจ๋“  ์›์†Œ๋กœ ๊ตฌ์„ฑ๋œ Set์„ ๋ฆฌํ„ด(inclusive=true์ด๋ฉด fromElementํฌํ•จ, inclusive=false์ด๋ฉด fromElement ๋ฏธํฌํ•จ)
SortedSet<E> subSet(E fromElement, E toElement) fromElement ์ด์ƒ toElement ๋ฏธ๋งŒ์ธ ์›์†Œ๋“ค๋กœ ์ด๋ค„์ง„ Set์„ ๋ฆฌํ„ด(fromElementํฌํ•จ, toElement ๋ฏธํฌํ•จ)
NavigableSet<E> subSet(E fromElement, boolean frominclusive, E toElement, boolean toinclusive) fromElement ์ดˆ๊ณผ/์ด์ƒ toElement ๋ฏธ๋งŒ/ ์ดํ•˜์ธ ์›์†Œ๋“ค๋กœ ์ด๋ค„์ง„ Set์„ ๋ฆฌํ„ด(fromclusive=true/false์ด๋ฉด fromElement ํฌํ•จ/๋ฏธํฌํ•จ, toinclusive=true/false์ด๋ฉด toElement ํฌํ•จ/๋ฏธํฌํ•จ)
๋ฐ์ดํ„ฐ ์ •๋ ฌ NavigableSet<E> descendingSet() ๋‚ด๋ฆผ์ฐจ์ˆœ์˜ ์˜๋ฏธ๊ฐ€ ์•„๋‹ˆ๋ผ ํ˜„์žฌ ์ •๋ ฌ ๊ธฐ์ค€์„ ๋ฐ˜๋Œ€๋กœ ๋ณ€ํ™˜

 

 

โ€ข TreeSet<E>์—์„œ ๋ฐ์ดํ„ฐ ํฌ๊ธฐ ๋น„๊ต

TreeSet<Integer> treeSet1 = new TreeSet<Integer>();
Integer intValue1 = new Integer(20);
Integer intValue2 = new Integer(10);

treeSet1.add(intValue1);
treeSet1.add(intValue2);

System.out.println(treeSet1.toString());
์ž๋ฐ”๊ฐ€ ์ด๋ฏธ ํด๋ ˆ์Šค์— ํฌ๊ธฐ ๋น„๊ต ๊ธฐ์ค€์„ ์ž‘์„ฑํ•ด ๋†“์•„์„œ ์‰ฝ๊ฒŒ ํฌ๊ธฐ๋ฅผ ๋น„๊ตํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด ์ž๋ฐ”๊ฐ€ ์ •ํ•ด๋‘” ๊ธฐ์ค€์œผ๋กœ ํฌ๊ธฐ๋ฅผ ๋น„๊ตํ•  ์ˆ˜ ์—†๋‹ค๋ฉด ์–ด๋–ป๊ฒŒ ๋ ๊นŒ?

 

TreeSet<MyComparableClass> treeSet1 = new TreeSet<MyComparableClass>();
MyComparableClass myComparableClass1 = new MyComparableClass(2, 5);
MyComparableClass myComparableClass2 = new MyComparableClass(3, 3);

treeSet1.add(myComparableClass1);
treeSet1.add(myComparableClass2);

for (MyComparableClass mcc : treeSet1) {
    System.out.println(mcc.data1);
}
๋ฐ์ดํ„ฐ๋“ค์˜ ํฌ๊ธฐ๋ฅผ ๋น„๊ตํ•  ์ˆ˜ ์—†์–ด, ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. treeSet<E>์— ์ €์žฅ๋˜๋Š” ๋ชจ๋“  ๊ฐ์ฒด๋Š” ํฌ๊ธฐ ๋น„๊ต์˜ ๊ธฐ์ค€์ด ์ œ๊ณต๋˜์–ด์•ผํ•œ๋‹ค.

ํฌ๊ธฐ ๋น„๊ต์˜ ๊ธฐ์ค€์„ ์ œ๊ณตํ•˜๋Š” ์ฒซ๋ฒˆ์งธ ๋ฐฉ๋ฒ•์€, java.lang ํŒจํ‚ค์ง€์˜ Comparable<T> ์ œ๋„ค๋ฆญ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ์ด๋‹ค. CompareTo ๋ฉ”์„œ๋“œ๋Š” ๋‘ ๊ฐ์ฒด๋ฅผ ๋น„๊ตํ•˜์—ฌ ํ˜„์žฌ ๊ฐ์ฒด๊ฐ€ ๋” ์ž‘์œผ๋ฉด -1, ๊ฐ™์œผ๋ฉด 0, ๋” ํฌ๋ฉด 1์„ ๋ฆฌํ„ดํ•œ๋‹ค.

์œ„์˜ ์ฝ”๋“œ์—์„œ ์ถ”๊ฐ€๋œ 2์™€ 3์„ ๋น„๊ตํ•˜๊ณ  data1์— ์ •๋ ฌ๋  ๊ฒƒ์ด๋‹ค. ๋” ์ž‘์€ ์ˆœ์„œ๋ถ€ํ„ฐ ๋ฐฐ์น˜๋˜๋ฏ€๋กœ 2 -> 3 ์ˆœ์„œ๋กœ ๋ฐฐ์น˜๋  ๊ฒƒ์ด๋‹ค.

๋‘๋ฒˆ์งธ ๋ฐฉ๋ฒ•์€ TreeSet<E> ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๋ฉด์„œ ์ƒ์„ฑ์ž ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ Comparator<T> ๊ฐ์ฒด๋ฅผ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์ด๋‹ค. Comparable<T>๋Š” ํด๋ž˜์Šค ๋‚ด๋ถ€์—์„œ ํ•œ ๋ฒˆ๋งŒ ์ •๋ ฌ ๊ธฐ์ค€ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ Comparator<T> ๋Š” TreeSet ์ƒ์„ฑ ์‹œ ์›ํ•˜๋Š” ์ •๋ ฌ ๊ธฐ์ค€์„ ๋งˆ์Œ๋Œ€๋กœ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์™ธ๋ถ€์—์„œ ์ถ”๊ฐ€๋กœ ์ค„ ์ˆ˜ ์žˆ๋‹ค. 

 

 

 

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

 

 

 

์„น์…˜ 4๋Š” ์•„์ฃผ ๊ฐ„๋‹จํ•œ ํšŒ์›๊ด€๋ฆฌ ์›น์„ ๋งŒ๋“ค์—ˆ๋‹ค. ์ฒ˜์Œ์—๋Š” ์„œ๋ธ”๋ฆฟ์œผ๋กœ ํ•ด๋ณด๊ณ  JSP, SpringMVC๋ฅผ ์ฐจ๋ก€๋กœ ์‚ดํŽด๋ดค๋‹ค. ์„œ๋ธ”๋ฆฟ๊ณผ JSP๋กœ ๋งŒ๋“  ์ฝ”๋“œ์—๋Š” ์–ด๋–ค ๋ถˆํŽธํ•œ ์ ์ด ์žˆ๋Š”์ง€, SpringMVC๋Š” ์–ด๋–ป๊ฒŒ ๋™์ž‘ํ•˜๋Š”์ง€ ์‚ดํŽด๋ณด๋ฉฐ ์„œ๋ธ”๋ฆฟ๊ณผ JSP์˜ ๋ฌธ์ œ์ ์„ ์–ด๋–ป๊ฒŒ ๋ณด์™„ํ–ˆ๋Š”์ง€ ์‚ดํŽด๋ดค๋‹ค.

 

 

โ˜˜๏ธ 

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


 

โœ”๏ธ  MVC ํŒจํ„ด - ํšŒ์›์ •๋ณด ์ €์žฅ๊ณผ ์ถœ๋ ฅ

  • ์„œ๋ธ”๋ฆฟ์„ ์ปจํŠธ๋กค๋Ÿฌ๋กœ ์‚ฌ์šฉํ•˜๊ณ , JSP๋ฅผ ๋ทฐ๋กœ ์‚ฌ์šฉํ•œ๋‹ค.

 

โ–บ  MvcMemeberFormServlet.class

  • ํšŒ์› ๋“ฑ๋ก ํผ ํด๋ž˜์Šค
  • ์ปจํŠธ๋กค๋Ÿฌ ์—ญํ• ์„ ๋‹ด๋‹นํ•œ๋‹ค.

 

RequestDispatcher

: ํด๋ผ์ด์–ธํŠธ๋กœ๋ถ€ํ„ฐ ์ตœ์ดˆ๋กœ ๋“ค์–ด์˜จ ์š”์ฒญ์„ ์›ํ•˜๋Š” ์ž์›์œผ๋กœ ์š”์ฒญ์„ ๋„˜๊ธฐ๋Š” ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•˜๊ฑฐ๋‚˜, ํŠน์ • ์ž์›์— ์ฒ˜๋ฆฌ๋ฅผ ์š”์ฒญํ•˜๊ณ  ์ฒ˜๋ฆฌ ๊ฒฐ๊ณผ๋ฅผ ์–ป์–ด์˜ค๋Š” ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ํด๋ž˜์Šค๋‹ค.

 

getRequestDispatcher

๊ฒฝ๋กœ๋ฅผ ์ ๋Š” ๋ฉ”์„œ๋“œ๋กœ servletRequest ๊ฐ์ฒด์—์„œ ํ˜ธ์ถœํ• ๋•Œ๋Š” ์ ˆ๋Œ€๊ฒฝ๋กœ, ์ƒ๋Œ€๊ฒฝ๋กœ ๋ชจ๋‘ ๊ฐ€๋Šฅํ•˜์ง€๋งŒ ServletContext์˜ ๊ฒฝ์šฐ ์ ˆ๋Œ€ ๊ฒฝ๋กœ๋งŒ ๊ฐ€๋Šฅํ•˜๋‹ค.

 

forward

: ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์œผ๋กœ ์ƒ์„ฑ๋˜๋Š” request, response ๊ฐ์ฒด๋ฅผ ๋‹ค๋ฅธ ์ž์›์— ์ „๋‹ฌํ•˜๊ณ , ์ˆ˜ํ–‰ ์ œ์–ด๋ฅผ ์™„์ „ํžˆ ๋„˜๊ฒจ์„œ ๋‹ค๋ฅธ ์ž์›์˜ ์ˆ˜ํ–‰๊ฒฐ๊ณผ๋ฅผ ํด๋ผ์ด์–ธํŠธ๋กœ ์‘๋‹ตํ•œ๋‹ค.

@WebServlet(name = "mvcMemberFormServlet", urlPatterns = "/servlet-mvc/members/new-form")
public class MvcMemberFormServlet extends HttpServlet {

    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String viewPath = "/WEB-INF/views/new-form.jsp";
        RequestDispatcher dispatcher = request.getRequestDispatcher(viewPath);
        dispatcher.forward(request, response);
    }
}
viewPath์— ๊ฒฝ๋กœ๋ฅผ ์ ์—ˆ๋‹ค. ์—ฌ๊ธฐ์„œ /WEB-INF๋Š” ์™ธ๋ถ€์—์„œ ์ง์ ‘ JSP๋ฅผ ํ˜ธ์ถœํ•  ์ˆ˜ ์—†๋„๋ก ์„ค์ •ํ•˜๋Š” ๊ฒƒ์ด๋‹ค. /views/new-form.jsp๋ฅผ URL์— ์ ์–ด๋„ ๋ธŒ๋ผ์šฐ์ €์— ๋ฐ˜์‘ํ•˜์ง€ ์•Š๊ณ , ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ํ†ตํ•ด์„œ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๊ฒŒ ์„ค์ •ํ–ˆ๋‹ค.

๊ฒฝ๋กœ๋ฅผ getRequestDispatcher์— ๋„ฃ์œผ๋ฉด ํ•ด๋‹น ๊ฒฝ๋กœ๋กœ ์ด๋™ํ•˜๋ผ๋Š” ๋ง์ด๋‹ค. ๊ทธ๋Ÿผ ๊ฒฝ๋กœ๋กœ ์ด๋™ํ•  ๋•Œ request์™€ response๋ฅผ ๋“ค๊ณ ๊ฐ€๊ณ  ์ˆ˜ํ–‰ ๊ฒฐ๊ณผ๋ฅผ ์‘๋‹ตํ•œ๋‹ค. ์‘๋‹ต์„ ๋ธŒ๋ผ์šฐ์ €์— ๋ฐ˜์˜ํ•  ๋•Œ forward ๋ฉ”์„œ๋“œ๋Š” url์— /views/new-form.jsp๋กœ ๊ฒฝ๋กœ๋ฅผ ๋ณด์—ฌ์ฃผ์ง€ ์•Š๋Š”๋‹ค. ๋ธŒ๋ผ์šฐ์ € ์ฃผ์†Œ๋Š” ๊ทธ๋Œ€๋กœ /servlet-mvc/members/new-form์ด๋‹ค.

 

 

 

โ–บ  new-form.jsp

  • ํšŒ์› ๋“ฑ๋ก ํผ jsp
  • ๋ทฐ ์—ญํ• ์„ ๋‹ด๋‹นํ•œ๋‹ค.
 <form action="save" method="post">
    username: <input type="text" name="username" />
    age: <input type="text" name="age" />
    <button type="submit">์ „์†ก</button>
 </form>
action์— / ์—†์ด ๊ฒฝ๋กœ๋ฅผ ์ ์–ด ์ƒ๋Œ€๊ฒฝ๋กœ๋กœ ๋งŒ๋“ ๋‹ค. ์ด๋ ‡๊ฒŒ ์ ์œผ๋ฉด ํผ ์ „์†ก์‹œ ํ˜„์žฌ URL์ด ์†ํ•œ ๊ณ„์ธต ๊ฒฝ๋กœ์— save๊ฐ€ ์ถ”๊ฐ€๋˜์–ด /servlet-mvc/members/save๊ฐ€ ๋œ๋‹ค.

 

 

 

โ–บ  MvcMemberSaveServlet.class

  • ํšŒ์› ์ €์žฅ ํด๋ž˜์Šค
  • ์ปจํŠธ๋กค๋Ÿฌ ์—ญํ• ์„ ๋‹ด๋‹นํ•œ๋‹ค.

 

setAttribute

: request ๊ฐ์ฒด์— ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๊ด€ํ•ด์„œ ๋ทฐ์— ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ๋‹ค.

request.setAttribute("member", member);
member์— ํšŒ์›์˜ username๊ณผ age๋ฅผ ๋‹ด์•„ memberRepository์˜ save ๋ฉ”์„œ๋“œ๋กœ ๋ณด๋‚ธ๋‹ค. save ๋ฉ”์„œ๋“œ๋Š” store์— ์ €์žฅํ•˜๊ณ  id๋ฅผ ๋ถ€์—ฌํ•˜์—ฌ ๋ฐ˜ํ™˜ํ•œ๋‹ค. id๊นŒ์ง€ ๋ฐ˜ํ™˜๋œ member๋Š” ์š”์ฒญ ๊ฐ์ฒด์— ์ •๋ณด๋ฅผ ๋‹ด์•„ save-result.jsp๋กœ ๋ณด๋‚ธ๋‹ค.

 

 

 

 

โ–บ  save-result.jsp

  • ํšŒ์› ์ €์žฅ jsp
  • ๋ทฐ ์—ญํ• ์„ ๋‹ด๋‹นํ•œ๋‹ค.

 

<li>id=${member.id}</li>
<li>username=${member.username}</li>
<li>age=${member.age}</li>
jsp์—์„œ ${ } ํ‘œํ˜„์‹์„ ํ†ตํ•ด  request๋กœ ์ „๋‹ฌ๋ฐ›์€ ๋ฐ์ดํ„ฐ๋ฅผ ํŽธ๋ฆฌํ•˜๊ฒŒ ์กฐํšŒํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

username์— spring์„ ์ ๊ณ  age์— 20์„ ์ ์—ˆ๋‹ค

 

url์„ ๋ณด๋ฉด save๋งŒ ์ถ”๊ฐ€๋œ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค

 

 

 

 


 

 

 

 

โœ”๏ธ  MVC ํŒจํ„ด - ํšŒ์›์ •๋ณด๋ชฉ๋ก ์ €์žฅ๊ณผ ์ถœ๋ ฅ

 

โ–บ  MvcMemeberListServlet.class

  • ํšŒ์› ๋ชฉ๋ก ์กฐํšŒ ํด๋ž˜์Šค
  • ์ปจํŠธ๋กค๋Ÿฌ ์—ญํ• ์„ ๋‹ด๋‹นํ•œ๋‹ค.

 

List<Member> members = memberRepository.findAll();

request.setAttribute("members", members);

String viewPath = "/WEB-INF/views/members.jsp";
RequestDispatcher dispatcher = request.getRequestDispatcher(viewPath);
dispatcher.forward(request,response);
memberRepository์— ์žˆ๋Š” findAll ๋ฉ”์„œ๋“œ๋Š” store์— ์ €์žฅ๋œ values๋ฅผ ๋ฆฌ์ŠคํŠธ ํƒ€์ž…์œผ๋กœ ๋ฐ˜ํ™˜ํ•œ๋‹ค. ๊ฐ€์ ธ์˜จ ๋ชจ๋“  ๋ฆฌ์ŠคํŠธ๋ฅผ request ๊ฐ์ฒด๋ฅผ ํ†ตํ•ด jsp์— ๋ณด๋‚ด ์ถœ๋ ฅ๋˜๋„๋ก ํ•œ๋‹ค. 

 

 

 

โ–บ  members.jsp

  • ํšŒ์› ๋ชฉ๋ก ์กฐํšŒ ํด๋ž˜์Šค
  • ์ปจํŠธ๋กค๋Ÿฌ ์—ญํ• ์„ ๋‹ด๋‹นํ•œ๋‹ค.

 

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
     <c:forEach var="item" items="${members}">
         <tr>
             <td>${item.id}</td>
             <td>${item.username}</td>
             <td>${item.age}</td>
         </tr>
     </c:forEach>
${members}๋กœ members์— ๋‹ด๊ธด ๋ฆฌ์ŠคํŠธ ๋ชฉ๋ก์„ foreach ๊ตฌ๋ฌธ์œผ๋กœ ํ•˜๋‚˜ํ•˜๋‚˜ ๋ฐ›์•„ id์™€ username, age๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค. foreach๊ตฌ๋ฌธ์€ jsp์—์„œ ์ œ๊ณตํ•˜๋Š” ํƒœ๊ทธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ(taglib)๋‹ค.

 

ํšŒ์› ๋ชฉ๋ก์„ ์ถœ๋ ฅํ–ˆ๋‹ค

 

 

 

 


 

 

 

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

 

๐Ÿชฝ

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

 

 


- setAttribute( )

 

[Java]setAttribute()์™€ getAttribute()

jsp์™€ suvlet์œผ๋กœ emaillist ์™€ guestbook์„ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. ์ฒ˜์Œ์—” model 1 ๋ฐฉ์‹์œผ๋กœ ๋งŒ๋“ค์—ˆ๊ณ  ๋“œ๋””์–ด model 2๋ฅผ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ฒ˜์Œ์œผ๋กœ controller๋ฅผ ๋งŒ๋‚ฌ๋Š”๋ฐ ์•„์ง์€ ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ ์—†๋Š” 1 ๋ฐฉ์‹์— ์ต์ˆ™ํ•ด์„œ ์ ์‘

dynamoj.tistory.com

 

 

 

- RequestDispatcher

 

[Servlet, JSP] RequestDispatcher์™€ ์š”์ฒญ ์žฌ์ง€์ •

RequestDispatcher " data-ke-type="html"> HTML ์‚ฝ์ž… ๋ฏธ๋ฆฌ๋ณด๊ธฐํ•  ์ˆ˜ ์—†๋Š” ์†Œ์Šค RequestDispatcher ๊ฐ์ฒด์—์„œ ์ œ๊ณตํ•˜๋Š” ๋ฉ”์†Œ๋“œ๋ฅผ ์ด์šฉํ•˜์—ฌ ์š”์ฒญ ์žฌ์ง€์ •์„ ํ• ๋•Œ๋Š” ์žฌ์ง€์ •ํ•˜๋Š” ์ž์›์ด ๋ฐ˜๋“œ์‹œ ํ˜„์žฌ ์ž์›๊ณผ ๋™์ผํ•œ ์›น

blogshine.tistory.com

 

 

 

- jsp ํƒœ๊ทธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ

 

[JSP] JSTL ์‚ฌ์šฉ ๋ฐฉ๋ฒ• - ์ฃผ์š” ํƒœ๊ทธ ๋ฌธ๋ฒ• ์ •๋ฆฌ

JSTL์„ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ํ•„์š”ํ•˜๋‹ค. ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋‹ค์šด๋กœ๋“œ ๋ฐ ํ”„๋กœ์ ํŠธ ์„ธํŒ…์€ ์ด ํฌ์ŠคํŠธ๋ฅผ ์ฐธ๊ณ ํ•œ๋‹ค. ํƒœ๊ทธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์„ ์–ธ ์ž๋ฐ”์—์„œ import๋ฌธ์„ ์„ ์–ธํ•˜๋“ฏ JSP์—์„œ๋„ JSTL ํ™•์žฅ ํƒœ๊ทธ๋ฅผ ์‚ฌ์šฉ

atoz-develop.tistory.com

 

 

 

์•ž์—์„œ ํŒŒ์ด์ฌ์˜ ๋ฆฌ์ŠคํŠธ์— ๊ด€ํ•ด ๋ฐฐ์› ๋Š”๋ฐ,
2์ฐจ์› ๋ฆฌ์ŠคํŠธ๋Š” ์–ด๋–ป๊ฒŒ ๋งŒ๋“ค๊นŒ?

 

 

 

โ™ฃ 2์ฐจ์› ๋ฆฌ์ŠคํŠธ

 

  • ์ง์ ‘ ๊ฐ’ ๋„ฃ์–ด 2์ฐจ์› ๋ฆฌ์ŠคํŠธ ๋งŒ๋“ค๊ธฐ
age = [[10, 11, 12], [13, 14, 15], [16, 17, 18]]
<๊ฒฐ๊ณผ>
[[1, 2, 3], [4, 5, 6], [7, 8, 9]]

 

 

  • ํฌ๊ธฐ๋งŒ ์ •ํ•˜๊ณ  ์›ํ•˜๋Š” ๊ฐ’์œผ๋กœ ์ดˆ๊ธฐํ™”ํ•˜์—ฌ 2์ฐจ์› ๋ฆฌ์ŠคํŠธ ๋งŒ๋“ค๊ธฐ
# ํ–‰ ๊ฐœ์ˆ˜
n = 3

# ์—ด ๊ฐœ์ˆ˜
m = 4

# 0์œผ๋กœ ์ดˆ๊ธฐํ™”๋œ 2์ฐจ์› ๋ฆฌ์ŠคํŠธ
age = [[0]*m for _ in range(n)]
<๊ฒฐ๊ณผ>
[[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]

 

 

  • ์›์†Œ ๊ฐ’์„ ์ง์ ‘ ์ž…๋ ฅ ๋ฐ›์•„ 2์ฐจ์› ๋ฆฌ์ŠคํŠธ ๋งŒ๋“ค๊ธฐ
# ํ–‰๊ณผ ์—ด์„ ์ž…๋ ฅํ•œ๋‹ค.
n = int(input())

age = []

# ์ž…๋ ฅํ•œ ํ–‰์˜ ์ˆ˜ ๋งŒํผ ๋ฐ˜๋ณตํ•œ๋‹ค.
for _ in range(n):
    # ์—ด์— ๋“ค์–ด๊ฐˆ ์›์†Œ๋ฅผ ๊ณต๋ฐฑ์œผ๋กœ ๊ตฌ๋ถ„ํ•˜์—ฌ ๋ฐ›๋Š”๋‹ค.
    row = list(map(int, input().split()))
    # row์˜ ๊ฐ’๋“ค์„ age ๋ฆฌ์ŠคํŠธ์— ์ถ”๊ฐ€ํ•œ๋‹ค.
    age.append(row)
<์ž…๋ ฅ>
3
1 2 3
4 5 6
7 8 9

<๊ฒฐ๊ณผ>
[[1, 2, 3], [4, 5, 6], [7, 8, 9]]

 

 

  • ์ปดํ”„๋ฆฌํ—จ์…˜์„ ์‚ฌ์šฉํ•˜์—ฌ ๋” ๊ฐ„๋‹จํ•˜๊ฒŒ 2์ฐจ์› ๋ฆฌ์ŠคํŠธ ๋งŒ๋“ค๊ธฐ
# ํ–‰์„ ์ž…๋ ฅ๋ฐ›๋Š”๋‹ค.
n = int(input())

# n๋งŒํผ ๋ฐ˜๋ณตํ•˜๊ณ , ์ˆซ์ž๋ฅผ ์ž…๋ ฅํ•˜์—ฌ, ์—ด์„ ์ฑ„์šด๋‹ค.
age = [list(map(int, input().split())) for _ in range(n)]
<์ž…๋ ฅ>
3
1 2 3
4 5 6
7 8 9

<๊ฒฐ๊ณผ>
[[1, 2, 3], [4, 5, 6], [7, 8, 9]]

 

 

 

 

โ™ฃ ์ฃผ์˜

age = [[0]*4]*3
<๊ฒฐ๊ณผ>
[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]
๊ฒ‰์œผ๋กœ ๋ณด๊ธฐ์—” ์ž˜ ๋งŒ๋“ค์–ด์ง„ ๋ฆฌ์ŠคํŠธ๋กœ ๋ณด์ธ๋‹ค. ์—ฌ๊ธฐ์— age[0][0] = 99๋ฅผ ํ•ด๋ณด๊ฒ ๋‹ค.

 

age = [[0]*4]*3
age[0][0] = 99
<๊ฒฐ๊ณผ>
[[99, 0, 0, 0], [99, 0, 0, 0], [99, 0, 0, 0]]
age[0][0]๋งŒ ๋ฐ”๊ฟจ๋Š”๋ฐ age[1][0]๊ณผ age[2][0]๋„ ๊ฐ’์ด ๋ฐ”๋€Œ์—ˆ๋‹ค. 0๋ฒˆ์งธ ํ–‰๊ณผ 1๋ฒˆ์งธ ํ–‰, 2๋ฒˆ์งธ ํ–‰์˜ ์ฃผ์†Œ๊ฐ’์„ ํ™•์ธํ•ด๋ณด์ž.

 

print(age[0]is age[1])
print(age[1]is age[2])
<๊ฒฐ๊ณผ>
True
True
ํ™•์ธ ๊ฒฐ๊ณผ ์ฃผ์†Œ๊ฐ’์ด ๊ฐ™์€ ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค. ์–ด๋–ป๊ฒŒ ๋œ๊ฑธ๊นŒ? 

 

age = [[0]*4]*3
์ด ์ฝ”๋“œ๋ฅผ ๋ถ„์„ํ•ด๋ณด์ž. [0]*4๋Š” 0์„ 4๋ฒˆ ๋„ฃ์–ด์„œ ํ•˜๋‚˜์˜ ๋ฆฌ์ŠคํŠธ๋กœ ๋งŒ๋“ ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ทธ ๋งŒ๋“  ๋ฆฌ์ŠคํŠธ๋ฅผ 3๋ฒˆ ๊ณฑํ•˜์—ฌ ์ด์ค‘ ๋ฆฌ์ŠคํŠธ๋ฅผ ๋งŒ๋“ ๋‹ค. ์ฆ‰, [0, 0, 0, 0] ๋ฆฌ์ŠคํŠธ๋ฅผ ๋ณต์‚ฌํ•˜์—ฌ [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]] ๋งŒ๋“ ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ์—ฌ๊ธฐ์„œ ์ค‘์š”ํ•œ ์ ์€ ๋ณต์‚ฌํ–ˆ๋‹ค๋Š” ์ ์ด๋‹ค. ์ฃผ์†Œ๋ฅผ ๋ณต์‚ฌํ•˜์—ฌ ๋˜‘๊ฐ™์€ ๋ฆฌ์ŠคํŠธ๊ฐ€ ๋œ ๊ฒƒ์ด๋‹ค. ๊ทธ๋ž˜์„œ age[0][0]์˜ ๊ฐ’์„ ๋ฐ”๊พธ๋ฉด ๊ฒฐ๊ตญ age[1][0]๋„ ๊ฐ™์€ ์ฃผ์†Œ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์–ด์„œ ํ•จ๊ป˜ ๋ฐ”๋€Œ๊ฒŒ ๋œ๋‹ค.

 

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

 

 

 

์„น์…˜ 4๋Š” ์•„์ฃผ ๊ฐ„๋‹จํ•œ ํšŒ์›๊ด€๋ฆฌ ์›น์„ ๋งŒ๋“ค์—ˆ๋‹ค. ์ฒ˜์Œ์—๋Š” ์„œ๋ธ”๋ฆฟ์œผ๋กœ ํ•ด๋ณด๊ณ  JSP, SpringMVC๋ฅผ ์ฐจ๋ก€๋กœ ์‚ดํŽด๋ดค๋‹ค. ์„œ๋ธ”๋ฆฟ๊ณผ JSP๋กœ ๋งŒ๋“  ์ฝ”๋“œ์—๋Š” ์–ด๋–ค ๋ถˆํŽธํ•œ ์ ์ด ์žˆ๋Š”์ง€, SpringMVC๋Š” ์–ด๋–ป๊ฒŒ ๋™์ž‘ํ•˜๋Š”์ง€ ์‚ดํŽด๋ณด๋ฉฐ ์„œ๋ธ”๋ฆฟ๊ณผ JSP์˜ ๋ฌธ์ œ์ ์„ ์–ด๋–ป๊ฒŒ ๋ณด์™„ํ–ˆ๋Š”์ง€ ์‚ดํŽด๋ดค๋‹ค.

 

 

โ˜˜๏ธ 

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


 

โœ”๏ธ  ํšŒ์› ๊ด€๋ฆฌ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์š”๊ตฌ์‚ฌํ•ญ

  • ํšŒ์› ๊ด€๋ฆฌ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด์„œ username๊ณผ age๋ฅผ ์ •๋ณด๋กœ ๊ฐ€์ง„๋‹ค.
  • ํšŒ์› ์ €์žฅ๊ณผ ํšŒ์› ๋ชฉ๋ก์„ ์กฐํšŒํ•  ์ˆ˜ ์žˆ๋Š” ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ ๋‹ค.

 

โ–บ  Memeber.class

@Getter @Setter
public class Member {

    private Long id;
    private String username;
    private int age;
    
    public Member() {
    }
    
    public Member(String username, int age) {
        this.username = username;
        this.age = age;
    }
}
Member ํด๋ž˜์Šค์—์„œ getter, setter๋ฅผ ํ†ตํ•ด ๋“ค์–ด์˜จ ๋ฐ์ดํ„ฐ๋ฅผ ๋„ฃ๊ณ  ๋บ„ ์ˆ˜ ์žˆ๋‹ค. ์ƒ์„ฑ์ž Member์—๋Š” username๊ณผ age๋ฅผ ๋‹ด๋Š”๋‹ค. id๋Š” ์‹๋ณ„์ž๋กœ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์— ์ €์žฅํ•  ๋•Œ ๋ฐœ๊ธ‰๋œ๋‹ค. 

 

 

Q. ๊ธฐ๋ณธ ์ƒ์„ฑ์ž๋ฅผ ๋งŒ๋“  ์ด์œ ๊ฐ€ ๋ฌด์—‡์ผ๊นŒ?

A. ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ๊ฐ–๋Š” ์ƒ์„ฑ์ž ์™ธ์— ๊ธฐ๋ณธ ์ƒ์„ฑ์ž๋ฅผ ๋งŒ๋“  ์ด์œ ๋Š” JSON ๋ณ€ํ™˜์ด๋‚˜ ์Šคํ”„๋ง์—์„œ ๊ฐ์ฒด๋ฅผ ์ž๋™ ์ƒ์„ฑํ•  ๋•Œ ๊ผญ ํ•„์š”ํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ์ž๋ฐ”๋Š” ์ƒ์„ฑ์ž๋ฅผ ํ•˜๋‚˜๋„ ์•ˆ๋งŒ๋“ค๋ฉด ์•Œ์•„์„œ ๊ธฐ๋ณธ ์ƒ์„ฑ์ž๋ฅผ ๋งŒ๋“ค์–ด์ค€๋‹ค. ๊ทผ๋ฐ ์œ„์˜ ์ฝ”๋“œ์ฒ˜๋Ÿผ ์ƒ์„ฑ์ž๊ฐ€ ๋งŒ๋“ค์–ด์ง„ ๊ฒฝ์šฐ ์ž๋ฐ”๋Š” ๊ธฐ๋ณธ ์ƒ์„ฑ์ž๋ฅผ ๋งŒ๋“ค์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์—, ๋‚ด๋ถ€์—์„œ ๊ธฐ๋ณธ ์ƒ์„ฑ์ž๊ฐ€ ํ•„์š”ํ•œ ๊ฒฝ์šฐ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋Ÿฌ๋‹ˆ ํŒŒ๋ผ๋ฏธํ„ฐ๊ฐ€ ์žˆ๋Š” ์ƒ์„ฑ์ž๋ฅผ ๋งŒ๋“ค๋•Œ ํ•ญ์ƒ ๊ธฐ๋ณธ ์ƒ์„ฑ์ž๋„ ๊ฐ™์ด ๋งŒ๋“œ๋Š” ์Šต๊ด€์„ ๋‘๋ฉด ์ข‹์„ ๋“ฏ ํ•˜๋‹ค.

 

 

 

โ–บ  MemeberRepository.class

private static Map<Long, Member> store = new HashMap<>();
id๊ฐ€ ํ‚ค๊ฐ€ ๋˜๊ณ  Member(๋ฐ์ดํ„ฐ, ๊ฐ์ฒด)๊ฐ€ ๊ฐ’์ด ๋œ๋‹ค. ๋“ค์–ด์˜จ ์—ฌ๋Ÿฌ ๊ฐ์ฒด๋ฅผ ๋น ๋ฅด๊ฒŒ ์ €์žฅํ•˜๊ณ  ๊ตฌ๋ถ„ํ•˜์—ฌ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด HashMap์„ ์‚ฌ์šฉํ•œ๋‹ค. HashMap์ด ํ‚ค-๊ฐ’์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ์ž๋ฃŒ๊ตฌ์กฐ์ด๋‹ค. 
private static long sequence = 0L;

public Member save(Member member) {
        member.setId(++sequence);
        store.put(member.getId(), member);
        return member;
    }
Member ํด๋ž˜์Šค์—์„œ ์ƒ์„ฑ์ž Member๋Š” username๊ณผ age๋ฅผ ๊ฐ€์ง€๋„๋ก ์ •์˜ํ–ˆ๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ uesername๊ณผ age๋ฅผ ์ž…๋ ฅํ•˜๋ฉด ๊ทธ ์ •๋ณด๊ฐ€ Member ํƒ€์ž…์œผ๋กœ ํฌ์žฅ๋œ๋‹ค. Member ํƒ€์ž…์œผ๋กœ ํฌ์žฅ๋œ ๊ฑธ save์—์„œ ์ €์žฅํ•œ๋‹ค. save๊ฐ€ ์ž‘๋™ํ•˜๋ฉด member.setId(++sequence)์œผ๋กœ ์ธํ•ด 0L์ด ์ฆ๊ฐ€ํ•˜์—ฌ id์— ์ฆ๊ฐ€ํ•œ ๊ฐ’์ด ์ƒˆ๋กœ ์„ธํŒ…๋œ๋‹ค. ๊ทธ ํ›„ ์ €์žฅ์†Œ์ธ store์— ์ฆ๊ฐ€ํ•œ id ๊ฐ’์„ ๊บผ๋‚ด์„œ key ๊ฐ’์œผ๋กœ ์ฃผ๊ณ , member(์ด๋ฆ„๊ณผ ๋‚˜์ด ๋ฐ์ดํ„ฐ)๋ฅผ value๋กœ ๋„ฃ๋Š”๋‹ค.

 

 

- return ์ •๋ฆฌ

 

2. return

๐Ÿชฝ"ํ‹€๋ฆฐ ๋‚ด์šฉ์ด ์žˆ์„ ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๊น€์˜ํ•œ ์„ ์ƒ๋‹˜์˜ Spring MVC 1์„ ์œ„์ฃผ๋กœ ๊ณต๋ถ€ํ–ˆ์Šต๋‹ˆ๋‹ค." โ–ถ MemberRepositoyTest.class (๋ณ€๊ฒฝ๋œ ์ฝ”๋“œ)Member member1 = new Member("hello", 20);Member member2 = new Member("spring", 10);Member save

post-this.tistory.com

 

public Member findById(Long id) {
        return store.get(id);
    }

public List<Member> findAll() {
        return new ArrayList<>(store.values());
    }

public void clearStore() {
        store.clear();
    }
findById ๋ฉ”์„œ๋“œ๋Š” id๋ฅผ ์ฃผ๊ณ  id์— ๋งž๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค. findAll ๋ฉ”์„œ๋“œ๋Š” store์— ์žˆ๋Š” values์˜ ๊ฐ’์„ ArrayList ํ˜•ํƒœ๋กœ ๋ฐ˜ํ™˜ํ•œ๋‹ค. ๋ชฉ๋ก์˜ ํ˜•ํƒœ๋กœ ๋ณด์—ฌ์ฃผ๊ธฐ ์œ„ํ•ด ArrayList๋ฅผ ์‚ฌ์šฉํ–ˆ๋‹ค. clearStore ๋ฉ”์„œ๋“œ๋Š” store๋ฅผ ์ง€์›Œ์ฃผ๋Š” ๊ฒƒ์ด๋‹ค. ํ…Œ์ŠคํŠธ๋ฅผ ํ•˜๊ธฐ ์œ„ํ•ด ์ž„์‹œ๋กœ ์ €์žฅํ•œ ๋ฐ์ดํ„ฐ๋“ค์„ ํ…Œ์ŠคํŠธ๊ฐ€ ๋๋‚˜๋ฉด ๋ฐ์ดํ„ฐ๋ฅผ ์ง€์šฐ๋Š” ์šฉ๋„๋กœ ์‚ฌ์šฉํ•œ๋‹ค.

 

 

 

โ–บ  MemeberRepositoryTest.class

 

@afterEach

: ํ…Œ์ŠคํŠธ ์‹คํ–‰ ํ›„ ๋ฌด์กฐ๊ฑด ์‹คํ–‰๋œ๋‹ค.

@AfterEach
    void afterEach() {
        memberRepository.clearStore();
    }
ํ…Œ์ŠคํŠธ ์‹คํ–‰์ด ๋๋‚˜๋ฉด ์ €์žฅํ–ˆ๋˜ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ญ์ œํ•œ๋‹ค.

 

 

 

asserThat( ).contains( )

: ์ค‘๋ณต๊ณผ ์ˆœ์„œ์— ์ƒ๊ด€์—†์ด ๊ฐ’๋“ค์ด ์žˆ์œผ๋ฉด ๋œ๋‹ค.

assertThat(result).contains(member1, member2);
member1๊ณผ member2๊ฐ€ result์— ์žˆ์œผ๋ฉด ํ…Œ์ŠคํŠธ๊ฐ€ ์„ฑ๊ณตํ•œ๋‹ค.

 

 

 

 


 

 

 

 

โœ”๏ธ  ์„œ๋ธ”๋ฆฟ์œผ๋กœ ํšŒ์› ๊ด€๋ฆฌ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋งŒ๋“ค๊ธฐ

  • ์„œ๋ธ”๋ฆฟ์œผ๋กœ ํšŒ์› ๋“ฑ๋ก HTML ํผ์„ ๋งŒ๋“ค์ž.

 

โ–บ  MemeberSaveServlet.class

  • ํ•œ ๋ช…์˜ ํšŒ์›๋งŒ ๋ณด์ธ๋‹ค.
String username = request.getParameter("username");
int age = Integer.parseInt(request.getParameter("age"));

Member member = new Member(username, age);
System.out.println("member = " + member);
memberRepository.save(member);

request๋ฅผ ํ†ตํ•ด username๊ณผ age์˜ ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜จ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ getParameter๋Š” ๋ฌธ์ž์—ด๋กœ ๋ฐ›์•„์˜ค๊ธฐ ๋•Œ๋ฌธ์— ์ •์ˆ˜ํ˜•์ธ age๋Š” Integer.parseInt๋กœ ๋ฌธ์ž์—ด๋กœ ๋ฐ›์•„์˜จ ๊ฐ’์„ ์ •์ˆ˜ํ˜•์œผ๋กœ ๋ฐ”๊ฟ” age์— ๋„ฃ๋Š”๋‹ค. ๊ทธ๋ ‡๊ฒŒ ๋ฐ›์•„์˜จ ๋ฐ์ดํ„ฐ๋ฅผ member์— ๋„ฃ์€ ํ›„ save ๋ฉ”์„œ๋“œ๋กœ store์— ์ €์žฅํ•œ๋‹ค.

 

"<ul>\n" +
"    <li>id="+member.getId()+"</li>\n" +
"    <li>username="+member.getUsername()+"</li>\n" +
" <li>age="+member.getAge()+"</li>\n" +
"</ul>\n" +

์ฝ”๋“œ๋กœ ๋™์  ํ™”๋ฉด์„ ๊ฐ„๋‹จํ•˜๊ฒŒ ๋งŒ๋“ค์—ˆ๋‹ค. get์„ ํ†ตํ•ด ์ €์žฅ๋์„ ๋ฐ์ดํ„ฐ์˜ id, username, age๋ฅผ ํ™”๋ฉด์— ๋ณด์ด๋„๋ก ํ•œ๋‹ค.

 

 

 

โ–บ  MemeberListServlet.class

  • ๋ชจ๋“  ๋ฆฌ์ŠคํŠธ๋ฅผ ๊ฐ€์ ธ์˜จ๋‹ค.
List<Member> members = memberRepository.findAll();
findAll ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด ์ €์žฅ๋œ ๋ชจ๋“  ํšŒ์›์„ ๊บผ๋‚ผ ์ˆ˜ ์žˆ๋„๋ก ํ•œ๋‹ค. ๋ฐฐ์—ด ํ˜•ํƒœ๋กœ ๋ชจ๋“  ๋ชฉ๋ก์„ ๊บผ๋‚ด๋ฉฐ ํฌ๊ธฐ๋Š” ๋™์ ์œผ๋กœ ์กฐ์ ˆ๋˜๋„๋ก ํ•˜๊ธฐ์œ„ํ•ด List๋กœ ์„ค์ •ํ•œ๋‹ค.
for (Member member : members) {
            w.write("    <tr>");
            w.write("        <td>" + member.getId() + "</td>");
            w.write("        <td>" + member.getUsername() + "</td>");
            w.write("        <td>" + member.getAge() + "</td>");
            w.write("    </tr>");
        }

for๋ฌธ์„ ํ†ตํ•ด List๋กœ ๊ฐ€์ ธ์˜จ members๋ฅผ member์— ๋„ฃ์–ด ์ถœ๋ ฅ์‹œํ‚จ๋‹ค. ์ด๋ ‡๊ฒŒ ์„œ๋ธ”๋ฆฟ๊ณผ ์ž๋ฐ” ์ฝ”๋“œ๋งŒ์œผ๋กœ HTML์„ ๋งŒ๋“ค์—ˆ๋”๋‹ˆ ์ฝ”๋“œ๊ฐ€ ๋ณต์žกํ•˜๊ณ  ๋น„ํšจ์œจ์ ์ด๋‹ค. ํ…œํ”Œ๋ฆฟ ์—”์ง„์„ ์‚ฌ์šฉํ•˜์—ฌ HTML ๋ฌธ์„œ์—์„œ ํ•„์š”ํ•œ ๊ณณ๋งŒ ์ฝ”๋“œ๋ฅผ ์ ์šฉํ•˜์—ฌ ๋™์ ์œผ๋กœ ๋ณ€๊ฒฝํ•ด๋ณด์ž.

 

 

 

 


 

 

 

 

โœ”๏ธ  JSP๋กœ ํšŒ์› ๊ด€๋ฆฌ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋งŒ๋“ค๊ธฐ

  • JSP๋กœ ํšŒ์› ๋“ฑ๋ก HTML ํผ์„ ๋งŒ๋“ค์ž.

 

โ–บ  new-form.jsp

 <%@ page contentType="text/html;charset=UTF-8" language="java" %>
JSP ๋ฌธ์„œ๋ผ๋Š” ๋œป์„ ์ฒซ ์ค„์— ์ ์–ด์ค˜์•ผํ•œ๋‹ค.
<form action="/jsp/members/save.jsp" method="post">
    username: <input type="text" name="username" />
    age: <input type="text" name="age" />
<button type="submit">์ „์†ก</button>

 

ํƒ€์ž„๋ฆฌํ”„๋ฅผ ์‚ฌ์šฉํ•ด๋ณธ์  ์žˆ๋‹ค๋ฉด ๋งค์šฐ ์œ ์‚ฌํ•˜์—ฌ ์‰ฝ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋‹ค. action์— ๊ฒฝ๋กœ๋ฅผ ์ ์–ด์ฃผ๊ณ  method์— ๋ฐ์ดํ„ฐ ์ „์†ก ๋ฐฉ์‹์„ ์ ์–ด์ค€๋‹ค. ์•ž ์‹œ๊ฐ„์— ๋ฐฐ์› ๋“ฏ์ด GET ๋ฐฉ์‹๊ณผ POST ๋ฐฉ์‹, API JSON ๋ฐฉ์‹์ด ์žˆ๋Š”๋ฐ ์—ฌ๊ธฐ์„œ๋Š” body์— ๋ฐ์ดํ„ฐ๋ฅผ ์ ์–ด๋ณด๋‚ด๋Š” post ๋ฐฉ์‹์„ ์‚ฌ์šฉํ–ˆ๋‹ค. 

 

 

 

โ–บ  save.jsp

 <%
      MemberRepository memberRepository = MemberRepository.getInstance();

      System.out.println("MemberSaveServlet.service");
      String username = request.getParameter("username");
      int age = Integer.parseInt(request.getParameter("age"));

      Member member = new Member(username, age);
      System.out.println("member = " + member);
      memberRepository.save(member);
 %>
<% %> ๋Š” JSP ํƒœ๊ทธ๋กœ ์ด ์•ˆ์— ์ž๋ฐ” ์ฝ”๋“œ๋ฅผ ์ž…๋ ฅํ•  ์ˆ˜ ์žˆ๋‹ค. ํ˜„์žฌ ์ฝ”๋“œ์— request์™€ response๊ฐ€ ์—†๋Š”๋ฐ, service๋Š” jsp ๋‚ด์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜์—ฌ ์ฝ”๋“œ์— ๋ช…์‹œํ•˜์ง€ ์•Š์•„๋„ ์•Œ์•„์„œ service ๋กœ์ง์„ ํ˜ธ์ถœํ•˜์—ฌ ์„œ๋ธ”๋ฆฟ์œผ๋กœ ๋ณ€ํ™˜ํ•œ๋‹ค.
<li>id=<%=member.getId()%></li>
<li>username=<%=member.getUsername()%></li>
<li>age=<%=member.getAge()%></li>
<%=%>๋Š” ๊ฒฐ๊ณผ๊ฐ’์„ ํ˜ธ์ถœ(์ถœ๋ ฅ)ํ•˜๋Š” JSP ํƒœ๊ทธ์ด๋‹ค.  ์—ฌ์ „ํžˆ ์ž๋ฐ” ์ฝ”๋“œ์™€ ๋ถ„๋ฆฌ๋˜์ง€ ์•Š์•„ ์ž‘์—…์ด ๋ณต์žกํ•˜๊ฒŒ ๋ณด์ธ๋‹ค. ๋‹น์—ฐํ•˜๊ฒŒ ๋ณต์žกํ•œ ์ฝ”๋“œ๋Š” ์œ ์ง€๋ณด์ˆ˜๋„ ์–ด๋ ต๋‹ค. 

 

๐Ÿชฝ

"ํ‹€๋ฆฐ ๋‚ด์šฉ์ด ์žˆ์„ ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๊น€์˜ํ•œ ์„ ์ƒ๋‹˜์˜ Spring MVC 1์„ ์œ„์ฃผ๋กœ ๊ณต๋ถ€ํ–ˆ์Šต๋‹ˆ๋‹ค."

 

 

 

โ–ถ MemberRepositoyTest.class (๋ณ€๊ฒฝ๋œ ์ฝ”๋“œ)

Member member1 = new Member("hello", 20);
Member member2 = new Member("spring", 10);

Member savedMember1 = memberRepository.save(member1);
Member savedMember2 = memberRepository.save(member2);
member1์€ hello๋ผ๋Š” username๊ณผ 20์ด๋ผ๋Š” age๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. ์ด ๋ฐ์ดํ„ฐ๋ฅผ member1๋กœ ํฌ์žฅํ–ˆ๋Š”๋ฐ save๋กœ ๋„˜์–ด๊ฐ€๋ฉด member1์€ member๋ผ๋Š” ํฌ์žฅ์ง€๋กœ ๋ฐ”๋€๋‹ค. 

 

 

 

โ–ถ MemberRepositoy.class

public Member save(Member member) {
        member.setId(++sequence);
        store.put(member.getId(), member);
        return member;
    }
save(Member member) ์ฝ”๋“œ๊ฐ€ ์žˆ๋‹ค. ์ด ์ฝ”๋“œ๊ฐ€ member๋ผ๋Š” ์ด๋ฆ„์œผ๋กœ ์ธ์ž๋ฅผ ๋ฐ›๊ฒ ๋‹ค๋ผ๋Š” ๊ฒƒ์ด๋‹ค. member1์€ save์—์„œ ์ฒ˜๋ฆฌ๋˜๋Š” ๋™์•ˆ member๋ผ๋Š” ์ด๋ฆ„์„ ๊ฐ€์ง„๋‹ค. 

setId(++sequence)๋Š” sequence๊ฐ’์„ ํ•˜๋‚˜ ์ฆ๊ฐ€์‹œํ‚จ ํ›„ id์— ๊ฐ’์„ ๋„ฃ๋Š”๋‹ค. ์—ฌ๊ธฐ์„œ member.์ด ๋ถ™๋Š” ์ด์œ ๋Š” ์–ด๋А ๊ฐ์ฒด์˜ id์ธ์ง€๋ฅผ ์•Œ๋ ค์ฃผ๊ธฐ ์œ„ํ•จ์ด๋‹ค. 

 

 

Q. return member๊ฐ€ ๋ฌด์Šจ ๋ง์ผ๊นŒ?

A. ํ…Œ์ŠคํŠธ ํด๋ž˜์Šค์—์„œ member1์„ ์ €์žฅํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ–ˆ๋‹ค. ์ด๋•Œ member1์€ id ๊ฐ’์ด ์—†๋Š” ์ƒํƒœ์ด๋‹ค. ๋ฐ์ดํ„ฐ๋ฅผ ์ง€๋‹Œ member1์ด  save ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด id๊ฐ’์„ ๊ฐ€์ง€๊ฒŒ ๋œ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ๊ทธ id ๊ฐ’์„ ๋‹ค์‹œ ํ˜ธ์ถœ๋˜์—ˆ๋˜ ๊ณณ์— ๋Œ๋ ค์ฃผ๋Š” ๊ฒƒ์ด๋‹ค. 

 

 

 

Q. return member๋ฅผ ํ•˜๋Š” ์ด์œ ๊ฐ€ ๋ญ˜๊นŒ?

A. ์‹ค์ œ ์ €์žฅ๋œ id ๊ฐ’์„ ๋ฐ”๋กœ ํ™•์ธํ•˜๊ฑฐ๋‚˜, id ๊ฐ’์„ ๋ฐ›์€ ๊ฐ์ฒด๋ฅผ ๋‹ค๋ฅธ ๊ณณ์— ์ „๋‹ฌํ•˜๊ฑฐ๋‚˜, ํ™”๋ฉด์— ๋ณด์—ฌ์ฃผ๊ฑฐ๋‚˜, ์ถ”๊ฐ€ ์ž‘์—…์— ๋ฐ”๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ์ฆ‰, ํŽธ์˜์„ฑ์„ ์œ„ํ•ด ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋„๋ก ํ•œ๋‹ค

์˜ˆ๋กœ ์ƒํ’ˆ์„ ์ฃผ๋ฌธํ•˜๋ฉด ์ฃผ๋ฌธ ๋ฒˆํ˜ธ๊ฐ€ ๋ฐœ๊ธ‰๋˜๋Š”๋ฐ, ์ด ๋ฉ”์ปค๋‹ˆ์ฆ˜๊ณผ ๊ฐ™๋‹ค๊ณ  ๋ณผ ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™๋‹ค. ์ฃผ๋ฌธ์ด ๋“ค์–ด์˜ค๋ฉด ์ฒ˜๋ฆฌ ๊ณผ์ •์—์„œ ์ฃผ๋ฌธ์„ ์ €์žฅํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ฃผ๋ฌธ์— ๋Œ€ํ•œ ๊ณ ์œ  ๋ฒˆํ˜ธ๋ฅผ ๋ถ€์—ฌํ•œ ํ›„, ์‚ฌ์šฉ์ž ํ™”๋ฉด์— ์ฃผ๋ฌธ ๋ฒˆํ˜ธ๊ฐ€ ๋ณด์ด๋„๋ก ์ฒ˜๋ฆฌํ•œ๋‹ค. ์ด๋•Œ ์ฃผ๋ฌธ ๋ฒˆํ˜ธ๋ฅผ ๋ถ™์ธ ๊ฐ์ฒด๋ฅผ returnํ•˜๋ฉด ๋ณ„๋„์˜ ์ถ”๊ฐ€์ฝ”๋“œ ์—†์ด ํ•ด๋‹น ๊ฐ์ฒด์˜ ๋ฒˆํ˜ธ๋ฅผ ํ™”๋ฉด์— ๋ณด์ด๋„๋ก ํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋‹ค.

 

 

 

โ–ถ MemberRepositoyTest.class (๋ณ€๊ฒฝ๋œ ์ฝ”๋“œ)

Member findMember = memberRepository.findById(savedMember1.getId());
assertThat(findMember).isEqualTo(savedMember1);
return์œผ๋กœ id๊ฐ€ ๋ถ€์—ฌ๋œ ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ–ˆ๋‹ค. ๋ฐ˜ํ™˜๊ฐ’์ด savedMember1์— ์ €์žฅ์ด ๋˜๊ณ  id๋ฅผ ๋ถ€์—ฌ๋ฐ›์•˜์œผ๋‹ˆ getId( )๋กœ id๋ฅผ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด findById์— id๋ฅผ ๋“ค๊ณ ๊ฐ€์„œ ์ด id์— ํ•ด๋‹นํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ฌ๋ผ๊ณ  ํ•œ๋‹ค. ๊ทธ ๋‚˜์˜จ ๋ฐ์ดํ„ฐ๋ฅผ findMember์— ๋„ฃ์€ ํ›„ ๋‚ด๊ฐ€ ์ง€๊ธˆ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” savedMember1๊ณผ id๋ฅผ ๋“ค๊ณ ๊ฐ€์„œ ๋ฐ›์•„์˜จ findMember๊ฐ€ ๊ฐ™์€์ง€ ๋ฌป๋Š”๋‹ค.

๋งŒ์•ฝ retrun member๋ฅผ ์•ˆํ–ˆ๋‹ค๋ฉด, MemberRepository์— ์žˆ๋Š” Member savedMember1 = memberRepository.save(member1);์˜ savedMember1์€ ๋Œ๋ ค๋ฐ›์€ ๊ฐ’์ด ์—†์œผ๋‹ˆ ์ปดํŒŒ์ผ ์˜ค๋ฅ˜๊ฐ€ ์ƒ๊ธฐ๊ณ  ๋‹น์—ฐํžˆ ๊ฐ’์„ ๋น„๊ตํ•˜์ง€๋„ ๋ชปํ•œ๋‹ค.

 

'๐Ÿงธ ์™œ ๊ทธ๋Ÿฐ๊ฑธ๊นŒโ”' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

1. ์ธํ„ฐํŽ˜์ด์Šค์™€ ๊ตฌํ˜„์ฒด  (5) 2024.09.26

 

 

์ž๋ฐ”์—์„œ ๋ฐฐ์—ด์„ ๋จผ์ € ๋ฐฐ์› ๋‹ค๋ณด๋‹ˆ,
ํŒŒ์ด์ฌ์—์„œ ์ž๊พธ ๊ฐœ๋…์ด ํ˜ผ๋™๋œ๋‹ค.
์ž๋ฐ”์™€ ํŒŒ์ด์ฌ์˜ ๋ฐฐ์—ด์„ ๋น„๊ตํ•ด๋ณด์ž!



 

โ™ฃ ๋ฐฐ์—ด

  • ๋™์ผํ•œ ์„ฑ๊ฒฉ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๊ด€๋ฆฌํ•˜๊ธฐ ์‰ฝ๋„๋ก ํ•˜๋‚˜๋กœ ๋ฌถ๋Š” ์ผ.
  • ์ผ์ •ํ•œ ์ฐจ๋ก€๋‚˜ ๊ฐ„๊ฒฉ์— ๋”ฐ๋ผ ๋ฒŒ์—ฌ ๋†“์Œ.

 

 


 

 

 

โ™ฃ ์ž๋ฐ”์—์„œ์˜ ๋ฐฐ์—ด

  • ์ •์ˆ˜ํ˜• ๋ฐฐ์—ด
// ๋ฐฐ์—ด์˜ ๊ธธ์ด์™€ ๊ฐ’์„ ํ•œ ๋ฒˆ์— ์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•

int arr[] = {1, 2, 3, 4, 5};

for (int i=0; i<5; i++) {
    System.out.println(i + "๋ฒˆ์งธ ๋ฐฐ์—ด = " + arr[i]);
}

 

 

 

  • ๋ฌธ์ž์—ด ๋ฐฐ์—ด
// ๋ฐฐ์—ด์˜ ๊ธธ์ด๋ฅผ ๋จผ์ € ์ •ํ•˜๊ณ  ๊ฐ’์„ ์ถ”๊ฐ€ํ•˜๋Š” ๋ฐฉ๋ฒ•

String name[] = new String[5];

name[0] = "๊น€๊ฐ€๋‚˜";
name[1] = "๋ฐ•๋‹ค๋ผ";
name[2] = "์ •๋งˆ๋ฐ”";
name[3] = "์ด์‚ฌ์•„";
name[4] = "๋ฐฑ์ž์ฐจ";

for (int i=0; i<5; i++) {
    System.out.println(i + "๋ฒˆ์งธ ๋ฐฐ์—ด = " + name[i]);
}

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

 

 


 

 

 

โ™ฃ ํŒŒ์ด์ฌ์˜ ๋ฐฐ์—ด

  • ํŒŒ์ด์ฌ์—์„œ๋Š” ๋ฐฐ์—ด์˜ ๊ฐœ๋…์œผ๋กœ ๋ฆฌ์ŠคํŠธ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

 

โ™ฃ ๋ฆฌ์ŠคํŠธ

  • ๋ฆฌ์ŠคํŠธ๋Š” ํ•˜๋‚˜์˜ ์ž๋ฃŒํ˜•์ด ์•„๋‹Œ ์—ฌ๋Ÿฌ ์ž๋ฃŒํ˜•์ด ๋“ค์–ด๊ฐ€๋„ ๊ดœ์ฐฎ๋‹ค.
name = ["๊น€๊ฐ€๋‚˜", "๋ฐ•๋‹ค๋ผ", "์ •๋งˆ๋ฐ”", "์ด์‚ฌ์•„", "๋ฐฑ์ž์ฐจ"]
student = ["๊น€๊ฐ€๋‚˜", 1, "๋ฐ•๋‹ค๋ผ", 2,"์ •๋งˆ๋ฐ”", 3, "์ด์‚ฌ์•„", 4, "๋ฐฑ์ž์ฐจ", 5]

# end๋Š” ์ถœ๋ ฅ๋œ ๊ฒฐ๊ณผ ๋์„ ์ง€์ •ํ•˜๋ฉฐ
# \n์€ ๊ทธ ๋‹ค์Œ ์ค„๋กœ ์ปค์„œ๋ฅผ ๋„˜๊ธด๋‹ค.
print(name, end ="\n")
print(student)
number = []

for _ in range(5): 
    value = int(input("๊ฐ’์„ ์ž…๋ ฅํ•˜์„ธ์š”: "))
    number.append(value)

print("์ž…๋ ฅ๋œ ๊ฐ’:", number, end="\n")

 

 

 

โ™ฃ ๋ฆฌ์ŠคํŠธ์— ์›์†Œ ์ถ”๊ฐ€ํ•˜๊ธฐ

  • ์ž๋ฐ”์˜ ๋ฐฐ์—ด๊ณผ ๋‹ค๋ฅด๊ฒŒ ํŒŒ์ด์ฌ์˜ ๋ฆฌ์ŠคํŠธ๋Š” ๊ณต๊ฐ„์˜ ๊ธธ์ด ์ œ์•ฝ์ด ์—†๋‹ค.
  • append( ) ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ๊ฐ’์„ ์ถ”๊ฐ€ํ•˜์—ฌ ๊ธธ์ด๋ฅผ ๋Š˜๋ฆด ์ˆ˜ ์žˆ๋‹ค.
  • ์ƒˆ๋กœ์šด ๊ฐ’์€ ๋งจ ๋์— ์ถ”๊ฐ€๋œ๋‹ค.
score = [91, 23, 87, 48, 64, 78]

print("๊ฒฐ๊ณผ: ")
print(score, end="\n")

score.append(20)

print("์ถ”๊ฐ€ํ•œ ๊ฒฐ๊ณผ: ")
print(score, end="\n")

 

 

 

โ™ฃ ๋ฆฌ์ŠคํŠธ์˜ ์ธ๋ฑ์Šค๋ฅผ ํ†ตํ•ด ์›์†Œ ์ถ”๊ฐ€ํ•˜๊ธฐ

  • insert( ) ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•˜์—ฌ ์ถ”๊ฐ€ํ•˜๊ณ  ์‹ถ์€ ์œ„์น˜์— ๊ฐ’์„ ๋„ฃ์„ ์ˆ˜ ์žˆ๋‹ค.
score = [91, 23, 87, 48, 64, 78]

print("๊ฒฐ๊ณผ: ")
print(score, end="\n")

# ๋ฆฌ์ŠคํŠธ๋Š” 0๋ฒˆ์งธ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•œ๋‹ค.
# ์ฝ”๋“œ๋Š” 1๋ฒˆ์งธ์— 20์ด๋ž€ ๊ฐ’์„ ๋„ฃ๋„๋ก ์ง€์ •ํ–ˆ๋‹ค.
score.insert(1, 20)

print("์ถ”๊ฐ€ํ•œ ๊ฒฐ๊ณผ: ")
print(score, end="\n")

 

 

 

โ™ฃ ๋ฆฌ์ŠคํŠธ์˜ ์›์†Œ๊ฐ’์„ ๋„ฃ์–ด ์‚ญ์ œํ•˜๊ธฐ

  • remove( ) ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ์›์†Œ๊ฐ’์„ ์ง€์ •ํ•˜์—ฌ ์‚ญ์ œํ•  ์ˆ˜ ์žˆ๋‹ค.
score = [91, 23, 87, 48, 64, 78]

print("๊ฒฐ๊ณผ: ")
print(score, end="\n")

score.remove(91)

print("๋ฐ”๋€ ๊ฒฐ๊ณผ: ")
print(score, end="\n")

 

 

 

โ™ฃ ๋ฆฌ์ŠคํŠธ์˜ ์ธ๋ฑ์Šค ๊ฐ’์„ ์ง€์ •ํ•˜์—ฌ ์‚ญ์ œํ•˜๊ธฐ

  • del( ) ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ์ธ๋ฑ์Šค ๊ฐ’์„ ๋„ฃ์–ด ํ•ด๋‹น ์ธ๋ฑ์Šค๋ฅผ ์‚ญ์ œํ•  ์ˆ˜ ์žˆ๋‹ค.
score = [91, 23, 87, 48, 64, 78]

print("๊ฒฐ๊ณผ: ")
print(score, end="\n")

del score[0]

print("๋ฐ”๋€ ๊ฒฐ๊ณผ: ")
print(score, end="\n")

 

 

 

โ™ฃ ๋ฆฌ์ŠคํŠธ ์ „์ฒด ์‚ญ์ œํ•˜๊ธฐ

  • clear( ) ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฆฌ์ŠคํŠธ ์ „์ฒด๋ฅผ ์‚ญ์ œํ•  ์ˆ˜ ์žˆ๋‹ค.
score = [91, 23, 87, 48, 64, 78]

print("๊ฒฐ๊ณผ: ")
print(score, end="\n")

score.clear()

print("๋ฐ”๋€ ๊ฒฐ๊ณผ: ")
print(score, end="\n")

 

 

 

โ™ฃ ๋ฆฌ์ŠคํŠธ ์ •๋ ฌํ•˜๊ธฐ

  • sort( ) ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•˜์—ฌ ๋ฆฌ์ŠคํŠธ๋ฅผ ๋‚ด๋ฆผ์ฐจ์ˆœ, ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌ๊ฐ€๋Šฅํ•˜๋‹ค.
  • sort( ) ํ•จ์ˆ˜๋Š” ๋ฆฌ์ŠคํŠธ ์ž์ฒด๊ฐ€ ์ •๋ ฌ๋œ๋‹ค.
  • sorted( ) ํ•จ์ˆ˜๋Š” ๋ฆฌ์ŠคํŠธ๋Š” ๊ทธ๋Œ€๋กœ ์œ ์ง€๋œ๋‹ค.
  • sort( ) : ๋‚ด๋ฆผ์ฐจ์ˆœ
  • sort(reverse=True) : ์˜ค๋ฆ„์ฐจ์ˆœ
score = [91, 23, 87, 48, 64, 78]

print("๊ฒฐ๊ณผ: ")
print(score, end="\n")

score.sort()

print("๋ฐ”๋€ ๊ฒฐ๊ณผ: ")
print(score, end="\n")

 

  • sorted( )
score = [91, 23, 87, 48, 64, 78]

print("๊ฒฐ๊ณผ: ")
print(score, end="\n")

print("๋ฐ”๋€ ๊ฒฐ๊ณผ: ")
sorted(score)

 

 

 

โ™ฃ ๋ฆฌ์ŠคํŠธ ์Šฌ๋ผ์ด์‹ฑ

  • ์ธ๋ฑ์Šค ๋ฒˆํ˜ธ๋ฅผ ์ง€์ •ํ•˜์—ฌ ์›ํ•˜๋Š” ๊ณณ๋งŒ ์ถœ๋ ฅ๋˜๋„๋ก ํ•œ๋‹ค.
  • [์‹œ์ž‘ ๋ฒˆํ˜ธ : ๋ ๋ฒˆํ˜ธ]์˜ ํ˜•ํƒœ๋กœ ์ ๋Š”๋ฐ, ์ด๋•Œ ๋ ๋ฒˆํ˜ธ๋Š” ์ถ”๊ฐ€๋˜์ง€ ์•Š์œผ๋‹ˆ ์ฃผ์˜ํ•œ๋‹ค.
score = [91, 23, 87, 48, 64, 78]
print(score[0:3])

0๋ฒˆ์งธ๋Š” 91, 1๋ฒˆ์งธ๋Š” 23, 2๋ฒˆ์งธ๋Š” 87, 3๋ฒˆ์งธ๋Š” 48, 4๋ฒˆ์งธ๋Š” 64, 5๋ฒˆ์งธ๋Š” 7์ด๋‹ค. score[0:3]์€ 0๋ฒˆ์งธ์—์„œ 3๋ฒˆ์งธ ์•ž์ธ 2๋ฒˆ์งธ๊นŒ์ง€ ๋งํ•œ๋‹ค. ๊ทธ๋ž˜์„œ ์ถœ๋ ฅ๋œ ๊ฐ’์ด 91, 23, 87์ด ๋œ๋‹ค.

 

 

 

โ™ฃ ๋ฆฌ์ŠคํŠธ ๋’ค์ง‘๊ธฐ

  • reverse( ) ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๋ฆฌ์ŠคํŠธ๋ฅผ ๋’ค์ง‘์„ ์ˆ˜ ์žˆ๋‹ค.
  • reversed( ) ํ•จ์ˆ˜๋„ ๋ฆฌ์ŠคํŠธ๋ฅผ ๋’ค์ง‘๋Š” ๊ฒฐ๊ณผ๊ฐ€ reverse( )์™€ ๋™์ผํ•˜์ง€๋งŒ, revsered( )๋Š” ๋ฆฌ์ŠคํŠธ์˜ ๊ฐ’ ์ž์ฒด๋ฅผ ๋ณ€๋™์‹œํ‚ค์ง€ ์•Š๋Š”๋‹ค.
score = [91, 23, 87, 48, 64, 78]
print("์ฒซ๋ฒˆ์งธ ๊ฒฐ๊ณผ: ")
print(score, end="\n")

print("reverse ๊ฒฐ๊ณผ: ")
score.reverse()
print(score, end="\n")

print("reversed ๊ฒฐ๊ณผ: ")
list(reversed(score))

 

 

 

โ™ฃ ๋ฆฌ์ŠคํŠธ์˜ ์ธ๋ฑ์Šค ์œ„์น˜ ์ฐพ๊ธฐ

  • ์›์†Œ๊ฐ’์ด ์–ด๋А ์œ„์น˜์— ์žˆ๋Š”์ง€ ์•Œ๊ณ  ์‹ถ์„ ๋•Œ index( ) ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ฐพ๋Š”๋‹ค.
score = [91, 23, 87, 48, 64, 78]
print("์ฒซ๋ฒˆ์งธ ๊ฒฐ๊ณผ: ")
print(score, end="\n")

print("index ๊ฒฐ๊ณผ: ")
score.index(87)

 

 

 

โ™ฃ ๋ฆฌ์ŠคํŠธ ์›์†Œ๊ฐ’ ๊บผ๋‚ด๊ธฐ

  • ๋ฆฌ์ŠคํŠธ์˜ ์›์†Œ๊ฐ’์„ ๊บผ๋‚ด๊ธฐ ์œ„ํ•ด pop( ) ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.
  • pop( )์€ ๋งˆ์ง€๋ง‰ ์›์†Œ๋ถ€ํ„ฐ ๊บผ๋‚ธ๋‹ค.
score = [91, 23, 87, 48, 64, 78]
print("์ฒซ๋ฒˆ์งธ ๊ฒฐ๊ณผ: ")
print(score, end="\n")

print("pop ๊ฒฐ๊ณผ: ")
score.pop()
print(score)

 

 

 

โ™ฃ ๋ฆฌ์ŠคํŠธ์™€ ๋ฆฌ์ŠคํŠธ ํ•ฉ์น˜๊ธฐ

  • ํ•˜๋‚˜์˜ ๋ฆฌ์ŠคํŠธ์™€ ๋˜ ๋‹ค๋ฅธ ๋ฆฌ์ŠคํŠธ๋ฅผ ํ•ฉ์ณ ํ™•์žฅํ•˜๊ธฐ ์œ„ํ•ด extend( ) ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

 

score = [91, 23, 87, 48, 64, 78]
print("์ฒซ๋ฒˆ์งธ ๊ฒฐ๊ณผ: ")
print(score, end="\n")

name = ["๊น€", "์ด", "๋ฐ•", "์„œ", "์ •", "๋ฐฑ"]
score.extend(name)
print(score)

 

 

 

โ™ฃ ๋ฆฌ์ŠคํŠธ ๋ณต์‚ฌํ•˜๊ธฐ

  • ์–•์€ ๋ณต์‚ฌ
  • ์–•์€ ๋ณต์‚ฌ๋Š” ๋ณต์‚ฌํ•  ๋ฆฌ์ŠคํŠธ์˜ id๊นŒ์ง€ ๋ณต์‚ฌํ•œ๋‹ค.
  • import copy ํ›„ ์ƒˆ๋ฆฌ์ŠคํŠธ๋ช….copy.copy(๋ณต์‚ฌํ• ๋ฆฌ์ŠคํŠธ๋ช…)์œผ๋กœ ์จ๋„ ๋œ๋‹ค.
score = [91, 23, 87, 48, 64, 78]
print("score ๊ฒฐ๊ณผ: ")
print(score)

score_copy = score
print("copy ๊ฒฐ๊ณผ: ")
print(score_copy)

print(id(score))
print(id(score_copy))

print(score == score_copy)
print(score is score_copy)

 

 

  • ๊นŠ์€ ๋ณต์‚ฌ
  • ๊นŠ์€ ๋ณต์‚ฌ๋Š” ๋‹ค๋ฅธ ๋ณ€์ˆ˜์— ๊ฐ™์€ ๊ฐ’๋งŒ ๊ฐ€์ ธ์˜ฌ ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.
import copy

score = [91, 23, 87, 48, 64, 78]
print("score ๊ฒฐ๊ณผ: ")
print(score)

score_copy = copy.deepcopy(score)
print("copy ๊ฒฐ๊ณผ: ")
print(score_copy)

print(id(score))
print(id(score_copy))

print(score == score_copy)
print(score is score_copy)

 

 

 

โ™ฃ ๊ทธ ์™ธ ๋ฆฌ์ŠคํŠธ ํ•จ์ˆ˜

  • ๋ฆฌ์ŠคํŠธ์˜ ๊ธธ์ด๋ฅผ ๊ตฌํ•˜๋Š” len( ) ํ•จ์ˆ˜๊ฐ€ ์žˆ๋‹ค.
    ex) len(score)
  • ์ธ๋ฑ์Šค๋กœ ์ ‘๊ทผํ•˜์—ฌ ์›์†Œ๋ฅผ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.
    ex) score[0] = 23
  • ํŠน์ • ์›์†Œ๊ฐ€ ๋ฆฌ์ŠคํŠธ ๋‚ด์— ๋ช‡ ๊ฐœ ์žˆ๋Š”์ง€ ์„ธ๋Š” count( ) ํ•จ์ˆ˜๊ฐ€ ์žˆ๋‹ค.
    ex) score.count(23)

 

โ™ฃ ๋ฌธ์ œ

๋ถ€๋ชจ๋‹˜์„ ๊ธฐ๋‹ค๋ฆฌ๋˜ ์˜์ผ์ด๋Š” ๊ฒ€์ •/ํฐ ์ƒ‰ ๋ฐ”๋‘‘์•Œ์„ ๋ฐ”๋‘‘ํŒ์— ๊ฝ‰ ์ฑ„์›Œ ๊น”์•„ ๋†“๊ณ  ๋†€๋‹ค๊ฐ€...

"์‹ญ(+)์ž ๋’ค์ง‘๊ธฐ๋ฅผ ํ•ด๋ณผ๊นŒ?"ํ•˜๊ณ  ์ƒ๊ฐํ–ˆ๋‹ค.

์‹ญ์ž ๋’ค์ง‘๊ธฐ๋Š”
๊ทธ ์œ„์น˜์— ์žˆ๋Š” ๋ชจ๋“  ๊ฐ€๋กœ์ค„ ๋Œ์˜ ์ƒ‰์„ ๋ฐ˜๋Œ€(1->0, 0->1)๋กœ ๋ฐ”๊พผ ํ›„, 
๋‹ค์‹œ ๊ทธ ์œ„์น˜์— ์žˆ๋Š” ๋ชจ๋“  ์„ธ๋กœ์ค„ ๋Œ์˜ ์ƒ‰์„ ๋ฐ˜๋Œ€๋กœ ๋ฐ”๊พธ๋Š” ๊ฒƒ์ด๋‹ค.
์–ด๋–ค ์œ„์น˜๋ฅผ ๊ณจ๋ผ ์ง‘์ž ๋’ค์ง‘๊ธฐ๋ฅผ ํ•˜๋ฉด, ๊ทธ ์œ„์น˜๋ฅผ ์ œ์™ธํ•œ ๊ฐ€๋กœ์ค„๊ณผ ์„ธ๋กœ์ค„์˜ ์ƒ‰์ด ๋ชจ๋‘ ๋ฐ˜๋Œ€๋กœ ๋ฐ”๋€๋‹ค.

๋ฐ”๋‘‘ํŒ(19 * 19)์— ํฐ ๋Œ(1) ๋˜๋Š” ๊ฒ€์ • ๋Œ(0)์ด ๋ชจ๋‘ ๊ฝ‰ ์ฑ„์›Œ์ ธ ๋†“์—ฌ์žˆ์„ ๋•Œ,
n๊ฐœ์˜ ์ขŒํ‘œ๋ฅผ ์ž…๋ ฅ๋ฐ›์•„ ์‹ญ(+)์ž ๋’ค์ง‘๊ธฐํ•œ ๊ฒฐ๊ณผ๋ฅผ ์ถœ๋ ฅํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•ด๋ณด์ž.

 

 

โ™ฃ ์ž…๋ ฅ

๋ฐ”๋‘‘์•Œ์ด ๊น”๋ ค ์žˆ๋Š” ์ƒํ™ฉ์ด 19 * 19 ํฌ๊ธฐ์˜ ์ •์ˆ˜๊ฐ’์œผ๋กœ ์ž…๋ ฅ๋œ๋‹ค.
์‹ญ์ž ๋’ค์ง‘๊ธฐ ํšŸ์ˆ˜(n)๊ฐ€ ์ž…๋ ฅ๋œ๋‹ค.
์‹ญ์ž ๋’ค์ง‘๊ธฐ ์ขŒํ‘œ๊ฐ€ ํšŸ์ˆ˜(n) ๋งŒํผ ์ž…๋ ฅ๋œ๋‹ค. ๋‹จ, n์€ 10์ดํ•˜์˜ ์ž์—ฐ์ˆ˜์ด๋‹ค.

2

10 10
12 12

 

 

โ™ฃ ์ถœ๋ ฅ

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

 

 

โ™ฃ ๋‚ดํ’€์ด

cross = [list(map(int, input().split())) for _ in range(19)]
n = int(input())

for i in range(n):
    x, y = map(int, input().split())
    
    # ๋ฆฌ์ŠคํŠธ๋Š” 0๋ถ€ํ„ฐ ์‹œ์ž‘ํ•œ๋‹ค
    # ๊ทธ๋Ÿฐ๋ฐ ์ž…๋ ฅ์€ 1๋ถ€ํ„ฐ ์‹œ์ž‘ํ•œ๋‹ค.
    # ๋ฆฌ์ŠคํŠธ์˜ ์ธ๋ฑ์Šค ๊ฐ’์— ์ž…๋ ฅ๊ฐ’์„ ๋งž์ถ”๊ธฐ ์œ„ํ•ด ์ž…๋ ฅ๊ฐ’-1์„ ํ•ด์คฌ๋‹ค.
    x -= 1 
    y -= 1
    
    # 0์ธ ๊ฐ’์€ 1๋กœ ๋ณ€๊ฒฝ๋˜๋„๋ก ํ•˜๊ณ , 1์ธ ๊ฐ’์€ 0์œผ๋กœ ๋ณ€๊ฒฝ๋˜๋„๋ก ํ•œ๋‹ค.
    # ๊ตณ์ด if๋ฌธ์œผ๋กœ 0์ธ์ง€ 1์ธ์ง€ ํ™•์ธํ•˜์ง€ ์•Š๊ณ , ๊ฐ’์˜ 1์„ ๋นผ์„œ 0๊ณผ 1์„ ๋งŒ๋“ค์–ด์ค€๋‹ค.
    for j in range(19):
        cross[j][y] = 1 - cross[j][y]
        cross[x][j] = 1 - cross[x][j]

# ์–ธํŒจํ‚น ์—ฐ์‚ฐ์ž(*)๋Š” ๋ฆฌ์ŠคํŠธ์˜ ์š”์†Œ๋ฅผ 
# ๊ฐ๊ฐ ๋”ฐ๋กœ๋”ฐ๋กœ ๊ณต๋ฐฑ์œผ๋กœ ๊ตฌ๋ถ„ํ•ด์„œ ์ถœ๋ ฅํ•˜๋ผ๋Š” ์˜๋ฏธ์ด๋‹ค.
for i in range(19):
    print(*cross[i])

 

 

 

โ™ฃ ๋‹ต์•ˆ

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

for i in range(19) :
  a = input().split()
  for j in range(19) :
    d[i+1][j+1] = int(a[j])

n = int(input())
for i in range(n) :
  x,y=input().split()
  x=int(x)
  y=int(y)
  for j in range(1, 20) :
    if d[j][y]==0 :
      d[j][y]=1
    else :
      d[j][y]=0

    if d[x][j]==0 :
      d[x][j]=1
    else :
      d[x][j]=0

for i in range(1, 20) :
  for j in range(1, 20) :
    print(d[i][j], end=' ')
  print()

 

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



์„น์…˜ 2์—์„œ ์„œ๋ธ”๋ฆฟ์— ๊ด€ํ•œ ๊ฐœ๋…์„ ๋ฐฐ์› ๊ณ  ์„น์…˜ 3์—์„œ๋Š” ์‹ค์ œ๋กœ ์–ด๋–ป๊ฒŒ ๊ตฌํ˜„ํ•˜๋Š”์ง€๋ฅผ ์•Œ์•„๋ณด์•˜๋‹ค. ์„œ๋ธ”๋ฆฟ์— ๊ด€๋ จํ•œ ๊ฐ„๋‹จํ•œ ์˜ˆ์ œ๋ถ€ํ„ฐ ๊ณผ๊ฑฐ์— ๊ฐœ๋ฐœ์ž๋“ค์ด HTTP ์š”์ฒญ์„ ์–ด๋–ป๊ฒŒ ๋ฐ›์•„์„œ ์–ด๋–ป๊ฒŒ ์‘๋‹ต์„ ๋‚ด๋ ธ๋Š”์ง€์— ๋Œ€ํ•œ ๋‹ค์–‘ํ•œ ๋ฐฉ์‹์„ ๋ฐฐ์› ๋‹ค. ํ˜„์žฌ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ์‹์€ ์•„๋‹ˆ์ง€๋งŒ SpringMVC๋กœ ๋“ค์–ด๊ฐ€๊ธฐ์ „ ๊ณผ๊ฑฐ์— ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉํ–ˆ๋Š”์ง€๋ฅผ ๋ฐฐ์›€์œผ๋กœ์จ SpringMVC์— ๋Œ€ํ•œ ์ดํ•ด๋„๋ฅผ ๋†’์ด๋Š”๋ฐ ๋„์›€์ด ๋  ๊ฐ•์˜์˜€๋‹ค.

 

 

โ˜˜๏ธ 

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


 

โœ”๏ธ  ์„œ๋ธ”๋ฆฟ ๋“ฑ๋กํ•˜๊ธฐ

  • ์„œ๋ธ”๋ฆฟ์€ ํ†ฐ์บฃ ์„œ๋ฒ„๋ฅผ ๋‚ด์žฅํ•˜๊ณ  ์žˆ์–ด, ๋ณ„๋„์˜ ์„ค์น˜ ์—†์ด ์„œ๋ธ”๋ฆฟ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.

โ–บ  ServletApplication.class

@ServletComponentScan

: ์Šคํ”„๋ง ๋ถ€ํŠธ๋Š” ์„œ๋ธ”๋ฆฟ์„ ์ง์ ‘ ๋“ฑ๋กํ•ด์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ์ง€์›ํ•œ๋‹ค.

@ServletComponentScan
@SpringBootApplication
public class ServletApplication {
     public static void main(String[] args) {
         SpringApplication.run(ServletApplication.class, args);
     }
}



โ–บ  HelloServlet.class

@WebServlet

: ์„œ๋ธ”๋ฆฟ ํด๋ž˜์Šค๋ฅผ ์‹๋ณ„ํ•˜๊ณ , URL ๋งคํ•‘ ๋ฐ ๊ธฐํƒ€ ์„ค์ •์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

@WebServlet(name = "helloServlet", urlPatterns = "/hello")
public class HelloServlet extends HttpServlet {
name์— ์ด๋ฆ„์„ ์ง€์ •ํ•จ์œผ๋กœ์„œ, ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ(Tomcat)๊ฐ€ ์„œ๋ธ”๋ฆฟ์„ ์‹๋ณ„ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค€๋‹ค. ์ ์ง€ ์•Š์•„๋„ ์ž‘๋™ํ•˜๋Š”๋ฐ ๋ฌธ์ œ๋Š” ์—†๋‹ค. ๋‚ด๋ถ€์—์„œ ์ž๋™์œผ๋กœ ํด๋ž˜์Šค ์ด๋ฆ„์„ name์— ์ง€์ •ํ•œ๋‹ค. urlPatterns์€ ๋งคํ•‘ํ•  URL์„ ์ ๋Š”๋‹ค. ์ด ์ฝ”๋“œ์—๋Š” /hello๊ฐ€ ์ ํ˜€์ ธ์žˆ๋Š”๋ฐ, /hello ๊ฒฝ๋กœ๊ฐ€ ์˜ค๋ฉด ํ•ด๋‹น ํด๋ž˜์Šค๊ฐ€ ์‹คํ–‰ํ•˜๊ฒŒ ๋œ๋‹ค.

ํ˜„์žฌ๋Š” GernericServlet์˜ ์ž์‹ ํด๋ž˜์Šค์ธ HttpServlet์„ ์ƒ์†ํ•˜๋Š”๋ฐ, ์˜ˆ์ „์—๋Š” GernericServlet์„ ์ƒ์†ํ–ˆ๋‹ค. GernericServlet์€ service ๋ฉ”์„œ๋“œ๊ฐ€ ๋‹จ์ˆœํžˆ ์‹คํ–‰๋˜๊ธฐ์— HTTP ํ†ต์‹ ๊ณผ ๊ด€๋ จ๋œ ๋งŽ์€ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ธฐ ๋ณต์žกํ–ˆ๋‹ค HttpServlet์€ HTTP ์š”์ฒญ์— ๋”ฐ๋ผ service ๋ฉ”์†Œ๋“œ์˜ ์‹คํ–‰์ด 8๊ฐ€์ง€๋กœ ๋‚˜๋ˆ„๋ฉฐ ์ด ๊ฐ•์˜์—์„œ๋Š” GET, POST ๋ฐฉ์‹์„ ๋ฐฐ์šธ ๊ฒƒ์ด๋‹ค.

 

 

service( )

: ์‘๋‹ต์— ๋Œ€ํ•œ ๋‚ด์šฉ์„ ๊ตฌํ˜„ํ•˜๋ฉฐ, Servlet์ด ์ˆ˜์‹ ํ•œ ๋ชจ๋“  request์— ๋Œ€ํ•ด service ๋ฉ”์„œ๋“œ๊ฐ€ ํ˜ธ์ถœ๋œ๋‹ค. 

 

getParameter( )

: ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ „์†กํ•œ HTTP ์š”์ฒญ์˜ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ๊ฐ€์ ธ์˜ค๋Š”๋ฐ ์‚ฌ์šฉํ•œ๋‹ค.

 

setContentType( )

: ์„œ๋ธ”๋ฆฟ์—์„œ ์ง์ ‘ ๋ธŒ๋ผ์šฐ์ €๋กœ ์ถœ๋ ฅํ•˜๋Š” ๊ฒฝ์šฐ ์‚ฌ์šฉํ•œ๋‹ค.

 

setCharacterEncoding( )

: ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ์ „์†ก๋˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ( ) ๋ฐฉ์‹์œผ๋กœ ์ธ์ฝ”๋”ฉํ•œ๋‹ค.

 

getWriter( ).writer( )

: HTTPServletResponse ๊ฐ์ฒด์—์„œ ์ถœ๋ ฅ ์ŠคํŠธ๋ฆผ(Writer)๋ฅผ ์–ป์–ด์˜ค๋Š” ๋ฉ”์„œ๋“œ๋กœ ๋ธŒ๋ผ์šฐ์ €์— ๋ฌธ์ž ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๋‚ผ ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.

protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // super.service(request, response);

        System.out.println("HelloServlet.service");
        System.out.println("request = " + request);
        System.out.println("response = " + response);

        String username = request.getParameter("username"); 
        System.out.println("username = " + username);

        response.setContentType("text/plain");
        response.setCharacterEncoding("utf-8");
        response.getWriter().write("hello " + username);
    }
localhost:8080/hello๋กœ ๋“ค์–ด๊ฐ€๋ฉด ์›น ๋ธŒ๋ผ์šฐ์ €๊ฐ€ HTTP ์š”์ฒญ ๋ฉ”์‹œ์ง€๋ฅผ ๋งŒ๋“ ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์„œ๋ฒ„์— ๋งŒ๋“  ๋ฉ”์‹œ์ง€๋ฅผ ๋˜์ง„๋‹ค. 1)request์™€ reponse์— ์ธํ„ฐํŽ˜์ด์Šค ๊ตฌํ˜„์ฒด๋“ค์ด ์ฐํ˜€์„œ ์ฝ˜์†”์ฐฝ์— ์ถœ๋ ฅ๋œ๋‹ค.

์ฟผ๋ฆฌํŒŒ๋ผ๋ฏธํ„ฐ๋Š” ? ๋’ค์— ์˜ค๋Š” ๊ฒƒ์ด๋‹ค.(์˜ˆ์‹œ๋กœ http://localhost:8080/hello?username=sori) ์ด ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์‰ฝ๊ฒŒ ์ฝ์„ ์ˆ˜ ์žˆ๋„๋ก ์ง€์›ํ•ด์ฃผ๋Š” ๊ฒƒ์„ getParameter๊ฐ€ ํ•˜๋Š” ์—ญํ• ์ด๋‹ค. getParameter๋Š” ์ฟผ๋ฆฌ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ๊บผ๋‚ด์˜ค๋Š”๋ฐ ๊บผ๋‚ด์˜จ ๊ฒƒ์„ username์— ๋„ฃ์–ด ์ถœ๋ ฅํ•œ๋‹ค.

2)๊ฐ„๋‹จํ•˜๊ฒŒ response.๋กœ ์‘๋‹ต๋ฉ”์‹œ์ง€๋ฅผ ๋งŒ๋“ค์–ด๋ณด์ž. setContentType("text/plain")์€ ์‘๋‹ต ๋ฐ์ดํ„ฐ๊ฐ€ ๋‹จ์ˆœ ๋ฌธ์ž๋ผ๋Š” ๊ฒƒ์ด๊ณ , setCharacterEncoding("utf-8")์€ ๋ฌธ์ž ์ธ์ฝ”๋”ฉ์„ utf-8๋กœ ํ•œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ์—”์ฝ”๋”ฉ์„ ์ง€์ •ํ•˜์ง€ ์•Š์œผ๋ฉด ํ•œ๊ตญ์–ด๋ฅผ ์ œ๋Œ€๋กœ ์ง€์›ํ•˜์ง€ ๋ชปํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ด ๋‘ ์ •๋ณด๋Š” HTTP ์‘๋‹ต ํ—ค๋”์— ๋‹ด๊ฒจ์ ธ ๋ธŒ๋ผ์šฐ์ €๋กœ ์ „๋‹ฌ๋œ๋‹ค. getWriter().write("hello " + username);์˜ write๋Š” http ์‘๋‹ต ๋ฉ”์‹œ์ง€ ๋ฐ”๋””์— ๋“ค์–ด๊ฐ€๊ฒŒ ๋œ๋‹ค.

์ •๋ฆฌํ•ด๋ณด๋ฉด println์€ ๋‚ด ์ฝ˜์†”(์„œ๋ฒ„)์—์„œ๋งŒ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋Š” ๋กœ๊ทธ๊ฐ€ ๋œ๋‹ค. response ๊ฐ์ฒด๋ฅผ ํ†ตํ•ด ์ž‘์„ฑํ•œ ํƒ€์ž…๊ณผ ์—”์ฝ”๋”ฉ ๊ทธ๋ฆฌ๊ณ  write๋กœ ์ž‘์„ฑํ•œ ๋ณธ๋ฌธ ์ •๋ณด๋Š” ๋ธŒ๋ผ์šฐ์ €๋กœ ์ „์†ก๋˜๊ณ  ์‚ฌ์šฉ์ž๊ฐ€ ์‹ค์ œ ํ™”๋ฉด์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค.

 

 

1) request์™€ response์˜ ์ธํ„ฐํŽ˜์ด์Šค ๊ตฌํ˜„์ฒด ์ถœ๋ ฅ ๊ฒฐ๊ณผ

 

2) response.๋กœ ์‘๋‹ต๋ฉ”์‹œ์ง€ ๋งŒ๋“ค์–ด ๋ธŒ๋ผ์šฐ์ €๋กœ ๋ณด๋‚ธ ๊ฒฐ๊ณผ

 

 

Q. protected void service๋ฅผ ๋ถˆ๋Ÿฌ์˜ค๋ฉด super.service(request, response) ์ฝ”๋“œ๊ฐ€ ๊ฐ™์ด ์˜ค๋Š”๋ฐ ์ด ์ฝ”๋“œ๋ฅผ ๋†”๋‘๋ฉด ๋‚ด๊ฐ€ ์ž‘์„ฑํ•œ ์ฝ”๋“œ๊ฐ€ ์ œ๋Œ€๋กœ ์ž‘๋™ํ•˜์ง€ ์•Š๋Š”๋‹ค. ์™œ ๊ทธ๋Ÿด๊นŒ?

A. super๋Š” ๋ถ€๋ชจํด๋ž˜์Šค์˜ service( ) ๋ฉ”์„œ๋“œ๋ฅผ ์‹คํ–‰ํ•˜๊ฒŒ ํ•˜๊ณ , ๋ถ€๋ชจ ํด๋ž˜์Šค์˜ service( ) ๋ฉ”์„œ๋“œ์—๋Š” HTTP ์š”์ฒญ ๋ฐฉ์‹์— ๋”ฐ๋ผ doGet(), doPost() ๋“ฑ์ด ์žˆ๋‹ค. ์˜ค๋ฒ„๋ผ์ด๋”ฉํ•˜์—ฌ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋ฉด ๋‚ด๊ฐ€ ์ž‘์„ฑํ•œ ์ฝ”๋“œ๊ฐ€ ํ•œ ๋ฒˆ ์‹คํ–‰๋˜๊ณ , ๊ทธ ๋‹ค์Œ ๋ถ€๋ชจ ํด๋ž˜์Šค์—์„œ ์‹คํ–‰๋œ๋‹ค. ๋ถ€๋ชจ ํด๋ž˜์Šค์˜ ๊ธฐ๋ณธ ๋กœ์ง์ด ์‹คํ–‰๋ ํ…Œ๋‹ˆ ๊ฒฐ๊ตญ ๋‚ด๊ฐ€ ์›ํ•˜๋Š” ๊ฒฐ๊ณผ์™€ ๋‹ค๋ฅธ ๊ฒฐ๊ณผ๊ฐ€ ๋‚˜์˜ค๊ฒŒ ๋œ๋‹ค.

์—ฌ๊ธฐ์„œ ์˜ค๋ฒ„๋ผ์ด๋”ฉ์ด๋ž€, ๋˜‘๊ฐ™์€ ์ฝ”๋“œ์™€ ๋˜‘๊ฐ™์€ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ์ƒˆ๋กœ ์ •์˜ํ•˜์—ฌ ์ž‘์„ฑํ•œ ๊ฒƒ์„ ๋งํ•œ๋‹ค.

 

 

 

 


 

 

 

โœ”๏ธ  HttpServletRequest

  • HttpServletRequest๋Š” ์„œ๋ธ”๋ฆฟ์ด ํŒŒ์‹ฑํ•œ HTTP ์š”์ฒญ ๋ฉ”์‹œ์ง€๋ฅผ HttpServletRequest ๊ฐ์ฒด์— ๋‹ด์•„์„œ ์ œ๊ณตํ•œ๋‹ค.
  • ์ด๋ฒˆ์—๋Š” request ๊ฐ์ฒด์— ๋‹ด๊ฒจ์žˆ๋Š” ์ •๋ณด๋“ค์„ ๋ฌด์—‡์ด ์žˆ๋Š”์ง€ ์ถœ๋ ฅํ•ด๋ณผ ๊ฒƒ์ด๋‹ค.

 

โ–บ  RequestHeaderServlet.class

  • start-line ์ •๋ณด
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        printStartLine(request);
        printHeaders(request);
        printHeaderUtils(request);
        printEtc(request);
    }
private static void printStartLine(HttpServletRequest request) {
        System.out.println("request.getMethod() = " + request.getMethod());
        System.out.println("request.getProtocol() = " + request.getProtocol());
        System.out.println("request.getScheme() = " + request.getScheme());
        System.out.println("request.getRequestURL() = " + request.getRequestURL());
        System.out.println("request.getRequestURI() = " + request.getRequestURI());
        System.out.println("request.getQueryString() = " + request.getQueryString());
        System.out.println("request.isSecure() = " + request.isSecure());
    }
์„œ๋ธ”๋ฆฟ์ด service(HttpServletRequest request, HttpServletResponse response) ๋ฉ”์„œ๋“œ๋ฅผ ์‹คํ–‰์‹œํ‚จ๋‹ค. ์ด๋•Œ request์™€ response ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค์–ด์„œ ๋„˜๊ฒจ์ฃผ๋Š”๋ฐ, request์—๋Š” HTTP ์š”์ฒญ์— ๋Œ€ํ•œ ์ •๋ณด๊ฐ€ ๋‹ด๊ฒจ์žˆ๊ณ , response์—๋Š” ์„œ๋ฒ„๊ฐ€ ๋ธŒ๋ผ์šฐ์ €์—๊ฒŒ ์ค„ ์‘๋‹ต ๋‚ด์šฉ์„ ๋งŒ๋“œ๋Š”๋ฐ ์‚ฌ์šฉํ•œ๋‹ค.

service ๋‚ด์— printStartLine(request)๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด, printStartLine์—์„œ ํ•„์š”๋กœํ•˜๋Š” HTTP ์š”์ฒญ์˜ ์ •๋ณด๋ฅผ ์ฝ๊ณ , request ๊ฐ์ฒด ์ •๋ณด๋ฅผ ์ „๋‹ฌํ•œ ํ›„ ์ฝ˜์†”์— ์ถœ๋ ฅํ•œ๋‹ค.

printStartLine์ด ํ•„์š”๋กœํ•˜๋Š” ์ •๋ณด๋ฅผ ์‚ดํŽด๋ณด์ž. getMethod๋Š” GET์ธ์ง€ POST ๊ฐ™์€ HTTP ๋ฉ”์„œ๋“œ๋ช…์ด๊ณ  getProtocol์€ ํ”„๋กœํ† ์ฝœ ๋ฒ„์ „, getScheme์€ http ๋˜๋Š” https, getRequestURL์€ ์ „์ฒด ์š”์ฒญ URL, getRequestURI๋Š” URI ๊ฒฝ๋กœ, getQueryString์€ ?๋’ค์— ์˜ค๋Š” ์ฟผ๋ฆฌ ํŒŒ๋ผ๋ฏธํ„ฐ, isSecure์€ https ์š”์ฒญ์ธ์ง€ ์•„๋‹Œ์ง€ ๋Œ€ํ•œ ์‘๋‹ต์„ ์š”์ฒญํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

๋‹ค์‹œ ์ •๋ฆฌํ•ด๋ณด๋ฉด ๋ธŒ๋ผ์šฐ์ €์— ์š”์ฒญ์ด ์˜ค๊ณ  ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ service( )๋ฅผ ์‹คํ–‰ํ•œ๋‹ค. ๊ทธ๋Ÿผ service( )๋‚ด์— ์žˆ๋Š” printStartLine(request)๊ฐ€ ํ˜ธ์ถœ๋˜๊ณ  ์ถœ๋ ฅํ•˜๋ผ๋Š” ๊ฒƒ๋“ค์˜ ์ •๋ณด๋ฅผ ๋ฐ›์•„ ์ถœ๋ ฅํ•œ๋‹ค.

 

 

  • ํ—ค๋” ์ •๋ณด ์ „์ฒด ๋ณด๊ธฐ

Enumeration

: ์—ด๊ฑฐํ˜•์œผ๋กœ ๊ด€๋ จ ์žˆ๋Š” ๋ฐ์ดํ„ฐ ์ง‘ํ•ฉ์„ ์ˆœ์ฐจ์ ์œผ๋กœ ์ ‘๊ทผํ•œ๋‹ค.

 

hasMoreElements( )

: ๋‹ค์Œ ๋‚ด์šฉ์ด ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๋Š” ๋ฉ”์„œ๋“œ์ด๋‹ค.

 

nextElement( )

: ๊ฐ’์„ ๊ฐ€์ ธ์˜ค๋Š” ๋ฉ”์„œ๋“œ์ด๋‹ค.

 

getHeaderNames( )

: ๊ฐ’์„ ๊ฐ€์ ธ์˜ค๋Š” ๋ฉ”์„œ๋“œ์ด๋‹ค.

 

getHeader( )

: ๊ฐ’์„ ๊ฐ€์ ธ์˜ค๋Š” ๋ฉ”์„œ๋“œ์ด๋‹ค.

private void printHeaders(HttpServletRequest request) {
        Enumeration<String> headerNames = request.getHeaderNames();
        while (headerNames.hasMoreElements()) {
            String headerName = headerNames.nextElement();
            System.out.println(headerName + ": " + request.getHeader(headerName));
       }
}
Enumeration ์ธํ„ฐํŽ˜์ด์Šค์˜ hasMoreElements( )๋Š” ์ง‘ํ•ฉ์˜ ๊ตฌ์„ฑ ์š”์†Œ๊ฐ€ ๋” ์žˆ๋Š”์ง€๋ฅผ ๊ฒ€์‚ฌํ•˜๋Š” ๋ฉ”์„œ๋“œ์ด๋‹ค. request๋กœ ๋ฐ›์•„์˜จ headerNames์— ๊ฐ์ฒด๊ฐ€ ํ•˜๋‚˜๋„ ์—†์„ ๋•Œ๊นŒ์ง€ while๋ฌธ์ด ๋ฐ˜๋ณตํ•œ๋‹ค. headerNames๋ฅผ ์ถœ๋ ฅํ•˜๊ธฐ ์œ„ํ•ด nextElement๋กœ ๊ฐ’์„ ๊ฐ€์ ธ์™€ headerName์— ๋ฐ›๋Š”๋‹ค. ๊ทธ๋ฆฌ๊ณ  headerName์„ ์ถœ๋ ฅํ•˜๊ณ  ์‹ค์ œ ๊ฐ’์€ getHeader๋ฅผ ํ†ตํ•ด ์ถœ๋ ฅํ•œ๋‹ค.

request.getHeaderNames( )๋Š” HTTP ์š”์ฒญ์˜ ํ—ค๋” ์ด๋ฆ„๋“ค์„ Enumeration<String> ํ˜•ํƒœ๋กœ ๋ฐ˜ํ™˜ํ•˜๋Š”๋ฐ, ๋ชจ๋“  ํ—ค๋”์˜ ์ด๋ฆ„(key)๋งŒ ์ง‘ํ•ฉ์œผ๋กœ ๊ฐ€์ ธ์˜จ๋‹ค. ์˜ˆ๋กœ host, user-agent ๋“ฑ์ด ์žˆ๋‹ค. getHeader๋Š” ํ•ด๋‹น ํ—ค๋”์˜ ์ด๋ฆ„์— ํ•ด๋‹นํ•˜๋Š” ์‹ค์ œ ํ—ค๋” ๊ฐ’(value)์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค. ๋งŒ์•ฝ headerName์— host๊ฐ€ ๋“ค์–ด๊ฐ„๋‹ค๋ฉด request.getHeader(headerName)์—๋Š” localhost:8080 ๊ฐ’์ด ๋ฐ˜ํ™˜๋œ๋‹ค.

 

 

asIterator

: ์ปฌ๋ ‰์…˜์˜ ์š”์†Œ๋ฅผ ๋ฐ˜๋ณต์ ์œผ๋กœ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•˜๋ฉฐ, iterator ์ธํ„ฐํŽ˜์ด์Šคํ˜•์œผ๋กœ ๋ฐ”๊ฟ”์„œ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

 

forEachRemaining

: Iterator์˜ ๋ชจ๋“  ์š”์†Œ๋ฅผ ๋ฐฉ๋ฌธํ•˜๋ฉด์„œ ์ง€์ •๋œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.

private void printHeaders(HttpServletRequest request) {
        request.getHeaderNames().asIterator()
                        .forEachRemaining(headerName -> System.out.println(headerName + ": " + request.getHeader(headerName)));
}
getHeaderNames๋Š” Enumeration<String>์œผ๋กœ ๋ฐ˜ํ™˜ํƒ€์ž…์ด ์ง€์ •๋˜์–ด์žˆ๋‹ค. ๊ทธ๊ฑธ asIterator๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Iterator๋กœ ๋ฐ”๊ฟ”์ค€๋‹ค. ํƒ€์ž…์ด ๋ฐ”๋€ ํ—ค๋”์˜ ์ด๋ฆ„(key)๋“ค์„ forEachRemaining์„ ํ†ตํ•ด ๋ชจ๋“  ์š”์†Œ์— ๋ฐฉ๋ฌธํ•˜์—ฌ ์ง€์ •๋œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋„๋ก ํ•œ๋‹ค. ์—ฌ๊ธฐ์„œ ์ง€์ •๋œ ์ž‘์—…์€ headerName์„ ๋„˜๊ฒจ headerName์— ํ—ค๋”์˜ ์ด๋ฆ„์„ ์ถœ๋ ฅ์‹œํ‚ค๊ณ , request.getHeader(headerName)์œผ๋กœ ํ—ค๋” ์ด๋ฆ„์˜ ๊ฐ’์„ ์ถœ๋ ฅ์‹œํ‚จ๋‹ค.

 

 

  • ํ—ค๋” ํŽธ๋ฆฌํ•œ ์กฐํšŒ

getCookies

: ๋ชจ๋“  ์ฟ ํ‚ค๋ฅผ ๊ฐ€์ ธ์˜จ๋‹ค.

 

getName

: ์ฟ ํ‚ค์˜ ์ด๋ฆ„์„ ๊ฐ€์ ธ์˜จ๋‹ค.

 

getValue

: ์ฟ ํ‚ค์˜ ๊ฐ’์„ ๊ฐ€์ ธ์˜จ๋‹ค.

    private void printHeaderUtils(HttpServletRequest request) {  
        System.out.println("[cookie ํŽธ์˜ ์กฐํšŒ]");
        
        if (request.getCookies() != null) {
            for (Cookie cookie : request.getCookies()) {
                System.out.println(cookie.getName() + ": " + cookie.getValue());
             }   
        }
    }
request.getCookies๋กœ ์ฟ ํ‚ค๋ฅผ ๋ฐ›๊ณ  ๊ทธ ๊ฐ’์ด null์ด ์•„๋‹ˆ๋ฉด for-each๋ฌธ์„ ์ง„ํ–‰ํ•œ๋‹ค. for-each๋ฌธ์€ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ฟ ํ‚ค๋ฅผ ํ•˜๋‚˜์”ฉ ๊บผ๋‚ด๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ–ˆ๋‹ค. ๊ทธ๋ ‡๊ฒŒ ํ•˜๋‚˜์”ฉ getName์„ ํ†ตํ•ด ์ฟ ํ‚ค์˜ ์ด๋ฆ„(key)๋ฅผ ์ถ”์ถœํ•˜๊ณ , getValue๋ฅผ ํ†ตํ•ด ์ฟ ํ‚ค์˜ ์‹ค์ œ ๊ฐ’์„ ์ถ”์ถœํ•œ๋‹ค.

 

 

getLocales

: ๋ชจ๋“  ์„ ํ˜ธ ์–ธ์–ด ๋ชฉ๋ก์„ ์šฐ์„ ์ˆœ์œ„ ์ˆœ์„œ๋Œ€๋กœ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

 

getLocale

: ๊ฐ€์žฅ ์šฐ์„  ์ˆœ์œ„๊ฐ€ ๋†’์€ ์–ธ์–ด๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

private void printHeaderUtils(HttpServletRequest request) {
    System.out.println("[Accept-Language ํŽธ์˜ ์กฐํšŒ]");
    
    request.getLocales().asIterator()
            .forEachRemaining(locale -> System.out.println("locale = " + locale));
    System.out.println("request.getLocale() = " + request.getLocale());
}
์–ด๋–ค ์–ธ์–ด๋ฅผ ์„ ํ˜ธํ•˜๋Š”์ง€์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ์ถœ๋ ฅํ•ด๋ณด๊ณ ์ž ํ•œ๋‹ค. request.getLocales๋Š” ๋ชจ๋“  ์„ ํ˜ธ ์–ธ์–ด ๋ชฉ๋ก์„ Enumeration์œผ๋กœ ๋ฐ˜ํ™˜ํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  asIterator์„ ํ†ตํ•ด iterator๋กœ ๋ฐ”๊พผ๋‹ค. ๊ทธ ํ›„ request.getLocale๋กœ ๊ฐ€์žฅ ์šฐ์„ ์œผ๋กœ ์„ ํ˜ธํ•˜๋Š” ์–ธ์–ด๋“ค์„ ํ•˜๋‚˜์”ฉ ๊บผ๋‚ด ์ถœ๋ ฅํ•œ๋‹ค.

 

 

 


 

 

 

โœ”๏ธ  HTTP ์š”์ฒญ ๋ฐ์ดํ„ฐ - GET ์ฟผ๋ฆฌ ํŒŒ๋ผ๋ฏธํ„ฐ

  • HTTP ์š”์ฒญ ๋ฉ”์‹œ์ง€๋ฅผ ํ†ตํ•ด ํด๋ผ์ด์–ธํŠธ์—์„œ ์„œ๋ฒ„๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•ด๋ณด์ž.
  • GET - ์ฟผ๋ฆฌ ํŒŒ๋ผ๋ฏธํ„ฐ, POST - HTML Form, HTTP message body ๋ฐฉ์‹ ์ค‘ GET ๋ฐฉ์‹์„ ์•Œ์•„๋ณด์ž.

 

  • ์ „์ฒด ํŒŒ๋ผ๋ฏธํ„ฐ ์กฐํšŒ
http://localhost:8080/request-param?username=hello&age=20
๋ฉ”์‹œ์ง€ ๋ฐ”๋”” ์—†์ด, ์ฃผ์†Œ์ฐฝ์„ ํ†ตํ•ด ์ฟผ๋ฆฌ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•œ๋‹ค. ์ฟผ๋ฆฌ ํŒŒ๋ผ๋ฏธํ„ฐ๋Š” ?๋ฅผ ์‹œ์ž‘์œผ๋กœ ๋ณด๋‚ด๋ฉฐ, ์ถ”๊ฐ€ ํŒŒ๋ผ๋ฏธํ„ฐ๋Š” &๋กœ ๊ตฌ๋ถ„ํ•œ๋‹ค.

 

 

getParameterNames

: ์ฟผ๋ฆฌ ์ŠคํŠธ๋ง ์ค‘ ์ด๋ฆ„๋งŒ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

 

getParameter

: ์ฟผ๋ฆฌ ์ŠคํŠธ๋ง์˜ ์ด๋ฆ„์— ํ•ด๋‹นํ•˜๋Š” ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

@WebServlet(name = "requestParamServlet", urlPatterns = "/request-param")
public class RequestParamServlet extends HttpServlet {

    @Override
    protected void service(HttpServletRequest requset, HttpServletResponse response) throws ServletException, IOException {

        System.out.println("[์ „์ฒด ํŒŒ๋ผ๋ฏธํ„ฐ ์กฐํšŒ] - start"); 
        requset.getParameterNames().asIterator()
                        . forEachRemaining(paramName -> System.out.println(paramName + "=" + requset.getParameter(paramName)));      
        System.out.println("[์ „์ฒด ํŒŒ๋ผ๋ฏธํ„ฐ ์กฐํšŒ] - end");
        System.out.println();
     }
}
์ „์ฒด ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์กฐํšŒํ•˜๊ธฐ ์œ„ํ•ด์„œ request.getParameterNames๋กœ ๊ฐ€์ ธ์˜จ ํŒŒ๋ผ๋ฏธํ„ฐ์˜ ์ด๋ฆ„์„ Iterator ํƒ€์ž…์œผ๋กœ ๋ฐ”๊พผ ํ›„, ์ด๋ฆ„ ํ•˜๋‚˜ํ•˜๋‚˜๋ฅผ ์ถœ๋ ฅํ•œ ํ›„ request.getParameter๋กœ ํŒŒ๋ผ๋ฏธํ„ฐ ์ด๋ฆ„์˜ ๊ฐ’์„ ์ถœ๋ ฅํ•œ๋‹ค.

 

 

  • ๋‹จ์ผ ํŒŒ๋ผ๋ฏธํ„ฐ ์กฐํšŒ
String username = requset.getParameter("username");
System.out.println("username = " + username);
๋‹จ์ผ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์กฐํšŒํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค. ์›ํ•˜๋Š” ํŒŒ๋ผ๋ฏธํ„ฐ์˜ ๊ฐ’์„ ์•Œ๊ธฐ ์œ„ํ•ด request.getParameter์— ํŒŒ๋ผ๋ฏธํ„ฐ์˜ ์ด๋ฆ„์„ ๋„ฃ๋Š”๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ทธ ์ด๋ฆ„์˜ ๊ฐ’์„ username์œผ๋กœ ๋ฐ›์•„ ์ถœ๋ ฅํ•˜๋ฉด ๋œ๋‹ค.

 

 

  • ์ด๋ฆ„์ด ๊ฐ™์€ ๋ณต์ˆ˜ ํŒŒ๋ผ๋ฏธํ„ฐ ์กฐํšŒ

getParameterValues

: ์ฟผ๋ฆฌ ์ŠคํŠธ๋ง์˜ ์ด๋ฆ„์— ํ•ด๋‹นํ•˜๋Š” ๊ฐ’์ด ์—ฌ๋Ÿฌ๊ฐœ์ผ๋•Œ ๋ฐฐ์—ด๋กœ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

http://localhost:8080/request-param?username=hello&age=20&username=kim
 String[] usernames = requset.getParameterValues("username");
        for (String name : usernames) {
            System.out.println("username: " + name);
        }
username์— ๋‹ค๋ฅธ ๊ฐ’ ๋‘ ๊ฐœ์ธ hello์™€ kim์„ ์ฟผ๋ฆฌ ํŒŒ๋ผ๋ฏธํ„ฐ์— ๋„ฃ์—ˆ๋‹ค. getParameterVaues๋กœ username์— ํ•ด๋‹นํ•˜๋Š” ์—ฌ๋Ÿฌ ๊ฐ’์„ ๋ฐฐ์—ด๋กœ usernames๊ฐ€ ๋ฐ›๋Š”๋‹ค. usernames์˜ ๊ฐ’๋“ค์„ for๋ฌธ์œผ๋กœ name์— ๋„ฃ์–ด username์— ์–ด๋–ค ๊ฐ’๋“ค์ด ์žˆ๋Š”์ง€ ์ถœ๋ ฅํ•œ๋‹ค. ๋งŒ์•ฝ getParameter๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด ์ฒซ๋ฒˆ์งธ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜๋‹ˆ ๋ณต์ˆ˜ ํŒŒ๋ผ๋ฏธํ„ฐ์˜ ๊ฒฝ์šฐ getParameterValues๋ฅผ ์‚ฌ์šฉํ•ด์•ผํ•œ๋‹ค๋Š” ๊ฑธ ์•Œ์•„๋‘์ž.

 

 

์ „์ฒด ํŒŒ๋ผ๋ฏธํ„ฐ์™€ ๋‹จ์ผ ํŒŒ๋ผ๋ฏธํ„ฐ ์กฐํšŒ ๊ฒฐ๊ณผ

 

๋ณต์ˆ˜ ํŒŒ๋ผ๋ฏธํ„ฐ ์กฐํšŒ ๊ฒฐ๊ณผ

 

 

 

 


 

 

 

โœ”๏ธ  HTTP ์š”์ฒญ ๋ฐ์ดํ„ฐ - POST HTML Form

  • GET - ์ฟผ๋ฆฌ ํŒŒ๋ผ๋ฏธํ„ฐ, POST - HTML Form, HTTP message body ๋ฐฉ์‹ ์ค‘ POST ๋ฐฉ์‹์„ ์•Œ์•„๋ณด์ž.
  • ๋ฉ”์‹œ์ง€ ๋ฐ”๋””์— username=hello&age=20(key=value๋กœ) ์ฟผ๋ฆฌ ํŒŒ๋ผ๋ฏธํ„ฐ ํ˜•์‹์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•œ๋‹ค.

 

 

 

<form action="/request-param" method="post">
    username: <input type="text" name="username" />
    age: <input type="text" name="age" />
    <button type="submit">์ „์†ก</button>
</form>
username๊ณผ age์— sori์™€ 20์ด๋ž€ ๊ฐ’์„ ์ ์–ด post ๋ฐฉ์‹์œผ๋กœ ๋ณด๋ƒˆ๋‹ค. post ๋ฐฉ์‹์œผ๋กœ ๋ณด๋‚ด๊ธฐ ์œ„ํ•ด form์˜ method์— post๋ผ๊ณ  ์ ์–ด๋’€๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ์ด form์„ post ๋ฐฉ์‹์œผ๋กœ ๋ณด๋‚ธ๋‹ค๋Š” ์˜๋ฏธ์ด๋‹ค. post ๋ฐฉ์‹์œผ๋กœ ๋ณด๋‚ธ ๋ฐ์ดํ„ฐ๋Š” ์–ด๋””์— ๋„์ฐฉํ• ๊นŒ? ๋ฐ”๋กœ ์•ž action์— ๊ฒฝ๋กœ๋ฅผ ์ ์–ด๋’€๋‹ค. /request-param์œผ๋กœ ์ ์—ˆ์œผ๋‹ˆ ๋ฐ์ดํ„ฐ๋Š” ์ด ๊ฒฝ๋กœ๋ฅผ ๋ฐ›๋Š” ๊ณณ์— ๋„์ฐฉํ•˜๊ณ  ๊ฑฐ๊ธฐ์—์„œ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ์‹๋Œ€๋กœ ํ–‰ํ•ด์งˆ ๊ฒƒ์ด๋‹ค.

POST์˜ HTML Form์„ ์ „์†กํ•˜๋ฉด ์š”์ฒญ URL๊ณผ content-type: application/x-www-form-urlencoded, ๋ฉ”์‹œ์ง€ ๋ฐ”๋””์— username=hello&age=20์œผ๋กœ HTTP ๋ฉ”์‹œ์ง€๋ฅผ ๋งŒ๋“ ๋‹ค. ์—ฌ๊ธฐ์„œ application/x-www-form-urlencoded ํ˜•์‹์€ GET์—์„œ ์‚ดํŽด๋ณธ ์ฟผ๋ฆฌ ํŒŒ๋ผ๋ฏธํ„ฐ ํ˜•์‹๊ณผ ๊ฐ™์•„์„œ ํ€ด๋ฆฌ ํŒŒ๋ผ๋ฏธํ„ฐ ์กฐํšŒ ๋ฉ”์„œ๋“œ๋ฅผ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•ด๋„ ๋œ๋‹ค. ํด๋ผ์ด์–ธํŠธ ์ž…์žฅ์—์„  ๋‘ ๋ฐฉ์‹์— ์ฐจ์ด๊ฐ€ ์žˆ์ง€๋งŒ, ์„œ๋ฒ„์˜ ์ž…์žฅ์—์„œ ๋‘˜์˜ ํ˜•์‹์ด ๊ฐ™์œผ๋ฏ€๋กœ request.getParameter๋กœ ํŽธ๋ฆฌํ•˜๊ฒŒ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค. ๋ฌผ๋ก  content-type์€ GET ๋ฐฉ์‹์—๋Š” ์—†๋‹ค. ๋ฉ”์‹œ์ง€ ๋ฐ”๋””๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. POST ๋ฐฉ์‹์€ ๋ฉ”์‹œ์ง€ ๋ฐ”๋””๋ฅผ ์–ด๋–ค ํƒ€์ž…์œผ๋กœ ๋ณด๋‚ผ ๊ฑด์ง€ ๋ช…์‹œํ•ด์•ผํ•ด์„œ ์‚ฌ์šฉํ•œ๋‹ค.

 

 

 

 


 

 

 

โœ”๏ธ  HTTP ์š”์ฒญ ๋ฐ์ดํ„ฐ - API ๋ฉ”์‹œ์ง€ ๋ฐ”๋”” - JSON

  • ๋ฉ”์‹œ์ง€ ๋ฐ”๋””์— ๋ฐ์ดํ„ฐ๋ฅผ ์ง์ ‘ ๋‹ด์•„์„œ ์š”์ฒญํ•˜๋Š” ๋ฐฉ์‹๋„ ์žˆ์ง€๋งŒ ์ฃผ๋กœ JSON ํ˜•์‹์„ ์‚ฌ์šฉํ•œ๋‹ค.
  • JSON ํ˜•์‹์„ ํŒŒ์‹ฑํ•  ์ˆ˜ ์žˆ๊ฒŒ ๊ฐ์ฒด๋ฅผ ํ•˜๋‚˜ ๋งŒ๋“ค์–ด ์‚ฌ์šฉํ•œ๋‹ค.

 

  • ๊ฐ์ฒด ๋งŒ๋“ค๊ธฐ
@Getter
@Setter
public class HelloData {
    private String username;
    private int age;
}
lombok์ด ์ง€์›ํ•ด์ฃผ๋Š” Getter, Setter ์–ด๋…ธํ…Œ์ด์…˜์ด๋‹ค. Getter, Setter์— ๋Œ€ํ•ด ๊ฐ„๋‹จํžˆ ์„ค๋ช…ํ•˜์ž๋ฉด, private ๋ณ€์ˆ˜๋ฅผ ๋‹ค๋ฅธ ํด๋ž˜์Šค์—์„œ ๊บผ๋‚ด๋Š” ๋ฉ”์„œ๋“œ๋ฅผ Getter๋ผ๊ณ  ํ•˜๊ณ  private ๋ณ€์ˆ˜์— ๊ฐ’์„ ์ดˆ๊ธฐํ™”ํ•˜๋Š” ๋ฉ”์„œ๋“œ๋Š” Setter๋ผ๊ณ  ํ•œ๋‹ค.

 

 

  • JSON ํ˜•์‹์œผ๋กœ ๋ณด๋‚ด์˜จ ๋ฐ์ดํ„ฐ ๋ณด๋‚ด๊ธฐ
content-type:application/json
messageBody={"username" : "hello", "age" : 20}
content-type์„ json์œผ๋กœ ์„ ํƒํ•œ ํ›„ body์— ๋‚ด์šฉ์„ ์‹ค์–ด์„œ ๋ณด๋‚ธ๋‹ค.

 

 

  • JSON ํ˜•์‹์œผ๋กœ ๋ณด๋‚ด์˜จ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌํ•˜๊ธฐ

ObjectMapper

์ง๋ ฌํ™”์™€ ์—ญ์ง๋ ฌํ™”๋ฅผ ์ฒ˜๋ฆฌํ•œ๋‹ค.

   private ObjectMapper objectMapper = new ObjectMapper();
ObjectMapper์€ ์ž๋ฐ”์—์„œ JSON์„ ๋‹ค๋ฃจ๊ธฐ ์œ„ํ•œ ๋Œ€ํ‘œ์ ์ธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ Jackson์˜ ํด๋ž˜์Šค์ด๋‹ค. ObjectMapper์„ ์ด์šฉํ•˜์—ฌ JSON ๋ฌธ์ž์—ด์„ ์ž๋ฐ” ๊ฐ์ฒด๋กœ ๋ณ€ํ™”ํ•˜๋Š” ์—ญ์ง๋ ฌํ™”๋ฅผ ํ•  ์ˆ˜ ์žˆ๊ณ  ๊ทธ ๋ฐ˜๋Œ€์ธ ์ง๋ ฌํ™” ๋“ฑ์„ ํ†ตํ•ด ๋‹ค์–‘ํ•œ JSON ์ฒ˜๋ฆฌ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. Spring์—์„œ๋Š” Jackson์„ ๊ธฐ๋ณธ์œผ๋กœ ์‚ฌ์šฉํ•œ๋‹ค.

 

 

getInputStream

: HTTP body์˜ ๋‚ด์šฉ์„ byte stream์œผ๋กœ ๋ฐ›๋Š”๋‹ค.

 

StreamUtils

: ์ŠคํŠธ๋ฆผ์„ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ๊ฐ„๋‹จํ•œ ์œ ํ‹ธ๋ฆฌํ‹ฐ ๋ฉ”์„œ๋“œ์ด๋‹ค.

 

copyToString

: inputStream์œผ๋กœ ๋“ค์–ด์˜จ ๋‚ด์šฉ์„  String์œผ๋กœ ๋ณต์‚ฌํ•œ๋‹ค.

 ServletInputStream inputStream = request.getInputStream();
 String messageBody = StreamUtils.copyToString(inputStream, StandardCharsets.UTF_8);
HTTP body์˜ ๋‚ด์šฉ์„ byte stream์œผ๋กœ ๋ฐ›์•„ ์ด byte stream์„ ๋ฌธ์ž์—ด๋กœ ๋ณ€ํ™˜ํ•œ๋‹ค. ์ฆ‰, body์— ๋‹ด๊ธด JSON ๋‚ด์šฉ์„ ๋ฌธ์ž์—ด๋กœ ๋งŒ๋“  ๊ฒƒ์ด๋‹ค.

 

 

readValue

: Json ํŒŒ์ผ์„ java์˜ object๋กœ ๋ณ€๊ฒฝํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.

HelloData helloData = objectMapper.readValue(messageBody, HelloData.class);
Json ๋ฌธ์ž์—ด์„ HelloData ๊ฐ์ฒด๋กœ ํŒŒ์‹ฑํ•ด์„œ ๋ณ€ํ™˜ํ•œ๋‹ค. HelloData ํด๋ž˜์Šค์—๋Š” @Getter, @Setter๊ฐ€ ์žˆ์—ˆ๋‹ค. Jackson์€ ์ด getter/setter ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด์„œ JSON์˜ username,age ๊ฐ’์„ ๊ฐ๊ฐ HelloData์˜ ํ•„๋“œ์— ๋„ฃ์–ด์ค€๋‹ค.

ํŒŒ์‹ฑ์— ๋Œ€ํ•ด ๊ฐ„๋žตํ•˜๊ฒŒ ์ ์–ด๋ณด์ž๋ฉด, ๋‹จ์ˆœํ•œ ํ…์ŠคํŠธ ๋ฌธ์ž์—ด์„ ์˜๋ฏธ ์žˆ๋Š” ๊ตฌ์กฐ์ธ ์ฆ‰, ๊ฐ์ฒด๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ณผ์ •์„ ๋งํ•œ๋‹ค.

 

 

 


 

 

 

โœ”๏ธ  HttpServletResponse - ๋‹จ์ˆœ ํ…์ŠคํŠธ

  • ๋ฐฉ๊ธˆ์€ ์š”์ฒญ์„ ์–ด๋–ป๊ฒŒ ์ฒ˜๋ฆฌํ•˜๋Š”์ง€์— ๋Œ€ํ•ด ๋ฐฐ์› ๋‹ค.
  • ์ด๋ฒˆ์—๋Š” ์‘๋‹ต์— ๋Œ€ํ•ด์„œ ๋ฐฐ์šธ ๊ฒƒ์ด๋‹ค.
  • ์‘๋‹ต ๋ฐ์ดํ„ฐ๋กœ ๋‹จ์ˆœ ํ…์ŠคํŠธ ์‘๋‹ต, HTML ์‘๋‹ต, HTTP API - MessageBody JSON ์‘๋‹ต์ด ์žˆ๊ณ  ๊ทธ ์ค‘ ๋‹จ์ˆœ ํ…์ŠคํŠธ ์‘๋‹ต์„ ์‚ดํŽด๋ณด์ž.

 

@WebServlet(name = "responseHeaderServlet", urlPatterns = "/response-header")
/response-header URL๋กœ ์š”์ฒญ์„ ๋ณด๋‚ด๋ฉด ResponseHeaderServlet์ด ์š”์ฒญ์„ ๋ฐ›์•„์„œ ์ฒ˜๋ฆฌํ•  ๊ฒƒ์ด๋‹ค. ์œ„์˜ ์ฝ”๋“œ์—์„œ ์–ด๋–ป๊ฒŒ ์ฒ˜๋ฆฌ๋ฅผ ํ• ๊ฑด์ง€, ์–ด๋–ค ์ฝ”๋“œ๋ฅผ ์‹คํ–‰์‹œํ‚ฌ๊ฑด์ง€์— ๋Œ€ํ•ด ๋ฐฐ์› ๋‹ค๋ฉด, ์ง€๊ธˆ์€ ์‘๋‹ต์„ ๋ธŒ๋ผ์šฐ์ €์— ์–ด๋–ป๊ฒŒ ๋ณด๋‚ผ๊ฑด์ง€์— ๋Œ€ํ•ด ์ค‘์ ์„ ๋‘˜ ๊ฒƒ์ด๋‹ค.

 

 

setStatus

: ์‘๋‹ต์ฝ”๋“œ๋ฅผ ์ง€์ •ํ•œ๋‹ค.

 

setHeader

: ํ—ค๋”๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์‘๋‹ตํ•œ๋‹ค.

response.setStatus(HttpServletResponse.SC_OK);

response.setHeader("Content-Type","text/plain;charset=utf-8");
response.setHeader("Cache-Control","no-cache, no-store, must-revalidate");
response.setHeader("Pragma","no-cache");
response.setHeader("my-header", "hello");

PrintWriter writer = response.getWriter();
writer.println("ok");

content(response);
cookie(response);
redirect(response);
setStatus์—์„œ HTTP ์‘๋‹ต์˜ ์ƒํƒœ์ฝ”๋“œ๋ฅผ SC_OK๋กœ ๋ช…์‹œํ–ˆ๋‹ค. SC_OK๋Š” 200์„ ์˜๋ฏธํ•˜๋ฉฐ ์„ฑ๊ณต์„ ๋œปํ•œ๋‹ค. 200์ด๋ผ๊ณ  ์ ์–ด๋„ ๋ฌด๊ด€ํ•˜์ง€๋งŒ ๋งค์ง๋„˜๋ฒ„๊ฐ€ ์•„๋‹Œ ์˜๋ฏธ์žˆ๋Š” ๊ฐ’์„ ๋„ฃ๋Š”๊ฒŒ ๋” ์•ˆ์ •์ ์ด๋‹ค.

setHeader๋Š” ํ—ค๋”๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์‘๋‹ตํ•˜๋„๋ก ํ•ด์ค€๋‹ค. Content-Type์€ ์ผ๋ฐ˜ ํ…์ŠคํŠธ์— utf-8์„ ์จ์„œ ์ธ์ฝ”๋”ฉ์„ ํ•œ๋‹ค๊ณ  ์ ์—ˆ๋‹ค. Cache-Control์€ ์บ์‹œ๋ฅผ ์™„์ „ํžˆ ๋ฌดํšจํ™”ํ•˜๋„๋ก ํ–ˆ๋‹ค. ์บ์‹œ๋ฅผ ์ ˆ๋Œ€ ์ €์žฅํ•˜์ง€๋„ ๋ง๊ณ , ์“ฐ์ง€๋„ ๋ชปํ•˜๊ฒŒ ์ง€์ •ํ•œ ๊ฒƒ์ด๋‹ค. Pragma์— no-cache๋ฅผ ์ ์–ด ๊ณผ๊ฑฐ ๋ฒ„์ „๊นŒ์ง€ ์บ์‹œ๋ฅผ ์—†์•ด๋‹ค. my-header๋Š” hello๋ผ๋Š” ์ž„์˜์˜ ํ—ค๋”๋ฅผ ์ถ”๊ฐ€ํ•œ ๊ฒƒ์ด๋‹ค.

writer.println("ok")๋Š” ์‘๋‹ต ๋ฐ”๋””์— ok ๋ฉ”์‹œ์ง€๋ฅผ ์ถœ๋ ฅํ•˜๊ธฐ ์œ„ํ•ด ์ ์—ˆ๋‹ค.

๋งจ ์•„๋ž˜ ์„ธ์ค„์€ service ๋ฉ”์„œ๋“œ ์™ธ๋ถ€์— ์ ์€ ๋ฉ”์„œ๋“œ๋ฅผ ์‹คํ–‰์‹œํ‚ค๊ธฐ ์œ„ํ•ด ์ ์–ด๋‘” ๊ฒƒ์ด๋‹ค.

 

  • content
response.setContentType("text/plain");
response.setCharacterEncoding("utf-8");
setHeader์™€ ๋น„์Šทํ•˜์ง€๋งŒ ๋” ํŽธ๋ฆฌํ•œ ๋ฐฉ์‹์„ ๋‚˜ํƒ€๋‚ธ ๊ฒƒ์ด๋‹ค. ContentType์€ ์ผ๋ฐ˜์ ์ธ ํ…์ŠคํŠธ๊ณ  ์ธ์ฝ”๋”ฉ์€ utf-8์ด๋‹ค.

 

  • cookie
Cookie cookie = new Cookie("myCookie", "good");
cookie.setMaxAge(600);
response.addCookie(cookie);
myCookie ์ด๋ฆ„์ธ cookie๋ฅผ ์ƒˆ๋กœ ๋งŒ๋“ค๊ณ  ๊ฐ’์€ good์ด๋‹ค. setMaxAge๋Š” ์œ ํšจ๊ธฐ๊ฐ„์„ ๋œปํ•œ๋‹ค. ์œ ํšจ๊ธฐ๊ฐ„์€ 600์ดˆ์ด๋‹ค. addCookie๋กœ ์‘๋‹ตํ—ค๋”์— ์ฟ ํ‚ค๋ฅผ ์ถ”๊ฐ€ํ–ˆ๋‹ค.

 

  • redirect
response.sendRedirect("/basic/hello-form.html");
์‘๋‹ต์„ ๋ฆฌ๋‹ค์ด๋ ‰ํŠธ๋กœ ์ „ํ™˜ํ•ด์„œ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ /basic/hello-form.html๋กœ ์ด๋™ํ•˜๋„๋ก ํ–ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด /response-header๋กœ ๊ฒฝ๋กœ๋ฅผ ๋“ค์–ด๊ฐ€๋„ /basic/hello-form.html๋กœ ์ด๋™ํ•˜๊ฒŒ ๋œ๋‹ค. ์—ฌ๊ธฐ์„œ ์‘๋‹ต๋ฒˆํ˜ธ 302์™€ ํ•จ๊ป˜ ์ด๋™ํ•œ๋‹ค. 302๊ฐ€ ๋ฆฌ๋‹ค์ด๋ ‰ํŠธ๋ฅผ ๋œปํ•œ๋‹ค.

 

 

 


 

 

 

โœ”๏ธ  HttpServletResponse - HTML

  • ์ด๋ฒˆ์—๋Š” HTML ์‘๋‹ต์„ ์‚ดํŽด๋ณผ ๊ฒƒ์ด๋‹ค.

 

response.setContentType("text/html");

PrintWriter writer = response.getWriter();
writer.println("<html>");
writer.println("<body>");
writer.println("<div> ์•ˆ๋…•? </div>");
writer.println("</body>");
writer.println("</html>");
ContentType์„ text/html์ด๋ผ๊ณ  ์ง€์ •ํ–ˆ๋‹ค. ๋ธŒ๋ผ์šฐ์ €๋Š” ์‘๋‹ต ๋ฐ”๋””๋ฅผ html ๋ฌธ์„œ๋กœ ์ธ์‹ํ•˜๊ณ  <html>, <body>, <div> ๋“ฑ์„ ํŒŒ์‹ฑํ•˜์—ฌ ์›นํŽ˜์ด์ง€ ํ˜•ํƒœ๋กœ ๊ทธ๋ ค์ค„ ๊ฒƒ์ด๋‹ค. ์ด๋ ‡๊ฒŒ ์–ด๋–ค ๋ฐ์ดํ„ฐ๋ฅผ ํŠน์ • ํ˜•ํƒœ๋กœ ๋ณ€ํ™˜ํ•˜๊ฑฐ๋‚˜ ํ‘œํ˜„ํ•˜๋Š” ๊ณผ์ •์„ ๋ Œ๋”๋ง์ด๋ผ๊ณ  ํ•œ๋‹ค. ์ด ์ฝ”๋“œ์˜ ๊ฒฝ์šฐ ์›น๋ธŒ๋ผ์šฐ์ €์— ์ œ๋Œ€๋กœ ๋ Œ๋”๋ง ๋˜์—ˆ๋‹ค๊ณ  ๋งํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

 


 

 

 

โœ”๏ธ  HttpServletResponse - API JSON

  • ์ด๋ฒˆ์—๋Š” API JSON ์‘๋‹ต์„ ์‚ดํŽด๋ณผ ๊ฒƒ์ด๋‹ค.

 

response.setContentType("application/json");
response.setCharacterEncoding("utf-8");
ContentType์„ application/json์œผ๋กœ ์ง€์ •ํ•ด, HTTP ์‘๋‹ต์„ Json์œผ๋กœ ๋ฐ˜ํ™˜ํ•˜๋„๋ก ํ–ˆ๋‹ค. 

 

HelloData helloData = new HelloData();
helloData.setUsername("kim");
helloData.setAge(20);
๋ธŒ๋ผ์šฐ์ €๋กœ ๋ณด๋‚ด๋ ค๋Š” ๋‚ด์šฉ์ด๊ณ , ์ด ๋‚ด์šฉ์„ json ํ˜•ํƒœ๋กœ ๋ฐ”๊ฟ€ ๊ฒƒ์ด๋‹ค. Json ์š”์ฒญ ํŒŒํŠธ์—์„œ HelloData ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ค์–ด ๋ณ€์ˆ˜๋ฅผ ๊บผ๋‚ด๊ณ  ์ดˆ๊ธฐํ™”ํ•˜๋Š” Getter, Setter๋ฅผ ๊ธฐ๋Šฅ์„ ๋งŒ๋“ค์—ˆ๋‹ค. kim๊ณผ 20์ด๋ผ๋Š” ๊ฐ’์„ Username๊ณผ Age ๋ณ€์ˆ˜์— ์ดˆ๊ธฐํ™” ์‹œ์ผœ์ค€๋‹ค.

 

Q. HelloData๋Š” Getter, Setter ๊ธฐ๋Šฅ์„ ํฌํ•จํ•˜๊ณ  ์žˆ๋Š” ํด๋ž˜์Šค์ด๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ๊ณ„์† JSON์„ ์‚ฌ์šฉํ•  ๋•Œ HelloData ํด๋ž˜์Šค๊ฐ€ ํ•„์š”ํ–ˆ๋‹ค. Getter, Setter๋Š” private ๋ณ€์ˆ˜๋ฅผ ๊ด€๋ฆฌํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค๊ณ  ๋ฐฐ์› ๋Š”๋ฐ JSON๊ณผ ์–ด๋–ค ๊ด€๊ณ„์ด๊ธธ๋ž˜ HelloData์˜ Getter,Setter๋ฅผ ์‚ฌ์šฉํ•ด์•ผํ•˜๋Š”๊ฑธ๊นŒ?

A. Json์œผ๋กœ ๋ณ€ํ™˜ํ•˜๊ธฐ ์œ„ํ•ด์„œ ObjectMapper๋ฅผ ์‚ฌ์šฉํ–ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ObjectMapper ๊ฐ™์€ Json ๋ณ€ํ™˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ์ž๋ฐ” ๊ฐ์ฒด์˜ ํ•„๋“œ์— ์ ‘๊ทผํ•ด์„œ ๊ฐ’์„ ์ฝ๊ณ  ์“ฐ๋Š” ๊ณผ์ •์ด ์žˆ๋‹ค. ์ด๋•Œ ์ด ๊ณผ์ •์—์„œ getter, setter ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. 

 

 

 

writeValueAsString

: ๋ฐ์ดํ„ฐ๋ฅผ Json ํ˜•์‹์œผ๋กœ ๋ณ€ํ™˜ํ•œ๋‹ค.

String result = objectMapper.writeValueAsString(helloData);
response.getWriter().write(result);
setter๋กœ ๊ฐ์ฒด์˜ ๊ฐ’์„ kim๊ณผ 20์œผ๋กœ ์ดˆ๊ธฐํ™”ํ–ˆ๋‹ค. writeValueAsString์œผ๋กœ helloData์— ๋“ค์–ด์žˆ๋Š” ๊ฐ’์„ getter ๋ฐ›์•„์˜ฌ ๊ฒƒ์ด๋‹ค. ๊ทธ๋ ‡๊ฒŒ ๋ธŒ๋ผ์šฐ์ €์— Json ํ˜•์‹์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๋‚ธ๋‹ค.

 

 


 

 

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

 

๐Ÿชฝ

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

 


 

- Jackson ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ

 

[Java] Jackson ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ด์šฉํ•˜์—ฌ Object๋ฅผ JSON์œผ๋กœ ๋ณ€ํ™˜ํ•˜๊ธฐ

Java Object -> JSON ๋ฌธ์ž์—ด Java Object -> JSON ํŒŒ์ผ Map -> JSON ๋ฌธ์ž์—ด List -> JSON ๋ฌธ์ž์—ด ๋ฐฐ์—ด -> JSON ๋ฌธ์ž์—ด Java Object๋ฅผ JSON ๋ฌธ์ž์—ด๋กœ ๋ณ€ํ™˜ํ•˜๊ธฐ ์œ„ํ•ด์„œ Jackson ObjectMapper ์˜ ๋‹ค์Œ ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

hianna.tistory.com

 

- Spring

 

Overview (Spring Framework 6.2.8 API)

Support for registering the need for reflection, resources, java serialization and proxies at runtime. Annotation support for the Application Context, including JSR-250 "common" annotations, component-scanning, and Java-based metadata for creating Spring-m

docs.spring.io

 

 

- ObjectMapper

 

[Spring] ObjectMapper์˜ ๋™์ž‘ ๋ฐฉ์‹๊ณผ SpringBoot๊ฐ€ ์ œ๊ณตํ•˜๋Š” ์ถ”๊ฐ€ ๊ธฐ๋Šฅ๋“ค

์ด๋ฒˆ์—๋Š” Spring์—์„œ ์‚ฌ์šฉ๋˜๋Š” ObjectMapper์˜ ๋™์ž‘ ๋ฐฉ์‹์— ๋Œ€ํ•œ ์ •๋ฆฌํ•ด๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.   1. ObjectMapper๋ฅผ ์ด์šฉํ•œ ์ง๋ ฌํ™”(Serialize)[ ObjectMapper์˜ ์ง๋ ฌํ™”(Serialize) ๋™์ž‘ ๋ฐฉ์‹ ]ObjectMapper๋Š” ๋ฆฌํ”Œ๋ ‰์…˜์„

mangkyu.tistory.com

 

 

 

- ์„œ๋ธ”๋ฆฟ ๋ผ์ดํ”„ ์‚ฌ์ดํด

 

[JSP/Servlet] ์„œ๋ธ”๋ฆฟ ๋ผ์ดํ”„ ์‚ฌ์ดํด - init(), service(), doGet(), destroy()

โ–  ๋“ค์–ด๊ฐ€๊ธฐ - ๋‡Œ๋ฅผ ์ž๊ทนํ•˜๋Š” JSP&Servlet (๊น€์œค๋ช…/ํ•œ๋น›๋ฏธ๋””์–ด). ์„ ๊ณต๋ถ€ํ•˜๋ฉฐ ์ •๋ฆฌํ•˜๋Š” ๋ธ”๋กœ๊ทธ โ–  ๋ชฉ์ฐจ 1. ์„œ๋ธ”๋ฆฟ ๋ผ์ดํ”„ ์‚ฌ์ดํด 2. ์„œ๋ธ”๋ฆฟ ๋ผ์ดํ”„ ์‚ฌ์ดํด ์˜ˆ์ œ 3. ์„œ๋ธ”๋ฆฟ ํด๋ž˜์Šค์˜ init ๋ฉ”์„œ๋“œ์™€ destroy

skyfox83.tistory.com

 

 

- Iterator์™€ Enumeration

 

[์ž๋ฐ”/java]Iterator ์™€ Enumeration ์‰ฝ๊ฒŒ ์ดํ•ดํ•˜๊ธฐ ํŽธ.

Iterator์™€ Enumeration ์ปฌ๋ ‰์…˜(collection) ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ํด๋ž˜์Šค์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ˆœํ™˜ํ•ด์„œ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ํด๋ž˜์Šค์—์„œ ์ œ๊ณตํ•˜๋Š” size()๋ฅผ ์‚ฌ์šฉํ•ด์„œ for๋ฌธ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ๋ฐฉ๋ฒ•๋„ ์žˆ์ง€๋งŒ ์ˆœํ™˜

tiboy.tistory.com

 

 

- HttpServletRequest ๊ฐ์ฒด

 

3.4 HttpServletRequest ๊ฐ์ฒด - 3.4.2 HTTP ์š”์ฒญ ๋ฉ”์‹œ์ง€์˜ ํ—ค๋” ์ถœ๋ ฅ

3.4.2 HTTP ์š”์ฒญ ๋ฉ”์‹œ์ง€์˜ ํ—ค๋” ์ถœ๋ ฅ HTTP ํ”„๋กœํ† ์ฝœ์„ ์ด์šฉํ•ด์„œ ํด๋ผ์ด์–ธํŠธ๋กœ๋ถ€ํ„ฐ ์š”์ฒญ ๋ฉ”์‹œ์ง€๊ฐ€ ...

blog.naver.com

 

 

- foreachremaining

 

asiterator().foreachremaining() ์ด๋ž€?

`Iterator` ์ธํ„ฐํŽ˜์ด์Šค๋Š” ์ปฌ๋ ‰์…˜์˜ ์š”์†Œ๋ฅผ ๋ฐ˜๋ณต์ ์œผ๋กœ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์ด ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ปฌ๋ ‰์…˜์˜ ์š”์†Œ๋ฅผ ํ•˜๋‚˜์”ฉ ๊ฒ€์ƒ‰ํ•˜๊ณ  ์กฐ์ž‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. `forEachRemaining()` ๋ฉ”์„œ

lcoding.tistory.com

 

 

- Wirter

 

[Servlet&JSP] PrintWriter out = response.getWriter(); ์˜ ๋™์ž‘ ์›๋ฆฌ

ํด๋ผ์ด์–ธํŠธ๋กœ๋ถ€ํ„ฐ Servlet์œผ๋กœ ์š”์ฒญ์ด ๋“ค์–ด์˜ค๋ฉด ์š”์ฒญ(Request)์„ ํŒŒ์•…ํ•œ ํ›„ ์‘๋‹ต(Response)์„ ์ „๋‹ฌํ•œ๋‹ค. Servlet์œผ๋กœ ๋“ค์–ด์˜จ ์š”์ฒญ์„ ํ…์ŠคํŠธ(HTML) ํ˜•ํƒœ๋กœ ์‘๋‹ต์„ ๋ณด๋‚ด๋ ค๋ฉด ์•„๋ž˜์™€ ๊ฐ™์ด ์‘๋‹ต์œผ๋กœ ๋‚ด๋ณด๋‚ผ ์ถœ

charliecharlie.tistory.com

 

 

 

 

 

 

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

 

: ์ถœ์ฒ˜ ์˜ˆ์Šค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

 

+ Recent posts