1. 상속
상속의 개념
- 상속은 다른 클래스 간의 관계를 설정하고 계층적 순서로 정보를 관리하며 코드를 재사용하기 위함
- 새로운 클래스를 만들 때, 원하는 코드 중 일부가 포함된 클래스가 이미 있는 경우 기존 클래스에서 새 클래스를 파생(상속) 시킬 수 있음.
- 이렇게 함으로써 기존 클래스의 멤버 변수와 메서드를 재사용할 수 있음.
- 부모 클래스 = 슈퍼 클래스, 기본 클래스
- 다른 클래스에 멤버 요소(메서드와 변수)를 상속하는 클래스로 상위 클래스
- 자식 클래스 = 서브 클래스, 파생 클래스
- 다른 클래스의 멤버 요소를 상속받은 클래스로 하위 클래스
- 자식 클래스는 부모 클래스의 모든 멤버 요소를 소유할 뿐만 아니라 그 밖에도 고유한 멤버 메서드와 변수를 추가할 수 있음.
상속의 필요성
- 상속: 기존 클래스의 기능을 사용하여 새 클래스를 만드는 기술
- 한 클래스가 다른 클래스의 특징(멤버 메서드와 변수)을 가져오도록 하는 자바 객체지향 프로그래밍의 필수적인 부분임.
- 클래스 간의 관계를 더 잘 이해할 수 있고 프로그램 구조를 더욱 조직화할 수 있기 때문에 코드의 가독성과 해석 가능성이 향상됨
- 응용 프로그램의 유지, 관리에 유용함
상속의 단점
: 두 클래스(부모/자식)가 밀접하게 결합 → 서로 독립적일 수 없음.
단일 상속
- 클래스가 하나의 클래스에 의해서만 확장되는 것으로, 단일 수준 상족이라고도 함
- 단일 부모 클래스에서 자식 클래스를 만들기 때문에 기본 클래스(부모 클래스)와 파생 클래스(자식 클래스)가 각각 하나뿐임
- 자식 클래스는 단일 기본 클래스로부터만 속성과 행동을 상속받고, 부모 클래스의 모든 메서드와 변수에 접근할 수 있음.
2. 상속의 유형 (this 사용)
⭐ this 사용
: 상속받은 자식 클래스 자신을 가리키는 레퍼런스 변수
- 자식클래스의 인스턴스가 생성될 때 자동으로 생성
public class Car{
String modelName;
int modelYear;
public Car(String modelName, int modelYear) {
this.modelName = modelName;
this.modelYear = modelYear;
}
}
⭐ this vs this( ) 비교
this | this() |
객체 자신을 나타내는 변수, 자신의 객체에 접근할 때 사용 |
같은 클래스에서 생성자가 다른 생성자를 호출할 때 사용 |
주로 멤버변수와 매개변수의 이름이 동일할 때 이를 구분하기 위해 사용 | 주로 코드의 중복을 줄일 목적 (생성자 코드에서만 사용할 수 있음) |
this() : 생성자 Chain에서만 사용 this() : 사용시 첫번째 문장으로 다른 코드부다 가장 윗줄에 위치 static 메서드에서 사용할 수 없음 |
⭐ super를 이용한 부모 클래스 참조
: 자바의 상속에서 자식 클래스가 부모 클래스로부터 상속을 받으면 자식 클래스는 부모 클래스를 참조하기 위해 super 키워드를 사용
⭐ super를 이용한 부모 클래스의 생성자 접근
- super( )는 부모 클래스의 생성자를 호출
- 자식 클래스의 생성자 첫 행에 이 명령어(super())가 있어야 함.
- 자식 클래스의 생성자가 부모 클래스의 생성자를 명시적으로 호출하지 않으면 자바 컴파일러는 부모 클래스의 매개변수가 없는 생성자(기본 생성자)를 자동으로 호출
- 이때 부모 클래스에 매개변수가 없는 생성자가 존재하지 않으면 컴파일타임 오류가 발생함.
3. 다형성
다형성의 필요성
- 하나의 객체가 여러 가지 유형을 띠는 것을 다형성이라고 함
- 다형성을 통해 상속과 메서드 재정의를 활용함
- 부모 클래스의 참조 변수로 자식 클래스의 객체에 접근함
- 상위 클래스에서는 공통적인 부분을 제공하고 하위 클래스에서는 각 클래스에 맞는 기능을 구현할 수 있음.
프로그래밍에 다형성을 적용 시 장점
- 단일 메서드를 다른 클래스에서 다르게 작동할 수 있음
- 동일한 구현에 대해 다른 메서드명을 선언할 필요가 없음
- 상속을 더 쉽게 구현할 수 있음.
다형성을 적용 시 단점
- 다형성은 구현하기 어려운 개념
- 프로그램의 가독성이 떨어질 수 있음
- 런타임 다형성(오버라이딩)의 경우 컴파일러가 실행 중에 메서드의 반환 유형이 결정되므려 시스템 성능을 저하
⭐ 다형성의 유형
- 컴파일타임 다형성(오버 로딩)
- 컴파일타임 다형성은 정적 다형성으로, 이러한 유형의 다형성은 연산자 오버로딩과 메서드 오버로딩으로 구현함메서드명이 같지만 다른 매개변수를 사용하는 프로세스
-
메서드는 인수의 개수나 유형을 변경함으로써 오버로딩될 수 있으며, 컴파일러는 프로그램을 컴파일하는 동안 호출할 메서드를 결정
-
메서드 오버로딩은 공간 효율적이고, 메서드명이 동일하여 이해하기 쉽기 때문에 프로그램 디버깅이 더 수월함
- 런타임 다형성(오버 라이딩)
- 동적 메서드로 재정의된 메서드에 대한 메서드 호출이 런타임에 해결되는 프로세스로, 이러한 유형의 다형성은 메서드 오버라이딩으로 구현함.
-
부모 클래스로부터 상속받은 메서드를 자식 클래스에서 특정한 형태로 재정의
-
자식 클래스가 부모 클래스로부터 같은 이름, 개수와 유형이 같은 인수, 같은 메서드 반환형을 가진 메서드를 상속받아서 구현하기 때문에 메서드 재정의라고도 함
-
-
프로그램 실행 중에 호출할 메서드를 결정하는 메서드 오버라이딩은 동일한 기능을 구현한 자식 클래스에서 동일한 메서드를 사용함으로써 코드의 복잡성을 줄이고 일관성을 향상
'Java' 카테고리의 다른 글
Chap 05. 추상 클래스와 인터페이스 심화 (0) | 2024.04.22 |
---|---|
Chap 03. 클래스/객체 (0) | 2024.04.22 |
Chap 02. 배열과 문자열 (1) | 2024.04.20 |
Chap 01. 객체지향 프로그래밍 (0) | 2024.04.20 |
JAVA 배열의 기초와 다차원 배열 (0) | 2024.01.14 |
댓글