๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ 69

์Šคํƒœํ‹ฑ (static) ์ด๋ž€?

static : ์ •์ , ๊ณ ์ •๋œ ์ด๋ž€ ์˜๋ฏธ์ž๋ฐ”์—์„œ์˜ static ํ‚ค์›Œ๋“œ๋ž€? ํด๋ž˜์Šค, ์ •์  ๋ฉค๋ฒ„ => static ๋ณ€์ˆ˜, static ๋ฉ”์„œ๋“œ Static์˜ ํŠน์ง•- ๋ฉ”๋ชจ๋ฆฌ์— ๊ณ ์ •์ ์œผ๋กœ ํ• ๋‹น- ๊ฐ์ฒด ์ƒ์„ฑ ์—†์ด ์‚ฌ์šฉ ๊ฐ€๋Šฅ - static ๋ฉ”์„œ๋“œ ๋‚ด์—์„œ๋Š” ์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜ ์‚ฌ์šฉ ๋ถˆ๊ฐ€- ํ•œ๋ฒˆ ๋ฉ”๋ชจ๋ฆฌ์— ์˜ฌ๋ผ๊ฐ€๋ฉด ๋ฉ”๋ชจ๋ฆฌ์˜ static ์˜์—ญ์— ์ ์žฌ๋˜๊ณ , ํ”„๋กœ๊ทธ๋žจ์ด ์ข…๋ฃŒ๋  ๋•Œ ํ•ด์ œ๋จ => GC๊ฐ€ ํ•„ํ„ฐ๋ง ํ•˜์ง€ ๋ชปํ•จ public class Ex { public void test() { System.out.println("์ถœ๋ ฅ๋ ๊นŒ?"); } public static void main() { // test(); // ๋ฉ”์„ธ์ง€ ์ถœ๋ ฅ๋˜์ง€ ์•Š๊ณ , ์ปดํŒŒ์ผ ์—๋Ÿฌ ๋ฐœ์ƒ! }}  => ์ปดํŒŒ์ผ ์—๋Ÿฌ ๋ฐœ์ƒ ์ด์œ ..

๊ธฐ๋ณธํ˜• ๋ณ€์ˆ˜ vs ์ฐธ์กฐํ˜• ๋ณ€์ˆ˜

๋ณ€์ˆ˜๋ž€?: ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•ด ํ• ๋‹น๋ฐ›์€ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„๋ฐ์ดํ„ฐํƒ€์ž…(์ž๋ฃŒํ˜•) ์ด๋ž€?: ์ ์žฌํ•  ๋ฐ์ดํ„ฐ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ์–ด๋–ป๊ฒŒ ์ €์žฅ๋˜๊ณ , ํ”„๋กœ๊ทธ๋žจ์—์„œ ์–ด๋–ป๊ฒŒ ์ฒ˜๋ฆฌ๋˜์–ด์•ผ ํ•˜๋Š”์ง€ ๋ช…์‹œ์ ์œผ๋กœ ์•Œ๋ ค์ฃผ๋Š” ํ‚ค์›Œ๋“œ ๋ฐ์ดํ„ฐ ํƒ€์ž…์€ ํฌ๊ฒŒ ๊ธฐ๋ณธํ˜• ํƒ€์ž… / ์ฐธ์กฐํ˜• ํƒ€์ž…์œผ๋กœ ๊ตฌ๋ถ„๋จ! ๊ธฐ๋ณธ ์ž๋ฃŒํ˜• 8๊ฐ€์ง€ 1 (byte)248์ •์ˆ˜ํ˜•byteshortintlong์‹ค์ˆ˜ํ˜•  floatdouble๋ฌธ์žํ˜• char  ๋…ผ๋ฆฌํ˜•boolean    ๊ธฐ๋ณธ ์ž๋ฃŒํ˜• ํŠน์ง•- null ๊ฐ’์„ ๊ฐ€์งˆ ์ˆ˜ ์—†๋‹ค. (๊ธฐ๋ณธ๊ฐ’์ด ์ •ํ•ด์ ธ ์žˆ์Œ)- ๋ณ€์ˆ˜ ์„ ์–ธ๊ณผ ๋™์‹œ์— ๋ฉ”๋ชจ๋ฆฌ ์ƒ์„ฑ- ๋ชจ๋“  ๊ฐ’ ํƒ€์ž…์€ ๋ฉ”๋ชจ๋ฆฌ์˜ ์Šคํƒ(Stack)์— ์ €์žฅ๋จ์ฐธ์กฐ ์ž๋ฃŒํ˜•๋ฐฐ์—ด ํƒ€์ž… / ์—ด๊ฑฐ ํƒ€์ž… / ํด๋ž˜์Šค / ์ธํ„ฐํŽ˜์ด์Šค ์ฐธ์กฐ ์ž๋ฃŒํ˜• ํŠน์ง•- ๊ธฐ๋ณธํ˜•๊ณผ ๋‹ฌ๋ฆฌ ์‹ค์ œ ๊ฐ’์ด ์ €์žฅ๋˜์ง€ ์•Š๊ณ , ์ž๋ฃŒ๊ฐ€ ์ €์žฅ๋œ ๊ณต๊ฐ„์˜ '์ฃผ์†Œ'๋ฅผ ์ €์žฅ..

JAVA๋ž€? ์ž๋ฐ”์˜ ๊ตฌ๋™ ์›๋ฆฌ (JVM์˜ ํŠน์ง•)

์ž๋ฐ”๋Š” ๊ฐ์ฒด ์ง€ํ–ฅ์  ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด !! ์ž๋ฐ” ํ”„๋กœ๊ทธ๋žจ์˜ ๊ตฌ๋™์›๋ฆฌ 1. ์†Œ์Šค์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•œ๋‹ค (.java ํ™•์žฅ์ž์˜ ์†Œ์ŠคํŒŒ์ผ)2. ์ปดํŒŒ์ผ๋Ÿฌ(java.exe)๊ฐ€ ๋ฐ”์ดํŠธ์ฝ”๋“œ๋กœ ๋ณ€ํ™˜ํ•œ๋‹ค. (.class ํ™•์žฅ์ž์˜ ํด๋ž˜์Šค ํŒŒ์ผ)3. ๋Ÿฐ์ฒ˜(java.exe)๋กœ ์ž๋ฐ” ๊ฐ€์ƒ๋จธ์‹ (JVM)์„ ๊ตฌ๋™์‹œํ‚จ๋‹ค.4. ์ž๋ฐ” ๊ฐ€์ƒ๋จธ์‹ (JVM)์ด ๋ฐ”์ดํŠธ์ฝ”๋“œ๋ฅผ ํ•ด์„ํ•˜๋ฉฐ ์ž๋ฐ” ํ”„๋กœ๊ทธ๋žจ์ด ์‹คํ–‰๋œ๋‹ค.( * bytecode๋Š” ์ž๋ฐ” ๊ฐ€์ƒ ๋จธ์‹ ์ด ์ฝ์„ ์ˆ˜ ์žˆ๋Š” ์–ธ์–ด๋กœ ๋ณ€ํ™˜๋œ ์ฝ”๋“œ. JVM๋งŒ ์„ค์น˜ ๋˜์–ด ์žˆ์œผ๋ฉด bytecode๋Š” ์–ด๋–ค ์šด์˜์ฒด์ œ์—์„œ๋ผ๋„ ์‹คํ–‰๋  ์ˆ˜ ์žˆ๋‹ค. )   ์ž๋ฐ” ๊ฐ€์ƒ ๋จธ์‹ (JVM)  * ๊ตฌ์„ฑ ์š”์†Œ 1. ํด๋ž˜์Šค ๋กœ๋”(Class Loader) : ํ•„์š”ํ•œ ํด๋ž˜์Šค ํŒŒ์ผ์„ ์ฐพ๊ณ  ๋™์ ์œผ๋กœ ๋กœ๋“œํ•˜์—ฌ ์‹คํ–‰ ์‹œ์— ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•œ๋‹ค. ๋กœ๋“œ๋œ ..

์ฟ ํ‚ค(Cookie) vs ์„ธ์…˜(Session)

์„œ๋ฒ„์™€ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ํ†ต์‹ ์„ ํ•  ๋•Œ ์š”์ฒญ(Request)/์‘๋‹ต(Response)์„ ์ฃผ๊ณ  ๋ฐ›๋Š”๋‹ค.์ด ๋•Œ ํ†ต์‹ ์ด ์—ฐ์†์ ์œผ๋กœ ์ด๋ฃจ์–ด์ง€์ง€ ์•Š๊ณ  ํ•œ ๋ฒˆ ํ†ต์‹ ์ด ๋˜๋ฉด ๋Š์–ด์ง„๋‹ค.๋”ฐ๋ผ์„œ, ์„œ๋ฒ„๋Š” ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋ˆ„๊ตฌ์ธ์ง€ ๊ณ„์† ์ธ์ฆ์„ ํ•ด์ค˜์•ผํ•œ๋‹ค.์ด๋Ÿฌํ•œ ๋ฒˆ๊ฑฐ๋กœ์›€์„ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•์ด '์ฟ ํ‚ค์™€ ์„ธ์…˜'์ด๋‹ค. ์ฟ ํ‚ค์™€ ์„ธ์…˜์˜ ์ฐจ์ด์ ์€ ํฌ๊ฒŒ ์ƒํƒœ ์ •๋ณด์˜ ์ €์žฅ ์œ„์น˜ ์ด๋‹ค.์ฟ ํ‚ค๋Š” 'ํด๋ผ์ด์–ธํŠธ(=๋กœ์ปฌPC)'์— ์ €์žฅํ•˜๊ณ , ์„ธ์…˜์€ '์„œ๋ฒ„'์— ์ €์žฅํ•œ๋‹ค.  ์ฟ ํ‚ค(Cookie)์„ธ์…˜(Session)์ €์žฅ์œ„์น˜ํด๋ผ์ด์–ธํŠธ(=์ ‘์†์ž PC)์›น ์„œ๋ฒ„ (ex. ํ†ฐ์บฃ HttpSession)๋งŒ๋ฃŒ์‹œ์ ์ฟ ํ‚ค ์ €์žฅ์‹œ ์„ค์ •(๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์ข…๋ฃŒ๋˜์–ด๋„, ๋งŒ๋ฃŒ์‹œ์ ์ด ์ง€๋‚˜์ง€ ์•Š์œผ๋ฉด ์ž๋™ ์‚ญ์ œ ๋˜์ง€ ์•Š์Œ)๋ธŒ๋ผ์šฐ์ € ์ข…๋ฃŒ์‹œ ์‚ญ์ œ(๊ธฐ๊ฐ„ ์ง€์ • ๊ฐ€๋Šฅ)์šฉ๋Ÿ‰์ œํ•œ์ด 300๊ฐœ, ํ•˜๋‚˜์˜ ๋„๋ฉ”์ธ๋‹น 20๊ฐœ, ํ•˜๋‚˜์˜..

QR ์ฝ”๋“œ ์ƒ์„ฑ

1. QR์ฝ”๋“œ ์ƒ์„ฑ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ( Maven Repository) ๊ฐ€์ ธ์˜ค๊ธฐ  2. pom.xml์— ์ถ”๊ฐ€ ๋ฐ qrcode.js ํŒŒ์ผ ์ถ”๊ฐ€ 3. HTML / JS   4.  HomeController.java@Controllerpublic class HomeController { private static final Logger logger = LoggerFactory.getLogger(HomeController.class); @RequestMapping(value = "/", method = RequestMethod.GET) public String home(Locale locale, Model model) { return "index"; } // =============..

๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ(Object Oriented Programming, OOP) ์–ธ์–ด

๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ(OOP) ์ด๋ž€ ? ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ (Object-Oriented Programming, OOP)์€ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”์ƒํ™” ์‹œ์ผœ ์ƒํƒœ์™€ ํ–‰์œ„๋ฅผ ๊ฐ€์ง„ ๊ฐ์ฒด๋กœ ๋งŒ๋“ค๊ณ , ๊ฐ์ฒด๋“ค๊ฐ„์˜ ์œ ๊ธฐ์ ์ธ ์ƒํ˜ธ์ž‘์šฉ์„ ํ†ตํ•ด ๋กœ์ง์„ ๊ตฌ์„ฑํ•˜๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ฐฉ๋ฒ•.(์ฐธ๊ณ ๋กœ, ์ ˆ์ฐจ ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด๋ž€ ์ˆœ์ฐจ์ ์ธ ์ฒ˜๋ฆฌ๊ฐ€ ์ค‘์š”์‹œ๋˜๋ฉฐ ํ”„๋กœ๊ทธ๋žจ ์ „์ฒด๊ฐ€ ์œ ๊ธฐ์ ์œผ๋กœ ์—ฐ๊ฒฐ๋˜๋„๋ก ๋งŒ๋“  ํ”„๋กœ๊ทธ๋ž˜๋ฐ, ๋ฐ˜๋ณต๋˜๋Š” ๋™์ž‘์„ ํ•จ์ˆ˜ ๋ฐ ํ”„๋กœ์‹œ์ € ํ˜•ํƒœ๋กœ ๋ชจ๋“ˆํ™”ํ•˜์—ฌ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ์‹)๊ฑฐ๊ธฐ์„œ ๋˜, ๊ฐ์ฒด(๋˜๋Š” ํด๋ž˜์Šค)๋ž€?  ํด๋ž˜์Šค : ์–ด๋–ค ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ์ถ”์ƒํ™”๋ฅผ ๊ฑฐ์ณ ์ง‘๋‹จ์— ์†ํ•˜๋Š” ์†์„ฑ(attribute)๊ณผ ํ–‰์œ„๋ฅผ ๋ณ€์ˆ˜์™€ ๋ฉ”์„œ๋“œ๋กœ ์ •์˜ํ•œ ๊ฒƒ๊ฐ์ฒด(์ธ์Šคํ„ด์Šค) : ํด๋ž˜์Šค์—์„œ ์ •์˜ํ•œ ๊ฒƒ์„ ํ† ๋Œ€๋กœ ์‹ค์ œ ๋ฉ”๋ชจ๋ฆฌ์— ํ• ๋‹น๋œ ..

์ž๋ฐ”(JAVA) ์š”์•ฝ ์ •๋ฆฌ

์ž๋ฐ”์˜ ํŠน์ง• : ๊ฐ์ฒด์ง€ํ–ฅ, G.C(Garbage Collector), JVM, WORA1) WORA (Write Once Run Anywhere)=> ์ž๋ฐ” ํ”„๋กœ๊ทธ๋žจ์€ ํ•œ ๋ฒˆ ์†Œ์Šค์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๊ณ  ๋‚˜๋ฉด ์šด์˜์ฒด์ œ ์ƒ๊ด€์—†์ด ์–ด๋””์„œ๋“  ์‹คํ–‰๊ฐ€๋Šฅํ•œ ํŠน์ง•2) JVM ( Java Virtual Machine, ์ž๋ฐ” ๊ฐ€์ƒ ๋จธ์‹  )=> ๊ฐ€์ƒ์˜ CPU ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ์ž๋ฐ”์˜ ํ•ต์‹ฌ ๊ตฌ์„ฑ์š”์†Œ3) Garbage Collector=> ์ž๋ฐ”์—์„œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ์—ญํ•  (๋” ์ด์ƒ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ๊ฐ์ฒด๋ฅผ ์ž๋™์œผ๋กœ ์ •๋ฆฌํ•˜๋Š” ์—ญํ• , ์ฐธ์กฐํ•˜๋Š” ๋ณ€์ˆ˜๊ฐ€ ์—†์„ ๋•Œ)๋ณ€์ˆ˜๋ช…, ๋ฉ”์„œ๋“œ ์‹๋ณ„์ž ๊ทœ์น™1) ๊ณต๋ฐฑ ๋ถˆ๊ฐ€2) ์ค‘๋ณต ๋ถˆ๊ฐ€3) ์ˆซ์ž๋กœ ์‹œ์ž‘ X4) ํ‚ค์›Œ๋“œ(์˜ˆ์•ฝ์–ด) ์‚ฌ์šฉ X5) ํŠน์ˆ˜๋ฌธ์ž(_, $) ๋งŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅ6) ๋Œ€์†Œ๋ฌธ์ž ๊ตฌ๋ณ„----------------..

form ํƒœ๊ทธ ์ž…๋ ฅ๋ฐ›์€ ๋ฐ์ดํ„ฐ๋ฅผ ํŒŒ๋ผ๋ฏธํ„ฐ ํ˜•์‹์œผ๋กœ ํ•œ๊บผ๋ฒˆ์— ๋ฆฌํ„ด๋ฐ›๊ธฐ($("form").serialize() ํ•จ์ˆ˜)

$(function() { const publicKey = '${publicKey}'; // ๊ณต๊ฐœํ‚ค ์ €์žฅ $("form").submit((e) => { // form ํƒœ๊ทธ submit ์ด๋ฒคํŠธ ํ•ธ๋“ค๋ง// e.preventDefault(); // ์ž…๋ ฅ๋ฐ›์€ ํšŒ์› ์ •๋ณด๋ฅผ ํŒŒ๋ผ๋ฏธํ„ฐ ํ˜•์‹์œผ๋กœ ํ•œ๊บผ๋ฒˆ์— ๋ฆฌํ„ด๋ฐ›๊ธฐ const serializedData = $("form").serialize(); // => ํผ์— ๋Œ€ํ•œ serialize() ๋ฉ”์„œ๋“œ๋Š” ํผ ๋ฐ์ดํ„ฐ๋ฅผ ์ง๋ ฌํ™”ํ•˜๋Š”๋ฐ // ์ด๋•Œ, ์ง๋ ฌํ™”์˜ ์˜๋ฏธ๋Š” ํผ ๋ฐ์ดํ„ฐ๋ฅผ ํŒŒ๋ผ๋ฏธํ„ฐ ํ˜•์‹์œผ๋กœ ์ผ๋ ฌ๋กœ ๋‚˜์—ดํ•œ๋‹ค๋Š” ์˜๋ฏธ// console.log(serializedData); // name=bora..

[Spring] DI์™€ AOP์˜ ๊ฐœ๋…

์˜์กด์„ฑ ์ฃผ์ž…(DI) : ์˜์กด์„ฑ ์ฃผ์ž…์€ ๊ฐ์ฒด ๊ฐ„์˜ ์˜์กด ๊ด€๊ณ„๋ฅผ ์™ธ๋ถ€์—์„œ ๊ฒฐ์ •ํ•˜๊ณ  ์ฃผ์ž…ํ•˜๋Š” ๋””์ž์ธ ํŒจํ„ด์ž…๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ๊ฐ ํด๋ž˜์Šค๋Š” ์ž์‹ ์˜ ์˜์กด ๊ฐ์ฒด๋ฅผ ์ง์ ‘ ์ƒ์„ฑํ•˜์ง€ ์•Š๊ณ , ์™ธ๋ถ€์—์„œ ์ฃผ์ž…๋ฐ›๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.์™œ๋ƒํ•˜๋ฉด ์ด ๋ฐฉ์‹์€ ํด๋ž˜์Šค ๊ฐ„์˜ ๊ฒฐํ•ฉ๋„๋ฅผ ๋‚ฎ์ถ”๊ณ , ์œ ์—ฐ์„ฑ๊ณผ ์žฌ์‚ฌ์šฉ์„ฑ์„ ๋†’์ด๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.@Autowired ์–ด๋…ธํ…Œ์ด์…˜์„ ํ†ตํ•ด DI๋ฅผ ์‰ฝ๊ฒŒ ๊ตฌํ˜„๊ด€์  ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ(AOP) :์–ด๋–ค ๋กœ์ง์„ ๊ธฐ์ค€์œผ๋กœ ํ•ต์‹ฌ์ ์ธ ๊ด€์ , ๋ถ€๊ฐ€์ ์ธ ๊ด€์ ์œผ๋กœ ๋‚˜๋ˆ„์–ด์„œ ๋ณด๊ณ  ๊ทธ ๊ด€์ ์„ ๊ธฐ์ค€์œผ๋กœ ๊ฐ๊ฐ ๋ชจ๋“ˆํ™”@Aspect ์–ด๋…ธํ…Œ์ด์…˜์„ ์‚ฌ์šฉํ•˜์—ฌ AOP๋ฅผ ๊ตฌํ˜„ ์ด ๋‘ ๊ธฐ๋Šฅ์„ ํ†ตํ•ด ๊ฐœ๋ฐœ์ž๋Š” ์ฝ”๋“œ์˜ ๊ฒฐํ•ฉ๋„๋ฅผ ๋‚ฎ์ถ”๊ณ , ๊ณตํ†ต ๊ธฐ๋Šฅ์˜ ์ค‘๋ณต์„ ์ค„์ด๋ฉฐ, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์œ ์ง€๋ณด์ˆ˜์™€ ํ™•์žฅ์„ฑ์„ ๋Œ€ํญ ํ–ฅ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ