상속_메서드 오버라이딩
상속을 통한 코드 재사용에 대해 계속해서 학습중이다.
public class SuperAnimal {
int legCount;
public void move() {
System.out.println("동물은 움직입니다.");
}
public void eat() {
System.out.println("먹습니다.");
}
public void breath() {
System.out.println("동물은 숨도 쉬죠.");
}
}
public class AnimalMain {
public static void main(String[] args) {
SubCheetah cheetah = new SubCheetah();
cheetah.eat(); // 먹습니다.
cheetah.move(); // 동물은 움직입니다.
cheetah.run(); // 치타는 달립니다.
cheetah.breath(); // 동물은 숨도 쉬죠.
}
}
상속의 강점은 코드의 재사용에 있다고 했다.
동물은 움직인다.
그런데, 그냥 움직일까(move)?
거북이는 느리게, 토끼는 빠르게, 치타도 빠르게 움직인다.
이렇듯 같은 행동에 대해 다른 모양새를 띄게 될 때, 띄게 하고 싶을 때가 자연스럽게 발생하는데,
이러한 근심거리를 해결 해주는 것이 바로 '오버라이딩' 이다.
public class SubCheetah extends SuperAnimal {
public void run() {
System.out.println("달린다! 빠르다! 빠르게 달린다");
}
@Override
public void move() {
System.out.println("치타는 빠르게 움직입니다.");
}
}
SuperAnimal 을 상속 받는 SubCheetah 에서 move() 를 정의하면 자연스럽게 SuperAnimal 의 move 내용이 덧씌워진다.
메서드를 오버라이드 한 후 재실행 해보면, 아래와 같아진다.
as is : cheetah.move(); // 동물은 움직입니다.
to be : cheetah.move(); // 치타는 빠르게 움직입니다.
이(오버라이딩)를 통해 같은 동작에 대해 인스턴스별 개성을 살릴 수 있게 된다.
Override
중간에 @Override 라는 단어가 보일 것이다. @ 가 붙은 부분을 '애노테이션(Annotation)이라 한다.'
애노테이션은 주석과 비슷하지만 '프로그램이 읽을 수 있는 특별한 주석' 이다.
일반 주석은 개발자만 인식한다. 반면, 애노테이션은 '프로그램이 읽을 수 있다.'
'읽을 수 있다' 는 것은 애노테이션에 의미가 담겨 있고, 프로그램은 그 의미를 해석할 수 있다는 뜻이다.
상세한 내용은 추후에 자세히 다뤄보기로 하자.
@Override 애노테이션은 해당 메서드가 '상위 클래스의 메서드를 오버라이드'하는 것임을 나타낸다.
컴파일러는 @Override 를 보고 메서드가 정확히 오버라이드 되었는지 확인한다.
오버라이딩 조건을 만족시키지 않으면 컴파일러 에러가 발생한다.

따라서 실수로 오버라이딩을 못 하는 경우를 방지해준다.
@Override 는 안 붙여도 프로그램 동작상의 문제는 없어 필수는 아니고 '선택(옵션)' 이지만,
1. 오류를 빨리 발견할 수 있음.
2. 가독성 등의 측면에서 명확성이 좋아짐.
과 같은 장점이 있으므로 명시 해주도록 하자.
오버라이딩과 메모리 구조

1, 주소값을 통해 인스턴스에 접근.
2. 치타에 접근
3. 오버라이딩 된 move() 반환. 원하는 메서드를 찾아 반환했으므로, super 클래스를 굳이 참조하지 않음.
메서드 오버로딩(Overloading) ? 메서드 오버라이딩(Overriding)?
학습하던 중 오버 로딩, 오버 라이딩 이란 단어를 계속해서 보고 있다.
슬슬 헷갈리지 않나? 정리 해보자.
메서드 오버로딩
ㄴ 매개변수가 다른 메서드를 여러 개 정의 하는 것.
ㄴ 메서드 이름이 같아야 함.
ㄴ loading 은 과적. 물건을 쌓는다는 의미
ㄴ 칸마다 기능이 다른 기차를 생각하면 편함
YH 특급열차
| 머리 | 침실 | 짐칸 | 머리 |
필요에 의해(인기가 너무 좋아져서) 칸(파라미터)를 늘림.
YH 특급열차
| 머리 | 식당칸 | 침실 | 예체능실 | 영화관 | 객실 | 머리 |
메서드 오버로딩
ㄴ 하위 클래스에서 상위 클래스의 메서드를 재정의 하는 과정. 상속 관계에서 사용됨.
ㄴ 뭔가 얹어서 덮어씌운는 것.
ㄴ 위에서 내려다 본 케익 생각하면 편함.
ㄴ 시작은 초코 케잌으로 시작했으나, 끝은 딸기케잌 일지니!!

내용이 섞이기 시작한 느낌이 든다.
쪼개 보자.