비전공자의 개발과 친해지기/클래스와 객체

[JAVA : 클래스와 객체]6. 상속

justdoIT0730 2022. 6. 8. 21:03
728x90
728x90

상속, 부모클래스와 자식클래스

 

  상속의 사전적 의미는 1) 뒤를 잇다. 2) 죽은 사람의 권리와 의무를 이어받는 일입니다. 일반적으로 부모가 자식에게 재산, 권리, 의무 등을 물려주는 것을 상속이라고 합니다.

 

 

  프로그래밍에서의 상속 또한 비슷한 역할을 합니다. 물론 일반적인 재산, 권리, 의무를 물려주는 것이 아니라 "클래스의 멤버를 물려준다."는 차이점이 있습니다.

 

  이때 물려주는 클래스를 "부모 클래스", 물려받는 클래스를 "자식 클래스"라고 얘기합니다. 

 

public class Main {

	public static void main(String[] args) {
		Parent p = new Parent();
		Child c = new Child();
		
		p.print();
		c.print();
	}

}

// Parent 클래스 정의
class Parent {
		
	public int iInt;
	
	public void print() {
		System.out.println("Parent Class");
	}
}

// Child 클래스 정의
class Child extends Parent{

}

 

  위 예제는 상속을 표현한 간단한 예제입니다. 

 

  1. 14~21번째 줄에서 Parent라는 클래스가 정의 되었습니다. Parent 클래스는 멤버로 iInt라는 변수와 print라는 메소드로 구성되어 있음을 확인할 수 있습니다.
  2. 23~26번째 줄에서 Child 라는 클래스가 정의 되었습니다. 24번째 줄에 extends 라는 구문을 발견하셨나요? 바로 이 구문을 통해 상속을 나타냅니다. 클래스를 정의할 때 클래스 이름 옆에 extends 구문을 붙여준 후 부모 클래스의 이름을 적어주면 자식 클래스는 부모 클래스를 상속하게 됩니다. 위와 같이 자식과 부모 클래스를 정의해 주면, 자식 클래스는 부모 클래스의 private 멤버를 제외한 나머지 멤버를 본인의 멤버처럼 사용할 수 있습니다. 위 예제에서 Child 클래스 내부에 아무것도 정의되어 있지 않아 이 클래스는 아무 역할도 하지 않는다고 생각할 수 있지만, Child 클래스는 Parent 클래스로부터 멤버를 상속받았으므로 iInt 변수와 print() 메소드를 Child 클래스의 멤버로 사용할 수 있습니다.
  3. 따라서 main 함수를 살펴보면, Child 클래스의 객체 c에서 print 메소드를 사용하는 것을 확인할 수 있습니다. 즉, Child 클래스에도 print 메소드가 정의되어 있으며 사용까지 가능합니다.

 

 

 

 추가적으로 상속을 사용할 때 다음 내용에 대해 유의!

  • 자식 클래스는 부모 클래스로부터 물려받은 멤버 외에 다른 멤버를 추가로 가질 수 있다.
  • 자식 클래스에서 정의된 멤버는 부모 클래스 객체에서는 사용할 수 없다.
  • 자식 클래스 객체가 생성될 때는 부모 클래스의 생성자가 무조건 콜 됩니다. 콜 되는 순서는 1) 부모클래스 생성자 2) 자식클래스 생성자 순 이다.

접근제한자 : protected


  부모 클래스에서 protected로 선언된 멤버는 자식 클래스에서 상속받아 public처럼 사용할 수 있습니다.

 

  단, 본인 클래스 혹은 자식 클래스 외의 장소에서 사용할 경우 해당 멤버는 private와 동일하게 동작합니다. 또한  private 접근 제한자는 본인 객체 내에서만 사용 가능한 멤버이므로, 부모 클래스에서 private로 선언된 멤버는 자식 클래스에서도 사용할 수 없습니다.

 

728x90
728x90