[ ๋กœ๋˜, ๋ฒ„ํŠผ ๋ˆŒ๋Ÿฌ ๋žœ๋คํ•œ ์ˆซ์ž 6๊ฐœ ์ถœ๋ ฅํ•˜๊ธฐ ]

 

Spring - [intelliJ,Thymeleaf] ๋กœ๋˜, ๋ฒ„ํŠผ ๋ˆŒ๋Ÿฌ ๋žœ๋ค ์ˆซ์ž 6๊ฐœ ์ถœ๋ ฅํ•˜๊ธฐ

[ ๋ฒ„ํŠผ ๋ˆ„๋ฅด๋ฉด Hello,World! ์ถœ๋ ฅ ] Spring - [intelliJ] ๋ฒ„ํŠผ ๋ˆ„๋ฅด๋ฉด Hello,World! ์ถœ๋ ฅ[ Hello,World ์ถœ๋ ฅํ•˜๊ธฐ ] Spring - [IntelliJ] Hello World ์ถœ๋ ฅํ•˜๊ธฐ[ Spring MVC์— ๋Œ€ํ•˜์—ฌ ] Spring - Spring MVC๋ฅผ ์•Œ์•„์•ผ ์‹œ์ž‘์ด ๊ฐ€๋Šฅํ•˜๋‹ค

post-this.tistory.com

 

 


 

 

๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด
๊ณ„์†ํ•ด์„œ ๋žœ๋คํ•œ ๋ฒˆํ˜ธ๊ฐ€ ์ถœ๋ ฅ๋œ๋‹ค.

 

 

 

 

1. ๋™์ž‘ํ™”๋ฉด๊ณผ ์ „์ฒด์ฝ”๋“œ

 

 

๋™์ž‘ํ™”๋ฉด

 

 

 

์ „์ฒด์ฝ”๋“œ

 

 

GitHub - hyeong-ing/LuckyLotto: ๋กœ๋˜ ๋ฒˆํ˜ธ๊ฐ€ ์ถœ๋ ฅ๋˜๋Š” ์›น์‚ฌ์ดํŠธ์ž…๋‹ˆ๋‹ค.

๋กœ๋˜ ๋ฒˆํ˜ธ๊ฐ€ ์ถœ๋ ฅ๋˜๋Š” ์›น์‚ฌ์ดํŠธ์ž…๋‹ˆ๋‹ค. Contribute to hyeong-ing/LuckyLotto development by creating an account on GitHub.

github.com

 

 

 

 

 


 

 

 

 

 

 

2. ์–ด๋–ป๊ฒŒ ๋งŒ๋“ค์ง€ ์ƒ๊ฐํ•˜๊ธฐ ๐Ÿ‘จ๐Ÿป‍๐Ÿ’ป

 

๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด 6๊ฐœ์˜ ์ˆซ์ž๊ฐ€ ๋žœ๋ค์œผ๋กœ ์ถœ๋ ฅ๋˜๋„๋ก ๋งŒ๋“ค์—ˆ๋‹ค.

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

์ตœ๋Œ€ํ•œ ์•„๋Š” ์ง€์‹ ์„ ์—์„œ ์ƒ๊ฐํ•ด๋ณด๊ธฐ๋กœ ํ–ˆ๋‹ค.

 

 

 

[ ์›ํ•˜๋Š” ์ด๋ฏธ์ง€ ]

 

 

 

 

 

[ ๋ณ€๊ฒฝ์‚ฌํ•ญ ]

 

โ–ก ์›ํ˜• ๋ชจํ˜• ์•ˆ์— ๊ฐ๊ฐ 6๊ฐœ์˜ ์ˆซ์ž๊ฐ€ ์ถœ๋ ฅ๋˜๊ธฐ.

     โ–ป  TreeSet์œผ๋กœ ๋ฐ›์€ ์ˆซ์ž๋ฅผ ๋”ฐ๋กœ ๋ฐ›์•„์•ผํ•œ๋‹ค.

     โ–ป  ์—ฌ์ „ํžˆ ์ค‘๋ณตX๊ณผ ์˜ค๋ฆ„์ฐจ์ˆœ์ด ์œ ์ง€๋˜์–ด์•ผํ•œ๋‹ค.

     โ–ป  ArrayList๋กœ ๋ณ€ํ™˜ํ•˜๋ฉด ๋  ๊ฒƒ ๊ฐ™๋‹ค.

 

โ–ก ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด ๊ณ„์†ํ•ด์„œ ์ˆซ์ž ๋ณ€๊ฒฝ๋˜๊ธฐ.

     โ–ป  @GetMapping์„ ์œ ์ง€ํ•˜๋ฉด์„œ ๋ฐ”๊พธ๊ณ  ์‹ถ๋‹ค.

     โ–ป  ๋ฌดํ•œ ์ˆœํ™˜ ๊ตฌ์กฐ๋กœ ๋งŒ๋“ค์–ด๋ณด๋ฉด ๋˜์ง€์•Š์„๊นŒ?

 

 

 

 

 


 

 

 

 

 

3. ์›ํ˜•์„ ๋งŒ๋“ค๊ณ  ๊ฐ ์›ํ˜•์— ๋กœ๋˜ ์ˆซ์ž ๋‹ด๊ธฐ.

 

โ–ก TreeSet์œผ๋กœ ๋‹ด์€ ๋žœ๋ค ์ˆซ์ž๋ฅผ ArrayList๋กœ ๋ณ€ํ˜•ํ•œ๋‹ค.

 

Random1.java

List<Integer> lottoList = new ArrayList<>(lottoSet);

model.addAttribute("Number1",lottoList.get(0));
model.addAttribute("Number2",lottoList.get(1));
model.addAttribute("Number3",lottoList.get(2));
model.addAttribute("Number4",lottoList.get(3));
model.addAttribute("Number5",lottoList.get(4));
model.addAttribute("Number6",lottoList.get(5));

 

 

TreeSet์˜ ํŠน์„ฑ์€ ์ค‘๋ณต์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š์œผ๋ฉด์„œ, ์ด์ง„ํƒ์ƒ‰ ํŠธ๋ฆฌ์˜ ๊ตฌ์กฐ๋กœ ์˜ค๋ฆ„์ฐจ์ˆœ ๋ฐฐ์—ด์ด ์ด๋ค„์ง„๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ์—ฌ๊ธฐ๊นŒ์ง„ ์›ํ•˜๋Š” ๋ถ€๋ถ„์ด์—ˆ์ง€๋งŒ, Set์€ ๊ฐ ์ธ๋ฑ์Šค๋กœ ์š”์†Œ๋“ค์„ ๊ด€๋ฆฌํ•˜์ง€ ์•Š๋Š”๋‹ค. ๊ทธ๋ ‡๊ธฐ์— 6๊ฐœ์˜ ์ˆซ์ž๋ฅผ ๋”ฐ๋กœ๋”ฐ๋กœ ์›ํ˜• ์•ˆ์— ๋„ฃ๋Š” ๋ฐฉ๋ฒ•์ด ์—†์—ˆ๋‹ค. ๊ทธ๋ž˜์„œ ArrayList<>๋กœ Set์ธ lottoSet์„ ๋ณ€ํ™˜์‹œ์ผฐ๋‹ค. ArrayList๋Š” ์ˆœ์„œ๋ฅผ ๋ณด์žฅํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ํŠน์„ฑ์ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ๋‚˜์—ด๋˜์–ด์žˆ์„ lottoSet์˜ ์ˆœ์„œ๋ฅผ ์œ ์ง€ํ•ด์ค„๊ฑฐ๋ผ ์ƒ๊ฐํ–ˆ๋‹ค. (๋ณธ๋ž˜ ArrayList๋Š” ์ค‘๋ณต์„ ํ—ˆ์šฉํ•˜๋ฉฐ ๋“ค์–ด์˜จ ์ˆœ์„œ๋ฅผ ๋ณด์žฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ฒ˜์Œ๋ถ€ํ„ฐ ๋žœ๋ค ์ˆซ์ž๋ฅผ ArrayList๋กœ ๋ฐ›์ง€ ์•Š์•˜๋‹ค.)

 

์ด์ œ ArrayList๋กœ ๋ณ€ํ˜•๋œ lottoList๋ฅผ ๋‚˜๋ˆ ์„œ html์— ์žˆ๋Š” ๋ณ€์ˆ˜์— ๋ณด๋‚ผ ๊ฒƒ์ด๋‹ค. ์ด๋•Œ ๋ณ€์ˆ˜๋Š” Number1 ~  Number6์ด ๋œ๋‹ค.

 

 

 

โ–ก  style.css์— ๋“ค์–ด๊ฐ„๋‹ค.

.circle-red {
    display:inline-block;
    width:80px;
    height:80px;
    border-radius:50%;
    background-color:#F5A9A9;
    text-align:center;
}

 

[๋นจ-์ฃผ-๋…ธ-์ดˆ-ํŒŒ-๋‚จ] ์ˆœ์„œ๋กœ ์—ฐ๊ฒฐ๋˜์–ด ๋ณด์ด๋„๋ก display์— inline-block์„ ์ ์–ด์ฃผ์—ˆ๋‹ค. display๋Š” ์–ด๋–ป๊ฒŒ ํ‘œ์‹œํ• ์ง€ ๊ฒฐ์ •ํ•  ๋•Œ ์“ด๋‹ค. ์—ฌ๊ธฐ์„œ inline-block์€ block์˜ ๋ชจ์–‘์€ ์œ ์ง€๋˜๋ฉด์„œ ์˜†์œผ๋กœ ๋‚˜์—ดํ•˜๊ณ  ์‹ถ์€ ๊ฒฝ์šฐ ์‚ฌ์šฉํ•œ๋‹ค. border-radius๋Š” ํ…Œ๋‘๋ฆฌ ๊ตด๊ณก์œผ๋กœ 50%๋กœ ์„ค์ •ํ•˜์—ฌ ์›ํ˜•์œผ๋กœ ๋งŒ๋“ค์–ด์ค€๋‹ค. 100%๋กœ ํ•˜๋ฉด width์™€ height์˜ ๋น„์œจ์ด ๋‹ค๋ฅธ ๊ฒฝ์šฐ ํƒ€์›ํ˜•์ด ๋  ์ˆ˜ ์žˆ๋‹ค. ํ•˜์ง€๋งŒ 50%๋Š” ๋น„์œจ์ด ๋‹ฌ๋ผ๋„ ์˜จ์ „ํ•œ ์›ํ˜•์œผ๋กœ ๋ณด์—ฌ์ง„๋‹ค.

 

์—ฌ๊ธฐ์„œ background-color๋งŒ ๋‹ค๋ฅด๊ฒŒ ํ•˜๋ฉด ์ด 6๊ฐœ์˜ ์›ํ˜•์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.

 

 

 

โ–ก ๋งŒ๋“  ์›ํ˜•์— lottoList์— ์žˆ๋Š” ์ธ๋ฑ์Šค ์ˆซ์ž ๋„ฃ๊ธฐ.

 

button1.html

<div class="circle-red">
    <h1 th:text="${Number1}"> RandomNumber </h1>
</div>

 

๋ณ€์ˆ˜ Number1์€ ๋™์ ์ธ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜์˜ํ•˜๋‹ˆ th๋ฅผ ์„ ์–ธํ•œ๋‹ค. ์•„๊นŒ Random1.java์— ์žˆ๋˜ lottoList์˜ 0๋ฒˆ์งธ ์ธ๋ฑ์Šค์— ์ ‘๊ทผํ•˜์—ฌ Number1์— ๊ฐ’์„ ๋ณด๋‚ด์ค„ ๊ฒƒ์ด๋‹ค. ๊ทธ๋ ‡๊ฒŒ ๋งŒ๋“  ๋‹ค๋ฅธ ์ƒ‰์˜ ์›ํ˜•์„ class๋กœ ์ •์˜ํ•˜๊ณ  ๋ณ€์ˆ˜๋ฅผ ์ž…๋ ฅํ•˜๋ฉด ๋‚˜๋จธ์ง€ ์ธ๋ฑ์Šค๋„ ๋‚˜ํƒ€๋‚  ๊ฒƒ์ด๋‹ค.

 

 

 


 

 

 

 

4. ์ˆœํ™˜๊ตฌ์กฐ ๋งŒ๋“ค๊ธฐ.

 

์ „์—๋Š” ๋žœ๋ค ๋ฒˆํ˜ธ๋ฅผ ๋”ฑ ํ•œ ๋ฒˆ ๋ฐ›์„ ์ˆ˜ ์žˆ์—ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ด๋ฒˆ์—๋Š” ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด ๊ณ„์†ํ•ด์„œ ๋žœ๋ค ์ˆซ์ž๋ฅผ ๋ฐ›์„ ์ˆ˜ ์žˆ๋„๋ก ๋งŒ๋“ค๊ณ ์ž ํ•œ๋‹ค. 

 

์•Œ๊ณ ์žˆ๋Š” ๊ฐœ๋…์—์„œ ์›ํ•˜๋Š” ๋ชฉํ‘œ๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•ด, ์ˆซ์ž๊ฐ€ ๋ณด์—ฌ์งˆ ํ™”๋ฉด 3๊ฐœ์™€ Controller 3๊ฐœ๋ฅผ ๋งŒ๋“ค์–ด ์ˆœํ™˜ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๋งŒ๋“ค๊ธฐ๋กœ ํ–ˆ๋‹ค. Button1์—์„œ ๋ฒ„ํŠผ์ด ๋ˆŒ๋ฆฌ๋ฉด ์ปจํŠธ๋กค๋Ÿฌ์ธ Random1๋กœ ๋„์ฐฉํ•œ๋‹ค. ๊ทธ ํ›„ ์‹คํ–‰๋œ ๋ฉ”์„œ๋“œ์˜ ๊ฐ’์€ Button2๋กœ ๋ณด๋‚ธ๋‹ค. Button2์—์„œ ๋ฒ„ํŠผ์ด ๋ˆŒ๋ฆฌ๋ฉด Random2 ์ปจํŠธ๋กค๋Ÿฌ๋กœ ํ–ฅํ•˜๊ณ  ๋ฉ”์„œ๋“œ์˜ ๊ฒฐ๊ณผ๋Š” Button3์œผ๋กœ ๊ฐ€๊ฒŒ๋œ๋‹ค. Button3์—์„œ ๋ฒ„ํŠผ์ด ๋ˆŒ๋ฆฌ๋ฉด Random1๋กœ ๋‹ค์‹œ ๋Œ์•„์˜ค๊ฒŒ ๋งŒ๋“ค์—ˆ๋‹ค. ๊ทธ ํ›„ Random1์—์„œ ์ฒ˜๋ฆฌ๋œ ๊ฒฐ๊ณผ๋Š” Button1์—์„œ ์ถœ๋ ฅ๋˜๋„๋ก ๋งŒ๋“ค์—ˆ๋‹ค.

 

<form th:action="@{/Random1}" method = "get">
    <button class="btn" type="submit" > ๋ฒ„ํŠผ </button>
</form>

 

utton1.html์—์„œ ๋ฒ„ํŠผ์ด ๋ˆŒ๋ฆฌ๋ฉด Random1 ๊ฒฝ๋กœ๋ฅผ ๊ฐ€์ง„ Controller๋กœ ์ „์†ก๋œ๋‹ค. 

 

@GetMapping("/Random1")
public String randomPage1(Model model) 

๊ทธ๋Ÿผ Random1.java์— ์žˆ๋Š” GetMapping("/Random1")์œผ๋กœ ๋ฐ›๊ฒŒ๋œ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด randomPage1 ๋ฉ”์„œ๋“œ๊ฐ€ ์‹คํ–‰๋œ๋‹ค.

 

Set<Integer> lottoSet = new TreeSet<>();

while(true) {
    int ranNum = rd.nextInt(45)+1;
    lottoSet.add(ranNum);

    if(lottoSet.size() == 6) {
        break;
    }
}

List<Integer> lottoList = new ArrayList<>(lottoSet);

model.addAttribute("Number1",lottoList.get(0));
model.addAttribute("Number2",lottoList.get(1));
model.addAttribute("Number3",lottoList.get(2));
model.addAttribute("Number4",lottoList.get(3));
model.addAttribute("Number5",lottoList.get(4));
model.addAttribute("Number6",lottoList.get(5));


return "button2";

 ๋žœ๋ค์œผ๋กœ ์ˆซ์ž 6๊ฐœ๋ฅผ TreeSet์œผ๋กœ ๋ฐ›๊ณ  ArrayList๋กœ ๋ณ€ํ™˜ ํ›„, ๊ฐ ์ธ๋ฑ์Šค์— ์ ‘๊ทผํ•˜์—ฌ ๋ณ€์ˆ˜์— ๋„ฃ์–ด button2๋กœ ์ „๋‹ฌํ•˜๊ฒŒ ๋œ๋‹ค.

 

<div class="circle-red">
    <h1 th:text="${Number1}"> RandomNumber </h1>
</div>

<div class="circle-orange">
    <h1 th:text="${Number2}"> RandomNumber </h1>
</div>

<div class="circle-yellow">
    <h1 th:text="${Number3}"> RandomNumber </h1>
</div>

<div class="circle-green">
    <h1 th:text="${Number4}"> RandomNumber </h1>
</div>

<div class="circle-blue">
    <h1 th:text="${Number5}"> RandomNumber </h1>
</div>

<div class="circle-darkblue">
    <h1 th:text="${Number6}"> RandomNumber </h1>
</div>

 ์ด์ œ ๋ฐ›์•„๋‘” ๋ณ€์ˆ˜๊ฐ€ button2.html๋กœ ์ „๋‹ฌ๋˜์–ด ์ถœ๋ ฅ๋œ๋‹ค.

 

<form th:action="@{/Random2}" method = "get">
    <button class="btn" type="submit" > ๋ฒ„ํŠผ </button>
</form>

๊ทธ ํ›„ ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด Random2 ๊ฒฝ๋กœ๋ฅผ ๊ฐ€์ง„ Controller๋ฅผ ์ฐพ๊ฒŒ ๋œ๋‹ค. ์ด๋Ÿฐ์‹์œผ๋กœ ๊ณ„์† ๋ฐ˜๋ณต๋˜๋Š” ๊ตฌ์กฐ๋‹ค. ๋งˆ์ง€๋ง‰ Random3๋Š” button1์œผ๋กœ ์ถœ๋ ฅ๋˜๋ฉฐ  button1์˜ ๋ฒ„ํŠผ์ด ๋ˆŒ๋ฆฌ๋ฉด Random1์˜ ๋ฉ”์„œ๋“œ๊ฐ€ ์‹คํ–‰๋˜์–ด button2์— ๊ฒฐ๊ณผ๊ฐ’์ด ์ถœ๋ ฅ๋˜๊ฒŒ ๋œ๋‹ค.

 

 


 

[ ๋„ค์žŽํด๋กœ๋ฒ„ ์ด๋ฏธ์ง€ ๋„ฃ๋Š” ๋ฐฉ๋ฒ•๊ณผ ๊ธ€์”จ์ฒด ์ ์šฉ ]

 

Spring - [HTML,CSS,Thymeleaf] ์ด๋ฏธ์ง€ ๋„ฃ๊ธฐ, ๋ˆˆ๋ˆ„ ๊ธ€์”จ์ฒด ์‚ฌ์šฉํ•˜๊ธฐ

[ ๋กœ๋˜, ๋ฒ„ํŠผ ๋ˆŒ๋Ÿฌ ๋žœ๋คํ•œ ์ˆซ์ž 6๊ฐœ ์ถœ๋ ฅํ•˜๊ธฐ ]  Spring - [intelliJ,Thymeleaf] ๋กœ๋˜, ๋ฒ„ํŠผ ๋ˆŒ๋Ÿฌ ๋žœ๋ค ์ˆซ์ž 6๊ฐœ ์ถœ๋ ฅํ•˜๊ธฐ(2)[ ๋กœ๋˜, ๋ฒ„ํŠผ ๋ˆŒ๋Ÿฌ ๋žœ๋คํ•œ ์ˆซ์ž 6๊ฐœ ์ถœ๋ ฅํ•˜๊ธฐ ] Spring - [intelliJ,Thymeleaf] ๋กœ๋˜, ๋ฒ„ํŠผ

post-this.tistory.com

 

 

 

๐Ÿชฝ

"ํ‹€๋ฆฐ ๋‚ด์šฉ์ด ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค."

 

 

 

[ ๋ธ”๋กœ๊ทธ์— ์“ด ๋‚ด์šฉ๋“ค์˜ ์ถœ์ฒ˜๋Š” ์•„๋ž˜์— ์ ์–ด๋‘˜ํ…Œ๋‹ˆ

๋“ค์–ด๊ฐ€์„œ ์ฝ์–ด๋ณด์‹œ๋ฉด ๋”์šฑ ๋„์›€์ด ๋˜์‹ค ๋“ฏ ํ•ฉ๋‹ˆ๋‹ค ]

 

 


 

 

- List์™€ Set ์ฐจ์ด

 

List, Set ์–ด๋–ค ๊ฒƒ์„ ์“ฐ๋Š” ๊ฒƒ์ด ์œ ๋ฆฌํ•œ๊ฐ€

๋ฐฐ๊ฒฝ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ(์—ฌ๊ธฐ์— ์ •๋ฆฌ)๋ฅผ ํ’€๋‹ค๊ฐ€ LinkedList ์™€ HashSet ์˜ contains() ์†๋„ ์ฐจ์ด๊ฐ€ ํฌ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ฒŒ ๋˜์—ˆ๋‹ค. ์ง์ ‘ ํ…Œ์ŠคํŠธ ํ•ด๋ณด๊ณ  ์ด๋ฅผ ์ •๋ฆฌํ•˜๋ ค๊ณ  ํ•œ๋‹ค. ์†๋„ ๋น„๊ต 10000000์˜ ์ˆซ์ž๋ฅผ ArrayList, Lin

hanul-dev.netlify.app

 

 

 

- Set์„ ArrayList๋กœ ๋ณ€ํ™˜ ์ถœ์ฒ˜

 

[Java] HashSet์„ ArrayList๋กœ ๋ณ€ํ™˜ํ•˜๊ธฐ

[Java] HashSet์„ ArrayList๋กœ ๋ณ€ํ™˜ํ•˜๊ธฐ HashSet set = new HashSet(); for (int i = 0; i < T; i++) { set.add(br.readLine()); } ArrayList list = new ArrayList(set); ์ค‘๋ณต๋˜๋Š” ๊ฐ’์„ ์ œ์™ธํ•˜๊ณ  ์ €์žฅํ•˜๊ณ  ์‹ถ์€ ๊ฒฝ์šฐ๊ฐ€ ์กด์žฌํ•œ๋‹ค. ์ด๋•Œ HashSe

kim6394.tistory.com

 

 

 

- Set ์ถœ์ฒ˜

 

์ž๋ฐ”[JAVA] : Set - HashSet / TreeSet / LinkedHashSet ์•Œ์•„๋ณด๊ธฐ.

- Set - ์ˆœ์„œ๋ฅผ ์œ ์ง€ํ•˜์ง€ ์•Š๋Š” ๋ฐ์ดํ„ฐ์˜ ์ง‘ํ•ฉ. ๋ฐ์ดํ„ฐ์˜ ์ค‘๋ณต์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค. - ์ธ๋ฑ์Šค๋กœ ์š”์†Œ๋“ค์„ ๊ด€๋ฆฌํ•˜์ง€ ์•Š๋Š”๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๋‚˜์˜ ํŒ๋งค์‚ฌ์ดํŠธ์˜ ํ•˜๋ฃจ ๋ฐฉ๋ฌธ์ž ์ˆ˜(์ค‘๋ณต ์ ‘์†์„ ์ œ์™ธํ•œ)๋ฅผ ๊ตฌํ•˜

doompok.tistory.com

 

 

 

- ArrayList ๊ตฌ์กฐ ์ถœ์ฒ˜

 

๐Ÿงฑ ์ž๋ฐ” ArrayList ๊ตฌ์กฐ & ์‚ฌ์šฉ๋ฒ• ์ •๋ฆฌ

ArrayList ์ปฌ๋ ‰์…˜ ์ž๋ฐ”์˜ ์ปฌ๋ ‰์…˜ ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์ ‘ํ•œ๋‹ค๋ฉด ๊ฐ€์žฅ ๋จผ์ € ๋ฐฐ์šฐ๋Š” ์ปฌ๋ ‰์…˜์ด ArrayList ์ผ ๊ฒƒ์ด๋‹ค. ์ž๋ฃŒ๊ตฌ์กฐ(Data Structure) ์ด๋ผ๊ณ  ํ•ด์„œ ๋ฌด์–ธ๊ฐ€ ๋ฐฉ๋Œ€ํ•˜๊ฒŒ ๋Š๊ปด์ ธ ์ ‘๊ทผ์ด ์–ด๋ ค์šธ ๊ฒƒ ์ฒ˜๋Ÿผ ๋Š๋ผ๊ฒ ์ง€

inpa.tistory.com

 

 

 

- display ์ถœ์ฒ˜

 

[html/css] display ์†์„ฑ (inline, block, none, inline-block ์ฐจ์ด), visibility ์†์„ฑ(visible, hidden, collapse ์ฐจ์ด)

display ์†์„ฑ (inline, block, none ์ฐจ์ด), visibility ์†์„ฑ(visible, hidden, collapse ์ฐจ์ด) ์˜ค๋Š˜ ์•Œ์•„ ๋ณผ ์†์„ฑ์€, ์–ด๋–ค ์š”์†Œ๋ฅผ ํ™”๋ฉด์— ๋ณด์ด๊ฑฐ๋‚˜ ์ˆจ๊ธธ ๋•Œ ์‚ฌ์šฉํ•˜๋Š” display์™€ visibilty ์†์„ฑ์ž…๋‹ˆ๋‹ค. *display์™€ visibilty ์ฐจ์ด

aboooks.tistory.com

 

 

 

- border-radius ์ฐจ์ด

 

border-radius 50% vs 100%

1. border-radius 50% vs 100% ์šฐ๋ฆฌ๋Š” border-radius: 50%๋ฅผ ์ง€์ •ํ•˜์—ฌ ์›์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ํƒ€์ธ์˜ ์ฝ”๋“œ๋ฅผ ๋ณด๋ฉด 50%, 100% ๋“ฑ 2๊ฐ€์ง€๋ฅผ ๋‹ค์–‘ํ•˜๊ฒŒ ์“ฐ๊ณ  ์žˆ๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด border-radius: 50%, 100%์˜ ์ฐจ์ด๋Š” ๋ฌด์—‡์ผ๊นŒ? (

mong-blog.tistory.com

 

 

 

 

 

 

[ ๋ฒ„ํŠผ ๋ˆ„๋ฅด๋ฉด Hello,World! ์ถœ๋ ฅ ]

 

Spring - [intelliJ] ๋ฒ„ํŠผ ๋ˆ„๋ฅด๋ฉด Hello,World! ์ถœ๋ ฅ

[ Hello,World ์ถœ๋ ฅํ•˜๊ธฐ ] Spring - [IntelliJ] Hello World ์ถœ๋ ฅํ•˜๊ธฐ[ Spring MVC์— ๋Œ€ํ•˜์—ฌ ] Spring - Spring MVC๋ฅผ ์•Œ์•„์•ผ ์‹œ์ž‘์ด ๊ฐ€๋Šฅํ•˜๋‹ค.์ฒ˜์Œ์—” ๋Œ€์ถฉ ํ”„๋กœ์ ํŠธ๋ฅผ ์‹œ์ž‘ํ•ด๋ณด๋ คํ–ˆ์ง€๋งŒ,์ด๋Ÿด์ˆ˜๊ฐ€! ์•„๋Š” ๊ฒƒ์ด ๋ฏธ์•ฝํ•˜

post-this.tistory.com

 

 


 

 

๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด
๋žœ๋คํ•œ ์ˆซ์ž 6๊ฐœ ์ถœ๋ ฅํ•˜๊ธฐ

 

 

 

 

1. ๋™์ž‘ํ™”๋ฉด๊ณผ ์ „์ฒด์ฝ”๋“œ

 

๋™์ž‘ํ™”๋ฉด

 

 

 

์ž๋ฐ”์ฝ”๋“œ

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;

import java.util.*;

@Controller
public class RandomNum {

    Random rd = new Random();
    Set<Integer> lottoSet = new TreeSet<>();

    @GetMapping("/")
    public String firstPage() {
        return "button";
    }

    @GetMapping("/Random")
    public String randomPage(Model model) {

        while(true) {
            int ranNum = rd.nextInt(45)+1;
            lottoSet.add(ranNum);

            if(lottoSet.size() == 6) {
                break;
            }
        }

        model.addAttribute("Number",lottoSet);

        return "button";
    }


}

 

 

html ์ฝ”๋“œ

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>๋กœ๋˜ ๋ฒˆํ˜ธ ์ƒ์„ฑ</title>
    <link rel="stylesheet" href="css/style.css" type="text/css">


</head>

<body>

<div class="top">
    <div class="center">
        <h1> <b> ๋กœ๋˜ ๋ฒˆํ˜ธ ์ƒ์„ฑ๊ธฐ </b> </h1>
        <h1> Lotto</h1>


        <div class="numPadding">
            <h1 th:text="${Number}"> RandomNumber </h1>
         </div>

        <div class="padding">
            <form th:action="@{/Random}" method = "get">
                <button class="btn" type="submit" > ๋ฒ„ํŠผ </button>
            </form>
        </div>
    </div>
</div>

</body>
</html>

 

 

css ์ฝ”๋“œ

.top {
    margin-top: 100px;
    margin-bottom: 100px;
    margin-left: 50px;
    margin-right: 50px;
}

.padding {
    padding-top:100px;
    padding-bottom:10px;
    padding-left:auto;
    padding-right:auto;
}

.numPadding {
    padding-top:100px;
    padding-bottom:0px;
    padding-left:0px;
    padding-right:0px;
}


.center {
    text-align: center;
}

.btn {
    background-color: #AC72E5;
    color: white;
    border: none;
    border-radius:20px;
    width:200px;
    height:60px;
    font-size:40px;
    text-align: center;
    cursor: pointer;
}

 

 

 

 


 

 

 

 

2. ์–ด๋–ป๊ฒŒ ๋งŒ๋“ค์ง€ ์ƒ๊ฐํ•˜๊ธฐ ๐Ÿง˜๐Ÿป‍โ™€๏ธ

 

 

๋ฒ„ํŠผ ๋ˆ„๋ฅด๋ฉด Hello,World! ๋ฌธ์žฅ์ด ์ถœ๋ ฅ๋˜๋„๋ก ๋งŒ๋“ค์—ˆ๋‹ค.

์—ฌ๊ธฐ์„œ ์กฐ๊ธˆ๋งŒ ์ฝ”๋“œ๋ฅผ ๋ฐ”๊พธ๋ฉด ๋žœ๋คํ•œ ์ˆซ์ž 6๊ฐœ๋ฅผ ์ถœ๋ ฅ๋˜๋„๋ก ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.

 

 

[ ๋ณ€๊ฒฝ์‚ฌํ•ญ ]

 

โ–ก ํ…์ŠคํŠธ์™€ ๋ฒ„ํŠผ ๊ฐ€์šด๋ฐ ์ •๋ ฌํ•˜๊ธฐ.

     โ–ป  css๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ.

 

โ–ก ๋žœ๋คํ•œ ์ˆซ์ž 6๊ฐœ ์ถœ๋ ฅ (์ค‘๋ณตX, ์˜ค๋ฆ„์ฐจ์ˆœ)

    โ–ป  java.util.Random ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉ

 

 

 

 


 

 

 

 

 

3. ์ฒซ๋ฒˆ์งธ๋กœ ๋ณด์—ฌ์ค„ ํ™”๋ฉด ๋Œ€์ถฉ ๋งŒ๋“ค๊ธฐ.

 

๋””๋ ‰ํ† ๋ฆฌ ์ฐธ๊ณ 

 

 

 

โ–ก Controller ๋””๋ ‰ํ† ๋ฆฌ ๋งŒ๋“ค๊ณ , ๊ทธ ์•ˆ์— RandomNum ํด๋ž˜์Šค ๋งŒ๋“ค๊ธฐ.

 

 

โ–ก RandomNum ํด๋ž˜์Šค์— ์ฒซ ํ™”๋ฉด ๋ฐ˜ํ™˜ํ•˜๋Š” ์ฝ”๋“œ ์ž‘์„ฑํ•˜๊ธฐ.

 

@GetMapping("/")
public String firstPage() {
    return "button";
}

 

์ €๋ฒˆ ์˜ˆ์ œ์—์„œ ์„ค๋ช…์„ ์ ์–ด๋‘์—ˆ์ง€๋งŒ, ์งง๊ฒŒ ์„ค๋ช…ํ•ด๋ณด๊ฒ ๋‹ค. ์š”์ฒญ์ด ๋“ค์–ด์˜ค๋ฉด @GetMapping์€ ๊ด„ํ˜ธ ์•ˆ์— ์žˆ๋Š” ๊ฒฝ๋กœ์™€ ์š”์ฒญ ๊ฒฝ๋กœ๊ฐ€ ๋งž๋Š”์ง€ ๋ณด๊ณ , ๋งž์œผ๋ฉด ํ•ด๋‹น ๋ฉ”์„œ๋“œ๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ํŽ˜์ด์ง€๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค. ํ˜„์žฌ ์ฝ”๋“œ์—์„  ("/")๋กœ ๋ฃจํŠธ ๊ฒฝ๋กœ๋กœ ๋“ค์–ด์˜ค๋ฉด button.html์„ ๋ฐ˜ํ™˜ํ•˜๋ผ๊ณ  ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ–ˆ๋‹ค.

 

 

 

โ–ก  button.html์— ๊ธฐ๋ณธ ๋™์ž‘ ์ฝ”๋“œ ์ž‘์„ฑํ•˜๊ธฐ.

<head>
    <meta charset="UTF-8">
    <title>๋กœ๋˜ ๋ฒˆํ˜ธ ์ƒ์„ฑ</title>
</head>

 

title์€ ํƒญ์˜ ์ด๋ฆ„์„ ์ง€์ •ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

 

 

 

<body>
     <h1> <b> ๋กœ๋˜ ๋ฒˆํ˜ธ ์ƒ์„ฑ๊ธฐ </b> </h1>
     <h1> Lotto</h1>

     <h1 th:text="${Number}"> RandomNumber </h1>
        
     <form th:action="@{/Random}" method = "get">
            <button class="btn" type="submit" > ๋ฒ„ํŠผ </button>
     </form>

</body>

 

body ์•ˆ์— ํ™”๋ฉด์— ์ถœ๋ ฅ๋˜๊ธธ ์›ํ•˜๋Š” ๋ฌธ์žฅ๊ณผ ๋ฒ„ํŠผ์„ ๋งŒ๋“ค์—ˆ๋‹ค. $Number์—๋Š” ๋žœ๋ค์œผ๋กœ ์ถœ๋ ฅํ•œ 6๊ฐœ์˜ ์ˆซ์ž๊ฐ€ ๋‚˜ํƒ€๋‚  ๊ณต๊ฐ„์ด๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ทธ ์•„๋ž˜ ๋ฒ„ํŠผ์„ ๋งŒ๋“ค์—ˆ๋‹ค. ๋ฒ„ํŠผ์ด ๋ˆŒ๋ฆฌ๋ฉด get ๋ฐฉ์‹์œผ๋กœ Controller์—๊ฒŒ ์ „๋‹ฌ๋œ๋‹ค.

 

์ด ์ฝ”๋“œ์˜ ๋™์ž‘ ๋ฐฉ์‹์€ ์ด์ „์— ์ž‘์„ฑํ•œ Hello,World์— ์ž์„ธํ•˜๊ฒŒ ์ ์–ด๋†จ๋‹ค. ํ•˜์ง€๋งŒ ๋ณต์Šตํ• ๊ฒธ ๊ฐ„๋‹จํ•˜๊ฒŒ ์„ค๋ช…์„ ๋ง๋ถ™์—ฌ๋ณด๊ฒ ๋‹ค. ํƒ€์ž„๋ฆฌํ”„๋Š” ์ˆœ์ˆ˜ํ•œ html์„ ์œ ์ง€ํ•˜๋ฉด์„œ ๋™์ ์œผ๋กœ ๋ณ€๊ฒฝ๋œ ๊ฒฐ๊ณผ๋ฅผ ๋ณด์—ฌ์ฃผ๋Š” ํ”„๋กœ๊ทธ๋žจ์ด๋‹ค. ๊ทธ๋ ‡๊ธฐ์— ๋™์ ์ธ ๊ฒฐ๊ณผ๊ฐ€ ๋ฐ˜์˜๋˜์–ด์•ผํ•  ์ฝ”๋“œ์— th๋ฅผ ๋ถ™์—ฌ์ฃผ์—ˆ๋‹ค.

 

๋กœ๋˜ ๋ฒˆํ˜ธ ์ƒ์„ฑ๊ธฐ์™€ Lotto๋Š” ์›€์ง์ด์ง€ ์•Š๋Š”๋‹ค. ํ…์ŠคํŠธ๋กœ ํ™”๋ฉด์— ๊ทธ์ € ์ถœ๋ ฅ๋˜๊ธฐ๋งŒ ํ•˜๋ฉด ๋œ๋‹ค. ํ•˜์ง€๋งŒ ๋ฒ„ํŠผ์˜ ๊ฒฝ์šฐ, ๋ฒ„ํŠผ์ด ๋ˆŒ๋ฆฌ๋ฉด /Random์ด๋ผ๋Š” ๊ฒฝ๋กœ๋ฅผ get ๋ฐฉ์‹์œผ๋กœ Controller์—๊ฒŒ ๋ณด๋‚ธ๋‹ค. ์ด ๋ถ€๋ถ„์€ ๋™์ ์œผ๋กœ ์›€์ง์ด๊ฒŒ ๋˜๋ฏ€๋กœ form์— th๊ฐ€ ๋ถ™๊ฒŒ๋œ ๊ฒƒ์ด๋‹ค. ๊ทธ ์œ„์˜ ์ฝ”๋“œ๋„ ๋งˆ์ฐฌ๊ฐ€์ง€๋‹ค. ์ฒซ ํ™”๋ฉด์—์„  ๋žœ๋คํ•œ ์ˆซ์ž๊ฐ€ ๋‚˜ํƒ€๋‚˜์ง€ ์•Š๋Š”๋‹ค. ํ•˜์ง€๋งŒ ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด ๋‹ค์Œ ํ™”๋ฉด์— ์ˆซ์ž๊ฐ€ ๋‚˜ํƒ€๋‚˜์•ผํ•œ๋‹ค. ์ด๊ฒŒ ๋ฐ”๋กœ ๋™์ ์ธ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜์˜ํ•œ ๊ฒƒ์ด๋‹ค. ๊ทธ๋ ‡๊ธฐ์— ${Number}์— th๊ฐ€ ๋ถ™์€ ๊ฒƒ์ด๋‹ค.

 

์ž ์ด๋ ‡๊ฒŒ ์ž‘์„ฑํ•˜๋ฉด ๋ฒ„ํŠผ์ด ๋ˆŒ๋ฆฌ๋ฉด ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ์ฒซ ํ™”๋ฉด ํŽ˜์ด์ง€๋ฅผ ๋„์› ๋‹ค.

 

 

 

 


 

 

 

 

 

3. css ๋งŒ๋“ค๊ธฐ.

 

์ด ๋ถ€๋ถ„์—์„œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜์—ฌ ์กฐ๊ธˆ ํ—ค๋งธ๋‹ค.

 

 

 

 

โ–ก  resources ์•ˆ์— static ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ๋งŒ๋“ ๋‹ค.

 

โ–ก  static ์•ˆ์— css ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ๋งŒ๋“ ๋‹ค.

 

โ–ก  ๊ทธ๋Ÿฌ๋ฉด ์ €๋ ‡๊ฒŒ static.css๊ฐ€ ์™„์„ฑ๋œ๋‹ค. 

 

โ–ก  static.css ๋ฐ‘์— file - style.css๋ฅผ ๋งŒ๋“ค๋ฉด ๋œ๋‹ค.

 

 

 

 


 

 

 

 

 

3. css ์ฝ”๋“œ ์ž‘์„ฑํ•˜๊ธฐ.

 

 

โ–ก  ๋ชจ๋“  ์š”์†Œ ์ค‘์•™์— ๋ฐฐ์—ดํ•˜๊ธฐ.

.center {
    text-align: center;
}

 

 

 

โ–ก  margin์œผ๋กœ ์—ฌ๋ฐฑ์„ ์ด ์„ธ ๊ฐœ ๋งŒ๋“ค ๊ฒƒ์ด๋‹ค.

 

 

์ด๋ ‡๊ฒŒ ์„ธ๊ตฌ์—ญ์œผ๋กœ ์—ฌ๋ฐฑ์„ ์„ค์ •ํ•  ๊ฒƒ์ด๋‹ค.

์—ฌ๊ธฐ์„œ first๋Š” [๋กœ๋˜๋ฒˆํ˜ธ์ƒ์„ฑ๊ธฐ-Lotto-๋žœ๋ค์ˆซ์ž 6๊ฐœ-๋ฒ„ํŠผ]์„ ๊ฐ์‹ผ ๋ฐ– ๋ถ€๋ถ„์— ์—ฌ๋ฐฑ์„ ๋„ฃ์„ ๊ฒƒ์ด๊ธฐ์—, ์ƒํ•˜์ขŒ์šฐ์— ์›ํ•˜๋Š” ์—ฌ๋ฐฑ์˜ ํฌ๊ธฐ๋ฅผ ์ž…๋ ฅํ–ˆ๋‹ค.

 

.first {
    margin-top: 100px;
    margin-bottom: 100px;
    margin-left: 50px;
    margin-right: 50px;
}

.second {
    margin-top: 100px;
    margin-bottom: 0px;
    margin-left: 0px;
    margin-right: 0px;
}

.third {
    margin-top: 200px;
    margin-bottom: 0px;
    margin-left: 0px;
    margin-right: 0px;
}

 

 

 

 

 

โ–ก  ๋ฒ„ํŠผ ์ปค์Šคํ…€ํ•˜๊ธฐ.

.btn {
    background-color: #AC72E5;
    color: white;
    border: none;
    border-radius:20px;
    width:200px;
    height:60px;
    font-size:40px;
    text-align: center;
    cursor: pointer;
}

 

background-color๋Š” ์ž์‹ ์ด ์›ํ•˜๋Š” ๋ฐฐ๊ฒฝ์ƒ‰์„ ๋„ฃ์œผ๋ฉด ๋œ๋‹ค. ๊ฒ€์ƒ‰์ฐฝ์— ์ปฌ๋Ÿฌ์ฐจํŠธ๋ผ๊ณ  ๊ฒ€์ƒ‰ํ•˜๋ฉด ๋‹ค์–‘ํ•œ ์‚ฌ์ดํŠธ๊ฐ€ ๋œฌ๋‹ค. ์•„๋ฌด ๊ณณ์— ๋“ค์–ด๊ฐ€ ์›ํ•˜๋Š” ์ปฌ๋Ÿฌ๋ฅผ ์„ ํƒํ•˜์—ฌ HEX ์ฝ”๋“œ๋ฅผ ๋ณต์‚ฌํ•˜์—ฌ ๋„ฃ์œผ๋ฉด ๋œ๋‹ค. color๋Š” ๊ธ€์ž ์ƒ‰์ƒ์ด ๋˜๊ณ  ์ด๊ฒƒ๋„ ์›ํ•˜๋Š” ์ƒ‰์œผ๋กœ ๋ณ€๊ฒฝํ•˜๋ฉด ๋œ๋‹ค. border๋Š” ํ…Œ๋‘๋ฆฌ, border-radius๋Š” ํ…Œ๋‘๋ฆฌ์˜ ๊ณก์„ ์„ ์˜๋ฏธํ•œ๋‹ค. ์•ฝ๊ฐ„ ๋‘ฅ๊ทผ ๋ฒ„ํŠผ์„ ์›ํ•ด์„œ 20px๋กœ ์ ์–ด์ฃผ์—ˆ๋‹ค. width์™€ height๋Š” ๋ฒ„ํŠผ ๋„ˆ๋น„์™€ ๋†’์ด๊ฐ€ ๋˜๊ณ , font-size๋Š” ๊ธ€์ž ํฌ๊ธฐ, text-align์€ ๊ธ€์ž ์ค‘์•™๋ฐฐ์—ด์„ ์˜๋ฏธํ•œ๋‹ค. cursor๋Š” ๋ฒ„ํŠผ ์œ„์— ๋ˆŒ๋ €์„ ๋•Œ ๋งˆ์šฐ์Šค ๋ชจ์–‘์ด ๋ณ€๊ฒฝ๋˜๋„๋ก ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

 

์ปค์„œ ๋ชจ์–‘ ๋ณ€๊ฒฝ

 

 

 

 


 

 

 

 

4. html์— css ์ ์šฉ์‹œํ‚ค๊ธฐ.

 

 

โ–ก  html์— css ์—ฐ๊ฒฐํ•˜๊ธฐ.

<head>
    <meta charset="UTF-8">
    <title>๋กœ๋˜ ๋ฒˆํ˜ธ ์ƒ์„ฑ</title>
    <link rel="stylesheet" href="css/style.css" type="text/css">
</head>

 

head์— ๋งŒ๋“ค์–ด๋‘” css๋ฅผ link๋ฅผ ํ†ตํ•ด ์—ฐ๊ฒฐํ•  ๊ฒƒ์ด๋‹ค. rel์€ ์†์„ฑ ๊ฐ’์œผ๋กœ ๋ฐ˜๋“œ์‹œ ์ ์–ด์ค˜์•ผํ•œ๋‹ค. ๊ฐ’์œผ๋กœ "stylesheet"๋ฅผ ์ ์—ˆ๋‹ค. ์˜๋ฏธ๋Š” ๋งํฌ๋œ ํŒŒ์ผ์„ ์Šคํƒ€์ผ์‹œํŠธ๋กœ ์‚ฌ์šฉํ•˜๊ฒ ๋‹ค๊ณ  ์•Œ๋ฆฌ๋Š” ๊ฒƒ์ด๋‹ค. href๋Š” ์Šคํƒ€์ผ์‹œํŠธ๊ฐ€ ์žˆ๋Š” ๊ฒฝ๋กœ๋ฅผ ์ ์–ด์ฃผ๊ณ  type์—” ๋งํฌ๋œ ํŒŒ์ผ์˜ ํƒ€์ž…์„ ์ง€์ •ํ•œ๋‹ค. 

 

 

 

โ–ก  css ์ ์šฉ์‹œํ‚ค๊ธฐ.

<div class="first">
    <div class="center">
        <h1> <b> ๋กœ๋˜ ๋ฒˆํ˜ธ ์ƒ์„ฑ๊ธฐ </b> </h1>
        <h1> Lotto</h1>


        <div class="second">
            <h1 th:text="${Number}"> RandomNumber </h1>
         </div>

        <div class="third">
            <form th:action="@{/Random}" method = "get">
                <button class="btn" type="submit" > ๋ฒ„ํŠผ </button>
            </form>
        </div>
    </div>
</div>

 

css์—์„œ .first์— ์„ค์ •ํ•œ margin(์—ฌ๋ฐฑ)์„ ๋ชจ๋“  ์š”์†Œ์— ์ ์šฉ์‹œํ‚ค๊ธฐ ์œ„ํ•ด ๊ฐ€์žฅ ์ฒซ๋ฒˆ์งธ๋กœ ์ ์–ด์ฃผ์—ˆ๋‹ค. css ์š”์†Œ๋ฅผ ์ ์šฉ์‹œํ‚ฌ๋•Œ ์ง€์ •ํ•œ ์ด๋ฆ„์—์„œ ์˜จ์ ์„ ๋บ€ ์ด๋ฆ„์„ class=" "์— ์ ์–ด์ฃผ๋ฉด ๋œ๋‹ค. ์ด์–ด์„œ ๋ชจ๋“  ์š”์†Œ์— ์ ์šฉ์‹œํ‚ฌ ๊ฐ€์šด๋ฐ ์ •๋ ฌ์„ ๊ทธ ๋‹ค์Œ์œผ๋กœ ์ ์–ด ๊ธฐ๋ณธ์ ์ธ ํ…Œ๋‘๋ฆฌ๋ฅผ ๋งŒ๋“ค์—ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ์ด์ œ ์ด ์•ˆ์— ๋“ค์–ด๊ฐˆ ์š”์†Œ๋“ค์€ ๊ฐ€์šด๋ฐ ์ •๋ ฌ์„ ํฌํ•จํ•˜์—ฌ ์ƒ•ํ•˜ 100px, ์ขŒ•์šฐ 50px๊ฐ€ ๋„์–ด์ ธ์„œ ์‹œ์ž‘๋  ๊ฒƒ์ด๋‹ค. 

 

๋žœ๋คํ•œ ์ˆซ์ž 6๊ฐœ๊ฐ€ Lotto์™€ ๋–จ์–ด์ ธ์„œ ์œ„์น˜ํ•˜๊ธธ ์›ํ•˜๋ฏ€๋กœ ์ƒ 100px๋งŒ ๋„์–ด์ง„ .second๋ฅผ class์— ๋„ฃ์–ด์ค€๋‹ค. ๊ทธ ํ›„ 6๊ฐœ์˜ ๋žœ๋ค ์ˆซ์ž์™€ ๋ฒ„ํŠผ์ด ์ผ์ •๊ฐ„๊ฒฉ ๋–จ์–ด์ง€๊ธธ ์›ํ•˜๋‹ˆ .third๋ฅผ ์ ์–ด ๊ฐ์‹ธ์ค€๋‹ค.

 

๋งˆ์ง€๋ง‰์œผ๋กœ ๋ฒ„ํŠผ์—๋Š” <button class="btn"...>์„ ์ ์–ด css๋ฅผ ์ ์šฉ์‹œํ‚จ๋‹ค.

 

 

 

 


 

 

 

 

5. ๋žœ๋คํ•œ ์ˆซ์ž ๋‚˜์˜ค๋„๋ก ์ถœ๋ ฅํ•˜๊ธฐ.

 

โ–ก ์ „์ฒด์ฝ”๋“œ

@Controller
public class RandomNum {

    Random rd = new Random();
    Set<Integer> lottoSet = new TreeSet<>();

    @GetMapping("/")
    public String firstPage() {
        return "button";
    }

    @GetMapping("/Random")
    public String randomPage(Model model) {

        while(true) {
            int ranNum = rd.nextInt(45)+1;
            lottoSet.add(ranNum);

            if(lottoSet.size() == 6) {
                break;
            }
        }

        model.addAttribute("Number",lottoSet);

        return "button";
    }


}

 

 

 

 

โ–ก ๋žœ๋ค์„ ์‚ฌ์šฉํ•  ํ•จ์ˆ˜ ์ •์˜

Random rd = new Random();
Set<Integer> lottoSet = new TreeSet<>();

 

Java์—์„œ ์ œ๊ณตํ•˜๋Š” Random ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ rd๋ผ๊ณ  ๋ณ€์ˆ˜๋ช…์„ ๋„ฃ์—ˆ๋‹ค. ์ดˆ๋ฐ˜์— ์–ด๋–ค ์‹์œผ๋กœ ๋งŒ๋“ค์ง€ ๊ตฌ์ƒํ•  ๋•Œ, ์ค‘๋ณต์ด ์—†์œผ๋ฉด์„œ ์˜ค๋ฆ„์ฐจ์ˆœ ๋ฐฐ์—ด๋กœ ๋‚˜์˜ค๋Š” ๊ฑธ ์›ํ–ˆ๋‹ค. ๊ทธ๋ž˜์„œ TreeSet์„ ์‚ฌ์šฉํ•˜์—ฌ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ–ˆ๋‹ค. TreeSet์€ ์ด์ง„๊ฒ€์ƒ‰ํŠธ๋ฆฌ์˜ ํ˜•ํƒœ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ์ปฌ๋ ‰์…˜ ํด๋ผ์Šค์ธ๋ฐ, ์ด์ง„๊ฒ€์ƒ‰ํŠธ๋ฆฌ ์ค‘ ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œํ‚จ ๋ ˆ๋“œ-๋ธ”๋ž™ ํŠธ๋ฆฌ๋กœ ์ด๋ค„์ ธ์žˆ๋‹ค. ์•„๋งˆ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ณต๋ถ€๋ฅผ ํ•˜๊ฑฐ๋‚˜, ์ˆ˜์—…์„ ๋“ค์€ ์‚ฌ๋žŒ์ด๋ผ๋ฉด ๋“ค์–ด๋ดค์„ ๊ฒƒ์ด๋‹ค. 

 

Set ์ธํ„ฐํŽ˜์ด์Šค๋Š” ์ค‘๋ณต์„ ํ—ˆ์šฉํ•˜์ง„ ์•Š์ง€๋งŒ, ์ €์žฅ ์ˆœ์„œ๋Š” ์ƒ๊ด€ํ•˜์ง€ ์•Š๋Š”๋‹ค. HashSet์„ ์‚ฌ์šฉํ•˜๋ฉด ๋กœ๋˜๋ฒˆํ˜ธ์ถœ๋ ฅ์—์„œ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ œ๋Œ€๋กœ ์ด๋ค„์ง€์ง€ ์•Š๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ TreeSet์„ ์‚ฌ์šฉํ•˜๋ฉด ๋ถ€๋ชจ๋…ธ๋“œ์™€ ์™ผ์ชฝ ๋…ธ๋“œ๋ฅผ ๋น„๊ตํ•˜์—ฌ ์ž๋ฆฌ๋ฅผ ๋ฐ”๊พธ๋Š” ๊ณผ์ •์ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ๋‚˜์—ด๋œ ๊ฐ’์„ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค. ์ด์— ๋Œ€ํ•œ ์„ค๋ช…์€ ๋‚˜์ค‘์— ์˜ฌ๋ ค๋ณด๋„๋ก ํ•˜๋ฉฐ, ์ดํ•ดํ•˜๊ธฐ ์‰ฌ์šด ๋ธ”๋กœ๊ทธ๋ฅผ ์ถœ์ฒ˜์— ๋‚จ๊ฒจ๋†“๊ฒ ๋‹ค.

 

 

๊ทธ๋ ‡๊ฒŒ TreeSet์„ ์ด์šฉํ•˜์—ฌ ๋žœ๋ค ์ˆซ์ž๋ฅผ lottoSet์— ์ €์žฅ๋˜๋„๋ก ๋งŒ๋“ค์—ˆ๋‹ค.

 

 

 

โ–ก ๋žœ๋ค์œผ๋กœ ์ˆซ์ž 6๊ฐœ ์ถœ๋ ฅํ•˜๊ณ  ๋ฐ˜ํ™˜ํŽ˜์ด์ง€์™€ ์—ฐ๊ฒฐํ•˜๊ธฐ.

@GetMapping("/Random")
public String randomPage(Model model) {

    while(true) {
        int ranNum = rd.nextInt(45)+1;
        lottoSet.add(ranNum);

        if(lottoSet.size() == 6) {
            break;
        }
    }

    model.addAttribute("Number",lottoSet);

    return "button";
}

 

@GetMapping์— ๋“ค์–ด์˜ฌ ๊ฒฝ๋กœ๋ฅผ ์ ์–ด์ค€๋‹ค. ํ˜„์žฌ ์ฝ”๋“œ์—์„  /Random์ด๋ผ ์ ์—ˆ๋Š”๋ฐ ๊ทธ ์ด์œ ๋Š” ๋ฒ„ํŠผ์ด ๋ˆŒ๋ฆฌ๊ฒŒ ๋˜๋ฉด form์—์„œ Random ๊ฒฝ๋กœ๋ฅผ get ๋ฐฉ์‹์œผ๋กœ Controller์—๊ฒŒ ๋ณด๋‚ด๋„๋ก ์ž‘์„ฑํ–ˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๊ทธ๋ ‡๊ธฐ์— ์š”์ฒญ ๊ฒฝ๋กœ์— ๋งž๊ฒŒ ์ˆ˜ํ–‰ํ•  ๋ฉ”์„œ๋“œ๋ฅผ ์—ฐ๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด @GetMapping์— /Random์„ ์ž‘์„ฑํ–ˆ๋‹ค.

 

์ž ์ด์ œ ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด randomPage ๋ฉ”์„œ๋“œ๋Š” ์ˆ˜ํ–‰๋  ๊ฒƒ์ด๋‹ค. ๊ฐ€์žฅ ์ฒซ๋ฒˆ์งธ ์ฝ”๋“œ์ธ while๋ฌธ์œผ๋กœ ๊ฐ„๋‹ค. lottoSet์˜ ํฌ๊ธฐ๊ฐ€ 6์ด ์•„๋‹ˆ๋ผ๋ฉด while์€ ๊ณ„์† true์ผ ๊ฒƒ์ด๊ณ , ๋žœ๋คํ•œ ์ˆซ์ž๋ฅผ ๋ฝ‘์„ ๊ฒƒ์ด๋‹ค. ์—ฌ๊ธฐ์„œ nextInt(45)+1์˜ ์˜๋ฏธ๋Š”, 45 = 0 ~ 44๊นŒ์ง€์˜ ์ด 45๊ฐœ, +1 = 1์”ฉ ๋”ํ•œ 1 ~ 45๋กœ ๋ฐ”๊พผ ๊ฒƒ์ด ๋œ๋‹ค.

 

๋žœ๋ค ์ˆซ์ž์— ๋Œ€ํ•ด ๊ฒ€์ƒ‰์„ ํ•˜๊ฒŒ๋˜๋ฉด for๋ฌธ์ด ๊ฐ€์žฅ ๋งŽ์ด ๋‚˜์˜ฌ ๊ฒƒ์ด๋‹ค. ๋ฌผ๋ก  for๋ฌธ์œผ๋กœ ์ž‘์„ฑ๊ฐ€๋Šฅํ•˜๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ๋‚˜๋Š” while๋ฌธ ์‚ฌ์šฉ์„ ์ž˜ ์•ˆํ•ด๋ด์„œ while๋ฌธ์œผ๋กœ ์ž‘์„ฑํ–ˆ๋‹ค. for๋ฌธ ์ฝ”๋“œ๋Š” ์•„๋ž˜์— ์˜ฌ๋ ค๋†“๊ฒ ๋‹ค.

 

์ด์ œ ๋งˆ์ง€๋ง‰์œผ๋กœ Model์„ ์ด์šฉํ•˜์—ฌ ๋žœ๋ค ์ˆซ์ž 6๊ฐœ์˜ ๋ฐฐ์—ด์„ ๋ทฐ ํ…œํ”Œ๋ฆฟ์œผ๋กœ ๋ณด๋‚ด๊ธฐ๋งŒ ํ•˜๋ฉด ๋œ๋‹ค. Model์— ๊ด€ํ•œ ์„ค๋ช…๋„ ์•ž์— ํ–ˆ๋˜ Hello,World!์— ์ ์–ด๋’€๋‹ค. ์—ฌ๊ธฐ์„œ ๋ณต์Šตํ•  ๊ฒธ ๊ฐ„๋‹จํžˆ ์„ค๋ช…ํ•˜์ž๋ฉด, ๋ฐ์ดํ„ฐ๋ฅผ ๋ทฐ๋กœ ์ „๋‹ฌํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๊ฐ์ฒด๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค. ๊ทธ๋ ‡๊ฒŒ html์— ์žˆ๋Š” Number์— lottoSet์„ ๋ณด๋‚ด๊ณ  return์„ ํ†ตํ•ด ๋‹ค์‹œ button ํŽ˜์ด์ง€๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋„๋ก ํ–ˆ๋‹ค.

 

 

 

 

โ–ก for๋ฌธ์„ ์ด์šฉํ•˜์—ฌ ์ž‘์„ฑํ•œ Controller

package com.LottoWeb.LuckyLotto.Controller;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;

import java.util.*;

@Controller
public class RandomNum {

    Random rd = new Random();
    Set<Integer> lottoSet = new TreeSet<>();

    @GetMapping("/")
    public String firstPage() {
        return "button";
    }

    @GetMapping("/Random")
    public String randomPage(Model model) {

        for(int i=1; lottoSet.size() < 6; i++ ){
            int ranNum = rd.nextInt(45)+1;
            lottoSet.add(ranNum);
        }

        model.addAttribute("Number",lottoSet);

        return "button";
    }


}

 

 

 

 


 

 

[ ๋กœ๋˜, ๋ฒ„ํŠผ ๋ˆŒ๋Ÿฌ ์ˆซ์ž 6๊ฐœ ์ถœ๋ ฅํ•˜๊ธฐ (2) ]

 

Spring - [intelliJ,Thymeleaf] ๋กœ๋˜, ๋ฒ„ํŠผ ๋ˆŒ๋Ÿฌ ๋žœ๋ค ์ˆซ์ž 6๊ฐœ ์ถœ๋ ฅํ•˜๊ธฐ(2)

[ ๋กœ๋˜, ๋ฒ„ํŠผ ๋ˆŒ๋Ÿฌ ๋žœ๋คํ•œ ์ˆซ์ž 6๊ฐœ ์ถœ๋ ฅํ•˜๊ธฐ ] Spring - [intelliJ,Thymeleaf] ๋กœ๋˜, ๋ฒ„ํŠผ ๋ˆŒ๋Ÿฌ ๋žœ๋ค ์ˆซ์ž 6๊ฐœ ์ถœ๋ ฅํ•˜๊ธฐ[ ๋ฒ„ํŠผ ๋ˆ„๋ฅด๋ฉด Hello,World! ์ถœ๋ ฅ ] Spring - [intelliJ] ๋ฒ„ํŠผ ๋ˆ„๋ฅด๋ฉด Hello,World! ์ถœ๋ ฅ[ Hello,World

post-this.tistory.com

 

 

 

๐Ÿชฝ

"ํ‹€๋ฆฐ ๋‚ด์šฉ์ด ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค."

 

 

 

[ ๋ธ”๋กœ๊ทธ์— ์“ด ๋‚ด์šฉ๋“ค์˜ ์ถœ์ฒ˜๋Š” ์•„๋ž˜์— ์ ์–ด๋‘˜ํ…Œ๋‹ˆ

๋“ค์–ด๊ฐ€์„œ ์ฝ์–ด๋ณด์‹œ๋ฉด ๋”์šฑ ๋„์›€์ด ๋˜์‹ค ๋“ฏ ํ•ฉ๋‹ˆ๋‹ค ]

 


 

 

 

- TreeSet ์ถœ์ฒ˜

 

[Java/์ž๋ฐ”] TreeSet ์‚ฌ์šฉ๋ฒ•

TreeSet์€ ์ด์ง„ ๊ฒ€์ƒ‰ ํŠธ๋ฆฌ(binary search tree)๋ผ๋Š” ์ž๋ฃŒ๊ตฌ์กฐ์˜ ํ˜•ํƒœ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ์ปฌ๋ ‰์…˜ ํด๋ž˜์Šค์ž…๋‹ˆ๋‹ค. ์ด์ง„ ๊ฒ€์ƒ‰ ํŠธ๋ฆฌ๋Š” ์ •๋ ฌ, ๊ฒ€์ƒ‰, ๋ฒ”์œ„๊ฒ€์ƒ‰(range search)์— ๋†’์€ ์„ฑ๋Šฅ์„ ๋ณด์ด๋ฉฐ TreeSet์€ ์ด์ง„

hstory0208.tistory.com

 

 

 

- ๋žœ๋ค ์ˆซ์ž ์ƒ์„ฑ ์ถœ์ฒ˜ (while)

 

[JAVA] ๋žœ๋ค ์ˆซ์ž(๋‚œ์ˆ˜) ์ƒ์„ฑํ•˜๊ธฐ - Random , Math

๋‚œ์ˆ˜๋ฅผ ์ƒ์„ฑํ•ด๋ด…์‹œ๋‹ค ๐Ÿ˜Ž์˜ค๋Š˜์€ ์ž๋ฐ”์—์„œ ๋žœ๋ค ์ˆซ์ž ๋งŒ๋“œ๋Š” ๋ฒ•์„ ์•Œ์•„๋ด…์‹œ๋‹ค. ๊ฐœ๋…์ž๋ฐ”์—์„œ ๋‚œ์ˆ˜๋ฅผ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•์€ 2๊ฐ€์ง€๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.Random ํด๋ž˜์Šค ์‚ฌ์šฉMath.random() ์ฐจ์ด์ 1. Random ํด๋ž˜์Šค๋Š” int, long,

e-you.tistory.com

 

 

 

- html๊ณผ link ์—ฐ๊ฒฐ ์ถœ์ฒ˜

 

HTML <link> rel, type, href

: HTML Link ์š”์†Œ๋Š” ํ˜„์žฌ ๋ฌธ์„œ์™€ ์™ธ๋ถ€ ๋ฆฌ์†Œ์Šค์™€์˜ ์—ฐ๊ฒฐ ๊ด€๊ณ„๋ฅผ ๋ช…์‹œํ•ฉ๋‹ˆ๋‹ค. ์ด ์š”์†Œ๋Š” ์Šคํƒ€์ผ ์‹œํŠธ์— ๋งํฌํ•˜๋Š” ๋ฐ์— ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. rel="์†์„ฑ ๊ฐ’" : ์š”์†Œ์— ๋ฐ˜๋“œ์‹œ ๋ช…์‹œ๋˜์–ด์•ผ ํ•˜๋Š” ํ•„์ˆ˜ ์†์„ฑ

junbucks7.tistory.com

 

 

 

- ์Šคํƒ€์ผ ์‹œํŠธ ์ถœ์ฒ˜

 

์Šคํƒ€์ผ ์‹œํŠธ๋ž€?

์ œ1์žฅ ์Šคํƒ€์ผ ์‹œํŠธ๋ž€? ใ… ์Šคํƒ€์ผ ์‹œํŠธ๋Š” ๊ธ€๊ผด์˜ ํฌ๊ธฐ๋‚˜ ๋ชจ์–‘, ์ปฌ๋Ÿฌ ๊ทธ๋ฆฌ๊ณ  ๋ฌธ๋‹จ ์„ค์ •์„ ๋ฏธ๋ฆฌ ์ •์˜ํ•ด ์Šคํƒ€์ผ...

blog.naver.com

 

 

 

- ์ปฌ๋Ÿฌ์ฐจํŠธ ์ถœ์ฒ˜

 

colorate | ๋””์ž์ด๋„ˆ์™€ ๊ฐœ๋ฐœ์ž๋ฅผ์œ„ํ•œ ์ƒ‰ ๊ตฌ์„ฑํ‘œ ๋„๊ตฌ.

colorate๋Š” ๋””์ž์ด๋„ˆ์™€ ๊ฐœ๋ฐœ์ž์—๊ฒŒ ์˜๊ฐ์„ ์ฃผ๋Š” ์ƒ‰ ๊ตฌ์„ฑํ‘œ ๋„๊ตฌ์ž…๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์ƒ‰์ฑ„ ์ž‘์—…์„ ์œ„ํ•œ ์ž๋ฃŒ๋กœ ๋„์›€์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

colorate.azurewebsites.net

 

 

 

- CSS ํ…์ŠคํŠธ ๊ฐ€์šด๋ฐ ์ •๋ ฌ ์ถœ์ฒ˜

 

[HTML/CSS] DIV ์•ˆ์˜ ํ…์ŠคํŠธ ๊ฐ€์šด๋ฐ ์ •๋ ฌํ•˜๊ธฐ (๊ฐ€๋กœ, ์„ธ๋กœ)

์ด๋ฒˆ์—๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด div ์•ˆ์— ์žˆ๋Š” text๋ฅผ ๊ฐ€๋กœ, ์„ธ๋กœ๋กœ ๊ฐ€์šด๋ฐ ์ •๋ ฌํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์•ˆ๋…•ํ•˜์„ธ์š” .my-div { border : 1px solid blue; height : 200px; } 1. ๊ฐ€๋กœ๋กœ ๊ฐ€์šด๋ฐ ์ •๋ ฌํ•˜๊ธฐ ์—ฌ๊ธฐ์—์„œ ์†Œ๊ฐœ

hianna.tistory.com

 

 

 

- CSS ๋ฒ„ํŠผ ํฌ๊ธฐ ์กฐ์ • ์ถœ์ฒ˜

 

[HTML/CSS] ๋ฒ„ํŠผ ํฌ๊ธฐ ์กฐ์ •ํ•˜๊ธฐ (padding)

๋ฒ„ํŠผ์˜ ํฌ๊ธฐ๋ฅผ ์ง€์ •ํ•˜๊ธฐ ์œ„ํ•ด์„œ width, height ์†์„ฑ์„ ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ์ง€๋งŒ, padding ์†์„ฑ์„ ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฒ„ํŠผ ํฌ๊ธฐ ์กฐ์ •ํ•˜๊ธฐ (width, height) ๋จผ์ € width, height๋กœ ๋ฒ„ํŠผ์˜ ํฌ๊ธฐ๋ฅผ ์กฐ์ •ํ•ด๋ณด์•˜์Šต๋‹ˆ๋‹ค.

hianna.tistory.com

 

 

 

- ๋ฒ„ํŠผ ์ปค์Šคํ…€ ์ถœ์ฒ˜

 

์—ฌ๋Ÿฌ ๊ฐ€์ง€ ๋ฒ„ํŠผ ๊ฐ€์šด๋ฐ ์ •๋ ฌ ์‹œํ‚ค๋Š” ๋ฐฉ๋ฒ•

ํŽธ์˜์ƒ ํด๋ž˜์Šค A, B๋กœ ์„ค๋ช…. 1. ํƒœ๊ทธ๋กœ ์—ฌ๋Ÿฌ ๋ฒ„ํŠผ(ํด๋ž˜์Šค B)๋“ค์„ ๊ฐ์‹ธ๋ฉด์„œ ํด๋ž˜์Šค(A) ์ง€์ •ํ•ด์ฃผ๊ณ  2. ํด๋ž˜์Šค A์˜ ์Šคํƒ€์ผ(css)์— text-align: center๋กœ ์ค‘์•™์ •๋ ฌํ•˜๊ณ  3. ํด๋ž˜์Šค B์˜ ์Šคํƒ€์ผ(css)์— inline-block ์†์„ฑ

mangocoding-journal.tistory.com

 

 


๐Ÿ“š ์ฑ… ์†Œ๊ฐœํ•˜๊ธฐ

๋‚ด๊ฐ€ ์‚ฌ์šฉํ•œ ์ž๋ฐ”์™„์ „์ •๋ณต ์ฑ… ๋งํฌ!
ใ„ด ๊น€๋™ํ˜• ์ง€์Œ, ์ด์ง€์Šคํผ๋ธ”๋ฆฌ์‹ฑ

 

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

 

 

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

 

 

๐Ÿฐ

 


 

 

โœ”๏ธ  ๊ฐ์ฒด ์ƒ์„ฑ์‹œ ์ฃผ์†Œ๊ฐ’_ 189p

 

• ๊ฐ์ฒด ์•ˆ์˜ ๊ฐ’์„ ๋ณ€๊ฒฝํ•˜๋ฉด ์ƒˆ๋กœ์šด ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑ

String str1 = new String("์•ˆ๋…•");
String str2 = str1;
str1 = "์•ˆ๋…•ํ•˜์„ธ์š”";
System.out.println(str1);
System.out.println(str2);

 

new ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ–ˆ๋‹ค. new ์—ฐ์‚ฐ์ž๋Š” ์ธ์Šคํ„ด์Šค(๋ฉ”๋ชจ๋ฆฌ ์œ„์— ์˜ฌ๋ผ๊ฐ„ ๊ฐ์ฒด)๋ฅผ ์ƒ์„ฑํ•˜๋Š”๋ฐ, ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ ์ค‘ ํž™ ์˜์—ญ์— ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•  ๊ณต๊ฐ„์„ ํ• ๋‹น๋ฐ›๋Š”๋‹ค. ๊ทธ ๊ณต๊ฐ„์˜ ์ฐธ์กฐ๊ฐ’์„(์—ฌ๊ธฐ์„  str1๊ณผ str2๊ฐ€ ๋œ๋‹ค) ๊ฐ์ฒด์—๊ฒŒ ๋ฐ˜ํ™˜ํ•˜์—ฌ ์ฃผ๊ณ  ์ด์–ด์„œ ์ƒ์„ฑ์ž๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค.

์ˆœ์„œ๊ฐ€ ์ค‘์š”ํ•˜๋‹ค. str1์— "์•ˆ๋…•"์ด ๋“ค์–ด๊ฐ€๋Š” ๊ฒƒ์ด ์ฒซ๋ฒˆ์งธ๊ฐ€ ๋œ๋‹ค. ๊ทธ ํ›„ ๋‘๋ฒˆ์งธ๊ฐ€ str1์ด str2์— ๋“ค์–ด๊ฐ€๋Š” ๊ฒƒ์œผ๋กœ, str2๋Š” "์•ˆ๋…•"์„ ๊ฐ€์ง€๊ฒŒ ๋œ๋‹ค. ์„ธ๋ฒˆ์งธ์— str1์ด "์•ˆ๋…•"์—์„œ "์•ˆ๋…•ํ•˜์„ธ์š”"๋กœ ๋ณ€๊ฒฝ์ด ๋œ๋‹ค. 

์ถœ๋ ฅ์ด ๋  ๋• ์ด ์ˆœ์„œ์— ๋งž์ถฐ ์ถœ๋ ฅ์ด ๋œ๋‹ค. str1์€ ๋งˆ์ง€๋ง‰ ์ฝ”๋“œ "์•ˆ๋…•ํ•˜์„ธ์š”"๋กœ ๋ณ€๊ฒฝ๋œ ๋ฐ”๊ฐ€ ์žˆ์œผ๋‹ˆ "์•ˆ๋…•ํ•˜์„ธ์š”"๋กœ ์ถœ๋ ฅ์ด ๋  ๊ฒƒ์ด๋‹ค. str2๋Š” "์•ˆ๋…•"์ด ์œ ์ž…๋œ ํ›„ ๋ณ€๊ฒฝ๋œ ๊ฒƒ์ด ์—†์œผ๋‹ˆ ์—ฌ์ „ํžˆ "์•ˆ๋…•"์„ ๊ฐ€๋ฆฌํ‚ค๊ณ  ์žˆ์„ ๊ฒƒ์ด๋‹ค. 

๋ฉ”๋ชจ๋ฆฌ๋Š” [ ๋ฉ”์„œ๋“œ(ํด๋ž˜์Šค) ์˜์—ญ - ์Šคํƒ ์˜์—ญ  - ํž™ ์˜์—ญ ]์œผ๋กœ ๋˜์–ด์žˆ๋‹ค. ์ด๋•Œ String์€ ๋ฉ”์„œ๋“œ ์˜์—ญ์— ์˜ฌ๋ผ๊ฐ€๊ณ  str1๊ณผ str2์˜ ๋‚ด์šฉ์ด ํž™์˜์—ญ์˜ ๋ช‡ ๋ฒˆ์ง€์— ์žˆ์„ ๊ฑด์ง€์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ์Šคํƒ ์˜์—ญ์— ๋ณด๊ด€ํ•œ๋‹ค. ์ฒ˜์Œ์— ์Šคํƒ ์˜์—ญ์—์„œ 100๋ฒˆ์ง€์— str1์˜ ๋‚ด์šฉ์ด ์žˆ๋‹ค๊ณ  ๊ฐ€๋ฆฌํ‚ฌ ๊ฒฝ์šฐ ํž™ ์˜์—ญ 100๋ฒˆ์ง€์— ๊ฐ€๋ฉด "์•ˆ๋…•"์ด ์žˆ์„ ๊ฒƒ์ด๋‹ค. ๊ทธ ํ›„ str1์„ ๊ทธ๋Œ€๋กœ str2์— ์ €์žฅํ–ˆ์œผ๋‹ˆ str2๋„ ๋˜‘๊ฐ™์ด 100๋ฒˆ์ง€์— "์•ˆ๋…•"์„ ๊ฐ€๋ฆฌํ‚ค๊ณ  ์žˆ์„ ๊ฒƒ์ด๋‹ค. ์—ฌ๊ธฐ์„œ str1์ด "์•ˆ๋…•ํ•˜์„ธ์š”"๋กœ ๋ฐ”๋€Œ๋ฉด str1์€ ๋‹ค๋ฅธ ๋ฒˆ์ง€์— "์•ˆ๋…•ํ•˜์„ธ์š”"๊ฐ€ ์žˆ๊ฒŒ ๋  ๊ฒƒ์ด๋‹ค. ๊ทธ๋ฆฌ๊ณ  str2๋Š” ์—ฌ์ „ํžˆ ๋˜‘๊ฐ™์ด 100๋ฒˆ์ง€๋ฅผ ๊ฐ€๋ฆฌํ‚ค๊ณ  ์žˆ์„ ๊ฒƒ์ด๋‹ค.

 

 

 

 

 

• ๋ฐฐ์—ด๊ณผ ์ฐจ์ด์ 

int[] array1 = new int[] {3, 4, 5};
int[] array2 = array1;
array1[0] = 6; array1[1] = 7; array[2] = 8;

System.out.println(Arrays.toString(array1));
System.out.println(Arrays.toString(array2));

 

๋ฐฐ์—ด์— 3๊ณผ 4, 5๋ฅผ array1์— ๋„ฃ์—ˆ๊ณ , array2๋Š” array1๊ณผ ๋™์ผํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ง„๋‹ค. ์ด๋•Œ array1์— ๋Œ€ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ 6๊ณผ 7, 8๋กœ ์ˆ˜์ •ํ•ด๋ณด๊ฒ ๋‹ค. ๋ถ„๋ช… ์œ„์—์„œ ๋ฌธ์ž์—ด์„ ์ˆ˜์ •ํ–ˆ์„๋• ๋‘ ๊ฐ์ฒด์˜ ๊ฐ’์ด ๊ฐ™์ด ์ˆ˜์ •๋˜์ง€ ์•Š์•˜๋‹ค. ํ•˜์ง€๋งŒ ๋ฐฐ์—ด์€ ๋‹ค๋ฅด๋‹ค. ๋ฐฐ์—ด์€ ๋ฒˆ์ง€์— ์ƒˆ๋กœ์šด ๊ฐ’์ด ์ž…๋ ฅ๋˜๋ฉด ๋‹ค๋ฅธ ๋ฒˆ์ง€์— ๋ฐ์ดํ„ฐ๋ฅผ ์ƒˆ๋กญ๊ฒŒ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด ์•„๋‹Œ, ๋ณธ๋ž˜์˜ ์œ„์น˜์— ์žˆ๋˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์ •ํ•˜์—ฌ ๊ฐ’์„ ๋„ฃ๊ฒŒ๋œ๋‹ค.

๊ทธ๋ ‡๊ธฐ์— ๊ฒฐ๊ณผ๋Š” array1๊ณผ array2 ๋ชจ๋‘ 6,7,8์„ ์ถœ๋ ฅํ•˜๊ฒŒ ๋œ๋‹ค.

 

 

 

 

 

• ๋ฆฌํ„ฐ๋Ÿด๋กœ ์ž…๋ ฅํ•œ ๋ฐ์ดํ„ฐ์˜ ์ฐจ์ด

String str1 = new String("์•ˆ๋…•");
String str2 = "์•ˆ๋…•";
String str3 = "์•ˆ๋…•";
String str4 = new String("์•ˆ๋…•");

System.out.println(str1 == str4);
System.out.println(str2 == str3);
str2์™€ str3์€ ๋ฆฌํ„ฐ๋Ÿด์„ ๋ฐ”๋กœ ์ž…๋ ฅํ•œ ๋ฐ์ดํ„ฐ๊ฐ€ ๋˜๋ฉฐ, ๊ทธ ๋ฐ์ดํ„ฐ๋Š” ์„œ๋กœ ๊ฐ™์€ ๊ฐ’์„ ๊ฐ€์ง„๋‹ค. ๋งŒ์•ฝ ์ด๋ ‡๊ฒŒ ๋ฌธ์ž์—ด ๋ฆฌํ„ฐ๋Ÿด ๋ฐฉ์‹์œผ๋กœ String ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•  ๊ฒฝ์šฐ, JVM์€ ๋จผ์ € String Pool์—์„œ ํ•ด๋‹น ๋ฌธ์ž์—ด์ด ์žˆ๋Š”์ง€ ํ™•์ธํ•œ๋‹ค. ๊ทธ๋ ‡๊ฒŒ ๊ฐ™์€ ๋ฌธ์ž์—ด์ด ์žˆ๋‹ค๋Š” ๊ฒƒ์ด ํ™•์ธ๋˜๋ฉด ๊ธฐ์กด ๋ฌธ์ž์—ด ๊ฐ์ฒด์˜ ์ฐธ์กฐ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ฒŒ ๋˜๊ณ  ๋™์ผํ•œ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ๋ฅผ ๊ณต์œ ํ•˜๊ฒŒ ๋œ๋‹ค.

new ์—ฐ์‚ฐ์ž๋กœ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•  ๊ฒฝ์šฐ String Pool์ด ์ž‘๋™ํ•˜์ง€ ์•Š๋Š”๋‹ค. new๋Š” ๋งค๋ฒˆ ์ƒˆ๋กœ์šด ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์— ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ณ , ๋™์ผํ•œ ๊ฐ’์ด๋ผ๋„ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ๋Š” ๋‹ฌ๋ผ์ง€๊ฒŒ ๋œ๋‹ค.

๊ฒฐ๋ก ์ ์œผ๋กœ str1๊ณผ str4๋Š” ์„œ๋กœ ๋‹ค๋ฅธ ์ฃผ์†Œ๊ฐ’์„ ๊ฐ€์ง„๋‹ค. ๊ทธ๋ฆฌ๊ณ  str2์™€ str3์€ ์„œ๋กœ ๊ฐ™์€ ์ฃผ์†Œ๊ฐ’์„ ๊ฐ€์ง„๋‹ค. 

 

 

Q. new๊ฐ€ ์ •ํ™•ํžˆ ๋ฌด์—‡์ธ๊ฐ€?

A. new ์—ฐ์‚ฐ์ž๋Š” ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ• ์ค‘, ์ƒˆ๋กœ์šด ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์— ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค. ์™ธ๋ถ€์—์„œ ๊ฐ’์„ ๋ณ€๊ฒฝํ•  ๋•Œ ๋‹ค๋ฅธ ๊ฐ์ฒด์™€ ๋ถ„๋ฆฌ๋˜์–ด ๊ฐ’์ด ๋ณ€๊ฒฝํ•˜๊ธธ ์›ํ•  ๊ฒฝ์šฐ new ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ์ฒด๋ฅผ ์ •์˜ํ•˜๋ฉด ๋œ๋‹ค.

 

 

 

 


 

 

 

 

โœ”๏ธ  + ์—ฐ์‚ฐ_ 195p

 

• ๋ฌธ์ž์—ด + ๋ฌธ์ž์—ด ์—ฐ์‚ฐ

String str1 = "์•ˆ๋…•" + "ํ•˜์„ธ์š”" + "!";
System.out.println(str1);
๊ฐ์ฒด๋Š” ๋ช‡ ๊ฐœ ๋งŒ๋“ค์–ด์งˆ๊นŒ? ์ฒ˜์Œ์— "์•ˆ๋…•"๊ณผ "ํ•˜์„ธ์š”" ๊ทธ๋ฆฌ๊ณ  "!"๊นŒ์ง€ 3๊ฐœ์˜ ๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ๋  ๊ฒƒ์ด๋‹ค. ๊ทธ ํ›„ + ์—ฐ์‚ฐ์ž๋กœ ์—ฐ๊ฒฐ์ด ๋  ๊ฒƒ์ด๋‹ค. "์•ˆ๋…•" + "ํ•˜์„ธ์š”"๋กœ "์•ˆ๋…•ํ•˜์„ธ์š”"๊ฐ€ ๋งŒ๋“ค์–ด์ ธ ์ด 4๊ฐœ์˜ ๊ฐ์ฒด๊ฐ€ ๋˜๊ณ  "!"๊ฐ€ ์—ฐ๊ฒฐ๋˜๋ฉฐ "์•ˆ๋…•ํ•˜์„ธ์š”!"๊ฐ€ ์™„์„ฑ๋˜์–ด ์ด 5๊ฐœ์˜ ๊ฐ์ฒด๊ฐ€ ๋งŒ๋“ค์–ด์งˆ ๊ฒƒ์ด๋‹ค.

 

 

 

• ์ž๋ฃŒํ˜•์— ๋”ฐ๋ฅธ + ์—ฐ์‚ฐ

System.out.println(1 + 2 + "์•ˆ๋…•");
System.out.println("์•ˆ๋…•" + 1 + 2);
์ฒซ๋ฒˆ์งธ ์ฝ”๋“œ๋ถ€ํ„ฐ ์‚ดํŽด๋ณด๋ฉด ์—ฐ์†ํ•ด์„œ ๋‚˜์˜ค๋Š” 1๊ณผ 2๋กœ ์ž๋ฃŒํ˜•์ด ์ˆซ์ž ์ž๋ฃŒํ˜•์œผ๋กœ ๋™์ผํ•˜๋‹ค. ์ด๋ ‡๊ฒŒ ๋™์ผํ•œ ์ž๋ฃŒํ˜•์ด ์—ฐ๋‹ฌ์•„ ๋‚˜์˜ฌ ๊ฒฝ์šฐ ๋”ํ•˜๊ธฐ ์—ฐ์‚ฐ์œผ๋กœ ์ž‘์šฉํ•˜์—ฌ 3 + "์•ˆ๋…•" ํ˜•ํƒœ๋กœ ์ด๋ค„์ง€๊ฒŒ ๋œ๋‹ค. ํ•˜์ง€๋งŒ ๋‘๋ฒˆ์งธ ์ฝ”๋“œ์ฒ˜๋Ÿผ "์•ˆ๋…•"๊ณผ 1์ด +์—ฐ์‚ฐ์ž๋กœ ์—ฐ๊ฒฐ๋  ๊ฒฝ์šฐ ๋‹ค๋ฅธ ์ž๋ฃŒํ˜•์œผ๋กœ ์•ˆ๋…•1์ด ๋˜๊ณ  ๊ทธ ํ›„์— ๋‚˜์˜ค๋Š” 2 ๋˜ํ•œ ์•ˆ๋…•1๋กœ 1์ด ์žˆ์–ด๋„ ์ˆซ์ž ์ž๋ฃŒํ˜•์œผ๋กœ ์ธ์‹ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์•ˆ๋…•12๊ฐ€ ์ตœ์ข…์ ์ธ ๊ฐ’์ด ๋  ๊ฒƒ์ด๋‹ค.

 

 

[ Hello,World ์ถœ๋ ฅํ•˜๊ธฐ ]

 

Spring - [IntelliJ] Hello World ์ถœ๋ ฅํ•˜๊ธฐ

[ Spring MVC์— ๋Œ€ํ•˜์—ฌ ] Spring - Spring MVC๋ฅผ ์•Œ์•„์•ผ ์‹œ์ž‘์ด ๊ฐ€๋Šฅํ•˜๋‹ค.์ฒ˜์Œ์—” ๋Œ€์ถฉ ํ”„๋กœ์ ํŠธ๋ฅผ ์‹œ์ž‘ํ•ด๋ณด๋ คํ–ˆ์ง€๋งŒ,์ด๋Ÿด์ˆ˜๊ฐ€! ์•„๋Š” ๊ฒƒ์ด ๋ฏธ์•ฝํ•˜๋‹ˆ ์‹œ์ž‘ํ•  ์ˆ˜ ์—†์—ˆ๋‹ค.๊ทธ๋ž˜์„œ ๊ฐ€์žฅ ๊ธฐ์ดˆ์ ์œผ๋กœ ์•Œ์•„์•ผํ•˜๋Š”

post-this.tistory.com

 


 

 

 

๋ฒ„ํŠผ ๋ˆ„๋ฅด๋ฉด Hello,World!
๐ŸŒง๏ธ

 

 

 

 

1. ๋™์ž‘ํ™”๋ฉด๊ณผ ์ฝ”๋“œ

 

 

๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด

 

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">

<head>
    <meta charset="UTF-8">
    <title>๊ฐ„๋‹จํ•œ ๋ฒ„ํŠผ ์˜ˆ์ œ</title>
</head>

<body>
<h2 th:text="${message}">message</h2>

<form th:action="@{/hello}" method="get">
    <button type="submit">๋ฒ„ํŠผ</button>
</form>

</body>

</html>

 

 

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@Controller
public class HelloController {


    @GetMapping("/")
    public String empty() {
        return "button";
    }

    @GetMapping("/hello")
    public String helloWorld(Model model) {
        model.addAttribute("message", "Hello, World!");
        return "button";
    }

}

 

 

 

 


 

 

 

 

 

2. ํƒ€์ž„๋ฆฌํ”„ dependencies ์ถ”๊ฐ€ํ•˜๊ธฐ.

 

ํƒ€์ž„๋ฆฌํ”„(Thymeleaf)์— ๋Œ€ํ•ด์„œ ์„ค๋ช…์„ ๊ฐ„๋žตํ•˜๊ฒŒ ํ•ด๋ณด์ž๋ฉด, ์ˆœ์ˆ˜ํ•œ HTML์„ ํ™”๋ฉด์— ์ถœ๋ ฅํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋  ๊ฒƒ ๊ฐ™๋‹ค. ์„œ๋ฒ„๋ฅผ ํ†ตํ•ด ๋ทฐ ํƒฌํ”Œ๋ฆฟ์„ ๊ฑฐ์น˜๋ฉด ๋™์ ์œผ๋กœ ๋ณ€๊ฒฝ๋œ ๊ฒฐ๊ณผ๋ฅผ ํ™•์ผํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ, ์ˆœ์ˆ˜ํ•œ HTML์„ ์œ ์ง€ํ•˜์—ฌ ๋ณด์—ฌ์ฃผ๊ธฐ ๋•Œ๋ฌธ์— ๋„ค์ธ„๋Ÿด ํ…œํ”Œ๋ฆฟ(natural templates) ํŠน์ง•์„ ๊ฐ€์ง€๊ณ  ์žˆ์Œ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค. ๋ณดํ†ต Spring MVC์—์„œ ๋งŽ์ด ์‚ฌ์šฉํ•œ๋‹ค.

 

 

โ–ก build.gradle๋ฅผ ์ฐพ์•„ ๋ˆ„๋ฅธ๋‹ค.

 

 

 

โ–ก ์ฝ”๋“œ๋ฅผ ๋ณต์‚ฌํ•œ๋‹ค.

implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'

 

 

 

โ–ก dependencies์— ๋ถ™์—ฌ๋„ฃ๋Š”๋‹ค.

 

 

 

โ–ก ์ƒˆ๋กญ๊ฒŒ ์„ธํŒ…ํ•  ์ˆ˜ ์žˆ๋„๋ก ์ด ์ฝ”๋ผ๋ฆฌ(?)๋ฅผ ๋ˆŒ๋Ÿฌ์ค€๋‹ค.

 

 

 

โ–ก ์ œ๋Œ€๋กœ ์ƒ์„ฑ๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•œ๋‹ค.

 

 

 

 

 


 

 

 

 

 

3. HTML์„ ํ†ตํ•ด ๋ฒ„ํŠผ ๋งŒ๋“ค๊ธฐ.

 

 

โ–ก ์ „์ฒด ์ฝ”๋“œ

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">

<head>
    <meta charset="UTF-8">
    <title>๊ฐ„๋‹จํ•œ ๋ฒ„ํŠผ ์˜ˆ์ œ</title>
</head>

<body>
<h2 th:text="${message}">message</h2>

<form th:action="@{/hello}" method="get">
    <button type="submit">๋ฒ„ํŠผ</button>
</form>

</body>

</html>

 

 

 

โ–ก resources ๋ฐ‘์— ์žˆ๋Š” templates์— button.html์„ ๋งŒ๋“ค์–ด์ค€๋‹ค.

    • ๋งŒ์ผ ์—†๋‹ค๋ฉด templates๋ฅผ directory๋กœ ๋จผ์ € ๋งŒ๋“ค์–ด์ค€ ํ›„ ํ•˜์œ„์— button.html์„ ๋งŒ๋“ค๋ฉด ๋œ๋‹ค.

 

 

 

โ–ก HTML์„ ํƒ€์ž„๋ฆฌํ”„ ํ†ตํ•ด์„œ ์ž‘๋™๋˜๋„๋ก ํ•ด์ค€๋‹ค.

<html lang="en" xmlns:th="http://www.thymeleaf.org">

 

๋’ค์— xmlns:th="htttp://www/thymeleaf.org" ์ถ”๊ฐ€ํ•˜๋ฉด ๋œ๋‹ค.

 

 

 

โ–ก ํƒ€์ดํ‹€ ์ž‘์„ฑํ•˜๊ธฐ.

<title>๊ฐ„๋‹จํ•œ ๋ฒ„ํŠผ ์˜ˆ์ œ</title>

 

 

 

 

โ–ก <body> ์ž‘์„ฑํ•˜๊ธฐ.

 

์ž‘์„ฑํ•˜๊ธฐ ์ „์— ์•Œ์•„์•ผ ํ•  ๋ถ€๋ถ„์ด ์žˆ๋‹ค. ๋ฐ”๋กœ th๋ผ๋Š” ๊ฒƒ์ธ๋ฐ, th๋Š” ํƒ€์ž„๋ฆฌํ”„๋กœ ๋™์ ์œผ๋กœ ์ž‘์šฉํ•ด์•ผํ•˜๋Š” ๋ถ€๋ถ„์— ๋ถ™์—ฌ์„œ ์‚ฌ์šฉํ•ด์•ผํ•œ๋‹ค. ์ฆ‰ ํƒ€์ž„๋ฆฌํ”„๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์€ xmlns:th="htttp://www/thymeleaf.org"์„ ์ •์˜ํ•˜๊ณ , ๋™์ ์œผ๋กœ ์ž‘์šฉํ•ด์•ผํ•  ๋ถ€๋ถ„์— th๋ฅผ ์ ์–ด์ฃผ๋Š” ๊ฒƒ์ด๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ๊ทธ ๋ถ€๋ถ„์€ ์ˆœ์ˆ˜ํ•œ HTML์„ ์œ ์ง€ํ•˜๋ฉฐ ๋™์ ์œผ๋กœ ๋ณ€ํ™”ํ•ด์ค„ ๊ฒƒ์ด๋‹ค.

 

<h2 th:text="${message}">message</h2>

 

์ฒซ ํ™”๋ฉด์—” ๋ฒ„ํŠผ๋งŒ ์žˆ๊ณ  ํ…์ŠคํŠธ๊ฐ€ ์—†์—ˆ๋‹ค. ๋‘๋ฒˆ์งธ ํ™”๋ฉด์—์„œ ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅธ ํ›„ ๋ฉ”์„ธ์ง€๊ฐ€ ๋‚˜ํƒ€๋‚ฌ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ์ด ๋ถ€๋ถ„์€ ๋™์ ์œผ๋กœ ์›€์ง์ธ ๊ฒƒ์ด๋‹ˆ th๋ฅผ ๋ถ™์—ฌ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด์ค€๋‹ค.

 

HTML์€ ${message}๋ฅผ ํ†ตํ•ด Controller์™€ ์—ฐ๊ฒฐํ•  ๊ฒƒ์ด๋‹ค. ${ }๋Š” ๋ณ€์ˆ˜ ํ‘œํ˜„์‹์ด๋ฉฐ Controller์—์„œ ์ „๋‹ฌ๋œ message๋ผ๋Š” ๋ณ€์ˆ˜๋ผ๋Š” ์˜๋ฏธ์ด๋‹ค. ๊ทธ๋Ÿฌ๋ฉด Controller์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ message๋กœ ์ „๋‹ฌํ•˜์—ฌ h2 ๋ถ€๋ถ„์— ์›ํ•˜๋Š” ํ…์ŠคํŠธ๊ฐ€ ๋ณด์ด๊ฒŒ ๋œ๋‹ค.

 

 

 

 

 

โ–ก <form> ์ž‘์„ฑํ•˜๊ธฐ.

 

form์€ ์ฃผ๋กœ ์‚ฌ์šฉ์ž์˜ ์˜๊ฒฌ์ด๋‚˜ ์ •๋ณด๋ฅผ ์•Œ๊ธฐ ์œ„ํ•ด ์ž…๋ ฅํ•  ํฐ ํ‹€์„ ๋งŒ๋“œ๋Š”๋ฐ ์‚ฌ์šฉํ•œ๋‹ค. form์€ ์ž…๋ ฅ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ํ•œ ๋ฒˆ์— ์„œ๋ฒ„๋กœ ์ „์†กํ•œ๋‹ค. ๊ทธ๋ ‡๊ฒŒ ๋ณด๋‚ด์ง„ ๋ฐ์ดํ„ฐ๋Š” ์›น ์„œ๋ฒ„๊ฐ€ ์ฒ˜๋ฆฌํ•˜๊ณ , ๊ฒฐ๊ณผ์— ๋”ฐ๋ฅธ ์›นํŽ˜์ด์ง€๋ฅผ ๋ณด์—ฌ์ฃผ๊ฒŒ ๋œ๋‹ค. 

<form th:action="@{/hello}" method="get">
    <button type="submit">๋ฒ„ํŠผ</button>
</form>

 

form์—์„œ th๋ฅผ ์‚ฌ์šฉํ–ˆ๋‹ค. ๊ทธ ์ด์œ ๋ฅผ ์‚ดํŽด๋ณด๋ฉด action=@{/hello}์— ๋Œ€ํ•ด์„œ ์•Œ์•„์•ผํ•œ๋‹ค. ์•„๊นŒ ๋ณ€์ˆ˜ ํ‘œํ˜„์‹์ธ $์™€ ๋‹ค๋ฅด๊ฒŒ @๋กœ ๋ชจ์–‘์ด ๋‹ค๋ฅด๋‹ค. @{ }๋Š” URL ํ‘œํ˜„์‹์œผ๋กœ ์ฃผ๋กœ ๋งํฌ๋‚˜ form์—์„œ action๊ณผ ํ•จ๊ป˜ ์“ฐ์ธ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด action์€ ๋ฌด์—‡์ผ๊นŒ? action์€ form์„ ์ „์†กํ•  ์„œ๋ฒ„์ชฝ ์Šคํฌ๋ฆฝํŠธ ํŒŒ์ผ์„ ์ง€์ •ํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ์ข€ ๋” ์ง๊ด€์ ์ด๊ฒŒ ๋งํ•ด๋ณด์ž๋ฉด Controller์—์„œ GetMapping(๋“ค์–ด์˜จ ๊ฒฝ๋กœ์— ๋งž์ถฐ ๋ฐ˜ํ™˜ํ•  ํŽ˜์ด์ง€๋ฅผ ์ „์†ก)์— ์‚ฌ์šฉํ•  '๋“ค์–ด์˜จ ๊ฒฝ๋กœ'์— ํ•ด๋‹นํ•˜๋Š” ๋ถ€๋ถ„์ด๋‹ค. 

 

๋‹ค์‹œ ์ •๋ฆฌํ•ด๋ณด์ž. action์€ Controller์˜ ๋ฉ”์„œ๋“œ ์ค‘ ์–ด๋Š ๊ฒƒ๊ณผ ์—ฐ๊ฒฐํ• ์ง€, ์ฆ‰ ์ด form์ด action ์†์„ฑ์„ ํ†ตํ•ด ์–ด๋Š ํŽ˜์ด์ง€๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ์ปจํŠธ๋กค๋Ÿฌ์™€ ์—ฐ๊ฒฐํ• ์ง€ ๊ฒฐ์ •ํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ๊ทธ๋Ÿฌ๋ฉด action์— ์ ์€ ๊ฒฝ๋กœ๋ฅผ ํ†ตํ•ด form์ด ์„œ๋ฒ„์— ์ „์†กํ•˜๋Š” ๋™์ ์ธ ์›€์ง์ž„์„ ๊ฐ€์ง€๊ธฐ์— th๋ฅผ ๋ถ™์—ฌ ํƒ€์ž„๋ฆฌํ”„๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ์—ฐ๊ฒฐํ•œ ๊ฒƒ์ด๋‹ค.

 

๊ทธ๋Ÿฌ๋ฉด ์ด๋•Œ ์ด ์ •๋ณด๋ฅผ ์ „์†กํ•  ๋•Œ ์–ด๋–ค ๋ฐฉ์‹์„ ์„ ํƒํ• ์ง€ ๊ณ ๋ฅผ ์ˆ˜ ์žˆ๋‹ค. get ๋ฐฉ์‹๊ณผ post ๋ฐฉ์‹์ด ์žˆ๋Š”๋ฐ, ์ด์— ๋Œ€ํ•œ ๋ถ€๋ถ„์€ ๋ธ”๋กœ๊ทธ์— ๋”ฐ๋กœ ์ •๋ฆฌํ•ด๋†จ์œผ๋‹ˆ ๊ฐ„๋žตํ•˜๊ฒŒ๋งŒ ์„ค๋ช…ํ•˜๊ณ  ๋„˜์–ด๊ฐ€๊ฒ ๋‹ค. get์€ URL์— ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ด์•„ ์ „์†กํ•˜๋Š” ๊ฒƒ์œผ๋กœ ์ฃผ์†Œ์ฐฝ์„ ๋ณด๋ฉด ์–ด๋–ค ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ด์•˜๋Š”์ง€ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

hello?๋ผ๊ณ  ์ ํ˜€์žˆ๋‹ค.



 

 

[ GET๊ณผ POST ]

 

SpringBoot - GET๊ณผ POST ๊ทธ๋ฆฌ๊ณ  @GetMapping

[ @Controller์™€ @RestController ] Spring - @Controller์™€ @RestController ๊ทธ๋ฆฌ๊ณ  ์ƒํƒœ์ฝ”๋“œ[ SpringMVC์— ๋Œ€ํ•˜์—ฌ ] Spring - Spring MVC๋ฅผ ์•Œ์•„์•ผ ์‹œ์ž‘์ด ๊ฐ€๋Šฅํ•˜๋‹ค.์ฒ˜์Œ์—” ๋Œ€์ถฉ ํ”„๋กœ์ ํŠธ๋ฅผ ์‹œ์ž‘ํ•ด๋ณด๋ คํ–ˆ์ง€๋งŒ,์ด๋Ÿด์ˆ˜๊ฐ€!

post-this.tistory.com

 

 

์ด์ œ ๋ฒ„ํŠผ์„ ์•Œ์•„๋ณด๊ฒ ๋‹ค.

<form th:action="@{/hello}" method="get">
    <button type="submit">๋ฒ„ํŠผ</button>
</form>

 

๋ฒ„ํŠผ์„ ๋งŒ๋“œ๋Š”๋ฐ type์„ ์ •ํ•  ์ˆ˜ ์žˆ๋‹ค. type์€ 3๊ฐœ๋กœ ๊ตฌ์„ฑ๋˜์–ด์žˆ๋Š”๋ฐ submit , button , reset ์ด๋‹ค. ์šฐ๋ฆฌ๋Š” ํ˜„์žฌ ์ˆœ์ˆ˜ํ•œ HTML์„ ๊ฐ€์ง€๊ณ  ๊ฐ„๋‹จํ•œ ์˜ˆ์ œ๋ฅผ ๋งŒ๋“ค๊ณ  ์žˆ๋‹ค. ๊ทธ๋ ‡๊ธฐ์— ํด๋ฆญ(onclick)์ด๋ผ๋Š” ๋™์ž‘์ด ํฌํ•จ๋˜์–ด์žˆ๋Š” ๊ตฌ์กฐ๋กœ ๋งŒ๋“ค์–ด์•ผ ๋” ํšจ์œจ์ ์ด๋‹ค. ๊ทธ๋ž˜์„œ submit๋ฅผ ์‚ฌ์šฉํ–ˆ๋‹ค. ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ onclick์ด ์—†์–ด๋„ submit์œผ๋กœ ๊ฒฐ์ •ํ•˜๋ฉด form ๋ฐ์ดํ„ฐ๋ฅผ ๊ทธ๋ƒฅ ์ „์†ก์‹œํ‚จ๋‹ค.(๋งŒ์•ฝ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์™€ ํ•จ๊ป˜ ์˜ˆ์ œ๋ฅผ ๋งŒ๋“ ๋‹ค๋ฉด button type์œผ๋กœ ์„ ํƒํ•˜๋ฉด ๋œ๋‹ค.)

 

 

 


 

 

 

4. HelloController

 

 

โ–ก ์ „์ฒด ์ฝ”๋“œ

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@Controller
public class HelloController {


    @GetMapping("/")
    public String empty() {
        return "button";
    }

    @GetMapping("/hello")
    public String helloWorld(Model model) {
        model.addAttribute("message", "Hello, World!");
        return "button";
    }

}

 

 

 

โ–ก  ์ฒ˜์Œ ๋“ค์–ด๊ฐ”์„ ๋•Œ ํ™”๋ฉด ๋งŒ๋“ค๊ธฐ.

@GetMapping("/")
public String empty() {
    return "button";
}

 

GetMapping("/")์—์„œ "/"๋Š” ๋ฃจํŠธ ๊ฒฝ๋กœ๋ผ๋Š” ์˜๋ฏธ์ด๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ ๋ฃจํŠธ ๊ฒฝ๋กœ๋กœ ๋“ค์–ด์˜ค๋ฉด button ํ™”๋ฉด์œผ๋กœ ๋ฐ˜ํ™˜ํ•  ๊ฒƒ์ด๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ์•„๊นŒ ์œ„์— ์žˆ๋˜ HTML์„ ๋‹ค์‹œ ์‚ดํŽด๋ณด์ž. ๋ฒ„ํŠผ์ด ๋ˆŒ๋ ค์•ผ ๋ฉ”์„ธ์ง€๊ฐ€ ํ˜ธ์ถœ๋˜๋„๋ก ๋งŒ๋“ค์—ˆ๋‹ค. ๊ฒฝ๋กœ๋ฅผ ๋ณด๋ฉด ๋ฃจํŠธ ๊ฒฝ๋กœ๋กœ ์‚ฌ์šฉ์ž๊ฐ€ ํŽ˜์ด์ง€์— ๋“ค์–ด์™”์„ ๊ฒฝ์šฐ(์•„๋ฌด๊ฒƒ๋„ ํ•˜์ง€ ์•Š์€)์— ํ•ด๋‹นํ•œ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ์•„์ง ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๊ธฐ ์ „์ด๋‹ˆ, ๋™์ ์ธ th๋กœ ์ž‘์„ฑํ•œ ๋ถ€๋ถ„์„ ์ œ์™ธํ•˜๋ฉด submit ํƒ€์ž…์œผ๋กœ ์„ค์ •ํ•ด๋‘” ๋ฒ„ํŠผ๋งŒ ๋„์›Œ์ค˜์•ผ ํ•  ๊ฒƒ์ด๋‹ค.

 

๋ฒ„ํŠผ๋งŒ ์žˆ์œผ๋ฉด์„œ, ๋ฃจํŠธ ๊ฒฝ๋กœ์ž„์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

 

 

 

 

โ–ก  ๋ฒ„ํŠผ์ด ๋ˆŒ๋ ธ์„ ๊ฒฝ์šฐ, ๋ฉ”์„ธ์ง€๋ฅผ ๋„ฃ์–ด ํ™”๋ฉด ๋ฐ˜ํ™˜ํ•˜๊ธฐ.

@GetMapping("/hello")
public String helloWorld(Model model) {
	model.addAttribute("message", "Hello, World!");
	return "button";
}

 

HTML์—์„œ submit ๋ฐฉ์‹์„ ํ†ตํ•ด, ๋ˆ„๋ฅด๋ฉด ๋ฐ”๋กœ form์ด ์ „์†ก๋˜๋Š” button์„ ๋งŒ๋“ค์—ˆ๋‹ค. ๊ทธ๋ ‡๊ฒŒ  /hello ๊ฒฝ๋กœ๋ฅผ ๊ฐ€์ง„ action์„  Get ์š”์ฒญ์œผ๋กœ ์ „์†ก๋˜๋ฉด, ์—ฌ๊ธฐ @GetMapping("/hello")์—์„œ ๋ฐ›์•„ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๊ฒŒ ๋œ๋‹ค. 

 

Model์ด ์žˆ๋‹ค. Model์€ SpringMVC์—์„œ ๋ทฐ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋˜๋Š” ๊ฐ์ฒด์ด๋‹ค. ์ฆ‰ ์ปจํŠธ๋กค๋Ÿฌ์—์„œ ๋ทฐ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•  ๋•Œ ์‚ฌ์šฉ๋œ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค. Model์€ ํƒ€์ž„๋ฆฌํ”„, JSP์™€ ๊ฐ™์€ ํ…œํ”Œ๋ฆฟ ์—”์ง„๊ณผ ๊ด€๊ณ„์—†์ด ์ž‘๋™๋œ๋‹ค. model์€ Model ํƒ€์ž…์œผ๋กœ ์ „๋‹ฌ๋˜๋ฉฐ addAtrribute๋ฅผ ํ†ตํ•ด ์†์„ฑ์„ ์ •ํ•  ์ˆ˜ ์žˆ๋‹ค. ํ•ด๋‹น ์ฝ”๋“œ์—์„œ ํ‚ค๋Š” message, ์‹ค์ œ ๋ฐ์ดํ„ฐ ๊ฐ’์€ Hello, World!๋ผ๊ณ  ์ •ํ–ˆ๋‹ค.

 

์ด์ œ ์ด ์†์„ฑ์€ ๋‹ค์‹œ button์ด๋ผ๋Š” ์ด๋ฆ„์„ ๊ฐ€์ง„ HTML๋กœ ์ „๋‹ฌ๋  ๊ฒƒ์ด๋‹ค. HTML ์ฝ”๋“œ๋ฅผ ๋‹ค์‹œ ์‚ดํŽด๋ณด๋ฉด ${message}์ด ๋ถ€๋ถ„์— Hello, World!๊ฐ€ ์˜ค๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค. 

 

 

 

 

 

 


 

 

๐Ÿชฝ

"ํ‹€๋ฆฐ ๋‚ด์šฉ์ด ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค."

 

 

 

[ ๋ธ”๋กœ๊ทธ์— ์“ด ๋‚ด์šฉ๋“ค์˜ ์ถœ์ฒ˜๋Š” ์•„๋ž˜์— ์ ์–ด๋‘˜ํ…Œ๋‹ˆ

๋“ค์–ด๊ฐ€์„œ ์ฝ์–ด๋ณด์‹œ๋ฉด ๋”์šฑ ๋„์›€์ด ๋˜์‹ค ๋“ฏ ํ•ฉ๋‹ˆ๋‹ค ]

 

 


 

 

 

 

- ํƒ€์ž„๋ฆฌํ”„ ์ถœ์ฒ˜

 

Thymeleaf(ํƒ€์ž„๋ฆฌํ”„)๋ž€ ? ํƒ€์ž„๋ฆฌํ”„์˜ ๊ธฐ๋ณธ ๊ธฐ๋Šฅ์•Œ์•„๋ณด๊ธฐ

Thymeleaf(ํƒ€์ž„๋ฆฌํ”„)๋ž€ ? ํƒ€์ž„๋ฆฌํ”„๋Š” JSP, Freemarker์™€ ๊ฐ™์€ ํ…œํ”Œ๋ฆฟ ์—”์ง„์˜ ์ผ์ข…์œผ๋กœ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํŠน์ง•์„ ๊ฐ–๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์„œ๋ฒ„ ์‚ฌ์ด๋“œ HTML ๋ Œ๋”๋ง (SSR) ๋ฐฑ์—”๋“œ ์„œ๋ฒ„์—์„œ HTML์„ ๋™์ ์œผ๋กœ ๋ Œ๋”๋ง ํ•˜๋Š” ์šฉ

hstory0208.tistory.com

 

 

 

- ํƒ€์ž„๋ฆฌํ”„ ์ถœ์ฒ˜

 

์Šคํ”„๋ง ํƒ€์ž„๋ฆฌํ”„(Thymleaf) ํ•œ๋ˆˆ์— ์ •๋ฆฌํ•˜๊ธฐ

ํƒ€์ž„๋ฆฌํ”„๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ์ „์— ํ™•์ธํ•ด์•ผํ•  ์ •๋ณด 1.ํƒ€์ž„๋ฆฌํ”„ ์˜์กด์„ฑ์ด ์ œ๋Œ€๋กœ ์ฃผ์ž…๋˜๊ณ  ์žˆ๋Š”์ง€ ํ™•์ธํ•œ๋‹ค. ํƒ€์ž„๋ฆฌํ”„๋ฅผ '์ œ๋Œ€๋กœ' ์“ฐ๋ ค๋ฉด ์‹œ์ž‘ํ•˜๊ธฐ์ „์— ํƒ€์ž„๋ฆฌํ”„๊ฐ€ ์ œ๋Œ€๋กœ ์„ค์น˜๋˜์–ด์žˆ๋Š”์ง€ ํ™•์ธํ•˜์ž. 2. M

taehoung0102.tistory.com

 

 

 

- form ์ถœ์ฒ˜

 

HTML : ํผ(form) ์ดํ•ด

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

www.nextree.co.kr

 

 

 

-form๊ณผ GET ์ถœ์ฒ˜

 

[Html] form ํƒœ๊ทธ์™€ input ์š”์†Œ๋“ค, GET / POST ๋ฐฉ์‹

โšก๏ธ form html์˜ ์š”์†Œ ์ค‘ ํ•˜๋‚˜์ธ form์€ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ  ๋ฐ›์Œ์— ์žˆ์–ด์„œ ๋งŽ์ด ์‚ฌ์šฉํ•˜๋Š” ์š”์†Œ ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค. form ํƒœ๊ทธ ์•ˆ์— ์‚ฝ์ž…ํ•œ submit ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ๋™๋˜๋ฉด, ์ •์˜๋œ method ์†์„ฑ type์œผ๋กœ action์„ ํ†ตํ•ด ๋ชฉ

lasbe.tistory.com

 

 

 

 

 

 

 

[ @Controller์™€ @RestController ]

 

Spring - @Controller์™€ @RestController ๊ทธ๋ฆฌ๊ณ  ์ƒํƒœ์ฝ”๋“œ

[ SpringMVC์— ๋Œ€ํ•˜์—ฌ ] Spring - Spring MVC๋ฅผ ์•Œ์•„์•ผ ์‹œ์ž‘์ด ๊ฐ€๋Šฅํ•˜๋‹ค.์ฒ˜์Œ์—” ๋Œ€์ถฉ ํ”„๋กœ์ ํŠธ๋ฅผ ์‹œ์ž‘ํ•ด๋ณด๋ คํ–ˆ์ง€๋งŒ,์ด๋Ÿด์ˆ˜๊ฐ€! ์•„๋Š” ๊ฒƒ์ด ๋ฏธ์•ฝํ•˜๋‹ˆ ์‹œ์ž‘ํ•  ์ˆ˜ ์—†์—ˆ๋‹ค.๊ทธ๋ž˜์„œ ๊ฐ€์žฅ ๊ธฐ์ดˆ์ ์œผ๋กœ ์•Œ์•„์•ผํ•˜๋Š”

post-this.tistory.com

 

 

 

 

[ Hello,World ์ถœ๋ ฅํ•˜๊ธฐ ]

 

Spring - [IntelliJ] Hello World ์ถœ๋ ฅํ•˜๊ธฐ

[ Spring MVC์— ๋Œ€ํ•˜์—ฌ ] Spring - Spring MVC๋ฅผ ์•Œ์•„์•ผ ์‹œ์ž‘์ด ๊ฐ€๋Šฅํ•˜๋‹ค.์ฒ˜์Œ์—” ๋Œ€์ถฉ ํ”„๋กœ์ ํŠธ๋ฅผ ์‹œ์ž‘ํ•ด๋ณด๋ คํ–ˆ์ง€๋งŒ,์ด๋Ÿด์ˆ˜๊ฐ€! ์•„๋Š” ๊ฒƒ์ด ๋ฏธ์•ฝํ•˜๋‹ˆ ์‹œ์ž‘ํ•  ์ˆ˜ ์—†์—ˆ๋‹ค.๊ทธ๋ž˜์„œ ๊ฐ€์žฅ ๊ธฐ์ดˆ์ ์œผ๋กœ ์•Œ์•„์•ผํ•˜๋Š”

post-this.tistory.com

 


 

 

Controller ์•ˆ์—
@GetMapping( )์ด๋ผ๋Š” ์กด์žฌ์˜€๋‹ค.


๊ณผ์—ฐ @GetMapping์€ ์–ด๋–ค ์—ญํ• ์„ ํ•˜๋Š” ๊ฒƒ์ผ๊นŒ?

 

 

 

 

๋ฐ์ดํ„ฐ์—๋Š” ๋‘๊ฐ€์ง€ ์ „์†ก๋ฐฉ์‹์ด ์กด์žฌํ•œ๋‹ค.

 

 

GET

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

 

 

POST

  • URL(์ฃผ์†Œ)์— ๋ฐ์ดํ„ฐ๋ฅผ ํฌํ•จ์‹œํ‚ค์ง€ ์•Š๋Š”๋‹ค.
  • ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ”๋””์— ํฌํ•จํ•œ๋‹ค.
  • URL์— ๋ฐ์ดํ„ฐ๊ฐ€ ๋…ธ์ถœ๋˜์–ด์žˆ์ง€ ์•Š์•„ GET๋ฐฉ์‹ ๋ณด๋‹จ ๋ณด์•ˆ์ด ๋†’๋‹ค.
  • ์บ์‹ฑ((๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€๊นŒ์šด ๊ณณ์— ์ž„์‹œ๋กœ ์ €์žฅํ•œ ํ›„, ๋น ๋ฅด๊ฒŒ ๋ถˆ๋Ÿฌ์˜ค๋Š” ํ”„๋กœ์„ธ์Šค)ํ•  ์ˆ˜ ์—†๋‹ค.
  • ์ฃผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์„œ๋ฒ„์— ์ €์žฅ, ์ˆ˜์ •ํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.

 

 


 

 

 

 

@GetMapping( )

  • Get ์š”์ฒญ์„ ํ•˜๋Š” API ์–ด๋…ธํ…Œ์ด์…˜์ด๋‹ค.
  • ๊ฒฝ๋กœ ๋งคํ•‘์— ๋”ฐ๋ผ ์–ด๋–ค ํŽ˜์ด์ง€๋ฅผ ๋ณด์—ฌ์ค„์ง€ ๊ฒฐ์ •ํ•œ๋‹ค.
    (๋งคํ•‘, ์—ฌ๋Ÿฌ ์š”์†Œ๋ฅผ ์—ฐ๊ฒฐํ•˜๋Š” ๊ณผ์ • ํ˜น์€ ๊ฒฐ๊ณผ๋ฌผ์„ ๋งํ•œ๋‹ค. ์˜ˆ์‹œ๋ฅผ ๋“ค์–ด๋ณด๋ฉด, ๊ฐ•๋‚จ ๋ง›์ง‘์„ ๊ฒ€์ƒ‰ํ–ˆ์„์‹œ ๊ฐ•๋‚จ์— ์žˆ๋Š” ๋ชจ๋“  ์‹๋‹น์ด ๊ฒ€์ƒ‰๋˜๋Š” ๊ฒฝ์šฐ๋ผ๊ณ  ๋ณผ ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™๋‹ค. ๋งค์นญ์€ ํ‚ค = 180cm ์ผ๋Œ€์ผ๋กœ ๋งž๋Š” ๊ฒฝ์šฐ)
  • ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ฌ ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.
  • ๋ฐ˜ํ™˜๊ฐ’์€ ํ•˜๋‚˜์ง€๋งŒ ๊ฒฝ๋กœ๋Š” ๋‹ค์ค‘์œผ๋กœ ์„ค์ • ๊ฐ€๋Šฅํ•˜๋‹ค. 

 

 

 

์ฝ”๋“œ๋ฅผ ๋ณด๊ณ  ์ดํ•ดํ•ด๋ณด์ž.

 

ํ•ด๋‹น ์ฝ”๋“œ๋Š” ํŽ˜์ด์ง€ ๋ฐ˜ํ™˜์€ ์•„๋‹ˆ๊ณ  @RestController(์ง๋ ฌํ™”๋ฅผ ํ†ตํ•ด ๋ฌธ์ž์—ด์ด ํŽ˜์ด์ง€์— ๋ณด์ด๊ฒŒ ํ•ด์ฃผ๋Š”)๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฌธ์ž์—ด์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ์ฝ”๋“œ์˜ ์ผ๋ถ€์ด๋‹ค.

Controller ๋‚ด๋ถ€ ์ฝ”๋“œ

@GetMapping("")
    public String helloWorld() {
        return "Hello, World";
	}

 

  1. @GetMapping("")์œผ๋กœ ("")์— ๊ฒฝ๋กœ๊ฐ€ ์ ํ˜€์žˆ์ง€ ์•Š์•„ ๋ฃจํŠธ๋ฅผ(๋ฉ”์ธ ํŽ˜์ด์ง€) ์˜๋ฏธํ•œ๋‹ค.
  2. @GetMapping("") = ์‚ฌ์šฉ์ž๊ฐ€ ๋ฉ”์ธ ํŽ˜์ด์ง€์— ๋“ค์–ด๊ฐ€๋ฉด
  3. "Hello, World"๋ฅผ ๋ฐ˜ํ™˜ํ•ด๋ผ. (@RestController๋ฅผ ์ด์šฉํ•˜์—ฌ)

 

 

 

๊ทธ๋Ÿฌ๋ฉด ์ด๋ฒˆ์—” ํŽ˜์ด์ง€ ๋ฐ˜ํ™˜ํ•˜๋Š” ์ฝ”๋“œ ์ผ๋ถ€๋ฅผ ์‚ดํŽด๋ณด์ž.

 

Controller ๋‚ด๋ถ€ ์ฝ”๋“œ

@GetMapping("")
public String homePage() {
    return "First";
}

 

  1. page๋ผ๋Š” ์ด๋ฆ„์œผ๋กœ .html ํ˜น์€ .jsp๊ฐ€ ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜์ž.
  2. ๋ฃจํŠธ ๊ฒฝ๋กœ("")๋กœ ๋“ค์–ด๊ฐ„๋‹ค๋ฉด
  3. First๋ผ๋Š” ํŽ˜์ด์ง€๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋ผ๋Š” ๋ช…๋ น์ด DispatcherServlet์—๊ฒŒ ์ „๋‹ฌ๋œ๋‹ค.
  4. DispatcherServlet์€ ViewResolver๋กœ ์ „๋‹ฌํ•˜๊ณ 
  5. ViewResolver๊ฐ€ First๋ผ๋Š” ์ด๋ฆ„์„ ๊ฐ€์ง„ ํŽ˜์ด์ง€๋ฅผ ์ฐพ์•„ ์ตœ์ข…์ ์œผ๋กœ ํ™”๋ฉด์— ์ถœ๋ ฅ๋˜๋„๋ก ํ•œ๋‹ค.

 

 


 

 

 

 

@RequestMapping

  • ๋‹ค์–‘ํ•œ ์†์„ฑ์„ ์ง€์ •๊ฐ€๋Šฅํ•˜๋‹ค.
  • value, method, params, headers, consumes, produces์˜ ์†์„ฑ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.
  • ๊ทธ ์†์„ฑ์„ ์ด์šฉํ•˜์—ฌ Get, Post ๋“ฑ ๋‹ค์–‘ํ•œ ๋™์ž‘์„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์†์„ฑ์ด ํ•˜๋‚˜๋ผ๋„ ๋‹ฌ๋ผ์•ผ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ Handler๊ฐ€ ๋งคํ•‘ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์‰ฝ๊ฒŒ ์ƒ๊ฐํ•˜๋ฉด @RequestMapping์—์„œ ์กฐํšŒํ•˜๋Š” ๋ชฉ์ ์— ๋งž๊ฒŒ ํŽธ๋ฆฌํ•˜๋„๋ก ๋งŒ๋“ค์–ด๋‚ธ ๋ฒ„์ „์„ @GetMapping ๋“ฑ.. ์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค.

 

 

์ด๊ฒƒ๋„ ์‰ฝ๊ฒŒ ์ฝ”๋“œ๋กœ ์‚ดํŽด๋ณด์ž.

@RequestMapping(value = "", method = RequestMethod.GET)
public String helloWorld() {
    return "Hello,Wrold!";
}

=

@GetMapping("")
    public String helloWorld() {
        return "Hello, World";
    }

 

@RequestMapping์€ method์— .GET์œผ๋กœ ์–ด๋–ค ๋ฐฉ์‹์œผ๋กœ ์‚ฌ์šฉํ• ๊ฑด์ง€ ๋ช…์‹œํ•˜๊ณ  ์žˆ๋‹ค. 

 

๋” ์ž์„ธํ•œ ๊ฑด ๋‚˜์ค‘์— ์ž‘์„ฑํ•˜๊ฒ ๋‹ค.

 

 

 


 

 

 

 

๋ชฉ์ ์— ๋”ฐ๋ผ ๋‹ค๋ฅธ ์–ด๋…ธํ…Œ์ด์…˜

  • @PostMapping =  ๋ฐ์ดํ„ฐ๋ฅผ ๊ฒŒ์‹œํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค. (Post์˜ ํŠน์ง•์„ ๊ทธ๋Œ€๋กœ ๊ฐ€์ ธ์˜จ ๊ฒƒ)
  • @PutMapping = ์ˆ˜์ •ํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋ฉฐ, ๋ฐ์ดํ„ฐ ์ „์ฒด๋ฅผ ๊ฐฑ์‹ ํ•˜๋‹ค.
  • @DeleteMapping = ๋ฐ์ดํ„ฐ๋ฅผ ์‚ญ์ œํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.
  • @PatchMapping = ์ˆ˜์ •ํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋ฉฐ, ์ˆ˜์ •๋œ ๋ถ€๋ถ„๋งŒ ๊ฐฑ์‹ ํ•œ๋‹ค.

 

@GetMapping์„ ํฌํ•จํ•˜์—ฌ ์œ„์˜ ์–ด๋…ธํ…Œ์ด์…˜๋“ค์€ @RequestMapping์—์„œ ๋ชฉ์ ์— ๋งž๊ฒŒ ๋” ํŽธ๋ฆฌํ•œ ์ฝ”๋“œ๋ฅผ ๋งŒ๋“  ๊ฒƒ์ด๋ผ ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค. @RequestMapping์—์„œ ๋‹ค์–‘ํ•œ ์†์„ฑ์„ ์กฐํ•ฉํ•ด ์›ํ•˜๋Š” ์ž‘๋™๋ฐฉ์‹์„ ๋งŒ๋“ค์–ด์•ผํ–ˆ๋‹ค๋ฉด, ์œ„์˜ ์–ด๋…ธํ…Œ์ด์…˜์€ ์†์„ฑ์˜ ์กฐํ•ฉ์— ๋Œ€ํ•œ ๋ถ€๋‹ด์„ ์ค„์—ฌ์ค€ ๊ฒƒ์œผ๋กœ ๋ณด์ธ๋‹ค.


 

 

@GetMapping์— ๋Œ€ํ•ด ์•Œ์•„๋ดค์Šต๋‹ˆ๋‹ค.

๊ทธ๋ƒฅ ํ•œ ์ค„๋กœ ์ •๋ฆฌํ•˜๋ฉด ๋“ค์–ด์˜ค๋Š” ๊ฒฝ๋กœ์— ๋งž์ถฐ ๋ฐ˜ํ™˜๋  ํŽ˜์ด์ง€๋ฅผ ๊ณจ๋ผ์ฃผ๋Š” ์—ญํ• ์ธ ๊ฒƒ ๊ฐ™๋„ค์š”.
@RequestMapping์— ๋Œ€ํ•ด์„œ๋Š” ๋‹ค์Œ์— ์ •๋ฆฌํ•ด๋ณผ๊นŒ ํ•ฉ๋‹ˆ๋‹ค.

 

 

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

 

๐Ÿชฝ

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

 

 


 

 

 

- @GetMapping์˜ ๊ฐœ๋…

 

GetMapping ์–ด๋…ธํ…Œ์ด์…˜์œผ๋กœ ๋‹ค์ค‘๋งตํ•‘ํ•˜๊ธฐ

@GetMapping ์–ด๋…ธํ…Œ์ด์…˜์€ HTTP GET ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ๋งตํ•‘(@RequestMapping) ํ•˜๋Š” ์–ด๋…ธํ…Œ์ด์…˜์ด๋‹ค. ๋ฉ”์„œ๋“œ(url)์— ๋”ฐ๋ผ ์–ด๋–ค ํŽ˜์ด์ง€๋ฅผ ๋ณด์—ฌ์ค„์ง€ ๊ฒฐ์ •ํ•˜๋Š” ์—ญํ• ์„ ํ•œ๋‹ค. ์ฐธ๊ณ ๋กœ ์Šคํ”„๋ง๋ถ€ํŠธ์—์„œ๋Š”

youngjinmo.github.io

 

 

 

- Get๊ณผ Post

 

Controller์˜ PostMapping, GetMapping ์— ๋Œ€ํ•ด ์ดํ•ดํ•˜๊ธฐ

ใ…‡ GET/POST ์ดํ•ดํ•˜๊ธฐ 1) GET ๋ž€? - URL์— ๋ฐ์ดํ„ฐ๋ฅผ ํฌํ•จ์‹œ์ผœ ์š”์ฒญ - ๋ฐ์ดํ„ฐ๋ฅผ ํ—ค๋”์— ํฌํ•จํ•˜์—ฌ ์ „์†ก - URL์— ๋ฐ์ดํ„ฐ๊ฐ€ ๋…ธ์ถœ๋˜์–ด ๋ณด์•ˆ์— ์ทจ์•ฝ - ์บ์‹ฑํ•  ์ˆ˜ ์žˆ์Œ => ์ฃผ๋กœ ์กฐํšŒํ• ๋•Œ๋งŒ ์‚ฌ์šฉ 2) POST ๋ž€? - URL์—

tjdwns4537.tistory.com

 

 

 

- @RequestMapping ๋™์ž‘๋ฐฉ์‹

 

[Spring] @RequestMapping์ด๋ž€ ๊ทธ๋ฆฌ๊ณ  ๋™์ž‘ ๋ฐฉ์‹

์ด๋ฒˆ ๊ธ€์—์„œ๋Š” Spring ๊ฐœ๋ฐœ ์‹œ ์ž์ฃผ ์‚ฌ์šฉํ•˜๋Š” @RequestMapping์˜ ๊ฐœ๋… ๋ฐ ๋™์ž‘ ๋ฐฉ์‹์— ๋Œ€ํ•ด ์ •๋ฆฌํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. [๋ชฉ์ฐจ] 1. @RequestMapping์ด๋ž€? 2. @RequestMapping ์ž‘์„ฑ ์˜ˆ์‹œ 3. @RequestMapping ๋™์ž‘ ๋ฐฉ์‹ 1. @RequestMapping

backendcode.tistory.com

 

 

 

- @RequestMapping ์˜ต์…˜

 

[Spring] @RequestMapping ์˜ต์…˜

์ด๋ฒˆ ๊ธ€์—์„œ๋Š” @RequestMapping ์–ด๋…ธํ…Œ์ด์…˜์˜ ์˜ต์…˜๋“ค์— ๋Œ€ํ•ด ์ •๋ฆฌํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ตญ๋น„ ๊ณผ์ •์„ ๋“ค์œผ๋ฉฐ, ๊ธฐ์กด์— ์•Œ๊ณ  ์žˆ๋˜ @RequestMapping ์˜ต์…˜๋“ค๊ณผ ๋‹ค๋ฅธ ์˜ต์…˜๋“ค์ด ์กด์žฌํ•˜๋Š” ๊ฒƒ์„ ์•Œ๊ฒŒ ๋˜์–ด ๊ธฐ์กด์— ์•Œ๊ณ  ์žˆ

backendcode.tistory.com

 

 

 

- ๋งคํ•‘๊ณผ ๋งค์นญ

 

#002.๋งคํ•‘๊ณผ ๋งค์นญ์˜ ์ฐจ์ด, ์•Œ๊ณ  ๊ณ„์„ธ์š”?

์ฃผ๋‹ˆ์–ด ๊ธฐํš์ž ์‹œ์ ˆ, ๊ฐœ๋ฐœ์ž๋“ค๊ณผ ์ผํ•˜๋ฉด์„œ ๋งค์นญ(Matching)์ด๋ž€ ๋‹จ์–ด์™€ ๋งคํ•‘(Mapping)์ด๋ž€ ๋‹จ์–ด๋ฅผ ์ž์ฃผ ๋“ค์—ˆ์—ˆ๋Š”๋ฐ, ๋‹น์‹œ๋งŒ ํ•ด๋„ ์ด ๋‘ ๋‹จ์–ด์˜ ์ฐจ์ด๋ฅผ ์ž˜ ๋ชฐ๋ž์Šต๋‹ˆ๋‹ค. ๊ทธ๋ƒฅ ๊ฐœ๋ฐœ์ž ๋งˆ๋‹ค ์–ด๋–ค ๊ฐœ๋ฐœ์ž๋Š”

yamestyle.com

 

 

 

 

 

[ SpringMVC์— ๋Œ€ํ•˜์—ฌ ]

 

Spring - Spring MVC๋ฅผ ์•Œ์•„์•ผ ์‹œ์ž‘์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

์ฒ˜์Œ์—” ๋Œ€์ถฉ ํ”„๋กœ์ ํŠธ๋ฅผ ์‹œ์ž‘ํ•ด๋ณด๋ คํ–ˆ์ง€๋งŒ,์ด๋Ÿด์ˆ˜๊ฐ€! ์•„๋Š” ๊ฒƒ์ด ๋ฏธ์•ฝํ•˜๋‹ˆ ์‹œ์ž‘ํ•  ์ˆ˜ ์—†์—ˆ๋‹ค.๊ทธ๋ž˜์„œ ๊ฐ€์žฅ ๊ธฐ์ดˆ์ ์œผ๋กœ ์•Œ์•„์•ผํ•˜๋Š” ๊ฐœ๋…์„ ์ฐจ๊ทผ์ฐจ๊ทผ ์ •๋ฆฌํ•ด๋ณผ๊นŒ ํ•œ๋‹ค.๋‘๋‘ฅ, Spring MVC๋ž€?์•„๋งˆ ์ •๋ณด์ฒ˜

post-this.tistory.com

 

 

 

 

[ Hello World ์ถœ๋ ฅํ•˜๊ธฐ ]

 

Spring - [IntelliJ] Hello World ์ถœ๋ ฅํ•˜๊ธฐ

[ Spring MVC์— ๋Œ€ํ•˜์—ฌ ] Spring - Spring MVC๋ฅผ ์•Œ์•„์•ผ ์‹œ์ž‘์ด ๊ฐ€๋Šฅํ•˜๋‹ค.์ฒ˜์Œ์—” ๋Œ€์ถฉ ํ”„๋กœ์ ํŠธ๋ฅผ ์‹œ์ž‘ํ•ด๋ณด๋ คํ–ˆ์ง€๋งŒ,์ด๋Ÿด์ˆ˜๊ฐ€! ์•„๋Š” ๊ฒƒ์ด ๋ฏธ์•ฝํ•˜๋‹ˆ ์‹œ์ž‘ํ•  ์ˆ˜ ์—†์—ˆ๋‹ค.๊ทธ๋ž˜์„œ ๊ฐ€์žฅ ๊ธฐ์ดˆ์ ์œผ๋กœ ์•Œ์•„์•ผํ•˜๋Š”

post-this.tistory.com

 


 

 

Hello, World๋ฅผ ์ถœ๋ ฅํ–ˆ๋‹ค.
๊ทธ๋Ÿฐ๋ฐ @Controller๊ฐ€ ์•„๋‹Œ @RestController๋ฅผ ์‚ฌ์šฉํ•˜์˜€๋‹ค.

์™œ @RestController๋ฅผ ์‚ฌ์šฉํ•œ๊ฑธ๊นŒ?

 

 

 

 

@Controller

  • @Controller๋Š” ์ฃผ๋กœ view๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
  • ViewResolver๋ฅผ ํ†ตํ•ด view๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
  • AnnotationMethodHandlerAdapter ํ•ธ๋“ค๋Ÿฌ ์–ด๋Œ‘ํ„ฐ๊ฐ€ ์‚ฌ์šฉํ•œ๋‹ค.
  • ๋ฉ”์†Œ๋“œ ๋‹จ์œ„๋กœ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ํšจ์œจ์ด ์ข‹๋‹ค.
  • @Controller๋Š” 200 OK(์„ฑ๊ณต์„ ์•Œ๋ฆฌ๋Š” ์ƒํƒœ ์ฝ”๋“œ)๋ฅผ ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ณด๋‚ธ๋‹ค.

 

 

@RestController

  • @Controller์— @ResponseBody๊ฐ€ ์ถ”๊ฐ€๋˜์—ˆ๋‹ค.
  • Controller๋ฅผ ํ†ตํ•ด Json ํ˜•ํƒœ๋กœ ๋ฐ˜ํ™˜ํ•ด์•ผํ•˜๋Š” ๊ฒฝ์šฐ ์‚ฌ์šฉํ•œ๋‹ค.
  • HttpMessageConverter๋ฅผ ํ†ตํ•ด Json ํ˜•ํƒœ๋กœ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
  • ๋ฐ˜ํ™˜๋˜๋Š” ๊ฐ์ฒด๋Š” Json์œผ๋กœ Serialize(์ง๋ ฌํ™”)๋˜์–ด ๋ฐ˜ํ™˜๋œ๋‹ค.
  • @RestController๋Š” 200 OK(์„ฑ๊ณต์„ ์•Œ๋ฆฌ๋Š” ์ƒํƒœ ์ฝ”๋“œ)๋ฅผ ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ณด๋‚ธ๋‹ค.

 

 

 

๊ฒฐ๋ก ์ ์œผ๋กœ @Controller๋Š” View๋ฅผ ๋ฐ˜ํ™˜ํ•  ๋•Œ ์‚ฌ์šฉํ•˜๊ณ , @RestController๋Š” Hello, World ๊ฐ™์€ ์–ด๋–ค Json ํ˜•ํƒœ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ˜ํ™˜ํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค๋Š” ๊ฑธ ์•Œ์•˜๋‹ค.

 

๊ทธ๋ ‡๋‹ค๋ฉด ์™œ @RestController๋Š” Json ๋ฐ˜ํ™˜์ด ๋˜๋Š”๊ฑธ๊นŒ?

 

 

 

 

์ง๋ ฌํ™”

  • ์ปดํ“จํ„ฐ ๊ณผํ•™์˜ ๋ฐ์ดํ„ฐ ์Šคํ† ๋ฆฌ์ง€ ๋ฌธ๋งฅ์—์„œ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋‚˜ ์˜ค๋ธŒ์ ํŠธ ์ƒํƒœ๋ฅผ ๋™์ผํ•˜๊ฑฐ๋‚˜ ๋‹ค๋ฅธ ์ปดํ“จํ„ฐ ํ™˜๊ฒฝ์— ์ €์žฅํ•˜๊ณ  ๋‚˜์ค‘์— ์žฌ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ๋Š” ํฌ๋งท์œผ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ณผ์ •์ด๋‹ค.
  • ์ž๋ฐ” ์‹œ์Šคํ…œ ๋‚ด๋ถ€์—์„œ ์‚ฌ์šฉ๋˜๋Š” ๊ฐ์ฒด ๋˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์™ธ๋ถ€์˜ ์ž๋ฐ” ์‹œ์Šคํ…œ์—์„œ๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ๋ฐ”์ดํŠธ(byte) ํ˜•ํƒœ๋กœ ๋ฐ์ดํ„ฐ ๋ณ€ํ™˜ํ•˜๋Š” ๊ธฐ์ˆ ๊ณผ ๋ฐ”์ดํŠธ๋กœ ๋ณ€ํ™˜๋œ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค์‹œ ๊ฐ์ฒด๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ธฐ์ˆ (์—ญ์ง๋ ฌํ™”)์„ ์•„์šธ๋Ÿฌ์„œ ์ด์•ผ๊ธฐํ•œ๋‹ค.

 

 

 

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

 

 

 

 

 

Q. @Controller๋Š” Json ํ˜•ํƒœ๋กœ ๋ฐ˜ํ™˜์„ ๋ชปํ•˜๋‚˜?

 

A. ๊ทธ๊ฑด ์•„๋‹ˆ๋‹ค. ํ•  ์ˆ˜ ์žˆ๋‹ค. @ResponseBody๋ฅผ ๋ถ™์—ฌ์ฃผ๋ฉด Json ํ˜•ํƒœ๋กœ ๋ฐ˜ํ™˜์ด ๊ฐ€๋Šฅํ•˜๋‹ค. ๋ณธ๋ž˜ @Controller๋Š” ViewResolver๊ฐ€ ์ž‘๋™ํ•˜์—ฌ view๋ฅผ ๋ฐ˜ํ™˜ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ค€๋‹ค. ํ•˜์ง€๋งŒ @ResponseBody๋ฅผ ๋ถ™์ด๋ฉด @RestController์ฒ˜๋Ÿผ HttpMessageConverter๊ฐ€ ๊ฐœ์ž…ํ•˜๊ฒŒ ๋˜์–ด ๊ฐ์ฒด๋ฅผ ์ง๋ ฌํ™”ํ•˜์—ฌ ์ „๋‹ฌํ•˜๊ฒŒ ๋œ๋‹ค. ๋˜ํ•œ MessageConverter์—๋Š” ๋ฐ์ดํ„ฐ์˜ ์ข…๋ฅ˜(๋‹จ์ˆœ ๋ฌธ์ž์—ด์ธ์ง€, ๊ฐ์ฒด์ธ์ง€...)์— ๋”ฐ๋ผ ์„œ๋กœ ๋‹ค๋ฅธMessageConverter๊ฐ€ ์ž‘๋™ํ•˜๊ฒŒ ๋œ๋‹ค.

// @ResponseBody๋ฅผ ๋ถ™์ธ ์ฝ”๋“œ
@Controller
public class HelloController {

    @GetMapping("")
    @ResponseBody
    public String helloWorld() {
        return "Hello, World";
    }

}

 

<๊ฒฐ๊ณผ>

๐Ÿ‘

 

 

 


 

 

 

 

Http ์ƒํƒœ ์ฝ”๋“œ

  • ํŠน์ • HTTP ์š”์ฒญ์ด ์„ฑ๊ณต์ ์œผ๋กœ ์™„๋ฃŒ๋˜์—ˆ๋Š”์ง€ ์•Œ๋ ค์ค€๋‹ค.
  • ๊ฐ€์žฅ ๊ธฐ๋ณธ์ ์ธ ์„ฑ๊ณต์‘๋‹ต์€ 200 OK๊ฐ€ ์žˆ๋‹ค.

 

- ๋” ๋‹ค์–‘ํ•œ ์ƒํƒœ ์ฝ”๋“œ

 

HTTP ์ƒํƒœ ์ฝ”๋“œ - HTTP | MDN

HTTP ์‘๋‹ต ์ƒํƒœ ์ฝ”๋“œ๋Š” ํŠน์ • HTTP ์š”์ฒญ์ด ์„ฑ๊ณต์ ์œผ๋กœ ์™„๋ฃŒ๋˜์—ˆ๋Š”์ง€ ์•Œ๋ ค์ค๋‹ˆ๋‹ค. ์‘๋‹ต์€ 5๊ฐœ์˜ ๊ทธ๋ฃน์œผ๋กœ ๋‚˜๋ˆ„์–ด์ง‘๋‹ˆ๋‹ค: ์ •๋ณด๋ฅผ ์ œ๊ณตํ•˜๋Š” ์‘๋‹ต, ์„ฑ๊ณต์ ์ธ ์‘๋‹ต, ๋ฆฌ๋‹ค์ด๋ ‰ํŠธ, ํด๋ผ์ด์–ธํŠธ ์—๋Ÿฌ, ๊ทธ๋ฆฌ๊ณ 

developer.mozilla.org

 

 

 

 

Q. @RestController์˜ ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ฐ˜ํ™˜๋˜๋Š” ์„ฑ๊ณต ์ƒํƒœ ์ฝ”๋“œ๋Š” 200 OK๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ๋‹ค๋ฅธ ์ƒํƒœ ์ฝ”๋“œ๋กœ ๋ฐ”๊พธ๋ ค๋ฉด ์–ด๋–ป๊ฒŒ ํ•ด์•ผํ•˜๋‚˜?

A. ResponseEntity๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ƒํƒœ ์ฝ”๋“œ๋ฅผ ์ง์ ‘ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‹ค. 

 

1) ResponseEntity.ok()๋ฅผ ์‚ฌ์šฉํ•œ ์ฝ”๋“œ (200 OK)

// ์˜ˆ์ œ ์ถœ์ฒ˜ - mangkyu.tistory (๋ง๋‚˜๋‹ˆ ๊ฐœ๋ฐœ์ž๋‹˜)

  @GetMapping(value = "/users")
    public ResponseEntity<User> findUserWithResponseEntity(@RequestParam String userName){
        return ResponseEntity.ok(userService.findUser(userName));
    }

 

 

2) ResponseEntity.status(HttpStatus.CREATED)๋ฅผ ์‚ฌ์šฉํ•œ ์ฝ”๋“œ (201 Created)

@GetMapping(value = "/users")
public ResponseEntity<User> findUserWithCreatedResponse(@RequestParam String userName){
    return ResponseEntity.status(HttpStatus.CREATED).body(userService.findUser(userName));
}

 

์ฝ”๋“œ ์„ค๋ช… :

  1. @GetMapping โ–ป users ๊ฒฝ๋กœ๋กœ ๋“ค์–ด์˜จ ์š”์ฒญ์„ ํ•ด๊ฒฐํ•˜๊ณ  ์‘๋‹ต์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
  2. ResponseEntity<User> โ–ป User(User ์•ˆ์— ์žˆ์„ ์–ด๋–ค ์ •๋ณด๋“ค, ์ด๋ฆ„+๋‚˜์ด+์ฃผ์†Œ์™€ ๊ฐ™์€...) ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š”๋ฐ, ์ƒํƒœ ์ฝ”๋“œ์™€ ํ•จ๊ป˜ ๋ฐ˜ํ™˜ํ•˜๋‹ค๋Š” ๋œป. (ResponseEntity๋กœ ๊ฐ์‹ธ์„œ ๋ฐ˜ํ™˜)
  3. @RequestParam  โ–ป ํŒŒ๋ผ๋ฏธํ„ฐ ์ด๋ฆ„์œผ๋กœ ๋ฐ”์ธ๋”ฉ(๊ตฌ์ฒด์ ์ธ ๊ฐ’์„ ํ• ๋‹นํ•˜๋Š” ๊ณผ์ •, ์ด๋ฆ„ = ๋ฏธ๋‚˜ + ๋‚˜์ด = 10์„ธ + ์ฃผ์†Œ = ์„œ์šธํŠน๋ณ„์‹œ์™€ ๊ฐ™์€...) ๊ทธ๋Ÿฐ๋ฐ userName์ด ์˜†์— ๋ถ™์—ˆ๋‹ค. ์ด ์˜๋ฏธ๋Š” ๊ตฌ์ฒด์ ์ธ ๊ฐ’์œผ๋กœ userName์ด ๋“ค์–ด์˜ค๋ฉด(์ฟผ๋ฆฌ ํŒŒ๋ผ๋ฏธํ„ฐ) userName ๋ณ€์ˆ˜์— ์ €์žฅํ•˜๊ฒ ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. (๋ฏธ๋‚˜๋ผ๋Š” ๊ฐ’์ด url๋กœ๋ถ€ํ„ฐ ๋ฐ›์•„์˜ค๋ฉด ๊ทธ ๊ฐ’์„ userName์— ์ €์žฅํ•˜๊ณ  ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๊ทธ ์‚ฌ์šฉ์ž์— ๋Œ€ํ•œ ๋‹ค๋ฅธ ์ •๋ณด๋ฅผ ์ถ”๊ฐ€์ ์œผ๋กœ ๋„ฃ์„ ์ˆ˜ ์žˆ๊ฒŒ ๋งŒ๋“ ๋‹ค๋Š” ์˜๋ฏธ์ธ ๊ฒƒ ๊ฐ™๋‹ค.)
  4. ResponseEntity.status  โ–ป ์‘๋‹ต์ƒํƒœ ์ฝ”๋“œ๋ฅผ ์„ค์ •ํ•˜๋„๋ก ํ•œ๋‹ค.
  5. HttpStatus.CREATED  โ–ป 201 Created๋ฅผ ์˜๋ฏธํ•œ๋‹ค. ์š”์ฒญ์ด ์„ฑ๊ณต์ ์œผ๋กœ ์ฒ˜๋ฆฌ๋˜์—ˆ์œผ๋ฉฐ, ์ž์›์ด ์ƒ์„ฑ๋˜์—ˆ์Œ์„ ๋‚˜ํƒ€๋‚ด๋Š” ์„ฑ๊ณต ์ƒํƒœ ์‘๋‹ต ์ฝ”๋“œ์ด๋‹ค. 
  6. findUser(userName)  โ–ป userName์„ ์ฐพ์•„์„œ User ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋ผ๋Š” ๊ฒƒ์ด๋‹ค.

 

๊ฒฐ๋ก  : users๋กœ ๋“ค์–ด์˜จ ์š”์ฒญ์„ ํ•ด๊ฒฐํ•œ ํ›„ ์„ฑ๊ณต์ ์ด๋ฉด 201 CREATED๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋ฉฐ ๋ฐ˜ํ™œํ•  ๋•Œ User ๋‚ด์šฉ๋„ ๊ฐ™์ด ๋‹ด์•„์„œ ๋ฐ˜ํ™˜ํ•ด๋ผ. 

 

 

 

 

 

 

Q. ๊ทธ๋ ‡๋‹ค๋ฉด @Controller๋Š” ์ƒํƒœ ์ฝ”๋“œ๋ฅผ ์–ด๋–ป๊ฒŒ ๋ณ€ํ™˜ํ•  ์ˆ˜ ์žˆ๋Š”๊ฐ€?

 

A. @RestController์™€ ๊ฐ™์ด ResponseEntity.status๋ฅผ ์ด์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•๋„ ์žˆ์ง€๋งŒ, HttpServletResponse ๊ฐ์ฒด๋ฅผ ์ด์šฉํ•˜์—ฌ ์ƒํƒœ ์ฝ”๋“œ๋ฅผ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‹ค. ์•„๋ž˜ ์ฝ”๋“œ๋ฅผ ๋ณด๋ฉด  HttpServletResponse response์™€ response.setStatus(HttpStatus.CREATED.value()); ์ฝ”๋“œ๋ฅผ ํ†ตํ•ด 201 CREATED๋กœ ์ƒํƒœ๋ฅผ ์„ค์ •ํ•˜๋Š” ๊ฑธ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

    @GetMapping("/users")
    public String findUser(@RequestParam String userName, HttpServletResponse response) {        
        response.setStatus(HttpStatus.CREATED.value());
    }

 

 

 


 

 

์ด๋ฒˆ์—๋Š” @Controller์™€ @RestController์— ๋Œ€ํ•ด ์•Œ์•„๋ดค์Šต๋‹ˆ๋‹ค.

์ƒ๊ฐ๋ณด๋‹ค ์ •๋ฆฌํ•˜๋Š”๋ฐ ์˜ค๋ž˜๊ฑธ๋ ค์„œ ์กฐ๊ธˆ ๋‹นํ™ฉ์Šค๋Ÿฌ์› ๋„ค์š”...

 

๋‹ค ์ฒ˜์Œ๋ณด๋Š” ๋‚ด์šฉ๋“ค์ด๋ผ ํ•˜๋‚˜์˜ ๊ฐœ๋…์„ ์ดํ•ดํ•˜๋ ค๋ฉด ๋‹ค๋ฅธ ๊ฐœ๋…๋“ค๋„ ์ดํ•ดํ•ด์•ผํ–ˆ๊ณ 
์ƒํƒœ ์ฝ”๋“œ์— ๋Œ€ํ•œ ๋ถ€๋ถ„๋„ ๋ชฐ๋ž๋‹ค๊ฐ€ ์–ผ๋–จ๊ฒฐ์— ๊ฐ„๋‹จํžˆ ๋ฐฐ์šฐ๊ณ  ๋„˜์–ด๊ฐ€๊ฒŒ ๋˜๋Š” ์‹œ๊ฐ„์ด์—ˆ์Šต๋‹ˆ๋‹ค.

 

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

 

๐Ÿชฝ

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

 

 


 

 

- @Controller์™€ @RestController์˜ ์›๋ฆฌ์™€ ์ฐจ์ด ๊ทธ๋ฆฌ๊ณ  ์ƒํƒœ์ฝ”๋“œ

 

[Spring] @Controller์™€ @RestController ์ฐจ์ด

Spring์—์„œ ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ์ง€์ •ํ•ด์ฃผ๊ธฐ ์œ„ํ•œ ์–ด๋…ธํ…Œ์ด์…˜์€ @Controller์™€ @RestController๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ „ํ†ต์ ์ธ Spring MVC์˜ ์ปจํŠธ๋กค๋Ÿฌ์ธ @Controller์™€ Restuful ์›น์„œ๋น„์Šค์˜ ์ปจํŠธ๋กค๋Ÿฌ์ธ @RestController์˜ ์ฃผ์š”ํ•œ ์ฐจ์ด์ 

mangkyu.tistory.com

 

 

 

- ๋‹ค์–‘ํ•œ Controller์— ๋Œ€ํ•ด์„œ

 

[Spring] Controller์˜ ์ข…๋ฅ˜์™€ ๋‹ค์–‘ํ•œ ์ „๋žต

1. Controller์˜ ์ข…๋ฅ˜ 1) Servlet - javax.servlet.Servlet์„ ์ƒ์†ํ•œ ํด๋ž˜์Šค๋ฅผ ์ปจํŠธ๋กค๋Ÿฌ๋กœ ์‚ฌ์šฉํ•œ๋‹ค. @Component("/home") // bean ์ด๋ฆ„์„ ์ด์šฉํ•œ ํ•ธ๋“ค๋Ÿฌ ๋งคํ•‘ ๋ฐฉ์‹ ์ด์šฉ public class HomeServlet extends HttpServlet { protected void

kimcoder.tistory.com

 

 

 

- ์ง๋ ฌํ™”์— ๋Œ€ํ•ด์„œ

 

์ง๋ ฌํ™” - ์œ„ํ‚ค๋ฐฑ๊ณผ, ์šฐ๋ฆฌ ๋ชจ๋‘์˜ ๋ฐฑ๊ณผ์‚ฌ์ „

์œ„ํ‚ค๋ฐฑ๊ณผ, ์šฐ๋ฆฌ ๋ชจ๋‘์˜ ๋ฐฑ๊ณผ์‚ฌ์ „. ์ง๋ ฌํ™”(็›ดๅˆ—ๅŒ–) ๋˜๋Š” ์‹œ๋ฆฌ์–ผ๋ผ์ด์ œ์ด์…˜(serialization)์€ ์ปดํ“จํ„ฐ ๊ณผํ•™์˜ ๋ฐ์ดํ„ฐ ์Šคํ† ๋ฆฌ์ง€ ๋ฌธ๋งฅ์—์„œ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋‚˜ ์˜ค๋ธŒ์ ํŠธ ์ƒํƒœ๋ฅผ ๋™์ผํ•˜๊ฑฐ๋‚˜ ๋‹ค๋ฅธ ์ปดํ“จํ„ฐ ํ™˜๊ฒฝ

ko.wikipedia.org

 

 

 

 

- @RequestParam์— ๋Œ€ํ•ด์„œ

 

๐ŸŒฑ @RequestParam ๊ฐœ๋… ์ •๋ฆฌ

@RequestParam ์Šคํ”„๋ง์ด ์ œ๊ณตํ•˜๋Š” ์–ด๋…ธํ…Œ์ด์…˜์œผ๋กœ, ์ด๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์š”์ฒญ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ๋งค์šฐ ํŽธ๋ฆฌํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค @ResponseBody @RequestMapping("/request-param") public String requestParamV2( @RequestParam("username") Strin

yummy0102.tistory.com

 

 

 

- HttpservletResponse์— ๋Œ€ํ•ด์„œ

 

์„œ๋ธ”๋ฆฟ(Servlet) - HttpservletResponse ๊ธฐ๋ณธ ์‚ฌ์šฉ๋ฒ•, HTTP ์‘๋‹ต ๋ฐ์ดํ„ฐ ๋‹จ์ˆœ ํ…์ŠคํŠธ & HTML & API JSON

์ธํ”„๋Ÿฐ ๊น€์˜ํ•œ ๋‹˜์˜ ์Šคํ”„๋ง ๊ฐ•์˜์ด๋ฉฐ, ์„น์…˜ 2 - ์„œ๋ธ”๋ฆฟ(Servlet)๋ฅผ ์ •๋ฆฌํ•œ๋‹ค. ์‹ค์Šตํ˜• ๊ต์œก์œผ๋กœ ์ž์„ธํ•œ ์„ค๋ช…์ด ๊ถ๊ธˆํ•˜๋ฉด ์ˆ˜๊ฐ•์„ ๊ถŒ์žฅํ•œ๋‹ค. (์‹ค์Šต์€ ๋ชจ๋‘ ์˜›๋‚  ๋ฐฉ์‹์ด๋ฉฐ, ํ˜„์žฌ๋Š” ์ข€ ๋” ํŽธํ•˜๊ฒŒ ์‚ฌ์šฉํ•œ

loopstudy.tistory.com

 

 

 

- ๋‹ค์–‘ํ•œ ์ƒํƒœ ์ฝ”๋“œ

 

HTTP ์ƒํƒœ ์ฝ”๋“œ - HTTP | MDN

HTTP ์‘๋‹ต ์ƒํƒœ ์ฝ”๋“œ๋Š” ํŠน์ • HTTP ์š”์ฒญ์ด ์„ฑ๊ณต์ ์œผ๋กœ ์™„๋ฃŒ๋˜์—ˆ๋Š”์ง€ ์•Œ๋ ค์ค๋‹ˆ๋‹ค. ์‘๋‹ต์€ 5๊ฐœ์˜ ๊ทธ๋ฃน์œผ๋กœ ๋‚˜๋ˆ„์–ด์ง‘๋‹ˆ๋‹ค: ์ •๋ณด๋ฅผ ์ œ๊ณตํ•˜๋Š” ์‘๋‹ต, ์„ฑ๊ณต์ ์ธ ์‘๋‹ต, ๋ฆฌ๋‹ค์ด๋ ‰ํŠธ, ํด๋ผ์ด์–ธํŠธ ์—๋Ÿฌ, ๊ทธ๋ฆฌ๊ณ 

developer.mozilla.org

 

 

 

- ์Šคํ”„๋ง์‚ฌ์ „

 

ResponseBody (Spring Framework 6.1.14 API)

Annotation that indicates a method return value should be bound to the web response body. Supported for annotated handler methods. As of version 4.0 this annotation can also be added on the type level in which case it is inherited and does not need to be a

docs.spring.io

 

 

 

 

- @ResponseStatus์— ๋Œ€ํ•˜์—ฌ

 

Spring์—์„œ ํŠน์ • HTTP ์‘๋‹ต ์ƒํƒœ ๋ฐ˜ํ™˜ํ•˜๊ธฐ

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

devel-repository.tistory.com

 

 

 

์ฒ˜์Œ์—” ๋Œ€์ถฉ ํ”„๋กœ์ ํŠธ๋ฅผ ์‹œ์ž‘ํ•ด๋ณด๋ คํ–ˆ์ง€๋งŒ,
์ด๋Ÿด์ˆ˜๊ฐ€! ์•„๋Š” ๊ฒƒ์ด ๋ฏธ์•ฝํ•˜๋‹ˆ ์‹œ์ž‘ํ•  ์ˆ˜ ์—†์—ˆ๋‹ค.

๊ทธ๋ž˜์„œ ๊ฐ€์žฅ ๊ธฐ์ดˆ์ ์œผ๋กœ ์•Œ์•„์•ผํ•˜๋Š” ๊ฐœ๋…์„ ์ฐจ๊ทผ์ฐจ๊ทผ ์ •๋ฆฌํ•ด๋ณผ๊นŒ ํ•œ๋‹ค.

๋‘๋‘ฅ, Spring MVC๋ž€?

์•„๋งˆ ์ •๋ณด์ฒ˜๋ฆฌ๊ธฐ์‚ฌ๋ฅผ ์ค€๋น„ํ•˜๊ฑฐ๋‚˜, IT๊ด€๋ จ ์ „๊ณต์ž๋ผ๋ฉด ํ•œ ๋ฒˆ์€ ๋“ค์–ด๋ดค์„ MVC.
์ด๋ฒˆ ๊ธฐํšŒ์— ์ž์„ธํžˆ ์•Œ์•„๋ณด์ž.

 

 

 

 

๐Ÿชฝ

"ํ‹€๋ฆฐ ๋‚ด์šฉ์ด ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค."

 

 

 


 

[ Hello World๋ฅผ ์ถœ๋ ฅํ•˜๊ธฐ ]

 

Spring - [IntelliJ] Hello Word ์ถœ๋ ฅํ•˜๊ธฐ

์•„์ฃผ ๊ฐ„๋‹จํ•œ ์‹ค์Šต์„ ํ•ด๋ณผ๊นŒํ•œ๋‹ค.  Hello, World ์ถœ๋ ฅํ•˜๊ธฐ๐ŸŽƒ1. Spring initializr ์ƒ์„ฑํ•˜๊ธฐ. https://start.spring.io/  โ–ก  Dependencies - SpringWeb ์„ ํƒํ•˜๊ธฐ.โ–ก  Java ํ•ด๋‹นํ•˜๋Š” ๋ฒ„์ „์— ์„ ํƒํ•˜๊ธฐ.    โœ”๏ธŽ  [Mac ๊ธฐ

post-this.tistory.com

 


 

 

 

1. MVC

  • Model - View - Controller๋กœ ๊ตฌ์„ฑ๋˜์–ด์žˆ๋‹ค.
  • Model, View, Controller๋Š” ๋…๋ฆฝ์ ์œผ๋กœ ์›€์ง์ธ๋‹ค. (๊ฐ์ž ๋งก์€ ๋ถ„์•ผ๋งŒ ํ•ด๊ฒฐํ•œ๋‹ค)
  • MVC ์‚ฌ์šฉ์‹œ, ๊ฒฐํ•ฉ๋„๋ฅผ ๋‚ฎ์ถœ ์ˆ˜ ์žˆ๋‹ค.
  • MVC ์‚ฌ์šฉ์‹œ, ์ค‘๋ณต์ฝ”๋“œ ์ œ๊ฑฐ๊ฐ€ ์‰ฝ๊ณ  ์œ ์ง€๋ณด์ˆ˜์— ์ข‹๋‹ค.
  • MVC ์‚ฌ์šฉ์‹œ, ํ™•์žฅ์„ฑ๊ณผ ์œ ์—ฐ์„ฑ์ด ์ฆ๊ฐ€ํ•œ๋‹ค.

 

(1)  View

  • ์‚ฌ์šฉ์ž๊ฐ€ ๋ณด๋Š” ํ™”๋ฉด์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค.
  • ์˜ˆ์‹œ๋ฅผ ๋“ค์–ด๋ณด์ž, ์‚ฌ์šฉ์ž๊ฐ€ ์›น ๊ฒ€์ƒ‰์ฐฝ์— [apple]์ด๋ผ๊ณ  ๊ฒ€์ƒ‰ํ•˜๊ธธ ์š”์ฒญํ–ˆ๋‹ค.

 

(2)  Controller

  • View์™€ Model์„ ์—ฐ๊ฒฐํ•ด์ฃผ๋Š” ์ค‘๊ฐ„์—์„œ ์ƒํ˜ธ์ž‘์šฉ ์—ญํ• ์„ ํ•ด์ค€๋‹ค.
  • ์‚ฌ์šฉ์ž์˜ ์š”์ฒญ์„ Controller๊ฐ€ ๋ฐ›์•˜๋‹ค. (DispatcherServlet๋ผ๋Š” Front Controller๊ฐ€ ๋ฐ›์Œ)
  • Controller๋Š” ์ด ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด [apple]์ด๋ž€ ๋‹จ์–ด๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์„ Model์—๊ฒŒ ์ „๋‹ฌํ•œ๋‹ค.

 

(3)  Model

  • ๋ฐ์ดํ„ฐ์™€ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ๋‹ด๋‹นํ•œ๋‹ค
  • ์ด๋•Œ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ์‘๋‹ต์œผ๋กœ ๋Œ๋ ค์ฃผ๋Š” ์ž‘์—…์˜ ์ฒ˜๋ฆฌ ๊ฒฐ๊ณผ ๋ฐ์ดํ„ฐ๋ฅผ Model์ด๋ผ ํ•œ๋‹ค.
  • Controller์—๊ฒŒ ์˜จ ์š”์ฒญ์„ ์ž˜ ๋ฐ›์•˜๋‹ค.
  • Model์€ [apple]์ด๋ž€ ๋‹จ์–ด ๊ด€๋ จ ๋ฐ์ดํ„ฐ๋ฅผ ์ฐพ์•„ Controller์—๊ฒŒ ๋‹ค์‹œ ์ „๋‹ฌํ•œ๋‹ค.
  • Controller๋Š” ๋ฐ›์€ ์ •๋ณด๋ฅผ ๋‹ค์‹œ View์—๊ฒŒ ๋ณด๋‚ด๊ณ  View๋Š” ์‚ฌ์šฉ์ž์—๊ฒŒ ๊ฒฐ๊ณผ๋ฅผ ๋ณด์—ฌ์ค€๋‹ค.

 

 


 

 

2. Spring MVC ๊ตฌ์„ฑ์š”์†Œ์™€ ์ˆœ์„œ

์ถœ์ฒ˜: https://www.geeksforgeeks.org/spring-mvc-framework/

 

1๋ฒˆ

  • ์‚ฌ์šฉ์ž์—๊ฒŒ ์š”์ฒญ(Requeest)์ด ๋“ค์–ด์™”๋‹ค.
  • ์š”์ฒญ์€ ํŠน์ • URL๊ณผ ํ•จ๊ป˜ ๋“ค์–ด์˜ค๊ฒŒ ๋˜๋Š”๋ฐ GET, POST ๋“ฑ HTTP ๋ฉ”์„œ๋“œ๊ฐ€ ํ•จ๊ป˜ ์ „๋‹ฌ๋œ๋‹ค.

 

 

2๋ฒˆ•3๋ฒˆ

  • ์š”์ฒญ์ด ๋“ค์–ด์˜ค๋ฉด Front Controller์ธ DispatcherServlet์ด ์š”์ฒญ์„ ๋ฐ›๊ฒŒ ๋œ๋‹ค.
  • DispatcherServlet์€ ์ ์ ˆํ•˜๊ฒŒ ์ฒ˜๋ฆฌํ•  Controller๋ฅผ ์ฐพ๊ธฐ ์œ„ํ•ด HandlerMapping์„ ์ด์šฉํ•œ๋‹ค.
  • ๊ทธ๋ ‡๊ฒŒ HandlerMapping์€ ๋“ค์–ด์˜จ ์š”์ฒญ ๊ฒฝ๋กœ์™€ HTTP ๋ฉ”์„œ๋“œ์— ๋”ฐ๋ผ ์ ์ ˆํ•œ Controller๋ฅผ ์ •ํ•ด ๋ฐ˜ํ™˜ํ•œ๋‹ค.

 

 

์ถœ์ฒ˜: https://www.geeksforgeeks.org/spring-mvc-framework/

 

 

 

4๋ฒˆ•5๋ฒˆ

  • HadlerMapping์ด ์ฐพ์€ Controller๋Š” ์š”์ฒญ์„ ์‹ค์ œ๋กœ ์ฒ˜๋ฆฌํ•˜๋Š” ์—ญํ• ์„ ํ•œ๋‹ค.
  • Controller๋Š” ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง(์˜ˆ์‹œ๋กœ ํšŒ์›๊ฐ€์ž…์„ ์ฒ˜๋ฆฌํ•˜๊ฑฐ๋‚˜ ์‡ผํ•‘๋ชฐ์—์„œ ๊ฒฐ์ œ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ)์„ ์‹คํ–‰ํ•˜๊ณ  ๊ทธ์— ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ ์ƒ์„ฑ ํ˜น์€ DB์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ถˆ๋Ÿฌ์˜จ๋‹ค.
  • ์‰ฝ๊ฒŒ ๋งํ•ด View๋กœ ์ „๋‹ฌํ•  ๋ฐ์ดํ„ฐ๋ฅผ ์ค€๋น„ํ•˜๋Š” ๊ฒƒ์ด๊ณ , Model And View๊ฐ€ ๊ฒฐ๊ณผ์— ๋‹ด๊ฒจ DispatcherServlet์— ๋ฐ˜ํ™˜ํ•œ๋‹ค.

 

 

6๋ฒˆ•7๋ฒˆ

  • ๋ฐ˜ํ™˜๋œ ์ •๋ณด๋ฅผ ๊ธฐ์ค€์œผ๋กœ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ์ ์ ˆํ•˜๊ฒŒ ๋ณด์—ฌ์ค„ View๋ฅผ ๊ณ ๋ฅผ ๊ฒƒ์ด๋‹ค.
  • View Resolver๋Š” Controller๊ฐ€ ๋ฐ˜ํ™˜ํ•œ View ์ด๋ฆ„์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์‹ค์ œ View ํŒŒ์ผ์„ ์ „๋‹ฌํ•œ๋‹ค.

 

 

์ถœ์ฒ˜: https://www.geeksforgeeks.org/spring-mvc-framework/

 

 

 

8๋ฒˆ

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

 

 

10๋ฒˆ

  • View์—์„œ Rendering๋œ ๊ฒฐ๊ณผ๋Š” DispatcherServlet์— ๋ฐ˜ํ™˜๋œ๋‹ค.
  • ์‚ฌ์šฉ์ž๋Š” ์ž์‹ ์ด ์š”์ฒญํ•œ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ›๊ฒŒ๋œ๋‹ค.

 

 


 

 

3. Spring MVC ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ 

 

(1) DispathcerServlet

  • ๊ธฐ๋ณธ์ ์œผ๋กœ ๋‹ค๋ฅธ MVC๋Š” DispatcherServlet๊ฐ€ ์—†๋‹ค.
  • ๊ทธ๋ ‡๊ธฐ์— Controller๊ฐ€ ์š”์ฒญ์„ ๋ฐ›๊ณ , ์ง์ ‘์ฒ˜๋ฆฌ๋„ ํ•œ๋‹ค.
  • DispatcherServlet์ด ์žˆ๊ธฐ์—” ์š”์ฒญ ์ฒ˜๋ฆฌ๋ฅผ ๋” ๊ฐ„๊ฒฐํ•˜๊ฒŒ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ค€๋‹ค.

 

 

(2) @๋กœ ์‹œ์ž‘ํ•˜๋Š” ์–ด๋…ธํ…Œ์ด์…˜์˜ ์œ ๋ฌด

  • ์–ด๋…ธํ…Œ์ด์…˜์˜ ์‚ฌ์šฉ์œผ๋กœ ์ธํ•ด ์ค‘๋ณต์ ์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ์ฝ”๋“œ๋ฅผ(ํ˜น์€ ๋น„์Šทํ•œ ์ฝ”๋“œ) ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค.
  •  ๊ทธ๋กœ์ธํ•ด ๊ฐ€๋…์„ฑ์ด ํ–ฅ์ƒ๋œ๋‹ค.

 

 

(3) Ioc(์ œ์–ด์˜ ์—ญ์ „)์™€ DI(์˜์กด์„ฑ์ฃผ์ž…)

  • ๊ฐ์ฒด๊ฐ„์˜ ์˜์กด์„ฑ์„ ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ ์ž๋™์œผ๋กœ ์ฃผ์ž…ํ•˜๊ณ  ๊ด€๋ฆฌํ•œ๋‹ค.

 

 


 

 

 

4. SpringMVC๋Š” ์–ด๋–ค์‹์œผ๋กœ ๊ตฌ์„ฑ์„ ํ•ด์•ผํ•˜๋Š”๊ฐ€?

์‡ผํ•‘๋ชฐ์—์„œ ์ฃผ๋ฌธ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ์„ ๊ฐ„๋žตํ•˜๊ฒŒ ์˜ˆ๋กœ ๋“ค์–ด๋ณด์ž.

 

 

(1) Controller

์ฃผ๋ฌธ์ด ๋“ค์–ด์™”์„ ๋•Œ ์ฃผ๋ฌธ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•  Controller๋ฅผ ๋งŒ๋“ค์–ด์•ผํ•œ๋‹ค.

@RestController  ํ˜น์€ Controller
@RequestMapping("/์š”์ฒญ์ด ๋“ค์–ด์˜จ ๊ฒฝ๋กœ")
public class OrderController {

 ์ฃผ๋ฌธ ์š”์ฒญ์„ ์ง์ ‘ ์ฒ˜๋ฆฌํ•˜์ง€ ์•Š๊ณ , ํ•ด๋‹นํ•˜๋Š” ์„œ๋น„์Šค ๊ณ„์ธต์œผ๋กœ ๋„˜๊ธด๋‹ค.

 ์ฃผ๋ฌธ ์ฒ˜๋ฆฌ ์„ฑ๊ณต์‹œ ์–ด๋–ป๊ฒŒ ๋ฐ˜ํ™˜ํ• ์ง€
 ์ƒํƒœ ์ฝ”๋“œ์™€ ๋ฐ์ดํ„ฐ๋ฅผ ํ•จ๊ป˜ ๋ณด๋‚ด๋Š” ๋“ฑ...

}

 

 

 

(2) Service

์ฃผ๋ฌธ ์š”์ฒญ์„ ๋ฐ›์•„ ์ฃผ๋ฌธ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ๋งŒ๋“ค์–ด์•ผํ•œ๋‹ค.

@Service
public class OrderServiceImpl implements OrderService {

 ์ฃผ๋ฌธ๋‚ด์—ญ์„ ์ง์ ‘ ์ฒ˜๋ฆฌ

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

}

 

 

 

(3) Repository

์ฃผ๋ฌธ ๋‚ด์—ญ์„  ์ €์žฅํ•  ์ €์žฅ์†Œ

public interface OrderRepository <Order, Long> {

 Order๊ณผ ์—ฐ๊ฒฐ๋œ ์ €์žฅ์†Œ๋กœ ์ž‘์—… ์ˆ˜ํ–‰

}

 

 

 

(4) Entity

์ฃผ๋ฌธ ๋ฐ์ดํ„ฐ ๋ชจ๋ธ๋กœ ์ฃผ๋ฌธ์ด ๋“ค์–ด์˜ค๋ฉด ๊ฐ์ฒด๋ฅผ ์ดˆ๊ธฐํ™”

@Entity
public class Order {

 ์ฃผ๋ฌธ ๊ณ ์œ ์˜ ID๋ฅผ ๋งŒ๋“ค๊ฑฐ๋‚˜
 ์—ฌ๋Ÿฌ๊ฐœ์˜ ์ฃผ๋ฌธ์„ ํ•˜๋‚˜์˜ ์ƒํ’ˆ์œผ๋กœ ์—ฐ๊ฒฐ๋˜๋„๋ก ํ•˜๊ฑฐ๋‚˜
 ์ƒ์„ฑ์ž๋ฅผ ์ด์šฉํ•˜์—ฌ ์ฃผ๋ฌธ์„ ์ดˆ๊ธฐํ™”ํ•ด์ฃผ๋Š” ๊ฒƒ ๋“ฑ...
   
}

 

 

 

(5) DTO
์š”์ฒญ๊ณผ ์‘๋‹ต๋งŒ ์—ฐ๊ฒฐํ•˜๋Š” ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋งŒ ๋‹ด๋‹น, ๋ฐ์ดํ„ฐ ์ „๋‹ฌ ๊ฐ์ฒด

public class OrderRequest {

 ์ฃผ๋ฌธ์— ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›๋Š” ๊ฐ์ฒด
 ์ƒํ’ˆ ID, ์ˆ˜๋Ÿ‰...

}

public class OrderResponse {

 ์ฃผ๋ฌธ ์™„๋ฃŒํ•œ ๋ฐ์ดํ„ฐ ๋ฐ˜ํ™˜ ๊ฐ์ฒด
 ์ฃผ๋ฌธ ID, ์ด ๊ฐ€๊ฒฉ...

}

 

 

 


 

์‚ฌ์‹ค ์Šคํ”„๋ง์˜ ํŒจํ„ด์—๋Š” MVC๋งŒ ์žˆ๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๋‹ค. ๋” ๋‹ค์–‘ํ•œ ๋””์ž์ธ ํŒจํ„ด์ด ์กด์žฌํ•˜์ง€๋งŒ, ๋ชจ๋ธ - ๋ทฐ - ์ปจํŠธ๋กค๋Ÿฌ๋กœ ์šฉ๋„๋ฅผ ๋‚˜๋ˆ„๊ณ  ์„œ๋กœ์˜ ์—ญํ• ์—” ์นจ๋ฒ”ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ด ํฐ ์žฅ์ ์ด ๋˜์–ด MVC๋ฅผ ๋งŽ์ด ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ ๊ฐ™๋‹ค.

๊ณต๋ถ€ํ•˜๋ฉด์„œ ์ดํ•ด๊ฐ€ ์•ˆ๋˜๋Š” ๋‚ด์šฉ์ด ๋งŽ์•˜๋‹ค.

์ดํ•ดํ•œ ๋‚ด์šฉ๊นŒ์ง€๋งŒ ๋ธ”๋กœ๊ทธ์— ์ ์–ด๋ณด์•˜๋‹ค.

์•„๋ž˜ ์ ์–ด๋‘” ์ถœ์ฒ˜์— ๋“ค์–ด๊ฐ€ ํ•œ ๋ฒˆ์”ฉ ์ฝ์–ด๋ณธ๋‹ค๋ฉด ๋” ์ข‹์„ ๊ฒƒ ๊ฐ™๋‹ค.

 


 

- spring ์ถœ์ฒ˜

 

์šฐ๋ฆฌ๋Š” ์™œ ์Šคํ”„๋ง์„ ์‚ฌ์šฉํ•˜๋Š”๊ฐ€? - Java spring์˜ ํŠน์ง•

์•ž์„  ๊ธ€์—์„œ ์™œ ์šฐ๋ฆฌ๊ฐ€ ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š” ์ง€ ์•Œ์•„๋ณด์•˜๋‹ค. ์งง๊ฒŒ ์งš๊ณ  ๋„˜์–ด๊ฐ€์ž๋ณด์ž. ๊ฒฐ๊ตญ ๊ฐœ๋ฐœ์ž ์ž…์žฅ์—์„œ๋Š” ๊ฒ€์ฆ๋œ ์ฝ”๋“œ๋ฅผ ์ด์šฉํ•ด์„œ ์ตœ์†Œํ•œ์˜ ๋ถ€๋ถ„๋งŒ ๋ฐ”๊พธ์–ด ๋น ๋ฅด๊ฒŒ ๊ฐœ๋ฐœํ•˜๊ธฐ ์œ„ํ•ด์„œ

joychae.tistory.com

 

 

- Spring MVC ์ถœ์ฒ˜

 

A Comprehensive Guide To Spring MVC | SevenMentor Training

Explore A Comprehensive Guide to Spring MVC, covering key concepts, architecture, and components for building robust, scalable Java web applications.

www.sevenmentor.com

 

 

- Spring MVC์˜ ์žฅ์  ์ถœ์ฒ˜

 

Spring vs Spring MVC vs Spring Boot: A Detailed Comparison for Java Developers

In the ever-evolving landscape of Java development, the Spring Framework has emerged as a powerhouse,...

dev.to

 

 

 

- Spring MVC ์ถœ์ฒ˜

 

[Spring] Web MVC ํŒจํ„ด์˜ ํ๋ฆ„๊ณผ Controller, View, Model ๊ตฌํ˜„๋ฒ•

์Šคํ”„๋ง MVC ํŒจํ„ด์˜ ํ๋ฆ„, ํŠน์ง•, ๊ตฌ์„ฑ์š”์†Œ, ์‹คํ–‰ ์ˆœ์„œ. Controller, View, Model ๊ตฌํ˜„๋ฒ•

velog.io

 

 

 

- Spring MVC ์ถœ์ฒ˜

 

[Spring MVC] ์Šคํ”„๋ง MVC๋ž€ ๋ฌด์—‡์ธ๊ฐ€? - ์Šคํ”„๋ง MVC ๊ตฌ์กฐ ์ดํ•ด

๋ณธ ๋‚ด์šฉ์€ ์˜จ๋ผ์ธ ๊ฐ•์˜ ์‚ฌ์ดํŠธ ์ธํ”„๋Ÿฐ์˜ ๊น€์˜ํ•œ ๋‹˜์˜ ๊ฐ•์˜ ๋‚ด์šฉ์ด ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. '์Šคํ”„๋ง MVC 1ํŽธ - ๋ฐฑ์—”๋“œ ์›น ๊ฐœ๋ฐœ ํ•ต์‹ฌ ๊ธฐ์ˆ ' ์Šคํ”„๋ง MVC 1ํŽธ - ๋ฐฑ์—”๋“œ ์›น ๊ฐœ๋ฐœ ํ•ต์‹ฌ ๊ธฐ์ˆ  - ์ธํ”„๋Ÿฐ | ๊ฐ•์˜ ์›น

ittrue.tistory.com

 

 

- Mapping ์ถœ์ฒ˜

 

[JAVA] Web์—์„œ์˜ ๋งตํ•‘(Mapping)์ด๋ž€??

์˜ค๋Š˜์€ Mapping์— ๋Œ€ํ•ด์„œ ๊ฐ„๋‹จํžˆ ์•Œ์•„๋ณด๊ฒ ๋‹ค. ๋งตํ•‘์ด๋ž€? ํ•ด๋‹น ๊ฐ’์ด ๋‹ค๋ฅธ ๊ฐ’์„ ๊ฐ€๋ฅดํ‚ค๋„๋ก ํ•˜๋Š” ๊ฒƒ์ด๋‹ค. Ex) http~/action.do ๋ผ๋Š” ํŽ˜์ด์ง€๋ฅผ ๋งŒ๋“ค์—ˆ๋‹ค๊ณ  ๊ฐ€์ •ํ• ๋•Œ ์ด url์ด ๊ทธ๋Œ€๋กœ ์œ ์ถœ๋˜๋ฉด ๋ณด์•ˆ์ƒ ์ทจ์•ฝํ• 

wjdvnadldzm.tistory.com

 

 

 

[ Spring MVC์— ๋Œ€ํ•˜์—ฌ ]

 

Spring - Spring MVC๋ฅผ ์•Œ์•„์•ผ ์‹œ์ž‘์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

์ฒ˜์Œ์—” ๋Œ€์ถฉ ํ”„๋กœ์ ํŠธ๋ฅผ ์‹œ์ž‘ํ•ด๋ณด๋ คํ–ˆ์ง€๋งŒ,์ด๋Ÿด์ˆ˜๊ฐ€! ์•„๋Š” ๊ฒƒ์ด ๋ฏธ์•ฝํ•˜๋‹ˆ ์‹œ์ž‘ํ•  ์ˆ˜ ์—†์—ˆ๋‹ค.๊ทธ๋ž˜์„œ ๊ฐ€์žฅ ๊ธฐ์ดˆ์ ์œผ๋กœ ์•Œ์•„์•ผํ•˜๋Š” ๊ฐœ๋…์„ ์ฐจ๊ทผ์ฐจ๊ทผ ์ •๋ฆฌํ•ด๋ณผ๊นŒ ํ•œ๋‹ค.๋‘๋‘ฅ, Spring MVC๋ž€?์•„๋งˆ ์ •๋ณด์ฒ˜

post-this.tistory.com

 

 


 

 

 

์•„์ฃผ ๊ฐ„๋‹จํ•œ ์‹ค์Šต์„ ํ•ด๋ณผ๊นŒํ•œ๋‹ค.

 

 

Hello, World ์ถœ๋ ฅํ•˜๊ธฐ
๐ŸŽƒ




1. Spring initializr ์ƒ์„ฑํ•˜๊ธฐ.

 

https://start.spring.io/

 

 

โ–ก  Dependencies - SpringWeb ์„ ํƒํ•˜๊ธฐ.

โ–ก  Java ํ•ด๋‹นํ•˜๋Š” ๋ฒ„์ „์— ์„ ํƒํ•˜๊ธฐ.

 

 

 

 

โœ”๏ธŽ  [Mac ๊ธฐ์ค€] ์ž๋ฐ” ๋ฒ„์ „์„ ์ž˜ ๋ชจ๋ฅด๊ฒ ๋‹ค๋ฉด?

 

  • ํ„ฐ๋ฏธ๋„์— ๋“ค์–ด๊ฐ„๋‹ค.
  • ํ„ฐ๋ฏธ๋„์— java --version ์ด๋ผ๊ณ  ์น˜๋ฉด๋œ๋‹ค.
    โ–ธ openjdk 17.0.11์œผ๋กœ ํ™•์ธ๋๋‹ค.
  • ๋งŒ์•ฝ ์•ˆ๋œฌ๋‹ค๋ฉด java ์„ค์น˜๊ฐ€ ์•ˆ๋˜์–ด์žˆ์œผ๋‹ˆ, ์„ค์น˜ํ•ฉ์‹œ๋‹ค!

 

 


 

 

 

 

2. GENERATE ๋ˆŒ๋Ÿฌ ํ”„๋กœ์ ํŠธ๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.

 

โ–ก ํ•˜๋‹จ ๋งจ ์™ผ์ชฝ ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด ๋œ๋‹ค.

 

 

 

 


 

 

 

 

3. ์ƒ์„ฑํ•œ ํ”„๋กœ์ ํŠธ IntelliJ๋กœ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ.

 

โ–ก Open์„ ๋ˆŒ๋Ÿฌ์ฃผ๊ธฐ.

 

โ–ก ์ƒ์„ฑํ•œ ํ”„๋กœ์ ํŠธ๊ฐ€ ์žˆ๋Š” ๊ณณ์„ ์ฐพ๋Š”๋‹ค.
โ–ก build.gradle์„ ์„ ํƒํ•˜์—ฌ ์—ด์–ด์ค€๋‹ค.

 

 

 

โ–ก Open as Project๋ฅผ ์„ ํƒํ•˜์—ฌ ์—ด์–ด์ค€๋‹ค.

 

 

 

 

 


 

 

 

 

4. HelloController๋ฅผ ๋งŒ๋“ค์–ด์ค€๋‹ค.

 

 [ ์ปจํŠธ๋กค๋Ÿฌ ๋งŒ๋“œ๋Š” ์ด์œ ์— ๋Œ€ํ•ด์„œ ]

 

-

 

โ–ก com.pratice.HelloWorld์— ๋งˆ์šฐ์Šค ์™ผ์ชฝ์„ ํด๋ฆญํ•œ๋‹ค.

 

 

โ–ก Class - HelloController๋ฅผ ๋งŒ๋“ค์–ด์ค€๋‹ค.

 

 

โ–ก  HelloController๋ฅผ ์ƒ์„ฑํ–ˆ๋‹ค.

 

 

 

 


 

 

 

 

5. HelloController์— HelloWorld๊ฐ€ ์ถœ๋ ฅ๋˜๋„๋ก ์ฝ”๋“œ ์ž‘์„ฑํ•˜๊ธฐ.

 

@RestController
public class HelloController {

    @GetMapping("")
    public String helloWorld() {
        return "Hello, World";
    }

}

 

@RestController

:  ์‰ฝ๊ฒŒ ์„ค๋ช…ํ•˜์ž๋ฉด, Hello, World๋ผ๋Š” ๋ฌธ์žฅ์ด ์›น์‚ฌ์ดํŠธ์— ์ถœ๋ ฅ๋˜๋„๋ก ํ•˜๊ธฐ ์œ„ํ•ด(JSON์œผ๋กœ) ์–ด๋…ธํ…Œ์ด์…˜(@)์„ ์ ์–ด์ค€๋‹ค.

 

@GetMapping("")

: ์„œ๋ฒ„์˜ ๋ฆฌ์†Œ์Šค๋ฅผ ์กฐํšŒํ•  ๋•Œ ์‚ฌ์šฉ, ("")์— ์š”์ฒญ ๋ฐ›์„ URL์„ ์ ๋Š”๋‹ค. ํ˜„์žฌ ์ ํ˜€์žˆ์ง€ ์•Š์œผ๋‹ˆ localhost:8080์ด ๋œ๋‹ค.

 

 

 

 

[ @RestController ์„ค๋ช… ]

 

Spring - @Controller์™€ @RestController ๊ทธ๋ฆฌ๊ณ  ์ƒํƒœ์ฝ”๋“œ

[ SpringMVC์— ๋Œ€ํ•˜์—ฌ ] Spring - Spring MVC๋ฅผ ์•Œ์•„์•ผ ์‹œ์ž‘์ด ๊ฐ€๋Šฅํ•˜๋‹ค.์ฒ˜์Œ์—” ๋Œ€์ถฉ ํ”„๋กœ์ ํŠธ๋ฅผ ์‹œ์ž‘ํ•ด๋ณด๋ คํ–ˆ์ง€๋งŒ,์ด๋Ÿด์ˆ˜๊ฐ€! ์•„๋Š” ๊ฒƒ์ด ๋ฏธ์•ฝํ•˜๋‹ˆ ์‹œ์ž‘ํ•  ์ˆ˜ ์—†์—ˆ๋‹ค.๊ทธ๋ž˜์„œ ๊ฐ€์žฅ ๊ธฐ์ดˆ์ ์œผ๋กœ ์•Œ์•„์•ผํ•˜๋Š”

post-this.tistory.com

 

 

 

[ @GetMapping ์„ค๋ช… ]

 

SpringBoot - GET๊ณผ POST ๊ทธ๋ฆฌ๊ณ  @GetMapping

[ @Controller์™€ @RestController ] Spring - @Controller์™€ @RestController ๊ทธ๋ฆฌ๊ณ  ์ƒํƒœ์ฝ”๋“œ[ SpringMVC์— ๋Œ€ํ•˜์—ฌ ] Spring - Spring MVC๋ฅผ ์•Œ์•„์•ผ ์‹œ์ž‘์ด ๊ฐ€๋Šฅํ•˜๋‹ค.์ฒ˜์Œ์—” ๋Œ€์ถฉ ํ”„๋กœ์ ํŠธ๋ฅผ ์‹œ์ž‘ํ•ด๋ณด๋ คํ–ˆ์ง€๋งŒ,์ด๋Ÿด์ˆ˜๊ฐ€!

post-this.tistory.com

 

 

 


 

 

 

 

6. localhost:8080, ๊ฒฐ๊ณผ ๋ณด๊ธฐ.

 

๐Ÿชฝ

"ํ‹€๋ฆฐ ๋‚ด์šฉ์ด ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค."

 

 

 

[ ๋ธ”๋กœ๊ทธ์— ์“ด ๋‚ด์šฉ๋“ค์˜ ์ถœ์ฒ˜๋Š” ์•„๋ž˜์— ์ ์–ด๋‘˜ํ…Œ๋‹ˆ

๋“ค์–ด๊ฐ€์„œ ์ฝ์–ด๋ณด์‹œ๋ฉด ๋”์šฑ ๋„์›€์ด ๋˜์‹ค ๋“ฏ ํ•ฉ๋‹ˆ๋‹ค ]

 

 

 


 

 

- Hello World ์ถœ์ฒ˜

 

์Šคํ”„๋ง๋ถ€ํŠธ๋Š” ์ฒ˜์Œ์ด๋ผ #1 "Hello, world" ๋ฅผ ์ถœ๋ ฅํ•˜๊ธฐ๊นŒ์ง€

Hello, world

velog.io

 

 

- GetMapping ์ถœ์ฒ˜

 

[spring] @Controller์™€ @GetMapping

์ด๋ฒˆ์—๋Š” mapping์„ ํ†ตํ•ด์„œ ๊ฐ„๋‹จํ•œ html ํŽ˜์ด์ง€๋ฅผ ๋ณด์—ฌ์ฃผ๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ์ฒ˜๋ฆฌ ๊ณผ์ • ์ผ๋ฐ˜์ ์œผ๋กœ ์‚ฌ์šฉ์ž์˜ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ณผ์ •์€ ๋‹ค์Œ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ๋งคํ•‘์„ ํ†ตํ•ด Controller๊ฐ€ ํŠน์ • View

coding-nyan.tistory.com

 

 

- RestController ์ถœ์ฒ˜

 

3.2. RestController ์‚ฌ์šฉํ•˜๊ธฐ · SpringBoot

 

dorothy-koo.gitbooks.io

 

 

 

< ์ด์ „ ํฌ์ŠคํŒ… - ์ธ์Šคํ„ด์Šค, ์ƒ์„ฑ์ž ๊ทธ๋ฆฌ๊ณ  ๋งค๊ฐœ๋ณ€์ˆ˜์™€ ์ธ์ž์˜ ์ฐจ์ด์ >

 

 

๊ธฐ๋ณธ ์šฉ์–ด ์ •๋ฆฌ - ๐Ÿง ์ธ์Šคํ„ด์Šค, ์ƒ์„ฑ์ž ๊ทธ๋ฆฌ๊ณ  ๋งค๊ฐœ๋ณ€์ˆ˜(Parameter)์™€ ์ธ์ž(Argument)์˜ ์ฐจ์ด

๊ธฐ๋ณธ ์šฉ์–ด ์ •๋ฆฌ - ๐Ÿง ๋ณ€์ˆ˜๋ž€?๐Ÿชฝ"ํ‹€๋ฆฐ ๋‚ด์šฉ์ด ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค."    โ–บ ๋ณ€์ˆ˜๋ณ€์ˆ˜๋ž€, ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ ๊ฐ’์„ ์ €์žฅํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” ์ด๋ฆ„์ด ๋ถ™์€ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์ด๋‹ค.๋ณ€์ˆ˜๋Š” ๋ณ€์ˆ˜๊ฐ€ ์„ ์–ธ

post-this.tistory.com

 

 


 

 

๐Ÿชฝ

"ํ‹€๋ฆฐ ๋‚ด์šฉ์ด ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค."

 

 

 

โ–บ static

  • static์€ ์ •์ ์ธ, ๊ณ ์ •๋œ ์ด๋ผ๋Š” ๋œป์„ ์ง€๋…”๋‹ค.
  • ์ฃผ๋กœ ๋ณ€์ˆ˜๋‚˜ ๋ฉ”์„œ๋“œ์— ๋ถ™์ธ๋‹ค.
  • ๊ฐ์ฒด ์ƒ์„ฑ ์—†์ด ์‚ฌ์šฉ๊ฐ€๋Šฅํ•˜๋‹ค. 
  • ๋ฉ”๋ชจ๋ฆฌ์— ์ ์žฌ๋˜๋ฉด ํ”„๋กœ๊ทธ๋žจ์ด ์ข…๋ฃŒ๋˜์–ด์•ผ ํ•ด์ œ๋œ๋‹ค.
  • static์„ ๋งŽ์ด ์‚ฌ์šฉํ•˜๊ฒŒ๋˜๋ฉด ๋ฉ”๋ชจ๋ฆฌ์— ๊ณผ๋ถ€ํ•˜๊ฐ€ ์˜ฌ ์ˆ˜ ์žˆ๋‹ค.
  • static์„ ๋ถ™์ด๋ฉด static ์˜์—ญ์—(๋ฉ”๋ชจ๋ฆฌ) ํ• ๋‹น๋œ๋‹ค. โ–บ ๊ฐ’์ด ๊ณ ์ •์ ์œผ๋กœ ์œ ์ง€๋œ๋‹ค.

 

 

 

Q. static์ด ๋ถ™์—ˆ์„ ๋•Œ์™€ ๋ถ™์ง€ ์•Š์•˜์„ ๋•Œ ์ฝ”๋“œ๊ฐ€ ์–ด๋–ป๊ฒŒ ๋‹ค๋ฅธ๊ฐ€?

A. ์ฒซ๋ฒˆ์งธ ์˜ˆ์ œ๋Š” ๋ณ€์ˆ˜์— static์„ ๋ถ™์˜€์„๋•Œ์™€ ์•„๋‹๋•Œ๋ฅผ ๋ณด์—ฌ์ฃผ๊ฒ ๋‹ค.

 

<static ์˜์—ญ์— ์˜ฌ๋ผ๊ฐ€ ๊ฐ’์ด ๊ณ ์ •์ ์œผ๋กœ ์œ ์ง€๋˜๋Š” ๊ฒƒ์„ ๋ณด์—ฌ์ฃผ๋Š” ์˜ˆ์ œ>

class Counter {

    // static์„ ๋ถ™์ธ ๋ณ€์ˆ˜ count
    // ๋ณ€์ˆ˜ count๋ฅผ 0์œผ๋กœ ์ดˆ๊ธฐํ™”ํ–ˆ๋‹ค.
    static int count = 0;

    // ๋ฉ”์„œ๋“œ Counter
    // ๋ฉ”์„œ๋“œ๊ฐ€ ํ˜ธ์ถœ๋˜๋ฉด ๋ณ€์ˆ˜ count๋Š” ++์ฆ๊ฐ€ํ•œ๋‹ค.
    Counter() {
        count++;
        System.out.println("Count : " + count);
    }
}

public class Main {
    public static void main(String[] args) {
    	
        // ์ธ์Šคํ„ด์Šค c1๊ณผ c2, c3๊ฐ€ ์ƒ์„ฑ๋˜์—ˆ๋‹ค.
        // Counter ๋ฉ”์„œ๋“œ๊ฐ€ ์‹คํ–‰๋˜๊ณ , ๋ฉ”์„œ๋“œ ๋‚ด count++;๋„ ์‹คํ–‰๋œ๋‹ค.
        Counter c1 = new Counter();  // Count: 1
        Counter c2 = new Counter();  // Count: 2
        Counter c3 = new Counter();  // Count: 3
        
    }
}

 

์œ„์˜ ์˜ˆ์ œ์—์„œ๋Š” static์ด ๋ถ™์€ ๋ณ€์ˆ˜์— ๋Œ€ํ•ด ๋ณด์—ฌ์ฃผ๊ณ  ์žˆ๋‹ค. static์€ static ์˜์—ญ์— ํ• ๋‹น๋˜์–ด ๊ฐ’์ด ๊ณ ์ •์ ์œผ๋กœ ์œ ์ง€๋œ๋‹ค๊ณ  ํ–ˆ๋‹ค. ๊ทธ ๋ง์€ ์œ„์˜ ์˜ˆ์ œ์ฒ˜๋Ÿผ c1๊ณผ c2, c3๊ฐ€ ๊ฐœ๋ณ„์ ์œผ๋กœ ์ฆ๊ฐ€ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹Œ ๋ชจ๋“  ๊ฐ์ฒด๊ฐ€ ๋™์ผํ•œ count ๊ฐ’์„ ๊ฐ€์ง€๊ฒŒ ๋˜๋Š” ๊ฑธ ์•Œ๋ ค์ค€๋‹ค.

 

class Counter {

    // static์ด ์ œ๊ฑฐ๋œ ๋ณ€์ˆ˜
    // ์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜๊ฐ€ ๋˜์—ˆ๋‹ค.
    int count = 0;  

    // ๋ฉ”์„œ๋“œ Counter
    // ๋ฉ”์„œ๋“œ๊ฐ€ ์‹คํ–‰๋˜๋ฉด ๋ณ€์ˆ˜ count๊ฐ€ ์ฆ๊ฐ€ํ•œ๋‹ค.
    Counter() {
        count++;
        System.out.println("Count: " + count);
    }
}

public class Main {
    public static void main(String[] args) {
    	
        // ์ธ์Šคํ„ด์Šค c1, c2, c3๊ฐ€ ์ƒ์„ฑ๋˜๋ฉฐ Counter ๋ฉ”์„œ๋“œ๊ฐ€ ์‹คํ–‰๋œ๋‹ค.
        Counter c1 = new Counter();  // Count: 1
        Counter c2 = new Counter();  // Count: 1
        Counter c3 = new Counter();  // Count: 1
    }
}

 

๋ณ€์ˆ˜์—์„œ static์ด ์‚ฌ๋ผ์ง„ ์˜ˆ์ œ๋‹ค. ๋ณ€์ˆ˜์— static์ด ์—†๊ธฐ ๋•Œ๋ฌธ์— ๋ณ€์ˆ˜ ๊ฐ’์ด ๊ณต์œ ๋˜์ง€ ์•Š๋Š”๋‹ค. ๊ทธ๋ ‡๊ธฐ์— ์ธ์Šคํ„ด์Šค c1๊ณผ c2, c3๋Š” ๊ฐœ๋ณ„์ ์œผ๋กœ ์›€์ง์ด๊ฒŒ ๋˜๊ณ  count๋Š” ๊ฐœ๋ณ„์ ์œผ๋กœ ์˜ฌ๋ผ๊ฐ€์„œ 1์ด๋ผ๋Š” ๊ฐ’์ด ์ถœ๋ ฅ๋œ๋‹ค.

 

 

 

 

 

๋‘๋ฒˆ์งธ ์˜ˆ์ œ๋Š” ๋ฉ”์„œ๋“œ์— static์ด ์˜ฌ๋ผ๊ฐˆ ๊ฒฝ์šฐ ์–ด๋–ค์‹์œผ๋กœ ์ฐจ์ด๊ฐ€ ์žˆ๋Š”์ง€ ์‚ดํŽด๋ณด๊ฒ ๋‹ค.

 

< ๊ฐ์ฒด ์ƒ์„ฑ ์—†์ด ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ๋ณด์—ฌ์ฃผ๋Š” ์˜ˆ์ œ >

class Add {
   
    // ๋ฉ”์„œ๋“œ add์— static์ด ๋ถ™์—ˆ๋‹ค.
    static int add(int a, int b) {
        return a + b;
    }
}

public class Main {
    public static void main(String[] args) {
    
        // ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜์ง€ ์•Š์•„๋„ ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
        int sum = Add.add(10, 20);  
        System.out.println(sum);  // 30
    }
}

 

 

๋ฉ”์„œ๋“œ์— static์„ ๋ถ™์ด๋‹ˆ Add.add(10,30)์œผ๋กœ ๊ฐ์ฒด ์ƒ์„ฑ ์—†์ด ๊ฒฐ๊ณผ๊ฐ’์ด ์ถœ๋ ฅ๋˜์—ˆ๋‹ค.

	Add num = new Add();
	int sum = num.add(10, 20);
	System.out.println("Sum : " + sum);

 

๋งŒ์•ฝ ๋ฉ”์„œ๋“œ์— static์ด ์—†์–ด์ง€๋ฉด์„œ ์ธ์Šคํ„ด์Šค ๋ฉ”์„œ๋“œ๋กœ ๋ณ€๊ฒฝ๋˜์—ˆ๋‹ค. ๊ทธ๋ ‡๊ธฐ์— ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•ด์•ผํ•˜๊ณ  ๊ทธ ํ›„ ๊ฐ์ฒด๋ฅผ ํ†ตํ•ด ํ˜ธ์ถœํ•ด์•ผ ์˜ค๋ฅ˜ ์—†์ด ๊ฒฐ๊ณผ๊ฐ€ ์ œ๋Œ€๋กœ ์ถœ๋ ฅ๋  ์ˆ˜ ์žˆ๋‹ค.

 

 

 

 

Q. ์™œ static์ด ๋ถ™์€ ๋ณ€์ˆ˜๋‚˜ ๋ฉ”์„œ๋“œ๊ฐ€ ๋งŽ์•„์ง€๋ฉด ๋ฉ”๋ชจ๋ฆฌ ๊ณผ๋ถ€ํ™”๋ฅผ ์œ ๋ฐœํ• ๊นŒ?

A. ๋ฉ”๋ชจ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ์ž ๊น ์‚ดํŽด๋ณด์ž๋ฉด [ heap ์˜์—ญ /  stack ์˜์—ญ  /  static ์˜์—ญ ] ์ด๋ ‡๊ฒŒ ์„ธ๊ฐ€์ง€๊ฐ€ ์กด์žฌํ•œ๋‹ค. heap ์˜์—ญ์€ ์ธ์Šคํ„ด์Šค๋ฅผ ์ฃผ๋กœ ๊ด€๋ฆฌํ•œ๋‹ค๊ณ  ๋ณด๋ฉด ๋˜๊ณ , stack ์˜์—ญ์€ ๋งค๊ฐœ๋ณ€์ˆ˜ ํ˜น์€ ์ง€์—ญ๋ณ€์ˆ˜๋ฅผ ๊ด€๋ฆฌํ•˜๊ณ  ์žˆ๊ณ , static ์˜์—ญ์€ static์ด ๋ถ™์€ ๋ณ€์ˆ˜๋‚˜ ๋ฉ”์„œ๋“œ๋ฅผ ๊ด€๋ฆฌํ•œ๋‹ค.

 

heap ์˜์—ญ์€ Garbage Collector๊ฐ€ ์žˆ์–ด์„œ ์“ฐ์ง€ ์•Š๊ณ  ์žˆ๋Š” ๊ฐ์ฒด๋ฅผ ์•Œ์•„์„œ ์ •๋ฆฌํ•ด์ค€๋‹ค. ํ•˜์ง€๋งŒ static์€ Garbage Collector๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์— ํ•œ ๋ฒˆ ๋ฉ”๋ชจ๋ฆฌ์— ์ ์žฌ๋˜๋ฉด  ํ”„๋กœ๊ทธ๋žจ์ด ์ข…๋ฃŒ๋˜๊ธฐ ์ „๊นŒ์ง€ ํ•ด์ œ๋˜์ง€ ์•Š๋Š”๋‹ค. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— static์„ ๋ฌด๋ถ„๋ณ„ํ•˜๊ฒŒ ์‚ฌ์šฉํ•˜๊ฒŒ๋˜๋ฉด ๊ทธ๋งŒํผ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ณ„์† ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ณผ๋ถ€ํ•˜๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด๋‹ค.

 

 

 

 


 

 

 

โ–บ final

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

 

 

Q. final๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉ๋œ ๋ณ€์ˆ˜์˜ ๊ฒฝ์šฐ๋Š”?

 

A.  final์ด ๋ถ™์€ ๋ณ€์ˆ˜์˜ ๊ฐ’์„ ๋ณ€๊ฒฝํ•˜๋ ค ํ•  ๊ฒฝ์šฐ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋Š”์ง€ ์˜ˆ์ œ๋ฅผ ํ†ตํ•ด ์‚ดํŽด๋ณด๊ฒ ๋‹ค.

ํ˜„์žฌ ์˜ˆ์ œ๋Š” final์ด ๋ถ™์ง€ ์•Š์€ ๋ณ€์ˆ˜๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ์˜ˆ์ œ์ด๋‹ค.

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

           // final์ด ๋ถ™์€ ๋ณ€์ˆ˜
           final int a = 10;
           
           // ํ‰๋ฒ”ํ•œ ๋ณ€์ˆ˜
           int b = 20;
           
           System.out.println("a : " + a); // a : 10
           System.out.println("b : " + b); // b : 20

           // ๋ณ€์ˆ˜ b์˜ ๊ฐ’๋งŒ ๋ฐ”๊ฟ”๋ณด์•˜๋‹ค.
           b = 2;

           // final์ด ๋ถ™์ง€ ์•Š์€ ๋ณ€์ˆ˜ b๋Š” ์ž˜ ์ถœ๋ ฅ๋˜์—ˆ๋‹ค.
           System.out.println("update b : " + b); // update b : 2

        }
    }

 

๊ฒฐ๊ณผ๊ฐ€ ์ž˜ ์ถœ๋ ฅ๋˜์—ˆ๋‹ค.

 

 

๊ทธ๋ ‡๋‹ค๋ฉด ์ด๋ฒˆ์—” final์ด ๋ถ™์€ ๋ณ€์ˆ˜๋ฅผ ๋ฐ”๊ฟ”๋ณด๋„๋ก ํ•˜๊ฒ ๋‹ค.

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

           // final์ด ๋ถ™์€ ๋ณ€์ˆ˜
           final int a = 10;
           
           // ํ‰๋ฒ”ํ•œ ๋ณ€์ˆ˜
           int b = 20;
           
           System.out.println("a : " + a); // a : 10
           System.out.println("b : " + b); // b : 20

           a = 1;
           b = 2;

           System.out.println("update a : " + a);
           System.out.println("update b : " + b); 

        }
    }

 

fianl ๋ณ€์ˆ˜(variable) a์—๋Š” ๊ฐ’์„ ํ• ๋‹นํ•  ์ˆ˜ ์—†๋‹ค๋Š” ๋ฌธ๊ตฌ์™€ ํ•จ๊ป˜ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค.

 

 

 

 

Q. final๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉ๋œ ๋ฉ”์„œ๋“œ์˜ ๊ฒฝ์šฐ๋Š”?

 

A. ์˜ค๋ฒ„๋ผ์ด๋“œ๊ฐ€ ๋ถˆ๊ฐ€ํ•˜๋‹ค. ์˜ค๋ฒ„๋ผ์ด๋“œ๋ž€ ์‰ฝ๊ฒŒ ๋งํ•ด ์ƒ์†๋ฐ›์€ ๋ฉ”์„œ๋“œ๋ฅผ ์ธ์Šคํ„ด์Šค ๋ฉ”์„œ๋“œ๋กœ ์žฌ์ •์˜ํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ์‰ฝ๊ฒŒ ์„ค๋ช…ํ•˜์ž๋ฉด ๋ฉ”์„œ๋“œ์— ์“ฐ์ธ ์ด๋ฆ„์„ ๋™์ผํ•˜๊ฒŒ ๊ฐ€์ ธ๊ฐ€์„œ ๊ฐ’๋งŒ ๋ฐ”๊ฟ” ์‚ฌ์šฉํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋  ๊ฒƒ ๊ฐ™๋‹ค. ๋ฌผ๋ก  ๋ฌด์ž‘์ • ์ด๋ฆ„์„ ๋˜‘๊ฐ™์ด ์ •์˜ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๋‹ค. ๋งค๊ฐœ๋ณ€์ˆ˜ ํƒ€์ž… ํ˜น์€ ๊ฐฏ์ˆ˜๊ฐ€ ๋™์ผํ•˜์ง€ ์•Š์•„์•ผํ•œ๋‹ค๋Š” ์กฐ๊ฑด์ด ์žˆ๋‹ค. (๊ทธ ์™ธ์—๋„ ์žˆ์Œ)  

 

class Parent {

    // final ๋ฉ”์„œ๋“œ์ธ fail
    public final void fail() {
        System.out.println("๊ณผ์—ฐ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ• ๊นŒ?");
    }
}

// ์ž์‹ ํด๋ž˜์Šค
class Child extends Parent {

    // fail ๋ฉ”์„œ๋“œ๋ฅผ ์žฌ์ •์˜ ํ–ˆ๋‹ค.
    @Override
    public void fail() {
        System.out.println("์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•  ๊ฒƒ์ด๋‹ค.");
    }
}

public class Main {
    public static void main(String[] args) {
        Child child = new Child();
        child.fail();
    }
}

 

์ด๋ ‡๊ฒŒ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค. ์˜ค๋ฅ˜ ๋ฉ”์„ธ์ง€๋ฅผ ์‚ดํŽด๋ณด๋ฉด Child ํด๋ž˜์Šค ์•ˆ์— ์žˆ๋Š” fail( )์€ Parent ํด๋ž˜์Šค ์•ˆ์— ์žˆ๋Š” fail ๋ฉ”์„œ๋“œ๋ฅผ ์žฌ์ •์˜ ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค, ์žฌ์ •์˜๋œ ๋ฉ”์„œ๋“œ๋Š” final์ž…๋‹ˆ๋‹ค. ๋ผ๊ณ  ๋˜์–ด์žˆ๋‹ค. ํด๋ž˜์Šค์— final์ด ๋ถ™์€ ๊ฒฝ์šฐ๋Š” ์ƒ์†์ด ๋ถˆ๊ฐ€ํ•œ ๊ฒฝ์šฐ๋‹ˆ ๋„˜์–ด๊ฐ€๋„๋ก ํ•˜๊ฒ ๋‹ค.

 

 

 

 

Q. ๊ทธ๋ ‡๋‹ค๋ฉด ์ฃผ๋กœ final๊ณผ static์„ ํ•จ๊ป˜ ์“ฐ๋Š” ์ด์œ ๊ฐ€ ๋ฌด์—‡์ผ๊นŒ?

A. final๊ณผ static์ด ๋ณ€์ˆ˜์— ์„ ์–ธ๋˜์–ด์žˆ๋‹ค๋ฉด ๊ทธ ์˜๋ฏธ๋Š” ์ด ๊ฐ’์€ ํด๋ž˜์Šค ๋‚ด์— ๋‹ค ๊ณต์œ ๋˜๊ณ  ์žˆ์œผ๋ฉฐ, ์ด ๊ฐ’์€ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†์–ด ๋ผ๋Š” ์˜๋ฏธ๊ฐ€ ๋œ๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด ์ฃผ๋กœ ์–ด๋””์— ์‚ฌ์šฉ์ด๋ ๊นŒ? ๋‹ค์–‘ํ•œ ๊ณณ์— ํ™œ์šฉ๋˜๊ฒ ์ง€๋งŒ, ๋ช‡ ๊ฐ€์ง€ ์˜ˆ๋ฅผ ์ƒ๊ฐํ•ด๋ณด๋ฉด ์›์ฃผ์œจ๊ณผ ๊ฐ™์€ ์ˆ˜ํ•™์ ์ธ ๋ถ€๋ถ„๋„ ์žˆ๊ณ  ํ”„๋กœ๊ทธ๋žจ ์ตœ๋Œ€ ์‚ฌ์šฉ์ž์˜ ์ˆ˜๋ฅผ ์ง€์ •ํ•ด์•ผํ•  ๊ฒฝ์šฐ์—๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™๋‹ค. 

final๊ณผ static์ด ๋ฉ”์„œ๋“œ์— ์„ ์–ธ๋˜์—ˆ๋‹ค๋ฉด ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค ํ•„์š”์—†์ด ํด๋ž˜์Šค ์ด๋ฆ„์„ ์จ์„œ ๋ฐ”๋กœ ํ˜ธ์ถœํ•˜๋ฉด์„œ ์ด ๋ฉ”์„œ๋“œ๋ฅผ ๋‹ค๋ฅธ ๊ณณ์—์„œ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐ”๊ฟ€ ์ˆ˜ ์—†๋‹ค๋Š” ์˜๋ฏธ๊ฐ€ ๋œ๋‹ค. ์‰ฝ๊ฒŒ ๋งํ•ด ๊ฐ์ฒด ์—†์ด ํ˜ธ์ถœํ•˜๊ณ  ์žฌ์ •์˜ํ•  ํ•„์š”๊ฐ€ ์—†์„ ๋•Œ ์“ด๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ํ™œ์šฉ๋˜๋Š” ๊ณณ์— ๋Œ€ํ•ด ์ƒ๊ฐํ•ด๋ณด๋ฉด ํšŒ์›๊ฐ€์ž… ์‹œ, ์ด๋ฉ”์ผ์„ ์ ์œผ๋ผ๊ณ  ํ–ˆ์„ ๊ฒฝ์šฐ ๊ทธ ์ด๋ฉ”์ผ์˜ ํ˜•์‹์ด ๋งž๋Š”์ง€ ๊ฒ€์ฆํ•  ๋•Œ ์“ฐ์ผ ์ˆ˜ ์žˆ๊ฒ ๋‹ค. 

 

๊ฒฐ๋ก , ํ”„๋กœ๊ทธ๋žจ ์ „์ฒด์—์„œ ์ผ๊ด€๋œ ๊ฐ’์„ ์œ ์ง€ํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.

 

 

 

 

 

 

ํ˜ผ์ž ๊ณต๋ถ€ํ•˜๋ฉด์„œ ์ดํ•ดํ•˜๊ณ  ์“ด ๋‚ด์šฉ์ด๋ผ ํ‹€๋ฆฐ ๋‚ด์šฉ์ด ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋Œ“๊ธ€๋กœ ์ ์–ด๋‘์‹œ๋ฉด ์ˆ˜์ •ํ•˜๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ๐Ÿ€

 

[ ๋ธ”๋กœ๊ทธ์— ์“ด ๋‚ด์šฉ๋“ค์˜ ์ถœ์ฒ˜๋Š” ์•„๋ž˜์— ์ ์–ด๋‘˜ํ…Œ๋‹ˆ

๋“ค์–ด๊ฐ€์„œ ์ฝ์–ด๋ณด์‹œ๋ฉด ๋”์šฑ ๋„์›€์ด ๋˜์‹ค ๋“ฏ ํ•ฉ๋‹ˆ๋‹ค ]

 

 

 

 

 


 

- static ์ถœ์ฒ˜

 

[JAVA] Static? ๊ทธ๊ฑฐ ์™œ ๋ถ™์ด๋Š”๊ฑด๋ฐ?

Static. ์ž๋ฐ”๋ฅผ ์ด์šฉํ•˜์—ฌ ๊ฐœ๋ฐœ์„ ํ•˜๋‹ค ๋ณด๋ฉด ์ฐธ ๋งŽ์ด ๋งˆ์ฃผ์น˜๋Š” ํ‚ค์›Œ๋“œ์ž…๋‹ˆ๋‹ค. ๋‹น์žฅ main ํ•จ์ˆ˜๋ฅผ ์„ ์–ธํ•  ๋•Œ๋งŒ ๋ณด๋”๋ผ๋„ public static void main(String[] args){ ... } ์š”๋ ‡๊ฒŒ static์ด ๋–กํ•˜๋‹ˆ ๋ถ™์–ด์žˆ์ฃ . ๊ทธ๋ ‡๋‹ค๋ฉด st

jooona.tistory.com

 

 

- static ์ถœ์ฒ˜

 

[Java] static์„ ์–ธ์ œ ์‚ฌ์šฉํ• ๊นŒ?

Static Java์—์„œ Static ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋Š” ๊ฒƒ์€ ๋ฉ”๋ชจ๋ฆฌ์— ํ•œ๋ฒˆ ํ• ๋‹น๋˜์–ด ํ”„๋กœ๊ทธ๋žจ์ด ์ข…๋ฃŒ๋  ๋•Œ ํ•ด์ œ๋˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ์ •ํ™•ํžˆ ์ดํ•ดํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์— ๋Œ€ํ•œ ์ดํ•ด๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค

velog.io

 

 

- static ์˜ˆ์ œ ์ถœ์ฒ˜

 

[JAVA] static(์ •์ ) ๋ณ€์ˆ˜์™€ ๋ฉ”์†Œ๋“œ

static static์ด๋ž€? ์ •์ ์ธ, ์›€์ง์ด์ง€ ์•Š๋Š”๋‹ค๋Š” ๋œป์œผ๋กœ Java์—์„œ static ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์€ ๋ฉ”๋ชจ๋ฆฌ์— ํ•œ๋ฒˆ ํ• ๋‹น๋˜์–ด ํ”„๋กœ๊ทธ๋žจ์ด ์ข…๋ฃŒ๋  ๋•Œ ํ•ด์ œ๋˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค. static์œผ๋กœ ์„ ์–ธ๋œ ๋ฉ”์„œ๋“œ๋‚˜ ๋ณ€

hu-coding.tistory.com

 

 

-final ์ถœ์ฒ˜

 

[Java] final ์„ ์•Œ์•„๋ณด์ž

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

yeoonjae.tistory.com

 

 

- ์˜ค๋ฒ„๋ผ์ด๋“œ ์ถœ์ฒ˜

 

8. ์˜ค๋ฒ„๋กœ๋”ฉ, ์˜ค๋ฒ„๋ผ์ด๋“œ : Overloading, Override & ๋‹คํ˜•์„ฑ

์ด๋ฒˆ ํฌ์ŠคํŒ…์—์„œ๋Š” ์ €๋ฒˆ ํฌ์ŠคํŒ… ๋งˆ์ง€๋ง‰์— ์–ธ๊ธ‰๋œ์˜ค๋ฒ„๋ผ์ด๋“œ์™€ ์œ ์‚ฌํ•œ ๋‹จ์–ด๋กœ ํ—ท๊ฐˆ๋ฆด ์ˆ˜ ์žˆ๋Š” ์˜ค๋ฒ„๋กœ๋”ฉ์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ==================================================== Overloading vs Override & ๋‹ค

programmingnote.tistory.com

 

 

- static๊ณผ final์„ ๊ฐ™์ด ์‚ฌ์šฉํ•˜๋Š” ์ด์œ  ์ถœ์ฒ˜

 

์ž๋ฐ”์˜ static๊ณผ final ํ‚ค์›Œ๋“œ ๊นŠ๊ฒŒ ์ดํ•ดํ•˜๊ธฐ

์ž๋ฐ”์˜ static๊ณผ final ํ‚ค์›Œ๋“œ๋ฅผ ๊นŠ๊ฒŒ ์ดํ•ดํ•˜๊ณ , ์ด๋ฅผ ํ†ตํ•ด ์•ˆ์ •์ ์ด๊ณ  ํšจ์œจ์ ์ธ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์•Œ์•„๋ด…๋‹ˆ๋‹ค.

f-lab.kr

 

+ Recent posts