<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>히이잉</title>
    <link>https://0749m.tistory.com/</link>
    <description></description>
    <language>ko</language>
    <pubDate>Sun, 5 Jul 2026 19:23:36 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>흐어아앙</managingEditor>
    <image>
      <title>히이잉</title>
      <url>https://tistory1.daumcdn.net/tistory/3073578/attach/b484a2774fca4d33bbdd43c3d9c1c531</url>
      <link>https://0749m.tistory.com</link>
    </image>
    <item>
      <title>지루성두피염 자가치료기록 - 내가 해본것들</title>
      <link>https://0749m.tistory.com/63</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;지루성두피염을 4년?정도 앓고있는것같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;피부과에서 더비솔액?이랑 먹는거 받아서 먹고 바르기를 3년넘게 하다가&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;약먹을때, 바를때만 나아지고 다시 며칠뒤면 두피전체가 아주 X창이 났다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;스테로이드성 치료제 오래쓰면 안된다는말이 많던데 우리 의사는 왜 맨날 달라는데로 잘만 주는지?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그렇게 몇년을 썼다. 문제는없었음;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;갈수록 뭔가 두피염 때문인지 머리숱도 적어지는것같고..&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아무래도 이렇게 평생 살순없을거같아서 여러 방법을 시도하던중 이제 좀 찾은거같달까&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;내 상태&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;비만 아님. 땀 많음. 열 많음. 술 많이 안먹음. 헬스 함. 발에 땀나서 어쩔땐 발냄새도 좀 나는편&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자극적인 음식 좋아함(맵짜). 흡연함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우선 해봤던것들 적어보자&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 니조랄 샴푸 - 한창 심할때 쓰면 자극 엄청나고 엄청 더 심해지는 느낌이라 안쓰다가 최근에 다시 써봤음. 근데 효과없고 뭔가 한두개 나있던애들마저 자극시켜서 더 화나게 하는거같아서 다시 안써보는중&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 헤드앤숄더 크리니컬 스트랭스인가 먼가 보라색 사서 현재 매일 사용중, 아침하고 저녁, 나쁘지않음. 머리 뻣뻣해져서 린스?같은거 같이 쓰는중 다이소꺼였나&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. 샴푸해놓고 양치하면서 뭐 3분이상 유지하라는거 하는중(효과있는지는 모르겠음 오히려 쎈샴푸?같은거 썼을때는 더 자극있는거같았음)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4. 나는 반곱슬인데, 머릿결이 뻣뻣할때 휜 머리카락이 두피를 찌르는?느낌이랄까 뭔가 기분이 그래서 린스써서 머릿결 찰랑찰랑하게 유지해보려고했음(근데 이거 뭔가 기분탓인지 효과있는듯했음)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;5. 찬바람말리기(실패) 너무 답답하고 머리말리다가 땀나고 개안마름(머리가 좀 긴편이긴함. 장발은 아님). 그냥 너무 뜨거운거만 안하는중&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;6. 두피도 피부니까 뭔가 건조해서 그런가해서 다이소에서 분무기형태??로된 토너같은거 두피에 일상생활중에 자주 막 뿌리기 해봤는데 기분탓인지 며칠 효과있는거 같았다가 똑같이 심해지길래 걍 안함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;7. 두피용 앰플, 토너 막 시원한 느낌드는것들 올리브영 순위에 있는거 몇개 써봤는데, 오히려 두피염 심할때쓰면 그냥 개 자극 심해서 염증폭발해버려서 안씀&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;8. 알페신 카페인 어쩌고 하는 샴푸도 써봤으나 효과못봄&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;9. 닥터포헤어꺼 샴푸 괜찮았는데 그래도 뭐 지루성두피염이 좋아지거나 하진않음. 그래도 막 샴푸떄문에 심해졌다는 느낌은 없었음&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;10. 바이브랩 스칼프 스피옥실 리액트샷 어쩌구 하는거 올영가서 두피에 바를거 없나 보다가 그냥 사봤는데, 두피염에 효과는 없었으나 앞머리쪽에 쬬맨한 원형탈모?비슷하게 있는곳에만 바르는데 뭔가 채워지는 느낌이 드는거임. 두개세트사서 하나는 두피 전체바르니까 무슨 일주일?인가만에 다 쓰길래 아까워서 탈모생길거같은 앞쪽만 바르는중 원형탈모 저거 확실히 줄어들면 재구매 해보고 다시 말함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;11. 식습관 조절 - 나는 맵고 짜고 단거 좋아하는데 이게 얼굴에 열을 너무 주나 해서 좀 줄여보려고 노력하는중, 기분탓 효과는 좀 있는듯. 근데 요즘 너무 자극적인 음식이 많아서 실제로는 하고있다고 보긴 힘드네..&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;12. 수면 - 8시간 이상 자는거 며칠 해봤는데, 효과 있는듯했음. 일찍잠드는것만으로도.. 근데 이것도 현실적으로 너무 지키기 힘듬.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래도 내 생활중에 바꿔서 지루성두피염에 효과있는것들중엔 제일 좋은듯함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;13. 다이소에서 무슨 파란색 막 두피 스케일링 어쩌구 아 아니다 다이소에있는 두피에 좋다고 인스타같은데 뜨는것들 다 써봤는데 효과없었음. 기분탓효과 하루는 있었던듯&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;14. 스트레스관리(실패) - 일을 안하고 살수있으면 지루성 두피염도 사라질듯(첫 직장에 들어가고부터 생겼기 때문)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;15. 헬스 - 땀흘리는 운동해야 좋다 어쩐다 하는데, 운동하면서 얼굴에 열올라가고 운동하는동안 땀식고 마르고 하는동안 두피염 더 악화되는거같음;; 이건 어떻게 해야할지 모르겠는데 일단 헬스는 함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;16. 한때는 전자담배에 있는 무슨 성분이 알레르기?가 있다고해서 전자담배를 끊고 연초를 피웠는데 진짜 신기하게 지루성 두피염이 좀 나아지는거임. 그래서 연초만 피웠는데, 이것도 결국 어느날 컨디션 안좋으니까 두피 폭발하길래 원인이 아닌가? 싶었는데.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;확실히 다시 전자담배 피니까 더 심해지는거임. 그래서 결국 아이코스 찐담으로 갈아타서 피워대는중. 다시 전담피고싶다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;17. 여기가 이제 진짜 효과인데. 두피에좋은 비타민이라도 챙겨먹어보자 해서 GPT랑 지루성두피염에 좋은 비타민 추천해달라서해서 종합비타민이랑 오메가3를 아이허브에서 사서 먹었는데. 진짜. 효과있음. 근데 이거 아닐수도있는데. 맞는거같음. 오메가3가 효과가있는거같은데..예전에 한창 헬스하면서 몸챙긴다고 각종 비타민 다 먹고 비타민C 어쩌구 머 다 먹었는데 효과있다고 생각한적이없는데. 암튼 이번에 갑자기 두개만 딱 먹는데 효과있음. 더이상 약 안바르고도 살 수도 있을거같음. 근데 술먹은날이나, 늦게까지 놀다가 졸리고 피곤함을 느낀날은 몇개 올라와서 약 그냥 남은거 발라버리는중.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 결론&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;현재 하는것들중에 뭔가가 효과가 굉장해서 많이 호전되었고, 컨디션 조절이랑 술만 안먹어도 더이상 피부과안다니고 살수있을것만 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 샴푸 3분 유지(가장 효과없는거같은거)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 헤드엔숄더 크리니컬 스트랭스 보라색 사용&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. 오메가3(이것도 머 찐오메가3 머 성분 두개 합쳐서 800 인가뭔가), 종합비타민(투퍼데이인가 뭔가임)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4. 잠좀 최대한 일찍자기&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;5. &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;바이브랩 스칼프 스피옥실 리액트샷 어쩌구 하는거(이건 지루성두피염이랑은 상관없이 탈모개선?)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;6. 전자담배 -&amp;gt; 찐담배&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;7. 헬스(하루에 40분가량..)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;8. 식습관 조절 - 잘 안되긴하는데 나름 노력&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;9. 술 - 아 맞다. 이것도. 맥주먹으면 심해지고 소주먹으면 좀 덜 심해짐. 그래서 소주만 먹으려 하는데 또 여름인데 시원하게 소맥 말고싶어서 잘 못지키는데, 맥주 먹으면 먹으면서 두피염 올라오는게 느껴질때가 많음;;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;생각나는건 여기까지인데, 더 실험해보고 올게요&lt;/p&gt;</description>
      <category>일상</category>
      <category>두피염</category>
      <category>지루성</category>
      <category>지루성두피염</category>
      <category>헤드앤숄더</category>
      <author>흐어아앙</author>
      <guid isPermaLink="true">https://0749m.tistory.com/63</guid>
      <comments>https://0749m.tistory.com/63#entry63comment</comments>
      <pubDate>Wed, 1 Jul 2026 17:25:34 +0900</pubDate>
    </item>
    <item>
      <title>크롬 비활성 탭에서 setInterval이 1분으로 변하는 이유</title>
      <link>https://0749m.tistory.com/62</link>
      <description>&lt;h1 data-end=&quot;100&quot; data-start=&quot;63&quot; data-section-id=&quot;rdwaoa&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;크롬 비활성 탭에서 setInterval이 1분으로 변하는 이유&lt;/span&gt;&lt;/h1&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1684&quot; data-origin-height=&quot;470&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b429s4/dJMcagkBMoC/CIanCc3pxuDcKDPhCspNc1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b429s4/dJMcagkBMoC/CIanCc3pxuDcKDPhCspNc1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b429s4/dJMcagkBMoC/CIanCc3pxuDcKDPhCspNc1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb429s4%2FdJMcagkBMoC%2FCIanCc3pxuDcKDPhCspNc1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1684&quot; height=&quot;470&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1684&quot; data-origin-height=&quot;470&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-end=&quot;126&quot; data-start=&quot;102&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;126&quot; data-start=&quot;102&quot; data-ke-size=&quot;size16&quot;&gt;웹 개발하다 보면 이런 거 한 번쯤 겪는다.&lt;/p&gt;
&lt;p data-end=&quot;169&quot; data-start=&quot;128&quot; data-ke-size=&quot;size16&quot;&gt;setInterval을 5초로 돌려놨는데&lt;br /&gt;어느 순간부터 1분마다 실행됨&lt;/p&gt;
&lt;p data-end=&quot;214&quot; data-start=&quot;171&quot; data-ke-size=&quot;size16&quot;&gt;다시 탭 눌러도 바로 안 돌아오고&lt;br /&gt;그대로 계속 느리게 돌아가는 경우도 있음&lt;/p&gt;
&lt;p data-end=&quot;234&quot; data-start=&quot;216&quot; data-ke-size=&quot;size16&quot;&gt;이거 버그 아니고 크롬 정책이다.&lt;/p&gt;
&lt;p data-end=&quot;234&quot; data-start=&quot;216&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;234&quot; data-start=&quot;216&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;아래 크롬 디버깅에서 실시간으로 탭 상태를 확인해볼수도 있다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;chrome://discards/&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1902&quot; data-origin-height=&quot;940&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b9dogP/dJMcagrnQFb/Zo1ofgtYuou55uwbRvwfRk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b9dogP/dJMcagrnQFb/Zo1ofgtYuou55uwbRvwfRk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b9dogP/dJMcagrnQFb/Zo1ofgtYuou55uwbRvwfRk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb9dogP%2FdJMcagrnQFb%2FZo1ofgtYuou55uwbRvwfRk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1902&quot; height=&quot;940&quot; data-origin-width=&quot;1902&quot; data-origin-height=&quot;940&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;div class=&quot;revenue_unit_wrap&quot;&gt;
  &lt;div class=&quot;revenue_unit_item adsense responsive&quot;&gt;
    &lt;div class=&quot;revenue_unit_info&quot;&gt;반응형&lt;/div&gt;
    &lt;script src=&quot;//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js&quot; async=&quot;async&quot;&gt;&lt;/script&gt;
    &lt;ins class=&quot;adsbygoogle&quot; style=&quot;display: block;&quot; data-ad-host=&quot;ca-host-pub-9691043933427338&quot; data-ad-client=&quot;ca-pub-4217750790966054&quot; data-ad-format=&quot;auto&quot;&gt;&lt;/ins&gt;
    &lt;script&gt;(adsbygoogle = window.adsbygoogle || []).push({});&lt;/script&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;h2 data-end=&quot;249&quot; data-start=&quot;241&quot; data-section-id=&quot;10a385l&quot; data-ke-size=&quot;size26&quot;&gt;문제 상황&lt;/h2&gt;
&lt;p data-end=&quot;264&quot; data-start=&quot;251&quot; data-ke-size=&quot;size16&quot;&gt;이런 코드가 있다고 치자&lt;/p&gt;
&lt;pre id=&quot;code_1774578622135&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;setInterval(() =&amp;gt; {
  console.log(&quot;실행&quot;);
}, 5000);&lt;/code&gt;&lt;/pre&gt;
&lt;p data-end=&quot;354&quot; data-start=&quot;336&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;354&quot; data-start=&quot;336&quot; data-ke-size=&quot;size16&quot;&gt;정상이라면 5초마다 찍혀야 한다.&lt;/p&gt;
&lt;p data-end=&quot;371&quot; data-start=&quot;356&quot; data-ke-size=&quot;size16&quot;&gt;근데 탭을 다른 데로 넘기면&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;424&quot; data-start=&quot;373&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;381&quot; data-start=&quot;373&quot; data-section-id=&quot;bs69h8&quot;&gt;처음엔 정상&lt;/li&gt;
&lt;li data-end=&quot;399&quot; data-start=&quot;382&quot; data-section-id=&quot;mwbvtq&quot;&gt;어느 순간부터 60초로 바뀜&lt;/li&gt;
&lt;li data-end=&quot;424&quot; data-start=&quot;400&quot; data-section-id=&quot;11agpod&quot;&gt;다시 돌아와도 그대로 유지되는 경우 있음&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 data-end=&quot;439&quot; data-start=&quot;431&quot; data-section-id=&quot;128hd9t&quot; data-ke-size=&quot;size26&quot;&gt;왜 이러냐&lt;/h2&gt;
&lt;p data-end=&quot;458&quot; data-start=&quot;441&quot; data-ke-size=&quot;size16&quot;&gt;크롬이 일부러 그렇게 만든거다.&lt;/p&gt;
&lt;p data-end=&quot;494&quot; data-start=&quot;460&quot; data-ke-size=&quot;size16&quot;&gt;탭이 화면에 안 보이면&lt;br /&gt;CPU 아끼려고 타이머를 제한한다.&lt;/p&gt;
&lt;p data-end=&quot;506&quot; data-start=&quot;496&quot; data-ke-size=&quot;size16&quot;&gt;핵심은 이거 하나임&lt;/p&gt;
&lt;blockquote data-end=&quot;548&quot; data-start=&quot;508&quot; data-ke-style=&quot;style1&quot;&gt;
&lt;p data-end=&quot;548&quot; data-start=&quot;510&quot; data-ke-size=&quot;size16&quot;&gt;백그라운드 탭에서는 타이머 최소 실행 간격이 1분까지 늘어날 수 있음&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p data-end=&quot;576&quot; data-start=&quot;550&quot; data-ke-size=&quot;size16&quot;&gt;그래서 5초로 줘도 실제로는 60초로 실행된다.&lt;/p&gt;
&lt;p data-end=&quot;576&quot; data-start=&quot;550&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 data-end=&quot;597&quot; data-start=&quot;583&quot; data-section-id=&quot;19q2dz5&quot; data-ke-size=&quot;size26&quot;&gt;상태 개념 간단 정리&lt;/h2&gt;
&lt;p data-end=&quot;614&quot; data-start=&quot;599&quot; data-ke-size=&quot;size16&quot;&gt;크롬에는 페이지 상태가 있다&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;674&quot; data-start=&quot;616&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;637&quot; data-start=&quot;616&quot; data-section-id=&quot;r14uq7&quot;&gt;active &amp;rarr; 화면에 보이는 상태&lt;/li&gt;
&lt;li data-end=&quot;654&quot; data-start=&quot;638&quot; data-section-id=&quot;1rdjrpp&quot;&gt;hidden &amp;rarr; 백그라운드&lt;/li&gt;
&lt;li data-end=&quot;674&quot; data-start=&quot;655&quot; data-section-id=&quot;pp1zed&quot;&gt;frozen &amp;rarr; 거의 멈춘 상태&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;699&quot; data-start=&quot;676&quot; data-ke-size=&quot;size16&quot;&gt;hidden부터 이미 타이머 제한 걸린다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 data-end=&quot;716&quot; data-start=&quot;706&quot; data-section-id=&quot;1v7it1s&quot; data-ke-size=&quot;size26&quot;&gt;중요한 포인트&lt;/h2&gt;
&lt;p data-end=&quot;727&quot; data-start=&quot;718&quot; data-ke-size=&quot;size16&quot;&gt;이게 더 문제다.&lt;/p&gt;
&lt;p data-end=&quot;777&quot; data-start=&quot;729&quot; data-ke-size=&quot;size16&quot;&gt;탭을 다시 눌러서 active로 바꿔도&lt;br /&gt;타이머가 즉시 정상으로 안 돌아올 수 있다.&lt;/p&gt;
&lt;p data-end=&quot;782&quot; data-start=&quot;779&quot; data-ke-size=&quot;size16&quot;&gt;그래서&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;817&quot; data-start=&quot;784&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;793&quot; data-start=&quot;784&quot; data-section-id=&quot;181iwwb&quot;&gt;몇 시간 켜둠&lt;/li&gt;
&lt;li data-end=&quot;802&quot; data-start=&quot;794&quot; data-section-id=&quot;1fama6k&quot;&gt;다시 돌아옴&lt;/li&gt;
&lt;li data-end=&quot;817&quot; data-start=&quot;803&quot; data-section-id=&quot;1804nz9&quot;&gt;여전히 1분으로 돌아감&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;835&quot; data-start=&quot;819&quot; data-ke-size=&quot;size16&quot;&gt;이런 상황이 실제로 발생한다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 data-end=&quot;941&quot; data-start=&quot;933&quot; data-section-id=&quot;ib841p&quot; data-ke-size=&quot;size26&quot;&gt;해결 방법&lt;/h2&gt;
&lt;p data-end=&quot;963&quot; data-start=&quot;943&quot; data-ke-size=&quot;size16&quot;&gt;이건 막는 게 아니라 대응해야 한다.&lt;/p&gt;
&lt;p data-end=&quot;963&quot; data-start=&quot;943&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; 1. visibilitychange로 감지&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1774578709830&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;document.addEventListener(&quot;visibilitychange&quot;, () =&amp;gt; {
  if (document.visibilityState === &quot;visible&quot;) {
    restartTimer();
  }
});&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; 2. 타이머 재생성 &lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1774578729216&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;let interval;

function startTimer() {
  interval = setInterval(() =&amp;gt; {
    console.log(&quot;실행&quot;);
  }, 5000);
}

function restartTimer() {
  clearInterval(interval);
  startTimer();
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이거 안 하면 계속 1분 유지되는 경우 있음&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; 3. 시간 차이로 이상 감지&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1774578752631&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;let last = Date.now();

setInterval(() =&amp;gt; {
  const now = Date.now();

  if (now - last &amp;gt; 10000) {
    console.log(&quot;타이머 꼬임&quot;);
    location.reload();
  }

  last = now;
}, 5000);&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;타이머가 밀리면 강제로 복구하는 방식&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; 4. setTimeout 루프로 바꾸기 &lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1774578768557&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;function loop() {
  setTimeout(() =&amp;gt; {
    console.log(&quot;실행&quot;);
    loop();
  }, 5000);
}

loop();&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;상황에 따라 이게 더 안정적일 때도 있다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 data-end=&quot;1846&quot; data-start=&quot;1838&quot; data-section-id=&quot;11itehd&quot; data-ke-size=&quot;size26&quot;&gt;못하는 것&lt;/h2&gt;
&lt;p data-end=&quot;1862&quot; data-start=&quot;1848&quot; data-ke-size=&quot;size16&quot;&gt;비활성화 안 되게 하는 거&lt;/p&gt;
&lt;p data-end=&quot;1876&quot; data-start=&quot;1864&quot; data-ke-size=&quot;size16&quot;&gt;이건 거의 불가능하다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1910&quot; data-start=&quot;1878&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1896&quot; data-start=&quot;1878&quot; data-section-id=&quot;lk4zlz&quot;&gt;소리 재생 &amp;rarr; 일부 효과 있음&lt;/li&gt;
&lt;li data-end=&quot;1910&quot; data-start=&quot;1897&quot; data-section-id=&quot;o1a2kq&quot;&gt;강제 활성화 &amp;rarr; 안됨&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;1928&quot; data-start=&quot;1912&quot; data-ke-size=&quot;size16&quot;&gt;브라우저 정책이라 못 막는다.&lt;/p&gt;
&lt;p data-end=&quot;1928&quot; data-start=&quot;1912&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 data-end=&quot;1940&quot; data-start=&quot;1935&quot; data-section-id=&quot;1melx8&quot; data-ke-size=&quot;size26&quot;&gt;정리&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;2023&quot; data-start=&quot;1942&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1968&quot; data-start=&quot;1942&quot; data-section-id=&quot;kivep2&quot;&gt;크롬은 백그라운드에서 타이머를 강제로 늦춘다&lt;/li&gt;
&lt;li data-end=&quot;1999&quot; data-start=&quot;1969&quot; data-section-id=&quot;kos7k1&quot;&gt;다시 활성화해도 자동으로 정상 복구 안 될 수 있다&lt;/li&gt;
&lt;li data-end=&quot;2023&quot; data-start=&quot;2000&quot; data-section-id=&quot;1t2q7rz&quot;&gt;그래서 반드시 복구 로직을 넣어야 한다&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 data-end=&quot;2039&quot; data-start=&quot;2030&quot; data-section-id=&quot;103ckic&quot; data-ke-size=&quot;size26&quot;&gt;한 줄 요약&lt;/h2&gt;
&lt;p data-end=&quot;2083&quot; data-start=&quot;2041&quot; data-ke-size=&quot;size16&quot;&gt;setInterval은 정확하지 않다.&lt;br /&gt;특히 백그라운드에서는 더 그렇다.&lt;/p&gt;</description>
      <category>JAVA</category>
      <category>크롬 1분</category>
      <category>크롬 interval</category>
      <category>크롬 settimeout</category>
      <category>크롬 백그라운드</category>
      <category>크롬 백그라운드 탭</category>
      <category>크롬 비화성화 탭 1분</category>
      <category>크롬 비활성</category>
      <category>크롬 비활성 탭</category>
      <category>크롬 비활성화</category>
      <category>크롬 타임아웃</category>
      <author>흐어아앙</author>
      <guid isPermaLink="true">https://0749m.tistory.com/62</guid>
      <comments>https://0749m.tistory.com/62#entry62comment</comments>
      <pubDate>Fri, 27 Mar 2026 11:41:33 +0900</pubDate>
    </item>
    <item>
      <title>try-catch 구문 기본 문법 및 사용법 예시, 자바 예외처리, exception처리</title>
      <link>https://0749m.tistory.com/61</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;try-catch&amp;nbsp;구문은&amp;nbsp;프로그램&amp;nbsp;실행&amp;nbsp;중&amp;nbsp;예외가&amp;nbsp;발생할&amp;nbsp;가능성이&amp;nbsp;있는&amp;nbsp;코드를&amp;nbsp;감싸는&amp;nbsp;구문입니다.&amp;nbsp;try&amp;nbsp;블록에는&amp;nbsp;예외가&amp;nbsp;발생할&amp;nbsp;가능성이&amp;nbsp;있는&amp;nbsp;코드를&amp;nbsp;작성하고,&amp;nbsp;예외가&amp;nbsp;발생하면&amp;nbsp;catch&amp;nbsp;블록에서&amp;nbsp;예외를&amp;nbsp;처리합니다. &lt;br /&gt;&lt;br /&gt;try-catch&amp;nbsp;구문의&amp;nbsp;기본&amp;nbsp;문법은&amp;nbsp;다음과&amp;nbsp;같습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1683189656542&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;try {
    // 예외가 발생할 가능성이 있는 코드
} catch (ExceptionType1 e1) {
    // 예외1 처리 코드
} catch (ExceptionType2 e2) {
    // 예외2 처리 코드
} catch (ExceptionType3 e3) {
    // 예외3 처리 코드
} finally {
    // 예외 발생 여부에 관계없이 항상 실행되는 코드
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위&amp;nbsp;구문에서&amp;nbsp;try&amp;nbsp;블록&amp;nbsp;내에서&amp;nbsp;예외가&amp;nbsp;발생하면,&amp;nbsp;해당&amp;nbsp;예외를&amp;nbsp;처리하는&amp;nbsp;catch&amp;nbsp;블록이&amp;nbsp;실행됩니다.&amp;nbsp;여러&amp;nbsp;개의&amp;nbsp;catch&amp;nbsp;블록을&amp;nbsp;사용하여&amp;nbsp;예외의&amp;nbsp;종류에&amp;nbsp;따라&amp;nbsp;다르게&amp;nbsp;처리할&amp;nbsp;수&amp;nbsp;있습니다. &lt;br /&gt;&lt;br /&gt;마지막으로&amp;nbsp;finally&amp;nbsp;블록은&amp;nbsp;예외&amp;nbsp;발생&amp;nbsp;여부에&amp;nbsp;관계없이&amp;nbsp;항상&amp;nbsp;실행되는&amp;nbsp;코드입니다.&amp;nbsp;예외&amp;nbsp;발생&amp;nbsp;시&amp;nbsp;처리할&amp;nbsp;코드나&amp;nbsp;리소스를&amp;nbsp;해제하는&amp;nbsp;코드&amp;nbsp;등을&amp;nbsp;작성합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;finally 블록은 생략해도 상관은 없습니다.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;그러나&amp;nbsp;finally&amp;nbsp;블록은&amp;nbsp;보통&amp;nbsp;자원을&amp;nbsp;해제하는&amp;nbsp;등의&amp;nbsp;정리&amp;nbsp;작업을&amp;nbsp;수행하기&amp;nbsp;위해&amp;nbsp;사용됩니다.&amp;nbsp;예를&amp;nbsp;들어&amp;nbsp;파일을&amp;nbsp;열어&amp;nbsp;작업을&amp;nbsp;수행한&amp;nbsp;후에는&amp;nbsp;finally&amp;nbsp;블록에서&amp;nbsp;파일을&amp;nbsp;닫는&amp;nbsp;코드를&amp;nbsp;작성하여&amp;nbsp;파일을&amp;nbsp;안전하게&amp;nbsp;닫을&amp;nbsp;수&amp;nbsp;있습니다. &lt;br /&gt;&lt;br /&gt;그렇기&amp;nbsp;때문에&amp;nbsp;finally&amp;nbsp;블록을&amp;nbsp;생략하면&amp;nbsp;자원&amp;nbsp;누수&amp;nbsp;등의&amp;nbsp;문제가&amp;nbsp;발생할&amp;nbsp;수&amp;nbsp;있으므로,&amp;nbsp;finally&amp;nbsp;블록을&amp;nbsp;꼭&amp;nbsp;작성하는&amp;nbsp;것이&amp;nbsp;좋습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;br /&gt;예를&amp;nbsp;들어,&amp;nbsp;다음은&amp;nbsp;숫자를&amp;nbsp;나누는&amp;nbsp;예제&amp;nbsp;코드입니다.&lt;/p&gt;
&lt;pre id=&quot;code_1683189671494&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;int a = 10;
int b = 0;

try {
    int c = a / b;
    System.out.println(c);
} catch (ArithmeticException e) {
    System.out.println(&quot;0으로 나눌 수 없습니다.&quot;);
} finally {
    System.out.println(&quot;프로그램을 종료합니다.&quot;);
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위&amp;nbsp;코드에서는&amp;nbsp;try&amp;nbsp;블록&amp;nbsp;내에서&amp;nbsp;a를&amp;nbsp;b로&amp;nbsp;나누려고&amp;nbsp;하면&amp;nbsp;예외가&amp;nbsp;발생할&amp;nbsp;가능성이&amp;nbsp;있습니다.&amp;nbsp;이를&amp;nbsp;catch&amp;nbsp;블록에서&amp;nbsp;ArithmeticException&amp;nbsp;예외를&amp;nbsp;처리하고,&amp;nbsp;finally&amp;nbsp;블록에서&amp;nbsp;프로그램을&amp;nbsp;종료하기&amp;nbsp;전에&amp;nbsp;항상&amp;nbsp;출력되는&amp;nbsp;메시지를&amp;nbsp;출력합니다. &lt;br /&gt;&lt;br /&gt;실행&amp;nbsp;결과는&amp;nbsp;다음과&amp;nbsp;같습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1683189689744&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;0으로 나눌 수 없습니다.
프로그램을 종료합니다.&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서&amp;nbsp;try-catch&amp;nbsp;구문을&amp;nbsp;사용하여&amp;nbsp;예외&amp;nbsp;처리를&amp;nbsp;함으로써&amp;nbsp;프로그램이&amp;nbsp;비정상적으로&amp;nbsp;종료되는&amp;nbsp;것을&amp;nbsp;방지하고,&amp;nbsp;안정성을&amp;nbsp;높일&amp;nbsp;수&amp;nbsp;있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Java에서&amp;nbsp;예외&amp;nbsp;처리를&amp;nbsp;위한&amp;nbsp;Exception&amp;nbsp;클래스와&amp;nbsp;그&amp;nbsp;하위&amp;nbsp;클래스들이&amp;nbsp;존재합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;catch&amp;nbsp;블록에서&amp;nbsp;처리할&amp;nbsp;예외&amp;nbsp;클래스는&amp;nbsp;try&amp;nbsp;블록에서&amp;nbsp;예외가&amp;nbsp;발생할&amp;nbsp;수&amp;nbsp;있는&amp;nbsp;클래스와&amp;nbsp;일치해야&amp;nbsp;합니다.&amp;nbsp;예외&amp;nbsp;처리를&amp;nbsp;위한&amp;nbsp;주요&amp;nbsp;예외&amp;nbsp;클래스는&amp;nbsp;다음과&amp;nbsp;같습니다. &lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: #009a87;&quot;&gt;&lt;b&gt;1.&amp;nbsp;Exception&amp;nbsp;클래스:&amp;nbsp;모든&amp;nbsp;예외&amp;nbsp;클래스의&amp;nbsp;최상위&amp;nbsp;클래스입니다. &lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #009a87;&quot;&gt;&lt;b&gt;2.&amp;nbsp;RuntimeException&amp;nbsp;클래스:&amp;nbsp;프로그램의&amp;nbsp;오류나&amp;nbsp;버그에&amp;nbsp;의해&amp;nbsp;발생하는&amp;nbsp;예외입니다.&amp;nbsp;try-catch&amp;nbsp;구문을&amp;nbsp;사용하지&amp;nbsp;않아도&amp;nbsp;컴파일러에서&amp;nbsp;오류가&amp;nbsp;발생하지&amp;nbsp;않습니다. &lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #009a87;&quot;&gt;&lt;b&gt;3.&amp;nbsp;IOException&amp;nbsp;클래스:&amp;nbsp;입출력&amp;nbsp;작업&amp;nbsp;중&amp;nbsp;발생하는&amp;nbsp;예외입니다. &lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #009a87;&quot;&gt;&lt;b&gt;4.&amp;nbsp;SQLException&amp;nbsp;클래스:&amp;nbsp;데이터베이스&amp;nbsp;연결과&amp;nbsp;관련된&amp;nbsp;예외입니다. &lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #009a87;&quot;&gt;&lt;b&gt;5.&amp;nbsp;NullPointerException&amp;nbsp;클래스:&amp;nbsp;객체&amp;nbsp;참조가&amp;nbsp;null인&amp;nbsp;상태에서&amp;nbsp;객체의&amp;nbsp;메서드를&amp;nbsp;호출하려고&amp;nbsp;할&amp;nbsp;때&amp;nbsp;발생하는&amp;nbsp;예외입니다.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;이&amp;nbsp;외에도&amp;nbsp;다양한&amp;nbsp;예외&amp;nbsp;클래스가&amp;nbsp;존재합니다.&amp;nbsp;예를&amp;nbsp;들어,&amp;nbsp;FileNotFoundException&amp;nbsp;클래스는&amp;nbsp;파일이&amp;nbsp;존재하지&amp;nbsp;않을&amp;nbsp;때&amp;nbsp;발생하는&amp;nbsp;예외를&amp;nbsp;처리합니다.&amp;nbsp;따라서&amp;nbsp;try-catch&amp;nbsp;구문을&amp;nbsp;사용할&amp;nbsp;때,&amp;nbsp;발생할&amp;nbsp;가능성이&amp;nbsp;있는&amp;nbsp;예외의&amp;nbsp;종류를&amp;nbsp;파악하고&amp;nbsp;적절한&amp;nbsp;예외&amp;nbsp;클래스를&amp;nbsp;사용하여&amp;nbsp;catch&amp;nbsp;블록을&amp;nbsp;작성해야&amp;nbsp;합니다.&lt;/p&gt;</description>
      <category>JAVA</category>
      <category>try catch 사용법</category>
      <category>try catch구문</category>
      <category>trycatch</category>
      <category>예외처리 예제</category>
      <category>자바 exception 처리</category>
      <category>자바 try catch</category>
      <category>자바 예외처리</category>
      <category>자바 예외처리 방법</category>
      <category>자바 익셉션</category>
      <category>트라이캐치</category>
      <author>흐어아앙</author>
      <guid isPermaLink="true">https://0749m.tistory.com/61</guid>
      <comments>https://0749m.tistory.com/61#entry61comment</comments>
      <pubDate>Thu, 4 May 2023 17:45:03 +0900</pubDate>
    </item>
    <item>
      <title>JsonParser 객체 사용방법, 메소드 설명 jsonparser 메소드</title>
      <link>https://0749m.tistory.com/60</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;JsonParser&amp;nbsp;객체는&amp;nbsp;JSON&amp;nbsp;데이터를&amp;nbsp;파싱하는&amp;nbsp;Java의&amp;nbsp;클래스입니다.&amp;nbsp;Java에서는&amp;nbsp;JSON&amp;nbsp;데이터를&amp;nbsp;파싱하여&amp;nbsp;객체나&amp;nbsp;배열로&amp;nbsp;변환하기&amp;nbsp;위해&amp;nbsp;JsonParser&amp;nbsp;객체를&amp;nbsp;사용할&amp;nbsp;수&amp;nbsp;있습니다. &lt;br /&gt;&lt;br /&gt;JsonParser&amp;nbsp;객체는&amp;nbsp;JSON&amp;nbsp;데이터를&amp;nbsp;파싱하기&amp;nbsp;위해&amp;nbsp;다음과&amp;nbsp;같은&amp;nbsp;메서드를&amp;nbsp;제공합니다. &lt;br /&gt;&lt;br /&gt;parse(String&amp;nbsp;json)&amp;nbsp;:&amp;nbsp;JSON&amp;nbsp;문자열을&amp;nbsp;파싱하여&amp;nbsp;JsonObject&amp;nbsp;또는&amp;nbsp;JsonArray&amp;nbsp;객체로&amp;nbsp;변환합니다. &lt;br /&gt;parse(Reader&amp;nbsp;json)&amp;nbsp;:&amp;nbsp;JSON&amp;nbsp;문자열을&amp;nbsp;파싱하여&amp;nbsp;JsonObject&amp;nbsp;또는&amp;nbsp;JsonArray&amp;nbsp;객체로&amp;nbsp;변환합니다. &lt;br /&gt;parse(InputStream&amp;nbsp;json)&amp;nbsp;:&amp;nbsp;JSON&amp;nbsp;문자열을&amp;nbsp;파싱하여&amp;nbsp;JsonObject&amp;nbsp;또는&amp;nbsp;JsonArray&amp;nbsp;객체로&amp;nbsp;변환합니다. &lt;br /&gt;JsonObject는&amp;nbsp;JSON&amp;nbsp;데이터에서&amp;nbsp;중괄호({})로&amp;nbsp;둘러싸인&amp;nbsp;객체를&amp;nbsp;나타내며,&amp;nbsp;JsonArray는&amp;nbsp;대괄호([])로&amp;nbsp;둘러싸인&amp;nbsp;배열을&amp;nbsp;나타냅니다. &lt;br /&gt;&lt;br /&gt;예를&amp;nbsp;들어,&amp;nbsp;다음과&amp;nbsp;같은&amp;nbsp;JSON&amp;nbsp;데이터가&amp;nbsp;있다고&amp;nbsp;가정해봅시다. &lt;/p&gt;
&lt;pre id=&quot;code_1683189036505&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;{
  &quot;name&quot;: &quot;John&quot;,
  &quot;age&quot;: 30,
  &quot;city&quot;: &quot;New York&quot;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;이&amp;nbsp;데이터를&amp;nbsp;파싱하여&amp;nbsp;JsonObject&amp;nbsp;객체로&amp;nbsp;변환하는&amp;nbsp;코드는&amp;nbsp;다음과&amp;nbsp;같습니다. &lt;/p&gt;
&lt;pre id=&quot;code_1683189049005&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;String jsonStr = &quot;{\&quot;name\&quot;:\&quot;John\&quot;,\&quot;age\&quot;:30,\&quot;city\&quot;:\&quot;New York\&quot;}&quot;;
JsonParser parser = new JsonParser();
JsonObject jsonObject = parser.parse(jsonStr).getAsJsonObject();&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;JsonObject&amp;nbsp;객체의&amp;nbsp;&quot;name&quot;&amp;nbsp;속성에&amp;nbsp;&quot;Tom&quot;이라는&amp;nbsp;값을&amp;nbsp;담는&amp;nbsp;코드는&amp;nbsp;다음과&amp;nbsp;같습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1683189134853&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;jsonObject.addProperty(&quot;name&quot;, &quot;Tom&quot;);&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;JsonObject&amp;nbsp;객체의&amp;nbsp;&quot;name&quot;&amp;nbsp;속성에&amp;nbsp;&quot;Tom&quot;이라는&amp;nbsp;값을&amp;nbsp;담은&amp;nbsp;후,&amp;nbsp;JsonObject를&amp;nbsp;다시&amp;nbsp;JSON&amp;nbsp;문자열로&amp;nbsp;변환하는&amp;nbsp;코드는&amp;nbsp;다음과&amp;nbsp;같습니다&lt;/p&gt;
&lt;pre id=&quot;code_1683189156683&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;String updatedJsonStr = jsonObject.toString();&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게&amp;nbsp;변환된&amp;nbsp;JSON&amp;nbsp;문자열&amp;nbsp;updatedJsonStr의&amp;nbsp;값은&amp;nbsp;다음과&amp;nbsp;같습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1683189177394&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;{&quot;name&quot;:&quot;Tom&quot;,&quot;age&quot;:30,&quot;city&quot;:&quot;New York&quot;}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이처럼&amp;nbsp;JsonParser&amp;nbsp;객체를&amp;nbsp;사용하여&amp;nbsp;JSON&amp;nbsp;데이터를&amp;nbsp;파싱하면,&amp;nbsp;Java에서&amp;nbsp;JSON&amp;nbsp;데이터를&amp;nbsp;쉽게&amp;nbsp;가공하거나&amp;nbsp;활용할&amp;nbsp;수&amp;nbsp;있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>JAVA</category>
      <category>getAsJsonObject()</category>
      <category>JSONObject</category>
      <category>JsonParser</category>
      <category>jsonparser parse</category>
      <category>jsonparser parse()</category>
      <category>jsonparser 사용법</category>
      <category>jsonparser란</category>
      <category>jsonparser메소드</category>
      <category>parse()</category>
      <author>흐어아앙</author>
      <guid isPermaLink="true">https://0749m.tistory.com/60</guid>
      <comments>https://0749m.tistory.com/60#entry60comment</comments>
      <pubDate>Thu, 4 May 2023 17:34:28 +0900</pubDate>
    </item>
    <item>
      <title>JSON이란, 기본 사용법 및 설명</title>
      <link>https://0749m.tistory.com/59</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;JSON(JavaScript&amp;nbsp;Object&amp;nbsp;Notation)은&amp;nbsp;경량&amp;nbsp;데이터&amp;nbsp;교환&amp;nbsp;형식으로,&amp;nbsp;인간이&amp;nbsp;읽고&amp;nbsp;쓰기&amp;nbsp;쉽고,&amp;nbsp;기계가&amp;nbsp;분석하고&amp;nbsp;생성하기도&amp;nbsp;쉽습니다.&amp;nbsp;특히&amp;nbsp;웹&amp;nbsp;어플리케이션에서&amp;nbsp;데이터&amp;nbsp;전송과&amp;nbsp;저장을&amp;nbsp;위한&amp;nbsp;표준&amp;nbsp;포맷으로&amp;nbsp;널리&amp;nbsp;사용됩니다. &lt;br /&gt;&lt;br /&gt;JSON은&amp;nbsp;키-값&amp;nbsp;쌍으로&amp;nbsp;이루어진&amp;nbsp;객체와&amp;nbsp;배열,&amp;nbsp;문자열,&amp;nbsp;숫자,&amp;nbsp;불리언(true/false)값과&amp;nbsp;null&amp;nbsp;값을&amp;nbsp;표현할&amp;nbsp;수&amp;nbsp;있습니다.&amp;nbsp;JSON&amp;nbsp;포맷은&amp;nbsp;일반&amp;nbsp;텍스트로&amp;nbsp;작성되며,&amp;nbsp;파일&amp;nbsp;확장자는&amp;nbsp;.json으로&amp;nbsp;표시됩니다. &lt;br /&gt;&lt;br /&gt;아래는&amp;nbsp;간단한&amp;nbsp;JSON&amp;nbsp;객체의&amp;nbsp;예시입니다.&lt;/p&gt;
&lt;pre id=&quot;code_1683188701854&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;{
  &quot;name&quot;: &quot;John&quot;,
  &quot;age&quot;: 30,
  &quot;city&quot;: &quot;New York&quot;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;이&amp;nbsp;객체는&amp;nbsp;&quot;name&quot;,&amp;nbsp;&quot;age&quot;,&amp;nbsp;&quot;city&quot;&amp;nbsp;세&amp;nbsp;개의&amp;nbsp;키를&amp;nbsp;가지며,&amp;nbsp;각각의&amp;nbsp;값은&amp;nbsp;문자열&amp;nbsp;&quot;John&quot;,&amp;nbsp;숫자&amp;nbsp;30,&amp;nbsp;문자열&amp;nbsp;&quot;New&amp;nbsp;York&quot;입니다. &lt;br /&gt;&lt;br /&gt;JSON은&amp;nbsp;다른&amp;nbsp;프로그래밍&amp;nbsp;언어와&amp;nbsp;상호&amp;nbsp;운용성이&amp;nbsp;좋습니다.&amp;nbsp;예를&amp;nbsp;들어,&amp;nbsp;자바스크립트에서&amp;nbsp;JSON&amp;nbsp;객체를&amp;nbsp;파싱하여&amp;nbsp;객체&amp;nbsp;또는&amp;nbsp;배열로&amp;nbsp;변환할&amp;nbsp;수&amp;nbsp;있으며,&amp;nbsp;파이썬에서는&amp;nbsp;json&amp;nbsp;모듈을&amp;nbsp;사용하여&amp;nbsp;JSON&amp;nbsp;데이터를&amp;nbsp;읽고&amp;nbsp;쓸&amp;nbsp;수&amp;nbsp;있습니다. &lt;br /&gt;&lt;br /&gt;JSON은&amp;nbsp;XML에&amp;nbsp;비해&amp;nbsp;문법이&amp;nbsp;간단하며,&amp;nbsp;더&amp;nbsp;가볍고&amp;nbsp;빠르게&amp;nbsp;처리할&amp;nbsp;수&amp;nbsp;있습니다.&amp;nbsp;그러나&amp;nbsp;JSON은&amp;nbsp;XML보다&amp;nbsp;표현력이&amp;nbsp;떨어지며,&amp;nbsp;메타데이터를&amp;nbsp;표현하기에&amp;nbsp;적합하지&amp;nbsp;않습니다. &lt;br /&gt;&lt;br /&gt;JSON은&amp;nbsp;현재&amp;nbsp;웹에서&amp;nbsp;가장&amp;nbsp;많이&amp;nbsp;사용되는&amp;nbsp;데이터&amp;nbsp;교환&amp;nbsp;형식&amp;nbsp;중&amp;nbsp;하나이며,&amp;nbsp;다양한&amp;nbsp;프로그래밍&amp;nbsp;언어와&amp;nbsp;기술에서&amp;nbsp;널리&amp;nbsp;사용됩니다. &lt;br /&gt;&lt;br /&gt;JSON&amp;nbsp;데이터를&amp;nbsp;생성하고&amp;nbsp;가공하는&amp;nbsp;방법은&amp;nbsp;다양합니다.&amp;nbsp;여기에서는&amp;nbsp;일반적으로&amp;nbsp;사용되는&amp;nbsp;몇&amp;nbsp;가지&amp;nbsp;방법을&amp;nbsp;설명하겠습니다. &lt;br /&gt;&lt;br /&gt;1. 객체 리터럴 사용하기 &lt;br /&gt;JavaScript에서&amp;nbsp;JSON&amp;nbsp;데이터를&amp;nbsp;생성하는&amp;nbsp;가장&amp;nbsp;간단한&amp;nbsp;방법은&amp;nbsp;객체&amp;nbsp;리터럴을&amp;nbsp;사용하는&amp;nbsp;것입니다.&amp;nbsp;객체&amp;nbsp;리터럴은&amp;nbsp;중괄호({})&amp;nbsp;안에&amp;nbsp;키-값&amp;nbsp;쌍으로&amp;nbsp;데이터를&amp;nbsp;정의하는&amp;nbsp;방법입니다.&amp;nbsp;예를&amp;nbsp;들어:&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1683188696508&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;var person = { &quot;name&quot;: &quot;John&quot;, &quot;age&quot;: 30, &quot;city&quot;: &quot;New York&quot; };&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. JSON.stringify() 사용하기 &lt;br /&gt;JavaScript에서는&amp;nbsp;JSON.stringify()&amp;nbsp;함수를&amp;nbsp;사용하여&amp;nbsp;객체를&amp;nbsp;JSON&amp;nbsp;문자열로&amp;nbsp;변환할&amp;nbsp;수&amp;nbsp;있습니다.&amp;nbsp;예를&amp;nbsp;들어: &lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1683188689332&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;var person = { &quot;name&quot;: &quot;John&quot;, &quot;age&quot;: 30, &quot;city&quot;: &quot;New York&quot; };
var jsonStr = JSON.stringify(person);
console.log(jsonStr); // 결과: {&quot;name&quot;:&quot;John&quot;,&quot;age&quot;:30,&quot;city&quot;:&quot;New York&quot;}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. JSON.parse() 사용하기 &lt;br /&gt;JSON 문자열을 JavaScript 객체로 변환하려면 JSON.parse() 함수를 사용합니다. 예를 들어:&lt;/p&gt;
&lt;pre id=&quot;code_1683188668570&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;var jsonStr = '{&quot;name&quot;:&quot;John&quot;,&quot;age&quot;:30,&quot;city&quot;:&quot;New York&quot;}';
var person = JSON.parse(jsonStr);
console.log(person.name); // 결과: &quot;John&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4. REST API에서 데이터 가져오기 &lt;br /&gt;REST API는 JSON 형식의 데이터를 제공하는 것이 일반적입니다. JavaScript에서는 XMLHttpRequest 객체나 fetch API를 사용하여 서버에서 데이터를 가져올 수 있습니다.&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1683188659238&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;fetch('https://example.com/api/person/1')
  .then(response =&amp;gt; response.json())
  .then(data =&amp;gt; console.log(data.name));&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;이처럼&amp;nbsp;JSON&amp;nbsp;데이터를&amp;nbsp;생성하고&amp;nbsp;가공하는&amp;nbsp;방법은&amp;nbsp;다양합니다.&amp;nbsp;어떤&amp;nbsp;방법을&amp;nbsp;선택하느냐에&amp;nbsp;따라&amp;nbsp;데이터&amp;nbsp;생성과&amp;nbsp;가공의&amp;nbsp;효율성과&amp;nbsp;편리성이&amp;nbsp;달라질&amp;nbsp;수&amp;nbsp;있습니다. &lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>JAVA</category>
      <category>JSON</category>
      <category>JSON 개념</category>
      <category>json 사용법</category>
      <category>json 예제</category>
      <category>json 활용</category>
      <category>JSON.parse</category>
      <category>json데이터</category>
      <category>json사용법</category>
      <category>json이란</category>
      <author>흐어아앙</author>
      <guid isPermaLink="true">https://0749m.tistory.com/59</guid>
      <comments>https://0749m.tistory.com/59#entry59comment</comments>
      <pubDate>Thu, 4 May 2023 17:26:45 +0900</pubDate>
    </item>
    <item>
      <title>JSTL이란? JSTL 사용법, 라이브러리 추가 등</title>
      <link>https://0749m.tistory.com/58</link>
      <description>&lt;blockquote data-ke-style=&quot;style3&quot;&gt;JSTL(JavaServer Pages Standard Tag Library)은 JSP(JavaServer Pages)를 개발할 때 사용할 수 있는 태그 라이브러리입니다.&lt;/blockquote&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;JSTL은 Java 웹 개발에서 자주 사용되는 코드를 태그 형식으로 제공하여 개발자들이 더 간단하고 효율적으로 JSP를 작성할 수 있도록 지원합니다.&lt;/blockquote&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;JSTL은 다양한 태그 라이브러리를 제공합니다. 예를 들어, core 태그 라이브러리는 JSP 페이지에서 변수를 선언하고 출력하는 기능을 제공합니다. 또한, loop 태그 라이브러리는 for문과 같은 반복문을 처리할 수 있습니다. 이 밖에도 JSTL은 조건문, 함수 호출, URL 처리 등 다양한 기능을 제공합니다.&lt;/blockquote&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;JSTL은 Java 웹 개발에서 일반적으로 사용되는 자바 코드를 JSP 페이지에서 처리할 수 있도록 하여, 개발자들이 더 쉽게 JSP 페이지를 작성할 수 있도록 합니다. 또한, JSTL은 태그 형태로 제공되기 때문에 코드의 가독성을 높이고 유지보수를 더 쉽게 할 수 있습니다.&lt;/blockquote&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;JSTL은 자바 웹 개발에서 광범위하게 사용되며, 다양한 태그 라이브러리를 제공하여 개발자들이 더 간편하게 JSP 페이지를 작성할 수 있도록 도와줍니다.&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;
&lt;script src=&quot;https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js&quot;&gt;&lt;/script&gt;
&lt;!-- 본문 --&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;
&lt;script&gt;
     (adsbygoogle = window.adsbygoogle || []).push({});
&lt;/script&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1. JSTL 라이브러리 추가하기&lt;/b&gt; &lt;br /&gt;먼저,&amp;nbsp;JSTL&amp;nbsp;라이브러리를&amp;nbsp;다운로드&amp;nbsp;받아&amp;nbsp;프로젝트에&amp;nbsp;추가해야&amp;nbsp;합니다.&amp;nbsp;JSTL&amp;nbsp;라이브러리는&amp;nbsp;JSP&amp;nbsp;페이지에서&amp;nbsp;사용할&amp;nbsp;수&amp;nbsp;있는&amp;nbsp;태그&amp;nbsp;라이브러리입니다.&amp;nbsp;이&amp;nbsp;라이브러리를&amp;nbsp;사용하기&amp;nbsp;위해서는&amp;nbsp;다음과&amp;nbsp;같이&amp;nbsp;웹&amp;nbsp;프로젝트의&amp;nbsp;WEB-INF/lib&amp;nbsp;디렉토리에&amp;nbsp;jstl.jar&amp;nbsp;파일과&amp;nbsp;standard.jar&amp;nbsp;파일을&amp;nbsp;추가해야&amp;nbsp;합니다. &lt;br /&gt;&lt;br /&gt;&lt;b&gt;2. JSTL 태그 라이브러리 선언하기&lt;/b&gt; &lt;br /&gt;JSTL&amp;nbsp;태그를&amp;nbsp;사용하려면&amp;nbsp;JSTL&amp;nbsp;태그&amp;nbsp;라이브러리를&amp;nbsp;선언해야&amp;nbsp;합니다.&amp;nbsp;JSP&amp;nbsp;페이지의&amp;nbsp;상단에&amp;nbsp;다음과&amp;nbsp;같이&amp;nbsp;선언합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1682919969981&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;%@ taglib prefix=&quot;c&quot; uri=&quot;http://java.sun.com/jsp/jstl/core&quot; %&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;- prefix 속성은 태그를 구분하기 위한 접두어를 지정하고, uri 속성은 JSTL 태그 라이브러리의 위치를 지정합니다. &lt;br /&gt;&lt;br /&gt;&lt;b&gt;3. JSTL 태그 사용하기&lt;/b&gt; &lt;br /&gt;JSTL&amp;nbsp;태그를&amp;nbsp;사용하는&amp;nbsp;방법은&amp;nbsp;다음과&amp;nbsp;같습니다. &lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&amp;nbsp;3-1 변수 선언&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1682920029068&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;c:set var=&quot;변수명&quot; value=&quot;값&quot; /&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323; text-align: start;&quot;&gt;3-2 변수 출력&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1682920055820&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;c:out value=&quot;${변수명}&quot; /&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323; text-align: start;&quot;&gt;3-3 조건문&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1682920073070&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;c:if test=&quot;${조건식}&quot;&amp;gt;
  ...
&amp;lt;/c:if&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323; text-align: start;&quot;&gt;3-4 반복문&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1682920902042&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;c:forEach var=&quot;변수명&quot; items=&quot;${컬렉션}&quot;&amp;gt;
  ...
&amp;lt;/c:forEach&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323; text-align: start;&quot;&gt;3-5 함수 호출&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1682920940209&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;${fn:함수명(인자)}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>JAVA</category>
      <category>JSTL</category>
      <category>JSTL 라이브러리</category>
      <category>jstl 반복문</category>
      <category>JSTL 변수</category>
      <category>JSTL 사용법</category>
      <category>JSTL 조건문</category>
      <category>JSTL 추가</category>
      <category>JSTL 태그</category>
      <category>JSTL 함수호출</category>
      <category>JSTL이란</category>
      <author>흐어아앙</author>
      <guid isPermaLink="true">https://0749m.tistory.com/58</guid>
      <comments>https://0749m.tistory.com/58#entry58comment</comments>
      <pubDate>Mon, 1 May 2023 15:05:23 +0900</pubDate>
    </item>
    <item>
      <title>JSTL 변수 선언, 값넣기, 삭제, 출력</title>
      <link>https://0749m.tistory.com/57</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;자바에서 받아온 변수를 JSTL을 사용해서 출력, 수정 등 컨트롤할 수 있다.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;JSTL을 이용해서 받아온 변수를 수정하거나 다루는방법을 정리해본다.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;&quot;&gt;&lt;b&gt;&amp;lt;c:set&amp;gt;&lt;/b&gt;에는 property, scope, target, value, var 5개의 속성을 사용할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;- property : 프로퍼티 설정&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;- scope : 변수가 저장된 스코프이며, page, request, session, application 4가지 속성값을 가질 수 있고, 선언하지 않아도 기본값으로 page가 설정된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;- target : 프로퍼티를 설정할 빈 또는 맵&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;- value : 변수에 넣을 값&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;- var : 변수명&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;1. 변수 선언하기 &amp;lt;c:set&amp;gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1682916975511&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;!-- 기본선언 --&amp;gt;
&amp;lt;c:set var=&quot;item1&quot; value=&quot;computer&quot;&amp;gt;

&amp;lt;!-- 출력 --&amp;gt;
${item1}

&amp;lt;!-- scope사용, 미선언시 기본값 &quot;page&quot; --&amp;gt;
&amp;lt;c:set var=&quot;item1&quot; value=&quot;computer&quot; scope=&quot;request&quot;&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;2. 변수 삭제하기 &amp;lt;c:remove&amp;gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1682918172072&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;!-- 해당 변수 삭제 --&amp;gt;
&amp;lt;c:remove var=&quot;item1&quot;/&amp;gt;

&amp;lt;!-- 
해당 스코프의 변수 삭제
*스코프 선언하지 않을경우 모든스코프의 해당변수삭제
--&amp;gt;
&amp;lt;c:remove var=&quot;item1&quot; scope=&quot;request&quot;/&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;nbsp;3. 변수 출력하기 &amp;lt;c:out&amp;gt;&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1682918372907&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;!-- 변수 출력1 --&amp;gt;
&amp;lt;c:out value=&quot;${item1}&quot;/&amp;gt;

&amp;lt;!-- 변수 출력2 (item1의 값이 null일시 &quot;item&quot;으로 출력) --&amp;gt;
&amp;lt;c:out value=&quot;${item1} default=&quot;item&quot;/&amp;gt;

&amp;lt;!-- 변수 출력3 --&amp;gt;
${item1}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 JSTL 변수 기본 사용법을 마무리하고, 응용까지 해보자.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1. 변수값 변경&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1682918495121&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;!-- 변수 선언 --&amp;gt;
&amp;lt;c:set var=&quot;item1&quot; value=&quot;computer&quot;/&amp;gt;
&amp;lt;c:set var=&quot;item2&quot; value=&quot;mouse&quot;/&amp;gt;
&amp;lt;c:set var=&quot;tmp&quot; value=&quot;${item1}&quot;/&amp;gt;

${item1} &amp;lt;!-- 결과 : computer --&amp;gt;
${item2} &amp;lt;!-- 결과 : mouse --&amp;gt;

&amp;lt;!-- 변수값 바꾸기 --&amp;gt;
&amp;lt;c:set var=&quot;item1&quot; value=&quot;${item2}&quot;/&amp;gt;
&amp;lt;c:set var=&quot;item2&quot; value=&quot;${tmp}&quot;/&amp;gt;

${item1} &amp;lt;!-- 결과 : mouse--&amp;gt;
${item2} &amp;lt;!-- 결과 : computer--&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2. Map 변수선언 및 사용&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1682919176823&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;c:set var=&quot;myMap&quot;&amp;gt;
    &amp;lt;c:catch&amp;gt;
        &amp;lt;%
            Map&amp;lt;String, String&amp;gt; map = new HashMap&amp;lt;String, String&amp;gt;();
            map.put(&quot;key1&quot;, &quot;value1&quot;);
            map.put(&quot;key2&quot;, &quot;value2&quot;);
            out.print(map);
        %&amp;gt;
    &amp;lt;/c:catch&amp;gt;
&amp;lt;/c:set&amp;gt;

&amp;lt;c:forEach var=&quot;entry&quot; items=&quot;${myMap}&quot;&amp;gt;
    Key: ${entry.key}, Value: ${entry.value}
&amp;lt;/c:forEach&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 코드에서는 &amp;lt;c:set&amp;gt; 태그를 사용하여 &quot;myMap&quot;이라는 이름의 변수를 선언하고,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;JSP 페이지 내에서 Java 코드를 실행하여 Map 타입의 객체를 생성하고,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 객체를 &quot;myMap&quot; 변수에 할당한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그 후 &amp;lt;c:forEach&amp;gt; 태그를 사용하여 &quot;myMap&quot; 변수에 저장된 Map 타입의 객체를 반복문으로 순회하며,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;각각의 키와 값을 출력한다.&lt;/p&gt;
&lt;p style=&quot;background-color: #f7f7f8; color: #374151; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;즉, 변수를 선언할 때 Map 타입을 사용할 수 없지만, 변수에 Map 타입의 객체를 할당하여 사용하는 것은 가능하다.&lt;/p&gt;</description>
      <category>JAVA</category>
      <category>JSTL</category>
      <category>JSTL Map</category>
      <category>jstl remove</category>
      <category>jstl set</category>
      <category>JSTL 변수</category>
      <category>jstl 변수 값</category>
      <category>JSTL 변수 값 넣기</category>
      <category>JSTL 변수 삭제</category>
      <category>JSTL 변수값 수정</category>
      <category>JSTL 변수선언</category>
      <author>흐어아앙</author>
      <guid isPermaLink="true">https://0749m.tistory.com/57</guid>
      <comments>https://0749m.tistory.com/57#entry57comment</comments>
      <pubDate>Mon, 1 May 2023 14:37:30 +0900</pubDate>
    </item>
    <item>
      <title>[프로그래머스]Lv2.올바른 괄호 자바정답(스택/큐) 및 해석 Stack 사용법</title>
      <link>https://0749m.tistory.com/56</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;747&quot; data-origin-height=&quot;809&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b7PVm5/btrPAqBhVeB/Naq0RVOoWlkqJpHP4IEiMK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b7PVm5/btrPAqBhVeB/Naq0RVOoWlkqJpHP4IEiMK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b7PVm5/btrPAqBhVeB/Naq0RVOoWlkqJpHP4IEiMK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb7PVm5%2FbtrPAqBhVeB%2FNaq0RVOoWlkqJpHP4IEiMK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;747&quot; height=&quot;809&quot; data-origin-width=&quot;747&quot; data-origin-height=&quot;809&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;스택/큐 문제지만 내 방식대로 풀어보았다.&lt;/p&gt;
&lt;pre class=&quot;ruby&quot;&gt;&lt;code&gt;class Solution {
	    boolean solution(String s) {
	        boolean answer = true;
	        int tmp0 = 0; // '(' 일때 ++ ,  ')' 일때 -- 할 변수
	        if(s.charAt(0) == ')') return false; //처음부터 ')'가 나오면 바로 리턴
	        if(s.charAt(s.length()-1) == '(') return false; //마지막에 '('가 나오면 바로 리턴
	        
	        for(int i = 0; i&amp;lt;s.length();i++) { // 0번째 자리부터 마지막자리까지 반복한다.
		        char tmp = s.charAt(i); // s의 i번째 문자를 가져온다.
		        if(tmp0 == 0 &amp;amp;&amp;amp; tmp == ')') return false; // '('가 나오지 않았는데 ')'가 나오면 리턴 &quot;()))((()&quot; 차단
		        if(tmp == '(')tmp0++;
		        if(tmp == ')')tmp0--;
	        }
	        
	        if(tmp0 != 0) return false; // for문이 다 끝났는데 tmp0이 0이 아니면 리턴 false
	        
	        return answer; //모든 검사 후 정상적으로 괄호가 있을때 true 리턴
	    }
	}
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;채점결과 모두 통과했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다른 사람의 풀이를 보자..&lt;/p&gt;
&lt;pre class=&quot;axapta&quot;&gt;&lt;code&gt;class Solution {
    boolean solution(String s) {
        boolean answer = false;
        int count = 0;
        for(int i = 0; i&amp;lt;s.length();i++){
            if(s.charAt(i) == '('){
                count++;
            }
            if(s.charAt(i) == ')'){
                count--;
            }
            if(count &amp;lt; 0){
                break;
            }
        }
        if(count == 0){
            answer = true;
        }

        return answer;
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이분도 스택이나 큐를 쓰지 않고 문제를 풀었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;나랑 비슷하지만, 좀더 깔끔한것 같다.&lt;/p&gt;
&lt;pre class=&quot;elixir&quot;&gt;&lt;code&gt;if(s.charAt(0) == ')') return false; //처음부터 ')'가 나오면 바로 리턴
if(s.charAt(s.length()-1) == '(') return false; //마지막에 '('가 나오면 바로 리턴
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;나는 for문 전에 처음이나 마지막을 먼저 검사하는 부분이 있는데&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이는 효율성을 나름 생각해서 &amp;ldquo;()()()()()()()()()()()()(&amp;rdquo; 이런 경우에&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;끝까지 검사한 후에야 리턴하기때문에 넣었던 것인데..&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다른사람것도 돌려보니 속도면에서는 크게 차이는 없는것 같다.(?)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래는 스택을 이용한 방법인것 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;스택은 실사용해본적이 없어서 잘 몰랐는데 이참에 공부해봐야겠다.&lt;/p&gt;
&lt;pre class=&quot;arduino&quot;&gt;&lt;code&gt;import java.util.Stack;
class Solution {
    boolean solution(String s) {
        boolean answer = true;  
        String res = &quot;YES&quot;;
        Stack&amp;lt;Integer&amp;gt; st = new Stack&amp;lt;&amp;gt;();

        for (int i = 0; i &amp;lt; s.length(); i++) {
                if (s.charAt(i) == '(') {
                    st.push(1);
                } else if (s.charAt(i) == ')') {
                    if (st.isEmpty()) {
                        answer = false;
                        break;
                    } else {
                        st.pop();
                    }
                }
            }

            if(!st.isEmpty()) {

                answer = false;

            }

            System.out.println(res);
return answer;
    }   

}
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Stack 사용법&lt;/p&gt;
&lt;pre class=&quot;lasso&quot;&gt;&lt;code&gt;Stack&amp;lt;String&amp;gt; stack = new Stack&amp;lt;&amp;gt;();
	        stack.add(&quot;스택추가&quot;);
	        stack.push(&quot;스택추가&quot;);
	        String tmp = stack.pop();
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;스택 사용법은 push, pop만 알고 넘어가자.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;stack.add()와 stack.push()의 차이점도 알게되었는데,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;add() 의 리턴값은 boolean&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;push() 의 리턴값은 &amp;lt;E&amp;gt;이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;즉, add()는 성공실패를 받고&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;push는 넣은값을 다시 리턴받는것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;스택/큐 문제지만 내 방식대로 풀어보았다.&lt;/p&gt;
&lt;pre class=&quot;ruby&quot;&gt;&lt;code&gt;class Solution {
	    boolean solution(String s) {
	        boolean answer = true;
	        int tmp0 = 0; // '(' 일때 ++ ,  ')' 일때 -- 할 변수
	        if(s.charAt(0) == ')') return false; //처음부터 ')'가 나오면 바로 리턴
	        if(s.charAt(s.length()-1) == '(') return false; //마지막에 '('가 나오면 바로 리턴
	        
	        for(int i = 0; i&amp;lt;s.length();i++) { // 0번째 자리부터 마지막자리까지 반복한다.
		        char tmp = s.charAt(i); // s의 i번째 문자를 가져온다.
		        if(tmp0 == 0 &amp;amp;&amp;amp; tmp == ')') return false; // '('가 나오지 않았는데 ')'가 나오면 리턴 &quot;()))((()&quot; 차단
		        if(tmp == '(')tmp0++;
		        if(tmp == ')')tmp0--;
	        }
	        
	        if(tmp0 != 0) return false; // for문이 다 끝났는데 tmp0이 0이 아니면 리턴 false
	        
	        return answer; //모든 검사 후 정상적으로 괄호가 있을때 true 리턴
	    }
	}
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;채점결과 모두 통과했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다른 사람의 풀이를 보자..&lt;/p&gt;
&lt;pre class=&quot;axapta&quot;&gt;&lt;code&gt;class Solution {
    boolean solution(String s) {
        boolean answer = false;
        int count = 0;
        for(int i = 0; i&amp;lt;s.length();i++){
            if(s.charAt(i) == '('){
                count++;
            }
            if(s.charAt(i) == ')'){
                count--;
            }
            if(count &amp;lt; 0){
                break;
            }
        }
        if(count == 0){
            answer = true;
        }

        return answer;
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이분도 스택이나 큐를 쓰지 않고 문제를 풀었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;나랑 비슷하지만, 좀더 깔끔한것 같다.&lt;/p&gt;
&lt;pre class=&quot;elixir&quot;&gt;&lt;code&gt;if(s.charAt(0) == ')') return false; //처음부터 ')'가 나오면 바로 리턴
if(s.charAt(s.length()-1) == '(') return false; //마지막에 '('가 나오면 바로 리턴
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;나는 for문 전에 처음이나 마지막을 먼저 검사하는 부분이 있는데&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이는 효율성을 나름 생각해서 &amp;ldquo;()()()()()()()()()()()()(&amp;rdquo; 이런 경우에&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;끝까지 검사한 후에야 리턴하기때문에 넣었던 것인데..&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다른사람것도 돌려보니 속도면에서는 크게 차이는 없는것 같다.(?)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래는 스택을 이용한 방법인것 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;스택은 실사용해본적이 없어서 잘 몰랐는데 이참에 공부해봐야겠다.&lt;/p&gt;
&lt;pre class=&quot;arduino&quot;&gt;&lt;code&gt;import java.util.Stack;
class Solution {
    boolean solution(String s) {
        boolean answer = true;  
        String res = &quot;YES&quot;;
        Stack&amp;lt;Integer&amp;gt; st = new Stack&amp;lt;&amp;gt;();

        for (int i = 0; i &amp;lt; s.length(); i++) {
                if (s.charAt(i) == '(') {
                    st.push(1);
                } else if (s.charAt(i) == ')') {
                    if (st.isEmpty()) {
                        answer = false;
                        break;
                    } else {
                        st.pop();
                    }
                }
            }

            if(!st.isEmpty()) {

                answer = false;

            }

            System.out.println(res);
return answer;
    }   

}
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Stack 사용법&lt;/p&gt;
&lt;pre class=&quot;lasso&quot;&gt;&lt;code&gt;Stack&amp;lt;String&amp;gt; stack = new Stack&amp;lt;&amp;gt;();
	        stack.add(&quot;스택추가&quot;);
	        stack.push(&quot;스택추가&quot;);
	        String tmp = stack.pop();
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;스택 사용법은 push, pop만 알고 넘어가자.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;stack.add()와 stack.push()의 차이점도 알게되었는데,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;add() 의 리턴값은 boolean&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;push() 의 리턴값은 &amp;lt;E&amp;gt;이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;즉, add()는 성공실패를 받고&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;push는 넣은값을 다시 리턴받는것이다.&lt;/p&gt;</description>
      <category>JAVA</category>
      <category>올바른 괄호</category>
      <category>올바른 괄호 정답</category>
      <category>자바 올바른괄호</category>
      <category>코딩테스트 정답</category>
      <category>프로그래머스 올바른괄호</category>
      <category>프로그래머스 코딩테스트</category>
      <author>흐어아앙</author>
      <guid isPermaLink="true">https://0749m.tistory.com/56</guid>
      <comments>https://0749m.tistory.com/56#entry56comment</comments>
      <pubDate>Wed, 26 Oct 2022 09:15:05 +0900</pubDate>
    </item>
    <item>
      <title>[SQL]LIKE 문자열검색, 사용법,패턴,예시</title>
      <link>https://0749m.tistory.com/55</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;LIKE절 사용법&lt;/b&gt;&lt;/h2&gt;
&lt;pre class=&quot;n1ql&quot;&gt;&lt;code&gt;SELECT * FROM 테이블 WHERE 컬럼 LIKE &amp;lsquo;검색할패턴&amp;rsquo;
&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;패턴 종류 ( % ), ( _ )&lt;/li&gt;
&lt;li&gt;( % ) : 모든문자&lt;/li&gt;
&lt;li&gt;( _ ) : 한글자&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;테이블 예시 :&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;회원정보&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ID NAME ADDRESS&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;KING&lt;/td&gt;
&lt;td&gt;배정남&lt;/td&gt;
&lt;td&gt;서울특별시 종로구 241-24&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;HONG&lt;/td&gt;
&lt;td&gt;정우성&lt;/td&gt;
&lt;td&gt;대전광역시 동구 용전동 22-4&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;YUJIN&lt;/td&gt;
&lt;td&gt;최홍만&lt;/td&gt;
&lt;td&gt;인천광역시 중구 홍길동 11-2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CHOI&lt;/td&gt;
&lt;td&gt;김우빈&lt;/td&gt;
&lt;td&gt;서울시 강남구 24-56&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;pre class=&quot;pgsql&quot;&gt;&lt;code&gt;// ADDRESS(주소)가 '서울특별시'로 시작하는 모든 ROW를 출력
SELECT * FROM 회원정보 WHERE ADDRESS LIKE '서울특별시%';

// ADDRESS(주소)에 '동구'라는 단어가 들어가는 모든 ROW를 출력
SELECT * FROM 회원정보 WHERE ADDRESS LIKE '%동구%';

// ADDRESS(주소)에 마지막 글자가 '24'로 끝나는 모든 ROW를 출력
SELECT * FROM 회원정보 WHERE ADDRESS LIKE '%24';

// ADDRESS(주소)에 '광역시'앞에 두글자가 어떤문자든 있는 ROW를 출력 
SELECT * FROM 회원정보 WHERE ADDRESS LIKE '__광역시%'; // 언더바 두개임
&lt;/code&gt;&lt;/pre&gt;</description>
      <category>JAVA</category>
      <category>like란</category>
      <category>SQL LIKE 사용법</category>
      <category>sql like문</category>
      <author>흐어아앙</author>
      <guid isPermaLink="true">https://0749m.tistory.com/55</guid>
      <comments>https://0749m.tistory.com/55#entry55comment</comments>
      <pubDate>Thu, 8 Sep 2022 13:56:21 +0900</pubDate>
    </item>
    <item>
      <title>[SQL]ORDER BY절 사용법, 설명, 우선순위, ORDER BY 여러개</title>
      <link>https://0749m.tistory.com/54</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;ORDER BY 사용법&lt;/b&gt;&lt;/h3&gt;
&lt;pre class=&quot;sql&quot; data-ke-language=&quot;sql&quot;&gt;&lt;code&gt;SELECT * FROM 테이블이름 ORDER BY 컬럼명 정렬방법; //DESC(내림차순), ASC(오름차순)

SELECT * FROM 테이블이름 ORDER BY 컬럼명; // 정렬방법을 생략하면 ASC가 기본값이다.&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;회원정보테이블&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ID NAME ADDRESS AGE&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style4&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;KING&lt;/td&gt;
&lt;td&gt;배정남&lt;/td&gt;
&lt;td&gt;서울특별시 종로구 241-24&lt;/td&gt;
&lt;td&gt;21&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;HONG&lt;/td&gt;
&lt;td&gt;정우성&lt;/td&gt;
&lt;td&gt;대전광역시 동구 용전동 22-4&lt;/td&gt;
&lt;td&gt;54&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;YUJIN&lt;/td&gt;
&lt;td&gt;최홍만&lt;/td&gt;
&lt;td&gt;인천광역시 중구 홍길동 11-2&lt;/td&gt;
&lt;td&gt;32&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CHOI&lt;/td&gt;
&lt;td&gt;김우빈&lt;/td&gt;
&lt;td&gt;서울시 강남구 24-56&lt;/td&gt;
&lt;td&gt;25&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre class=&quot;sql&quot; data-ke-language=&quot;sql&quot;&gt;&lt;code&gt;SELECT * FROM 회원정보 ORDER BY AGE DESC; //나이 역순 정렬

SELECT * FROM 회원정보 ORDER BY AGE ASC; //나이 오름차순 정렬

SELECT * FROM 회원정보 ORDER BY AGE DESC, ADDRESS ASC; //나이 역순 정렬, 주소 오름차순 정렬
■ 앞에 먼저 쓴 정렬순서대로 적용된다. ( **나이역순정렬 후, 나이가 같은 사람이 있다면?** 주소 오름차순으로 정렬된다. ) 

여러개(혹은 두개이상)의 ORDER BY 조건을 사용한다면, 앞에서부터 순차적으로 적용되기 때문에 우선순위를 잘 고려해서 사용하여야 한다.&lt;/code&gt;&lt;/pre&gt;</description>
      <category>order by</category>
      <category>ORDER BY란</category>
      <category>ORDER BY문</category>
      <category>ORDER BY여러개</category>
      <category>ORDER BY절</category>
      <author>흐어아앙</author>
      <guid isPermaLink="true">https://0749m.tistory.com/54</guid>
      <comments>https://0749m.tistory.com/54#entry54comment</comments>
      <pubDate>Thu, 8 Sep 2022 13:52:35 +0900</pubDate>
    </item>
  </channel>
</rss>