{"componentChunkName":"component---src-templates-blog-post-js","path":"/java/2016-05-28-java-obj-equality-and-obj-identity/","result":{"data":{"site":{"siteMetadata":{"title":"Seungdols Company","author":"[Seungdols]","siteUrl":"https://seungdols.dev","comment":{"disqusShortName":"","utterances":"seungdols/seungdols.dev"},"sponsor":{"buyMeACoffeeId":"seungdols"}}},"markdownRemark":{"id":"ae9ad733-ef63-5e58-94f5-34aaaf30d011","excerpt":"Java를 사용하는 신입 개발자가 익혀야 할 것. 바로, Object Equality and Object Identity의 차이를 아는 것이다. 이 것이 왜 중요할까? 바로, 우리가 흔히 사용하기 때문이기도 하고, 가장 중요한 객체 지향의 개념이기 때문이다. 이를 예시로 들자면 자바의 문자열로 예시를 들 수 있다. 위 코드의 출력을 예상해보자. 어떤 출력이 나올까? 정답은 바로, 아래와 같다. 왜 그런지 아는가? Object Identity는 객체의 동일성을 말하며, Object Equality…","html":"<h3 id=\"java를-사용하는-신입-개발자가-익혀야-할-것\" style=\"position:relative;\"><a href=\"#java%EB%A5%BC-%EC%82%AC%EC%9A%A9%ED%95%98%EB%8A%94-%EC%8B%A0%EC%9E%85-%EA%B0%9C%EB%B0%9C%EC%9E%90%EA%B0%80-%EC%9D%B5%ED%98%80%EC%95%BC-%ED%95%A0-%EA%B2%83\" aria-label=\"java를 사용하는 신입 개발자가 익혀야 할 것 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Java를 사용하는 신입 개발자가 익혀야 할 것.</h3>\n<h4 id=\"바로-object-equality-and-object-identity의-차이를-아는-것이다\" style=\"position:relative;\"><a href=\"#%EB%B0%94%EB%A1%9C-object-equality-and-object-identity%EC%9D%98-%EC%B0%A8%EC%9D%B4%EB%A5%BC-%EC%95%84%EB%8A%94-%EA%B2%83%EC%9D%B4%EB%8B%A4\" aria-label=\"바로 object equality and object identity의 차이를 아는 것이다 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>바로, Object Equality and Object Identity의 차이를 아는 것이다.</h4>\n<p>이 것이 왜 중요할까?</p>\n<p>바로, 우리가 흔히 사용하기 때문이기도 하고, 가장 중요한 객체 지향의 개념이기 때문이다.</p>\n<p>이를 예시로 들자면 자바의 문자열로 예시를 들 수 있다.</p>\n<div class=\"gatsby-highlight\" data-language=\"java\"><pre class=\"language-java\"><code class=\"language-java\"><span class=\"token keyword\">public</span> <span class=\"token keyword\">class</span> <span class=\"token class-name\">ObjExe</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">public</span> <span class=\"token keyword\">static</span> <span class=\"token keyword\">void</span> <span class=\"token function\">main</span><span class=\"token punctuation\">(</span><span class=\"token class-name\">String</span><span class=\"token punctuation\">[</span><span class=\"token punctuation\">]</span> args<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n        <span class=\"token class-name\">String</span> str1 <span class=\"token operator\">=</span> <span class=\"token string\">\"str\"</span><span class=\"token punctuation\">;</span>\n        <span class=\"token class-name\">String</span> str2 <span class=\"token operator\">=</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">String</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"str\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n        <span class=\"token class-name\">String</span> str3 <span class=\"token operator\">=</span> str1<span class=\"token punctuation\">;</span>\n\n        <span class=\"token keyword\">if</span><span class=\"token punctuation\">(</span>str1 <span class=\"token operator\">==</span> str3<span class=\"token punctuation\">)</span>\n            <span class=\"token class-name\">System</span><span class=\"token punctuation\">.</span>out<span class=\"token punctuation\">.</span><span class=\"token function\">println</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"1: true\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n        <span class=\"token keyword\">if</span><span class=\"token punctuation\">(</span>str1 <span class=\"token operator\">==</span> str2<span class=\"token punctuation\">)</span>\n            <span class=\"token class-name\">System</span><span class=\"token punctuation\">.</span>out<span class=\"token punctuation\">.</span><span class=\"token function\">println</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"2: true\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n        <span class=\"token keyword\">if</span><span class=\"token punctuation\">(</span>str2 <span class=\"token operator\">==</span> str3<span class=\"token punctuation\">)</span>\n            <span class=\"token class-name\">System</span><span class=\"token punctuation\">.</span>out<span class=\"token punctuation\">.</span><span class=\"token function\">println</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"3: true\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n        <span class=\"token keyword\">if</span><span class=\"token punctuation\">(</span>str1<span class=\"token punctuation\">.</span><span class=\"token function\">equals</span><span class=\"token punctuation\">(</span>str2<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span>\n            <span class=\"token class-name\">System</span><span class=\"token punctuation\">.</span>out<span class=\"token punctuation\">.</span><span class=\"token function\">println</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"4: true\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n        <span class=\"token keyword\">if</span><span class=\"token punctuation\">(</span>str2<span class=\"token punctuation\">.</span><span class=\"token function\">equals</span><span class=\"token punctuation\">(</span>str3<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span>\n            <span class=\"token class-name\">System</span><span class=\"token punctuation\">.</span>out<span class=\"token punctuation\">.</span><span class=\"token function\">println</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"5: true\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n    <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<p>위 코드의 출력을 예상해보자. 어떤 출력이 나올까?</p>\n<p>정답은 바로, 아래와 같다.</p>\n<div class=\"gatsby-highlight\" data-language=\"text\"><pre class=\"language-text\"><code class=\"language-text\">1: true\n4: true\n5: true</code></pre></div>\n<p>왜 그런지 아는가? Object Identity는 객체의 동일성을 말하며, Object Equality는 객체의 동등성을 말한다.</p>\n<p>고로, 동일성은 참조가 같은지?를 말하는 것이고, 동등성은 값이 같은지?를 말한다.</p>\n<p>위 코드에서는 결국, 값은 모두 같다. “str”이란 문자열이란 값은 같다.\n하지만, 동일성에 대해서는 다르다.</p>\n<p>객체 리터럴로 생성한 문자열과 new 연산자를 통해 생성한 문자열 객체는 동일한 객체가 아니다.</p>\n<p>그러기때문에 1,4,5번만 if문의 참이 인정이 된다.</p>\n<p>equals()의 경우 해당 문자열의 값이 같은지를 비교한다.</p>\n<p>==의 경우 해당 객체들이 동일한지를 비교한다.</p>\n<p>이 차이를 계속적으로 학습하고, equals(), hashcode() overriding에 대해서도 공부하는 것이 좋을 것 같다.</p>\n<p>쉽게 결론을 내보도록 하자.</p>\n<ol>\n<li>Object Identity : 두 개의 Obj가 같은 메모리 영역의 객체를 가리킨다.</li>\n<li>Object Equality : 두 개의 Obj를 .equals() 메소르로 비교하였을때, 참 값이 나오는 경우를 말한다.</li>\n</ol>\n<p>모든 내용은 오류를 포함하고 있을 수 있습니다. 항상 태클과 지적 감사합니다.</p>\n<p>조언은 더 나음으로 향하는 길이라 생각합니다.</p>","frontmatter":{"title":"Java-Obj Equality and Obj Identity","date":"May 28, 2016"}}},"pageContext":{"slug":"/java/2016-05-28-java-obj-equality-and-obj-identity/","previous":{"fields":{"slug":"/java/2016-05-07-Top 5 Concurrent Collections/"},"frontmatter":{"title":"Top 5 Concurrent Collections from JDK 5 and 6 Java Programmer Should Know"}},"next":{"fields":{"slug":"/python/2016-06-11-python-guide/"},"frontmatter":{"title":"Python Guide"}}}}}