<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>꾸준함의 미학</title>
    <link>https://insight3670.tistory.com/</link>
    <description>무언가를 성취하는 데 마법이 필요한 것은 아니다.
필요한 것은 노력과 선택과 꾸준함일 뿐이다.</description>
    <language>ko</language>
    <pubDate>Thu, 28 May 2026 05:34:02 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>민톨밤톨</managingEditor>
    <image>
      <title>꾸준함의 미학</title>
      <url>https://tistory1.daumcdn.net/tistory/7250200/attach/1b519f919fdd40afb9395d34b603bfac</url>
      <link>https://insight3670.tistory.com</link>
    </image>
    <item>
      <title>2025.02.15</title>
      <link>https://insight3670.tistory.com/entry/20250215</link>
      <description>&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;일본출장도 4박 5일로도 갔다오고 (물론 그 속에도 정말 많은 일이 있었다ㅎㅎ)&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;혼돈의 나날이였다&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;그러면서 느낀 거는.. si는 나랑 맞지 않는 거 같다..&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;&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;나도 좀 즐기면서 삶을 살아갈 생각이다&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;내일이면 만 31살인 나.. 화이팅이다&lt;/p&gt;</description>
      <category>생각정리</category>
      <author>민톨밤톨</author>
      <guid isPermaLink="true">https://insight3670.tistory.com/63</guid>
      <comments>https://insight3670.tistory.com/entry/20250215#entry63comment</comments>
      <pubDate>Sat, 15 Feb 2025 20:43:50 +0900</pubDate>
    </item>
    <item>
      <title>Flushing buffered sreams</title>
      <link>https://insight3670.tistory.com/entry/Flushing-buffered-sreams</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;Buffered streams typically only call the native ouput API once the buffer is full.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;* &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;native&lt;span&gt; 기본 typically 일반적으로&lt;/span&gt;&lt;/span&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;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;Sometimes it is appropriate to write from a buffer befor it is full.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;this is called flushing.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;* &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;appropriate&lt;span&gt;&amp;nbsp; 적절한&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&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;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;This can be done by calling the flush method which is included in all alll output steam classes:&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1731442393731&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;outStream.flush();&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;However, it is not always necessary to manually flush a buffer. For example, the close method automatically flushes the buffer before closing the stream.&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;span style=&quot;color: #333333; text-align: start;&quot;&gt;manually&lt;span&gt; 수동으로 &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;necessary&lt;span&gt; 필요한&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;</description>
      <category>Java - English ver</category>
      <category>오블완</category>
      <category>티스토리챌린지</category>
      <author>민톨밤톨</author>
      <guid isPermaLink="true">https://insight3670.tistory.com/62</guid>
      <comments>https://insight3670.tistory.com/entry/Flushing-buffered-sreams#entry62comment</comments>
      <pubDate>Wed, 13 Nov 2024 05:15:33 +0900</pubDate>
    </item>
    <item>
      <title>Using buffered streams</title>
      <link>https://insight3670.tistory.com/entry/Using-buffered-streams</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;Using unbuffered I/O like FileReader can be inefficient because the read requests are handled directly by the operating system.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;*&lt;span style=&quot;background-color: #f8f9fa; color: #1f1f1f; text-align: left;&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;directly by the operating system&lt;/span&gt; 운영 체제에서 직접, &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;inefficient&lt;span&gt; 비효율적&lt;/span&gt;&lt;/span&gt;&lt;/span&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;span style=&quot;background-color: #f8f9fa;&quot;&gt;Using buffered streams can make a program more efficient. Data is written to or read from a buffer, and the native API is only called when the buffer is full. This reduces the number of necessary expensive operations like disk accecss or network activity.&lt;/span&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;span style=&quot;background-color: #f8f9fa;&quot;&gt;A buffered stream an be created by passing an unbuggered stream object to a buffered stream constructor. For example:&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1731357145136&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;input = new BufferedReader(new FileReader(&quot;in.txt&quot;));

output = new BufferedWriter(new FileWriter(&quot;out.txt&quot;));&lt;/code&gt;&lt;/pre&gt;</description>
      <category>Java - English ver</category>
      <category>오블완</category>
      <category>티스토리챌린지</category>
      <author>민톨밤톨</author>
      <guid isPermaLink="true">https://insight3670.tistory.com/61</guid>
      <comments>https://insight3670.tistory.com/entry/Using-buffered-streams#entry61comment</comments>
      <pubDate>Tue, 12 Nov 2024 05:35:45 +0900</pubDate>
    </item>
    <item>
      <title>Type inference in generic calsses</title>
      <link>https://insight3670.tistory.com/entry/Type-inference-in-generic-calsses</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;Using generic classes in Java can sometimes result in verbose syntax for example :&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;* &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;verbose&lt;span&gt; 수가 많은 inference 추론&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1731275340248&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Map&amp;lt;Integer, List&amp;lt;String&amp;gt;&amp;gt; hashMap = new HashMap&amp;lt;Integer, List&amp;lt;STring&amp;gt;&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;In Java 7+, we can simplify this by using the compiler's ability to infer the type arguments from context.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;This allows us to avoid specifying the same type arguments multiple times.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;The previous example now becomes :&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1731275425697&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Map&amp;lt;Integer, List&amp;lt;String&amp;gt;&amp;gt; hashMap = new HashMap&amp;lt;&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;We now only have to state the type arguments once.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;The compiler will be able to infer from this assignment statement that the type of the new HashMap&amp;lt;&amp;gt;() should be &amp;lt;Integer, List&amp;lt;String&amp;gt;&amp;gt;.&lt;/p&gt;</description>
      <category>Java - English ver</category>
      <category>오블완</category>
      <category>티스토리챌린지</category>
      <author>민톨밤톨</author>
      <guid isPermaLink="true">https://insight3670.tistory.com/60</guid>
      <comments>https://insight3670.tistory.com/entry/Type-inference-in-generic-calsses#entry60comment</comments>
      <pubDate>Mon, 11 Nov 2024 06:51:26 +0900</pubDate>
    </item>
    <item>
      <title>Writing generic classes</title>
      <link>https://insight3670.tistory.com/entry/Writing-generic-classes</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;The following class can accept and return any type of object.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;It cannot, however, accept primitive types (그러나&amp;nbsp;기본&amp;nbsp;유형을&amp;nbsp;허용할&amp;nbsp;수는&amp;nbsp;없습니다.)&lt;/p&gt;
&lt;pre id=&quot;code_1731117255239&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;public class Box {
	private Object object;
    public void set (Object object){
    	this.object = object;
    }
    public Object get(){
    	return object;
    }
}&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;If we want to create a class that can accept and return any type, we need to replace references in our code to Object with a generic type variable T.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1731117506716&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;public class Box&amp;lt;T&amp;gt; {
	private T t;
    public void set (T t){
    	this.t = t;
    }
    public T get(){
    	return t;
    }
}&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;In a generic class,&amp;nbsp; the &amp;lt;&amp;gt; following the class name is the type parameter.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;This is how you would instaniate an object of Box class that can accept and return any type:&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;* following 다음 instaniate 인스턴스화 하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;* This is how you would instaniate&amp;nbsp; 이것이&amp;nbsp;당신이&amp;nbsp;인스턴스화하는&amp;nbsp;방법입니다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;* This is how you would 이것이 당신이 ~ 하는 입니다&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1731117772929&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Box&amp;lt;Integer&amp;gt; box1 = new Box&amp;lt;Integer&amp;gt;();

Box&amp;lt;Integer&amp;gt; box2 = new Box&amp;lt;&amp;gt;();&lt;/code&gt;&lt;/pre&gt;</description>
      <category>Java - English ver</category>
      <category>오블완</category>
      <category>티스토리챌린지</category>
      <author>민톨밤톨</author>
      <guid isPermaLink="true">https://insight3670.tistory.com/59</guid>
      <comments>https://insight3670.tistory.com/entry/Writing-generic-classes#entry59comment</comments>
      <pubDate>Sat, 9 Nov 2024 11:03:02 +0900</pubDate>
    </item>
    <item>
      <title>Using bounded type parameters in generic methods</title>
      <link>https://insight3670.tistory.com/entry/Using-bounded-type-parameters-in-generic-methods</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;Sometimes it may be appropriate to write a generic method, however it will not be possible for it to accept every type while still maintaining all the necessary functionality.&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;To solve this, use bounded type parameters to restrict generic methods from accepting arguments of particular kind.&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;span style=&quot;color: #333333; text-align: start;&quot;&gt;accepting&lt;span&gt; 수락 , &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;particular&lt;span&gt; 특정한 &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;restrict&lt;span&gt;&amp;nbsp; 얽매다&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1731011156922&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;public &amp;lt;T extends Shape&amp;gt;
	void drawAll(List&amp;lt;T&amp;gt; shapes){
    	for (Shape s : shapes){
        	a.draw(this);
        }
    }
}&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;The above method is used to draw a list of shapes. Writing a generic method with an unbounded type parameter would cause problems because lists of other types cannot be drawn in this way.&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;By specifying that &amp;lt;T extends Shape&amp;gt; we guarantee that only Shape objects can be passed to the method.&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;* The above 위 의 &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;specifying&lt;span&gt; 지정, &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;guarantee&lt;span&gt; 보장하다&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;</description>
      <category>Java - English ver</category>
      <category>오블완</category>
      <category>티스토리챌린지</category>
      <author>민톨밤톨</author>
      <guid isPermaLink="true">https://insight3670.tistory.com/58</guid>
      <comments>https://insight3670.tistory.com/entry/Using-bounded-type-parameters-in-generic-methods#entry58comment</comments>
      <pubDate>Fri, 8 Nov 2024 05:29:58 +0900</pubDate>
    </item>
    <item>
      <title>Type Inference in Generic Methods</title>
      <link>https://insight3670.tistory.com/entry/Type-Inference-in-Generic-Methods</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;Type inference is a feature of generic methods which allows you to call them as if they were drdinary methods i.e.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;without specifying the type in between &amp;lt;&amp;gt;. For example:&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;pre id=&quot;code_1730925680347&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;public &amp;lt;E&amp;gt; boolean oneBiggerThanTwo(E one , E two){
	return Util.compare(one, two);
}&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;Then we can call it by:&lt;/p&gt;
&lt;pre id=&quot;code_1730925785138&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;boolean bool1 = &amp;lt;Integer&amp;gt;oneBiggerThanTwo(Integer.valueOf(12), Integer.valueOf(37))&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;Type inference means that there is no need to specify type parameters when calling a function as&amp;nbsp; compiler will do it for you&lt;/p&gt;</description>
      <category>Java - English ver</category>
      <category>오블완</category>
      <author>민톨밤톨</author>
      <guid isPermaLink="true">https://insight3670.tistory.com/57</guid>
      <comments>https://insight3670.tistory.com/entry/Type-Inference-in-Generic-Methods#entry57comment</comments>
      <pubDate>Thu, 7 Nov 2024 05:44:01 +0900</pubDate>
    </item>
    <item>
      <title>Writing generic methods</title>
      <link>https://insight3670.tistory.com/entry/Writing-generic-methods</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;In this example method :&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1730837587248&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;public void printArray(int[] input){
	for(int value : input){
    	System.out.println(&quot;%d&quot;, value);
    }
}&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;Imagine that we also want similar methods that deal with arrys of String, Doubles or other types.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;We could write a new identical methods for each type of array, but that would create a lot of repetitive code.&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;To avoid writing the same method over &amp;amp; over again with different types, we can instead write a generic method like this:&lt;/p&gt;
&lt;pre id=&quot;code_1730837721432&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;public &amp;lt;E&amp;gt; void printArray(E[] input){
	for ( E element : input){
    	System.out.println(&quot;%s&quot;, element);
    }
}&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;Notice that we haver replaced references to a specific type int with E;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;our generic type. this allows the method to accept any type of array.&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;Also notice the &amp;lt;E&amp;gt; before the method's return type (in this case void); this is the method's type parameter, and is necessary for defining a generic method.&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;We can now use this method to print all of our project's arrays&lt;/p&gt;</description>
      <category>Java - English ver</category>
      <author>민톨밤톨</author>
      <guid isPermaLink="true">https://insight3670.tistory.com/56</guid>
      <comments>https://insight3670.tistory.com/entry/Writing-generic-methods#entry56comment</comments>
      <pubDate>Wed, 6 Nov 2024 05:17:13 +0900</pubDate>
    </item>
    <item>
      <title>Writing genenric methods</title>
      <link>https://insight3670.tistory.com/entry/Writing-genenric-methods</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;In this example method:&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1730758312295&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;public void printArray(int[] input){
	for (int value : input){
        System.out.println(&quot;%d&quot;, value);
    }
}&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;Imagine that we also want similar methods that deal with arrays of String, Doubles or other types.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;We could write a new identical method for each type of array, but that would create a lot of repetitive code.&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;span style=&quot;color: #333333; text-align: start;&quot;&gt;repetitive&lt;span&gt; 반복적인 deal 거래&lt;/span&gt;&lt;/span&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;To aboid writing the same method over &amp;amp; over again with different types, we can instead write a generic method like this:&lt;/p&gt;
&lt;pre id=&quot;code_1730758597464&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;public &amp;lt;E&amp;gt; void printArray(E[] input){
	for (E element : input){
    	System.out.println(&quot;%s&quot;, element);
	}
}&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;Notice that we have replaced references to a specific type int with E;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;out generic type. This allows the method to accept any type of array.&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;Also notice the&amp;lt;E&amp;gt; befroe the method's return type (in this case void); this is the method's type parameter, and is necessary for defining a generic method.&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;We can now use this method to print all of our project's arrays.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Java - English ver</category>
      <author>민톨밤톨</author>
      <guid isPermaLink="true">https://insight3670.tistory.com/55</guid>
      <comments>https://insight3670.tistory.com/entry/Writing-genenric-methods#entry55comment</comments>
      <pubDate>Tue, 5 Nov 2024 07:18:52 +0900</pubDate>
    </item>
    <item>
      <title>Wildcards Extras</title>
      <link>https://insight3670.tistory.com/entry/Wildcards-Extras</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;Suppose we have class A and class B which extends A. Then consider:&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1730665407838&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;B b = new B();

// this line works just fine
A a = b;
List&amp;lt;B&amp;gt; listOfB = new ArrayList&amp;lt;&amp;gt;();

// this line results in
// compile-time error
List&amp;lt;A&amp;gt; listOfA = listOfB;&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;The point being that although b is a subtype of a,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;List&amp;lt;B&amp;gt; is not an subtype of List&amp;lt;A&amp;gt;. Instead they are both subtypes of List&amp;lt;?&amp;gt;.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1730665551387&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;List&amp;lt;? extends Integer&amp;gt; int:ist = new ARrayList&amp;lt;&amp;gt;();

// This code will pass
List&amp;lt;?&amp;gt; wildList = intList;

List&amp;lt;? extends Object&amp;gt; objList = intList;
List&amp;lt;? extends Number&amp;gt; numList = intList;&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;lt;?&amp;gt; is the same as &amp;lt;? extends Object&amp;gt; as Object is the top class in Java&lt;/p&gt;</description>
      <category>Java - English ver</category>
      <author>민톨밤톨</author>
      <guid isPermaLink="true">https://insight3670.tistory.com/54</guid>
      <comments>https://insight3670.tistory.com/entry/Wildcards-Extras#entry54comment</comments>
      <pubDate>Mon, 4 Nov 2024 05:26:41 +0900</pubDate>
    </item>
  </channel>
</rss>