상속 (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를 사용하여 접근하는 것이 가능하다
메소드 오버라이딩
- 부모 클래스로부터 상속받은 메소드를 자식 클래스가 특성에 맞게 새로 구현하는 것
- 즉 상속받은 메소드를 자기 필요한대로 수정해서 쓰는 것 이다.
- 오버라이딩을 통해 코드의 간결성을 유지하면서 내용을 확장 시킬 수 있다.
오버라이딩의 조건
- 오버라이딩 하는 부모 클래스의 메소드와 이름이 같아야 한다.
- 오버라이딩 하는 부모 클래스의 메소드와 파라미터가 같아야 한다.
- 오버라이딩 하는 부모 클래스의 메소드와 리턴타입이 같아야한다.
다형성의 이해
JAVA 클래스는 사용자 정의 타입(User Defined Type)이로 자료형으로 사용된다.
Java는 타입 간 호환에 매우 엄격한 언어이다.
PaidUser luke = new EnterpriseUser();
// ERROR 발생 , 서로 다른 타입을 참조해서 객체를 생성함
java의 타입 체킹
- 기본적으로 서로 다른 객체를 참조할 수 없고 자바는 타입 체킹이 엄격하다.
- 그러나 예외로 부모 타입의 참조 변수는 그 자식 타입의 객체를 참조 가능하다.
다형성(polymorphism)
- 사전적 의미 : 다양한 형태를 가지는 성질
- 다형성은 객체지향의 주요 특성 중 하나이다.
- ( 하나의 리모컨으로 다양한 기기의 조정이 가능하다 = 다형성이 높다. )
- java에서는 하나의 타입이 때에 따라 여러 종류의 객체의 특성을 가질 수 있는 것 ( 여러 객체 참조가 가능한 것 )
- 같은 형태의 메소드가 때에 따라 다양한 동작을 수행하는 것
- java 에서는 다음 특성을 이용하여 다형성을 구현한다.
- 부모 클래스의 참조 변수가 자식 클래스의 객체를 참조할 수 있음
- 메소드 오버라이딩
각 함수의 login() 메소드를 오버라이딩하여 각 클래스에 맞게 사용하고 있다고 가정하자
User 클래스 변수를 게속해서 재사용하여 객체 참조 변수를 3번 실행한다면 , 모두 각 클래스에서 선언한 login() 메소드의 내용이 실행되게 된다.
다형성의 필요성
- SW 요구사항 변경이나 추가에 대해 유연한 설계가 가능해진다.
- 요구사항이 추가 되었을 때 기존 코드의 변경이 최소화 된다.
반응형
'EXTERNAL ACTIVITY > Code Presso -웹개발 트랙 체험단-' 카테고리의 다른 글
<코드 프레소 웹개발 트랙> SW 유지보수성 향상을 위한 Clean Code (0) | 2022.01.22 |
---|---|
<코드 프레소 웹개발 트랙> Java 프로그래밍 초급 [3] (0) | 2022.01.19 |
<코드 프레소 웹개발 트랙> Java 프로그래밍 초급 [2] (0) | 2022.01.18 |
<코드 프레소 웹개발 트랙> Java 프로그래밍 초급 (0) | 2022.01.17 |
<코드 프레소 웹 개발 트랙> 실무자가 알려주는 Git 활용한 프로젝트 관리[2] (0) | 2022.01.15 |