본문 바로가기
EXTERNAL ACTIVITY/Code Presso -웹개발 트랙 체험단-

-

by jaeaemin 2022. 1. 19.

 

상속 (inheritance)

  • 일반화된 특성이 정의된(추상적) 클래스에 대해서 specific한 특성을 추가하여 클래스를 정의하는 것
  • 부모 클래스를 재사용하여 새로운 sepcific한 자식 클래스를 생성하는 것
  • 자식 클래스는 부모 클래스의 모든 멤버변수와 메소드를 상속받는다.
  • 상속의 횟수는 제한이 없음
  • 클래스 간의 계층적 분류(hirearchial classifications)가 가능해짐 
  • 상속받은 멤버에 대한 코드 관리가 간편해진다. 

상속의 예시

 

Java에서 상속을 구현하기 

 - PaidUser는 User가 가지고 있는 변수나 메소드를 사용가능하다.

 - Java는 다중상속을 허용하지 않고, 하나의 클래스만 상속받을 수 있다(단일상속)

class [자식 클래스명] extends [부모 클래스명]{}

class PaidUser extends User{}

 

다형성의 장점

  • 코드의 재사용성 증가
  • 클래스 간의 계층 구조에 따른 다형성 적용 가능 

 

상속 간계의 접근제어자

상속 관계에에서 자식 클래스의 접근을 제한하는 것이 가능

 

private 접근 제어
[자식 클래스 접근 제한]
상속 받은 자식 클래스에서도 접근이 제한됨 
오직 같은 클래스 내에서만 접근 가능
private 멤버변수에 접근하기 위해 주로 public getter/setter 메소드를 사용해서 접근함
protected 접근 제어
[자식 클래스 접근 허용]
외부에 대한 접근을 제한한다.
상속 받은 자식 클래스에서의 접근을 가능하게 한다.
즉, 부모 클래스의 protected 멤버는 자식 클래스에서 접근이 가능하다.

 

 

상속 관계에서의 생성자

  • 부모 클래스의 생성자는 상속되지 않는다.
  • 자식 클래스의 객체를 생성 시, 부모 클래스의 기본 생성자를 자동으로 호출
  • 최상위 부모 클래스부터 하향식으로 호출한다.

 

super 키워드

  • Java에서 super는 부모 클래스를 의미하는 키워드이다. ( this는 자기 자신 지칭 )
  • super(); 는 부모 클래스의 파라미터 없는 생성자를 호출한다.
  • 자식 클래스에서 부모 생성자를 명시적으로 호출하지 않으면 java 컴파일러는 자식 클래스에 super();를 자동으로 삽입함.

super에 의해 이루어지는 생성자 실행 단계 

  • 부모 클래스의 멤버 변수 또는 메소드 접근 시 super를 사용하여 접근하는 것이 가능하다

 

 

메소드 오버라이딩 

  • 부모 클래스로부터 상속받은 메소드를 자식 클래스가 특성에 맞게 새로 구현하는 것 
  • 즉 상속받은 메소드를 자기 필요한대로 수정해서 쓰는 것 이다.
  • 오버라이딩을 통해 코드의 간결성을 유지하면서 내용을 확장 시킬 수 있다.

 

오버라이딩의 조건 

  1. 오버라이딩 하는 부모 클래스의 메소드와 이름이 같아야 한다.
  2. 오버라이딩 하는 부모 클래스의 메소드와 파라미터가 같아야 한다.
  3. 오버라이딩 하는 부모 클래스의 메소드와 리턴타입이 같아야한다.

 

 

 

다형성의 이해 

 

JAVA 클래스는 사용자 정의 타입(User Defined Type)이로 자료형으로 사용된다.

Java는 타입 간 호환에 매우 엄격한 언어이다.

PaidUser luke = new EnterpriseUser();
// ERROR 발생 , 서로 다른 타입을 참조해서 객체를 생성함

java의 타입 체킹

  • 기본적으로 서로 다른 객체를 참조할 수 없고 자바는 타입 체킹이 엄격하다.
  • 그러나 예외로 부모 타입의 참조 변수는 그 자식 타입의 객체를 참조 가능하다.

 

 

 

다형성(polymorphism)

  • 사전적 의미 : 다양한 형태를 가지는 성질
  • 다형성은 객체지향의 주요 특성 중 하나이다.
  • ( 하나의 리모컨으로 다양한 기기의 조정이 가능하다 = 다형성이 높다. )
  • java에서는 하나의 타입이 때에 따라 여러 종류의 객체의 특성을 가질 수 있는 것 ( 여러 객체 참조가 가능한 것 ) 
  • 같은 형태의 메소드가 때에 따라 다양한 동작을 수행하는 것 
  • java 에서는 다음 특성을 이용하여 다형성을 구현한다.

      - 부모 클래스의 참조 변수가 자식 클래스의 객체를 참조할 수 있음

      - 메소드 오버라이딩

 

 각 함수의 login() 메소드를 오버라이딩하여 각 클래스에 맞게 사용하고 있다고 가정하자
User 클래스 변수를 게속해서 재사용하여 객체 참조 변수를 3번 실행한다면 , 모두 각 클래스에서 선언한 login() 메소드의 내용이 실행되게 된다.

 

 

다형성의 필요성

  • SW 요구사항 변경이나 추가에 대해 유연한 설계가 가능해진다.
  • 요구사항이 추가 되었을 때 기존 코드의 변경이 최소화 된다.
반응형