728x90
반응형
객체지향
- 객체지향은 객체지향적인 방식으로 중복 코드를 없애기 위해서 존재한다.
- 객체지향적인 구조를 위해서 일부러 중복코드를 허용하는 경우도 있다.
상속이란?
- 상속이란 기존 클래스의 변수와 메소드를 물려 받아 새로운 클래스를 구성하는 것을 의미한다.
- 상속은 캡슐화, 추상화, 다형성 등 객체지향 프로그래밍에서 중요한 역할을 하는 개념이다.
상속의 목적
- 기존 클래스의 변수와 코드를 재사용할 수 있다. 즉, 유지보수가 쉽고, 중복이 적고, 통일성이 있는 코드를 작성할 수 있다.
- 클래스 간 계층적 분류 및 관리가 가능하여 유지보수가 용이하다.
- 코드를 공통적으로 관리해서 여러 코드의 추가 및 변경에 용이하다.
상속의 특징
- 부모 클래스의 생성자, 초기화 블럭은 상속이 안된다.
- 부모의 private 멤버는 상속은 되지만 접근이 안된다.
- 모든 클래스는 Object 클래스의 후손이다.
상속의 작성 방법
상속을 받는 클래스 뒤에 extends 키워드를 사용한다.(단, 상속은 한개의 클래스만 가능하다)
class 오리{
void 날다();
}
class 흰오리 extends 오리{
void 수영();
}
흰오리는 오리를 상속받아서 '날다' 기능도 사용할 수 있다.
super 키워드
- 하위 클래스에서 가지는 상위 클래스에 대한 참조 값
- super()는 상위 클래스의 기본 생성자를 호출 함.
- 하위 클래스에서 명시적으로 상위 클래스의 생성자를 호출하지 않으면 super()가 호출됨. (반드시 상위 클래스의 기본 생성자가 존재 해야 함)
- 상위 클래스의 기본 생성자가 없는 경우(다른 생성자가 있는 경우) 하위 클래스에서는 생성자에서는 super를 이용하여 명시적으로 상위 클래스의 생성자를 호출 함
- super는 생성된 상위 클래스 인스턴스의 참조 값을 가지므로 super를 이용하여 상위 클래스의 메서드나 멤버 변수에 접근할 수 있음.
// Customer.java
// 디폴트 생성자 없애고 매개 변수가 있는 생성자 추가
public Customer(int customerID, String customerName) {
this.customerID = customerID;
this.customerName = customerName;
customerGrade = "SILVER";
bonusRatio = 0.01;
System.out.println("Customer(int, String) 생성자 호출");
}
// VIPCustomer.java
// super를 이용하여 상위 클래스의 생성자 명시적으로 호출
public VIPCustomer(int customerID, String customerName) {
super(customerID, customerName);
customerGrade = "VIP";
bonusRatio = 0.05;
salesRatio = 0.1;
System.out.println("VIPCustomer(int, String) 생성자 호출");
}
메서드 오버라이딩
- 상위 클래스에 정의된 메서드의 구현 내용이 하위 클래스에서 구현할 내용과 맞지 않는 경우 하위 클래스에서 동일한 이름의메서드를 재정의 할 수 있음.
- 재정의 하여 구현해야 함.
class 오리{
void 날다(){
System.out.println("날다");
}
}
class 흰오리 extends 오리{
void 날다(){
System.out.println("못날다");
}
}
다형성(polymorphism) 이란?
- 하나의 코드가 여러 자료형으로 구현되어 실행되는 것
- 같은 코드에서 여러 다른 실행 결과가 나옴
- 정보은닉, 상속과 더불어 객체지향 프로그램밍의 가장 큰 특징중 하나이다.
- 다형성을 잘 활용하면 유연하고 확장성 있고, 유지보수가 편리한 프로그램을 만들 수 있다.
class Animal{
public void move() {
System.out.println("동물이 움직입니다.");
}
public void eating() {
}
}
class Human extends Animal{
public void move() {
System.out.println("사람이 두발로 걷습니다.");
}
public void readBooks() {
System.out.println("사람이 책을 읽습니다.");
}
}
class Tiger extends Animal{
public void move() {
System.out.println("호랑이가 네 발로 뜁니다.");
}
public void hunting() {
System.out.println("호랑이가 사냥을 합니다.");
}
}
class Eagle extends Animal{
public void move() {
System.out.println("독수리가 하늘을 날아갑니다.");
}
public void flying() {
System.out.println("독수리가 날개를 쭉 펴고 멀리 날아갑니다");
}
}
다형성을 사용하는 이유?
- 다른 동물을 추가하는 경우
- 상속과 메서드 재정의를 활용하여 확장성 있는 프로그램을 만들 수 있음.
- 그렇지 않는 경우 많은 if-else if문이 구현되고 코드의 유지보수가 어려워짐.
- 상위 클래스에서는 공통적인 부분을 제공하고 하위 클래스에서는 각 클래스에 맞는 기능 구현
- 여러 클래스를 하나의 타입(상위 클래스)으로 핸들링 할 수 있음.
728x90
반응형
'언어(Language) > Java' 카테고리의 다른 글
[Java] 추상 클래스(abstract class) (0) | 2023.02.28 |
---|---|
[Java] 형변환(업캐스팅), 다운캐스팅 (0) | 2023.02.24 |
[Java] 배열(Array) (0) | 2023.02.24 |
[Java] 반복문(while, for) (0) | 2023.02.24 |
[Java] 조건문(if, else if, switch - case) (0) | 2023.02.24 |