상속(Inheritance)
1 minute read
상속
- 상속이란? 기존 코드의 수정을 최소화하면서 새 기능을 추가한다. 코드의 재사용성을 높인다.
- 상속이 없는 경우
- 기존의 소스 코드를 변경하게 되면 그 소스 코드를 사용해서 만든 프로그램들도 영향을 받는다.
- 이 경우 오류가 발생할 수 있다.
- 그래서 기존의 소스 코드에 손을 대는 것은 위험하다.
- 기존의 소스 코드에 계속 코드를 덧붙이다 보면 누더기 코드가 될 가능성이 있다.
- 쓰지도 않는 코드가 누적된다.
- 만약 기존의 코드를 복사해서 새 클래스를 만든다면
- 같은 일을 하는 여러 클래스가 존재하게 되면 관리하기가 힘들다
- 원본 코드에 버그가 있으면 버그도 복사하게 된다. 따라서 버그를 고칠때 복사한 모든 소스 파일을 찾아 고쳐야 한다.
- 상속 문법을 사용할 경우
- 상속을 이용하면 기존 코드에 문제가 있을 때 그 코드를 수정하는 순간, 기존 코드를 상속받아 만든 모든 클래스에 자동으로 적용된다.
- 기존 코드에 손을 대지 않기 때문에 새 기능을 추가하더라도 기존 기능에 문제가 발생할 가능성이 거의 없다.
- 소스 코드의 유지 보수가 쉽다.
클래스 로딩과 인스턴스 생성
- A 클래스를 상속받은 B 클래스가 있을 때
- B 클래스를 로딩할 때 A 클래스에 있는 인스턴스 변수도 함께 생성된다.
생성자 호출
- 하위 클래스의 첫번째 문장이 수퍼 클래스의 생성자를 호출하는 명령이다.
- 가장 상위의 수퍼 클래스는 Java의 Object 클래스를 상속한다.
- 하위 클래스에서 생성자를 호출하면 그 위에 있는 수퍼 클래스를 호출한다. 이런 식으로 계속 상위의 클래스를 호출하다가 Object 생성자를 호출하고 나면 더 이상 수퍼 클래스가 없기 때문에 Object() 생성자를 실행하고 리턴하는 식으로 하위 클래스로 넘어간다.
- 만약 수퍼 클래스에 기본 생성자가 없으면 개발자가 직접 수퍼 클래스에 있는 생성자를 호출하면 된다.
다중 상속