-
학원 DAY 14. 메소드 재정의(오버라이딩)기록 2022. 10. 2. 17:30
변화가 발생했을 때 새로운 기능을 만들기보다는 기존의 기능을 더 좋게 만드는 게 일반적인데,
이때, 메소드 재정의 방식을 쓴다.
새 메소드를 정의하는 것은 해결책이 아니다.
그래서 ‘메소드 재정의’라는 것이 있다.
상위클래스에서 전달받은 메소드와 똑같은 이름으로 메소드를 다시 만드는 것이다.
프린터 printer = new 레이저프린터();에서 new 뒤에 어떤 프린터가 오든 프린터 printer로 작성해놓으면 메소드 이름을 변경하지 않아도 된다.
제일 최후에 재정의한게 실행이 된다.
<< 메소드 재정의 요건 >>
1. 상속관계여야 한다.
2. 클래스 형변환
3. 조상 클래스에도 내가 실행하고 싶은 기능이 있어야 한다. 즉, 같은 메소드를 갖고 있는 상위객체를 참조하고 있어야 한다.
아래 그림처럼 Object에는 print기능이 없으면 재정의가 실행되지 않는다.
<< 다형성 >>
똑같은 Printer를 바라봐도 어떤 객체를 만들었느냐에 따라서 결과가 다르게 발현된다. 사용방법이 달라지지는 않았는데 사용하는 객체를 바꿨더니 실행결과가 다르게 나온다.
new 뒤에 객체만 바꿔주고 메소드는 건들지 않아도 메소드 재정의를 사용하여 실행결과를 다르게 할 수 있다.
* 메소드 중복정의(오버로딩) 목적 : 비슷한 작업은 같은 이름으로 (일관되게 하나의 이름으로) 사용하고 싶음
* 메소드 재정의(오버라이딩) 목적 : 사용방법의 통일 (객체가 다르더라도 같은 사용법을 갖게 하는 것)
메소드 재정의는 확장에 열려있고 (여러 객체를 쓸 수 있어서) 변화에 닫혀있다. (클래스의 소스코드를 바꾸지 않으니까, 수행방법이 달라지지 않았으니까)
=> 객체지향 개발방법(SOLID) 5대 원칙 중 개방폐쇄의 원칙(OCP)을 구현한 것이다.
=> 객체지향 개발방법(SOLID) 5대 원칙 중 의존성역전의 원칙(dip)을 구현한 것이다.
의존성 역전이란, 내가 필요로 하는 객체를 내가 스스로 만드는 게 아니라 외부에서 전달받았을 때를 말한다.
'기록' 카테고리의 다른 글
학원 DAY 16. 상속과 구현 (0) 2022.10.02 학원 DAY 15. 추상화, 인터페이스, 추상클래스 (0) 2022.10.02 학원 DAY 14. 강제클래스 형변환 (0) 2022.10.02 학원 DAY 13. 클래스 형변환 (0) 2022.10.02 학원 DAY 13. 상속, SUPER (0) 2022.10.02