object-oriented programming
프로그램(실제세계)를 객체(사물)라는 기본 단위로 나누고, 각 객체들간의 상호작용을 기본개념으로 합니다.
다시 말해, 컴퓨터 프로그램을 명령어의 목록으로 보는 시각에서 벗어나 여러 개의 독립된 단위, 즉 '객체'들의 모임으로 파악하고자 하는 것입니다!
추상화란, 클래스 내의 중요하고 공통된 특징을 추출해 하나의 클래스로 정의하는 것을 말합니다.
예를들어, 람보르기니와 페라리 2대의 차는 핸들, 바퀴, 문, 창문 등의 요소를 가진다. 이렇게 람보르기니와 페라리는 서로 다른 객체이지만 공통된 특징과 기능을 지니고 있다. 이런 공통점을 모아 하나의 '자동차'라는 범주, 즉 '클래스'로 묶을 수 있다.
자바에서는 하나 이상의 추상 메소드를 포함하는 클래스를 가리켜 추상 클래스라고 한다. 반드시 사용되어야 하는 메소드를 추상 클래스에 추상 메소드로 선언해 놓으면,
이 클래스를 상속받는 모든 클래스에서는 해당 추상 메소드를 반드시 재정의해야 한다.
이를 통해 각 개별 개체의 구체적인 구현에 대한 상세함을 갖출 수 있다.
자식 클래스에서 반드시 오버라이딩해야만 사용할 수 있는 메소드를 의미한다. 자바에서 추상 메소드를 선언하여 사용하는 목적은
추상 메소드가 포함된 클래스를 상속받는 자식 클래스가 반드시 추상 메소드를 구현하도록 하기 위함
이다.
기존의 클래스에 기능을 추가하거나 재정의하여 새로운 클래스를 정의하는 것을 의미합니다.
상속을 이용하면 기존에 정의되어있던 부모 클래스의 모든 필드와 메소드를 물려받아, 새로운 클래스를 생성할 수 있습니다.
이때 기존에 정의 되어있던 클래스를 부모 클래스(parent class)
, 상속을 통해 새롭게 작성되는 클래스를 자식 클래스(child class)
이다.
class 자식클래스 extends 부모클래스 {...}
부모 클래스는 자식 클래스에 포함되어 있습니다. 자식 클래스에 새로운 필드가 추가되어도 부모 클래스에는 영향을 미치지 않지만, 부모 클래스에 새로운 필드가 추가되면 자식 클래스는 자동으로 해당 필드가 추가된 것처럼 동작하게 됩니다!
super 키워드는 부모 클래스로부터 상속받은 필드나 메소드를 자식 클래스에서 참조하는 데 사용하는 참조 변수이다.
//book 클래스(부모 클래스)
public class Book {
public String name;
public String publisher;
Book() {
this.name="";
this.publisher="";
}
Book(String name, String publisher) {
this.name = name;
this.publisher = publisher;
}
void print() {
System.out.printf("print:Book");
}
}
public class Novel extends Book{
//Novel 클래스(자녀 클래스)
public String name;
public String publisher;
Novel(String name, String publisher) {
super(name, publisher);
}
@Override
void print() {
System.out.printf("print:Novel");
}
}