상속의 개념

   객체지향 프로그래밍의 특징 중 모듈의 재사용(reusing)을 위해서 클래스를 사용하는데, 클래스의 특정 부분을 공통으로 사용하되, 약간의 다른 부분들을 재정의하기 위해서는 반복하여 정의할 필요가 없이 클래스들을 계층구조로 만들면 됩니다.

   이 계층구조로 만들기 위해서는 상속(inheritance)의 개념을 이해해야 하는데요. 자바개발환경인 JDK에서 제공되는 클래스 라이브러리들도 계층구조를 이루고 있어서 반드시 이해해야만 하는 개념입니다.

   자바에 있어서 최상위 클래스는 java.lang.Object 클래스인데요. 이 클래스에 대해서는 차후에 다시 포스팅하기로 하구요, 모든 클래스는 상위(super)클래스를 가지게 됩니다. 만약, 클래스를 지정할 때 상위 클래스를 지정하지 않았다고 해도 자동으로 java.lang.Object 클래스를 상위 클래스로 상속받는 것을 디폴트로 합니다.

   상위클래스 지정하는 방법은 extends라는 예약어를 통해서 지정합니다.

[public/final/abstract] class 클래스명 extends 상위클래스명 {
……………….. //멤버변수선언
}

   멤버 변수 상속

   아래는 멤버 변수에 대해서 상속하는 예제입니다.

위의 예제에서 보면 클래스 A를 B가 상속받고 B를 C가 상속 받은 후에 main에서 C 클래스를 obj에서 호출하는 예제인데, 클래스 A에서 정의한 a와 B에서 정의한 b를 C에서 상속을 받았기 때문에 결과값은 6이 나오게 됩니다.

접근한정자

접근한정자라는 것은 변수를 선언할 때에 변수형 앞에서 변수의 사용 범위를 나타내는데, private와 public 외에도 protected라는 접근한정자를 추가로 정리해 보았습니다.

오버라이딩과 오버로딩

상속과 관련해서, 동일 이름의 변수가 상위 클래스와 하위 클래스에 동시에 사용될 때도 있는데, 이 때에는 하위클래스를 호출할 시에는 하위클래스의 변수가, 상위클래스를 호출할 시에는 상위클래스의 변수가 불러지게 되므로 주의하여야 합니다. 이를 오버로딩(overloading)이라고 합니다.

이와는 비슷한 개념으로 오버라이딩(overriding)이 있는데, 이는 변수의 상속이 아닌 메소드의 상속을 하는 것을 말합니다. 이러한 개념들은 Java의 다형성(polymorphism)을 제공하는 주요한 기능입니다.

그러면, 오버로딩과 오버라이딩으로 인해 가려지는 상위클래스의 변수와 메소드를 불러올 필요가 있을 경우에는 어떻게 하면 좋을까요? 물론, 해당 클래스명을 지정하여서 멤버변수와 메소드를 가져올 수도 있겠지만, 예약어인 super를 사용하면 바로 상위 클래스의 멤버변수와 메소드를 호출하게 됩니다.

super. 객체변수 - 상위 클래스의 객체 변수를 호출하는 경우
super.메소드이름(매개변수) - 상위 클래스의 메소드를 호출하는 경우
super(매개변수) - 상위 클래스의 생성자를 명시적으로 호출하는 경우

instanceof 연산자

상속과 관련해서 연산자 instanceof 를 설명해야 하겠네요. 이 연산자는 객체가 특정 클래스나 인터페이스로부터 생성된 객체인지를 판단하여 true, false 값을 반환하는 연산자입니다.

객체참조변수 instanceof 클래스명,인터페이스명

이 경우, 해당 클래스가 상속한 클래스의 객체참조변수의 경우에도 true값을 반환한다는 것을 주의할 필요가 있습니다. 당연한 예로, 하위클래스의 객체참조변수는 false값을 반환합니다.

추상클래스, 추상메소드

추상클래스는 선언만 하는 클래스로, 실제 어떤 기능을 가지는지에 대해서는 하위클래스에서 기술하는 특수 클래스입니다. 실제로 추상 클래스 내에는 추상메소드만 선언하고 어떤 구현부분도 기술되지 않습니다.    

abstract class 추상클래스이름 {
abstract void 추상메소드이름() ;
}

그러면, 왜 추상클래스와 추상메소드를 사용하는 것일까요? 그 이유는 상속을 지원하는 객체지향언어에서의 다형성을 나타내어 주며, 다르게 구현되더라도 하나의 메소드 이름을 공통으로 사용할 수 있기 때문에 통일된 소스를 만들 수 있습니다.

final 예약어

상속에 대해서 정리하면서 마지막으로 짚을 부분은 final 예약어입니다. 이는 메소드 선언 시에 final을 붙이면 하위클래스에서 오버라이딩할 수 없는 기능을 가지고 있습니다. 메소드 뿐 아니라 클래스에도 final을 붙여서 하위클래스를 가질 수 없는 최하단 클래스임을 선언할 수 있습니다.


 - 일반행정직

 - 검찰직공무원

 - 경찰공무원

 - 교정직공무원

 - 사회복지직공무원

 - 환경직공무원

 - 감사직공무원

 - 화공직공무원

 - 농업직공무원

 - 보건직공무원

 - 사서직공무원

 - 외무영사직공무원

 - 임업직공무원

 - 전산직공무원

 ● 유망자격증 기출문제

 - 소방공무원

 - 교육행정직공무원

 - 세무직공무원

 - 10급공무원

 - 토목직공무원

 - 간호직공무원

 - 건축직공무원

 - 농업연구사

 - 농촌지도사

 - 보호직공무원

 - 식품위생직공무원

 - 의료기술직공무원

 - 전기직공무원

 - 출입국관리직공무원

 ● 공무원 최신자료 받기


 - 4대보험관리사

 - 결혼상담사

 - 공인중개사

 - 노인여가건강관리사

 - 농산물품질관리사

 - 도로교통사고감정사

 - 사회복지사1급

 - 소비자전문상담사

 - 실버시터상담지도사

 - 아동심리상담사

 - 영재놀이지도사

 - 주택관리사

 - 치매예방관리사

 - 저작권관리사

 - 일반행정사

 - PIA사설정보관리사

 - 건강식이요법사

 - 경호(경비)지도사

 - 노인심리상담사

 - 노후생활설계사

 - 다문화가정상담사

 - 속기사

 - 심리상담사

 - 연예인관리사

 - 장례지도사

 - 직업상담사

 - 유기농관리사

 - [방과후]교육마술지도사

-[방과후]창의사고력지도사

 - [학점은행제]사회복지사

댓글을 남겨주세요

Name *

Password *

Link (Your Homepage or Blog)

Comment

Secret