상속 (프로그래밍) 편집하기
최신판 | 당신의 편집 | ||
1번째 줄: | 1번째 줄: | ||
− | + | '''상속'''(相續, inheritance)은 [[객체 지향 프로그래밍]]에서 크게 3요소로 꼽는 [[캡슐화]], 상속, [[다형성]] 세 가지 중 상속을 일컫는다. [[자바]]에서는 계승, 확장이라는 단어로 사용된다. | |
− | |||
− | '''상속'''(相續, inheritance)은 [[객체 지향 프로그래밍]] | ||
== 개요 == | == 개요 == | ||
− | [[객체 지향 프로그래밍]] | + | [[객체 지향 프로그래밍]](OOP)에서 자손 클래스가 조상 클래스의 기능을 그대로 이어받아서 재사용하는 것을 상속이라 말한다. 클래스로 객체가 정의되는 고전 상속에서, 클래스는 기반 클래스, 수퍼클래스, 또는 부모 클래스 등의 기존의 클래스로부터 속성과 동작을 상속받을 수 있다. 그 결과로 생기는 클래스를 파생 클래스, 서브클래스, 또는 자식 클래스라고 한다. 상속을 통한 클래스들의 관계는 계층을 형성한다. |
:{|class=wikitable width=700 style="background-color:#ffffee" | :{|class=wikitable width=700 style="background-color:#ffffee" | ||
|+ 상속 명칭 구분 | |+ 상속 명칭 구분 | ||
23번째 줄: | 21번째 줄: | ||
==특징== | ==특징== | ||
− | 상속을 통해서 클래스를 작성하면, 보다 적은 양의 코드로 새로운 | + | 상속을 통해서 클래스를 작성하면, 보다 적은 양의 코드로 새로운 클래스를 작성할 수 있고 코드를 공통적으로 관리할 수 있기 때문에 코드의 추가 및 변경이 매우 용이하다. 이러한 특징은 코드의 재사용성을 높이고 코드의 중복을 제거하여 프로그램의 생산성과 유지보수에 크게 기여한다. 그리고 객체의 다형성4을 구현 할 수 있다는 효과를 가지고 있다. |
− | 즉, 하위 객체에서 상위객체의 | + | 즉, 하위 객체에서 상위객체의 필드와 메소드를 따로 또 만들어서 사용할 필요가 없으며 상위 객체의 메소드에 문제가 있을 경우 상위 객체에서의 수정으로 인해 하위객체에서 문제가 있었던 메소드를 따로 수정할 필요없이 메소드를 사용할 수 있다.<ref name="Web Club">재희 jaiyah, 〈[https://webclub.tistory.com/169 객체 지향 프로그래밍의 상속과 다형성]〉, 《Web Club》</ref> |
+ | |||
+ | 상속은 부모클래스로부터 멤버변수, 메서드르 상속 받는 것은 가능하지만 생성자는 상속이 불가능하다. 또한 접근권한자가 private로 선언된 멤버변수와 메서드는 상속이 불가능하다. | ||
===장점=== | ===장점=== | ||
− | 객체 지향의 | + | 객체 지향의 특징중 첫번째 상속은 객체를 만들어 놓고 언제든지 다시 쓸 수 있다는 장점을 가지고 있다. 이 상속의 특징때문에 이미 만들어 놓은 상위 객체를 재사용해서 하위 객체를 쉽고 빠르게 만들수 있다. 그러므로 잘 만들어 놓은 객체만 있다면 고생할 필요가 없고 수정을 할때도 상위객체를 수정해주면 상속받은 모든 하위 객체가 수정이 되므로 유지보수가 쉽다. <ref name="Ara Blog">Ara Blog, 〈[https://hunit.tistory.com/152 자바(JAVA) 객체지향 특징 상속/캡슐화/다형성]〉, 《개인블로그》, 2015-10-29</ref> |
===단점=== | ===단점=== | ||
94번째 줄: | 94번째 줄: | ||
class 부모클래스 extends 조상클래스 { 내용 } | class 부모클래스 extends 조상클래스 { 내용 } | ||
class 자식클래스1 extends 부모클래스 { 내용 } // 가능 | class 자식클래스1 extends 부모클래스 { 내용 } // 가능 | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
====C++ 상속==== | ====C++ 상속==== | ||
− | + | C++의 경우 private 상속, protected 상속, public 상속이 있다. private는 외부에서 접근이 불가능하며, protected는 외부에서 접근이 불가능하나 파생 클래스에서는 접근이 가능하고, public은 어디서나 접근이 가능하다. 이전에 본 상속들은 모두 public 상속이다.<ref name="C++상속">끝나지않는 프로그래밍 일기, 〈[https://blog.hexabrain.net/173 C++ 강좌 12편. 상속(Inheritance)]〉, 《개인블로그》, 2012-11-12</ref> | |
:{|width=80% border=1 | :{|width=80% border=1 | ||
227번째 줄: | 192번째 줄: | ||
상속의 접근 범위에 따라서 제한자를 잘 사용해주어야하는데 제한자의 접근 범위를 한 줄로 정리하면 아래와 같다.<ref name="C++상속">끝나지않는 프로그래밍 일기, 〈[https://blog.hexabrain.net/173 C++ 강좌 12편. 상속(Inheritance)]〉, 《개인블로그》, 2012-11-12</ref> | 상속의 접근 범위에 따라서 제한자를 잘 사용해주어야하는데 제한자의 접근 범위를 한 줄로 정리하면 아래와 같다.<ref name="C++상속">끝나지않는 프로그래밍 일기, 〈[https://blog.hexabrain.net/173 C++ 강좌 12편. 상속(Inheritance)]〉, 《개인블로그》, 2012-11-12</ref> | ||
+ | |||
private < protected < public | private < protected < public | ||
288번째 줄: | 254번째 줄: | ||
==참고자료== | ==참고자료== | ||
− | |||
* 위키백과, 〈[https://ko.wikipedia.org/wiki/%EC%83%81%EC%86%8D_(%EA%B0%9D%EC%B2%B4_%EC%A7%80%ED%96%A5_%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D)#cite_note-1 상속(객체 지향 프로그래밍)]〉, 《위키피디아》 | * 위키백과, 〈[https://ko.wikipedia.org/wiki/%EC%83%81%EC%86%8D_(%EA%B0%9D%EC%B2%B4_%EC%A7%80%ED%96%A5_%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D)#cite_note-1 상속(객체 지향 프로그래밍)]〉, 《위키피디아》 | ||
* 재희 jaiyah, 〈[https://webclub.tistory.com/169 객체 지향 프로그래밍의 상속과 다형성]〉, 《Web Club》 | * 재희 jaiyah, 〈[https://webclub.tistory.com/169 객체 지향 프로그래밍의 상속과 다형성]〉, 《Web Club》 | ||
296번째 줄: | 261번째 줄: | ||
* 에스콸리, 〈[http://blog.daum.net/dsmcj/37 다중상속과 단일상속의 장단점]〉, 《개인블로그》, 2009-03-11 | * 에스콸리, 〈[http://blog.daum.net/dsmcj/37 다중상속과 단일상속의 장단점]〉, 《개인블로그》, 2009-03-11 | ||
* joker, 〈[https://blog.naver.com/heartflow89/220960019390 상속의 개념 및 부모/자식 클래스]〉, 《개인블로그》, 2017-03-17 | * joker, 〈[https://blog.naver.com/heartflow89/220960019390 상속의 개념 및 부모/자식 클래스]〉, 《개인블로그》, 2017-03-17 | ||
− | |||
* 끝나지않는 프로그래밍 일기, 〈[https://blog.hexabrain.net/173 C++ 강좌 12편. 상속(Inheritance)]〉, 《개인블로그》, 2012-11-12 | * 끝나지않는 프로그래밍 일기, 〈[https://blog.hexabrain.net/173 C++ 강좌 12편. 상속(Inheritance)]〉, 《개인블로그》, 2012-11-12 | ||
− | |||
== 같이 보기 == | == 같이 보기 == | ||
− | |||
− | |||
* [[객체 지향 프로그래밍]] | * [[객체 지향 프로그래밍]] | ||
* [[클래스]] | * [[클래스]] | ||
308번째 줄: | 269번째 줄: | ||
* [[오버로딩]] | * [[오버로딩]] | ||
* [[메소드]] | * [[메소드]] | ||
− | |||
− | |||
− | |||
− | |||
− | |||
{{프로그래밍|검토 필요}} | {{프로그래밍|검토 필요}} |