1. 다형성
자바에서는 다형성을 지원하기 위한 기능으로 override & overload 기능이 있다.
overload - 같은 이름의 메소드를 여러개 가지면서 매개변수의 유형과 개수가 다르면 다른 메소드로 인식하여 자바 내부에서 판단해주는 기술.
override - 상위 클래스가 가지고 있는 메소드를 하위 클래스가 재정의해서 사용하도록 해주는 기술. override , 재정의라고 한다.
이름이 비슷해 헷갈리기 쉬운 개념인데 확실히 알고 가야 객체지향 기반의 자바에서 중요한 3 요소를 이해할 수 있으니 잘 알아둬야 한다.
1-1. overload
오버로딩(overloading)은 메소드 오버로딩과 생성자 오버로딩이 있다. 그러나 결국 같은 개념으로서 같은 이름의 함수를 여러개 정의하고 매개변수의 유형과 갯수등을 통해 다양한 유형의 호출을 판별하여 응답하는 것이다.
c언어 같은 경우에는 다른 기능, 다른 매개변수를 받는 경우일지라도 메소드의 이름이 같은 경우에는 무조건 같은 메소드로 취급하여 - 메소드의 내용을 판별하는 것이 아닌 이름 자체로 호출한다 - 에러 메세지를 출력하나 자바에서는 같은 이름의 메소드일지라도 매개변수의 유형이나 갯수에 따라서 다른 메소드로 판별하여 호출시에 들어가는 변수를 통해 각기 다른 메소드로 인식하고 판별하여 알맞는 메소드를 호출하도록 하는 기능을 제공하고 있다. 해당 기능을 오버로딩이라고 부르는 것이다. 흔히 클래스를 만들고 생성자를 다양한 방식으로 여러개 만드는 경우를 무의식적으로 행했던 경우가 있었을 텐데 해당 부분이 overloading이다.
이처럼 각기 다른 메소드로 인식하는 것을 볼 수 있다.
1-2 override
상위 클래스가 가지고 있는 멤버 변수가 하위 클래스로 상속되는 것처럼 상위 클래스에서 가지고 있는 메소드를 하위 클래스에서도 똑같이 사용할 수가 있는데, 만일 하위클래스에서 동일 유형, 동일 매개변수를 이용해 동일한 이름을 가진 메소드를 만들고 기능을 다르게 만들었다면 하위클래스에서 만든 메소드의 기능으로 작동을 한다. 이를 overriding이라 하며 또한 재정의라고 한다.
3. 오버로딩과 오버라이딩의 차이와 성립 조건.
4. 오버로딩된 메소드를 형변환하면?
오버로딩된 메소드를 부모클래스로 형변환시키면 어떻게 되는지를 알아보자.
사진을 보면 강제로 메인에서 부모클래스를 자식클래스로 형변환시켰다. 이때 printInfo클래스는 overriding된 상태인데, 실행시켜보면 원래 부모클래스에서 만들어진 printInfo가 아닌 자식클래스에서 만들어진 printInfo로 재정의 된 것을 볼 수 있다.
이를 가상 메소드 호출이라고 하며, 재정의된 메소드가 덮어씌워져 우선시됨을 알 수 있다. 물론 실제로는 부모클래스에는 없고 자식 클래스에만 있는 메소드이지만 다형성을 위해 이를 가능하게 한 것이라고 볼 수 있다.
해당 기능을 통해 위 사진과 같이 override의 다형성을 이용할 수 있다. 하나의 부모 클래스를 통해서 형변환을 통해 자식 클래스들을 받아들여 사용할 수 있게 됨으로써 일괄적으로 처리가 가능해진다. 실무에서 유용한 스킬이니 알아두면 좋은 방법이다.
위 사진은 형변환 & 다형성을 통해 부모 클래스에서 없는 메소드들을 불러볼 수 있는 코드이다.
원래대로라면 자식클래스에서 만들어진 메소드는 부모클래스에서 불러올 수 없지만 다형성을 이용해 부모클래스의 형변환이 무엇으로 되어있는지를 판별하여 그를 원래 형태로 되돌린 후에 해당 메소드를 호출한다.
instanceof는 연산자로서 참조변수가 참조하고 있는 인스턴스의 실제 타입을 알아보기 위해 사용한다. 주로 조건문에서 사용되며 왼쪽에는 참조변수, 오른쪽에는 타입(클래스)명이 피연산자로 위치한다. 그리고 연산의 결과값으로 true || false를 반환한다.
'Programming > Java' 카테고리의 다른 글
equals, hashcode (0) | 2016.01.21 |
---|---|
Singletone pattern / Synchro (0) | 2016.01.21 |
상속 - 2 (0) | 2016.01.20 |
상속 (0) | 2016.01.19 |
JAVA Static 변수 생성 주기 (0) | 2016.01.15 |