{"componentChunkName":"component---src-templates-blog-post-js","path":"/language/200524-java-oop/","result":{"data":{"site":{"siteMetadata":{"title":"Junbyeol Blog","author":"Junsung Yoon","siteUrl":"https://junbyeol.github.io","comment":{"disqusShortName":"","utterances":"junbyeol/junbyeol.github.io"},"sponsor":{"buyMeACoffeeId":"junbyeol"}}},"markdownRemark":{"id":"98cc0872-9c9b-531f-9d6e-551ee4904179","excerpt":"이 글은 윤준성의 개발꼬맹이 시절, 혼자 노션에 공부하며 정리해둔 것 중 괜찮은 것을 추려올린 글입니다. \n기술블로그 글 기고 목적으로 작성되지 않아, 가독성이 좋지 않거나 알 수 없는 워딩이 있을 수 있습니다.  특징 객체 지향적이다 플랫폼 독립적이다 보안성이 뛰어나다 Garbage Collector가 자동으로 메모리를 관리해준다 멀티 쓰레드를 지원한다 OOP(Object-Oriented Programming) 역할, 책임, 협력  -오브젝트 Encapsulation, Inheritance…","html":"<blockquote>\n<p>이 글은 윤준성의 개발꼬맹이 시절, 혼자 노션에 공부하며 정리해둔 것 중 괜찮은 것을 추려올린 글입니다.\n기술블로그 글 기고 목적으로 작성되지 않아, 가독성이 좋지 않거나 알 수 없는 워딩이 있을 수 있습니다. </p>\n</blockquote>\n<h1 id=\"특징\" style=\"position:relative;\"><a href=\"#%ED%8A%B9%EC%A7%95\" 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>특징</h1>\n<ol>\n<li>객체 지향적이다</li>\n<li>플랫폼 독립적이다</li>\n<li>보안성이 뛰어나다</li>\n<li>Garbage Collector가 자동으로 메모리를 관리해준다</li>\n<li>멀티 쓰레드를 지원한다</li>\n</ol>\n<h1 id=\"oopobject-oriented-programming\" style=\"position:relative;\"><a href=\"#oopobject-oriented-programming\" aria-label=\"oopobject oriented programming 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>OOP(Object-Oriented Programming)</h1>\n<blockquote>\n<p>역할, 책임, 협력  -오브젝트</p>\n</blockquote>\n<ul>\n<li>\n<p>Encapsulation, Inheritance, Polymorpism</p>\n<p>→ 이 모든 것을 포함한 개념 = Class</p>\n</li>\n</ul>\n<h3 id=\"encapsulation캡슐화\" style=\"position:relative;\"><a href=\"#encapsulation%EC%BA%A1%EC%8A%90%ED%99%94\" aria-label=\"encapsulation캡슐화 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>Encapsulation(캡슐화)</h3>\n<ul>\n<li>객체의 속성(field)와 행위(method)를 하나로 묶는 것 + 실제 구현 내용을 외부로부터 숨기는것(정보 은닉)</li>\n<li>\n<p>자바의 접근제어자</p>\n<ul>\n<li>public: 어떤 클래스의 객체에서든 접근 가능</li>\n<li>private: 이 클래스에서 생성된 객체들만 접근 가능</li>\n<li>protected: 이 클래스와 동일패키지에 있거나 상속관계에 있는 하위 클래스의 객체들만 접근 가능</li>\n</ul>\n</li>\n</ul>\n<h3 id=\"inheritance상속\" style=\"position:relative;\"><a href=\"#inheritance%EC%83%81%EC%86%8D\" aria-label=\"inheritance상속 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>Inheritance(상속)</h3>\n<ul>\n<li>\n<p>객체들 간의 관계를 구축하는 방법</p>\n<ul>\n<li>쉽게 말해 자식클래스가 부모클래스의 기능을 물려받는 것!</li>\n</ul>\n</li>\n</ul>\n<h3 id=\"polymorphism다형성\" style=\"position:relative;\"><a href=\"#polymorphism%EB%8B%A4%ED%98%95%EC%84%B1\" aria-label=\"polymorphism다형성 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>Polymorphism(다형성)</h3>\n<ul>\n<li>같은 모양의 코드가 여러 가지 형태/기능을 가질 수 있는 능력</li>\n<li>\n<p>Overriding</p>\n<ul>\n<li>자식 클래스가 부모 클래스의 기능을 새롭게 정의하는 것</li>\n</ul>\n</li>\n<li>\n<p>Overloading</p>\n<ul>\n<li>하나의 클래스에서 같은 이름의 메소드들을 여러 개 만드는 것</li>\n</ul>\n</li>\n</ul>\n<h1 id=\"solid\" style=\"position:relative;\"><a href=\"#solid\" aria-label=\"solid 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>SOLID</h1>\n<p>//todo</p>\n<h1 id=\"자바-코드의-실행\" style=\"position:relative;\"><a href=\"#%EC%9E%90%EB%B0%94-%EC%BD%94%EB%93%9C%EC%9D%98-%EC%8B%A4%ED%96%89\" 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>자바 코드의 실행</h1>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto;  max-width: 549px;\"\n    >\n      <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 92.33333333333333%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAASCAIAAADUsmlHAAAACXBIWXMAAAsSAAALEgHS3X78AAACa0lEQVQ4y42S207bQBCG/XYVKX2DqlIv+jJIlSrUi0ot4qLKDRTRAkIByrElBBICEYH4QOwkjmM7Byfx+rDeY9epVCEClP/C2p2ZTzO/dyR+TxTToD9020PH7LUN8fXsVjDo8GjIpyRNwQjXT9r5Vft0zTr5bhV+GEffBucbzFUmafYkzDnxXTa2edj1GjdJ3xQHOrJoNHpG54kQZQnlds8DMYoJp/xhPQAniHh+MhiMZeVW1Qw/gJ4fE0r/A/81BCJcMcbHFWPzsLy+XzyTncu6F0J03/FjY+sOyBUbywfy0n5tq9TUO6Np8lFYVBLKLWfg+RHChD/TM2MMI0Jw6rBjdWAUiwPGVASfggWWPjNhDc3KHxXLZ9XC73KlrBwfFa8u1GE/uFv2SGfKjFqnWtTkC6NSUGrn9evS7U1J79ujqR25A2OMkRAWHsXchDLq+z6EkFKKCU6zkwKRug8HAej2XIyTOI4FAGOIUNJumyAA6WWiBMIgDDq29W94SXRAJPCGrm5oCIvnBOkUBBIaNVv1btdGJEQEpstDQpgA3VB94CUYEEokQpK6W7jSd/OXa9XmXqNbFnV+5MjWYamWO6tu1qz9wbglgpZXvW7u5SvrlfrPW+cYoUgS7SMGzV5LbakhC0GS/lXMCCDA7JuqqQIKIEnXK8RxwAK5KVueFZBQTC5xZZvLufHpSvcwy5UddrPBvCbXdrmSA8WV3q8sV7eZiLuySHFtxzn4Gp6vcnWLKjsSX3o7/PhCmZvR32ec+QxbeIlrObb8jnyZaX/IWPOzdCFDsq9JKcsXX8WfZ7W5mdGnV3xxNsm++QMqMuwJJbuNmwAAAABJRU5ErkJggg=='); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"200524 1\"\n        title=\"200524 1\"\n        src=\"/static/bf2a97e6329fc361cfa03e2a8875aeaf/928ea/200524-1.png\"\n        srcset=\"/static/bf2a97e6329fc361cfa03e2a8875aeaf/5a46d/200524-1.png 300w,\n/static/bf2a97e6329fc361cfa03e2a8875aeaf/928ea/200524-1.png 549w\"\n        sizes=\"(max-width: 549px) 100vw, 549px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n      />\n    </span></p>\n<ul>\n<li>source code: 우리가 일반적으로 작성하는 코드</li>\n<li>byte code: 특정 프로그램(여기서는 JVM)이 이해하도록 변환된 코드</li>\n<li>VM: byte code를 로딩하고, 필요한 기능을 OS에게 호출하는 역할</li>\n</ul>\n<p>cf) native code: 기계어 코드로, OS에 종속되는, 특정 OS에서만 실행할 수 있는 코드</p>\n<p>ex) 윈도우의 메모장은 native app이므로, native code로 되어 곧장 OS의 기능을 호출하고, VM을 거칠 필요가 없다</p>\n<h2 id=\"jvm\" style=\"position:relative;\"><a href=\"#jvm\" aria-label=\"jvm 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>JVM</h2>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto;  max-width: 820px;\"\n    >\n      <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 38.33333333333333%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAICAIAAAB2/0i6AAAACXBIWXMAAAsSAAALEgHS3X78AAABy0lEQVQY0yWPy4rTUACG8zo+gG8gDLjSlTA7t7MTL+hKEF9AEQRHXMyoIM6AigijIqW2Iyl2mqRJc5ukSU5Ock5ycmly0qZtkmNB+PlW37f4OSWjSlrOIJJdoOJEzqiUUDcvN5tNVdd0SQH0HNcBEJZVtazXBa0ADHbbCdw4oUK2Glnej7E0sOAEIN6Y7+JznB2a4ePR/p3elWf6mxPCjtzoXZAfw/ytG70yA7NYcvxUHzlhT9J/jYRz0xvjfOhhOytFkn90okPp+YvJo/fWz29o9clBX2HyBaanc/TBAH5RcaJuyXNfssCFZtmYKC7QA+TFKWPMLcrfRmgsGrvuzLLiDU2APqgrCzqerbF2ywmi6AM/jomsqiROp4pyaVkuJjBJoijSUXQRZ2pVC8WWz5mYMpcyXDG0YoSuuSiOi7I0DFOUZeB5JaV+iP/6+OlQun7Su3p0djBQDib4tf1dD27K+L6G9sXgwfhyTyd9bkFICKExU9WpPJMVgnEaE8lHL2fe7b6695l/IswfTvCpfQbRDS28a4W39PCebF6bp30uyhY2gAN+1Bv+EWeaHxGU5mRRsK5lXbd7ztqWsa5purph9Zb957phm237D3KGmdBdjFJdAAAAAElFTkSuQmCC'); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"200524 2\"\n        title=\"200524 2\"\n        src=\"/static/cef03902dd2c0e5c12801007fcbf4de9/9f82e/200524-2.png\"\n        srcset=\"/static/cef03902dd2c0e5c12801007fcbf4de9/5a46d/200524-2.png 300w,\n/static/cef03902dd2c0e5c12801007fcbf4de9/0a47e/200524-2.png 600w,\n/static/cef03902dd2c0e5c12801007fcbf4de9/9f82e/200524-2.png 820w\"\n        sizes=\"(max-width: 820px) 100vw, 820px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n      />\n    </span></p>\n<ul>\n<li>Class Loader(클래스 로더): 일종의 Linker, 런타임시 클래스를 load함</li>\n<li>Execution Engine(실행 엔진): Class Loader를 통해 JVM 내부로 넘어와 JVM 메모리에 배치된 Byte code들을 명령어 단위로 실행</li>\n<li>GC : 참조되지 않거나 null인 객체의 메모리를 반환</li>\n</ul>\n<h1 id=\"타입\" style=\"position:relative;\"><a href=\"#%ED%83%80%EC%9E%85\" 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>타입</h1>\n<h2 id=\"기본형-타입primitive-type\" style=\"position:relative;\"><a href=\"#%EA%B8%B0%EB%B3%B8%ED%98%95-%ED%83%80%EC%9E%85primitive-type\" aria-label=\"기본형 타입primitive type 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>기본형 타입(primitive type)</h2>\n<ul>\n<li>boolean, byte, short, int, long, float, double, char(8가지)</li>\n<li>Null이 존재하지 않는다</li>\n<li>실제 값을 저장, stack 메모리에 저장된다</li>\n</ul>\n<h2 id=\"참조형-타입reference-type\" style=\"position:relative;\"><a href=\"#%EC%B0%B8%EC%A1%B0%ED%98%95-%ED%83%80%EC%9E%85reference-type\" aria-label=\"참조형 타입reference type 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>참조형 타입(reference type)</h2>\n<ul>\n<li>기본형 타입이 아닌 모든 타입</li>\n<li>Null이 존재한다</li>\n<li>값이 저장되어 있는 주소값을 저장, heap 메모리에 저장된다</li>\n</ul>\n<h1 id=\"상속\" style=\"position:relative;\"><a href=\"#%EC%83%81%EC%86%8D\" 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>상속</h1>\n<p>:상위 클래스의 모든 멤버를 하위 클래스가 물려 받는것</p>\n<p>상속하는 클래스 : Base, Super, Parent</p>\n<p>상속받는 클래스 : Derivation, Sub, Child</p>\n<p>최상위 클래스는 java.lang.Object</p>\n<h1 id=\"다형성\" style=\"position:relative;\"><a href=\"#%EB%8B%A4%ED%98%95%EC%84%B1\" 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>다형성</h1>\n<p>:여러가지 형태를 가질 수 있는 능력</p>\n<ul>\n<li>\n<p>Overriding</p>\n<ul>\n<li>자식 클래스가 부모 클래스의 (추상) 메소드를 같은 이름, 같은 리턴, 같은 인자 내의 로직들 새롭게 정의하는 것</li>\n</ul>\n</li>\n<li>\n<p>Overloading</p>\n<ul>\n<li>하나의 클래스에서 같은 이름의 메소드들을 여러 개 갖게 하는 것</li>\n</ul>\n</li>\n</ul>\n<h1 id=\"추상-클래스\" style=\"position:relative;\"><a href=\"#%EC%B6%94%EC%83%81-%ED%81%B4%EB%9E%98%EC%8A%A4\" 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>추상 클래스</h1>\n<p>:하위 클래스에서 구현될 기능을 추상 메소드로 선언</p>\n<ul>\n<li>abstract 예약어가 붙어 있어야함</li>\n</ul>\n<h1 id=\"인터페이스\" style=\"position:relative;\"><a href=\"#%EC%9D%B8%ED%84%B0%ED%8E%98%EC%9D%B4%EC%8A%A4\" 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>인터페이스</h1>\n<p>:구현하는 모든 클래스에 대해 특정 메소드들을 반드시 포함하도록 한다</p>\n<ul>\n<li>public static final 변수와 public abstract만을 포함한다</li>\n</ul>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto;  max-width: 1200px;\"\n    >\n      <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 43.99999999999999%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAYAAAAywQxIAAAACXBIWXMAABYlAAAWJQFJUiTwAAABb0lEQVQoz21R205CMRA8//83vvgFaqIkCvFBRKKooMIDeHrZttv2jLsFr7HJZLvT2Vu3276eYP1yjc3LGOvVGJejY1ycHeHp/ly4Cd5WVw36pr5iuRjh6qC7n51i86q6CdbLM3RmN8eujzDWCwjOJ0FEiBkpVURB4grrArY7CyIWrsB/6oLqimiAGN7RMT2C84BSGCVnfJ/hF3JmCYyotRy4n7q6v5UeXfKL1oGKY9yj1ophGH5BeWMMnHPNWmuliXJ4V72k1YTRPbS2YwxiQwtU0d+TUkLf918J1Xrvm/7rVIsuxydkmYI5yVi5QYM/u2Xmf/mf0OmYCzhu9x0SyQdbIxWddEkgqexkJCuc+lpME+vdOds6CyQ68s3XWCJZkN/oUp5BYRCkNrqX5BS4FdFt6ib1rovTzeqb/rla57TD3EChILORkd0Iyc0R7RRBEO1ts8FMkfys+cnNkOmucapj4VVD5kbebvfwc2Q/wQeHQLTnkeJjqgAAAABJRU5ErkJggg=='); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"200524 3\"\n        title=\"200524 3\"\n        src=\"/static/11da70cceb8677b3884de01dfc49bdf0/c1b63/200524-3.png\"\n        srcset=\"/static/11da70cceb8677b3884de01dfc49bdf0/5a46d/200524-3.png 300w,\n/static/11da70cceb8677b3884de01dfc49bdf0/0a47e/200524-3.png 600w,\n/static/11da70cceb8677b3884de01dfc49bdf0/c1b63/200524-3.png 1200w,\n/static/11da70cceb8677b3884de01dfc49bdf0/d43b4/200524-3.png 1202w\"\n        sizes=\"(max-width: 1200px) 100vw, 1200px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n      />\n    </span></p>\n<h1 id=\"출처\" style=\"position:relative;\"><a href=\"#%EC%B6%9C%EC%B2%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>출처</h1>\n<p><a href=\"https://loustler.io/languages/oop_interface_and_abstract_class/\">인터페이스(interface)와 추상 클래스(abstract class)</a></p>","frontmatter":{"title":"Java & OOP","date":"May 24, 2020"}}},"pageContext":{"slug":"/language/200524-java-oop/","previous":{"fields":{"slug":"/database/200524-Transaction/"},"frontmatter":{"title":"Transaction"}},"next":{"fields":{"slug":"/infra/200525-NGINX/"},"frontmatter":{"title":"NGINX"}}}}}