Java 프로그래밍 초급(2) - 객체지향 고급(상속)
728x90

안녕하세요~ 항상 나아가는 개발자 pink_salt 입니다!

코드프레소 Java 웹 개발 체험단 활동을 하고 있습니다.

Java의 정말 중요한 개념인 객체지향 고급에 대해서 알아봅시다~ 고고!

이번엔 'Java 프로그래밍 초급' 강의를 듣고 공부한 내용을 정리하여 두 번째 포스팅을 진행하겠습니다.


상속의 개념(inheritance)

일반화된 특성이 정의된 User 클래스가 있다고 가정합니다.

또, 일반화된 특성을 모두 가지면서, 특수한 특성까지 정의한 클래스인 PaidUser가 있다고 가정합니다.

이렇듯 일반화된 클래스의 멤버들을 가지면서 자기 자신만의 멤버를 갖게 되는 것을 '상속'이라고 합니다.

User가 추상적이고 PaidUser가 더 구체적입니다.

상속을 하는 클래스는

  • 부모(Parent) 클래스
  • 상위(Super) 클래스
  • 기반(Base) 클래스

라고 합니다.

상속을 받는 클래스는 

  • 자식(Child) 클래스
  • 하위(Sub) 클래스
  • 파생(Derived) 클래스

라고 합니다.

이 용어는 꼭 기억하셔야 이해하기 수월합니다!

  • 일반화된 클래스(부모 클래스)를 재사용하여 새로운 specific 한 클래스(자식 클래스)를 생성하는 것입니다.
  • 자식 클래스는 부모 클래스의 모든 멤버 변수와 메서드를 상속받습니다.
  • 상속을 거듭할수록 자식 클래스의 멤버 변수와 메소드 개수는 같거나 늘어납니다.
  • 상속의 횟수는 제한이 없습니다.

상속은 객체지향 프로그래밍을 구성하는 주요 특징입니다.

상속을 통해서 클래스 간의 계층적 분류(hierarchical classifications)가 가능해집니다.

상속이 어떻게 이루어지냐면

extends를 사용해 부모 클래스의 멤버를 상속받아 확장시킬 수 있습니다.

상속 예시

사용 예시
class 자식 클래스명 extends 부모 클래스명 {...} 
//사용 예시
class PaidUser extends User {} 
class EnterpriseUser extends User {} 
class Administrator extends User {}​

User class 정의

상속 구현

User 클래스를 상속받는 PaidUser, EnterpriseUser, Administrator 클래스에서 상속받은 멤버는 별도로 선언하지 않습니다.
PaidUser클래스에는 email, password 등이 있지만 선언하지 않는 것을 볼 수 있습니다.


상속의 특징

  • 클래스 간의 계층적 분류가 가능해집니다.
  • 상속받은 멤버는 자식 클래스에서 별도로 선언하지 않습니다.
  • 상속받은 멤버에 대한 코드는 부모 클래스에서 공통적으로 관리할 수 있습니다.

장점에는

  • 코드의 재사용성이 증가합니다.
  • 클래스 간의 계층 구조에 따른 다형성(polymorphism) 적용이 가능해집니다.

단일 상속

자바는 다중 상속을 허용하지 않습니다.

-> 하나의 클래스로부터만 상속을 받을 수 있습니다.


상속 관계와 접근제어(private, protected)

접근 제어자는 외부로부터 접근을 제한하기 위한 목적의 키워드입니다.

이것은 상속 관계에서의 접근도 제어합니다.

private 접근 제어자

  • 외부로부터의 접근을 제한하기 위한 키워드
  • 오직 같은 클래스 내에서만 접근이 가능합니다.
  • 상속받은 자식 클래스에서도 접근이 제한됩니다.
  • private 멤버 변수에 대해 외부 접근이 필요한 경우, 부모 클래스에 public getter, setter 메소드를 제공합니다.

 

protected 접근 제어자

  • 부모 클래스의 protected 멤버는 자식 클래스에서 접근이 가능합니다.
  • private 보다는 낮은 제어를 합니다.

 

자식 클래스에서의 접근을 제한하기 위해서는 private을 사용하고

자식 클래스에서의 접근을 허용하기 위해서는 protected를 사용합니다.

멤버 변수의 특성에 맞는 접근 제어자를 선택하는 것이 중요합니다.


상속 관계에서의 생성자와 super 키워드

접근 제어자는 반드시 명시하는 것이 좋습니다.(유의)

 

상속 관계에서 생성자는 어떻게 동작할까?

  • 부모 클래스의 생성자는 상속되지 않습니다.
  • 자식 클래스의 객체를 생성 시, 부모 클래스의 기본 생성자를 자동으로 호출합니다.
  • 최상위 부모 클래스의 생성자부터 한 단계 아래 자식으로부터 차례대로 호출합니다.

 

이때, 명시적인 부모 생성자의 호출이 없는데 어떻게 가능한지 궁금증이 생깁니다.

 

super 키워드

  • Java에서 super는 부모 클래스를 의미하는 키워드입니다.
  • super();는 부모 클래스의 파라미터 없는 생성자를 호출합니다.
  • 자식 클래스에서 부모 클래스 생성자를 명시적으로 호출하지 않으면, java 컴파일러는 자식 클래스 생성자의 첫 번째 라인에 super()를 자동으로 삽입합니다.
  • 부모 클래스의 멤버 변수 또는 메소드 접근 시 super를 사용합니다.

 

  • 파라미터가 있는 부모 생성자는 Java 컴파일러가 자동으로 호출하지 않습니다.
  • 파라미터가 있는 생성자를 호출할 때는 반드시 명시적인 선언이 필요합니다.
  • super. 으로 부모 클래스의 멤버에 접근 가능합니다.

 


다음 게시물에서는 객체지향의 오버 라이딩 내용에 대해 자세히 공부하고 정리해서 다시 찾아뵙겠습니다!

열심히 나아가는 개발자 이었습니다.

go go!

코드프레소 URL: https://www.codepresso.kr/

 

프리미엄 IT 교육 서비스 - 코드프레소

 

www.codepresso.kr

 

728x90
반응형