의견.png

상속 (프로그래밍)

위키원
rudgh01 (토론 | 기여)님의 2020년 8월 10일 (월) 10:10 판
이동: 둘러보기, 검색

상속(相續, inheritance)은 객체 지향 프로그래밍에서 크게 3요소로 꼽는 캡슐화, 상속, 다형성 세 가지 중 상속을 일컫는다. 자바에서는 계승, 확장이라는 단어로 사용된다.

개요

객체 지향 프로그래밍(OOP)에서 자손 클래스가 조상 클래스의 기능을 그대로 이어받아서 재사용하는 것을 상속이라 말한다. 클래스로 객체가 정의되는 고전 상속에서, 클래스는 기반 클래스, 수퍼클래스, 또는 부모 클래스 등의 기존의 클래스로부터 속성과 동작을 상속받을 수 있다. 그 결과로 생기는 클래스를 파생 클래스, 서브클래스, 또는 자식 클래스라고 한다. 상속을 통한 클래스들의 관계는 계층을 형성한다. 프로토타입 기반 프로그래밍에서는, 객체가 클래스를 따로 정의할 필요 없이 다른 객체로부터 직접 정의될 수 있다. 이러한 특징을 차등 상속이라고 부른다.[1]


특징

상속을 통해서 클래스를 작성하면, 보다 적은 양의 코드로 새로운 클래스를 작성할 수 있고 코드를 공통적으로 관리할 수 있기 때문에 코드의 추가 및 변경이 매우 용이하다. 이러한 특징은 코드의 재사용성을 높이고 코드의 중복을 제거하여 프로그램의 생산성과 유지보수에 크게 기여한다. 그리고 객체의 다형성4을 구현 할 수 있다는 효과를 가지고 있다. 즉, 하위 객체에서 상위객체의 필드와 메소드를 따로 또 만들어서 사용할 필요가 없으며 상위 객체의 메소드에 문제가 있을 경우 상위 객체에서의 수정으로 인해 하위객체에서 문제가 있었던 메소드를 따로 수정할 필요없이 메소드를 사용할 수 있다.[2]

상속은 부모클래스로부터 멤버변수, 메서드르 상속 받는 것은 가능하지만 생성자는 상속이 불가능하다. 또한 접근권한자가 private로 선언된 멤버변수와 메서드는 상속이 불가능하다.


다중 상속

다중상속(Multiple inheritance)이란 객체 지향 프로그래밍의 특징 중 하나이며, 어떤 클래스가 하나 이상의 상위 클래스로부터 여러 가지 행동이나 특징을 상속받을 수 있는 것을 말한다. 이런 다중 상속은 한 객체에서 여러 부모의 메소드를 사용하기 위해서 사용하는데 한 객체가 여러 부모 클래스를 가지게 되는 것은 문제가 생긴다. 그 문제를 다이아몬드 문제라고 한다.

죽음의다이아몬드(The Deadly Diamond of Death)

이 죽음의 다이아몬드는 ComboDrive라는 자식 클래스에서 Burn()이라는 메소드를 사용했다면 CDBurner, DvDBurner, DigitalRecoder 중 어느 객체에 접근해 함수를 사용할 것인지 애매한 상황이 생겨


장점

객체 지향의 특징중 첫번째 상속은 객체를 만들어 놓고 언제든지 다시 쓸 수 있다는 장점을 가지고 있습니다. 이 상속의 특징때문에 이미 만들어 놓은 상위 객체를 재사용해서 하위 객체를 쉽고 빠르게 만들수 있습니다. 그러므로 잘 만들어 놓은 객체만 있다면 고생할 필요가 없고 수정을 할때도 상위객체를 수정해주면 상속받은 모든 하위 객체가 수정이 되므로 유지보수가 쉽습니다. [3]

활용

자바에서 상속을 구현하는 방법은 아주 간단하다. 새로 작성하고자 하는 클래스의 이름 뒤에 상속받고자 하는 클래스의 이름을 키워드 'extends'와 함께 써 주기만 하면 된다.[4]


각주

  1. 위키백과, 〈상속(객체 지향 프로그래밍)〉, 《위키피디아》, 2014-07-03
  2. 재희 jaiyah, 〈객체 지향 프로그래밍의 상속과 다형성〉, 《Web Club》
  3. Ara Blog, 〈자바(JAVA) 객체지향 특징 상속/캡슐화/다형성〉, 《개인블로그》, 2015-10-29
  4. 명우니닷컴, 〈제7장 객체지향개념 2-1. 상속(Inheritance)〉, 《개인블로그》

같이 보기


  의견.png 이 상속 (프로그래밍) 문서는 프로그래밍에 관한 토막글입니다. 위키 문서는 누구든지 자유롭게 편집할 수 있습니다. [편집]을 눌러 이 문서의 내용을 채워주세요.