<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>y_w.log</title>
        <link>https://velog.io/</link>
        <description>y_w</description>
        <lastBuildDate>Tue, 21 May 2024 01:25:00 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <copyright>Copyright (C) 2019. y_w.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/y_w" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[[자바]Map / HashMap]]></title>
            <link>https://velog.io/@y_w/%EC%9E%90%EB%B0%94Map-HashMap</link>
            <guid>https://velog.io/@y_w/%EC%9E%90%EB%B0%94Map-HashMap</guid>
            <pubDate>Tue, 21 May 2024 01:25:00 GMT</pubDate>
            <description><![CDATA[<pre><code class="language-java">Map&lt;String, Object&gt; result = new hashmap&lt;&gt;;</code></pre>
<p><code>Map</code>과 <code>HashMap</code>은 <code>java</code>에서 데이터를 저장하고 관리하는 데 사용되는 자료구조와 관련된용어이다.
<code>Map</code>은 인터페이스이다. 키와 값의 쌍을 저장하고 관리할 수 있는 데이터구조이다.</p>
<ul>
<li>중복을 허용하지 않는다.</li>
<li>순서는 유지되지 않으며, 키는 중복을 허락하지 않는다.</li>
<li><code>Map</code>인터페이스의 주요 구현 클래스 중에는 <code>HashMap</code>, <code>TreeMap</code>, <code>LinkedHashMap</code> 등이 있다.</li>
<li><code>Map</code>은 인터페이스이므로 직접 인스턴스를 생성할 수 없다. (인터페이스는 선언만 가능하다. 객체 생성이 불가능 때문에 자식인 <code>HashMap</code>을 사용.)
따라서 <code>new HashMap</code>과 같이 구체적인 구현 클래스의 인스턴스를 생성해야한다.</li>
<li><code>HashMap</code>은 키-값 쌍을 저장할 수 있는 자료구조이고 데이터를 검색하고 가져오는 데 사용되며 <code>HashMap</code>은 <code>java</code>에서 가장 많이 사용되는 컬렉션 중 하나이며, 데이터를 빠르게 검색할 수 있다.<ul>
<li><code>null</code>을 허용</li>
</ul>
</li>
</ul>
<p><code>Map</code>형태로 선언한 경우 언제든 다른 구현체로 변경할 수 있다. 변경에 용이하게.
단 하위 클래스의 자체 메서드를 사용하려면 다운캐스팅 필요.</p>
<ul>
<li>HashMap 데이터를 저장할 때 키와 값이 짝을 이루어 저장됨. 데이터를 저장할 때는 키값으로 해시함수를 실행한 결과를 통해 저장위치를 결정.
따라서 HashMap은 저장위치를 해시함수를 통해 알 수 있기 때문에 데이터의 추가/삭제 특히 검색이 빠르다는 장점.</li>
<li>키 값을 통해서만 검색이 가능하며, HashMap의 키값은 중복될 수 없고 값은 키값이 다르다면 중복이 가능함.</li>
</ul>
<p>값추가 - <code>put(key,value);</code> </p>
<p>값삭제 - <code>remove(key);</code> </p>
<p>모든값 제거 - <code>clear();</code></p>
<p>값출력 - 그냥 <code>println</code>하게되면 {} 로 묶여 Map전체 key값, value가 출력됨.
따라서 특정 key값의 value를 가져오고 싶다면 get(key)를 사용하면됨.</p>
<p>key값만 필요한 경우 - <code>keySet();</code></p>
<pre><code class="language-java">for(String key : result.keySet()){

}</code></pre>
]]></description>
        </item>
        <item>
            <title><![CDATA[[스프링]@Value]]></title>
            <link>https://velog.io/@y_w/%EC%8A%A4%ED%94%84%EB%A7%81Value</link>
            <guid>https://velog.io/@y_w/%EC%8A%A4%ED%94%84%EB%A7%81Value</guid>
            <pubDate>Tue, 21 May 2024 00:23:38 GMT</pubDate>
            <description><![CDATA[<p><code>@Value</code> 어노테이션</p>
<p><code>properties</code> 파일에 세팅한 내용을 Spring 변수에 주입하는 역할을 한다.</p>
<pre><code class="language-java">@Value(&quot;${...}&quot;)
private String ...;</code></pre>
<p><code>private</code> 개인적인 것이라 외부에서 사용될 수 없도록 합니다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[스프링]@Autowried]]></title>
            <link>https://velog.io/@y_w/%EC%8A%A4%ED%94%84%EB%A7%81Autowried</link>
            <guid>https://velog.io/@y_w/%EC%8A%A4%ED%94%84%EB%A7%81Autowried</guid>
            <pubDate>Tue, 21 May 2024 00:11:39 GMT</pubDate>
            <description><![CDATA[<p><code>DI (Dependency Injection)</code>
스프링에서 제공하는 의존 관계 주입 기능을 말한다. 
필요할 때마다 객체를 생성해서 사용하는 것이아니고 미리 생성 후 필요한 부분에 주입하여 사용할 수 있다.
이렇게 사용하면 객체간의 결합을 낮추고, 유지보수의 용이함을 가져온다. </p>
<pre><code class="language-java">@Autowried
private TestDAO testDAO;</code></pre>
<p>세가지가 있다.</p>
<p>1.필드 주입 - 주로 사용.</p>
<ul>
<li>1.권장되지 않는 방법이라고한다. 이유는 외부에서 접근이 불가능하다. 테스트 시 객체의 수정이 불가능 하기 떄문에 지양한다.</li>
<li>2.순환 참조를 하게 되는 문제가 발생한다.</li>
</ul>
<p>2.수정자 주입 - </p>
<ul>
<li>수정자를 통해 의존성을 주입 - 수정 가능성이 있는 의존관계에 사용</li>
</ul>
<ol start="3">
<li>생성자 주입</li>
</ol>
]]></description>
        </item>
        <item>
            <title><![CDATA[[자바]특수문자출력]]></title>
            <link>https://velog.io/@y_w/%EC%9E%90%EB%B0%94%ED%8A%B9%EC%88%98%EB%AC%B8%EC%9E%90</link>
            <guid>https://velog.io/@y_w/%EC%9E%90%EB%B0%94%ED%8A%B9%EC%88%98%EB%AC%B8%EC%9E%90</guid>
            <pubDate>Mon, 20 May 2024 07:23:27 GMT</pubDate>
            <description><![CDATA[<p>java 특수문자 출력</p>
<pre><code class="language-java">        System.out.println(&quot;!@#$%^&amp;*(\\&#39;\&quot;&lt;&gt;?:;&quot;);</code></pre>
<p><code>\와 &quot; 이것 앞에는 \ 를 붙혀줘야 함.</code></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[자바]toCharArray / 대소문자 변환]]></title>
            <link>https://velog.io/@y_w/%EC%9E%90%EB%B0%94Scanner-80893xoa</link>
            <guid>https://velog.io/@y_w/%EC%9E%90%EB%B0%94Scanner-80893xoa</guid>
            <pubDate>Mon, 20 May 2024 07:10:31 GMT</pubDate>
            <description><![CDATA[<pre><code class="language-java">import java.util.*;

public class Solution {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String a = sc.next();
        String answer = &quot;&quot;;


        for(Character c : a.toCharArray()){
            if(Character.isUpperCase(c)){

                answer += Character.toLowerCase(c);
            }
            else if(Character.isLowerCase(c)){

                answer += Character.toUpperCase(c);
            }
        } 
        System.out.println(answer);
    }
}</code></pre>
<p><code>toCharArray()</code> 메서드
문자열 (String)을 Char형 배열로 바꿔준다.
String.toCharArray();</p>
<p>개선된 for문</p>
<pre><code class="language-java">for(자료형 변수명 : 배열명){
}

예시
String[] arr = {&quot;1&quot;, &quot;2&quot;}
for(String s : arr) {
    System.our.println(s);
}</code></pre>
<p>결과 
1
2</p>
<p>java에서 배열의 길이를 구하기 위해서는 <code>Length</code> 속성을 사용.</p>
<p><code>isUpperCase()</code> 함수는 입력 받은 인자가 대문자인지 여부 판단 하여 true, false 리턴.
<code>isLowerCase()</code> 함수는 입력 받은 인자가 소문자인지 여부 판단 하여 true, false 리턴.</p>
<p><code>toUpperCase()</code> 함수는 대문자로 변경하는 함수.
<code>toLowerCase()</code> 함수는 소문자로 변경하는 함수.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[자바]for문/ repeat / StringBuilder]]></title>
            <link>https://velog.io/@y_w/%EC%9E%90%EB%B0%94Scanner-odafblgv</link>
            <guid>https://velog.io/@y_w/%EC%9E%90%EB%B0%94Scanner-odafblgv</guid>
            <pubDate>Mon, 20 May 2024 06:39:32 GMT</pubDate>
            <description><![CDATA[<p>문자열을 n수만큼 그대로 출력하기</p>
<p>첫번째 방법 <code>for</code>문</p>
<pre><code class="language-java">import java.util.Scanner;

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

        Scanner sc = new Scanner(System.in);
        String str = sc.next();
        int n = sc.nextInt();
        String answer = &quot;&quot;;

        for (int i = 1; i &lt;= n; i++) {
            answer += str;
        }

        System.out.println(answer);

    }
}</code></pre>
<p>두번째 방법<code>repeat()</code></p>
<pre><code class="language-java">repeat() 문자열 반복 메서드
System.out.println(str.repert(n));</code></pre>
<p>세번째 방법 <code>StringBuilder()</code></p>
<pre><code class="language-java">Scanner sc = new Scanner(System.in);
String str = sc.next();
int n = sc.nextInt();

StringBuilder sb = new StringBuilder();
for(int i = 0; i &lt; n ; i++ ) {
    sb.append(str);
}
String s = sb.toString();
System.out.println(s);
</code></pre>
<p>출력 시 <code>toString()</code> 사용.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[자바]System.out.print/ln/f]]></title>
            <link>https://velog.io/@y_w/%EC%9E%90%EB%B0%94Scanner-ncv2atug</link>
            <guid>https://velog.io/@y_w/%EC%9E%90%EB%B0%94Scanner-ncv2atug</guid>
            <pubDate>Mon, 20 May 2024 06:09:11 GMT</pubDate>
            <description><![CDATA[<pre><code class="language-java">public class Test {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int a = sc.nextInt();
        int b = sc.nextInt();

        System.out.println(&quot;a = &quot;+a +&quot;\n&quot; +&quot;b = &quot;+b);
        sc.close;
    }
}</code></pre>
<ul>
<li>\n 줄바꿈
<code>System.out.print</code></li>
<li>기본 출력문
<code>System.out.println</code></li>
<li>줄바꿈 출력문
<code>System.out.printf</code></li>
<li>서식 출력문</li>
<li>%d 10진수 정수 출력 / %f 실수 출력 / %s 문자열 출력/ %c 문자 출력</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[자바]Scanner]]></title>
            <link>https://velog.io/@y_w/%EC%9E%90%EB%B0%94Scanner</link>
            <guid>https://velog.io/@y_w/%EC%9E%90%EB%B0%94Scanner</guid>
            <pubDate>Mon, 20 May 2024 05:53:02 GMT</pubDate>
            <description><![CDATA[<p>java 기본 입력문 <code>Scanner</code></p>
<pre><code class="language-java">public class Test {
    public static void main(String[] args) {

        Scanner sc = new Scanner(System.in);
        String str = sc.next();
        System.out.println(str);

        sc.close;
}</code></pre>
<p>콘솔에서 입력 값을 받을 때 가장 많이 사용하는 클래스는 Scanner클래스이다.
util 패키지에 포함되어있음. import 해줘야 함.</p>
<ul>
<li>import java.util.Scanner;
기본적인 데이터 타입을 받을 수 있다.</li>
</ul>
<p>Scanner 객체 생성 new는 새로운 객체를 heap메모리에 할당하겠다는 의미, System.in 은 화면에서 입력을 받겠다는 의미이다.</p>
<ul>
<li>Scanner sc =new Scanner(System.in);</li>
<li>String str = sc.next();</li>
<li>Scanner 객체를 사용하여 입력값을 받는다. </li>
</ul>
<p>Scanner 클래서 메서드</p>
<ul>
<li>next(); String을 읽음 토큰을 기준으로 읽음</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[오라클]TO_DATE(YYYY-MM-DD HH24:MI:SS)]]></title>
            <link>https://velog.io/@y_w/TODATEYYYY-MM-DD-HH24MISS</link>
            <guid>https://velog.io/@y_w/TODATEYYYY-MM-DD-HH24MISS</guid>
            <pubDate>Mon, 13 May 2024 07:31:54 GMT</pubDate>
            <description><![CDATA[<p><code>TO_DATE(YYYY-MM-DD HH24:MI:SS)</code> 이여야하는데
<code>TO_DATE(YYYY-MM-DD HH:MI:SS)</code> 하니깐 </p>
<ul>
<li>15:30:25 가 &gt; 03:30:25 나옴.</li>
<li>24를 꼭 붙혀주자.</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[스프링]@PostConstruct]]></title>
            <link>https://velog.io/@y_w/PostConstruct-rbr99167</link>
            <guid>https://velog.io/@y_w/PostConstruct-rbr99167</guid>
            <pubDate>Wed, 08 May 2024 01:58:58 GMT</pubDate>
            <description><![CDATA[<p><code>@PostConstruct</code>란</p>
<ul>
<li><p>의존성 주입이 이루어진 후 초기화를 수행하는 메서드이다. <code>@PostConstruct</code>가 붙은 메서드는
클래스가 <code>service</code>를 수행하기 전에 발생한다. 이 메서드는 다른 리소스에서 호출되지 않는다 해도 수행된다.</p>
</li>
<li><p>사용이유: 생성자가 호출되었을 때 bean은 초기화 전이다.(DI가 이루어 지기 전)<code>@PostConstruct</code>를 사용하면
bean이 초기화 됨과 동시에 의존성을 확인할 수 있다.
bean lifeCycle에서 오직 한 번만 수행된다.(여러 번 초기화 방지)</p>
</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[오류]]]></title>
            <link>https://velog.io/@y_w/20240507-%EC%98%A4%EB%A5%98</link>
            <guid>https://velog.io/@y_w/20240507-%EC%98%A4%EB%A5%98</guid>
            <pubDate>Tue, 07 May 2024 07:43:08 GMT</pubDate>
            <description><![CDATA[<p>svn 에러</p>
<p>Some of selected resources were not committed.</p>
<ul>
<li>Team - &gt; synchronize with Repository -&gt; 오버라이드 업데이트 후 -&gt; 다시 커밋.</li>
<li>이거 말고는 충돌날것 (커밋해야할것) 백업 후 다시 svn 받고서 덮어씌우기.</li>
</ul>
<p>ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
xml 검색 조건 에러</p>
<p>input type=&quot;text&quot; id=&quot;cours_cd&quot; name=&quot;cours_cd&quot; title=&quot;코스&quot;</p>
<ul>
<li>name 명이 cours_cd 로 안되어있어서 </li>
<li>xml에서 #{cours_cd} 먹지 않았음.
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[피드백]자바]]></title>
            <link>https://velog.io/@y_w/%EC%9E%90%EB%B0%94-zip</link>
            <guid>https://velog.io/@y_w/%EC%9E%90%EB%B0%94-zip</guid>
            <pubDate>Mon, 29 Apr 2024 05:22:21 GMT</pubDate>
            <description><![CDATA[<p>1.syso 대신에 LOGGER.info 찍어라</p>
<p>2.JAVA 에서 어제날짜 해서 하지말고 왠만하면 디비쿼리에서 작업.</p>
<p>3.properties 고정된 key값이나 이런것들 사용 Local 로컬, dev 개발, prd 운영</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[피드백]오라클]]></title>
            <link>https://velog.io/@y_w/%ED%94%BC%EB%93%9C%EB%B0%B1-zip</link>
            <guid>https://velog.io/@y_w/%ED%94%BC%EB%93%9C%EB%B0%B1-zip</guid>
            <pubDate>Mon, 29 Apr 2024 05:19:27 GMT</pubDate>
            <description><![CDATA[<ul>
<li>쿼리를 짤때 select 같은 경우 쭐이고 쭐이고 쭐여서 마지막 쿼리에서 날짜형식변환 하는식으로. 검색조건일때는 어쩔수 없다. </li>
<li>select 검색조건 PK부터 타게끔 인덱스.</li>
<li>메인이 되는 테이블의 WHERE 이나 AND 조건은 마지막에.</li>
<li>DISTINCT 보다는 GROUP BY 사용.</li>
<li>ORDER BY 정렬 조건 명확하게.</li>
<li>스칼라 서브쿼리는 웬만해서 사용 안하는게 좋다.</li>
<li>JOIN ON 조건에는 사용하고자 하는 테이블 먼저 ON조건을 걸어라.</li>
<li>GROUP BY 넣을때 생각하고 그룹바이 하기.</li>
<li>인덱스 태우는거 실행계획 제대로 보기.</li>
<li>인덱스 순위 PK, 유니크, index 순으로 빠르다.</li>
<li>where 조건에 =, is not null, is null 정도 탐.</li>
<li>FUNCTION:하나의 것만 딱 가져올때 공통적으로 사용
PROCEDURE: 인서트 등등 로직을 쭉 시킬때
프로시저: 디버깅 어려움.</li>
<li>ORACLE에서 WHERE조건에 변형 안하도록. WHERE 조건 = 이후 에 수정. 이유는 인덱스가 타지 않는다. (WHERE 조건) 조건에 변형을 주면 인덱스 타지않음.</li>
<li>CASE WHEN 조건 줄때 생각하고 그리고 ELSE 써주기.</li>
<li>치환은 REPLACE 보다는  -&gt; DECODE로.</li>
</ul>
]]></description>
        </item>
    </channel>
</rss>