{"componentChunkName":"component---src-templates-blog-post-js","path":"/ruby/2016-07-13-study-for-ruby/","result":{"data":{"site":{"siteMetadata":{"title":"Seungdols Company","author":"[Seungdols]","siteUrl":"https://seungdols.dev","comment":{"disqusShortName":"","utterances":"seungdols/seungdols.dev"},"sponsor":{"buyMeACoffeeId":"seungdols"}}},"markdownRemark":{"id":"9b95d26a-fd51-5543-a9e9-173fbdce2a4f","excerpt":"Ruby를 공부해보자 Ruby 기초 Ruby언어는 객체지향을 완벽하게 지원하는 언어이자 을 지원하는 언어이다. 그리고 동적타이핑을 사용하며, 루비의 자료형 검사는 실행시간에 수행된다는 특징을 가진다. 어떤 코드를 실행하기 전까지는 형 검사를 수행하지 않는다. 변수 루비는 인터프리터 언어이기에 ‘그냥’ 할당하면 된다. Type은 알아서 매겨준다. 출력 따옴표의 경우 문자열 그대로 의미하지만, 따옴표의 경우 문자열을 해석한다. .rb 파일 실행 아래처럼  물론 확장자는 여야 ruby…","html":"<h3 id=\"ruby를-공부해보자\" style=\"position:relative;\"><a href=\"#ruby%EB%A5%BC-%EA%B3%B5%EB%B6%80%ED%95%B4%EB%B3%B4%EC%9E%90\" aria-label=\"ruby를 공부해보자 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>Ruby를 공부해보자</h3>\n<p>Ruby 기초</p>\n<p>Ruby언어는 객체지향을 완벽하게 지원하는 언어이자 <code class=\"language-text\">Meta Programming</code>을 지원하는 언어이다. 그리고 동적타이핑을 사용하며, 루비의 자료형 검사는 <strong>실행시간</strong>에 수행된다는 특징을 가진다. 어떤 코드를 실행하기 전까지는 <strong>형 검사</strong>를 수행하지 않는다.</p>\n<h4 id=\"변수\" style=\"position:relative;\"><a href=\"#%EB%B3%80%EC%88%98\" aria-label=\"변수 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>변수</h4>\n<div class=\"gatsby-highlight\" data-language=\"ruby\"><pre class=\"language-ruby\"><code class=\"language-ruby\">x<span class=\"token operator\">=</span><span class=\"token number\">4</span>\np <span class=\"token boolean\">false</span><span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span>\n<span class=\"token comment\">#ruby에서는 거의 대부분이 객체로 처리됨</span>\nputs <span class=\"token string\">'This is Ruby'</span> <span class=\"token keyword\">unless</span> x <span class=\"token operator\">==</span> <span class=\"token number\">4</span>\nputs <span class=\"token string\">'This is Ruby'</span> <span class=\"token keyword\">if</span> x <span class=\"token operator\">==</span> <span class=\"token number\">4</span></code></pre></div>\n<p>루비는 <em>인터프리터 언어</em>이기에 ‘그냥’ 할당하면 된다. Type은 알아서 매겨준다.</p>\n<h4 id=\"출력\" style=\"position:relative;\"><a href=\"#%EC%B6%9C%EB%A0%A5\" aria-label=\"출력 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>출력</h4>\n<div class=\"gatsby-highlight\" data-language=\"ruby\"><pre class=\"language-ruby\"><code class=\"language-ruby\">puts <span class=\"token string\">'hell, world'</span>\nlanguage<span class=\"token operator\">=</span> <span class=\"token string\">'ruby'</span>\nputs <span class=\"token string\">\"hello, <span class=\"token interpolation\"><span class=\"token delimiter tag\">#{</span>language<span class=\"token delimiter tag\">}</span></span>\"</span></code></pre></div>\n<p><code class=\"language-text\">'</code>따옴표의 경우 문자열 그대로 의미하지만, <code class=\"language-text\">\"</code>따옴표의 경우 문자열을 해석한다.</p>\n<h4 id=\"rb-파일-실행\" style=\"position:relative;\"><a href=\"#rb-%ED%8C%8C%EC%9D%BC-%EC%8B%A4%ED%96%89\" aria-label=\"rb 파일 실행 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>.rb 파일 실행</h4>\n<p>아래처럼 <code class=\"language-text\">ruby [실행 파일 명]</code> 물론 확장자는 <code class=\"language-text\">.rb</code>여야 <strong>ruby</strong>가 인식한다.</p>\n<div class=\"gatsby-highlight\" data-language=\"bash\"><pre class=\"language-bash\"><code class=\"language-bash\">$ ruby duck_Typing.rb</code></pre></div>\n<h4 id=\"함수-정의\" style=\"position:relative;\"><a href=\"#%ED%95%A8%EC%88%98-%EC%A0%95%EC%9D%98\" aria-label=\"함수 정의 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>함수 정의</h4>\n<p>모든 함수는 어떤 값을 리턴하게 되는데, 리턴 값을 명시하지 않으면, 함수 안에 존재하는 <strong>마지막 표현</strong>이 나타내는 값을 리턴한다.(자동으로…)</p>\n<div class=\"gatsby-highlight\" data-language=\"ruby\"><pre class=\"language-ruby\"><code class=\"language-ruby\"><span class=\"token keyword\">def</span> <span class=\"token method-definition\"><span class=\"token function\">tell_the_truth</span></span>\n  puts <span class=\"token string\">'true'</span>\n<span class=\"token keyword\">end</span></code></pre></div>\n<h4 id=\"배열\" style=\"position:relative;\"><a href=\"#%EB%B0%B0%EC%97%B4\" aria-label=\"배열 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>배열</h4>\n<p>배열은 다른 언어와 비슷하고, <code class=\"language-text\">[]</code> 를 이용해 생성하고, <code class=\"language-text\">-1</code>과 같은 첨자도 사용 할 수 있다.</p>\n<div class=\"gatsby-highlight\" data-language=\"ruby\"><pre class=\"language-ruby\"><code class=\"language-ruby\">animals<span class=\"token operator\">=</span> <span class=\"token punctuation\">[</span><span class=\"token string\">'lions'</span><span class=\"token punctuation\">,</span> <span class=\"token string\">'tigers'</span><span class=\"token punctuation\">,</span> <span class=\"token string\">'bears'</span><span class=\"token punctuation\">]</span>\nputs animals\nputs animals<span class=\"token punctuation\">[</span><span class=\"token number\">0</span><span class=\"token punctuation\">]</span>\nputs animals<span class=\"token punctuation\">[</span><span class=\"token operator\">-</span><span class=\"token number\">1</span><span class=\"token punctuation\">]</span>\nputs animals<span class=\"token punctuation\">[</span><span class=\"token number\">0.</span><span class=\"token number\">.1</span><span class=\"token punctuation\">]</span>\nputs <span class=\"token punctuation\">(</span><span class=\"token number\">0.</span><span class=\"token number\">.1</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span>\n<span class=\"token comment\">#'[]'는 array 클래스의 메소드 이름이다.</span>\na <span class=\"token operator\">=</span> <span class=\"token punctuation\">[</span><span class=\"token punctuation\">[</span><span class=\"token number\">1</span><span class=\"token punctuation\">,</span><span class=\"token number\">2</span><span class=\"token punctuation\">,</span><span class=\"token number\">3</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">,</span><span class=\"token punctuation\">[</span><span class=\"token string\">'a'</span><span class=\"token punctuation\">,</span><span class=\"token string\">'b'</span><span class=\"token punctuation\">,</span><span class=\"token string\">'c'</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">,</span><span class=\"token punctuation\">[</span><span class=\"token string\">'ser'</span><span class=\"token punctuation\">,</span><span class=\"token string\">'ss'</span><span class=\"token punctuation\">,</span><span class=\"token number\">10</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">]</span>\nputs a<span class=\"token punctuation\">[</span><span class=\"token number\">0</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">[</span><span class=\"token number\">0</span><span class=\"token punctuation\">]</span>\nputs a<span class=\"token punctuation\">.</span>push<span class=\"token punctuation\">(</span><span class=\"token number\">1</span><span class=\"token punctuation\">)</span>\nputs a<span class=\"token punctuation\">.</span>pop</code></pre></div>\n<h4 id=\"hash\" style=\"position:relative;\"><a href=\"#hash\" aria-label=\"hash 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>Hash</h4>\n<p>쉽게 말해 <code class=\"language-text\">연관 배열</code>이라고 말 할 수 있는데, 배열은 정수만 <code class=\"language-text\">인덱스</code>로 사용 되지만, 해쉬의 경우에는 Key-Value 쌍이기에 <code class=\"language-text\">Key</code>를 <em>사용자가 정의</em> 할 수 있다.</p>\n<div class=\"gatsby-highlight\" data-language=\"ruby\"><pre class=\"language-ruby\"><code class=\"language-ruby\"><span class=\"token comment\">#hash is key - value pair</span>\nnumbers <span class=\"token operator\">=</span> <span class=\"token punctuation\">{</span><span class=\"token number\">1</span> <span class=\"token operator\">=</span><span class=\"token operator\">></span><span class=\"token string\">'one'</span><span class=\"token punctuation\">,</span><span class=\"token number\">2</span> <span class=\"token operator\">=</span><span class=\"token operator\">></span><span class=\"token string\">'two'</span><span class=\"token punctuation\">}</span>\nputs numbers<span class=\"token punctuation\">[</span><span class=\"token number\">1</span><span class=\"token punctuation\">]</span>\ntest <span class=\"token operator\">=</span> <span class=\"token punctuation\">{</span><span class=\"token symbol\">:array</span> <span class=\"token operator\">=</span><span class=\"token operator\">></span><span class=\"token punctuation\">[</span><span class=\"token number\">1</span><span class=\"token punctuation\">,</span><span class=\"token number\">2</span><span class=\"token punctuation\">,</span><span class=\"token number\">3</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">,</span> <span class=\"token symbol\">:string</span> <span class=\"token operator\">=</span><span class=\"token operator\">></span> <span class=\"token string\">'strinng'</span><span class=\"token punctuation\">}</span>\nputs test<span class=\"token punctuation\">[</span><span class=\"token symbol\">:array</span><span class=\"token punctuation\">]</span>\n<span class=\"token comment\"># :symbol 콜론 뒤에 따라오는 식별자를 의미함.</span>\n<span class=\"token comment\">#사물이나 생각에 이름을 붙일때 유용하다.</span>\n<span class=\"token keyword\">def</span> <span class=\"token method-definition\"><span class=\"token function\">tell_the_truth</span></span><span class=\"token punctuation\">(</span>options<span class=\"token operator\">=</span><span class=\"token punctuation\">{</span><span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span>\n  <span class=\"token keyword\">if</span> options<span class=\"token punctuation\">[</span><span class=\"token symbol\">:profession</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">==</span> <span class=\"token symbol\">:lawyer</span>\n    <span class=\"token string\">'it could be believed that this is almost certainly not false'</span>\n  <span class=\"token keyword\">else</span>\n    <span class=\"token boolean\">true</span>\n  <span class=\"token keyword\">end</span>\n<span class=\"token keyword\">end</span>\ntell_the_truth\ntell_the_truth<span class=\"token punctuation\">(</span><span class=\"token symbol\">:profession</span> <span class=\"token operator\">=</span><span class=\"token operator\">></span> <span class=\"token symbol\">:lawyer</span><span class=\"token punctuation\">)</span></code></pre></div>\n<h4 id=\"코드-블록code-block\" style=\"position:relative;\"><a href=\"#%EC%BD%94%EB%93%9C-%EB%B8%94%EB%A1%9Dcode-block\" aria-label=\"코드 블록code block 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>코드 블록(Code Block)</h4>\n<p>루비에서 <strong>가장 강력한 기능중에 하나</strong>인데, 이름이 없는 함수라고 할 수 있다. 그리고 이 것은 어떤 함수나 메서드에 <strong>매개변수</strong>로 전달 할 수 있다. 중괄호 사이에 있는 부분은 ‘코드 블록’이라고 한다.</p>\n<div class=\"gatsby-highlight\" data-language=\"ruby\"><pre class=\"language-ruby\"><code class=\"language-ruby\"><span class=\"token number\">3.</span>times <span class=\"token punctuation\">{</span>puts <span class=\"token string\">'times times times'</span><span class=\"token punctuation\">}</span>\n<span class=\"token comment\"># {} 중괄호로 표시된 것이 바로 코드 블록이다.</span>\n<span class=\"token comment\"># 코드 블록은 이름이 없는 함수이며, 이 것을 함수나 메서드에 매개변수로 전달 할 수 있다.</span>\n\n\n<span class=\"token comment\"># 결과</span>\n\n\ntimes times times\ntimes times times\ntimes times times</code></pre></div>\n<p><code class=\"language-text\">{}</code> 혹은 <code class=\"language-text\">do/end</code>를 이용해서 코드 블록을 만들 수 있다.</p>\n<div class=\"gatsby-highlight\" data-language=\"ruby\"><pre class=\"language-ruby\"><code class=\"language-ruby\">animals <span class=\"token operator\">=</span> <span class=\"token punctuation\">[</span><span class=\"token string\">'lions and '</span><span class=\"token punctuation\">,</span> <span class=\"token string\">'tigers and'</span><span class=\"token punctuation\">,</span> <span class=\"token string\">'bears'</span> <span class=\"token punctuation\">,</span> <span class=\"token string\">'oh my'</span><span class=\"token punctuation\">]</span>\nanimals<span class=\"token punctuation\">.</span><span class=\"token keyword\">each</span> <span class=\"token punctuation\">{</span><span class=\"token operator\">|</span>a<span class=\"token operator\">|</span> puts a<span class=\"token punctuation\">}</span>\n\n\n<span class=\"token comment\"># 결과</span>\n\n\nlions <span class=\"token keyword\">and</span>\ntigers <span class=\"token keyword\">and</span>\nbears\noh my</code></pre></div>\n<p>코드 블록은 하나 혹은 그 이상의 매개변수를 받아들일 수 있다. <code class=\"language-text\">number.times</code>는 Fixnum에 정의된 메서드로 <em>무언가 주어진 내용을 number의 횟수만큼</em> 반복한다. 이 것을 실제로 구현해보자면 아래와 같다.</p>\n<div class=\"gatsby-highlight\" data-language=\"ruby\"><pre class=\"language-ruby\"><code class=\"language-ruby\"><span class=\"token keyword\">class</span> <span class=\"token class-name\">Fixnum</span>\n  <span class=\"token keyword\">def</span> <span class=\"token method-definition\"><span class=\"token function\">my_times</span></span>\n    i <span class=\"token operator\">=</span> <span class=\"token keyword\">self</span>\n    <span class=\"token keyword\">while</span> i<span class=\"token operator\">></span> <span class=\"token number\">0</span>\n      i <span class=\"token operator\">=</span> i <span class=\"token operator\">-</span> <span class=\"token number\">1</span>\n      <span class=\"token keyword\">yield</span>\n    <span class=\"token keyword\">end</span>\n  <span class=\"token keyword\">end</span>\n<span class=\"token keyword\">end</span>\n<span class=\"token number\">3.</span>my_times <span class=\"token punctuation\">{</span>puts <span class=\"token string\">'define times'</span><span class=\"token punctuation\">}</span></code></pre></div>\n<h4 id=\"믹스인-mixin\" style=\"position:relative;\"><a href=\"#%EB%AF%B9%EC%8A%A4%EC%9D%B8-mixin\" aria-label=\"믹스인 mixin 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>믹스인 Mixin</h4>\n<p>쉽게 설명하자면, 단일 상속만 가능한 부분에서는 구현 하기 어려운 점이 Class에서 <code class=\"language-text\">각 장점만 가져오는 방법</code>은 불가능하다. 즉, Java언어에서는 두 클래스의 장점을 가져오는 것은 불가능한데, Ruby에서는 Mixin이라는 기법으로 활용하면 가능하다. Ruby에서는 Module이라는 것이 있기 때문에 가능한 것인데, 이 기능을 예시로 살펴보자.</p>\n<div class=\"gatsby-highlight\" data-language=\"ruby\"><pre class=\"language-ruby\"><code class=\"language-ruby\"><span class=\"token keyword\">module</span> <span class=\"token constant\">ToFile</span>\n  <span class=\"token keyword\">def</span> <span class=\"token method-definition\"><span class=\"token function\">filename</span></span>\n    <span class=\"token string\">\"object_<span class=\"token interpolation\"><span class=\"token delimiter tag\">#{</span><span class=\"token keyword\">self</span><span class=\"token punctuation\">.</span>object_id<span class=\"token delimiter tag\">}</span></span>.txt\"</span>\n  <span class=\"token keyword\">end</span>\n  <span class=\"token keyword\">def</span> <span class=\"token method-definition\"><span class=\"token function\">to_f</span></span>\n    <span class=\"token builtin\">File</span><span class=\"token punctuation\">.</span>open<span class=\"token punctuation\">(</span>filename<span class=\"token punctuation\">,</span> <span class=\"token string\">'w'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">{</span><span class=\"token operator\">|</span>f<span class=\"token operator\">|</span> f<span class=\"token punctuation\">.</span>write<span class=\"token punctuation\">(</span>to_s<span class=\"token punctuation\">)</span><span class=\"token punctuation\">}</span>\n  <span class=\"token keyword\">end</span>\n<span class=\"token keyword\">end</span>\n<span class=\"token keyword\">class</span> <span class=\"token class-name\">Person</span>\n  <span class=\"token keyword\">include</span> <span class=\"token constant\">ToFile</span>\n  attr_accessor <span class=\"token symbol\">:name</span>\n\n  <span class=\"token keyword\">def</span> <span class=\"token method-definition\"><span class=\"token function\">initialize</span></span><span class=\"token punctuation\">(</span>name<span class=\"token punctuation\">)</span>\n    <span class=\"token variable\">@name</span> <span class=\"token operator\">=</span> name\n  <span class=\"token keyword\">end</span>\n  <span class=\"token keyword\">def</span> <span class=\"token method-definition\"><span class=\"token function\">to_s</span></span>\n    name\n  <span class=\"token keyword\">end</span>\n<span class=\"token keyword\">end</span>\n\nputs <span class=\"token constant\">Person</span><span class=\"token punctuation\">.</span><span class=\"token keyword\">new</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"Seungdols\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span>to_f</code></pre></div>\n<p>코드상에서 파일에 어떤 내용을 저장하는 부분을 Mixin방식으로 전달하는 것을 볼 수 있다. 즉, 믹스인 기법을 지원하는 언어라면 <strong>코드의 중복성을 훨씬 더 많이 제거하도록 가능케하고, 모듈을 이용하여 레고 블록을 조립하듯이 프로그래밍</strong>을 할 수 있을 것이다.</p>","frontmatter":{"title":"study for ruby","date":"July 13, 2016"}}},"pageContext":{"slug":"/ruby/2016-07-13-study-for-ruby/","previous":{"fields":{"slug":"/scala/2016-06-15-install-scala-on-ubuntu14-04/"},"frontmatter":{"title":"Install Scala on Ubuntu14.04"}},"next":{"fields":{"slug":"/java/2016-07-15-top-10-mistakes-java-developers-make/"},"frontmatter":{"title":"Top 10 Mistakes Java Developers Make"}}}}}