※ 본 글은 Oracle의 java-developers-guide를 참고하였습니다.
자바에 대한 개인적 공부와 정리를 위해 Oracle의 공식적인 자바 개발자를 위한 가이드를 보며
주기적으로 글을 작성하도록 해본다.
1.1.1 자바와 OOP(객체지향 프로그래밍) 용어
- 클래스
- 오브젝트
- 인터페이스
- 캡슐화
- 상속
- 다형성
1.1.1.4 상속(Inheritance)
상속은 객체 지향 프로그래밍 언어의 중요 기능이다. 상속을 통해 클래스는 다른 클래스의 속성을 포함할 수 있다.
속성을 상속하는 클래스는 자식 클래스 또는 서브클래스라고 하며, 속성이 상속되는 클래스는 부모 클래스 또는 슈퍼클래스라고 한다. 이 기능은 이미 정의된 코드를 재사용하는 데에 도움이 된다. 1-1에 예시된 것처럼, Employee 클래스를 상속하는 FullTimeEmployee 클래스를 만들 수 있다. 상속되는 속성은 슈퍼클래스의 각 필드와 메서드에 선언된 접근 제어자에 따라 다르다.
- ex) FullTimeEmployee
class Employee {
private String id;
public String lastName;
public String getId() {
return id;
}
public vodi setId() {
this.id = id;
}
}
public class FullTimeEmployee extends Employee {
public int salary;
public void displayFullTimeEmployeeDetails() {
System.out.println("ID: " + getId() + ", Last Name: " + lastName + ", Salary: " + salary);
}
}
- 'Employee' 클래스를 상속받는 'FullTimeEmployee' 클래스는 추가적으로 'salary' 필드를 가지고 있으며, 새로운 메서드 'displayFullTimeEmployeeDetails()'를 정의하여 모든 속성을 출력할 수 있다.
public class Main {
public static void main(String[] args) {
FullTimeEmployee ftEmployee = new FullTimeEmployee();
ftEmployee.setId("215 63 2179");
ftEmployee.lastName = "Smith";
ftEmployee.salary = 50000;
ftEmployee.displayFullTimeEmployeeDetails(); // 출력: ID: 215 63 2179, Last Name: Smith, Salary: 50000
}
}
1.1.1.5 인터페이스(Interfaces)
Java는 단일 상속만을 지원한다. 즉, 각 클래스는 하나의 클래스에서만 필드와 메서드를 상속받을 수 있다. 여러 소스로부터 속성을 상속받아야 하는 경우, Java는 다중 상속의 형태로 인터페이스 개념을 제공한다. 인터페이스는 클래스와 유사하지만, 메서드의 시그니처만 정의하고 구현은 정의하지 않는다. 인터페이스에 선언된 메서드는 클래스에서 구현된다. 다중 상속은 클래스가 여러 인터페이스를 구현할 때 발생한다.
- ex) 'Bonus' 인터페이스
interface Bonus() {
void calculateBonus();
}
public class Employee {
private String id;
public String lastName;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
}
public class FullTimeEmployee extends Employee implements Bonus {
public int salary;
@Override
public void calculateBonus() {
System.out.println("Calculating bonus for full-time employee");
}
public void displayFullTimeEmployeeDetails() {
System.out.println("ID: " + getId() + ", Last Name: " + lastName + ", Salary: " + salary);
}
}
- FullTimeEmployee 클래스는 Employee 클래스를 상속받고, Bonus 인터페이스를 구현하여 calculateBonus() 메서드를 실제로 정의한다. 이를 통해 FullTimeEmployee 클래스는 Employee 클래스의 속성과 메서드를 상속받는 동시에, Bonus 인터페이스의 메서드를 구현할 수 있다.
public class Main {
public static void main(String[] args) {
FullTimeEmployee ftEmployee = new FullTimeEmployee();
ftEmployee.setId("215 63 2179");
ftEmployee.lastName = "Smith";
ftEmployee.salary = 50000;
ftEmployee.displayFullTimeEmployeeDetails(); // 출력: ID: 215 63 2179, Last Name: Smith, Salary: 50000 ftEmployee.calculateBonus(); // 출력: Calculating bonus for full-time employee
}
}
- 위의 예시에서 FullTimeEmployee 클래스는 Employee 클래스를 상속받아 id와 lastName 속성을 그대로 사용하고, salary 속성을 추가로 가지고 있다. 또한, Bonus 인터페이스를 구현하여 calculateBonus() 메서드를 정의하고 있다. 이렇게 하면 FullTimeEmployee 클래스는 Employee 클래스의 속성과 메서드를 재사용하면서도, 인터페이스를 통해 새로운 기능을 추가할 수 있다.
'자바 기초' 카테고리의 다른 글
자바 기초 개념 - 언어의 주요 특징 / JVM (0) | 2024.07.10 |
---|---|
자바 기초 개념 - 캡슐화 / 다형성 (0) | 2024.07.09 |
자바 기초 개념 - 객체 / 모듈 (0) | 2024.07.05 |
자바 기초 개념 - 클래스 (0) | 2024.07.04 |
객체지향 프로그래밍(1) (0) | 2022.07.12 |